btw is a free, open source automation project written in JavaScript and released under GPL-3.0. It has 1,254 GitHub stars, 101 forks and 15 open issues, and was last pushed 3 months ago. On this registry it ranks #40 of 66 tracked projects in Automation, with 5 head-to-head comparisons available.

What is btw?

btw is an open source personal website and blog builder, positioned as a Medium alternative, that lets a writer publish a personal blog in minutes either through the hosted service at btw.so or by self-hosting the GPL-3.0 codebase.

What it is

btw is a JavaScript web application published under the GPL-3.0 licence, with a hosted instance at btw.so and a self-hostable version in the repository. It presents itself as an open source personal website builder and carries the topics blog-platform, medium, no-code, note-taking, notes-app, personal-blog and website-builder, which places it in the same space as hosted publishing platforms and lightweight note-to-website tools. Public blogs built with it include deeptichopra.com and siddg.com. The repository has drawn 1257 stars and 102 forks, with 15 open issues at the time of the recorded data.

The concrete problem it solves is ownership of a personal publishing destination. On Medium, a writer's work lives inside a platform the writer does not control; btw instead produces a personal blog at a slug or domain the writer chooses, and the site can be run on the writer's own infrastructure. Someone who only wants to write can sign up at btw.so and use it without installing anything, while someone who wants full control can run the same software themselves with Docker. The thing it replaces in practice is a hosted blogging account, not a static site generator: the project ships an editor, a database-backed publishing flow and login, so the writer gets a working blog rather than a template to assemble.

Key capabilities

  • Hosted option: sign up at btw.so and use btw without installing anything.
  • Self-hosted option: run the open source version with Docker and docker-compose.
  • Built-in editor: after docker-compose -f docker-compose.dev.yml up and login at localhost:9000, the writer starts writing; published articles appear at localhost:9222?domain=.
  • OTP login: set an optional 6 digit ADMIN_OTP to put the writer behind OTP login, which is turned off by default; SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS and SMTP_FROM support emailing those OTPs.
  • Image uploads in the editor through S3-compatible storage, configured with S3_ENDPOINT, REACT_APP_S3_ENDPOINT, S3_BUCKET, S3_KEY and S3_SECRET.
  • Environment-driven configuration in deploy/docker-compose.dev.yml, where ADMIN_EMAIL and ADMIN_SLUG are the only mandatory fields and the database is automatically configured on first setup.
  • Personal blog and website building aimed at no-code writers, per the blog-platform, no-code, personal-blog and website-builder topics.

Who uses it and how

  • Individual writers who want a personal blog rather than a profile on someone else's platform, as shown by the published examples deeptichopra.com and siddg.com.
  • Writers who do not want to run infrastructure: they sign up at btw.so and skip installation entirely, which is the shortest path the project offers.
  • Self-hosters who already run Docker and a working Postgres instance, plus SMTP credentials (mailgun is the README's example) for login email.
  • Writers who want the publishing account guarded: setting ADMIN_OTP and SMTP credentials puts the editor behind OTP login instead of open access.
  • Developers working locally: they run the compose file from the deploy folder, log in on port 9000, and preview published articles on port 9222.

Getting started

The fastest route is to sign up at btw.so and use the hosted version with no installation. To self-host, set ADMIN_EMAIL and ADMIN_SLUG in deploy/docker-compose.dev.yml, then run docker-compose -f docker-compose.dev.yml up from the deploy folder and visit localhost:9000 to log in and write.

How it compares

The project describes itself directly as an open source Medium alternative, so the comparison the facts support is with Medium: btw is GPL-3.0 and can be self-hosted, which means the blog, its content and its database can sit on infrastructure the writer controls, while Medium is a hosted service where publishing happens inside the platform. The cost model differs accordingly, since self-hosters pay for their own Postgres, storage and SMTP rather than a platform subscription. The facts in this registry name no other comparable tool, so Medium is the only point of contrast they support.

When to use it — and when not to

A self-hoster must operate Docker with docker-compose, a working Postgres instance and SMTP credentials, and must change the default SECRET; image uploads in the editor additionally require S3-compatible storage, so the blog is not fully functional without optional infrastructure. Anyone unwilling to run a database and mail setup should use the hosted btw.so instance instead, and anyone who wants a static, database-free blog should look elsewhere. The honest weaknesses are visible in the repository itself: the README lists documentation, contributing guidelines, a feature roadmap, simplified development setup, a sample cloud deployment and custom domain setup instructions under "Coming next", so much of the operational guidance a self-hoster would want does not exist yet, and the GPL-3.0 licence imposes copyleft obligations on redistribution.

project readme (upstream, from github) — read inline

github-cover


btw

btw is an open source personal website builder.

You can sign up and use btw without installing anything. You can also use the open source version to self-host.

btw-editor-screenshot

Demo blogs published using btw:

Table of contents

Getting started

These instructions will help you to get a copy of the project up and running on your local machine

Pre-requisites

  • Install the latest version of Docker, Docker-compose on your system
  • Working postgres instance
  • SMTP credentials (Ex: from mailgun)

Installation

Set ADMIN_EMAIL and ADMIN_SLUG in deploy/docker-compose.dev.yml. These are the only mandatory fields. Your database will be automatically configured on the first setup. Details of other variables in the docker-compose file:

Variable Name Description
TASKS_DATABASE_URL Connection URL to your PG DB (For development, the URL is already configured)
ADMIN_EMAIL Your email address (REQUIRED)
ADMIN_SLUG Unique slug (REQUIRED)
ADMIN_OTP (OPTIONAL) Set a unique 6 digit code, if you want the writer to be behind OTP login. OTP login turned off by default
SECRET Unique secret (change the default secret)
SMTP_HOST SMTP HOST (OPTIONAL, used to email OTPs for login)
SMTP_PORT OPTIONAL
SMTP_USER OPTIONAL
SMTP_PASS OPTIONAL
SMTP_FROM OPTIONAL
S3_ENDPOINT (OPTIONAL) Set this if you need image uploads to work in editor
REACT_APP_S3_ENDPOINT OPTIONAL
S3_BUCKET OPTIONAL
S3_KEY OPTIONAL
S3_SECRET OPTIONAL

Development

  1. Execute the following commands from the deploy folder:
    docker-compose -f docker-compose.dev.yml up
    
  2. Visit localhost:9000 to login and start writing
  3. If you set your slug and publish any articles, you can view them at localhost:9222?domain=

Community

  • Twitter: Product updates & memes.
  • Discord: If you have questions or just want to hang out, come & say hi!

Coming next

  • Simplified development setup
  • Sample cloud deployment setup
  • Sample custom domain setup instructions
  • Feature roadmap
  • Documentation
  • Contributing guidelines

License

See the LICENSE file for details.

Frequently asked questions

Is btw free to use?

btw is open source under the GPL-3.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does btw do?

Open source Medium alternative- set up your personal blog in minutes.

What is btw written in?

btw is primarily written in JavaScript. Its source is publicly available at https://github.com/btw-so/btw, and it has 1,254 GitHub stars.