Skip to content

How Wuppy works

Every entry is a Markdown or MDX file with YAML frontmatter, for example content/posts/en/hello.md. Fields that Wuppy does not know about are kept as they are. Astro reads the same files through its Content Collections (glob loader), so your templates use the normal Astro APIs.

Other site data (menus, widgets, sections, taxonomies, bylines, settings, redirects) is stored as JSON under .wuppy/data and is committed the same way.

Saving content, uploading media or changing settings creates a Git commit with the signed-in user as the author. That gives you:

  • a full history per entry, with line and field diffs,
  • one-click restore of any earlier version,
  • no lock-in: the repository is the backup.

Autosave is different: when you pause typing it keeps a recovery copy under .wuppy/autosave/ and never creates a commit.

Wuppy is an Astro integration plus a Hono API. It runs as a normal Node.js server (for example in Docker). Users, sessions and comments are stored in SQLite (node:sqlite) inside .wuppy/.

Package Role
wuppy Content engine, REST API, Astro integration, media, SEO, redirects, webhooks, plugin sandbox, AI and managed sites
@wuppy/admin The React admin panel at /admin
@wuppy/auth Sign-in (Better Auth), roles and permissions
@wuppy/git Commits, history, diffs and reverts
@wuppy/plugin-types Plugin manifest and capability checks
create-wuppy npm create wuppy