No project description provided
Project description
datasette-paper
Collaborative document editor for Datasette. ProseMirror frontend, SQLite-backed storage in Datasette's internal database, real-time collaboration over SSE.
Installation
Install in the same environment as Datasette:
datasette install datasette-paper
Quickstart
datasette --internal papers.db \
-s permissions.datasette-paper-list true \
-s permissions.datasette-paper-create true \
-s permissions.datasette-paper-view true \
-s permissions.datasette-paper-edit true
No user database is required — papers live in Datasette's internal database.
Pass --internal <path> to persist papers across restarts. Without it,
Datasette uses an ephemeral tempfile for the internal DB that is deleted
when the process exits. The plugin emits a startup warning when it detects
this, so you don't lose your papers to a forgotten flag.
Permissions
Four actions gate access. The view/edit actions are per-paper; list/create are global.
| Action | Scope | Gates |
|---|---|---|
datasette-paper-list |
global | The paper index page and the list endpoint. |
datasette-paper-create |
global (also-requires list) |
Creating new papers. |
datasette-paper-view |
per-paper (PaperResource) |
Reading a specific paper (bootstrap, SSE, document, tasks). |
datasette-paper-edit |
per-paper (PaperResource, also-requires view) |
Modifying a specific paper (events, presence, rename, snapshot, share). |
The plugin registers a permission_resources_sql hook that resolves
per-paper view/edit grants from the _datasette_paper_doc.created_by
column (owners) and the _datasette_paper_share table (explicit grants
- link-visibility levels).
Sharing
Each paper has one of three visibility levels:
private— only the owner and explicitly-shared actors can access.link-view— any authenticated actor with the link can view.link-edit— any authenticated actor with the link can view and edit.
Plus per-actor share rows that grant a specific actor a viewer or
editor role on a single paper.
The owner is whoever created the paper (created_by, captured from the
actor cookie at create time). Only the owner can change visibility or
mutate shares.
Papers as data
Paper data lives in Datasette's internal database under tables prefixed
with _datasette_paper_:
_datasette_paper_doc— one row per paper (id, name, visibility, created_by)._datasette_paper_step— append-only log of ProseMirror steps._datasette_paper_snapshot— periodic full-document snapshots._datasette_paper_share— per-actor view/edit grants.
Wire protocol
JSON API rooted at /-/paper/api/... — no per-database segment. List/create
docs, bootstrap a paper, post step batches, stream updates over SSE, manage
shares, render markdown / extract tasks. See CLAUDE.md for the full
endpoint table.
Frontend stack
Vite + Svelte 5 + ProseMirror. Bundle outputs to datasette_paper/static/.
Development
npm install --prefix frontend
just frontend # build the bundle
just dev # run datasette with the plugin + permissions granted
just dev-with-hmr # vite dev server + watchexec restart
Run the test layers:
just test # backend pytest
just test-frontend # vitest
just test-e2e # playwright (requires built bundle)
Always invoke Python with uv run --prerelease=allow … — datasette is on
a >=1a23 pre-release pin.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file datasette_paper-0.0.1a3.tar.gz.
File metadata
- Download URL: datasette_paper-0.0.1a3.tar.gz
- Upload date:
- Size: 422.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.11 {"installer":{"name":"uv","version":"0.11.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f511afb4e739083e349d50d89cfc1774bbc576b531b6be6c271988a2a736c848
|
|
| MD5 |
75fc4ff5111bca3c183a77e34e479362
|
|
| BLAKE2b-256 |
71d1328294a1b99c4c86f050c0169070fe62c3acabfb4ac30e539cbd5597c064
|
File details
Details for the file datasette_paper-0.0.1a3-py3-none-any.whl.
File metadata
- Download URL: datasette_paper-0.0.1a3-py3-none-any.whl
- Upload date:
- Size: 412.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.11 {"installer":{"name":"uv","version":"0.11.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e0c9daf0a45eedadf07ed925a8c2e2c02c9bf3f68e895bf81ebffe0189aa5968
|
|
| MD5 |
adcef9f554981060d87984821dcf9f35
|
|
| BLAKE2b-256 |
b38c40bf947ad63dad9996a41b9b4c036e780fa8dffd6610a5e318330f1ec563
|