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.
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-workeris 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.
- Admission.
POST /v1/postsvalidates the request and platform configuration, then writes the post and one publication row per platform into D1. - Delivery. Immediate posts are sent to Cloudflare Queues. A Queue consumer claims one publication atomically before the outbound platform request.
- 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.
- Inspection.
GET /v1/postsandGET /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
| Platform | Provider | Status |
|---|---|---|
| Bluesky | bluesky-native | Exercised locally by the Mock SNS end-to-end gate through the official @atproto/api SDK. Live-account acceptance pending, so not claimed as validated. |
| Threads | threads-native | Exercised locally by the Mock SNS end-to-end gate through the native HTTP adapter. Live-account acceptance pending, so not claimed as validated. |
| X | x-sdk | Experimental. Implemented and covered by unit tests. Not validated against a live account. |
| Tumblr | tumblr-native | Experimental. Implemented and covered by unit tests. Not validated against a live account. |
linkedin-native | Experimental. 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.