daptin is a free, open source content management systems (cms) project written in Go and released under LGPL-3.0. It has 1,899 GitHub stars, 122 forks and 28 open issues, and was last pushed 11 hours ago. On this registry it ranks #39 of 70 tracked projects in Content Management Systems (CMS), with 5 head-to-head comparisons available.

What is daptin?

What it is

Daptin is a self-hosted application server built in Go. It lives in the backend-as-a-service and headless CMS ecosystem, and it organizes behavior around schema files that describe records, fields, relationships, validation, and optional flags. Each configured table becomes a permission-aware JSON:API resource at /api/{entity}, and the server attaches identity, files, automation, integrations, realtime delivery, metering, and protocol surfaces around that runtime.

The concrete problem it addresses is defining a data model once and exposing it through multiple backend surfaces without rebuilding each API, permission rule, storage route, or operational control separately. Daptin records much of its capability as ordinary data, with rows in tables such as action, task, smd, cloud_store, site, integration, llm_provider, and api_plan telling the server what to execute or expose.

Key capabilities

  • Define resources in YAML or JSON schema files, with 41 column types, relations and joins, composite keys, validation and conformation, translations, audit, state, and metering flags.
  • Expose configured tables as JSON:API resources with CRUD operations, relationships, filtering, sorting, and pagination, plus a separate aggregation API, optional GraphQL, OpenAPI, metadata, and JavaScript model discovery routes.
  • Manage identity and access through users, groups, ownership, table, row, relation, and action permissions, JWT login flows, OTP, OAuth client connections, and OAuth 2/OIDC provider endpoints with JWKS.
  • Configure automation and operations as data by using system tables such as action, task, smd, cloud_store, site, integration, llm_provider, and api_plan for actions, schedules, storage, integrations, mail, and plans.
  • Attach realtime, files, storage, feeds, LLM routes, and built-in protocol surfaces around the same resource runtime.

Who uses it and how

  • Developers can evaluate Daptin locally with Docker, using the daptin/daptin:latest image and a Compose stack that binds Daptin to 127.0.0.1:6336 while keeping PostgreSQL private.
  • Linux users can download the latest release binary, run it on port 6336, open http://localhost:6336, and create the first administrator.
  • Kubernetes operators can follow the Kustomize deployment guide.
  • Teams can define their model in schema files and use JSON:API, GraphQL, WebSockets, feeds, files, OAuth/OIDC, LLM routes, and built-in protocols from one runtime.

Getting started

Daptin can be run with Docker using the daptin/daptin:latest image, with a Docker Compose stack for PostgreSQL-backed local evaluation, as a Linux binary, or through a Kubernetes Kustomize deployment.

When to use it — and when not to

Daptin suits self-hosters who want one schema to generate multiple API, identity, automation, and protocol surfaces, but it requires operating PostgreSQL, asset storage, mail, and permission configuration rather than relying on a hosted backend. The use of schema files and system tables gives flexibility, but adopters must configure, secure, and maintain those data-driven surfaces. The listed 28 open issues and missing contributor count are facts to consider before production adoption.

project readme (upstream, from github) — read inline
Daptin logo

Daptin

A self-hosted application server built around your data model.

Define resources once. Daptin runs their APIs, identity, permissions, files, automation, integrations, realtime delivery, and operational controls.

Latest release License: LGPL v3 Go Report Discord

Website · Quickstart · Feature map · Automation explained · Documentation


One model, many backend surfaces

Daptin loads schema files into its runtime configuration. Each configured table is recorded as world metadata and becomes a permission-aware JSON:API resource at /api/{entity}. The running server attaches its other API, automation, storage, integration, and protocol surfaces around that resource runtime.

Many capabilities are configured as ordinary data. Rows in tables such as action, task, smd, cloud_store, site, integration, llm_provider, and api_plan tell the running server what to execute or expose.

Part Plain-English meaning
Schema Describes the records, fields, relationships, validation, and optional behavior flags your application needs.
Resource runtime Turns every configured table into stored data plus CRUD and relationship APIs.
Permission gates Check access to the table, individual row, relation, or action before work is performed.
System tables Configure Daptin itself—actions, schedules, state definitions, storage, sites, integrations, mail, plans, and more.
Attached surfaces Expose the same model through JSON:API, optional GraphQL, WebSockets, feeds, files, OAuth/OIDC, LLM routes, and built-in protocols.

Read the source-oriented application server feature map for the runtime components behind this diagram.

Start in a minute

Docker

docker run --pull=always --rm -p 127.0.0.1:6336:8080 daptin/daptin:latest

For a durable local stack with PostgreSQL:

cp .env.example .env
docker compose up --wait

The Compose stack binds Daptin only to 127.0.0.1:6336 and keeps PostgreSQL inside its private network. Database and asset data are stored in named volumes. Change the development password in .env before using the stack beyond local evaluation. Kubernetes users should start with the Kustomize deployment guide.

Linux binary

curl -L -o daptin https://github.com/daptin/daptin/releases/latest/download/daptin-linux-amd64
chmod +x daptin
./daptin -port=6336

Open http://localhost:6336, create the first administrator, and continue with the Getting Started Guide.

The complete feature map

The table below groups the implemented surface by responsibility.

Capability What Daptin provides Learn more
Schema and data runtime YAML or JSON schema; 41 column types; relations and joins; composite keys; validation and conformation; translations; audit, state, and metering flags; import, export, and generated test data. Core concepts · Relationships · Validation
APIs and discovery JSON:API CRUD and relationships with filtering, sorting, and pagination; a separate aggregation API; optional GraphQL queries, mutations, and actions; OpenAPI, metadata, and JavaScript model discovery routes. API overview · GET reference · GraphQL
Identity and permissions Users, groups, ownership, default and access groups; table, row, relation, and action permissions; JWT login flows and OTP; OAuth client connections; OAuth 2/OIDC provider endpoints and JWKS. Permissions · OAuth authentication · OAuth provider
Actions and orchestration Actions with inputs, validation, conformations, conditions, ordered outcomes, CRUD steps, Go performers, client responses, and chained work; scheduled action invocation; state tracking; data exchange. Actions overview · Action reference · Task scheduling
Files, sites, and templates Encrypted credentials; rclone-backed local or cloud stores; asset columns and uploads; direct and presigned file flows; caching, ETags, gzip, and storage sync; sites, subsites, host/path routing, and Go templates. Cloud storage · Asset columns · Subsites · Templates
Realtime and protocols CRUD events over Olric PubSub and /live WebSockets; topic permissions and optional YJS collaboration; streams and RSS/Atom/JSON feeds; HTTP(S), SMTP/IMAP, FTP/FTPS, and WebDAV-style CalDAV/CardDAV routes. WebSocket API · Feeds · FTP server
Integrations and LLM routing OpenAPI v2/v3 operations installed as Daptin actions; REST, GraphQL, short-lived WebSocket, and unary gRPC transports; OAuth or custom credentials; multi-deployment LLM routing with OpenAI-compatible chat, Responses, embeddings, image generation, model discovery, streaming, tools, and structured output. The normalized three-resource gateway is available from v0.13.0. Integrations · LLM gateway · Compose example
Metering, clustering, and operations Plans, memberships, usage, quotas, credit hooks, and rate limits; metering for CRUD, actions, and LLM tokens; Olric cache, PubSub, counters, clustering, and outbox deduplication; audit logs, TLS, ping, statistics, config, logs, and profiles. API metering · Clustering · Audit logging · Production

Protocol scope: Daptin’s CalDAV/CardDAV routes provide basic WebDAV-style file storage. They are not documented as complete calendar/contact protocol implementations.

A small schema becomes a permission-aware API

Place schema_product.yaml beside the Daptin binary:

Tables:
  - TableName: product
    Columns:
      - Name: name
        DataType: varchar(200)
        ColumnType: label
        IsIndexed: true
      - Name: price
        DataType: float
        ColumnType: measurement
      - Name: published
        DataType: bool
        ColumnType: truefalse
        DefaultValue: "false"

When Daptin starts, it creates the table and exposes the resource through JSON:API:

GET    /api/product
POST   /api/product
PATCH  /api/product/{reference_id}
DELETE /api/product/{reference_id}

The shared middleware checks table and row access, validates and conforms data, applies metering when configured, and publishes successful CRUD events. Optional GraphQL, /openapi.yaml, /meta, and /jsmodel/{typename} expose additional ways to query or discover the same model.

Add relations, permissions, assets, or audit history as the resource needs them.

Actions, scheduled tasks, and state tracking

These are related building blocks, not one workflow engine:

Term What it actually stores What happens at runtime
Action Inputs, validation/conformation rules, conditions, permissions, and ordered output fields attached to a world entity. A call to /action/{type}/{name} or a GraphQL action can run CRUD outcomes, registered Go performers, and client-response outcomes.
Task A schedule, entity name, action name, attributes, active flag, job type, and an as_user relation. At server startup it is loaded into the cron scheduler. When due, Daptin loads that user’s identity and groups, then calls the same action handler inside a database transaction.
State machine definition (smd) An initial state and named events with allowed source and destination states. /track/start creates an {entity}_state record. /track/event verifies the current source state, records the transition, increments its version, writes audit data, and publishes an event.
Data exchange A mapping for synchronizing resource data with another source or destination. Exchange middleware runs before and after configured resource operations.

State tracking does not provide guards, entry/exit actions, parallel states, or hierarchical states. If a transition should perform work, invoke an action separately. See State Machines for the exact supported model.

Choose a starting point

I want to… Start here
Install and configure Daptin Installation · First admin setup
Model resources and query them Core concepts · API reference
Secure users, rows, and actions Permissions · Authorization scenario
Build reusable backend operations Actions · Custom actions
Schedule work or track record states Task scheduling · State machines
Connect external services or LLMs Integrations · LLM providers
Sell a paid plan through provider checkout Payments and checkout · Runnable example
Store files or host a subsite Cloud storage · Subsites
Meter or run Daptin in production API metering · Production deployment · Database setup

Ecosystem

Project Purpose
Daptin CLI Manage data, actions, OAuth, integrations, storage, and assets.
JavaScript client · Go client Connect applications to Daptin.
Schema samples Start from working schema examples.
LLM demo · Metering demo Explore metered AI and API products.
Integration auth demo · OAuth provider demo Explore integrations and identity.
Dadadash A larger application built on Daptin.

Documentation · Discord · Issues · Releases

LGPL v3

Frequently asked questions

Is daptin free to use?

daptin is open source under the LGPL-3.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does daptin do?

Self-hosted application server for schema-driven APIs, identity, files, automation, integrations, realtime, metering, and protocols.

What is daptin written in?

daptin is primarily written in Go. Its source is publicly available at https://github.com/daptin/daptin, and it has 1,899 GitHub stars.