Deploy Hatamoto CMS
Go CMS with signed WASM plugins, MCP server and AI-crawler stats
hatamoto-db
Just deployed
/var/lib/postgresql/data
hatamoto
Just deployed
/data
Deploy and Host self hosted Hatamoto CMS on Railway
This template deploys Hatamoto CMS, an open-source Go content management system, as a web app plus a private Postgres 16 database, with a visual page builder, signed plugins and built-in AI-crawler analytics.
About Hosting Hatamoto CMS open-source software on Railway (self hosted Hatamoto CMS template)
This template runs the unmodified Hatamoto v1.2.1 image, independent community packaging not endorsed by Zen Labs, with a start script that prepares the data volume and waits for Postgres.
Why Deploy Hatamoto CMS, the self-hosted Go CMS on Railway (Railway Free Trial)
Self-hosting Hatamoto CMS on Railway keeps your content and database under your control, without a monthly plan from a hosted CMS and without the plugin stack and PHP runtime a WordPress install asks you to maintain.
Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.
By deploying Hatamoto CMS on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.
Railway vs Other Hosting Providers and VPS for Hatamoto CMS self hosting
Hatamoto CMS is one Go binary plus Postgres, so the choice is how much hosting you want to own.
| Provider | What You Get with Railway | What You Get with the Other Provider |
|---|---|---|
| DigitalOcean | Two services, generated admin address and setup code, a persistent /data volume and HTTPS. | Root access on a droplet you size, with the proxy, TLS, Postgres and updates on you. |
| AWS | One template wiring the app to Postgres over private networking, with no VPC setup first. | Deep networking and scaling control, with more services to configure and secure. |
| Hetzner | Managed deploys with the database and volumes attached, so no firewall or systemd unit to write. | Low-cost servers where you install Docker or the binary and keep full host control. |
Pick Railway for the fastest path to a running site, and a VPS when you want to run the host yourself.
Common Use Cases for hosted Hatamoto CMS
- Visual page building: Arrange sections on a canvas and preview pages at desktop, tablet and phone sizes before publishing.
- Post editing with SEO and scheduling: Write posts, run SEO checks and schedule them to go live later.
- Cookieless analytics: Track visits without cookies, with AI assistants counted as their own channel.
- Crawler reporting: See which AI agents fetch which pages and allow or block each purpose, such as training or search.
- Agent publishing over MCP: Connect an AI agent with an API key so it can work on content within that key's scopes.
- WordPress import with redirects: Review an import report before anything changes, then keep moved addresses working with permanent redirects.
- Reviewed signed plugins: Check who signed each plugin or theme and which permissions it requests before installing it.
Dependencies for Hatamoto CMS Docker hosted on Railway
This template runs Hatamoto CMS as two Railway services on private networking: the app and a Postgres 16 database.
Deployment Dependencies for Managed Hatamoto CMS Service (app plus Postgres 16)
The app is the public Hatamoto CMS server. Keep the app on one replice, because its local state lives in /data.
Implementation Details for Hatamoto CMS (unmodified Hatamoto v1.2.1 image plus a Railway start script)
The app image is ghcr.io/onepush-dev/hatamoto:v1.2.1, which runs the unmodified upstream ghcr.io/zen-labs-corp/hatamoto:v1.2.1 image plus a start script that prepares /data, waits for Postgres and drops to the app user.
Five template variables are generated or Railway references: DATABASE_URL, HATAMOTO_ADMIN_PATH, HATAMOTO_SETUP_CODE and PUBLIC_BASE_URL on the app, and POSTGRES_PASSWORD on hatamoto-db.
How does Hatamoto CMS compare against other tools
Hatamoto CMS vs WordPress (WordPress Alternative)
- Runtime: Hatamoto ships as one Go binary plus Postgres 16, with no PHP or Node stack to assemble.
- Plugins: Hatamoto plugins are signed WebAssembly packages that show their permissions before install. WordPress still wins on the breadth and familiarity of its plugin ecosystem.
- Built in: The page builder, SEO checks, page cache, forms, redirects, AI-crawler report and MCP server come in the box.
Hatamoto CMS vs Ghost (Ghost Alternative)
- Focus: Ghost is a publishing platform centred on newsletters and memberships. Hatamoto is a general CMS with a visual page builder for marketing and content sites.
- AI visibility: Hatamoto counts AI assistants as a traffic channel and reports which AI agents fetch which pages.
- Ghost's edge: Ghost has a long-established publishing workflow and a mature newsletter feature set that Hatamoto does not try to match.
Hatamoto CMS vs Strapi (Strapi Alternative)
- Model: Strapi is a headless CMS built around an API for other front ends. Hatamoto serves its own server-rendered site with a visual builder and themes, and its JSON API is there when you need it.
- Operations: Hatamoto runs as one process against one Postgres database, with no separate worker or search server.
- Strapi's edge: Strapi suits teams building a custom front end on a content API, with a larger body of community examples for that pattern.
Hatamoto with Docker Compose vs Railway (Self-Hosted Hatamoto Alternative)
- Control: Docker Compose on your own VPS gives full control over the host, reverse proxy and backups.
- Railway: The Railway template creates the app and database services, the /data volume, a generated admin path and setup code, and HTTPS on a public domain without you writing the topology.
- Data: On either route you own the content and backups, so back up the /data volume and a pg_dump of the database.
How to use Hatamoto CMS on Railway?
- Open
https://YOUR_DOMAINfollowed by yourHATAMOTO_ADMIN_PATHand then/setupin a regular browser. The admin returns 404 to non-browser requests that lack Sec-Fetch headers, which is by design, so use a normal browser rather than curl. The same setup address is also printed in the hatamoto service logs if you prefer to copy it from there. - Enter
HATAMOTO_SETUP_CODEfrom the hatamoto service Variables tab to create the owner account. Both values are generated for you on deploy, so there is nothing to type in beforehand. - Sign in and add a first page or post. The visual builder and the post editor are both available from the admin once the owner account exists.
- Check that the service is up by requesting the health endpoint:
https://YOUR_DOMAIN/health
A healthy instance answers with ok.
How to self host Hatamoto CMS on other VPS Services (Hatamoto CMS self hosting guide)
You can run Hatamoto CMS on any Linux server with Docker, or as a single binary against your own Postgres. Pick whichever fits your setup.
Clone the Repository
Clone the upstream repository, which is Zen-Labs-Corp/hatamoto and released under Apache-2.0.
git clone https://github.com/Zen-Labs-Corp/hatamoto.git
cd hatamoto
Install Dependencies
For the Docker path, install Docker and the Compose plugin. The compose file starts Postgres for you. For the binary path, you need a reachable Postgres database.
Configure Environment Variables
Copy the example environment file and set real values before exposing the server. Replace the demo database password in the compose file for any internet-facing host.
cp .env.example .env
Start the Hatamoto CMS Application
With Docker, run docker compose up, then open the setup address printed in docker compose logs hatamoto. With the binary, set DATABASE_URL and run hatamoto serve.
Pricing and License of Hatamoto CMS (Hatamoto CMS pricing)
Hatamoto CMS is released under the Apache-2.0 license, so the code is open source and free to self-host, modify and run for yourself or for customers.
Hatamoto CMS hosted vs self hosted comparison (Pricing, features, costs, and more)
Hatamoto is open source under Apache-2.0, and upstream runs its own hosted service at hatamoto.dev.
Monthly cost of self hosting Hatamoto CMS on Railway
Railway cost is usage-based. Check your usage in the dashboard after a few days of real traffic.
System Requirements for Hosting Hatamoto CMS on a VPS
Hatamoto runs as one Go binary against a Postgres 16 database. Measure your own workload before sizing, since traffic, media and plugins change the requirements.
Frequently Asked Questions (FAQs)
How do I sign in the first time?
Open your public domain followed by HATAMOTO_ADMIN_PATH and then /setup in a regular browser, and enter HATAMOTO_SETUP_CODE to create the owner account.
Why does the admin URL return 404?
Requests that do not send Sec-Fetch headers, such as curl or a plain script, get a 404 by design. Use a regular browser to reach the admin.
Where is the server secret stored, and do updates install themselves?
The server secret is created under /data/secrets on first boot; include /data in backups. This template sets HATAMOTO_UPDATES to notify only, and HATAMOTO_TELEMETRY is off.
Can I import from WordPress?
Yes. The importer reports what it found in your WordPress export before it changes anything, so you can review the scan first.
Why does this template use a neutral icon?
Upstream TRADEMARKS.md allows the name to be used to describe hosting or a one-click install, but the Hatamoto logo should not be used as an icon and nothing should imply endorsement by Zen Labs.
What should I back up?
Back up the /data volume and a pg_dump of the hatamoto-db database. Together they hold your releases, server secret, media uploads and content.
Template Content
hatamoto-db
ghcr.io/onepush-dev/hatamoto-db:16