Skip to content

A content management system you run as your own application

You install it with one command, and it becomes your site — your theme, your content, your server. There is no account to sign up for, no plan to outgrow, and nothing phoning home.

Psst. This is the whole install:

curl -fsSL nibble.ink/install.sh | bash
schema/collections/posts.yml
schema: 1
title: Posts
route: /blog/{slug}
dated: true
blueprints: [post]
template: posts/show
search: site
sort: published_at:desc

Four short files are a page

The things that decide what your content looks like — the collections, the fields, the navigation — are files you keep beside the rest of your site. Change a file and the Control Plane changes with it.

schema/collections/posts.yml
schema: 1
title: Posts
route: /blog/{slug}
dated: true
blueprints: [post]
template: posts/show
search: site
sort: published_at:desc

Three decisions that shape everything else

Content can be files

A folder of Markdown can be a collection. A file is a page, a folder's index is the page its files sit under, and the folders become the navigation. These documentation pages are exactly that.

Server-rendered Vue

Inertia and Vue 3 with SSR: visitors get HTML immediately and search engines see a complete page, while you write components rather than templates.

One file, one server

SQLite holds the content and Solid Queue holds the jobs, so a whole site is one machine and one file you can copy. Back it up by taking the file.

What comes in the box

Everything a small site needs, and nothing that assumes you are a large one.

  • text
  • markdown
  • image
  • relation
  • date
  • toggle
  • blocks
  • assets
Blueprints
Fields, tabs and validation, declared in a file per content type.
Fieldtypes
Text, Markdown, rich text, assets, relations, grids, replicators and more.
Revisions
Every save kept, with a diff and a way back.
Publishing
Drafts, scheduled publishing and unpublishing, and a simple review workflow.
Assets
Folders, focal points, presets and alt text where it matters.
Search
A full-text index over whichever collections you name.
Forms
Declared like everything else, with submissions in the Control Plane.
SEO
Titles, descriptions, canonicals, sitemaps and structured data.
Users and roles
Permissions per collection, and an audit trail of who changed what.
Backups
Scheduled, restorable, and small enough to keep.
Webhooks
Tell another system when content changes.
Upgrades
A merge, a check, and a report of anything you edited in place.
New in 0.19

Your AI apps work here, as you

Claude, ChatGPT, Codex, Cursor and the nibble command connect to a Nibble site over MCP. Each works as the person who connected it, and never does more than that person can.

  • Connect at one address

    Every site answers MCP at /mcp. People sign in on the site itself and choose what the app may do, from read only to drafts to more.

  • Never more than the person

    What an app can do is the smallest of the person's roles, their choice and the site's settings, checked on every request.

  • Live changes wait for you

    Publishing and other live changes are held until the person approves them, and every change keeps its revision.

  • Build with an agent

    bin/rails nibble:dev:mcp gives Claude Code, Codex or Cursor renders, tests, logs and the docs as data while it builds your site.

Start where you are

A Control Plane that follows your files

Add a field to a blueprint and it appears. Write a collection as Markdown and its pages turn read-only, each one naming the file it came from.

The dashboard
Latest release
0.25.0 Read the changelog

From the blog

Every post

Install it in a few minutes

The walkthrough covers what the installer asks and why, and what to do when something goes wrong.

Installing Nibble