Browse documentation

Installation and accounts

Start

Requires Python 3.11+ and Git on PATH. Shared SQL execution also requires Linux with Landlock ABI 2 or later (Linux 5.19+ with Landlock enabled); unsupported hosts refuse execution rather than running without isolation. Release wheels include the frontend, Monaco and its workers; Node.js is not needed to run the installed application.

pip install duckpad
duckpad start

The distribution is available on PyPI. Version tags also create a GitHub release with downloadable wheels. To install a downloaded wheel, use pip install <wheel-file>. See the release guide for publishing instructions.

If your Python installation is managed by the operating system, create and activate a virtual environment first:

python3 -m venv .venv
source .venv/bin/activate

Open the localhost address printed in the terminal. Sign in as admin using the password printed once on the first launch. The same password remains valid after a restart. The default instance directory is $XDG_DATA_HOME/duckpad, or ~/.local/share/duckpad. Authentication, connection settings and execution history are kept there, outside project repositories.

duckpad start --home /path/to/my-instance --port 8765 --no-browser

Only one backend may own an instance directory at a time. Use separate --home directories for independent instances. The default address is 127.0.0.1. Behind an HTTPS reverse proxy, set DUCKPAD_SECURE_COOKIES=1 so the session cookie is only sent over HTTPS.

For air-gapped deployments, download extensions on any connected computer and import them into Duckpad before running connectors that need them.

Successful GET requests used for background polling (workspace, resources, worktree snapshots, status, and generations) are logged at DEBUG. The default INFO level still shows other requests, including failed polling requests. Use duckpad start --log-level debug to include polling in the server logs.

Develop from source

Contributors also need uv and Node.js 20+. Setup provisions Python 3.12 and builds the interface:

git clone https://github.com/hugues31/duckpad.git
cd duckpad
bash scripts/setup.sh
uv run duckpad start --home .duckpad-dev --no-browser

See the contributing guide for development checks.

Accounts and project access

The initial admin account manages the instance. Open Instance settings → Users and permissions to create individual accounts, reset passwords, change instance roles, or deactivate/reactivate accounts. Passwords require at least 12 characters. Users can change their own password in Account menu → User settings; resets and deactivations revoke existing sessions.

  • Instance Admin manages accounts, configuration, connections and every project.
  • Instance Member sees only their projects and can create private projects. The creator becomes the project’s admin.
  • Project Reader can inspect the flow, SQL, history and existing results.
  • Project Editor can also edit content, run/cancel pipelines and export through authorized connections.
  • Project Admin can also manage participants and delete the project.

Open a project and select Project settings to add participants, change roles or remove access. Every instance and project must retain an active admin. Instance admins choose the connections authorized for each project on this screen. A project admin cannot grant connections or promote an instance admin. Readers can copy data they can see; read access is not an extraction restriction.

Existing installations preserve the original administrator password and assign legacy projects to that account. Old sessions require a new sign-in. Memberships, password hashes and connection grants remain in instance SQLite, outside project Git. See authorization and execution isolation for deployment requirements and file access boundaries.

Preferences and result lifetime

Instance admins can monitor server CPU and RAM in the workspace toolbar. Click either indicator for two minutes of history; samples refresh every two seconds. Measurements include the API process and its active SQL workers, with visible CPU affinity and Linux cgroup limits taken into account. Missing measurements appear as unavailable. History resets on reload or sign-out.

Language defaults to the first supported language in your browser preferences (English or French, with English as the fallback), and the theme defaults to your system color scheme. Manual choices are saved in this browser and take priority on subsequent visits.

Results live in memory per worktree and environment. After a backend restart, history remains available but previews and lineage require another manual run. Editing or changing an external source does not launch a run automatically.

Search the documentation

Type to search the guides.