selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

btw logo

Self-host btw

No-code personal blog and website builder

BetaOpen SourceGPL-3.0
Updated2 months ago
LanguageJavaScript
Setup difficultyAdvanced
Stars
1 254
Ports
9000 (writer app, where you log in and write), 9210 (tasks backend API), 9211 (YJS realtime sync port used by the editor), 9212 (Uppy upload companion port), 9222 (publisher, renders published posts at ?domain=<slug>), 9300 (list service)
Requires
PostgreSQL
Install with Docker Compose
The btw editor used for writing posts and notes

What is btw?

btw is an open-source builder for personal websites, covering three jobs: a public blog, private notes and a short bio page, all aimed at people who want to publish without touching code. Writing happens in a browser editor; publishing a post under your slug makes it visible on the reading side of the stack, and configuring S3-compatible storage switches on image uploads inside the editor. Login can sit behind a six-digit one-time code sent over SMTP, which is off by default. Self-hosting means bringing your own PostgreSQL instance and starting four compose services (editor, published-site renderer, backend API and a list service) plus Redis, with the README pointing you at localhost:9000 to write and localhost:9222 to read what you published. The same product also runs as a hosted service you can sign up for with just an email. The repository's only deployment file is a development-oriented compose stack, and documentation, sample cloud deployment and custom-domain guides are still listed as upcoming work.

Should you self-host btw?

btw scores 45/100 on selfhost.directory (how scoring works) and ranks #5 of 6 in Website Builder. It has 1 254 GitHub stars.

There was no stable release in the past 12 months, so check the repository's recent activity before you rely on it.

Setup is advanced: plan for several services and some ongoing maintenance. It is GPL-3.0-licensed and written mostly in JavaScript.

Its closest alternative on selfhost.directory is Ghost (83/100, 55 626 stars). It scores higher overall, so compare the two before you pick. See btw vs Ghost side by side.

Features

  • Blog & Publishing
  • Browser-based editor
  • Email OTP loginOff by default
  • Image uploadsRequires optional S3 configuration
  • No-code setup
  • Notes
  • Profile page
  • Slug-based publishing

btw README

How to install btw

Install btw with Docker Compose

Docker, Docker-compose
Environment variables
ADMIN_EMAIL, ADMIN_SLUG, SECRET, TASKS_DATABASE_URL, SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS, SMTP_FROM, S3_ENDPOINT, S3_BUCKET, S3_KEY, S3_SECRET, ADMIN_OTP, REACT_APP_S3_ENDPOINT
  1. Execute the following commands from the deploy folder:
    docker-compose -f docker-compose.dev.yml up
    

Set ADMIN_EMAIL and ADMIN_SLUG in deploy/docker-compose.dev.yml; these are the only mandatory fields. The shipped file is the development compose stack.

How to configure btw

  • ADMIN_EMAILYour email address (REQUIRED)

    Your email address (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

    (OPTIONAL) Set a unique 6 digit code, if you want the writer to be behind OTP login. OTP login turned off by default

  • ADMIN_SLUGUnique slug (REQUIRED)

    Unique slug (REQUIRED)

  • CORS_DOMAINSAllowed CORS origins for the tasks backend.

    Allowed CORS origins for the tasks backend.

  • HTTPS_DOMAINWhether the configured domain is served over HTTPS.

    Whether the configured domain is served over HTTPS.

  • LIST_DOMAINDomain of the list service.

    Domain of the list service.

  • NODE_ENVRuntime environment flag; the shipped compose file sets development.

    Runtime environment flag; the shipped compose file sets development.

  • PUBLISHER_SERVER_URLAddress of the publisher service as seen by the tasks backend.

    Address of the publisher service as seen by the tasks backend.

  • REACT_APP_S3_ENDPOINTOPTIONAL

    OPTIONAL

  • S3_BUCKETOPTIONAL

    OPTIONAL

  • S3_ENDPOINT(OPTIONAL) Set this if you need image uploads to work in editor

    (OPTIONAL) Set this if you need image uploads to work in editor

  • S3_KEYOPTIONAL

    OPTIONAL

  • S3_SECRETOPTIONAL

    OPTIONAL

  • SECRETUnique secret (change the default secret)

    Unique secret (change the default secret)

  • SECRET_KEYSecret used by the publisher service (compose sets a placeholder to change).

    Secret used by the publisher service (compose sets a placeholder to change).

  • SMTP_FROMOPTIONAL

    OPTIONAL

  • SMTP_HOSTSMTP HOST (OPTIONAL, used to email OTPs for login)

    SMTP HOST (OPTIONAL, used to email OTPs for login)

  • SMTP_PASSOPTIONAL

    OPTIONAL

  • SMTP_PORTOPTIONAL

    OPTIONAL

  • SMTP_USEROPTIONAL

    OPTIONAL

  • TASKS_DATABASE_URLConnection URL to your PG DB (For development, the URL is already configured)

    Connection URL to your PG DB (For development, the URL is already configured)

  • TASKS_REDIS_URLRedis connection URL for the tasks service.

    Redis connection URL for the tasks service.

  • WRITER_DOMAINDomain of the writer (editor) front end.

    Domain of the writer (editor) front end.

More in Website Builder

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…