for small sites with typed content

The little CMS that lives in your repo!

Your content already lives in typed TypeScript files. editsy turns them into an editing UI. No database, no dashboard SaaS, no migration, and edits land as clean git diffs.

$ npx editsy editView on GitHub

Your file is the schema

content/home.ts// content/home.ts
export default defineContent({
  hero: {
    heading: "A tidy little website.",
    launched: "2026-07-02",
    cta: {
      label: "View on GitHub",
      href: f.url("…"),
    },
  },
});

Point editsy at the content files you already have. Short strings become text inputs, 2026-10-09 becomes a date picker, arrays of objects become collections. This very page is edited with editsy, and every word here lives in content/home.ts.

  • "short string" text input
  • "2026-07-02" date picker
  • f.markdown() WYSIWYG
  • [{…}, {…}] collection

Inferred fields

No schema to author. The editing form comes from the values in your file.

Diff before write

Every save shows the exact file change first. AST rewrites, never regex.

Live preview

See edits on the real site as you type, before anything is saved.

No database

Content is files in your repo. Git is the history. Nothing to babysit.

Publish = commit

Remote saves become attributed git commits, and your host redeploys.

Editor-friendly

Markdown is WYSIWYG, images get a picker, dates get a calendar. No syntax required.

Hand over the keys!

Add one route and yoursite.com/editsy becomes a login page. Editors sign in with a password or an emailed link, see changes live before saving, and publish. Behind the scenes that's a git commit, and your host redeploys like it would for any push.

app/editsy/[[...editsy]]/route.tsimport { createEditsy } from "@editsy/next";

export const { GET, POST } = createEditsy();

FAQ

Do I have to restructure my site?

No. If your content files export plain objects or arrays, editsy edits them as-is (as const and satisfies included). The defineContent() wrappers are optional and add type-safety when you want it.

Where does my content live?

In your repo, in the TypeScript files you already have. There's no separate content store, so there's nothing to migrate into or out of.

How do non-technical editors log in?

Password or an emailed login link. No GitHub account needed. Editors are a small list in your deployment's environment, with passwords stored as scrypt hashes. No user database.

What about sites built with AI coding agents?

editsy ships a conventions doc you can point your agent at. Sites that follow it are editable by construction, and human-written sites with the same habits get the same benefit.

Install it

$ npm install editsy @editsy/next

MIT licensed. Works on files you already have; add defineContent() wrappers when you want type-safety and richer fields.