Halo
Powerful and easy-to-use open-source website builder
Halo is a modern open-source blogging and website platform written in Java. It offers a clean admin interface, a plugin and theme marketplace, and an extensible architecture.
Key features
- Modern admin interface
- Plugin and theme marketplace
- REST API
- Markdown editor
Pros & cons
Strengths
- Polished modern UI
- Active development
Trade-offs
- Higher memory needs from Java
- Docs strongest in Chinese
Halo replaces
Last reviewed Aug 26, 2026 · 850 words
Halo's admin console is nicer than Ghost's and its theme system is more flexible than WordPress's, and I still would not recommend it to most English-speaking self-hosters. The reason is not the software. The documentation at docs.halo.run, the community forum, the app store listings, and most third-party themes are written in Chinese, and while the console itself has a decent English translation, the moment you hit a plugin setting or an error message you are in a translator tab. If that cost is acceptable, what you get is a fast, modern Java blog platform with 39,607 GitHub stars behind it and a development pace that has not slowed since the 2.0 rewrite.
Budget 1 GB and pin the heap
The catalogue's 1,024 MB floor is the JVM talking. Halo 2 runs on Spring Boot with Java 21, and left alone the JVM will claim whatever memory the container allows. On a 2 GB VPS I set the heap explicitly and have never seen the process exceed about 700 MB resident, which is more than Ghost's Node process and far more than a static generator, but stable. The docker run form from the official docs, with the heap pinned:
docker run -d --name halo --restart unless-stopped \
-p 8090:8090 \
-v ~/.halo2:/root/.halo2 \
-e JVM_OPTS="-Xmx512m -Xms256m" \
registry.fit2cloud.com/halo/halo:2 \
--halo.external-url=https://blog.example.com
Port 8090 is the default, ~/.halo2 holds everything including uploads and the embedded database, and halo.external-url must match the public address or login redirects and theme asset URLs point at localhost. Put Caddy or another proxy in front for TLS; Halo does not terminate it.
Start on PostgreSQL, even for a small blog
By default Halo writes to an embedded H2 database inside ~/.halo2. It works, and it is the thing most people regret 18 months later when H2 version bumps make upgrades nervous and the file is 400 MB of unbackupable state. Halo 2 talks to PostgreSQL, MySQL, and MariaDB through R2DBC, and switching at install time is three extra arguments after the image name:
--spring.r2dbc.url=r2dbc:pool:postgresql://db:5432/halo \
--spring.r2dbc.username=halo \
--spring.r2dbc.password=change-me \
--spring.sql.init.platform=postgresql
A single Postgres container serving Halo and whatever else you run is the pattern I use everywhere; the reasoning is in Postgres for everything. Migrating from H2 to Postgres after the fact is possible via Halo's backup and restore, but doing it on day one is 2 minutes instead of an evening.
The app store is the product, and the pricing is in yuan
Themes and plugins install from the Halo App Store inside the console, and the catalogue is deep: comment systems, SEO tooling, S3 upload backends, membership paywalls, page builders. A good share of the best themes are paid, listed at roughly 30 to 200 yuan at last check, with licences tied to your Halo account. Free themes exist and several are excellent, but the English-language selection is thin. The plugin API is stable enough that community plugins survive minor Halo upgrades, which was not true in the 1.x era.
Halo 2 is a different program from Halo 1
If you find a tutorial mentioning MySQL-only setups, application.yaml edits, or a theme in a templates/ directory, it is for Halo 1.x and will not work. The 2.0 rewrite in 2022 changed the storage model to a Kubernetes-style extension system, replaced the theme engine, and broke every 1.x plugin. Migration from 1.x runs through an official plugin that imports posts, categories, and comments. Everything on the current site is 2.x; treat anything older as history.
Against Ghost, WordPress, and the static generators
Ghost has better newsletter and paid-membership tooling out of the box, English docs, and a bigger English theme market; it is the safer choice for a writer who wants to earn from subscribers. WordPress wins on plugin breadth by a factor of 100 and loses on attack surface and admin clutter. Hugo costs nothing to run and has no admin panel at all, which is either the point or the dealbreaker. Halo sits in the middle: a real CMS with a real editor, less bloat than WordPress, more flexibility than Ghost, and a language barrier the others do not have. The rest of the blogging category is worth a scan if none of those fits.
What I'd do
For a blog I write myself and want to look good with zero front-end work, and if I read Chinese or tolerate translated docs: Halo 2 on Docker, heap pinned at 512 MB, PostgreSQL from the first boot, Caddy in front, one paid theme bought once. Nightly pg_dump plus a tar of ~/.halo2/attachments covers the backup. For everyone else, Ghost is the honest default; it does 90% of what Halo does with documentation you can read at speed.
Compare Halo
25 head-to-head comparisons.
- Halo vs Hugo
- Halo vs Astro
- Halo vs Gatsby
- Halo vs Jekyll
- Halo vs Hexo
- Halo vs Eleventy
- Halo vs Zola
- Halo vs Pelican
- Halo vs Quartz
- Halo vs Typecho
- Halo vs Gridsome
- Halo vs Metalsmith
- Halo vs Publii
- Halo vs Middleman
- Halo vs Lektor
- Halo vs Wintersmith
- Halo vs DocPad
- Halo vs Nikola
- Halo vs Scully
- Halo vs Bashblog
- Halo vs Hexo Admin
- Halo vs Bridgetown
- Halo vs Marmite
- Halo vs Mataroa
- Halo vs PageCord
Similar blogging platforms apps
Hugo
Blogging PlatformsBlazing fast static site generator for blogs and sites
Replaces WordPress, Medium
Astro
Blogging PlatformsModern static site framework for content-driven sites
Replaces WordPress, Medium
Gatsby
Blogging PlatformsReact-based static site and blog generator
Replaces WordPress, Medium
Jekyll
Blogging PlatformsSimple, blog-aware static site generator
Replaces WordPress, Blogger
Hexo
Blogging PlatformsFast and simple blog framework powered by Node.js
Replaces WordPress, Blogger
Eleventy
Blogging PlatformsSimpler static site generator for fast websites
Replaces WordPress, Medium