A complete CMS in one small app
Raytha is a .NET 10 and PostgreSQL application that gives you a content model, a template engine, a headless API and a scripting runtime. No plugins to chase, no services to wire together.
Everything you reach for, already built
Each part works on its own and fits with the others. Use the whole stack, or only the pieces you need.
User-defined content types
Model posts, products, events or anything else. Fields, relationships, validation and list views are configured in the admin, with no migrations.
Headless REST API
Every content type is available over a versioned REST API with filtering, sorting and paging.
Liquid template engine
Layouts, partial views and detail pages in Liquid. Edit live in the admin or keep them in git.
Site pages and widgets
Compose pages from widgets with settings forms that editors can use without touching code.
JavaScript functions
Serve custom routes, render Liquid helpers or react to content events with sandboxed JavaScript.
Roles and single sign-on
Role-based access control for admins, and separate public users with SAML and JWT SSO.
Revisions and audit logs
Every change is tracked, so you can see who did what and roll back.
Media library
Upload and serve files and images, local or cloud-backed.
Define the shape, get the rest for free
Create a content type, add fields, and Raytha produces the editing UI, the list views and the REST endpoints. Change the model later and your existing content keeps working.
- Built-in field types for text, numbers, dates, files and relationships
- Saved views with filters, sorting and a public URL
- Draft and published versions of every item
- Import and export for bulk changes
{
"items": [{
"id": "nFjCbLwc0ucKN8BdJGOzg",
"routePath": "release-of-v143",
"publishedContent": {
"title": "Release of v1.4.3",
"author": "zack-schwartz"
}
}],
"totalCount": 67
}
Design with Liquid, not a page builder maze
Templates are plain Liquid with access to your content, your users and a set of helpers. Compose layouts and partials, bind a template to a view, and publish.
- Layout inheritance with a single renderbody tag
- Content-aware templates for lists and detail pages
- Widget templates for reusable blocks
- Pull, edit and push whole themes with the CLI
<article>
<h1>{{ Target.PrimaryField }}</h1>
<time>{{ Target.CreationTime | organization_time: "%B %e, %Y" }}</time>
{{ Target.PublishedContent.content.Value }}
</article>
Custom behavior without forking the app
Write JavaScript that runs inside Raytha. Return JSON, XML or text at any route, expose helpers to your templates, or react when content is created or changed.
- HTTP request functions at routes you choose
- Liquid template functions callable from your pages
- Content event triggers
- Access to the same API your front end uses
const res = API_V1.GetContentItems("posts", "", "", "", "", 1, 100);
const urls = res.Result.Items.map(i =>
`<url><loc>${SITE}/${i.RoutePath}</loc></url>`);
return XmlResult(`<urlset>${urls.join("")}</urlset>`);
A command line that agents can drive
The raytha CLI manages the whole site through JSON: themes as files, content types, content, pages, menus, media and functions. Its manual ships inside the binary, so a coding agent can install it, read raytha guide build-a-site, and build a complete site from a brief.
- One JSON document and a stable exit code per command
- Dry-run theme pushes with line-and-column Liquid errors
- raytha check requests every public route
- The API key is the permission boundary
curl -fsSL https://raytha.com/cli/install.sh | sh
export RAYTHA_URL=https://your-site.example.com
export RAYTHA_API_KEY=your-key
raytha doctor
raytha guide build-a-site
Built for editors and for operations
A CMS is only useful if the whole team can work in it safely.
Roles and permissions
Give each administrator exactly the content types and settings they need.
Public users and SSO
Run member areas with their own accounts, user groups, SAML or JWT sign-in.
History you can trust
Revisions for content and templates, and audit logs for administrative actions.
Choose how you run it
Raytha is self-hosted. Railway is the quickest way to a running site; Docker and source builds work anywhere.
Railway
One click deploys Raytha with PostgreSQL, a domain and TLS. The recommended way to install.
Deploy on RailwayDocker
Run the published image anywhere you have Docker, pointing it at your own PostgreSQL.
docker run -p 8080:8080 raythahq/raythaFrom source
Clone the repository, build with the .NET 10 SDK and run it like any ASP.NET app.
View on GitHubBuild your next site on Raytha
Deploy in minutes. Own your content and your code.