The Telling
Federated comments for the open web

Every site deserves a voice.

The Telling adds a comment thread to anything you publish: a blog, a newsroom, a CMS or static site. Readers reply with an account they already have, on Bonfire, Mastodon, or anywhere else on the fediverse or the ATmosphere. The discussion lives on your own server, not a third party's, and you can take it with you.

Try it before you install it: we run the Telling on this very site. Leave a reply on any of our posts and watch it federate.

"To learn a belief without belief is to sing a song without the tune."

Ursula K. Le Guin - The Telling (2000)

How it works

One script tag,
comments on every page.

Add the Telling to any blog, documentation site, or static page. Comments flow through the fediverse and appear as a thread under your post.

1

Embed the script

Paste a single script tag into your page template. The Telling widget loads and renders itself, fully styled and self-contained.

2

Readers join from anywhere

Visitors reply using their Bonfire, Mastodon, Pleroma, or any ActivityPub-compatible account. Readers keep the identity they already have, with no new sign-up and no lock-in.

3

Conversations federate

Every comment is an ActivityPub post. Replies flow back to the commenter's timeline, their followers can engage, and the whole thread stays visible on your site.

Get started

One tag, and you're live.

No API keys, no tracking scripts, no account to create.

<!-- Add the Telling to any page -->
<script
  src="https://your-instance.social/js/comments_embed.js"
  data-theme="dark"
  data-mode="nested"
  async
></script>

Options

Only src is required. The thread defaults to the current page URL, so on most sites the tag above is all you need. Add any of these data- attributes to tune it:

data-theme
DaisyUI theme to apply inside the widget, e.g. "dark" or "light".
data-mode
Initial thread display: "flat" or "nested" (default: the instance/user setting).
data-sort-by
Initial sort: "latest_reply", "reply_count", "boost_count", "like_count", "popularity_score", or "newest" (default: thread order).
data-sort-order
Sort direction for the chosen sort: "asc" or "desc" (default: per sort type).
data-media-uri
Find or create the thread for this URL (default: the current page URL).
data-canonical-slug
Match the thread by the post's slug on your own site (e.g. a Ghost post slug) instead of the URL.
data-canonical-id
Match the thread by the post's ID on your own site (e.g. a Ghost post ID).
data-post-id
Target a specific Bonfire post/thread ID directly (otherwise the media URI is used).
data-published-at
Publication date of the article (ISO 8601 or YYYY-MM-DD). Backdates a newly created thread, so a backfilled or older article doesn't jump to the top of feeds. Future dates are ignored. Ghost articles are already backdated via the API, so this is mainly for other sites.
data-token-max-age
Hours before the stored sign-in token is treated as stale and the reader is asked to re-authenticate (default: 720, i.e. 30 days). The server enforces a hard maximum regardless.

Works everywhere

Any stack. One script.

Framework, CMS, static site generator, or plain HTML—the same embed drops into the page and gets out of your way.

HTMLWeb
ReactFramework
VueFramework
SvelteFramework
Next.jsFramework
AstroGenerator
WordPressCMS
GhostCMS
DrupalCMS
EleventyGenerator
HugoGenerator
JekyllGenerator
One embed · no SDK · no build plugin If it renders HTML, it works.

Features

Made for publishers.

The essentials for a comment section you run yourself.

Private by design

No tracking pixels, no ad networks, no data harvesting. The Telling collects nothing about your readers.

Moderation you control

Set your own rules, and block, mute, or defederate as you see fit. No corporate content policy imposed from above.

Works on any site

If it renders a web page, the Telling works: Jekyll, Hugo, Astro, 11ty, WordPress, Ghost, plain HTML, anything. One script tag, no build tooling required.

Also a Bonfire thread

Every comment thread is also a Bonfire discussion. Communities can continue the conversation in their own space, with full context preserved.

Open source

The Telling is part of the Bonfire ecosystem. AGPL-licensed, community-governed, and designed to be forked, extended, and made your own.

Federated

Replies federate as ActivityPub comments. Readers reply from Bonfire, Mastodon, Misskey, or any compatible service, and keep their own identity and home server.

Philosophy

Named for a practice, not a product

Telling is what people do, what people always did... They tell: they share what they know, their experiences, their feelings, their ideas, in words, in signs, in stories, in songs.
— Ursula K. Le Guin, The Telling (2000)

Against enshittification

Comment platforms decayed into ad-delivery systems. The Telling has no investors to satisfy, no engagement metrics to optimise, no data to sell. It exists to serve conversation.

Gather around the fire

Part of the Bonfire ecosystem, tools for communities that want to own their digital spaces. The Telling extends that warmth to the open web.

Voices, not users

People aren't "users" to be monetised. They're voices in a conversation, each carrying their own identity, their own home server, their own autonomy.

Join the Telling

Your words, and your readers',
in one conversation.

Free, open source, and ready to embed on any site you publish.