Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

dpdpkit-server

Self-hosted dpdpkit server. It will run the dpdpkit REST API as a Docker image (ghcr.io/dpdpkit-dev/server), so apps in Node, PHP, Java or any other language get consent, notices, rights requests and retention over HTTP.

Disclaimer. dpdpkit is software that helps you implement obligations under India's Digital Personal Data Protection Act, 2023 and the DPDP Rules, 2025. It does not provide legal advice and does not guarantee compliance. Decisions about notices, purposes, retention and incident reporting must be made by you or your counsel.

Status

Alpha. Version 0.1.0a2 is the first working pre-release. APIs can still change between pre-releases.

The image is based on dpdpkit-fastapi and runs as non-root on a read-only file system:

docker run --read-only --tmpfs /tmp -p 8000:8000 ghcr.io/dpdpkit-dev/server

Configuration comes from environment variables or a mounted dpdpkit.yaml (environment wins):

docker run --read-only --tmpfs /tmp -p 8000:8000 \
  -v ./dpdpkit.yaml:/etc/dpdpkit/dpdpkit.yaml:ro \
  -e DPDPKIT_DATABASE_URL=postgresql://... ghcr.io/dpdpkit-dev/server
Setting Variable server: key Default
Config file DPDPKIT_CONFIG n/a /etc/dpdpkit/dpdpkit.yaml, then ./dpdpkit.yaml, if present
Bind address DPDPKIT_HOST host 0.0.0.0
Port DPDPKIT_PORT port 8000
Log level DPDPKIT_LOG_LEVEL log_level info
Migrate on start DPDPKIT_MIGRATE_ON_STARTUP migrate_on_startup false
Database URL (secret) DPDPKIT_DATABASE_URL or _FILE not allowed none
Signing key (secret) DPDPKIT_SIGNING_KEY or _FILE not allowed none

The settings are loaded and validated at start-up.

Webhooks: erasure.due and export.requested are sent signed (X-DPDPKit-Signature) and retried with backoff. After acting on its own data, your app confirms with the event id and the server records it in the ledger:

curl -X POST http://localhost:8000/v1/webhooks/confirmations -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"event_type": "export.requested", "event_id": "ev_...", "subject_id": "<request_id>", "status": "completed"}'

subject_id is the schedule_id (erasure.due) or request_id (export.requested) from the event data. A request that is never confirmed stays open and shows as overdue. Failed deliveries are listed at GET /admin/webhooks/dead-letters and can be re-queued with POST /admin/webhooks/redeliver.

Probes and metrics (no credentials, so keep them off the public internet): /healthz is liveness, /readyz answers 503 until the database responds, and /metrics is Prometheus text (HTTP requests, worker job runs and last success time, webhook deliveries by status).

The periodic jobs (retention, daily ledger verification, root-hash export, webhook delivery) run in a separate container from the same image. Run exactly one:

docker run --read-only --tmpfs /tmp -p 8001:8000 -e DPDPKIT_DATABASE_URL=... ghcr.io/dpdpkit-dev/server worker

The worker serves the same /healthz, /readyz and /metrics on its port.

With Docker Compose (Postgres, the API and one worker; copy .env.example to .env and fill in the secrets first):

cp .env.example .env
docker compose up

It mounts dpdpkit.example.yaml as the config: edit the purposes, notice and webhooks: list for your app. Examples of an app talking to the server: examples/node-express (token minting, signed webhooks, confirmations; has tests) and a Laravel snippet for the same two jobs.

Images are published for linux/amd64 and linux/arm64 under one tag, signed with cosign (keyless, from the release workflow) and carry an SBOM and build provenance. Verify before you run:

cosign verify ghcr.io/dpdpkit-dev/server:<version> \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com \
  --certificate-identity-regexp '^https://github.com/dpdpkit-dev/dpdpkit-server/\.github/workflows/release-image\.yml@refs/tags/v'

With a database configured the server serves the consent and rights API under /dpdp (same contract as dpdpkit-fastapi). Widgets call it with an end-user token from POST /v1/tokens; admins use the session from POST /admin/login. The shared conformance suite runs against the app in the tests and against the built image in CI (DPDPKIT_CONFORMANCE=1 swaps the credentials for the suite's test headers; never set it outside tests).

Documentation: https://dpdpkit-dev.github.io/dpdpkit-docs/dev/

License

Apache-2.0. See LICENSE. Contributions need a DCO sign-off; see CONTRIBUTING.md.

Metadata

Release files for dpdpkit-server 0.1.0a2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dpdpkit-server 0.1.0a2
File Size Uploaded Provenance Actions
dpdpkit_server-0.1.0a2.tar.gz 29.0 kB With provenance Details for dpdpkit_server-0.1.0a2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for dpdpkit-server 0.1.0a2
File Interpreter ABI Platform Actions
dpdpkit_server-0.1.0a2-py3-none-any.whl Python 3 none any Details for dpdpkit_server-0.1.0a2-py3-none-any.whl

Total release size: 53.6 kB

Release files / dpdpkit_server-0.1.0a2.tar.gz

Download URL dpdpkit_server-0.1.0a2.tar.gz
Size 29.0 kB
Tags Source
SHA-256 checksum
How to use checksums
2adf23f0fce6a3507c1d0efcb62db5b87cca441b1d1455439a813a0fc803410b
BLAKE2b-256 checksum
How to use checksums
516101d42777802bba6b222bae1c7ef80d7dee89521736f3fde585b4f2f3aae8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.

Transparency log

Release files / dpdpkit_server-0.1.0a2-py3-none-any.whl

Download URL dpdpkit_server-0.1.0a2-py3-none-any.whl
Size 24.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cde8a496815768dc2161c898d873cca72acd4181a1b1f8d2d77bc99ab32477cc
BLAKE2b-256 checksum
How to use checksums
a99ce0a57470b6d733dea60c8a3ba00d9b0be4c3255a372a21c5ff856e813b5f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.

Transparency log

Security for dpdpkit-server 0.1.0a2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for dpdpkit_server-0.1.0a2.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page