← all SaaS
Self-host Substack
Newsletter publishing + paid subscriptions ·
Category: email & newsletters
Substack is a hosted newsletter platform — write posts in a web editor, publish to web + email, accept paid subscriptions via Stripe (Substack takes 10%). The self-hostable replacements split the publishing surface (Ghost) from the email-send infrastructure (Listmonk) and the paid-subscription glue; Ghost is the closest one-tool match.
Substack pricing anchor: Free to publish; Substack takes 10% of paid-subscription revenue + Stripe fees.
- GitHub
- ★ 52.8k · last commit 1d ago · 265 open issues
- License
-
MIT - Setup time
- 20min docker-compose (Ghost + MySQL + nginx)
- Monthly cost
- $10-15/mo VPS for Ghost + Mailgun/Postmark/Resend for email send (~$10/mo for 50k emails). No platform cut on Stripe revenue.
Migration sketch. Pull `ghost:5-alpine` and a `mysql:8` instance via compose. Substack export (Settings → Export) yields posts.csv + posts/ folder. Ghost has a community Substack importer (`@tryghost/substack-importer` npm package) that converts the export to Ghost's JSON format; subscriber CSV imports through Members → Import. Configure Stripe in Ghost admin → Membership and your existing paid subscribers' Stripe customer IDs migrate over.
Good fit forNewsletters with paid subscribers — Ghost is the only mature OSS option that bundles editor + email + Stripe paid memberships.
Weak atDiscovery — no Substack-style recommendations engine; growth comes from your own audience and SEO.
- GitHub
- ★ 20.0k · last commit 1d ago · 98 open issues
- License
-
AGPL-3.0 - Setup time
- 15min docker-compose (Go binary + Postgres)
- Monthly cost
- $5 VPS for the app; SMTP relay (Amazon SES, Postmark, Resend) is the variable cost — SES at $0.10/1000 sends.
Migration sketch. Pull `listmonk/listmonk` and `postgres:16`. Substack subscriber export imports as a CSV via Subscribers → Import. Listmonk doesn't have a built-in CMS — pair it with a static site generator (Hugo, Astro) for the public archive and use Listmonk just for the email send. No paid-subscriptions story bundled; bring your own Stripe + a member-gating layer.
Good fit forHigh-volume free newsletters (1M+ subscribers) where Listmonk's send-throughput shines.
Weak atNo content editor or paid-subscription rails — bring your own publishing surface and payments.
- GitHub
- ★ 5.15k · last commit 4w ago · 117 open issues
- License
-
AGPL-3.0 - Setup time
- 15min single-binary or docker-compose
- Monthly cost
- $5 VPS for the app; ActivityPub-federated so no separate email cost line.
Migration sketch. Run `docker run -p 8080:8080 -v $HOME/wf-data:/go/keys writeas/writefreely:latest`. Substack post export as Markdown imports manually via Writefreely's CLI (`writefreely --import`). Federation means Mastodon followers see your posts; no native paid-tier story (community plugins for member gating exist but immature).
Good fit forWriters who want a minimalist public archive + Fediverse reach and don't need paid subscriptions.
Weak atNo paid-subscriber rails — strictly free publishing; no email-newsletter loop without bolting on Listmonk.
In a terminal? npx os-alt substack prints this table —
how the CLI works →