Syndroo docs
Website GitHub

Syndroo docs

Build your first publishing workflow.

Syndroo is open-source, self-hosted publishing infrastructure. One HTTP API accepts a post, stores one publication per selected platform, and delivers text to each platform through Cloudflare Queues and Cron Triggers.

Bluesky: local Mock SNS gate only Threads: local Mock SNS gate only X: experimental Tumblr: experimental LinkedIn: experimental
These docs cover a release candidate.

0.2.0-rc.1 has not been published to npm or tagged, and it has not been accepted as a release. Installation instructions use the source repository, not a published package.

Start here

What Syndroo is

Syndroo is a small npm-workspaces monorepo that accepts immediate or scheduled posts, stores one publication per selected platform in Cloudflare D1, dispatches publication jobs through Cloudflare Queues, and scans scheduled work with Cron Triggers.

The v0.2 candidate installs five text adapters: Threads, Bluesky, X, Tumblr, and LinkedIn. The platform and publishing contracts live in @syndroo/core, an internal workspace package bundled inside the Worker rather than a separately published SDK. Adding another platform means adding one adapter package and wiring one explicit switch in the Worker. Requests for uninstalled or unconfigured platforms return PLATFORM_NOT_CONFIGURED instead of silently doing nothing.

  • HTTP API service. The candidate does not include a web dashboard. You deploy the Worker, then call its URL from curl, an automation tool, or your own application.
  • Self-hosted. You own the Cloudflare account, D1 database, Queue, Cron Trigger, and platform credentials.
  • Text only. Every adapter in this candidate publishes text. Media, per-request authors, OAuth login flows, and token refresh are outside this version.
  • One public npm package. @syndroo/cloudflare-worker is the only public package, and it is not published yet for this candidate. The other workspace packages, including @syndroo/core, are internal implementations rather than separate public APIs or client SDKs.

How it runs

The deployed Worker is the whole runtime. It keeps a Bearer-authenticated HTTP surface in front of D1 and a Queue producer, and it handles two background paths.

  1. Admission. POST /v1/posts validates the request and platform configuration, then writes the post and one publication row per platform into D1.
  2. Delivery. Immediate posts are sent to Cloudflare Queues. A Queue consumer claims one publication atomically before the outbound platform request.
  3. Scheduling and recovery. A Cron Trigger scans every 15 minutes for due posts and for stale jobs. A scheduled time in the past is handled as an immediate post.
  4. Inspection. GET /v1/posts and GET /v1/posts/<id> read the stored state, including one publication entry per platform.

Read Delivery and guarantees before you build automation on top of the API. Queue delivery is at least once, retries are bounded, and an ambiguous platform result is never resent automatically.

Platform status

Validation status recorded for the 0.2.0-rc.1 candidate.
PlatformProviderStatus
Blueskybluesky-nativeExercised locally by the Mock SNS end-to-end gate through the official @atproto/api SDK. Live-account acceptance pending, so not claimed as validated.
Threadsthreads-nativeExercised locally by the Mock SNS end-to-end gate through the native HTTP adapter. Live-account acceptance pending, so not claimed as validated.
Xx-sdkExperimental. Implemented and covered by unit tests. Not validated against a live account.
Tumblrtumblr-nativeExperimental. Implemented and covered by unit tests. Not validated against a live account.
LinkedInlinkedin-nativeExperimental. Implemented and covered by unit tests. Not validated against a live account.

Configure credentials only for the platforms you intend to use. Platforms are enabled independently, and missing credentials fail the request with HTTP 422 and PLATFORM_NOT_CONFIGURED before anything is persisted or queued.

Getting help

Source, issues, and the license live in the public repository. The website links to the project overview and changelog.