Platform CLI
Learn
Developer docs User guide Quickstart CLI and AI agents Blog
Company
Services About Contact Links Get started

Introduction to Raytha

Updated

Raytha is a free, MIT-licensed content management system built on .NET 10 and PostgreSQL. You model your content in the admin, write Liquid templates in the browser, and get a server-rendered public site and a headless REST API for the same data. You host it yourself.

The model in one pass

Everything in Raytha is built from a small set of parts. Learn these and the rest of the docs read quickly.

PartWhat it is
Content typeA kind of content, such as posts or products. It owns a list of typed fields (single line text, rich text, date, attachment, relationship and so on). A new content type starts with a title field, a content field and an "All" view.
Content itemOne record of a content type. It has a published version and, optionally, a draft, and it keeps revisions. Its public address is its route path, built from the content type's route template.
ViewA saved list of items for one content type, with columns, a filter and a sort. A published view is a public page at its own route (a new content type's view is served at /<developer-name>).
Web templateA Liquid template stored in the database and grouped into a theme. Templates render content item pages, view pages, layouts and site pages. Edit them in the admin or push them from files.
Site page and widgetsA one-off page (home, about, a landing page) assembled from widgets in a drag-and-drop page builder. Each widget is rendered by a widget template that declares its own fields.
REST API v1A headless API under /raytha/api/v1, authenticated with an X-API-KEY header. Reference docs are served by your own instance at /raytha/api.
Raytha FunctionsJavaScript that runs on a V8 engine inside the server. A function can answer an HTTP route, be called from a Liquid template, or react to a content item being created, updated or deleted.
WebhooksSigned HTTP calls Raytha makes to your systems when something changes. See Webhooks.

How a public request becomes a page

The public site has no static files to build. A visitor requests a path, and Raytha looks that path up in its routes table. The route points at a content item, a view, a site page or a function. Raytha loads that record, picks the web template assigned to it, assembles the template with its parent layouts, and renders it with Liquid. The details are in Architecture.

Everything under /raytha belongs to Raytha

The admin is a single-page app at /raytha. The REST API and its reference live under /raytha/api. Everything else is your public site.

What is new in 2.0

  • PostgreSQL only. SQL Server support is gone. There is one provider and one set of migrations.
  • A new admin. The admin is a React app served from a bundle committed to the repository. A handful of pages (error pages, logout, the SAML and JWT sign-in handoffs, theme export and the function test runner) are still server-rendered.
  • .NET 10, with the repository's VERSION file as the single source of the product version. /healthz and the REST API ping report it.
  • Outbound webhooks with HMAC-signed deliveries, retries and a delivery log.
  • Email log for every message the server tries to send.
  • Health endpoints at /healthz and /healthz/ready. See Health checks.
  • Site pages and widgets, proxy trust settings (TRUSTED_PROXIES), and a separate Manage Media permission.

Coming from 1.5.0? Read Upgrading from 1.5.0 to 2.0 first. The upgrade rewrites some stored data.

Who Raytha is for

  • Developers who want a CMS they can read. The code is a conventional ASP.NET Core solution with clear layers, and the public site is plain Liquid.
  • Teams that want editors and developers in one tool. Editors work in the admin. Developers pull a theme to files, edit it in git, and push it back.
  • Projects that need both a website and an API. The same content serves server-rendered pages and JSON.

It is a good fit if you are comfortable running a .NET container and a PostgreSQL database. It does not ship a hosted service. If you want help setting up or extending a deployment, you can ask for consulting through support.

Gotchas

  • Raytha stores templates, content and settings in PostgreSQL. A backup of the database is a backup of your site. Uploaded media lives in your file storage and needs its own backup. See Backups and restores.
  • Links in emails and absolute media URLs are built from the Website URL setting, never from the request's Host header. Set it to your public address.

Next steps