mothermachine

Browse / Content publishing

WriteFreely

Minimalist federated blogging server in one Go binary, driven by the official Write.as API and wf CLI.

AdaptableOperable Business appWeb app Deterministic GoJavaScript API License: AGPL-3.0

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.

Use it when
  • 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
Gotchas
  • 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

  • Clonegit clone https://github.com/writefreely/writefreely
  • DownloadDownload
  • ImageContainer

Write.as managed hosting · Free closed source

For agents: JSON · Markdown

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.ini docker-compose.yml templates/
Prompt files
none
Accounts you need
Mailgun or SMTP (optional, for email features)

Source

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.

Docs
developers.write.as/docs/api/

Reach

Partial coverage. 7 of 10 jobs reachable through the stated interface.

JobThrough the interfaceEvidence
Publish a postReachableAPI POST /api/posts and /api/collections/{alias}/posts; wf CLI publishes to any instance
Update and delete postsReachableAPI update, unpublish, delete post
Create and manage blogs (collections)ReachableAPI collections create, retrieve, update, delete
Pin posts as static pagesReachableAPI pin and unpin posts
Keep draftsReachablewriteas-cli: publish anonymous posts or drafts; API posts outside a collection
Move posts between blogsReachableAPI move posts between collections
Run several blogs from one accountReachableAPI user collections list; max_blogs in config.ini
Federate over ActivityPubNot reachablefederation is a config.ini switch, not an API operation
Invite and manage usersNot reachablenot in API; admin UI or config.ini user_invites
Browse the local reader timelineNot reachableno 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

FieldWhere it was seenConfidence
formFactorREADME: deploys as a static binary with built-in SQLite; browser UI95%
executionModelno model at runtime95%
operabilitydevelopers.write.as/docs/api (Builder domain) plus writeas-cli README: 'publishing to Write.as and any other WriteFreely instance'; wf --version90%
effortwritefreely.org/docs/latest/admin/config documents config.ini sections and keys90%
editionsREADME: pre-built binaries, ghcr image, AGPL; Write.as managed hosting from the same team80%
activepushedAt 2026-09-01; 107 open issues; CLI pushed 2026-07-10–
provenanceMusing Studio LLC since 2018; no vibe-coded claim90%
reach85%

Open questions

  • Write.as managed WriteFreely hosting price

Sources