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.
Here are three things people build with non-activity.stream today.
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>
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>
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>
No catch. No freemium. No “upgrade to unlock”.
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.
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.
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.
Spoiler: no server, no account, no algorithm.
| non-activity.stream | Mastodon | Bluesky | |
|---|---|---|---|
| Requires a server | No | Yes | Yes |
| Requires an account | No | Yes | Yes |
| Offline-first | Yes | No | No |
| Drop into any HTML | Yes | No | No |
| Open protocol (ActivityPub) | Yes | Yes | Partial |
| Algorithm-free | Yes | Yes | No |
| Zero build step to embed | Yes | No | No |
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.
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 →
Real posts from @bengo@mastodon.social, pulled in with one tag: <non-collection>.
For the curious. No computer science degree required.
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.
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.
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.