One binary
UI and API run in a single Go process. SQLite by default — no external database to operate. Switch to PostgreSQL when you outgrow it.
Mastodon's built-in scheduler covers one account on one server. goloom schedules and publishes across all of yours — Mastodon, Bluesky and Friendica — from one queue and calendar you host yourself. Single Go binary, SQLite by default, full REST API.
# One static binary — no Docker, no external database
$ ENCRYPTION_KEY=$(openssl rand -hex 32) \
BOOTSTRAP_ADMIN_TOKEN=change-me \
./goloom
# UI + API on http://localhost:8080
# Prefer containers? Docker and Kubernetes work too.UI and API run in a single Go process. SQLite by default — no external database to operate. Switch to PostgreSQL when you outgrow it.
Mastodon, Bluesky and Friendica today, with OAuth onboarding and per-account publishing and metrics. More networks are in progress.
Everything in the UI is a team-scoped REST call with bearer-token auth. A built-in MCP server lets agents drive it too — both are optional.
Owner, editor and viewer roles, a review queue for approvals, and a per-team audit log that attributes every action.
Not a mockup in sight — every shot below is the real UI running on demo data.
The dashboard pulls your whole workspace onto one screen — what happened, what is scheduled, and whether every account is still healthy.

Every draft, scheduled and published post across all accounts lives in a single timezone-aware calendar. Move things around until the month makes sense.

One draft goes to every destination — with per-account versions where the wording should differ, and live previews that show exactly what each network will render.

Engagement, follower trends and per-post metrics are synced from every network into one report — no external analytics service, no tracking pixels.

Automation drafts and team posts can route through an approval step. Editors propose, owners approve — and the audit log remembers who did what.

Recurring templates and RSS rules produce posts on schedule, so the channels stay active while you do something else.







Everything around scheduling posts to multiple accounts — and not much you have to grow into.
A Model Context Protocol server ships in the binary, so agents can drive goloom over the same tools you use by hand.
Everything in the UI is a team-scoped /v1 call. Bearer tokens with a full lifecycle, plus a validate-before-schedule endpoint.
Plug in your identity provider for the browser UI — Authentik, Keycloak or any OpenID Connect issuer.
A reusable per-team media library with deduplication, so images are one click away in the composer.
Off until you wire up a provider. When enabled, drafting and enhancement follow a per-team brand voice.
Every team action is attributed. Provider tokens are encrypted and API tokens hashed at rest.
Every action in the UI maps to a documented API call. Run it by hand, from a script, or from an agent — same endpoints either way.
# Validate a post before scheduling it
$ curl -X POST \
-H "Authorization: Bearer $TOKEN" \
https://goloom.example/v1/teams/$TEAM/posts/validate \
-d '{"body":"Hello fediverse 👋"}'
# …or let an AI agent drive it via the
# built-in MCP server:
→ https://goloom.example/mcp/One binary, one command. Your server, your data, your tokens — no account to create, nothing phoning home.
A note on this project. goloom grew out of my own needs as a self-hosted tool. It is built with heavy use of AI, and I use it as a testbed for exploring methods for efficient, AI-assisted development.