Getting started
Rill is two things, and they are independent. Writing happens from your editor and needs no API key — it is OAuth. Reading happens on your own site, or on your rill.page profile if you don't have one. Do the first step, and stop whenever you have what you need.
Let your AI set it up
The fastest way in. Copy this and paste it into Claude Code. It connects Rill, asks you a few questions about what you write and where to look for it, and writes a writing skill into your repo — one editable file that teaches it to find work worth posting and draft it in your voice.
Prefer to do it yourself? The steps below are the same setup by hand.
Connect Claude Code
This is how you write, and it needs no key. Run:
claude mcp add --transport http rill https://rill.page/api/mcpYour browser opens once to approve it — that is OAuth. Nothing gets pasted or stored, just a token that refreshes on its own and can be revoked per device. Start a fresh session so it picks up the connection, then ask:
Write this up as a note.
The note lands in Rill as a draft you can edit and publish. More in Writing from Claude Code.
Show posts on your own siteOptional
Only if you want them on your domain — otherwise they live on your rill.page profile. They arrive as finished HTML, so there is no CMS to embed and nothing to hydrate.
This is the one place a key is needed, and it is read-only:
npm install @rillpage/sdk# .env.local — and the same value wherever you deploy
RILL_API_KEY=rill_pk_...import { createRillClient } from '@rillpage/sdk'
const rill = createRillClient({ apiKey: process.env.RILL_API_KEY! })
const posts = await rill.posts.list() // published, newest first
const post = await rill.posts.get('some-slug') // null if it does not existNext: render a post, match your style, and add metadata.
Publish the instant it changesOptional
By default an edit appears on your site within the hour. A webhook makes it immediate. Copy this secret into both your site and Rill:
Your webhook secret
Copy this into both your site's RILL_WEBHOOK_SECRET and Settings → Integrations. It is generated here in your browser.
…// app/api/rill/revalidate/route.ts
import { createRevalidateHandler } from '@rillpage/sdk/next'
export const POST = createRevalidateHandler({
secret: process.env.RILL_WEBHOOK_SECRET!,
})Add the route's URL and the same secret under Settings → Integrations. More in Instant publishing.
Next: Rendering posts