WriteFreely
Minimalist federated blogging server in one Go binary, driven by the official Write.as API and wf CLI.
WriteFreely is a single-binary Go publishing platform for blogs and writing communities, with ActivityPub federation, multiple blogs per account, hashtags, pinned pages, and 20+ locales, configured by a config.ini. The same Builder (Musing Studio) runs Write.as as the hosted edition and documents an API plus the writeas-cli whose wf command targets any WriteFreely instance.
- I want a fast, plain blog I own that also shows up in the fediverse
- I want my agent to publish posts from my notes to my own instance with a one-line CLI
- AGPL-3.0 (server); the CLI is GPL-3.0
- Read operations on public content need no auth; writes need a token from /api/auth/login with username and password
- No env var surface; configuration is the ini file only
- Some write.as-only API features are not in WriteFreely; build against the WriteFreely subset
Last activity Sep 1, 2026. Fit: adaptable 2, operable 3.
Editions
Self-hosted · Free open source
Write.as managed hosting · Free closed source
- HostedOpen the hosted app
Adaptable: what is yours to change
Make it yours
Config only3 things to edit
Everything is config.ini: [server] port, bind, TLS or autocert; [database] SQLite or MySQL; [app] site_name, host, single_user, open_registration, federation, editor, max_blogs, local_timeline, user_invites, default_visibility; [email] SMTP or Mailgun; [oauth.generic] for SSO. Flip single_user for a personal blog or open_registration for a community. Templates can be overridden in the templates directory.
- Env vars
- none
- Config files
config.inidocker-compose.ymltemplates/- Prompt files
- none
- Accounts you need
- Mailgun or SMTP (optional, for email features)
Source
- github.com/writefreely/writefreely
- AGPL-3.0 license
- Last commit Sep 1, 2026
- 5,240 stars
Also: writeas/writeas-cli
Operable: what an agent can drive
Interface
OfficialAPIpublished by the builderremote or local
How an agent can drive an Operable Listing, in five levels: native (built for the agent as the primary interface), official (the Builder ships an agent interface), wrapped (a third party wraps the software's API), config (an agent can only drive it by editing files), gui (screen control only). An interface is official only when it is published by the same organization that ships the software. GUI-level Listings are allowed and sorted last.
Reach
Partial coverage. 7 of 10 jobs reachable through the stated interface.
| Job | Through the interface | Evidence |
|---|---|---|
| Publish a post | Reachable | API POST /api/posts and /api/collections/{alias}/posts; wf CLI publishes to any instance |
| Update and delete posts | Reachable | API update, unpublish, delete post |
| Create and manage blogs (collections) | Reachable | API collections create, retrieve, update, delete |
| Pin posts as static pages | Reachable | API pin and unpin posts |
| Keep drafts | Reachable | writeas-cli: publish anonymous posts or drafts; API posts outside a collection |
| Move posts between blogs | Reachable | API move posts between collections |
| Run several blogs from one account | Reachable | API user collections list; max_blogs in config.ini |
| Federate over ActivityPub | Not reachable | federation is a config.ini switch, not an API operation |
| Invite and manage users | Not reachable | not in API; admin UI or config.ini user_invites |
| Browse the local reader timeline | Not reachable | no API endpoint listed; local_timeline is a config switch |
Code stack
- Languages
- GoJavaScript
- Frameworks
- none
- Package manager
- go modules
- Database
- SQLiteMySQLMariaDB
- Hosting target
- static binaryDocker (ghcr.io/writefreely/writefreely)docker-compose
- Built
- Human-written (recorded, never ranked)
Evidence and confidence
| Field | Where it was seen | Confidence |
|---|---|---|
| formFactor | README: deploys as a static binary with built-in SQLite; browser UI | 95% |
| executionModel | no model at runtime | 95% |
| operability | developers.write.as/docs/api (Builder domain) plus writeas-cli README: 'publishing to Write.as and any other WriteFreely instance'; wf --version | 90% |
| effort | writefreely.org/docs/latest/admin/config documents config.ini sections and keys | 90% |
| editions | README: pre-built binaries, ghcr image, AGPL; Write.as managed hosting from the same team | 80% |
| active | pushedAt 2026-09-01; 107 open issues; CLI pushed 2026-07-10 | – |
| provenance | Musing Studio LLC since 2018; no vibe-coded claim | 90% |
| reach | 85% |
Open questions
- Write.as managed WriteFreely hosting price
Sources
- github.com/writefreely/writefreely sourcing:content-publishing:github
- developers.write.as/docs/api/ analysis:content-publishing
- writefreely.org/docs/latest/admin/config analysis:content-publishing
- github.com/writeas/writeas-cli analysis:content-publishing