Open content and data infrastructure for self-hosted teams.

Use CairnCMS to model data, manage content, expose APIs, & automate workflows from one workspace built on SQL tables you control.

Key Features

What Teams Can Do with CairnCMS

CairnCMS brings data modeling, content operations, permissions, automation, dashboards, and file management into one no-code admin without moving your data into a proprietary layer.

Data modeling

A no-code studio for shaping and managing your data.

Bring an existing schema or build one from scratch in the CairnCMS studio. Define collections, fields, and relationships through the UI, or point CairnCMS at an existing database and let it reflect the schema that is already there. Either way, your data lives in standard SQL tables you fully control.

Explore data modeling
Config-as-code

Schema and configuration you can version and deploy.

Snapshot your schema, access rules, and settings into YAML files your team reviews like code. Preview every change against the target, then apply it from a laptop, against a remote server, or from a CI pipeline.

Read the config-as-code docs
you@waystone: ~/waystoneyou@waystone: ~/waystonedeploy-config · main · #142
~/waystone $ cairncms config snapshot ./config
? Directory "/home/you/waystone/config" is not empty. Overwrite? Yes
~/waystone $ git status --short config
M config/permissions/editor.yaml
M config/schema/articles.yaml
~/waystone $ git commit -am "Article summaries"
[main 4c1d2e7] Article summaries
~/waystone $ cairncms config apply ./config --url https://staging.waystone.dev --yes
The following changes will be applied:
Permissions:
- Create editor / articles / update
Fields:
- Create articles / summary
Plan: 2 to create, 0 to update, 0 to delete.
# CAIRNCMS_TOKEN comes from the repository secrets
$ cairncms config apply ./config --url "$PROD_URL" \
--dry-run --format json > plan.json || [ $? -eq 1 ]
$ jq -e '.protections == [] and all(.changes[]; .operation != "delete")' plan.json
true
$ cairncms config apply ./config --url "$PROD_URL" --yes
Plan: 2 to create, 0 to update, 0 to delete.
Content workspace

A content workspace built for every role.

Give teams an interface matched to the work they need to do. Collections, fields, and actions are scoped by permissions, so editors and other users can create and manage records, comment and @mention teammates, review revision history, and generate share links without being exposed to the underlying schema.

Tour the workspace
Access control

Granular permissions and access control.

Define unlimited custom roles with field-level permissions, conditional access rules, separate app and admin access controls, IP allowlists, and enforced two-factor authentication where needed.

Configure permissions
Editor App access 2FA enforced
Permissions
Collection Create Read Update Delete Share
Articles All access All access All access Custom access All access
Authors No access All access All access No access No access
Categories All access All access All access All access No access
Pages All access All access All access No access No access
Articles · Delete Editors can only delete drafts. status Equals draft
Author App access IP allowlist
Permissions
Collection Create Read Update Delete Share
Articles All access All access Custom access No access All access
Authors No access All access Custom access No access No access
Categories No access All access No access No access No access
Pages No access All access No access No access No access
Articles · Update Authors can only edit their own articles. author Equals $CURRENT_USER
Public Unauthenticated requests
Permissions
Collection Create Read Update Delete Share
Articles No access Custom access No access No access No access
Authors No access All access No access No access No access
Categories No access All access No access No access No access
Pages No access All access No access No access No access
Articles · Read The public only sees published articles. status Equals published
Automation builder

Automation without external tooling.

Build workflows directly inside CairnCMS. Trigger them from data events, incoming webhooks, cron schedules, or manual runs, then combine CRUD actions, conditional logic, email delivery, scripts, and external API calls. Each run is logged for inspection and debugging.

Build a flow
Insights

Real-time dashboards and insights.

Build no-code dashboards inside CairnCMS with metrics, time-series charts, tables, and rich text panels. Work from live data already in the system and control access through the same roles and permissions used across the admin.

Build a dashboard
File library

A file library that fits your storage.

Manage images and other assets in a built-in file library with folders, metadata, and image transformations. Keep the same workflow whether files live on local disk, S3, Google Cloud Storage, Azure Blob, or Cloudinary, and switch storage backends through configuration instead of rewriting the app.

Manage files
.env
STORAGE_LOCATIONS="local"STORAGE_LOCAL_DRIVER="local"STORAGE_LOCAL_ROOT="./uploads"
STORAGE_LOCATIONS="s3"STORAGE_S3_DRIVER="s3"STORAGE_S3_KEY="..."STORAGE_S3_SECRET="..."STORAGE_S3_BUCKET="waystone-assets"STORAGE_S3_REGION="us-east-1"
STORAGE_LOCATIONS="gcs"STORAGE_GCS_DRIVER="gcs"STORAGE_GCS_KEY_FILENAME="./gcs-key.json"STORAGE_GCS_BUCKET="waystone-assets"
STORAGE_LOCATIONS="azure"STORAGE_AZURE_DRIVER="azure"STORAGE_AZURE_CONTAINER_NAME="assets"STORAGE_AZURE_ACCOUNT_NAME="waystone"STORAGE_AZURE_ACCOUNT_KEY="..."
STORAGE_LOCATIONS="cloudinary"STORAGE_CLOUDINARY_DRIVER="cloudinary"STORAGE_CLOUDINARY_CLOUD_NAME="waystone"STORAGE_CLOUDINARY_API_KEY="..."STORAGE_CLOUDINARY_API_SECRET="..."
Operator-First

Launch Faster with CairnCMS

CairnCMS ships the APIs, realtime delivery, extensibility, identity integrations, and audit trail that production deployments need alongside the admin app.

A Project Named for What it Aims to Be

A cairn /kɛrn/ marks a route with something durable that no single person owns, and that anyone can find. CairnCMS was named for that idea.

Get involved
  • 1 Join GitHub discussions to share ideas
  • 2 Open issues for bugs or feature requests
  • 3 Improve the docs to help others adopt
  • 4 Contribute code once the approach is clear
Guiding Principles

Commitments to the CairnCMS Community

These are the principles that CairnCMS returns to when evaluating features, roadmap decisions, and governance choices.

01

Keep the core small, and extend at the edges.

Core features should solve common platform needs. Specialized needs belong in extensions, even when they matter to many users.

02

Govern transparently.

Document major decisions in public with rationale. Roadmap changes, deprecations, breaking changes, and project policy should be explained, not just announced.

03

Choose usefulness over novelty.

CairnCMS should prioritize features that solve recurring operational problems over features that merely look advanced.

04

Prefer depth over sprawl.

When choosing between surface area and improving what exists, CairnCMS should favor consistency, polish, and maintainability.

05

Respect the operator's environment.

CairnCMS should respect that users control their deployment, data, schema, and infrastructure. It should avoid unnecessary assumptions and fit into existing environments whenever practical.

FAQ

Frequently Asked Questions

Common questions about CairnCMS.

What is CairnCMS?

CairnCMS is an open-source platform for managing content and data in your own SQL database. It gives your team an admin app, generated REST and GraphQL APIs, permissions, automation, and realtime updates, while your data stays in standard tables you control. It's licensed under GPLv3 and built for teams that run their own infrastructure.

Is CairnCMS really a CMS?

CairnCMS is not a traditional CMS in that it isn't built around a fixed content model.

Instead, your SQL schema defines the model. CairnCMS then turns that model into a governed workspace with APIs, permissions, and workflows for managing structured content and operational data across many digital surfaces: websites, applications, dashboards, or internal tools, for example.

The "CMS" in CairnCMS reflects the modern role of content management, giving teams a governed workspace for the data and content their systems depend on.

What do you mean by "content and data infrastructure"?

CairnCMS is infrastructure in the application sense.

It does not replace your database, storage provider, or deployment platform. CairnCMS is an application layer on top of your SQL database and file storage backend. It adds the workspace, generated APIs, permissions, file management, dashboards, automation, and extension points needed to manage and govern the content and data your systems depend on.

Your database remains the source of truth. CairnCMS can read an existing schema or help you create a new one, but your application data stays in standard SQL tables you can inspect, query, back up, migrate, and use directly.

That is why CairnCMS is described as content and data infrastructure: it provides the operating layer around your data, while leaving you in control of the database, storage, and deployment model.

Can I use CairnCMS for production systems?

Yes. CairnCMS is intended for production self-hosted deployments, including larger and more complex systems, not just prototypes or demos.

Whether it is the right fit depends on your requirements, operating model, and comfort running the stack yourself, but the project is not positioned as a temporary or limited-use tool.

Can I run more than one CairnCMS server?

Yes. Run as many API servers as you need against the same database, connected through Redis. Scheduled automations and realtime updates coordinate across all of them.

What databases does CairnCMS support?

PostgreSQL, MySQL, MariaDB, and SQLite. Releases are tested against all four, including older PostgreSQL 10 and MySQL 5 versions.

Code for the commercial databases CockroachDB, Microsoft SQL Server, and Oracle is still present but untested, and support for them will eventually be deprecated. Treat them as unsupported, and validate them yourself if you depend on one.

How can I contribute to CairnCMS?

The best way to support CairnCMS is to use it, file issues when you find bugs, contribute fixes when you can, and share the project with people who might benefit from it.

Contributions go through the standard GitHub pull request workflow with the Developer Certificate of Origin sign-off requirement. The contributing guide has details. The AI policy explains the project’s expectations around AI-assisted contributions.

For larger changes, file an issue first to discuss the approach before investing significant time in implementation.

Sponsors

CairnCMS is supported by organizations that share the project's commitment to long-term, open-source infrastructure.