openwrite is a minimalist blogging platform built for writing freely, hosting independently, and publishing without noise.
  • Python 48.7%
  • HTML 29.5%
  • CSS 13.1%
  • JavaScript 8.7%
Find a file
openwrite d4a9775457
Some checks failed
Test Suite / test (push) Has been cancelled
0.15.0 - tags, better rss, fixes
2025-09-27 18:13:32 +02:00
.forgejo/workflows 0.15.0 - tags, better rss, fixes 2025-09-27 18:13:32 +02:00
openwrite 0.15.0 - tags, better rss, fixes 2025-09-27 18:13:32 +02:00
tests migration 2025-07-30 23:03:34 +02:00
.gitignore 0.15.0 - tags, better rss, fixes 2025-09-27 18:13:32 +02:00
CHANGELOG.md 0.15.0 - tags, better rss, fixes 2025-09-27 18:13:32 +02:00
env.example migration 2025-07-30 23:03:34 +02:00
LICENSE migration 2025-07-30 23:03:34 +02:00
MANIFEST.in migration 2025-07-30 23:03:34 +02:00
migrate.py 0.15.0 - tags, better rss, fixes 2025-09-27 18:13:32 +02:00
pyproject.toml 0.15.0 - tags, better rss, fixes 2025-09-27 18:13:32 +02:00
README.md 0.15.0 - tags, better rss, fixes 2025-09-27 18:13:32 +02:00
requirements-dev.txt migration 2025-07-30 23:03:34 +02:00
run.py migration 2025-07-30 23:03:34 +02:00
THIRD_PARTY_LICENSES.md 0.14.0 - valkey support 2025-08-18 18:34:12 +02:00

logo

openwrite is a minimalist blogging platform built for writing freely, hosting independently, and publishing without noise.

PyPI - Downloads PyPI - Version License: AGPL-3.0-or-later pythonver


Features

  • Multiple blogs per user(limit defined in .env)
  • Single-blog mode
  • Supports sqlite and mysql databases
  • Upload images to local storage or bunny cdn
  • Drafts
  • Simple markdown editor in posting
  • Discover section
  • Privacy:
    • Set if blog should be indexed in search engines
    • Set if post should be listed in "Discover" section
    • Set if username should appear in post page (anonymous posts)
  • Lightweight
  • No tracking, only data collected is anonymized(hashed) IP for post view counting and likes
  • Custom CSS per blog
  • Federation using ActivityPub protocol
  • Likes system
  • Posts importing from xml/csv
  • Blog themes
  • Gemini protocol
  • Statistics per post
  • Multilanguage (currently English and Polish)
  • Custom favicon per blog
  • Subpages per blog
  • Valkey support
  • Post tags, filtering

Installation

  1. To install openwrite, clone it with pip:
pip install openwrite
  1. Then run:
openwrite init
  1. Answer few questions about your instance to generate .env and create all necessary directories.
  2. Run:
openwrite run

to run it in foreground or:

openwrite run -d

to run it in background.

  1. Default user is admin with password openwrite. You can (and should!) change it in your dashboard. Enjoy!

Docker

Docker image is still being prepared. Stay tuned!