A writer-first CMS that strips away every piece of friction. Beautiful admin UI, headless API, plugin ecosystem, dark mode — all in one package.
$ git clone https://github.com/plsft/contento.git
$ cd contento
$ dotnet run --project src/Contento.Web
info: Contento CMS started successfully
info: Listening on: https://localhost:5001
$ curl https://localhost:5001/api/v1/content/posts
{"data": [...], "meta": {"totalCount": 1}}
135
API Endpoints
8
Built-in Themes
582
Test Coverage
100%
Open Source
A complete content platform with the DX you wish every CMS had.
Full-page Markdown editor with autosave, word count, cover images, and keyboard shortcuts.
Full REST API with content delivery endpoints, bearer token auth, search with highlights, and structured JSON.
JavaScript plugins run in a Jint sandbox. SEO analyzer, contact forms, reading progress — install from admin.
From Playfair Display editorial to Lora night-reading. CSS variable system with full dark mode support.
PostgreSQL-powered search with highlighted results, autocomplete suggestions, and relevance ranking.
Folder organization, drag-and-drop upload, responsive image variants (640w, 1024w, 1536w WebP), focal point picker, and grid/list views.
Threaded comments with nested replies, AI-powered spam scoring, auto-approve threshold, moderation queue, and batch actions.
Import from WordPress (WXR) or Markdown files. Export as JSON, Markdown, or HTML.
CSRF protection, CSP headers, BCrypt passwords, role-based access, audit logging, and anti-XSS sanitization.
Stripe-powered paid memberships with plan management, content gating, billing portal, and subscriber dashboard.
Built-in newsletter with subscriber management, campaign editor, and email delivery. Grow your audience.
Admin-configurable header and footer menus with nested dropdowns, link types (custom, post, category, tag), and reordering.
Run multiple sites from one installation. Domain-based routing with per-site themes, content, and settings.
Paste a YouTube, Vimeo, Spotify, or Twitter URL and it auto-embeds. Cached provider lookups with fallback.
Use [youtube], [button], [callout], [gallery], [code], and [toc] shortcodes in your content. Register custom ones at runtime.
Manage 301/302 redirects from the admin panel. Hit tracking, auto-redirect on slug changes, and middleware processing.
Public signup with email verification, password reset flow, and Gravatar avatars. Secure token-based verification.
Prevents simultaneous editing conflicts. 2-minute TTL locks with automatic expiry and real-time lock status.
Full REST API with OpenAPI spec lets AI agents create, manage, and publish content via MCP. Stateless bearer tokens, streaming AI endpoints, and SEO analysis built in.
Contento works as a traditional CMS with server-rendered pages, or as a headless API powering any frontend. Next.js, Astro, 11ty, mobile apps — anything that speaks HTTP.
const res = await fetch('/api/v1/content/posts'); const { data, meta } = await res.json(); // Each post includes: // id, title, slug, excerpt, coverImageUrl, // publishedAt, readingTimeMinutes, tags data.forEach(post => { console.log(post.title, post.slug); }); // Get full post with HTML + table of contents const post = await fetch( `/api/v1/content/posts/${slug}` ).then(r => r.json()); // post.data.bodyHtml — rendered HTML // post.data.tableOfContents — [{id, text, level}]
Each with its own personality, font pairing, and color palette. Switch instantly from the admin panel.
Warm organic serif
Modern editorial
Classic literary
Playful creative
Minimal reading
Dark elegance
Autumn earth tones
Stark minimal
Modern stack, battle-tested components, zero lock-in.
.NET 10
Runtime & framework
PostgreSQL
Primary database
Redis
Caching layer
Alpine.js
Reactive UI
Tailwind CSS v4
Design system
Jint
Plugin sandbox
BCrypt
Password hashing
Serilog
Structured logging
Stripe
Payments & subscriptions
ImageSharp
Image processing
Clone the repo, run one command, and you're live. No complex setup, no configuration files to hunt down.