Content you own. Upgrades you can trust.
A hybrid CMS on the Glueful framework: an admin your editors will like, a visual builder that writes clean data, and an API your developers already understand.
composer create-project --stability=beta glueful/thallo my-site
The Design view. Select any block on the page itself: its words are fields, its look is settings, and the API returns both.
44
blocks in the library, every one a Twig template your theme can override
11
capability packs installed with Thallo, inactive until you switch them on
1
command to upgrade: migrations, caches, the admin bundle, the API reference
MIT
licensed. Self-hosted, no seats, no fee — and nothing phones home
The product
The page, the model, the look and the API, in one admin.
Build pages on the page itself, shape your content types, restyle the whole site, and read it all back as JSON, without leaving the admin.
Build on the real page
Select any block on the stage and set its spacing, colours, shadow, corners and motion, per breakpoint, with your theme's real CSS underneath.
Flex or Grid, per breakpoint
Save a look as a style class
Every change is one undo
Model your own content
Content types with typed fields — text, numbers, references, assets, blocks — and a switch per type for whether the public API serves it.
Required, localized, filterable
Public delivery per type
Mounted at the root or under a path
Change the look, not the templates
Pick a theme, set its accent and neutral colours, and see the homepage before you save. Templates are plain Twig: a theme of your own starts as a copy.
Preview before you save
Accent and neutral families
Twig templates you own
{ "data": {
"uuid": "XviMmGth80VA",
"fields": { "body": [
{ "type": "container",
"data": {
"element": "section",
"content": [
{ "type": "shortcode", … },
{ "type": "heading",
"data": {
"text": "Content you own. Upgrades…",
"level": "h1"
} },
{ "type": "rich_text", … },
{ "type": "container", … },
{ "type": "code", … }
]
} },
{ "type": "container", … }, …
] } } } This page, as the API returns it
The hero above is JSON your front end can read: the blocks the Design view saved, nothing rendered. Every install also serves its OpenAPI reference at /api-docs.
OpenAPI 3.1
Delivery, admin and preview APIs
Keys scoped per content type
For editors
An admin your editors will actually use.
Most people who work in Thallo never open a terminal. They start from a designed section, publish when it is ready, and undo what they did not mean.
Start from a section, not a blank page
A library of designed sections and whole pages, each inserted as one change and edited in place.
Publish when it is ready
Drafts, review before publishing, and publish or unpublish on a schedule — so a launch at nine does not need someone at nine.
Nothing is final until you say so
Every change is one undo, and every published version is kept, so the page from last week is a click away.
Built with Thallo
thallo.dev runs on Thallo.
This page, the documentation and the admin you would install are the same product. Every block, preset and setting used on this page is written down in its build notes.
BUILT ON, WORKS WITH
Glueful
framework
PostgreSQL
database
Twig
templates
Vue 3
admin
Meilisearch
search
Payments
Stripe, Paystack
Why Thallo
Built for sites that outlive their launch.
The parts of a CMS you only notice in year three: upgrades, references, schedules, and knowing what is running.
One-command upgrades
Thallo lives in vendor/ as a Composer package. composer update, then thallo:provision, and the release is fully applied.
Capabilities you switch on
Commerce, accounts, collections, search and more ship as packs. Off means inactive, not uninstalled, so nothing drifts out of version.
44 blocks, no lock-in
Heroes, steppers, tabs, pricing, galleries, forms, code. Each is a plain Twig template your theme can override, and every page is data the API returns.
An API with its own reference
Every install generates its OpenAPI document and serves it at /api-docs, matching exactly the routes and packs that install runs.
Workflow and scheduling
Drafts, review, publish and unpublish on a schedule, with the scheduler's health shown in the admin so a missing cron line never hides.
Tells you when to upgrade
A check of Packagist shows admins when a newer Thallo exists, with the release notes and the command. The upgrade stays on your server.
Getting started
From an empty directory to a published page.
PHP 8.3 and PostgreSQL. About twenty minutes.
Create the project
Run composer create-project --stability=beta glueful/thallo my-site. You get the install template, with Thallo itself in vendor/
Set it up
./thallo setup checks your environment, writes the database settings, generates keys, migrates, and prints the link to create your first admin.
Design your first page
Add the scheduler cron line from the production guide, open the Design view, drop in a Container, pick a structure, and publish.
composer create-project --stability=beta glueful/thallo my-site
cd my-site
php glueful thallo:provision
# environment checked · database migrated · admin link printed Capabilities
Switch on what the site needs.
Every pack is installed with Thallo and stays inactive until you turn it on in Settings → Capabilities. No plugin marketplace, no version drift.
Products, variants, carts, checkout, orders, invoices and payment links, with the storefront rendered by the same block library as the rest of the site. Payments through Payvia, and a marketplace mode for multi-seller sites.
Storefront from your own blocks
Invoices and payment links
Marketplace mode
Themed registration, sign-in, password reset and account pages for your visitors, kept separate from the admin's users, with rate limits and email verification built in.
Visitor accounts, not admin users
Email verification
Rate limits by default
Structured data beyond pages and posts: define a schema, import rows, and query them from templates and the API. Filters and facets come with it.
Your own schemas
Row import
Filters and facets
Menus edited in the admin and rendered by the navigation block. Meta tags, sitemaps and redirects handled by the SEO pack, including the redirect created when a route changes.
Menus as content
Sitemaps and meta
Redirects on route change
Site search over published content, backed by Meilisearch, and first-party analytics with no third-party script on your pages.
Meilisearch-backed search
First-party analytics
No third-party scripts
Multi-tenancy for platforms: tenant-scoped content and settings, custom domains, member sign-up and per-workspace subscriptions with platform plans.
Tenant-scoped content
Custom domains
Per-workspace plans