QuillRead the docs

Documentation platform for InkBot

Docs that your team and your bots keep up to date

Quill is a self-hosted documentation site with an admin portal for people and a REST API for bots. Every page is a Markdown file on your own server.

The platform

One site, written by hand or by your bots

Readers see a clean docs site. Your team edits it in the admin portal. Your InkBot bots edit it through the API. All three work on the same Markdown files.

Components

More than plain Markdown

Pages can use callouts, numbered steps, tabs, question-and-answer blocks, keyboard keys, tables, highlighted code, images and video. Each one is a short directive in the Markdown file.

Callouts

Note

A note adds context that helps but isn’t essential.

Tip

A tip shows a quicker or better way to do something.

Warning

A warning says what could go wrong, before it does.

Steps

  1. Create a key

    Add a long random value to QUILL_API_KEYS and restart Quill.

  2. Give the bot the address

    It sends the key on every write as a Bearer token.

  3. Point it at the map

    /llms.txt lists every page.

Tabs

Docker

Build the image, then run it with a volume mounted at /data.

Node server

Install Node.js 22, build once, and keep it running with a process manager.

Other hosts

Any host with a persistent, writable disk, such as Railway or Fly.io.

Questions and answers

Where are pages stored?

As Markdown files with front matter, in the content folder.

Does it need a database?

No. The files on disk are the only source of truth.

Can I keep the content in git?

Yes. Commit the content folder like any other text files.

Keyboard keys and tables

ActionKeys
Search the docsCtrl K
Search from anywhere/
Move between tabs← →

The Markdown behind it

content/pages/deploy/docker.md
:::steps
### Build the image
```bash
docker build -t quill-docs .
```
:::

:::warning
Without `-v`, edits are lost.
:::

Admin portal

Edit pages by hand at /admin

The admin portal is protected by a password you set. It has everything you need to write and organise the site.

Live preview
Write Markdown on one side and see the finished page on the other as you type.
Drafts
Keep a page hidden from readers until it is ready to publish.
File uploads
Add images, video and downloads, then link to them from any page.
Sidebar editor
Drag pages into order, group them, and nest them in folders.
Site settings
Change the name, header links, home page cards and footer.
Read about the admin portal

API for bots

Let your InkBot bots maintain the docs

Give a bot an API key and it can add a page when a feature ships, append a question to the FAQ, or fix a step that changed. Reads are open; writes need Authorization: Bearer <key>.

  • /api/v1/openapi.jsondescribes every endpoint
  • /llms.txtlists every page in plain text
Connect your bots

Append to a page

curl -X PATCH https://docs.example.org/api/v1/pages/help/faq \
  -H "Authorization: Bearer $QUILL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"appendBody":":::accordion[Can I export to PDF?]\n..."}'

Create a page

curl -X PUT https://docs.example.org/api/v1/pages/deploy/fly \
  -H "Authorization: Bearer $QUILL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"Fly.io","group":"Get started",
       "folder":"Deploy","body":"..."}'

Move a page

curl -X PATCH https://docs.example.org/api/v1/pages/deploy/fly \
  -H "Authorization: Bearer $QUILL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"newSlug":"deploy/fly-io"}'

Search

curl "https://docs.example.org/api/v1/search?q=docker"

# No key needed to read.
API endpoints
MethodsPathWhat it does
GETPOST/api/v1/pagesList pages, or create one
GETPUTPATCHDELETE/api/v1/pages/{slug}Read, replace, append to, move or delete a page
GETPUT/api/v1/navigationRead or reorder the sidebar
GETPUTPATCH/api/v1/siteRead or change site settings
GET/api/v1/search?q=Search every page
GETPOSTDELETE/api/v1/uploadsList, upload and remove files

Self-hosted

Your server, your files

Quill has no database and no outside service. The content belongs to you and lives where you can see it.

Markdown files on disk

Each page is a Markdown file with front matter. Copy the folder to move your docs, or commit it to git to review every change.

content/
├─ site.json         name, links, sidebar
├─ pages/
│  ├─ introduction.md
│  ├─ deploy/
│  │  └─ docker.md
│  └─ help/
│     └─ faq.md
└─ uploads/

Runs wherever you have a disk

Quill saves edits to its own disk, so it needs a host where that disk is writable and persistent.

  • Docker
  • A VPS
  • Railway
  • Fly.io
docker run -p 3000:3000 -v quill-data:/data \
  -e QUILL_ADMIN_PASSWORD=... \
  -e QUILL_API_KEYS=... quill-docs

Note

Plain Vercel or Netlify will serve the site, but their read-only file systems can’t save edits.

Get started

Quill takes about five minutes to set up.