Bark and Distribution
A bark is a distribution campaign attached to one piece of content. It holds one item per platform you want that post to go to, and each item tracks its own schedule and its own outcome. This page covers what actually dispatches, what does not, and how to read the queue.
What auto-publishes today
Every platform carries an automation status, and the queue refuses to dispatch anything that is not marked automated. That status is the source of truth, so this page lists what actually sends rather than what could in principle be connected.
Bluesky posts through the AT Protocol: a session is created, then a record, with link facets. Connect it under Account, Connections & sharing, then use it on the site’s Site platforms page.
ActivityPub is different in kind. It does not go through the bark queue at all. When a post’s status lands on published, the content controller enqueues a signed Create activity that fans out to the site’s followers, so people following your site from Mastodon or another fediverse server see the post in their timeline. Federation is a no-op when the site has no ActivityPub configuration.
Other adapters do exist in the codebase (Mastodon by instance token, dev.to, Discord webhooks, Telegram bots, Hashnode, Reddit link posts, and SMTP newsletter sends to your site members). They are wired to real APIs and the queue will dispatch them. Bluesky and ActivityPub are the two paths with the most production mileage, so use Test on any other connection before you rely on it.
Connecting a platform
Connections are kept apart from sites. A connection is a saved credential for one external account, owned by you or by an account. A site then chooses which connections it may use. Nothing is published, shared, or deployed just because you connected something.
Manage the connections themselves under Account, Connections & sharing. Each site has a Site platforms page that says what that site can use, with three tabs:
- Social, everywhere content gets shared.
- Deploy, where the site is published (Cloudflare Pages). See Publishing and Custom Domains.
- Storage, where the site’s media is kept. Configure media storage opens the S3 or Supabase settings.
On a site, This site’s assignments lists what the site uses, and Browse available connections lists what it could use. The Ownership filter narrows the list to yours, the account’s, or site restricted connections.
Connect new
Press Connect new, pick a Provider (only providers with a working integration are offered), give the connection a Connection name, and choose Owned by: Only me (private, the default) or an account you own. Each provider asks for its own credential fields, which are stored encrypted and cleared from the form if the app leaves the foreground. Save connection. This saves the credentials only; no site changes.
Use existing connection
On the site, press Use existing connection on a connection, choose the allowed action (such as publishing a social post) and its destination, and press Use connection. A connection you own privately is personal use only: other members and automatic schedules can use it only through an accepted grant.
Share it (optional)
Make available to account offers a connection to another account as a grant with an optional expiry. The receiving account’s owner must Accept grant, and each site still needs its own assignment. Stop sharing ends a grant.
Once connected, a connection can be tested with a live check against the provider (the button is named for the action, for example Test social · publish), reconnected with fresh credentials while keeping its verified identity, or removed. Edit destination and Remove from this site change one assignment. Disconnect everywhere revokes the connection, and lists the sites it affects first. Work already sent cannot be recalled.
Below your live connections, the manual platforms are listed read only with a “Manual” note and the coming soon ones with a “Coming soon” note. They are visible, never presented as connectable.
Creating a bark
Open a post and scroll to its distribution panel, the Bark composer. Save the post first. Tick the Social accounts you want, optionally set a schedule, and press Schedule bark. Sites with more than one language also ask which publication language each destination posts in, which you set on the assignment in Site platforms.
Scheduling works at two levels: one schedule applied to everything you ticked (Use same time), and a per platform override (Different times). A schedule is immediate, a delay, or an exact timestamp. The times you see are in your own time zone, which the Bark page prints under its title.
Delays exist because publishing to social before a search engine has seen the canonical page is the wrong order. Each platform carries a default SEO delay, and you can override the defaults per site:
| Platform kind | Default delay after publish |
|---|---|
| ActivityPub, Bluesky, Mastodon, Twitter/X | 30 minutes |
| Discord, Telegram, Reddit | 1 hour |
| dev.to, Hashnode | 2 hours |
| Newsletter | 24 hours |
| Copy and paste platforms | none, you are posting by hand anyway |
The Bark page
The site’s Bark page is a calendar of every delivery for that site, under the heading “Your social deliveries” with your time zone next to it.
- On a wide screen it shows a month grid. On a narrow one it shows a strip of seven days. The arrows move by a month or by seven days, Today jumps back, and the date field jumps to any day. A week number (W23, for example) heads each row.
- Each day shows its deliveries. A busy day shows the first few and +N more, which selects the day. Mini view swaps the cards for compact time and platform pills so a whole month fits.
- Selecting a day fills the agenda below the grid with that day’s deliveries in time order. A delivery shows its time, its title, the connection, and a status badge.
- Filters opens a platform filter, a status filter (pending, sent, failed, or cancelled), and Show cancelled. Cancelled deliveries are hidden unless you ask for them or filter to them. Clear filters resets.
- Two lists sit under the agenda: Sending soon, for pending deliveries with no planned time, and Overdue pending deliveries.
- New bark (or New bark on this date) opens a side panel where you search a saved post and schedule it, with the selected date already filled in.
Press a delivery to open Bark deliveries, which lists every destination in that bark including other dates. For each one you see the planned time, when it was actually sent, any error, and a View delivered post link. A pending delivery can be moved with Reschedule then Save delivery time, or stopped with Cancel delivery. A failed one has Retry failed delivery. Deployment connections are filtered out of the calendar: Cloudflare Pages is a deploy target, not a distribution channel.
Item lifecycle
A bark item is always in exactly one of four states, and each has an endpoint behind it:
PUT /api/v1/barks/items/{item_id}/failedrecords a failure with anerrormessage.PUT /api/v1/barks/items/{item_id}/skipmarks it skipped, with optionalnotes.PUT /api/v1/barks/items/{item_id}/resetputs a failed item back topendingso it can be retried.DELETE /api/v1/barks/items/{item_id}removes the item entirely.
The bark itself supports create, get (with its items), rename, delete, add item, and a summary that counts pending, sent, failed, and skipped.
What runs the queue
A background poller ticks on the server (60 seconds by default, configurable, and disabled in the test environment). Each tick it walks every site, moves due bark items into the distribution queue, and drains the queue through the real adapters. There is also a manual POST /api/v1/distribution/process if you want to push it along.
The copy and paste kit
For the manual platforms, the distribution panel has a Post by hand section with a per platform copy button and a Copy language choice. It returns the post already transformed for that platform’s limits, with the canonical URL back to your site, ready to paste. It is not a fake integration and it does not pretend the post went anywhere: you paste it, then mark the item sent if you want the history to reflect it.