Skip to content
Descoped Source Code Portalv2.2.13
PollingSign in

krantho

Up to date

A CMS library for Next.js, SvelteKit and Express, with Studio for editors and structured SEO

descoped/krantho on GitHubLast push

last commit badgerelease badgelicense badgeissues badge

Developer-first CMS with agentic SEO — pnpm workspace monorepo.

What is krantho?

A content framework with a built-in Studio — the missing middle ground between "just markdown files" and "deploy a full CMS platform."

  • Studio — Schema-driven forms, split-view markdown editor, version history, dark/light/system theme
  • Content engine — Markdown + YAML frontmatter with SQLite persistence and auto-import
  • Server adapters — One-line setup for Next.js, SvelteKit, or Vite (Express)
  • Schema system — Code-first Zod definitions with runtime extensions from Studio
  • SEO archetype system — Configurable Schema.org structured data with AI enrichment
  • LLM client — Zero-dependency client for Anthropic, OpenAI, Gemini, OpenRouter, and Ollama; Claude Haiku 4.5 by default
  • Configuration — One typed tree in krantho.config.ts, every value overridable from the environment
  • Plugin system — Custom API endpoints, lifecycle hooks, and field types
  • Auth — Token mode, OIDC with PKCE, role-based access (admin/editor/viewer)
  • Localization — Locale-aware content with per-locale filtering
  • OpenAPI — Auto-generated spec at /api/openapi.json, Scalar docs at /api/docs
  • CLI scaffolder — npx create-krantho to start a new project

Quick Start

npx create-krantho my-site
cd my-site
pnpm run dev

Open http://localhost:3000 for the site, http://localhost:3000/studio for the dashboard.

Packages

Package Description
@krantho/core Content engine, types (zero UI deps)
@krantho/config Typed configuration tree, resolved from krantho.config.ts and the environment
@krantho/ai Zero-dependency LLM client
@krantho/api REST API handlers, auth, plugins, webhooks, OpenAPI
@krantho/server Core handler, Studio serving, auto-import
@krantho/server-next Next.js App Router adapter
@krantho/server-sveltekit SvelteKit adapter
@krantho/server-node Vite/Express adapter
@krantho/next / @krantho/sveltekit / @krantho/node One-install bundles per framework
@krantho/studio React SPA dashboard
@krantho/schema Zod validation, runtime schema merger
@krantho/persistence Persistence interface + shared utilities
@krantho/persistence-sqlite SQLite adapter (default)
@krantho/persistence-postgres PostgreSQL adapter (production store)
@krantho/persistence-fs Filesystem adapter (dev)
@krantho/media-local Media file store on local disk
@krantho/media-vercel-blob Media file store on Vercel Blob
@krantho/media-s3 Media file store on S3-compatible storage (AWS S3, Cloudflare R2, MinIO)
@krantho/media-gcs Media file store on Google Cloud Storage
@krantho/ui-react React components (server + client)
@krantho/ui-mui Material UI components
@krantho/ui-tailwind Tailwind components
@krantho/ui-svelte Svelte 5 components
@krantho/seo JSON-LD, Schema.org catalog, archetypes
@krantho/seo-shared SEO field discovery primitives (zero deps)
@krantho/tools SEO CLI + enrichment pipeline (internal)
create-krantho CLI scaffolder

Example Apps

Port App Framework UI
4001 examples/nextjs-mui/ Next.js 16 Material UI 7
4002 examples/nextjs-shadcn/ Next.js 16 Tailwind CSS v4
4003 examples/sveltekit-tailwind/ SvelteKit 2 Tailwind CSS v4
4004 examples/sveltekit-shadcn/ SvelteKit 2 Tailwind CSS v4
4005 examples/react-ssr/ React 19 + Express Vite 8 SSR
4006 examples/react-spa/ React 19 Vite 8 SPA

All examples include: Studio, API, pages + globals + services collections. Start them with just serve-<name> or just examples-dev, which bind the ports above.

Studio features

  • Pulse: what needs attention, live and draft counts, meta-description coverage and recent activity
  • Dark/light/system theme with persistent preference
  • Site: every collection and the Layout; a collection view with a status filter, sort and bulk Publish/Delete
  • Schema-driven editor with type badges, validation errors, custom fields
  • Editor modes: Live (edit in place on the site's draft preview), Structure (the schema form and a markdown body with Split/Preview), Data (search and social previews, the JSON-LD graph with sources, rich results, enrichment, history)
  • Save draft and Publish: Live, Unpublished changes, Not published
  • Version history with restore
  • Autosave with recovery
  • Setup › Collections & schema (add runtime fields, export as Zod code)
  • Collection export and import as JSON (the API also exports Markdown)
  • Structure: Graph, Scopes & archetypes, Rich results, Crawlers & assistants, and enrichment
  • AI provider (Setup): provider/model/API key with connection test
  • Auth: token mode login/logout, OIDC with PKCE
  • Locale filter (when multiple locales configured)
  • Media library with folders, tags, image editor

SEO Archetype System

Schema.org structured data configured at three levels:

  1. Site (Structure › Scopes & archetypes › Site entities) — business type + properties
  2. Collection (Structure › Scopes & archetypes › Collection archetypes) — document types per collection
  3. Document (the editor's Data mode › Edit the graph) — per-page property overrides

AI enrichment fills missing properties without overwriting user edits. Frontend uses resolveSeoContent() for meta tags and <SeoJsonLd> for JSON-LD.

# Unified SEO CLI
pnpm run seo config show              # Show all archetype configs
pnpm run seo config set pages Article # Set collection types
pnpm run seo validate --all           # Check rich result eligibility

Configuration

Every app has a krantho.config.ts holding data only: site identity, paths, persistence, auth, media (including which file store media.provider picks), LLM, SEO and tools settings. Collections, pages and plugins are wiring and stay in the route file.

import { defineKranthoConfig } from '@krantho/config'

export default defineKranthoConfig({
  site: { domain: 'example.com', name: 'Example', language: 'en', baseUrl: 'https://example.com' },
  seo: { configDir: './krantho.seo' },
})

The configuration resolves once at startup: built-in defaults, then krantho.config.ts, then the environment. Every value can be set from an environment variable, which is how a deployment configures krantho. A bad value stops startup with an error naming the variable. docs/configuration.md lists every setting, its variable and its default.

The LLM features use a Console API key from KRANTHO_LLM_ANTHROPIC_API_KEY, billed per token to whoever deploys; every provider has a key of its own, such as KRANTHO_LLM_OPENAI_API_KEY. The default model is Claude Haiku 4.5. Choose a larger model with KRANTHO_LLM_MODEL or in Setup › AI provider, and give the assistant a provider of its own with assistant.provider. The first boot copies the provider and model into the database; after that, edits made in Studio win. The credential is read on every request, so a key set in the environment takes precedence over one saved in Studio.

Development

Requires Node 22.9 or later and pnpm 10. The example apps and krantho-site load the repository root .env when you run their dev script. Copy .env.example to .env and fill in only what you need. It is for development: production secrets live outside this repository, and no dev server loads them. Every variable is optional for local development: with none set, the apps start with no auth, SQLite under .krantho/, a temporary session secret, and AI enrichment reporting that no LLM provider is configured.

To run AI enrichment on your Claude subscription while developing, set KRANTHO_LLM_CLAUDE_CODE_OAUTH_TOKEN in .env to the token claude setup-token prints and choose the claude-code provider (Haiku only). The anthropic provider never reads it and uses KRANTHO_LLM_ANTHROPIC_API_KEY. Subscription tokens are for development on your own machine only — deployments use the anthropic provider with a Console API key. See docs/ai.md.

pnpm install                     # Install all workspace dependencies
pnpm run build                   # Build all packages
pnpm run typecheck               # Type-check all packages
pnpm run test:run                # Run all tests
pnpm run format                  # Auto-format with Biome

Tech Stack

  • TypeScript 6 — strict mode, noUncheckedIndexedAccess, exactOptionalPropertyTypes
  • Vite 8 + Vitest 4 — workspace test runner
  • Biome 2 — formatting + lint
  • pnpm 10 — workspace monorepo
  • SQLite (better-sqlite3) — default persistence
  • PostgreSQL (postgres.js) — production persistence
  • Zod 4 — schema validation

License

MIT

Dependencies

cli/go.mod github.com/descoped/krantho/cli (33 dependencies)
NameVersionScope
charm.land/bubbles/v2v2.2.1runtime
charm.land/bubbletea/v2v2.1.1runtime
charm.land/glamour/v2v2.0.1runtime
charm.land/lipgloss/v2v2.1.0runtime
github.com/spf13/cobrav1.10.2runtime
github.com/alecthomas/chroma/v2v2.27.0indirect
github.com/atotto/clipboardv0.1.4indirect
github.com/aymerick/douceurv0.2.0indirect
github.com/charmbracelet/colorprofilev0.4.3indirect
github.com/charmbracelet/ultravioletv0.0.0-20261023060817-a45b7c86333findirect
github.com/charmbracelet/x/ansiv0.11.9indirect
github.com/charmbracelet/x/exp/slicev0.1.0indirect
github.com/charmbracelet/x/termv0.2.2indirect
github.com/charmbracelet/x/termiosv0.1.1indirect
github.com/charmbracelet/x/windowsv0.2.2indirect
github.com/clipperhouse/displaywidthv0.11.0indirect
github.com/clipperhouse/uax29/v2v2.7.0indirect
github.com/dlclark/regexp2/v2v2.13.0indirect
github.com/gorilla/cssv1.0.1indirect
github.com/inconshreveable/mousetrapv1.1.0indirect
github.com/lucasb-eyer/go-colorfulv1.4.1indirect
github.com/mattn/go-runewidthv0.0.31indirect
github.com/microcosm-cc/bluemondayv1.0.27indirect
github.com/muesli/cancelreaderv0.2.2indirect
github.com/rivo/unisegv0.4.7indirect
github.com/spf13/pflagv1.1.0indirect
github.com/xo/terminfov1.3.1indirect
github.com/yuin/goldmarkv1.8.7indirect
github.com/yuin/goldmark-emojiv1.0.6indirect
golang.org/x/netv0.62.0indirect
golang.org/x/syncv0.25.0indirect
golang.org/x/sysv0.50.0indirect
golang.org/x/textv0.44.0indirect
krantho-site/package.json krantho-site (25 dependencies)
NameVersionScope
@krantho/apiworkspace:*runtime
@krantho/configworkspace:*runtime
@krantho/coreworkspace:*runtime
@krantho/media-vercel-blobworkspace:*runtime
@krantho/persistenceworkspace:*runtime
@krantho/persistence-fsworkspace:*runtime
@krantho/persistence-postgresworkspace:*runtime
@krantho/schemaworkspace:*runtime
@krantho/seoworkspace:*runtime
@krantho/serverworkspace:*runtime
@krantho/server-nextworkspace:*runtime
@krantho/studioworkspace:*runtime
@krantho/ui-reactworkspace:*runtime
@plausible-analytics/tracker^0.4.7runtime
marked^18.2.0runtime
minisearch^7.2.0runtime
next~16.4.6runtime
postgres^4.1.1runtime
react^19.3.1runtime
react-dom^19.3.1runtime
shiki^4.6.0runtime
zod^4.6.7runtime
@types/node^26.6.6dev
@types/react^19.3.0dev
typescript^7.0.2dev
package.json krantho-monorepo (5 dependencies)
NameVersionScope
@biomejs/biome~2.6.7dev
tsx^4.23.15dev
typescript^7.0.2dev
vite^8.3.8dev
vitest^5.1.0dev
packages/ai/package.json @krantho/ai (1 dependency)
NameVersionScope
typescript^7.0.2dev
packages/api/package.json @krantho/api (13 dependencies)
NameVersionScope
@krantho/aiworkspace:*runtime
@krantho/configworkspace:*runtime
@krantho/coreworkspace:*runtime
@krantho/persistenceworkspace:*runtime
@krantho/schemaworkspace:*runtime
@krantho/seo-sharedworkspace:*runtime
sharp^0.35.5runtime
@krantho/seoworkspace:*peer
zod^4.0.0peer
@krantho/persistence-sqliteworkspace:*dev
@types/node^26.6.6dev
typescript^7.0.2dev
zod^4.6.7dev
packages/config/package.json @krantho/config (4 dependencies)
NameVersionScope
yaml^2.9.1runtime
zod^4.6.7runtime
@types/node^26.6.6dev
typescript^7.0.2dev
packages/core/package.json @krantho/core (4 dependencies)
NameVersionScope
gray-matter^4.0.3runtime
marked^18.2.0runtime
@types/node^26.6.6dev
typescript^7.0.2dev
packages/create-krantho/package.json create-krantho (4 dependencies)
NameVersionScope
prompts^2.4.2runtime
@types/node^26.6.6dev
@types/prompts^2.4.9dev
typescript^7.0.2dev
packages/e2e/package.json @krantho/e2e (8 dependencies)
NameVersionScope
@axe-core/playwright^4.14.0dev
@krantho/aiworkspace:*dev
@krantho/persistenceworkspace:*dev
@krantho/persistence-sqliteworkspace:*dev
@playwright/test^1.65.0dev
@types/better-sqlite3^9.6.0dev
@types/node^26.6.6dev
typescript^7.0.2dev
packages/media-gcs/package.json @krantho/media-gcs (4 dependencies)
NameVersionScope
@krantho/configworkspace:*runtime
@krantho/persistenceworkspace:*runtime
@types/node^26.6.6dev
typescript^7.0.2dev
packages/media-local/package.json @krantho/media-local (4 dependencies)
NameVersionScope
@krantho/configworkspace:*runtime
@krantho/persistenceworkspace:*runtime
@types/node^26.6.6dev
typescript^7.0.2dev
packages/media-s3/package.json @krantho/media-s3 (5 dependencies)
NameVersionScope
@aws-sdk/client-s3^3.1168.0runtime
@krantho/configworkspace:*runtime
@krantho/persistenceworkspace:*runtime
@types/node^26.6.6dev
typescript^7.0.2dev
packages/media-vercel-blob/package.json @krantho/media-vercel-blob (5 dependencies)
NameVersionScope
@krantho/configworkspace:*runtime
@krantho/persistenceworkspace:*runtime
@vercel/blob^2.9.0runtime
@types/node^26.6.6dev
typescript^7.0.2dev
packages/next/package.json @krantho/next (5 dependencies)
NameVersionScope
@krantho/media-localworkspace:*runtime
@krantho/seoworkspace:*runtime
@krantho/server-nextworkspace:*runtime
@krantho/studioworkspace:*runtime
@krantho/ui-reactworkspace:*runtime
packages/node/package.json @krantho/node (4 dependencies)
NameVersionScope
@krantho/media-localworkspace:*runtime
@krantho/seoworkspace:*runtime
@krantho/server-nodeworkspace:*runtime
@krantho/studioworkspace:*runtime
packages/persistence-contract/package.json @krantho/persistence-contract (7 dependencies)
NameVersionScope
@krantho/persistenceworkspace:*runtime
@krantho/persistence-fsworkspace:*runtime
@krantho/persistence-postgresworkspace:*runtime
@krantho/persistence-sqliteworkspace:*runtime
postgres^4.1.1runtime
@types/node^26.6.6dev
typescript^7.0.2dev
packages/persistence-fs/package.json @krantho/persistence-fs (6 dependencies)
NameVersionScope
@krantho/coreworkspace:*runtime
@krantho/persistenceworkspace:*runtime
gray-matter^4.0.3runtime
yaml^2.9.1runtime
@types/node^26.6.6dev
typescript^7.0.2dev
packages/persistence-postgres/package.json @krantho/persistence-postgres (8 dependencies)
NameVersionScope
@krantho/coreworkspace:*runtime
@krantho/persistenceworkspace:*runtime
@krantho/seo-sharedworkspace:*runtime
postgres^4.1.1runtime
@krantho/persistence-sqliteworkspace:*dev
@testcontainers/postgresql^12.2.1dev
@types/node^26.6.6dev
typescript^7.0.2dev
packages/persistence-sqlite/package.json @krantho/persistence-sqlite (7 dependencies)
NameVersionScope
@krantho/coreworkspace:*runtime
@krantho/persistenceworkspace:*runtime
@krantho/seo-sharedworkspace:*runtime
better-sqlite3^13.1.1runtime
@types/better-sqlite3^9.6.0dev
@types/node^26.6.6dev
typescript^7.0.2dev
packages/persistence/package.json @krantho/persistence (4 dependencies)
NameVersionScope
@krantho/coreworkspace:*runtime
@krantho/seo-sharedworkspace:*runtime
yaml^2.9.1runtime
typescript^7.0.2dev
packages/schema/package.json @krantho/schema (8 dependencies)
NameVersionScope
@krantho/coreworkspace:*runtime
@krantho/persistenceworkspace:*runtime
@krantho/seo-sharedworkspace:*runtime
gray-matter^4.0.3runtime
zod^4.4.3peer
@types/node^26.6.6dev
typescript^7.0.2dev
zod^4.6.7dev
packages/seo-shared/package.json @krantho/seo-shared (1 dependency)
NameVersionScope
typescript^7.0.2dev
packages/seo/package.json @krantho/seo (7 dependencies)
NameVersionScope
@krantho/coreworkspace:*runtime
@krantho/seo-sharedworkspace:*runtime
react>=19.0.0peer
@adobe/structured-data-validator^1.7.1dev
@types/node^26.6.6dev
@types/react^19.3.0dev
typescript^7.0.2dev
packages/server-next/package.json @krantho/server-next (11 dependencies)
NameVersionScope
@krantho/configworkspace:*runtime
@krantho/coreworkspace:*runtime
@krantho/serverworkspace:*runtime
next>=16.3.8peer
@krantho/schemaworkspace:*dev
@types/node^26.6.6dev
next~16.4.6dev
react^19.3.1dev
react-dom^19.3.1dev
typescript^7.0.2dev
zod^4.6.7dev
packages/server-node/package.json @krantho/server-node (7 dependencies)
NameVersionScope
@krantho/serverworkspace:*runtime
vite>=8.0.0peer
@krantho/schemaworkspace:*dev
@types/node^26.6.6dev
typescript^7.0.2dev
vite^8.3.8dev
zod^4.6.7dev
packages/server-sveltekit/package.json @krantho/server-sveltekit (6 dependencies)
NameVersionScope
@krantho/serverworkspace:*runtime
@sveltejs/kit>=2.0.0peer
@krantho/schemaworkspace:*dev
@types/node^26.6.6dev
typescript^6.0.3dev
zod^4.6.7dev
packages/server/package.json @krantho/server (30 dependencies)
NameVersionScope
@krantho/apiworkspace:*runtime
@krantho/configworkspace:*runtime
@krantho/coreworkspace:*runtime
@krantho/persistenceworkspace:*runtime
@krantho/persistence-fsworkspace:*runtime
@krantho/persistence-sqliteworkspace:*runtime
@krantho/schemaworkspace:*runtime
@krantho/seo-sharedworkspace:*runtime
@krantho/studioworkspace:*runtime
chokidar^6.0.0runtime
gray-matter^4.0.3runtime
yaml^2.9.1runtime
@aws-sdk/client-cloudfront^3.1143.0peer
@krantho/media-gcsworkspace:*peer
@krantho/media-localworkspace:*peer
@krantho/media-s3workspace:*peer
@krantho/media-vercel-blobworkspace:*peer
@krantho/persistence-postgresworkspace:*peer
@vercel/functions^3.9.9peer
postgres^4.1.1peer
@aws-sdk/client-cloudfront^3.1168.0dev
@krantho/media-gcsworkspace:*dev
@krantho/media-localworkspace:*dev
@krantho/media-s3workspace:*dev
@krantho/media-vercel-blobworkspace:*dev
@testcontainers/postgresql^12.2.1dev
@types/node^26.6.6dev
@vercel/functions^3.11.2dev
typescript^7.0.2dev
zod^4.6.7dev
packages/static/package.json @krantho/static (8 dependencies)
NameVersionScope
@krantho/apiworkspace:*runtime
@krantho/configworkspace:*runtime
@krantho/coreworkspace:*runtime
@krantho/schemaworkspace:*runtime
@krantho/serverworkspace:*runtime
@types/node^26.6.6dev
typescript^7.0.2dev
zod^4.6.7dev
packages/studio/package.json @krantho/studio (34 dependencies)
NameVersionScope
@fontsource-variable/bricolage-grotesque^5.3.0dev
@fontsource-variable/jetbrains-mono^5.3.0dev
@krantho/aiworkspace:*dev
@krantho/coreworkspace:*dev
@krantho/seo-sharedworkspace:*dev
@milkdown/core7.23.0dev
@milkdown/plugin-history7.23.0dev
@milkdown/preset-commonmark7.23.0dev
@milkdown/preset-gfm7.23.0dev
@milkdown/prose7.23.0dev
@milkdown/utils7.23.0dev
@testing-library/jest-dom^7.0.1dev
@testing-library/react^16.3.3dev
@testing-library/user-event^14.6.10dev
@types/dagre^0.7.54dev
@types/node^26.6.6dev
@types/react^19.3.0dev
@types/react-dom^19.3.0dev
@vitejs/plugin-react^6.3.0dev
@xyflow/react^12.12.1dev
dagre^0.8.5dev
diff^9.0.0dev
dompurify^3.4.17dev
jsdom^31.0.0dev
lucide-react^1.72.0dev
marked^18.2.0dev
react^19.3.1dev
react-diff-viewer-continued^4.4.0dev
react-dom^19.3.1dev
react-image-crop^11.1.2dev
react-router^8.5.1dev
typescript^7.0.2dev
vite^8.3.8dev
vitest^5.1.0dev
packages/sveltekit/package.json @krantho/sveltekit (5 dependencies)
NameVersionScope
@krantho/media-localworkspace:*runtime
@krantho/seoworkspace:*runtime
@krantho/server-sveltekitworkspace:*runtime
@krantho/studioworkspace:*runtime
@krantho/ui-svelteworkspace:*runtime

Health

Health 100Good

Nothing costs it points.

Technology

Up to date
Languages
GoTypeScriptJavaScript
Build tools
Go modulesnpmpnpm
Toolchains
go 1.27node >=22.9.0
Used by

Packages

  • @krantho/persistence-fsnpm1.1.1at registry.npmjs.org
  • @krantho/media-vercel-blobnpm1.1.1at registry.npmjs.org
  • @krantho/persistence-sqlitenpm1.1.1at registry.npmjs.org
  • @krantho/corenpm1.1.1at registry.npmjs.org
  • @krantho/ainpm1.1.1at registry.npmjs.org
  • @krantho/nodenpm1.1.1at registry.npmjs.org
  • @krantho/persistence-postgresnpm1.1.1at registry.npmjs.org
  • @krantho/apinpm1.1.1at registry.npmjs.org
  • @krantho/persistencenpm1.1.1at registry.npmjs.org
  • @krantho/nextnpm1.1.1at registry.npmjs.org
  • @krantho/confignpm1.1.1at registry.npmjs.org
  • @krantho/media-localnpm1.1.1at registry.npmjs.org
  • @krantho/media-gcsnpm1.1.1at registry.npmjs.org
  • @krantho/media-s3npm1.1.1at registry.npmjs.org
  • create-kranthonpm1.1.1at registry.npmjs.org

Pull requests

Up to date

None open.

Issues

Up to date

1 open: Needs triage 1

  1. Dependency Dashboard

    Needs triage, waits for a maintainer to look at it#1renovate[bot] (automation)idle

Releases

Up to date
  1. v1.1.1 by oranheim
    Release notes

    Publish a repository's existing docs folder as a static site.

    • A collection's indexFile reads README.md as its home page (#15)
    • site.rendering for initServerLoader(): relative links between markdown files go to their pages, and files beside them are served from the site's root (#15)
    • renderContent() takes resolveUrl; initServerLoader() takes resolveUrl and atNotation (#15)
    • The src and href of raw <img> and <a> tags get the same rewriting as markdown links (#16)
    • A static site's pages follow content.atNotation; the static starter writes no .env and styles tables (#15)

    No database reset is needed: the release adds content files only.

  2. v1.1.0 by oranheim
    Release notes

    Static krantho sites, built from markdown to plain files and published to GitHub Pages.

    Added

    • @krantho/static: build a site from its markdown at build time, with every page's structured data, the sitemap, llms.txt and robots.txt, for GitHub Pages or any file host (#13)
    • create-krantho: a "Static site (Next.js, GitHub Pages)" choice, a docs site with a grouped sidebar and a workflow that publishes it on every push (#13)
    • Links and images in markdown that start at the site's root get the path the site is served under (#12)
    • @krantho/api exports the sitemap, robots.txt and llms.txt builders (#12)

    Fixed

    • On the filesystem provider, pages compose the structured data the seo section configures (#12)
    • Files are dated by their last git commit, so publish dates and the sitemap's lastmod stay the same between checkouts (#12)
    • Every package that depends on glob resolves 14.0.2 or later (#10)

    Docs: Deploy to GitHub Pages, @krantho/static.

  3. v1.0.2 by oranheim
    Release notes

    Fixed

    • A content file removed from the repository deletes its document on the next deploy, unless an editor changed it in Studio (#7)
    • create-krantho: a scaffolded pnpm project builds SQLite on pnpm 10, 11 and 12 (#4)

    Changed

    • SvelteKit 3, postgres.js 4, and every dependency and tool at its latest version (#5)

    No database reset needed: the deploy imports the changed content and removes the documents of deleted files.

  4. v1.0.1 by oranheim
    Release notes

    A patch release for sites that install krantho from npm.

    Fixed

    • Next.js sites installed from npm start: @krantho/server-next imports next's subpaths with their file extension. In 1.0.0 every page, the API and Studio answered 500 (5244e82).
    • Studio is found under every package manager, pnpm's strict layout included: @krantho/server depends on @krantho/studio (6c100fb).

    Changed

    • Every published package has a description; packages are published through npm trusted publishing, with provenance.
    • Dependencies updated to their patched versions (efd3746).

    No database reset: the deploy imports the new and changed content files.

  5. v1.0.0 by oranheim
    Release notes

    The first release of krantho, and where its changelog starts. Krantho is a CMS library for Next.js, SvelteKit and Express: you add it to a site you build yourself, and it runs inside your app, on your host and your database.

    • Content templates defined in code: a collection is a Zod schema, its documents are markdown with frontmatter.
    • Studio, the dashboard for editors, served at /studio by @krantho/studio on every framework.
    • Drafts, publishing, version history, editing locks, locales and a media library.
    • Structured SEO: one JSON-LD graph per page from site, collection, route and document archetypes, with meta tags, sitemap, robots.txt and llms.txt.
    • SQLite or Postgres; media on local disk, Vercel Blob, S3-compatible stores or Google Cloud Storage.
    • Page caching with Next.js ISR or a CDN.
    • A REST API with an OpenAPI 3.1 specification, plugins, webhooks, and sign-in by token or OpenID Connect.
    • The krantho command-line tool, the Claude Code plugin and create-krantho.

    The packages are not on npm yet. See CHANGELOG.md.

All 5 held

Latest commits

Commit log

Documentation