Skip to main content

No project description provided

Project description

datasette-paper

PyPI Changelog Tests License

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

datasette_paper-0.0.1a12.tar.gz (460.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

datasette_paper-0.0.1a12-py3-none-any.whl (443.5 kB view details)

Uploaded Python 3

File details

Details for the file datasette_paper-0.0.1a12.tar.gz.

File metadata

  • Download URL: datasette_paper-0.0.1a12.tar.gz
  • Upload date:
  • Size: 460.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","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

Hashes for datasette_paper-0.0.1a12.tar.gz
Algorithm Hash digest
SHA256 7a5f251b3cbbeddc2775b740c30b233920c7a7cc18eb2ca002e072c5eee31866
MD5 c2eadc7505f8d789354131719af9feba
BLAKE2b-256 e28184d6d7c397102d2c2843db24f9f3005b753be68cef92c290a9ad9bf10519

See more details on using hashes here.

File details

Details for the file datasette_paper-0.0.1a12-py3-none-any.whl.

File metadata

  • Download URL: datasette_paper-0.0.1a12-py3-none-any.whl
  • Upload date:
  • Size: 443.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","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

Hashes for datasette_paper-0.0.1a12-py3-none-any.whl
Algorithm Hash digest
SHA256 22f6f6d707859498d026bf8d71dd344c14a24eeb8e9f0ab2cffc65b6c3b5d29f
MD5 c5e18fb6acf1f171ecc7f88e16dcb6a6
BLAKE2b-256 93dc32c009570f156b749ad200b162908fc15ad1cf9358af655de1ea0e44bc5b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page