Add social to anything.
Keep it yours.

Drop one HTML tag into any webpage and get a live social feed — free, offline-ready, and owned entirely by you. No account. No algorithm. No platform.

Try it live See the docs

What can you actually do with it?

Here are three things people build with non-activity.stream today.

📡

A live social feed in 3 lines

Paste this into any HTML page — Squarespace, Notion, a plain .html file. It renders a real social feed, styled like a modern social network, on your own domain.

<non-collection
  src="https://mastodon.social/users/bengo/outbox"
  cors-proxy="https://non-activity.stream/proxy/"
></non-collection>
<script
  src="https://non-activity.stream/elements/non-collection.js?define&importmap"
></script>
🐘

Your Mastodon feed, embedded anywhere

Got a Mastodon account? Point non-collection at your outbox and your posts show up on your portfolio, blog, or band site. One attribute. No API key required.

<non-collection
  src="https://mastodon.social/users/you/outbox"
  cors-proxy="https://non-activity.stream/proxy/"
></non-collection>
<script
  src="https://non-activity.stream/elements/non-collection.js?define&importmap"
></script>
🌊

Merge multiple feeds into one stream

You post photos on your own site. Thoughts on Mastodon. Links on a community server. Pull them all into one unified, chronological feed — merged in your browser, no server needed.

<non-collection src="https://mysite.com/outbox"></non-collection>
<non-collection
  src="https://mastodon.social/users/you/outbox"
  cors-proxy="https://non-activity.stream/proxy/"
></non-collection>
<script
  src="https://non-activity.stream/elements/non-collection.js?define&importmap"
></script>

What you get for free

No catch. No freemium. No “upgrade to unlock”.

📦

One tag. That's it.

If you can paste a YouTube embed, you can add a non-activity stream. Copy one snippet, drop it into any webpage — Squarespace, Notion, raw HTML, anything. Done.

💾

Your content lives on your device

Not on our servers (we don't have any). Not on a startup that might pivot next year. Your browser holds it, for as long as you want it.

✈️

Works offline, always

Close your wifi. Reload the page. Your feed is still there. Great for travel, unreliable connections, or just not wanting to depend on anyone else's uptime.

How does it compare?

Spoiler: no server, no account, no algorithm.

non-activity.stream Mastodon Bluesky
Requires a serverNoYesYes
Requires an accountNoYesYes
Offline-firstYesNoNo
Drop into any HTMLYesNoNo
Open protocol (ActivityPub)YesYesPartial
Algorithm-freeYesYesNo
Zero build step to embedYesNoNo

Why we built this

We got tired of asking permission. Permission to post. Permission to export our own content. Permission to embed our feed on our own website without paying for an API.

Every major social platform owns your content the moment you post it. They decide how it's displayed, who sees it, and whether it exists at all next year.

non-activity.stream is the answer to that. It's just HTML elements — open source, free forever, built on ActivityPub (the same open standard that powers Mastodon). Drop them into any page. Your content stays on your device. No one can take it away.

See it running. Right here.

These are live web components rendering below. No framework. No build step.

Try it yourself — write a note right now:

<non-activity-note> — one web component, rendered above. Try the full interactive demo →

Live from Mastodon

Real posts from @bengo@mastodon.social, pulled in with one tag: <non-collection>.

How it actually works

For the curious. No computer science degree required.

1. You add the tag

Copy one <script> tag and one element tag into any HTML page. That's it. No npm, no build tool, no deployment step. The elements load directly in the browser, just like a YouTube embed.

2. Your browser stores everything locally

Posts, photos, and notes are saved to IndexedDB — your browser's built-in storage. That's why it works offline. There's no server involved. The data stays on your device until you delete it. We literally cannot access it.

3. Optionally connect to the wider web

Want to pull in your Mastodon posts? Point a <non-collection> at any ActivityPub outbox URL. Or merge multiple sources. Or keep it entirely local. It's all up to you.