Hashtag

#ActivityPub

9,731 posts tagged with this hashtag.

@Amgine@mamot.fr

platform feature want: similar to "no boosts" from accounts followed, do not see their replies to people on domains you have blocked.

Presumably, if you have decided an entire domain's worth of accounts should never appear in your feed or receive your own emanations, you have reasons. Which are probably offended seeing an account you *do* follow having exactly the kind of conversation you are avoiding experiencing directly.

@fitpub@fosstodon.org

The official FitPub Matrix Space is now available! ๐Ÿฅณ

Join the community to discuss about FitPub, get support, contribute to development, or connect with instance maintainers.

The space includes dedicated rooms for:

๐Ÿ“ข Announcements
๐Ÿ’ฌ Users
โš™๏ธ Maintainers
๐Ÿ› ๏ธ Developers

Join here: matrix.to/#/#fitpub:matrix.org

Help us build a vibrant FitPub community. We'd love to see you there!

matrix.to

You're invited to talk on Matrix

You're invited to talk on Matrix

@fitpub@fosstodon.org

The official FitPub Matrix Space is now available! ๐Ÿฅณ

Join the community to discuss about FitPub, get support, contribute to development, or connect with instance maintainers.

The space includes dedicated rooms for:

๐Ÿ“ข Announcements
๐Ÿ’ฌ Users
โš™๏ธ Maintainers
๐Ÿ› ๏ธ Developers

Join here: matrix.to/#/#fitpub:matrix.org

Help us build a vibrant FitPub community. We'd love to see you there!

matrix.to

You're invited to talk on Matrix

You're invited to talk on Matrix

A technical question for a Sunday: is it possible/desirable to have every Actor on an instance share the same key pair?

I'm building something vaguely in the vein of FediMeteo, where all the accounts are automated and you'd generally follow one of those automated accounts to get the weather for your locality. Now, FediMeteo has a different key pair for each account, so the bot for Birmingham's weather has a different public key to Manchester.

But it's not a requirement that each account has a unique key, if the keys are only used for signature verification, right? Like, I don't think it'd be a security issue if "Weather for Birmingham" was signed with the key from "Weather for Manchester".

My question: is this another one of my Sunday Bad Ideas, and I should really have a key pair per account instead of trying to have the whole instance share?

@StrepsipZerg@scicomm.xyz

A friend of mine is working on a cool project ofor his master thesis in digital humanities: a federated calendar software based on
The idea would be to have a system specifically to share and push events on the federated network!
I love the idea, and I can definitely see it being a great way to organize both local and decentralized communities.

github.com/burnoutberni/everyc

github.com

GitHub - burnoutberni/everycal: A federated event calendar built on ActivityPub.

A federated event calendar built on ActivityPub. Contribute to burnoutberni/everycal development by creating an account on GitHub.

@StrepsipZerg@scicomm.xyz

A friend of mine is working on a cool project ofor his master thesis in digital humanities: a federated calendar software based on
The idea would be to have a system specifically to share and push events on the federated network!
I love the idea, and I can definitely see it being a great way to organize both local and decentralized communities.

github.com/burnoutberni/everyc

github.com

GitHub - burnoutberni/everycal: A federated event calendar built on ActivityPub.

A federated event calendar built on ActivityPub. Contribute to burnoutberni/everycal development by creating an account on GitHub.

@ViP@mastodon.social

Installed yesterday on my Proxmox home server to fiddle around and was about to deploy . But this "Danger" Box in the docs, saying the domain will be taken forever by this instance of GTS scares me. Or is this the case for every Server anyway?

I thought, only the full handle like "@user@social.domain.net" can be problematic when being refused because of caching and generated keys. Any experience with that? docs.gotosocial.org/en/v0.22.0

@_elena@mastodon.social

Working on a brand new post for my series "a newbie's guide to self-hosting with " - showing people how to set up their own microblogging instance.

Sorry it's been taking a while: I started over when I realized most people use subdomains... and I'm doing a thorough step-by-step explainer that any newbie could follow - I hope ๐Ÿ˜…

The whole series is available here:

๐Ÿ”— : blog.elenarossini.com/a-newbie

a screenshot of GoToSocial's installation page on YunoHost that reads: "GoToSocial
Current version: 0.22.0~ynh1
Potential alternative to: Akkoma, Bluesky, Calckey, Mastodon, Misskey, Pleroma, Threads, X

GoToSocial is a fast ActivityPub social network server, written in Golang.

With GoToSocial, you can keep in touch with your friends, post, read, and share images and articles. All without being tracked or advertised to!

The official documentation is at docs.gotosocial.org.

Admins are strongly encouraged to read the documentation of this package after installing it. It is available in the webadmin under Applications > gotosocial (at the bottom) or here on the package's repository!

Please note that this package uses the "i'm so tired" software license 1.0, please read it and accept it before proceeding with installation."
ALT text

a screenshot of GoToSocial's installation page on YunoHost that reads: "GoToSocial Current version: 0.22.0~ynh1 Potential alternative to: Akkoma, Bluesky, Calckey, Mastodon, Misskey, Pleroma, Threads, X GoToSocial is a fast ActivityPub social network server, written in Golang. With GoToSocial, you can keep in touch with your friends, post, read, and share images and articles. All without being tracked or advertised to! The official documentation is at docs.gotosocial.org. Admins are strongly encouraged to read the documentation of this package after installing it. It is available in the webadmin under Applications > gotosocial (at the bottom) or here on the package's repository! Please note that this package uses the "i'm so tired" software license 1.0, please read it and accept it before proceeding with installation."

@kowporg.wordpress.com@kowporg.wordpress.com ยท Reply to ActivityPub for WordPress
๐Ÿš€ WordPress ActivityPub ๊ณต์‹ 2025 ๋กœ๋“œ๋งต ๋ฐœํ‘œ! ๋“œ๋””์–ด ์šฐ๋ฆฌ๊ฐ€ ๋ฐ”๋ผ๋˜ 'ํŒ”๋กœ์šฐ' ๊ธฐ๋Šฅ, Reader ๊ฒฝํ—˜, DM ์ง€์›, ์ •๋ฐ€ Moderation ๋„๊ตฌ๊นŒ์ง€! ์›Œ๋“œํ”„๋ ˆ์Šค๊ฐ€ ์ง„์งœ Fediverse์˜ ์ผ์›์ด ๋˜๊ธฐ ์œ„ํ•œ ์ฒซ ๋ฒˆ์งธ ์ด์ •ํ‘œ๊ฐ€ ์ œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ๐ŸŽ‰ ์ž์‹ ์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ง์ ‘ SNS ๋„คํŠธ์›Œํฌ์™€ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒฝํ—˜์ด ์ด์ œ ํ˜„์‹ค๋กœ ๋‹ค๊ฐ€์˜ต๋‹ˆ๋‹ค. ํ•จ๊ป˜ ๋”ฐ๋ผ๊ฐ€๋ด…์‹œ๋‹ค! <a rel="mention" class="u-url mention" href="https://mastodon.social/@pfefferle">@pfefferle</a>


2025๋…„ ๋กœ๋“œ๋งต: ์›Œ๋“œํ”„๋ ˆ์Šค ํŽ˜๋”๋ ˆ์ด์…˜์˜ ๋ฏธ๋ž˜๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค

์šฐ์ฃผ๋ณต์„ ์ž…์€ ์™€ํ‘ธ์šฐ๊ฐ€ ํŽ˜๋””๋ฒ„์Šค ๋กœ๊ณ ๊ฐ€ ์ƒˆ๊ฒจ์ง„ ๊ณต์„ ๋“ค๊ณ  ์šฐ์ฃผ๋ฅผ ๋‚ ์•„๋‹ค๋‹™๋‹ˆ๋‹ค.

ActivityPub ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋งŽ์€ ๋ณ€ํ™”๊ฐ€ ์ง„ํ–‰ ์ค‘์ด๋ฉฐ, ์•ž์œผ๋กœ ์„ ๋ณด์ผ ๊ธฐ๋Šฅ๋“ค์„ ์—ฌ๋Ÿฌ๋ถ„๊ป˜ ๊ณต์œ ํ•˜๊ฒŒ ๋˜์–ด ๋งค์šฐ ๊ธฐ์ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ข…์ข… GitHub ์ด์Šˆ์™€ ํ† ๋ก ์—์„œ ์ด ๋กœ๋“œ๋งต์„ ์ฐธ์กฐํ•˜์ง€๋งŒ, ์ง€๊ธˆ๊นŒ์ง€ ์ „์ฒด ๋กœ๋“œ๋งต ๊ฒŒ์‹œ๋ฌผ์ด๋‚˜ ๊ณต์‹์ ์ธ ๋ณ€๊ฒฝ ๋กœ๊ทธ๋ฅผ ๊ณต๊ฐœํ•˜์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด ๊ฒŒ์‹œ๋ฌผ์€ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์•ž์œผ๋กœ ๊ณ„ํš๋œ ๋‚ด์šฉ๊ณผ ๋‹ค๊ฐ€์˜ฌ ์—…๋ฐ์ดํŠธ๋ฅผ ๋” ์ž˜ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•œ ์ฒซ๊ฑธ์Œ์ž…๋‹ˆ๋‹ค.

์˜ฌํ•ด ์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋Š” ์›Œ๋“œํ”„๋ ˆ์Šค๊ฐ€ ํŽ˜๋””๋ฒ„์Šค(Fediverse)์˜ ์ผ๋ฅ˜ ์‹œ๋ฏผ(first-class citizen) ์œผ๋กœ ์ž๋ฆฌ์žก๋„๋ก ์™„์ „ํ•œ ActivityPub ๊ฒฝํ—˜์„ ์™„์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ฆ‰, ๋‹จ์ˆœํžˆ ๋„คํŠธ์›Œํฌ์— ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ํŒ”๋กœ์šฐํ•˜๊ณ , ์ฝ๊ณ , ์ƒํ˜ธ์ž‘์šฉํ•˜๋ฉฐ, ์ค‘์žฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๋ชจ๋“  ๊ณผ์ •์„ ์›Œ๋“œํ”„๋ ˆ์Šค ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž์—ฐ์Šค๋Ÿฝ๊ณ  ์›ํ™œํ•˜๊ฒŒ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ด ๋กœ๋“œ๋งต์€ ๊ณ ์ •๋œ ๊ณ„ํš์ด ์•„๋‹ˆ๋ฉฐ, ์ปค๋ฎค๋‹ˆํ‹ฐ ํ”ผ๋“œ๋ฐฑ, ์›Œ๋“œํ”„๋ ˆ์Šค ์—…๋ฐ์ดํŠธ, ํŽ˜๋””๋ฒ„์Šค ์ „๋ฐ˜์˜ ๋ณ€ํ™”์— ๋”ฐ๋ผ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋ฐ”๋€” ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ๋‚˜์•„๊ฐ€๋Š” ๋ฐฉํ–ฅ์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.


ํŒ”๋กœ์›Œ / ํŒ”๋กœ์ž‰

ํ˜„์žฌ ์šฐ๋ฆฌ๊ฐ€ ์ง‘์ค‘ํ•˜๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. GitHub์—์„œ ์ง„ํ–‰ ์ƒํ™ฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ํŒ”๋กœ์›Œ(Followers) ๋งŒ ์ง€์›ํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ๋ถ„์˜ ์‚ฌ์ดํŠธ๊ฐ€ ๋‹ค๋ฅธ ํŽ˜๋””๋ฒ„์Šค ์‚ฌ์šฉ์ž๋ฅผ ํŒ”๋กœ์šฐํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์•„์ง ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ โ€œ๋ฆฌ๋” ๊ฒฝํ—˜(Reader Experience)โ€๊ณผ ๊ฐ™์€ ์ƒˆ๋กœ์šด ์ด๋‹ˆ์…”ํ‹ฐ๋ธŒ์™€ ํ•จ๊ป˜ ์ด ๋ถ€๋ถ„์€ ๋ฐ˜๋“œ์‹œ ๊ฐœ์„ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ง„์ •ํ•œ ์–‘๋ฐฉํ–ฅ ๊ด€๊ณ„(ํŒ”๋กœ์›Œ์™€ ํŒ”๋กœ์ž‰ ๋ชจ๋‘)๋ฅผ ์ง€์›ํ•˜๋ ค๋ฉด, ๋‘ ๊ฐ€์ง€ ์—ฐ๊ฒฐ ์œ ํ˜•์„ ๋ช…ํ™•ํžˆ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชจ๋ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ ์‹œ์Šคํ…œ์€ GUID๋ฅผ ์‚ฌ์šฉํ•ด ์›๊ฒฉ ์•กํ„ฐ(remote actor)๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฐฉ์‹์ธ๋ฐ, ์ด๋ฅผ ์œ„ํ•ด ์„ค๊ณ„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ๋กœ์„œ๋Š” ์›๊ฒฉ ์•กํ„ฐ๋ฅผ ์‚ฌ์ดํŠธ์˜ ํŒ”๋กœ์›Œ๋กœ ์ €์žฅ์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์‚ฌ์ดํŠธ๊ฐ€ ๊ทธ๋“ค์„ ๋‹ค์‹œ ํŒ”๋กœ์šฐํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์‰ฝ๊ฒŒ ์ง€์›ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

ํŒ”๋กœ์ž‰ ๊ธฐ๋Šฅ์„ ๊น”๋”ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ๋ฐ์ดํ„ฐ ์ €์žฅ๊ณผ ์—ฐ๊ฒฐ ๋ฐฉ์‹์„ ์žฌ๊ณ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


์•กํ„ฐ(Actors;ํ–‰์œ„์ž)

์ด ๋ฌธ์ œ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ˜„์žฌ ์‚ฌ์ดํŠธ์˜ ๋กœ์ปฌ ์‚ฌ์šฉ์ž์™€ ๋‹ค๋ฅธ Fediverse ์„œ๋ฒ„์˜ ์›๊ฒฉ ์‚ฌ์šฉ์ž ๋ชจ๋‘์™€ ๊ฐ™์€ ํ–‰์œ„์ž๋ฅผ ๋ชจ๋ธ๋งํ•˜๋Š”ย ๋ฐฉ๋ฒ•๊ณผ ๊ด€๋ จ๋œ ๋” ๊ด‘๋ฒ”์œ„ํ•œ ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๊ฐ€์ƒ ์‚ฌ์šฉ์ž(virtual users) ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•กํ„ฐ๋ฅผ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ WordPress๊ฐ€ ์‚ฌ์šฉ์ž๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค์‹œ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  ํŽ˜๋”๋ ˆ์ด์…˜์ด ์ž‘๋™ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ์ดˆ๊ธฐ์˜ ์‹ค์šฉ์ ์ธ ์„ ํƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์„ฑ์žฅํ•จ์— ๋”ฐ๋ผ, ํŠนํžˆ Following ๋ฐ Reader Experience์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋จ์— ๋”ฐ๋ผ ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋งˆ์ฐฐ์„ ์ผ์œผํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฐ€์ƒ ์‚ฌ์šฉ์ž๋Š” ์ผ๋ฐ˜ WordPress ์‚ฌ์šฉ์ž์ฒ˜๋Ÿผ ํ–‰๋™ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋งˆ๋‹ค ํŠน์ˆ˜ํ•œ ์šฐํšŒ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•ด์ง‘๋‹ˆ๋‹ค.

์ด๋กœ ์ธํ•ด ์‹œ์Šคํ…œ์ด ์ ์  ๋ณต์žกํ•ด์ง€๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค.
์›Œ๋“œํ”„๋ ˆ์Šค ๊ธฐ์กด ๊ตฌ์กฐ์™€ ๋” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ†ตํ•ฉ๋˜๋Š”, ๋ณด๋‹ค ํ†ตํ•ฉ๋œ ์•กํ„ฐ ๋ชจ๋ธ๋กœ ๋‚˜์•„๊ฐ€๋Š” ๊ฒƒ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์œ ์—ฐํ•˜๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ธธ์ž…๋‹ˆ๋‹ค.


๊ด€๋ฆฌ ๋ฐ ์ค‘์žฌ(Moderation)

ํ˜„์žฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ActivityPub ์š”์ฒญ์ด ์ฒ˜๋ฆฌ๋˜๊ธฐ ์ „์— WordPress์˜ ๋‚ด์žฅ ๊ธฐ๋Šฅ์ธ โ€œํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ๋Œ“๊ธ€ ํ‚ค์›Œ๋“œ(Disallowed Comment Keys)โ€ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ, ๋ฐ›์€ ํŽธ์ง€ํ•จ ์—”๋“œํฌ์ธํŠธ์—์„œ ์›์น˜ ์•Š๋Š” ์ฝ˜ํ…์ธ ๋ฅผ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ํ‚ค์›Œ๋“œ ๋˜๋Š” ๋„๋ฉ”์ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ํ™œ๋™์„ ์ฐจ๋‹จํ•˜๊ธฐ ์œ„ํ•ด, ๋Œ“๊ธ€์— ์ ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๊ทœ์น™์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋งค์šฐ ๋ฌด๋š๋šํ•ฉ๋‹ˆ๋‹ค: ์ด ๋ฐฉ๋ฒ•์€ ๋‹จ์ˆœํ•œ ํ‚ค์›Œ๋“œ ํ•„ํ„ฐ์— ๋ถˆ๊ณผํ•ด, ์ •๊ตํ•œ ์ค‘์žฌ ๋„๊ตฌ๋ผ๊ณ  ๋ณด๊ธด ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ด๋ฏธ์ง€ ๊ธฐ๋ฐ˜ ๋Œ“๊ธ€์ด๋‚˜ ๋” ํ’๋ถ€ํ•œ ๋ฏธ๋””์–ด ์ƒํ˜ธ ์ž‘์šฉ์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•  ๋•Œ, ์ด ํ•œ๊ณ„๋Š” ์ ์  ๋” ์ปค์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์‚ฌ์ดํŠธ ์†Œ์œ ์ž์—๊ฒŒ ํŽ˜๋”๋ ˆ์ด์…˜ ์ฝ˜ํ…์ธ ์˜ ๊ณ ์œ ํ•œ ๋ฌธ์ œ์— ๋งž์ถ˜ ์„ธ๋ถ„ํ™”๋œ ์ค‘์žฌ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์ „์šฉ ํ•„ํ„ฐ๋ง ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๊ตฌ์ถ•์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ ์ด์Šˆ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”:
๐Ÿ‘‰ GitHub โ€” ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ํŽ˜๋””๋ฒ„์Šค์˜ ์ค‘์žฌ ๋ฐ ์‹ ๋ขฐ์™€ ์•ˆ์ „(trust & safety)์™€ ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ์ž‘์šฉํ•˜๋‚˜์š”?


๋ฆฌ๋”(Reader)

์™„์ „ํ•œ ๋ฆฌ๋” ๊ฒฝํ—˜์€ ์šฐ๋ฆฌ์˜ ์žฅ๊ธฐ ๋ชฉํ‘œ ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ, ์›Œ๋“œํ”„๋ ˆ์Šค ์‚ฌ์ดํŠธ์— ์™„์ „ํ•œ ActivityPub/Fediverse ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋งˆ์ง€๋ง‰ ํฐ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ์—ฌ๋Ÿฌ๋ถ„์˜ ์‚ฌ์ดํŠธ๋ฅผ ํŒ”๋กœ์šฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์ง€๋งŒ, ์—ฌ๋Ÿฌ๋ถ„์ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ˜ํ…์ธ ๋ฅผ ๊ตฌ๋…ํ•˜๊ณ  ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ ์ œ๊ณต ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์›Œ๋“œํ”„๋ ˆ์Šค ๋‚ด๋ถ€์— โ€œํƒ€์ž„๋ผ์ธโ€์ด ์•„์ง ์—†๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋จผ์ € ๋‹จ์ˆœํ•˜๊ณ  ์œ ์—ฐํ•œ ์ ‘๊ทผ๋ฒ•์œผ๋กœ ์‹œ์ž‘ํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.
์ฆ‰, ์›๊ฒฉ ๊ฒŒ์‹œ๋ฌผ์„ ์ €์žฅํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ•ด, WordPress.com Reader์™€ ๊ฐ™์€ ๋„๊ตฌ๋‚˜ ์„œ๋“œํŒŒํ‹ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ(์˜ˆ: Friends, Event Bridge for ActivityPub)๊ณผ ํ˜ธํ™˜์„ฑ์„ ํ™•๋ณดํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๊ธฐ๋ฐ˜์ด ๋งˆ๋ จ๋˜๋ฉด, ์‚ฌ์ดํŠธ ์†Œ์œ ์ž์™€ ์‚ฌ์šฉ์ž๊ฐ€ ์›Œ๋“œํ”„๋ ˆ์Šค ๋‚ด์—์„œ ๋ฐ”๋กœ ํŽ˜๋””๋ฒ„์Šค ๊ฒŒ์‹œ๋ฌผ์„ ํŒ”๋กœ์šฐํ•˜๊ณ  ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ์ง์ ‘ ์ง€์› ๊ธฐ๋Šฅ์„ ์ ์ง„์ ์œผ๋กœ ์ถ”๊ฐ€ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.


๋‹ค์ด๋ ‰ํŠธ ๋ฉ”์‹œ์ง€(Direct Messages)

์™„์ „ํ•œ ๋ฆฌ๋” ๊ฒฝํ—˜์œผ๋กœ ๋‚˜์•„๊ฐ€๋Š” ๊ณผ์ •์—์„œ, DM ์ง€์›๋„ ํƒ์ƒ‰ ์ค‘์ž…๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์€ ์ž์ฃผ ์š”์ฒญ๋˜๋Š” ์ค‘์š”ํ•œ ํŽ˜๋””๋ฒ„์Šค ์ƒํ˜ธ์ž‘์šฉ์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” ์šฐ์„  ๊ฐœ์ธ ๋ฉ”์‹œ์ง•์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์ดˆ๊ธฐ ๊ตฌํ˜„๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด, ์‹ค์ œ ์‚ฌ์šฉ ๊ฒฝํ—˜์„ ๋ฐ”ํƒ•์œผ๋กœ ์ ์ฐจ ํ™•์žฅํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.


ํ”„๋กœํ•„ ์™„์ „ ์‚ญ์ œ

GDPR์˜ ํ•ต์‹ฌ ์›์น™ ์ค‘ ํ•˜๋‚˜๋Š” โ€œ์žŠํ˜€์งˆ ๊ถŒ๋ฆฌ(right to be forgotten)โ€์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์›๊ฒฉ ์‚ญ์ œ(remote deletions) ๋ฅผ ์ง€์›ํ•˜์ง€๋งŒ, ๋กœ์ปฌ ์‚ฌ์šฉ์ž ํ–‰๋™์— ๋Œ€ํ•ด Delete Activities๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” WordPress๊ฐ€ ๋Œ€๋ถ€๋ถ„์˜ ํŽ˜๋”๋ ˆ์ด์…˜ ์†Œ์…œ ๋„คํŠธ์›Œํฌ์™€ ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๋Š” ์ค‘๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ • ์ž‘์—…(์˜ˆ: ํ”Œ๋Ÿฌ๊ทธ์ธ ๋น„ํ™œ์„ฑํ™”)์— ๋Œ€ํ•ด Delete Activities๋ฅผ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์€ WordPress์˜ ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋‹จ๊ณ„์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์šฐ์„  ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ •์˜ํ•˜๊ณ , ์‚ฌ์šฉ์ž์—๊ฒŒ ์ ์ ˆํ•œ Delete Activities ํŠธ๋ฆฌ๊ฑฐ ๋ฐฉ๋ฒ•์„ ์•ˆ๋‚ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ:
๐Ÿ‘‰ GitHub โ€” User Delete Milestone


ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ API (ํƒ์ƒ‰ ๋‹จ๊ณ„)

ํŽ˜๋””๋ฒ„์Šค ์„œ๋ฒ„ ๊ฐ„ ํ†ต์‹  ๋ฐฉ์‹ ์™ธ์—๋„, ActivityPub์€ โ€œํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„โ€ API๋„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์ด API๋Š” ์ฃผ๋กœ ๋ชจ๋ฐ”์ผ ์•ฑ ๊ฐ™์€ ์•ฑ๊ณผ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํŽ˜๋””๋ฒ„์Šค ์„œ๋ฒ„์— ์ฝ˜ํ…์ธ ๋ฅผ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฏธ๋ž˜์—๋Š” WordPress์— ๋Œ€ํ•œ ํฅ๋ฏธ๋กœ์šด ๊ฐ€๋Šฅ์„ฑ์ด ์—ด๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค โ€” ์˜ˆ๋ฅผ ๋“ค์–ด WordPress๊ฐ€ย ๋ธŒ๋ฆฌ์ง€(bridge) ๋‚˜ ํ”„๋ก์‹œ(proxy)ย ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ๋‹ค๋ฅธ ๋„๊ตฌ๋‚˜ ํ”Œ๋žซํผ์—์„œ ์ฝ˜ํ…์ธ ๋ฅผ ๋” ์‰ฝ๊ฒŒ ๊ฐ€์ ธ์˜ค๊ณ  ํŽ˜๋”๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋‹จ๊ณ„์—์„œ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๊ด€์‹ฌ๊ณผ ์ž ์žฌ์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํƒ์ƒ‰ ๋ฐ ํ‰๊ฐ€ ์ค‘์ž…๋‹ˆ๋‹ค.


์†Œ์‹ ๊ณ„์† ์ „ํ•ด๋“œ๋ฆฝ๋‹ˆ๋‹ค

์ด ๋กœ๋“œ๋งต์˜ ์ง„ํ–‰ ์ƒํ™ฉ์— ๋Œ€ํ•ด ๊ณ„์† ์†Œ์‹์„ ์ „ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ๋ฆด๋ฆฌ์Šค๊ฐ€ ์ถœ์‹œ๋  ๋•Œ๋งˆ๋‹ค ์ตœ์‹  ๊ธฐ๋Šฅ๊ณผ ๊ฐœ์„  ์‚ฌํ•ญ์„ ์†Œ๊ฐœํ•˜๋Š” ๊ฒŒ์‹œ๋ฌผ์„ ๋ฐœํ–‰ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋ฆฌ๋” ๊ฒฝํ—˜์ด๋‚˜ ํ™•์žฅ๋œ ์ค‘์žฌ ๋„๊ตฌ์™€ ๊ฐ™์€ ๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด์„œ๋Š” ์ •๊ธฐ์ ์ธ ์—…๋ฐ์ดํŠธ๋„ ๊ณต์œ ํ•˜์—ฌ ์ž‘์—…์ด ์ง„ํ–‰๋˜๋Š” ๊ณผ์ •์„ ํ•จ๊ป˜ ๋”ฐ๋ผ๊ฐ€์‹ค ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์–ธ์ œ๋‚˜ ๊ทธ๋ ‡๋“ฏ, ์—ฌ๋Ÿฌ๋ถ„์˜ ํ”ผ๋“œ๋ฐฑ๊ณผ ์•„์ด๋””์–ด๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.
์—ฌ๋Ÿฌ๋ถ„์˜ ์˜๊ฒฌ์ด ActivityPub ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ์„ฑ์žฅํ•˜๋Š” ์›Œ๋“œํ”„๋ ˆ์Šค ํŽ˜๋””๋ฒ„์Šค ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๋ฏธ๋ž˜๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค! ๐Ÿš€


๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

https://activitypub.blog/2025/06/11/our-2025-roadmap-building-the-future-of-wordpress-federation/

activitypub.blog

Our 2025 Roadmap: Building the Future of WordPress Federation

Weโ€™re excited to share this roadmap โ€” thereโ€™s a lot happening with the ActivityPub plugin, and we canโ€™t wait to show you whatโ€™s coming next. We often refer to this roadmap in GitHub issues and discโ€ฆ

@apps@toot.fedilab.app

Summer is the worst season for animals. As the holidays get closer, shelters fill with pets left behind.

My cat and dog came from there. Haru (the cat) waited two years in a shelter, and our dog (Tanos) is one a relative could no longer keep. A black cat and a malinois, now sharing the same stairs.

Out of conviction, I built pawfed.org/how-it-works, a service working with and .

It is not the perfect solution, but if you can help your local shelter, please do.

Tanos, a tan Malinois, sits alert on a step while Haru, a small black cat, rests calmly on the step above, looking off to the side. Both are settled and at ease.
ALT text

Tanos, a tan Malinois, sits alert on a step while Haru, a small black cat, rests calmly on the step above, looking off to the side. Both are settled and at ease.

@ViP@mastodon.social

Installed yesterday on my Proxmox home server to fiddle around and was about to deploy . But this "Danger" Box in the docs, saying the domain will be taken forever by this instance of GTS scares me. Or is this the case for every Server anyway?

I thought, only the full handle like "@user@social.domain.net" can be problematic when being refused because of caching and generated keys. Any experience with that? docs.gotosocial.org/en/v0.22.0

@_elena@mastodon.social

Working on a brand new post for my series "a newbie's guide to self-hosting with " - showing people how to set up their own microblogging instance.

Sorry it's been taking a while: I started over when I realized most people use subdomains... and I'm doing a thorough step-by-step explainer that any newbie could follow - I hope ๐Ÿ˜…

The whole series is available here:

๐Ÿ”— : blog.elenarossini.com/a-newbie

a screenshot of GoToSocial's installation page on YunoHost that reads: "GoToSocial
Current version: 0.22.0~ynh1
Potential alternative to: Akkoma, Bluesky, Calckey, Mastodon, Misskey, Pleroma, Threads, X

GoToSocial is a fast ActivityPub social network server, written in Golang.

With GoToSocial, you can keep in touch with your friends, post, read, and share images and articles. All without being tracked or advertised to!

The official documentation is at docs.gotosocial.org.

Admins are strongly encouraged to read the documentation of this package after installing it. It is available in the webadmin under Applications > gotosocial (at the bottom) or here on the package's repository!

Please note that this package uses the "i'm so tired" software license 1.0, please read it and accept it before proceeding with installation."
ALT text

a screenshot of GoToSocial's installation page on YunoHost that reads: "GoToSocial Current version: 0.22.0~ynh1 Potential alternative to: Akkoma, Bluesky, Calckey, Mastodon, Misskey, Pleroma, Threads, X GoToSocial is a fast ActivityPub social network server, written in Golang. With GoToSocial, you can keep in touch with your friends, post, read, and share images and articles. All without being tracked or advertised to! The official documentation is at docs.gotosocial.org. Admins are strongly encouraged to read the documentation of this package after installing it. It is available in the webadmin under Applications > gotosocial (at the bottom) or here on the package's repository! Please note that this package uses the "i'm so tired" software license 1.0, please read it and accept it before proceeding with installation."

@strypey @rl_dane

Btw, I am keeping a list for myself on projects that enter the fediverse that use AI and/or are proprietary. I see these as risk factors to trigger unwanted corporate interest when they demonstrate there's open market space in the new niches they are exploring. And able to do that very quickly with LLM help, or more smartly (than the average FOSS project) with an enterpreneurial mindset.

And the weird thing is.. there is another Harmony project with a similar but different codebase and different website. And this one has support. It is also AI-coded (project was at v1.2 when the repo was only 2 weeks old, with a huge codebase):

mony.lol

github.com/y4my4my4m/harmony

github.com

GitHub - y4my4my4m/harmony: Federated social app: Discord-style servers and chat with ActivityPub. Vue 3 + Supabase + Tauri.

Federated social app: Discord-style servers and chat with ActivityPub. Vue 3 + Supabase + Tauri. - y4my4my4m/harmony

@strypey@mastodon.nzoss.nz

about , a bleeding-edge project to build a decentralised replacement for Miscord using ActivityPub, E2EE using Vodozemac, a cryptography library used in Matrix software;

joinharmony.app/

Source code is on GritHub, under AGPL;

github.com/zcharef/harmony

Anyone know anything about this? So far I haven't been able to find fediverse accounts for the project itself, or the creator.

github.com

GitHub - zcharef/harmony: Open-source, privacy-first group chat. Discord's UX, Signal's principles. E2EE, self-hostable, single binary.

Open-source, privacy-first group chat. Discord's UX, Signal's principles. E2EE, self-hostable, single binary. - zcharef/harmony

@weekinfediverse@mitra.social
@weekinfediverse@mitra.social
@apps@toot.fedilab.app

Summer is the worst season for animals. As the holidays get closer, shelters fill with pets left behind.

My cat and dog came from there. Haru (the cat) waited two years in a shelter, and our dog (Tanos) is one a relative could no longer keep. A black cat and a malinois, now sharing the same stairs.

Out of conviction, I built pawfed.org/how-it-works, a service working with and .

It is not the perfect solution, but if you can help your local shelter, please do.

Tanos, a tan Malinois, sits alert on a step while Haru, a small black cat, rests calmly on the step above, looking off to the side. Both are settled and at ease.
ALT text

Tanos, a tan Malinois, sits alert on a step while Haru, a small black cat, rests calmly on the step above, looking off to the side. Both are settled and at ease.

@apps@toot.fedilab.app

Summer is the worst season for animals. As the holidays get closer, shelters fill with pets left behind.

My cat and dog came from there. Haru (the cat) waited two years in a shelter, and our dog (Tanos) is one a relative could no longer keep. A black cat and a malinois, now sharing the same stairs.

Out of conviction, I built pawfed.org/how-it-works, a service working with and .

It is not the perfect solution, but if you can help your local shelter, please do.

Tanos, a tan Malinois, sits alert on a step while Haru, a small black cat, rests calmly on the step above, looking off to the side. Both are settled and at ease.
ALT text

Tanos, a tan Malinois, sits alert on a step while Haru, a small black cat, rests calmly on the step above, looking off to the side. Both are settled and at ease.

@andros@activity.andros.dev

Big news for Org Social! ๐ŸŽ‰ The Relay now has bridges: you can follow Mastodon (ActivityPub) accounts and RSS/Atom feeds directly from any Org Social client.

A bridge is a virtual social.org feed generated by the Relay. Just add its URL to your follow list like any other feed:

Follow a Mastodon account:
https://relay.org-social.org/bridge/activitypub/@mastodon@mastodon.social/

Follow an RSS feed (e.g. xkcd):
https://relay.org-social.org/bridge/rss/?url=https%3A%2F%2Fxkcd.com%2Frss.xml

Docs: https://github.com/tanrax/org-social/blob/main/README.md#follow-a-mastodon-account-or-an-rss-feed

#OrgSocial #ActivityPub #Fediverse #RSS #IndieWeb

github.com

org-social/README.md at main ยท tanrax/org-social

Org Social is a decentralized social network that runs on an Org Mode file over HTTP. - tanrax/org-social

@apps@toot.fedilab.app

While most of you know my main account for , months ago I wanted to work on something new.
Being able to publish this code in production is an important step for me.
Yes, it is possible to run an server on your phone, with DMs and a portable identity.
And you are no longer tied to a single model like text, media or video. No need for separate apps: one account does it all, and you switch in one tap. Only your device owns the data, and the rules are on your side.

mastodon.social

Holos Social (@HolosSocial@mastodon.social)

Today, I updated the documentation for installing a relay (Docker, manual, automatic script). Behind the scenes, I reproduced each installation to adapt and fix the doc. Yes, the official #HolosSocial relay is coming to production after a long 10 months of work. The #YunoHost package will come next. Around 800 users on a relay is a small number of GB, everything is optimised, and it can run on a small VPS. I am quite proud of this work. Thank you for making it possible with your support.

@HolosSocial@mastodon.social

Today, I updated the documentation for installing a relay (Docker, manual, automatic script).
Behind the scenes, I reproduced each installation to adapt and fix the doc.
Yes, the official relay is coming to production after a long 10 months of work. The package will come next.
Around 800 users on a relay is a small number of GB, everything is optimised, and it can run on a small VPS.
I am quite proud of this work. Thank you for making it possible with your support.

@apps@toot.fedilab.app

While most of you know my main account for , months ago I wanted to work on something new.
Being able to publish this code in production is an important step for me.
Yes, it is possible to run an server on your phone, with DMs and a portable identity.
And you are no longer tied to a single model like text, media or video. No need for separate apps: one account does it all, and you switch in one tap. Only your device owns the data, and the rules are on your side.

mastodon.social

Holos Social (@HolosSocial@mastodon.social)

Today, I updated the documentation for installing a relay (Docker, manual, automatic script). Behind the scenes, I reproduced each installation to adapt and fix the doc. Yes, the official #HolosSocial relay is coming to production after a long 10 months of work. The #YunoHost package will come next. Around 800 users on a relay is a small number of GB, everything is optimised, and it can run on a small VPS. I am quite proud of this work. Thank you for making it possible with your support.

@HolosSocial@mastodon.social

Today, I updated the documentation for installing a relay (Docker, manual, automatic script).
Behind the scenes, I reproduced each installation to adapt and fix the doc.
Yes, the official relay is coming to production after a long 10 months of work. The package will come next.
Around 800 users on a relay is a small number of GB, everything is optimised, and it can run on a small VPS.
I am quite proud of this work. Thank you for making it possible with your support.

@weekinfediverse@mitra.social
@andros@activity.andros.dev

Big news for Org Social! ๐ŸŽ‰ The Relay now has bridges: you can follow Mastodon (ActivityPub) accounts and RSS/Atom feeds directly from any Org Social client.

A bridge is a virtual social.org feed generated by the Relay. Just add its URL to your follow list like any other feed:

Follow a Mastodon account:
https://relay.org-social.org/bridge/activitypub/@mastodon@mastodon.social/

Follow an RSS feed (e.g. xkcd):
https://relay.org-social.org/bridge/rss/?url=https%3A%2F%2Fxkcd.com%2Frss.xml

Docs: https://github.com/tanrax/org-social/blob/main/README.md#follow-a-mastodon-account-or-an-rss-feed

#OrgSocial #ActivityPub #Fediverse #RSS #IndieWeb

github.com

org-social/README.md at main ยท tanrax/org-social

Org Social is a decentralized social network that runs on an Org Mode file over HTTP. - tanrax/org-social

@weekinfediverse@mitra.social
@SolSoCoG@ieji.de

Check out rel.re if you are looking for a strong , I'm constantly trying to improve it or find quirks of specific relaying implementations to support as many AP services as possible (that do relaying). tor onion relaying also possible. (oh now that i think about it, ill generate a tor onion link for relre)

rel.re

Relre Relay

@SolSoCoG@ieji.de

Check out rel.re if you are looking for a strong , I'm constantly trying to improve it or find quirks of specific relaying implementations to support as many AP services as possible (that do relaying). tor onion relaying also possible. (oh now that i think about it, ill generate a tor onion link for relre)

rel.re

Relre Relay

@grishka@mastodon.social

I'm adding support for multiple public keys per actor in Smithereen for future-proofing purposes. Are there any signature algorithms other than RSA currently in use on the fediverse? ECDSA maybe?

@mariusor@metalhead.club

Made a lot of progress on the test containers setup.

We now can have moderately complicated testing setups that will soonishly replace the old integration tests.

@mariusor@metalhead.club

Made a lot of progress on the test containers setup.

We now can have moderately complicated testing setups that will soonishly replace the old integration tests.

@grishka@mastodon.social

I'm adding support for multiple public keys per actor in Smithereen for future-proofing purposes. Are there any signature algorithms other than RSA currently in use on the fediverse? ECDSA maybe?

@FediTips@social.growyourown.services

FitPub is a new fitness tracking platform for the Fediverse, sort of an alternative to Strava. You can follow their official account for more news:

โžก๏ธ @fitpub

There are also more details on FitPub's Codeberg page:

โžก๏ธ codeberg.org/fitpub/fitpub

(To avoid confusion, FitPub is a totally separate project to the Fediverse trail and journey tracker Wanderer, which you can find out more about at wanderer.to )

wanderer.to

wanderer โ€” Your trails. Your data. Your server.

The open-source, self-hosted trail catalogue. Organize, plan, and share GPS tracks without the algorithm, the paywall, or the subscription.

@FediTips@social.growyourown.services

FitPub is a new fitness tracking platform for the Fediverse, sort of an alternative to Strava. You can follow their official account for more news:

โžก๏ธ @fitpub

There are also more details on FitPub's Codeberg page:

โžก๏ธ codeberg.org/fitpub/fitpub

(To avoid confusion, FitPub is a totally separate project to the Fediverse trail and journey tracker Wanderer, which you can find out more about at wanderer.to )

wanderer.to

wanderer โ€” Your trails. Your data. Your server.

The open-source, self-hosted trail catalogue. Organize, plan, and share GPS tracks without the algorithm, the paywall, or the subscription.

@FediTips@social.growyourown.services

FitPub is a new fitness tracking platform for the Fediverse, sort of an alternative to Strava. You can follow their official account for more news:

โžก๏ธ @fitpub

There are also more details on FitPub's Codeberg page:

โžก๏ธ codeberg.org/fitpub/fitpub

(To avoid confusion, FitPub is a totally separate project to the Fediverse trail and journey tracker Wanderer, which you can find out more about at wanderer.to )

wanderer.to

wanderer โ€” Your trails. Your data. Your server.

The open-source, self-hosted trail catalogue. Organize, plan, and share GPS tracks without the algorithm, the paywall, or the subscription.

@smallcircles@social.coop ยท Reply to Tom Ootes

@tomootes @jelte @DigitaleOverheid @Gina

To those not aware I would like to point out two relevant @forgejo locations where contributions can be readily made..

The delightful curated list, where contributions can be added via a PR or by creating a new issue in the repo's issue tracker:

delightful.coding.social/delig

And the forgejo-contrib organization, where among others the based forge federation project is taking shape:

codeberg.org/forgejo-contrib/f

Related to the latter, I'd also like to give attention to the ActivityPub protocol extension, which is really promising but needs an impetus from the community to bring the specifications to a higher level of maturity, and get good reference implementations to help open standard adoption:

forgefed.org
cc @forgefed

forgefed.org

ForgeFed

@smallcircles@social.coop ยท Reply to Tom Ootes

@tomootes @jelte @DigitaleOverheid @Gina

To those not aware I would like to point out two relevant @forgejo locations where contributions can be readily made..

The delightful curated list, where contributions can be added via a PR or by creating a new issue in the repo's issue tracker:

delightful.coding.social/delig

And the forgejo-contrib organization, where among others the based forge federation project is taking shape:

codeberg.org/forgejo-contrib/f

Related to the latter, I'd also like to give attention to the ActivityPub protocol extension, which is really promising but needs an impetus from the community to bring the specifications to a higher level of maturity, and get good reference implementations to help open standard adoption:

forgefed.org
cc @forgefed

forgefed.org

ForgeFed

@fitpub@fosstodon.org

FitPub 1.2.0 is here!

This release brings finer privacy controls, local visibility, commutes, a major federation rewrite, improved profiles, verified email changes, durable email delivery, and a much more capable admin area for users, federation queues, logs, diagnostics, and monitoring.

It also includes extensive reliability, security, performance, and UX improvements.

Full release notes:
codeberg.org/fitpub/fitpub/rel

codeberg.org

Cookie monster!

@fitpub@fosstodon.org

FitPub 1.2.0 is here!

This release brings finer privacy controls, local visibility, commutes, a major federation rewrite, improved profiles, verified email changes, durable email delivery, and a much more capable admin area for users, federation queues, logs, diagnostics, and monitoring.

It also includes extensive reliability, security, performance, and UX improvements.

Full release notes:
codeberg.org/fitpub/fitpub/rel

codeberg.org

Cookie monster!

@smallcircles@social.coop

๐Ÿค”

is a *social* network, right? About being different from corporate anti-social media. Has ambitions to be more diverse, inclusive, cohesive. To provide inter-community social networking where people with similar interests find each other and interact.

Like the developer community, for instance. The group of people who make all this possible in the first place. Together they uphold the fediverse technology ecosystem and are collectively responsible for evolving it. They chose fediverse as their communication medium, dogfooding their creations, even though this comes with its disadvantages. is ephemeral and fleety and discussions are dispersed and fragmented. There are clear points of improvements for the , frequently discussed.

What's very odd is that most AP devs hardly:

1. Engage with other AP devs posts.
2. Boost each other's msgs for visibility.
3. Use hashtags for discoverability.

Low-hanging fruit for improvement?

@federatedmind@techhub.social

This week, we cover the writing layer of the fediverse: Ghost, WriteFreely, Micro.blog, Plume, WordPress, and Flipboard. Text was ActivityPub's first real workload, but these platforms didn't all arrive at federation the same way.

Ghost: a UK non-profit that funds Fedify (by @hongminhee) the framework its federation is built on. it's a publisher and a fediverse client at once, with an inbox as well as an outbox. Our newsletter is also powered by it, so @index is followable from any Mastodon app right now.

WriteFreely: one primary maintainer, Matt Baer (@matt), roughly 1,400 of 1,900+ commits, going since 2015. Funded by his own hosted product, Write.as.

Micro.blog: a Kickstarter By Manton Reese (@manton) that funded the platform before it had a single user. POSSE, native ActivityPub, and native Bluesky, no bridge.

Plume: a simple platform that also supported collaborative multi-author blogs. But no longer actively developed - it recommends WriteFreely and WordPress instead of itself.

WordPress: built-in ActivityPub (using plugin by Matthias Pfefferle - @pfefferle) plus a native AT Protocol plugin and real moderation tooling.

Flipboard: curating other people's writing rather than hosting its own.

Part 3 of the "Fediverse Beyond Mastodon" series.

federatedmind.com/the-written-

An antique quill and inkwell against a vibrant multicolor cosmic backdrop, with constellation lines connecting points of light across a deep starfield. Magenta, cyan, violet, and amber tones.
ALT text

An antique quill and inkwell against a vibrant multicolor cosmic backdrop, with constellation lines connecting points of light across a deep starfield. Magenta, cyan, violet, and amber tones.

@smallcircles@social.coop

๐Ÿค”

is a *social* network, right? About being different from corporate anti-social media. Has ambitions to be more diverse, inclusive, cohesive. To provide inter-community social networking where people with similar interests find each other and interact.

Like the developer community, for instance. The group of people who make all this possible in the first place. Together they uphold the fediverse technology ecosystem and are collectively responsible for evolving it. They chose fediverse as their communication medium, dogfooding their creations, even though this comes with its disadvantages. is ephemeral and fleety and discussions are dispersed and fragmented. There are clear points of improvements for the , frequently discussed.

What's very odd is that most AP devs hardly:

1. Engage with other AP devs posts.
2. Boost each other's msgs for visibility.
3. Use hashtags for discoverability.

Low-hanging fruit for improvement?

@steve@social.technoetic.com

I've added several features to my C2S (Social API) Server testing tool. There's now an embedded automated test runner, the ability to create and post ActivityPub objects using schema-based forms or JSON templates, a server capability report, server capability JSON export (for custom reports), and an optional sidecar server for analyzing CORS issues.

Thanks to NLNet for funding parts of this tool.

github.com/steve-bate/activity

github.com

GitHub - steve-bate/activitypub-c2s-toolkit: An ActivityPub C2S client and related tools for developers.

An ActivityPub C2S client and related tools for developers. - steve-bate/activitypub-c2s-toolkit

@steve@social.technoetic.com

I've added several features to my C2S (Social API) Server testing tool. There's now an embedded automated test runner, the ability to create and post ActivityPub objects using schema-based forms or JSON templates, a server capability report, server capability JSON export (for custom reports), and an optional sidecar server for analyzing CORS issues.

Thanks to NLNet for funding parts of this tool.

github.com/steve-bate/activity

github.com

GitHub - steve-bate/activitypub-c2s-toolkit: An ActivityPub C2S client and related tools for developers.

An ActivityPub C2S client and related tools for developers. - steve-bate/activitypub-c2s-toolkit

@apps@toot.fedilab.app

carries posts, follows, likes and so on, but not moderation. A ban stays trapped on the instance that issued it. So, for instance, an account banned for racism on one instance stays unknown to the next. Moderation is activity too, and it should travel like the rest: signed and verifiable. This is a real problem, and others have explored it already. I will look into what already exists and see what we could build on for .

@smallcircles@social.coop

๐Ÿค”

is a *social* network, right? About being different from corporate anti-social media. Has ambitions to be more diverse, inclusive, cohesive. To provide inter-community social networking where people with similar interests find each other and interact.

Like the developer community, for instance. The group of people who make all this possible in the first place. Together they uphold the fediverse technology ecosystem and are collectively responsible for evolving it. They chose fediverse as their communication medium, dogfooding their creations, even though this comes with its disadvantages. is ephemeral and fleety and discussions are dispersed and fragmented. There are clear points of improvements for the , frequently discussed.

What's very odd is that most AP devs hardly:

1. Engage with other AP devs posts.
2. Boost each other's msgs for visibility.
3. Use hashtags for discoverability.

Low-hanging fruit for improvement?

@apps@toot.fedilab.app

carries posts, follows, likes and so on, but not moderation. A ban stays trapped on the instance that issued it. So, for instance, an account banned for racism on one instance stays unknown to the next. Moderation is activity too, and it should travel like the rest: signed and verifiable. This is a real problem, and others have explored it already. I will look into what already exists and see what we could build on for .

@smallcircles@social.coop ยท Reply to aproposnix

@aproposnix

This is a great and important article by @soatok

It also mentions how anyone, not just experts, can help make E2EE on the ActivityPub a reality.

For instance by devs by supporting 521a: Representing actor's public keys in their implementation:

fediverse.codeberg.page/fep/fe

Or help improve the of E2EE enabled fedi apps. Or even just spread the word around by :boosts_appreciated: boosting the article around, and give impetus to adoption.

See also:

swicg.github.io/activitypub-e2

publickey.directory/

publickey.directory

Public Key Directory - Key Transparency for the Fediverse

@aproposnix@mastodon.social
@aproposnix@mastodon.social
@aproposnix@mastodon.social
@fedizen@mastodon.social
@fedizen@mastodon.social
@apps@toot.fedilab.app

carries posts, follows, likes and so on, but not moderation. A ban stays trapped on the instance that issued it. So, for instance, an account banned for racism on one instance stays unknown to the next. Moderation is activity too, and it should travel like the rest: signed and verifiable. This is a real problem, and others have explored it already. I will look into what already exists and see what we could build on for .

@apps@toot.fedilab.app

carries posts, follows, likes and so on, but not moderation. A ban stays trapped on the instance that issued it. So, for instance, an account banned for racism on one instance stays unknown to the next. Moderation is activity too, and it should travel like the rest: signed and verifiable. This is a real problem, and others have explored it already. I will look into what already exists and see what we could build on for .

@apps@toot.fedilab.app

carries posts, follows, likes and so on, but not moderation. A ban stays trapped on the instance that issued it. So, for instance, an account banned for racism on one instance stays unknown to the next. Moderation is activity too, and it should travel like the rest: signed and verifiable. This is a real problem, and others have explored it already. I will look into what already exists and see what we could build on for .

@paul@oldfriends.live

What the fresh heck is this... It bogged down my federated Mastodon app enabled website, . Now I am scouring my Mastodon instance's server logs for this twit.

The linked readme url blog.bmn.dev/fedi-research.txt says, "I currently work on an attempt to build a reasonable recommendation engine for mastodon.
For this I set up a bot to listen to the major instances' public feeds.
If it is causing you considerable annoyances, please contact me!
You can find out more about me, including my contact information here: blog.bmn.dev/about

Thank you for running a mastodon instance!"

Their GitHub is github.com/fosefx

I currently work on an attempt to build a reasonable recommendation engine for mastodon.
For this I set up a bot to listen to the major instances' public feeds.
If it is causing you considerable annoyances, please contact me!
You can find out more about me, including my contact information here: https://blog.bmn.dev/about

Thank you for running a mastodon instance!
ALT text

I currently work on an attempt to build a reasonable recommendation engine for mastodon. For this I set up a bot to listen to the major instances' public feeds. If it is causing you considerable annoyances, please contact me! You can find out more about me, including my contact information here: https://blog.bmn.dev/about Thank you for running a mastodon instance!

@dmathieu@fosstodon.org
@dmathieu@fosstodon.org
@dmathieu@fosstodon.org
@richardsfotowelt@ruhr.social

Da will man auf seiner Website was ausprobieren und landet plรถtzlich im Fediverse. ๐Ÿ˜„

Nach ersten Experimenten mit ActivityPub und Pixelfed ist das jetzt mein erster Beitrag auf Mastodon. Mal sehen, wohin die Reise fรผhrt.

richards-fotowelt.de/testbeitr

richards-fotowelt.de

Testbeitrag. Zwischen Theorie Und Praxis - Richards Fotowelt

Dies ist ein Testbeitrag.Theorie ist, wenn man viel weiรŸ, aber nichts funktioniert.Theoretisch muss ich nur ein Plugin installieren und WordPress kann

@richardsfotowelt@ruhr.social

Da will man auf seiner Website was ausprobieren und landet plรถtzlich im Fediverse. ๐Ÿ˜„

Nach ersten Experimenten mit ActivityPub und Pixelfed ist das jetzt mein erster Beitrag auf Mastodon. Mal sehen, wohin die Reise fรผhrt.

richards-fotowelt.de/testbeitr

richards-fotowelt.de

Testbeitrag. Zwischen Theorie Und Praxis - Richards Fotowelt

Dies ist ein Testbeitrag.Theorie ist, wenn man viel weiรŸ, aber nichts funktioniert.Theoretisch muss ich nur ein Plugin installieren und WordPress kann

@apps@toot.fedilab.app

relay is confirmed to be very stable. I will officially tag it soon so admins can run their own relay with a script to easily install it on their VPS.
Using Holos with a custom domain and a cloud for media allows you to own your portable identity on the . Relays become only an infrastructure for it. Your device runs the server and works as smoothly as any other app. Micro-blogging, media, and video, all from a single account. Switch with a simple tap.

@apps@toot.fedilab.app

relay is confirmed to be very stable. I will officially tag it soon so admins can run their own relay with a script to easily install it on their VPS.
Using Holos with a custom domain and a cloud for media allows you to own your portable identity on the . Relays become only an infrastructure for it. Your device runs the server and works as smoothly as any other app. Micro-blogging, media, and video, all from a single account. Switch with a simple tap.

@steve@social.technoetic.com

Are there any server implementations using the actor model of computation? I'm not asking about ones just implemented in an actor model-capable programming language (Elixir), but ones that are fully or mostly implemented using that model. TIA

@steve@social.technoetic.com

Are there any server implementations using the actor model of computation? I'm not asking about ones just implemented in an actor model-capable programming language (Elixir), but ones that are fully or mostly implemented using that model. TIA

@fabio@manganiello.eu

๐Ÿ› ๏ธ New #Akkoma feature

Those who like me run Akkoma on home networks may have experienced timeouts when searching for posts by (Mastodon) URL.

Thatโ€™s because searching #ActivityPub elements using non-canonical URLs involves a bit of back and forth over HTTP, and for some reason Akkoma had a hardcoded timeout of 5 seconds for it - which means that many if not all the searches by Mastodon post URL failed, and the search task also crashed.

This PR adds support for a configurable fetch timeout:

# Set it to e.g. 15 seconds to allow the HTTP task
# more time to fetch remote resources
config :pleroma, Pleroma.Search, fetch_timeout: 15_000

If you want to try it out already (together with other features, such as support for Mastodon the quotes protocol and indexable flag on accounts), you can build Akkoma from my fork.

git.platypush.tech

akkoma

Mirror of https://akkoma.dev/AkkomaGang/akkoma

@federatedmind@techhub.social

The closing post in the "Fediverse Beyond Mastodon" maps forums, social reading, and music, the formats that don't fit the microblog.

The Threadiverse (Fediverse's answer to Reddit): Lemmy, Kbin/Mbin and PieFed (created by Rimu - @rimu).

Forums that predate federation: NodeBB (created by @julian) rewrote its core so every new forum federates by default.
Discourse (@Discourse) ships it as an opt-in, per-category plugin.
Both were built years ago to replace phpBB and vBulletin, and both now speak ActivityPub.

Social reading: BookWyrm (created by @tripofmice), a federated Goodreads where your shelves and reviews show up in a Mastodon timeline.

Music: Funkwhale (@funkwhale) - a self-hosted Grooveshark successor.

Bandwagon (created by @benpate) an online music storefront where musicians sell directly, built on the Emissary framework.

Read the full post here:

federatedmind.com/forums-readi

Four glowing neon shapes, a speech bubble, cube, ring, and diamond, linked by a flowing particle trail carrying emojis, musical notes and open books, against a dark  background.
ALT text

Four glowing neon shapes, a speech bubble, cube, ring, and diamond, linked by a flowing particle trail carrying emojis, musical notes and open books, against a dark background.

@federatedmind@techhub.social

The closing post in the "Fediverse Beyond Mastodon" maps forums, social reading, and music, the formats that don't fit the microblog.

The Threadiverse (Fediverse's answer to Reddit): Lemmy, Kbin/Mbin and PieFed (created by Rimu - @rimu).

Forums that predate federation: NodeBB (created by @julian) rewrote its core so every new forum federates by default.
Discourse (@Discourse) ships it as an opt-in, per-category plugin.
Both were built years ago to replace phpBB and vBulletin, and both now speak ActivityPub.

Social reading: BookWyrm (created by @tripofmice), a federated Goodreads where your shelves and reviews show up in a Mastodon timeline.

Music: Funkwhale (@funkwhale) - a self-hosted Grooveshark successor.

Bandwagon (created by @benpate) an online music storefront where musicians sell directly, built on the Emissary framework.

Read the full post here:

federatedmind.com/forums-readi

Four glowing neon shapes, a speech bubble, cube, ring, and diamond, linked by a flowing particle trail carrying emojis, musical notes and open books, against a dark  background.
ALT text

Four glowing neon shapes, a speech bubble, cube, ring, and diamond, linked by a flowing particle trail carrying emojis, musical notes and open books, against a dark background.

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

@fabio@manganiello.eu

๐Ÿ› ๏ธ New #Akkoma feature

Those who like me run Akkoma on home networks may have experienced timeouts when searching for posts by (Mastodon) URL.

Thatโ€™s because searching #ActivityPub elements using non-canonical URLs involves a bit of back and forth over HTTP, and for some reason Akkoma had a hardcoded timeout of 5 seconds for it - which means that many if not all the searches by Mastodon post URL failed, and the search task also crashed.

This PR adds support for a configurable fetch timeout:

# Set it to e.g. 15 seconds to allow the HTTP task
# more time to fetch remote resources
config :pleroma, Pleroma.Search, fetch_timeout: 15_000

If you want to try it out already (together with other features, such as support for Mastodon the quotes protocol and indexable flag on accounts), you can build Akkoma from my fork.

git.platypush.tech

akkoma

Mirror of https://akkoma.dev/AkkomaGang/akkoma

@fabio@manganiello.eu

๐Ÿ› ๏ธ New #Akkoma feature

Those who like me run Akkoma on home networks may have experienced timeouts when searching for posts by (Mastodon) URL.

Thatโ€™s because searching #ActivityPub elements using non-canonical URLs involves a bit of back and forth over HTTP, and for some reason Akkoma had a hardcoded timeout of 5 seconds for it - which means that many if not all the searches by Mastodon post URL failed, and the search task also crashed.

This PR adds support for a configurable fetch timeout:

# Set it to e.g. 15 seconds to allow the HTTP task
# more time to fetch remote resources
config :pleroma, Pleroma.Search, fetch_timeout: 15_000

If you want to try it out already (together with other features, such as support for Mastodon the quotes protocol and indexable flag on accounts), you can build Akkoma from my fork.

git.platypush.tech

akkoma

Mirror of https://akkoma.dev/AkkomaGang/akkoma

@grafcube@sakurajima.social

In case anyone was wondering, yes my project Wordforge is effectively abandoned. I graduated and got a job last year and haven't had the time to work on it. It's a shame really since I really wanted to see something like this on the fediverse, but such is life.

If anyone wants to take over, feel free.

https://codeberg.org/grafcube/wordforge

codeberg.org

wordforge

Federated creative writing server.

@homegrown@social.growyourown.services

Flohmarkt is a free open platform for small ads and selling things ("Flohmarkt" is the German for flea market). It's part of the Fediverse so the small ads can federate to other servers, and people can interact with Flohmarkt from Mastodon etc accounts.

If you want to post or browse adverts there is a server list:

๐ŸŒฑ codeberg.org/flohmarkt/flohmar

There is techy info on their Codeberg page:

๐ŸŒฑ codeberg.org/flohmarkt/flohmar

You can follow their lead dev's account at:

๐ŸŒฑ @grindhold

codeberg.org

flohmarkt

federated decentral classified ad software using activitypub

@homegrown@social.growyourown.services

Flohmarkt is a free open platform for small ads and selling things ("Flohmarkt" is the German for flea market). It's part of the Fediverse so the small ads can federate to other servers, and people can interact with Flohmarkt from Mastodon etc accounts.

If you want to post or browse adverts there is a server list:

๐ŸŒฑ codeberg.org/flohmarkt/flohmar

There is techy info on their Codeberg page:

๐ŸŒฑ codeberg.org/flohmarkt/flohmar

You can follow their lead dev's account at:

๐ŸŒฑ @grindhold

codeberg.org

flohmarkt

federated decentral classified ad software using activitypub

@kmj@mastodon.ctseuro.com

Seeing how EU uses Absent==Yes as trick to pass 1.0 shows we need 100% tranparent and scanned communication of politicans working in the EU.

Furthermore as I mentioned earlier there is massive need for based and based on and .

Based on addressess, everybody is able to run the instance on his own device(s).

And for the view ones having lots of contacts a pc at home will mostly work to let it run

@maddyunderstars@aus.social

It took a while, but Shoot now has a role editor (among other guild settings)!

Roles and permissions have been implemented server-side nearly since the beginning but they haven't been available in the client until now.

The UI/UX here is very similar to how Discord's permissions used to work. Roles can be assigned to users and they are evaluated from bottom to top in the role list. Roles can deny or allow permissions, with lower roles in the list being overridden by higher roles. In the screenshots guild, the 'everyone' role allows 'Send Messages' permission, but the 'muted' role denies it. If someone has the 'muted' role, it will override the send messages permission from the 'everyone'/default role and prevent them from speaking.

It's still a bit rough of course, but I'm still having a good time working on the project.

You can try it out yourself/learn more at shoot.pub using the registration token `0K2A3` which expires in a week. That's just for anti-spam reasons, let me know if you want to register if it doesn't work :)

The role editor in Shoot. There are 3 roles shown, "moderator", "muted", and finally "everyone" which is selected. The editor shows the default permissions given to everyone which include: send messages, view channel, call channel, create invite, and upload permissions.
ALT text

The role editor in Shoot. There are 3 roles shown, "moderator", "muted", and finally "everyone" which is selected. The editor shows the default permissions given to everyone which include: send messages, view channel, call channel, create invite, and upload permissions.

@mooooooo@qaf.men

Implementing your own server sounds like a good idea until you see the mush of half-implemented protocols that actually is. Link type? Profile? Tombstone? Whomst?

Why is there a webfinger endpoint? I don't want skeletal twinks fingering my web!?

And also an RSA key pair? Publicly being this embarrassing should be proof enough, nobody would dare pretend to be *this*!

@kmj@mastodon.ctseuro.com

Seeing how EU uses Absent==Yes as trick to pass 1.0 shows we need 100% tranparent and scanned communication of politicans working in the EU.

Furthermore as I mentioned earlier there is massive need for based and based on and .

Based on addressess, everybody is able to run the instance on his own device(s).

And for the view ones having lots of contacts a pc at home will mostly work to let it run

@maddyunderstars@aus.social

It took a while, but Shoot now has a role editor (among other guild settings)!

Roles and permissions have been implemented server-side nearly since the beginning but they haven't been available in the client until now.

The UI/UX here is very similar to how Discord's permissions used to work. Roles can be assigned to users and they are evaluated from bottom to top in the role list. Roles can deny or allow permissions, with lower roles in the list being overridden by higher roles. In the screenshots guild, the 'everyone' role allows 'Send Messages' permission, but the 'muted' role denies it. If someone has the 'muted' role, it will override the send messages permission from the 'everyone'/default role and prevent them from speaking.

It's still a bit rough of course, but I'm still having a good time working on the project.

You can try it out yourself/learn more at shoot.pub using the registration token `0K2A3` which expires in a week. That's just for anti-spam reasons, let me know if you want to register if it doesn't work :)

The role editor in Shoot. There are 3 roles shown, "moderator", "muted", and finally "everyone" which is selected. The editor shows the default permissions given to everyone which include: send messages, view channel, call channel, create invite, and upload permissions.
ALT text

The role editor in Shoot. There are 3 roles shown, "moderator", "muted", and finally "everyone" which is selected. The editor shows the default permissions given to everyone which include: send messages, view channel, call channel, create invite, and upload permissions.

@hazelnoot@enby.life

For anyone who might find it useful, here's some statistics pulled from two real-world Sharkey instances:

Instance A (3 years old, 12 users (2 active), 472 pub and 491 sub connections):

+-----+---------------+-----------------+--------+----------------------------------------+
|Type |Metric         |Value            |Percent |Description                             |
+-----+---------------+-----------------+--------+----------------------------------------+
|Note |total          |  25,333,836     | 100.00%|All notes                               |
|Note |isSilencedUser |     604,388     |   2.39%|Notes by a silenced user                |
|Note |isSilencedHost |   2,940,962     |  11.61%|Notes from a silenced instance          |
|Note |isSuspendedUser|     282,627     |   1.12%|Notes by a suspended user               |
|Note |isSuspendedHost|      85,732     |   0.34%|Notes from a blocked instance           |
|Note |isPublic       |  11,914,094     |  47.03%|Public notes                            |
|Note |isHome         |  10,246,791     |  40.45%|Home-only / unlisted notes              |
|Note |isFollowers    |   3,156,743     |  12.46%|Followers-only notes                    |
|Note |isSpecified    |      16,208     |   0.06%|Specified / DM notes                    |
|Note |isPoll         |      53,281     |   0.21%|Polls                                   |
|Note |isMedia        |   2,383,375     |   9.41%|Notes w/ media                          |
|Note |isReply        |   9,544,540     |  37.68%|Replies                                 |
|Note |isReplyToSelf  |   2,059,325     |   8.13%|Self-replies                            |
|Note |isBoost        |   6,194,189     |  24.45%|Boosts                                  |
|Note |isBoostOfSelf  |     190,697     |   0.75%|Self-boosts                             |
|Note |isQuote        |     225,291     |   0.89%|Quotes                                  |
|Note |isQuoteOfSelf  |      70,243     |   0.28%|Self-quotes                             |
|Note |isChannel      |           2     |   0.00%|Notes in a channel                      |
|Note |isRemote       |  25,266,647     |  99.73%|Remote notes                            |
|Note |isLocal        |      67,189     |   0.27%|Local notes                             |
|Note |isLocalOnly    |         311     |   0.00%|Local-only (defederated) notes          |
|Drive|totalDrive     |       1,845.8 Gb| 100.00%|Total size of all known media           |
|Drive|internalDrive  |         111.8 Gb|   6.06%|Size of media stored/cached locally     |
|Drive|externalDrive  |       1,734.0 Gb|  93.94%|Size of external media accessed by proxy|
|User |total          |     359,926     | 100.00%|All users                               |
|User |local          |          16     |   0.00%|Local users                             |
|User |remote         |     359,910     | 100.00%|Remote users                            |
|User |isHibernated   |      89,625     |  24.90%|Hibernated (inactive) users             |
|User |isSilencedUser |         475     |   0.13%|Silenced users                          |
|User |isSilencedHost |     101,766     |  28.27%|Silenced users (by instance silence)    |
|User |isSuspendedUser|         465     |   0.13%|Suspended users                         |
|User |isSuspendedHost|       4,153     |   1.15%|Suspended users (by instance block)     |
|User |isDeleted      |      40,069     |  11.13%|Deleted                                 |
|User |isBot          |      33,588     |   9.33%|Bot accounts                            |
|User |isCat          |       4,965     |   1.38%|Users who are cats                      |
|User |isLocked       |      79,259     |  22.02%|Follow requests enabled                 |
|User |isExplorable   |     211,523     |  58.77%|Indexable / searchable users            |
+-----+---------------+-----------------+--------+----------------------------------------+

Instance B (3 years old, 2,731 users (130 active), 1,872 pub and 2,149 sub connections):
+-----+---------------+-----------------+--------+----------------------------------------+
|Type |Metric         |Value            |Percent |Description                             |
+-----+---------------+-----------------+--------+----------------------------------------+
|Note |total          |  87,286,880     | 100.00%|All notes                               |
|Note |isSilencedUser |   1,018,720     |   1.17%|Notes by a silenced user                |
|Note |isSilencedHost |  13,409,901     |  15.36%|Notes from a silenced instance          |
|Note |isSuspendedUser|     414,900     |   0.48%|Notes by a suspended user               |
|Note |isSuspendedHost|     819,842     |   0.94%|Notes from a blocked instance           |
|Note |isPublic       |  40,981,524     |  46.95%|Public notes                            |
|Note |isHome         |  28,994,854     |  33.22%|Home-only / unlisted notes              |
|Note |isFollowers    |  17,208,603     |  19.71%|Followers-only notes                    |
|Note |isSpecified    |     101,899     |   0.12%|Specified / DM notes                    |
|Note |isPoll         |     298,047     |   0.34%|Polls                                   |
|Note |isMedia        |   9,728,519     |  11.15%|Notes w/ media                          |
|Note |isReply        |  26,006,452     |  29.79%|Replies                                 |
|Note |isReplyToSelf  |   5,552,908     |   6.36%|Self-replies                            |
|Note |isBoost        |  32,738,677     |  37.51%|Boosts                                  |
|Note |isBoostOfSelf  |     577,898     |   0.66%|Self-boosts                             |
|Note |isQuote        |     398,522     |   0.46%|Quotes                                  |
|Note |isQuoteOfSelf  |     133,251     |   0.15%|Self-quotes                             |
|Note |isChannel      |          34     |   0.00%|Notes in a channel                      |
|Note |isRemote       |  86,209,578     |  98.77%|Remote notes                            |
|Note |isLocal        |   1,077,302     |   1.23%|Local notes                             |
|Note |isLocalOnly    |       2,009     |   0.00%|Local-only (defederated) notes          |
|Drive|totalDrive     |          43.3 Gb| 100.00%|Total size of all known media           |
|Drive|internalDrive  |           0.1 Gb|   0.13%|Size of media stored/cached locally     |
|Drive|externalDrive  |          43.3 Gb|  99.87%|Size of external media accessed by proxy|
|User |total          |     664,938     | 100.00%|All users                               |
|User |local          |       2,734     |   0.41%|Local users                             |
|User |remote         |     662,204     |  99.59%|Remote users                            |
|User |isHibernated   |       1,247     |   0.19%|Hibernated (inactive) users             |
|User |isSilencedUser |         466     |   0.07%|Silenced users                          |
|User |isSilencedHost |     185,793     |  27.94%|Silenced users (by instance silence)    |
|User |isSuspendedUser|       1,033     |   0.16%|Suspended users                         |
|User |isSuspendedHost|      36,152     |   5.44%|Suspended users (by instance block)     |
|User |isDeleted      |         505     |   0.08%|Deleted                                 |
|User |isBot          |      50,328     |   7.57%|Bot accounts                            |
|User |isCat          |       9,090     |   1.37%|Users who are cats                      |
|User |isLocked       |      73,855     |  11.11%|Follow requests enabled                 |
|User |isExplorable   |     381,411     |  57.36%|Indexable / searchable users            |
+-----+---------------+-----------------+--------+----------------------------------------+

Note: drive stats are under-counted (mildly on instance A, severely on instance B) due to inconsistent behavior under certain edge cases.

@nuages@mediaformat.org

Hello World

Coucou! This is just a first post announcing Nuages to the world.

Nuages is an ActivityPub app, connecting to your favourite servers that support the Client to Server API.

Follow us to get our latest updates, we’ll be officially launching the app in the coming weeks ๐Ÿ˜‰

mediaformat.org

Nuages โ€“ MediaFormat

Do you yearn for a user powered social network? A social space free from constant Ads, Sponsored and AI generated slop? The Fediverse 1 is a network where you c

@hazelnoot@enby.life

For anyone who might find it useful, here's some statistics pulled from two real-world Sharkey instances:

Instance A (3 years old, 12 users (2 active), 472 pub and 491 sub connections):

+-----+---------------+-----------------+--------+----------------------------------------+
|Type |Metric         |Value            |Percent |Description                             |
+-----+---------------+-----------------+--------+----------------------------------------+
|Note |total          |  25,333,836     | 100.00%|All notes                               |
|Note |isSilencedUser |     604,388     |   2.39%|Notes by a silenced user                |
|Note |isSilencedHost |   2,940,962     |  11.61%|Notes from a silenced instance          |
|Note |isSuspendedUser|     282,627     |   1.12%|Notes by a suspended user               |
|Note |isSuspendedHost|      85,732     |   0.34%|Notes from a blocked instance           |
|Note |isPublic       |  11,914,094     |  47.03%|Public notes                            |
|Note |isHome         |  10,246,791     |  40.45%|Home-only / unlisted notes              |
|Note |isFollowers    |   3,156,743     |  12.46%|Followers-only notes                    |
|Note |isSpecified    |      16,208     |   0.06%|Specified / DM notes                    |
|Note |isPoll         |      53,281     |   0.21%|Polls                                   |
|Note |isMedia        |   2,383,375     |   9.41%|Notes w/ media                          |
|Note |isReply        |   9,544,540     |  37.68%|Replies                                 |
|Note |isReplyToSelf  |   2,059,325     |   8.13%|Self-replies                            |
|Note |isBoost        |   6,194,189     |  24.45%|Boosts                                  |
|Note |isBoostOfSelf  |     190,697     |   0.75%|Self-boosts                             |
|Note |isQuote        |     225,291     |   0.89%|Quotes                                  |
|Note |isQuoteOfSelf  |      70,243     |   0.28%|Self-quotes                             |
|Note |isChannel      |           2     |   0.00%|Notes in a channel                      |
|Note |isRemote       |  25,266,647     |  99.73%|Remote notes                            |
|Note |isLocal        |      67,189     |   0.27%|Local notes                             |
|Note |isLocalOnly    |         311     |   0.00%|Local-only (defederated) notes          |
|Drive|totalDrive     |       1,845.8 Gb| 100.00%|Total size of all known media           |
|Drive|internalDrive  |         111.8 Gb|   6.06%|Size of media stored/cached locally     |
|Drive|externalDrive  |       1,734.0 Gb|  93.94%|Size of external media accessed by proxy|
|User |total          |     359,926     | 100.00%|All users                               |
|User |local          |          16     |   0.00%|Local users                             |
|User |remote         |     359,910     | 100.00%|Remote users                            |
|User |isHibernated   |      89,625     |  24.90%|Hibernated (inactive) users             |
|User |isSilencedUser |         475     |   0.13%|Silenced users                          |
|User |isSilencedHost |     101,766     |  28.27%|Silenced users (by instance silence)    |
|User |isSuspendedUser|         465     |   0.13%|Suspended users                         |
|User |isSuspendedHost|       4,153     |   1.15%|Suspended users (by instance block)     |
|User |isDeleted      |      40,069     |  11.13%|Deleted                                 |
|User |isBot          |      33,588     |   9.33%|Bot accounts                            |
|User |isCat          |       4,965     |   1.38%|Users who are cats                      |
|User |isLocked       |      79,259     |  22.02%|Follow requests enabled                 |
|User |isExplorable   |     211,523     |  58.77%|Indexable / searchable users            |
+-----+---------------+-----------------+--------+----------------------------------------+

Instance B (3 years old, 2,731 users (130 active), 1,872 pub and 2,149 sub connections):
+-----+---------------+-----------------+--------+----------------------------------------+
|Type |Metric         |Value            |Percent |Description                             |
+-----+---------------+-----------------+--------+----------------------------------------+
|Note |total          |  87,286,880     | 100.00%|All notes                               |
|Note |isSilencedUser |   1,018,720     |   1.17%|Notes by a silenced user                |
|Note |isSilencedHost |  13,409,901     |  15.36%|Notes from a silenced instance          |
|Note |isSuspendedUser|     414,900     |   0.48%|Notes by a suspended user               |
|Note |isSuspendedHost|     819,842     |   0.94%|Notes from a blocked instance           |
|Note |isPublic       |  40,981,524     |  46.95%|Public notes                            |
|Note |isHome         |  28,994,854     |  33.22%|Home-only / unlisted notes              |
|Note |isFollowers    |  17,208,603     |  19.71%|Followers-only notes                    |
|Note |isSpecified    |     101,899     |   0.12%|Specified / DM notes                    |
|Note |isPoll         |     298,047     |   0.34%|Polls                                   |
|Note |isMedia        |   9,728,519     |  11.15%|Notes w/ media                          |
|Note |isReply        |  26,006,452     |  29.79%|Replies                                 |
|Note |isReplyToSelf  |   5,552,908     |   6.36%|Self-replies                            |
|Note |isBoost        |  32,738,677     |  37.51%|Boosts                                  |
|Note |isBoostOfSelf  |     577,898     |   0.66%|Self-boosts                             |
|Note |isQuote        |     398,522     |   0.46%|Quotes                                  |
|Note |isQuoteOfSelf  |     133,251     |   0.15%|Self-quotes                             |
|Note |isChannel      |          34     |   0.00%|Notes in a channel                      |
|Note |isRemote       |  86,209,578     |  98.77%|Remote notes                            |
|Note |isLocal        |   1,077,302     |   1.23%|Local notes                             |
|Note |isLocalOnly    |       2,009     |   0.00%|Local-only (defederated) notes          |
|Drive|totalDrive     |          43.3 Gb| 100.00%|Total size of all known media           |
|Drive|internalDrive  |           0.1 Gb|   0.13%|Size of media stored/cached locally     |
|Drive|externalDrive  |          43.3 Gb|  99.87%|Size of external media accessed by proxy|
|User |total          |     664,938     | 100.00%|All users                               |
|User |local          |       2,734     |   0.41%|Local users                             |
|User |remote         |     662,204     |  99.59%|Remote users                            |
|User |isHibernated   |       1,247     |   0.19%|Hibernated (inactive) users             |
|User |isSilencedUser |         466     |   0.07%|Silenced users                          |
|User |isSilencedHost |     185,793     |  27.94%|Silenced users (by instance silence)    |
|User |isSuspendedUser|       1,033     |   0.16%|Suspended users                         |
|User |isSuspendedHost|      36,152     |   5.44%|Suspended users (by instance block)     |
|User |isDeleted      |         505     |   0.08%|Deleted                                 |
|User |isBot          |      50,328     |   7.57%|Bot accounts                            |
|User |isCat          |       9,090     |   1.37%|Users who are cats                      |
|User |isLocked       |      73,855     |  11.11%|Follow requests enabled                 |
|User |isExplorable   |     381,411     |  57.36%|Indexable / searchable users            |
+-----+---------------+-----------------+--------+----------------------------------------+

Note: drive stats are under-counted (mildly on instance A, severely on instance B) due to inconsistent behavior under certain edge cases.

@apps@toot.fedilab.app

is a search engine dedicated to the . It does not scrape content, because it speaks and respects each user's choice to opt in or out.
The most respectful alternative, open to all and full of content to explore.

discover.holos.social

HolosDiscover Overview stats:
13.9M posts indexed
3.2M posts deleted
492K posts updated
70K users followed
2.8K opted out
7.1K instances known
ALT text

HolosDiscover Overview stats: 13.9M posts indexed 3.2M posts deleted 492K posts updated 70K users followed 2.8K opted out 7.1K instances known

@apps@toot.fedilab.app

is a search engine dedicated to the . It does not scrape content, because it speaks and respects each user's choice to opt in or out.
The most respectful alternative, open to all and full of content to explore.

discover.holos.social

HolosDiscover Overview stats:
13.9M posts indexed
3.2M posts deleted
492K posts updated
70K users followed
2.8K opted out
7.1K instances known
ALT text

HolosDiscover Overview stats: 13.9M posts indexed 3.2M posts deleted 492K posts updated 70K users followed 2.8K opted out 7.1K instances known

@nuages@mediaformat.org

Hello World

Coucou! This is just a first post announcing Nuages to the world.

Nuages is an ActivityPub app, connecting to your favourite servers that support the Client to Server API.

Follow us to get our latest updates, we’ll be officially launching the app in the coming weeks ๐Ÿ˜‰

mediaformat.org

Nuages โ€“ MediaFormat

Do you yearn for a user powered social network? A social space free from constant Ads, Sponsored and AI generated slop? The Fediverse 1 is a network where you c

@django@social.coop

Announcing it here publicly for the first time!

I've been building a general purpose activitypub pwa.

Follow @nuages for official updates!

mediaformat.org

Hello World โ€“ MediaFormat

Coucou! This is just a first post announcing Nuages to the world. Nuages is an ActivityPub app, connecting to your favourite servers that support the Client to

@nuages@mediaformat.org

Hello World

Coucou! This is just a first post announcing Nuages to the world.

Nuages is an ActivityPub app, connecting to your favourite servers that support the Client to Server API.

Follow us to get our latest updates, we’ll be officially launching the app in the coming weeks ๐Ÿ˜‰

mediaformat.org

Nuages โ€“ MediaFormat

Do you yearn for a user powered social network? A social space free from constant Ads, Sponsored and AI generated slop? The Fediverse 1 is a network where you c

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

@nuages@mediaformat.org

Hello World

Coucou! This is just a first post announcing Nuages to the world.

Nuages is an ActivityPub app, connecting to your favourite servers that support the Client to Server API.

Follow us to get our latest updates, we’ll be officially launching the app in the coming weeks ๐Ÿ˜‰

mediaformat.org

Nuages โ€“ MediaFormat

Do you yearn for a user powered social network? A social space free from constant Ads, Sponsored and AI generated slop? The Fediverse 1 is a network where you c

@django@social.coop

Announcing it here publicly for the first time!

I've been building a general purpose activitypub pwa.

Follow @nuages for official updates!

mediaformat.org

Hello World โ€“ MediaFormat

Coucou! This is just a first post announcing Nuages to the world. Nuages is an ActivityPub app, connecting to your favourite servers that support the Client to

@nuages@mediaformat.org

Hello World

Coucou! This is just a first post announcing Nuages to the world.

Nuages is an ActivityPub app, connecting to your favourite servers that support the Client to Server API.

Follow us to get our latest updates, we’ll be officially launching the app in the coming weeks ๐Ÿ˜‰

mediaformat.org

Nuages โ€“ MediaFormat

Do you yearn for a user powered social network? A social space free from constant Ads, Sponsored and AI generated slop? The Fediverse 1 is a network where you c

@nuages@mediaformat.org

Hello World

Coucou! This is just a first post announcing Nuages to the world.

Nuages is an ActivityPub app, connecting to your favourite servers that support the Client to Server API.

Follow us to get our latest updates, we’ll be officially launching the app in the coming weeks ๐Ÿ˜‰

mediaformat.org

Nuages โ€“ MediaFormat

Do you yearn for a user powered social network? A social space free from constant Ads, Sponsored and AI generated slop? The Fediverse 1 is a network where you c

@django@social.coop

Announcing it here publicly for the first time!

I've been building a general purpose activitypub pwa.

Follow @nuages for official updates!

mediaformat.org

Hello World โ€“ MediaFormat

Coucou! This is just a first post announcing Nuages to the world. Nuages is an ActivityPub app, connecting to your favourite servers that support the Client to

@nuages@mediaformat.org

Hello World

Coucou! This is just a first post announcing Nuages to the world.

Nuages is an ActivityPub app, connecting to your favourite servers that support the Client to Server API.

Follow us to get our latest updates, we’ll be officially launching the app in the coming weeks ๐Ÿ˜‰

mediaformat.org

Nuages โ€“ MediaFormat

Do you yearn for a user powered social network? A social space free from constant Ads, Sponsored and AI generated slop? The Fediverse 1 is a network where you c

@django@social.coop

Announcing it here publicly for the first time!

I've been building a general purpose activitypub pwa.

Follow @nuages for official updates!

mediaformat.org

Hello World โ€“ MediaFormat

Coucou! This is just a first post announcing Nuages to the world. Nuages is an ActivityPub app, connecting to your favourite servers that support the Client to

@nuages@mediaformat.org

Hello World

Coucou! This is just a first post announcing Nuages to the world.

Nuages is an ActivityPub app, connecting to your favourite servers that support the Client to Server API.

Follow us to get our latest updates, we’ll be officially launching the app in the coming weeks ๐Ÿ˜‰

mediaformat.org

Nuages โ€“ MediaFormat

Do you yearn for a user powered social network? A social space free from constant Ads, Sponsored and AI generated slop? The Fediverse 1 is a network where you c

@django@social.coop

The ActivityPub API doesn't define a way to get all server known posts with a specific tag.

There are a few ways this could be done in an ActivityPub client

What behaviour would you prefer when clicking on a post Tag link?

(Any other ideas, comment)

  • Open tag at server origin4 (50%)
  • Lists known posts from inbox2 (25%)
  • Lists known posts from tags.pub2 (25%)
@nuages@mediaformat.org

Hello World

Coucou! This is just a first post announcing Nuages to the world.

Nuages is an ActivityPub app, connecting to your favourite servers that support the Client to Server API.

Follow us to get our latest updates, we’ll be officially launching the app in the coming weeks ๐Ÿ˜‰

mediaformat.org

Nuages โ€“ MediaFormat

Do you yearn for a user powered social network? A social space free from constant Ads, Sponsored and AI generated slop? The Fediverse 1 is a network where you c

@apps@toot.fedilab.app

relay is confirmed to be very stable. I will officially tag it soon so admins can run their own relay with a script to easily install it on their VPS.
Using Holos with a custom domain and a cloud for media allows you to own your portable identity on the . Relays become only an infrastructure for it. Your device runs the server and works as smoothly as any other app. Micro-blogging, media, and video, all from a single account. Switch with a simple tap.

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

@weekinfediverse@mitra.social
@apps@toot.fedilab.app

relay is confirmed to be very stable. I will officially tag it soon so admins can run their own relay with a script to easily install it on their VPS.
Using Holos with a custom domain and a cloud for media allows you to own your portable identity on the . Relays become only an infrastructure for it. Your device runs the server and works as smoothly as any other app. Micro-blogging, media, and video, all from a single account. Switch with a simple tap.

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

@IpassBy@mastodon.social

The open web is growing.

Communities around Mastodon, the Fediverse and ActivityPub are showing that we donโ€™t have to depend entirely on closed platforms.

What if we take one more step?

Publish important messages on your own website first. Then share them everywhere else.

Thatโ€™s the idea behind Method M.

method-m.eu/M/

method-m.eu

Method M | Publish First, Share Second

Method M is a public call for source-first communication. Publish important messages first on your own verifiable source, then share them everywhere else.

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

@IpassBy@mastodon.social

The open web is growing.

Communities around Mastodon, the Fediverse and ActivityPub are showing that we donโ€™t have to depend entirely on closed platforms.

What if we take one more step?

Publish important messages on your own website first. Then share them everywhere else.

Thatโ€™s the idea behind Method M.

method-m.eu/M/

method-m.eu

Method M | Publish First, Share Second

Method M is a public call for source-first communication. Publish important messages first on your own verifiable source, then share them everywhere else.

I'm looking for your opinions from the developers of the fediverse.

A common HTML web page can contain related links via the <link> tag. I would like to do the same for Activity Streams objects, for example:

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "id": "https://writings.hongminhee.org/ap/2024/12/a-year-with-the-fediverse.json",
  "type": "Article",
  "name": "A year with the fediverse",
  "content": "2024 was truly a year where I was deeply immersed in the fediverse. โ€ฆ",
  "url": "https://writings.hongminhee.org/2024/12/a-year-with-the-fediverse/",
  "attachment": [
    {
      "type": "Link",
      "rel": "alternate",
      "hreflang": "ko",
      "href": "https://writings.hongminhee.org/2024/12/a-year-with-the-fediverse/index.ko-hang-kr.html",
      "mediaType": "text/html"
    },
    {
      "type": "Link",
      "rel": "alternate",
      "hreflang": "ja",
      "href": "https://writings.hongminhee.org/2024/12/a-year-with-the-fediverse/index.ja.html",
      "mediaType": "text/html"
    }
  ]
}

Do you think this makes sense, and would it be appropriate to put Link objects in the attachment?

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

's inbox treats object types in tiers. Note and Question are supported directly. A second tier, Article, Page, Image, Audio, Video, and Event, gets converted to a title, a summary, and a link; content itself doesn't show. Anything outside both tiers is dropped on delivery, which is a large part of why so much of the fediverse federates as Note regardless of what the object actually is.

mastodon/mastodon#24079 asks for content to show up whenever it's present and the mediaType is supported, independent of type. Open since 2023, and as far as the thread shows, no core team engagement beyond one offhand remark that they're not happy with the status quo either.

Reading the issue text closely, it's a bit ambiguous whether it covers the drop tier or only the convert-to-title-and-link tier. I left a comment asking for clarification, since the fix looks very different depending on the answer.

If you build on ActivityPub, a comment or a reaction there is worth more than another workaround.

github.com

Always show object `content`, regardless of object `type`, if `mediaType` is supported ยท Issue #24079 ยท mastodon/mastodon

Pitch Currently, Mastodon separates ActivityPub objects between โ€œsupportedโ€ and โ€œconvertedโ€, based on object type. Converted objects will only display a title, spoiler text and URL. This is the cas...

@thefed @hrefna

I have heard people say "In there's a timeline and a notification feed". No, there isn't. But perhaps in ones solution, there is. "There are Mentions and Hashtags". No, there aren't. Though there may be recommendations on how to deal with those (I have eternal trouble finding these documents quickly). "There are special hashtags to put in a summary field that machines understand". Nope!

social.coop/@smallcircles/1163

There are documents. These are just guidance that allow people to align on common ways to achieve things, and are currently the best way to avoid an even larger sprawl of protocol decay. They are non-normative wrt to the AP protocol itself.

I think a large part of the quick rise in attractiveness, popularity and adoption of stems from how it offered devs a clear and well-documented introduction and a path to doing solution development on top of a robust protocol, where a dev could say "this is my app, and this is protocol".

social.coop

๐Ÿซง Social coding commons (@smallcircles@social.coop)

Attached: 1 image #AntiPatternedโ„ข Do NOT create out-of-bound custom and app-centric mechanisms that define new and expected behavior on protocol level. https://codeberg.org/fediverse/fediverse-ideas/issues/33 #SX #SocialCoding #SocialWeb #ActivityPub #ProtocolDecay #Botiquette

@smallcircles@social.coop

โ„ข

Do NOT create out-of-bound custom and app-centric mechanisms that define new and expected behavior on protocol level.

codeberg.org/fediverse/fediver

Snapshot from a fediverse bot profile reading: "If you DO NOT want a post boosted use #nobot in the post. Add #NoBots to your profile bio to stop all boosts for any tag.
ALT text

Snapshot from a fediverse bot profile reading: "If you DO NOT want a post boosted use #nobot in the post. Add #NoBots to your profile bio to stop all boosts for any tag.

@thefed @hrefna

I have heard people say "In there's a timeline and a notification feed". No, there isn't. But perhaps in ones solution, there is. "There are Mentions and Hashtags". No, there aren't. Though there may be recommendations on how to deal with those (I have eternal trouble finding these documents quickly). "There are special hashtags to put in a summary field that machines understand". Nope!

social.coop/@smallcircles/1163

There are documents. These are just guidance that allow people to align on common ways to achieve things, and are currently the best way to avoid an even larger sprawl of protocol decay. They are non-normative wrt to the AP protocol itself.

I think a large part of the quick rise in attractiveness, popularity and adoption of stems from how it offered devs a clear and well-documented introduction and a path to doing solution development on top of a robust protocol, where a dev could say "this is my app, and this is protocol".

social.coop

๐Ÿซง Social coding commons (@smallcircles@social.coop)

Attached: 1 image #AntiPatternedโ„ข Do NOT create out-of-bound custom and app-centric mechanisms that define new and expected behavior on protocol level. https://codeberg.org/fediverse/fediverse-ideas/issues/33 #SX #SocialCoding #SocialWeb #ActivityPub #ProtocolDecay #Botiquette

@smallcircles@social.coop

โ„ข

Do NOT create out-of-bound custom and app-centric mechanisms that define new and expected behavior on protocol level.

codeberg.org/fediverse/fediver

Snapshot from a fediverse bot profile reading: "If you DO NOT want a post boosted use #nobot in the post. Add #NoBots to your profile bio to stop all boosts for any tag.
ALT text

Snapshot from a fediverse bot profile reading: "If you DO NOT want a post boosted use #nobot in the post. Add #NoBots to your profile bio to stop all boosts for any tag.

@smallcircles@social.coop ยท Reply to Fed

@thefed @hrefna

ActivityPub at heart is a social graph of addressible actors that exchange activities with an object payload.

There are no "servers", "instances", "users". Neither is there "client", "app", "actor profile", and even not "identity" in . That these words appear in the specification text, does not make them part of the protocol. Yes, all software runs on a computer system, yet "system" is not part of ActivityPub.

But you'd be forgiven the confusion, as over time app developers have liberally introduced abstractions that were subsequently seen by others as "the way to do it" and became de-facto standards. The name for that is Post-facto interoperability, "follow-the-leader", and it is the predominant way in which the fediverse has evolved unfortunately, without the specs catching up and incorporating the protocol decay this introduces. There were no good rules for protocol extension, and subsequent delineation of what is core protocol and what's an extension.

@smallcircles@social.coop ยท Reply to Fed

@thefed @hrefna

ActivityPub at heart is a social graph of addressible actors that exchange activities with an object payload.

There are no "servers", "instances", "users". Neither is there "client", "app", "actor profile", and even not "identity" in . That these words appear in the specification text, does not make them part of the protocol. Yes, all software runs on a computer system, yet "system" is not part of ActivityPub.

But you'd be forgiven the confusion, as over time app developers have liberally introduced abstractions that were subsequently seen by others as "the way to do it" and became de-facto standards. The name for that is Post-facto interoperability, "follow-the-leader", and it is the predominant way in which the fediverse has evolved unfortunately, without the specs catching up and incorporating the protocol decay this introduces. There were no good rules for protocol extension, and subsequent delineation of what is core protocol and what's an extension.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

@toddsundsted@epiktistes.com

There are two significant new additions in release v3.8.0 of ktistec.

First, the actor cards on the followed/following pages show relevant actor status. On the followed page, it tells you how long it has been since that actor published an activity (create, announce, like, etc.) that was sent to your server. It's a proxy for how active they are (or are not). On the following page, it tells you how long it has been since you have been able to send to that server. It's a proxy for whether that server is reachable or that actor is still alive.

Second, the backend for user-defined algorithmic feeds is in place, along with a keyword/hashtag/mention feeds implementation. You can't set up a feed via the user-interface, but the feeds work if you set one up directly in the databaseโ€”which is how I've been previewing them.. I plan to release the frontend next week.

Here's the full changelog:

Added

  • Display activity status on actor cards.
  • Back-end support for user-defined algorithmic feeds.
  • Apply community-relayed moderator deletes received as a Group's wrapped Announce.
  • Follow a web page's rel="alternate" link when searching.

Fixed

  • Avoid loading entire has_many collections when constructing child records.
  • Evaluate the same-origin fetch gate against an embedded node's own identifier.
  • Accept a delete of an uncached object or actor without verification.
  • Catch MIME::Multipart::Error in local file-upload handling.
  • Map malformed request-body parse failures to Bad Request.

github.com

GitHub - toddsundsted/ktistec: ActivityPub (https://www.w3.org/TR/activitypub/) server for individual users and small groups.

ActivityPub (https://www.w3.org/TR/activitypub/) server for individual users and small groups. - toddsundsted/ktistec

@toddsundsted@epiktistes.com

There are two significant new additions in release v3.8.0 of ktistec.

First, the actor cards on the followed/following pages show relevant actor status. On the followed page, it tells you how long it has been since that actor published an activity (create, announce, like, etc.) that was sent to your server. It's a proxy for how active they are (or are not). On the following page, it tells you how long it has been since you have been able to send to that server. It's a proxy for whether that server is reachable or that actor is still alive.

Second, the backend for user-defined algorithmic feeds is in place, along with a keyword/hashtag/mention feeds implementation. You can't set up a feed via the user-interface, but the feeds work if you set one up directly in the databaseโ€”which is how I've been previewing them.. I plan to release the frontend next week.

Here's the full changelog:

Added

  • Display activity status on actor cards.
  • Back-end support for user-defined algorithmic feeds.
  • Apply community-relayed moderator deletes received as a Group's wrapped Announce.
  • Follow a web page's rel="alternate" link when searching.

Fixed

  • Avoid loading entire has_many collections when constructing child records.
  • Evaluate the same-origin fetch gate against an embedded node's own identifier.
  • Accept a delete of an uncached object or actor without verification.
  • Catch MIME::Multipart::Error in local file-upload handling.
  • Map malformed request-body parse failures to Bad Request.

github.com

GitHub - toddsundsted/ktistec: ActivityPub (https://www.w3.org/TR/activitypub/) server for individual users and small groups.

ActivityPub (https://www.w3.org/TR/activitypub/) server for individual users and small groups. - toddsundsted/ktistec

@nibushibu@vivaldi.net

ใกใ‚ƒใ‚“ใจ็ถ™็ถšๆ”นๅ–„้ ‘ๅผตใฃใฆใฆๅฅฝๆ„ŸๆŒใฃใฆใ‚‹ใ€‚
:activitypub: ๅฏพๅฟœใ—ใฆ :fediverse: ๅŒ–ใ—ใฆใใ‚Œใชใ„ใ‹ใชใ€œใ„ใคใ‹โ€ฆ :tony_smirking:

ใ„ใšใ‚Œใซใ—ใฆใ‚‚ใ€ๅฟœๆดใ—ใฆใพใ™๏ผ :mastodon_mascot:

mixi.social/@nibushibu/posts/5

mixi.social

GENKI on mixi2

็€ใ€…ใจ Web ็‰ˆใ‚‚ๆ”นๅ–„ใ‚’็ถšใ‘ใฆใ„ใฆใปใ‚“ใจ็ด ๆ™ดใ‚‰ใ—ใ„ใ€‚ ใ“ใฎๅ‹ขใ„ใงใ„ใคใ‹ #ActivityPub ใซใ‚‚ๅฏพๅฟœใ—ใฆ #Fediverse ใ‹ใ‚‰ใ‚‚ไบคๆตใงใใ‚‹ใ‚ˆใ†ใซใชใฃใฆใใ‚Œใชใ„ใ‹ใชโ€ฆโœจ

@hrefna@hachyderm.io

Let's talk for a moment about what an actual actor model could look like in a protocol _like_ . I've done variations on this thought experiment before, but I find it useful to revisit.

alice@servera wants to send a message to bob@serverb. So Alice (A) accesses her profile and pulls a reference to an outbox actor (Ref{O}). She send the message (M) to this outbox:

A -M-> O

With me so far?

The Outbox actor does Somethingโ„ข, it doesn't matter what, but the server that hosts the outbox actor now may do one of two things, depending on whether servera (Sa) already has a reference to an inbox actor (Ref{I}) for bob on serverb (Sb).

The first scenario is a derivation of the second, so let's go through the second.

For this scenario Sa reaches out to webfinger (or some other lookup mechanism, but let's use webfinger) and says to it "gimme the user profile for bob@serverb." Sb returns the user profile Profile{bob@serverb}.

Within Profile{bob@serverb} is a list of actor references with names. One of which is named inbox. So now Sa has Ref{I} and can execute:

Sa -M-> I

In a way, we could end here and be content.

We're not done.

This is basically identical to the current ActivityPub flow with a few notable exceptions:

1. Note that I am not talking about the _user_ as an _actor_. The user is a user. The actor is an actor. Profile{bob@serverb} is not an actor, it's a Profile of a User.
2. I formalized the addition of webfinger. I don't need to do this, and there are alternatives.
3. It could _very_ well be that the inbox reference you are handed is identical between multiple actors.
4. I am treating "The Inbox" as a singular thing, but it _doesn't have to be_. I could have a different reference for where to send Events or calendar entries, I could have a different reference for where to send direct messages versus general posts, etc. All of this could be laid out pretty easily in a single map.
5. Most critically: The "inbox" is not a dereferencable collection. It's an _actor reference_. What gets exposed to the user might be completely different than what gets sent there.

The details don't matter as much as this: the foundational unit by which we reason about the system is different.

@hrefna@hachyderm.io

Let's talk for a moment about what an actual actor model could look like in a protocol _like_ . I've done variations on this thought experiment before, but I find it useful to revisit.

alice@servera wants to send a message to bob@serverb. So Alice (A) accesses her profile and pulls a reference to an outbox actor (Ref{O}). She send the message (M) to this outbox:

A -M-> O

With me so far?

The Outbox actor does Somethingโ„ข, it doesn't matter what, but the server that hosts the outbox actor now may do one of two things, depending on whether servera (Sa) already has a reference to an inbox actor (Ref{I}) for bob on serverb (Sb).

The first scenario is a derivation of the second, so let's go through the second.

For this scenario Sa reaches out to webfinger (or some other lookup mechanism, but let's use webfinger) and says to it "gimme the user profile for bob@serverb." Sb returns the user profile Profile{bob@serverb}.

Within Profile{bob@serverb} is a list of actor references with names. One of which is named inbox. So now Sa has Ref{I} and can execute:

Sa -M-> I

In a way, we could end here and be content.

We're not done.

This is basically identical to the current ActivityPub flow with a few notable exceptions:

1. Note that I am not talking about the _user_ as an _actor_. The user is a user. The actor is an actor. Profile{bob@serverb} is not an actor, it's a Profile of a User.
2. I formalized the addition of webfinger. I don't need to do this, and there are alternatives.
3. It could _very_ well be that the inbox reference you are handed is identical between multiple actors.
4. I am treating "The Inbox" as a singular thing, but it _doesn't have to be_. I could have a different reference for where to send Events or calendar entries, I could have a different reference for where to send direct messages versus general posts, etc. All of this could be laid out pretty easily in a single map.
5. Most critically: The "inbox" is not a dereferencable collection. It's an _actor reference_. What gets exposed to the user might be completely different than what gets sent there.

The details don't matter as much as this: the foundational unit by which we reason about the system is different.

@HolosSocial@mastodon.social

In a few days, the last brick of the relay server will be published for an official release and a tag.
A lot of stress when you are alone, but after a few weeks the work has paid off, it is really stable.
Running your own server on your phone will be as simple as using any other app. You will not be limited to a lookalike: micro-blogging, media, videos, all you want in a simple tap.

@HolosSocial@mastodon.social

In a few days, the last brick of the relay server will be published for an official release and a tag.
A lot of stress when you are alone, but after a few weeks the work has paid off, it is really stable.
Running your own server on your phone will be as simple as using any other app. You will not be limited to a lookalike: micro-blogging, media, videos, all you want in a simple tap.

Today @kopper shared a post on the fediverse titled how to not regret c2s, and I found it genuinely interesting to read, even if I'm not sure its proposed architecture actually solves what it sets out to solve.

The author's frustration with naรฏve implementations is well-founded. Slapping an facade onto an existing Mastodon-like server and calling it C2S doesn't buy you muchโ€”you end up with the rigidity of a bespoke API without any of the interoperability C2S is supposed to offer. The โ€œJSON-LD flavored Mastodon APIโ€ framing is apt.

The proposed solution is to split responsibility more aggressively: the C2S server should be nearly stateless and dumb, storing ActivityPub objects without interpreting them, while a separate โ€œclientโ€ layer handles indexing, timelines, moderation, and exposes its own API to the frontend running on the user's device. It's a clean separation of concerns on paper.

But here's what bothers me. When you map this architecture onto familiar terms, it looks roughly like this:

  • C2S server โ‰ˆ a database (PostgreSQL, say)
  • โ€œClientโ€ โ‰ˆ an application server (Mastodon, Misskey)
  • โ€œFrontendโ€ โ‰ˆ the actual client app on your phone

That's not a new architecture. That's just the current architecture with the labels shifted. The interesting question is which interface gets standardized, and the author's answer is the one between the C2S server and the โ€œclientโ€ layerโ€”the bottom boundary.

The problem is that what people actually want from C2S is to connect any frontend to any server. The portability they're after lives at the top boundary, between the frontend and whatever is behind it. But the author explicitly argues against standardizing that layer: โ€œwe don't really need a standardized api,โ€ they write, leaving each client free to expose whatever API it likes.

Which means frontends remain locked to specific clients, just as Mastodon apps are locked to the Mastodon API today. The interoperability promise of C2Sโ€”log in to any server with any appโ€”isn't actually delivered. It's been pushed one layer down, out of reach of the end user.

There's real value in the post's thinking about data hosting vs. interpretation, and about the security implications of servers that understand too much. But as an answer to the question C2S is supposed to answer, I'm not convinced.

w.on-t.work

how to not regret c2s

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

@toddsundsted@epiktistes.com

There are two significant new additions in release v3.8.0 of ktistec.

First, the actor cards on the followed/following pages show relevant actor status. On the followed page, it tells you how long it has been since that actor published an activity (create, announce, like, etc.) that was sent to your server. It's a proxy for how active they are (or are not). On the following page, it tells you how long it has been since you have been able to send to that server. It's a proxy for whether that server is reachable or that actor is still alive.

Second, the backend for user-defined algorithmic feeds is in place, along with a keyword/hashtag/mention feeds implementation. You can't set up a feed via the user-interface, but the feeds work if you set one up directly in the databaseโ€”which is how I've been previewing them.. I plan to release the frontend next week.

Here's the full changelog:

Added

  • Display activity status on actor cards.
  • Back-end support for user-defined algorithmic feeds.
  • Apply community-relayed moderator deletes received as a Group's wrapped Announce.
  • Follow a web page's rel="alternate" link when searching.

Fixed

  • Avoid loading entire has_many collections when constructing child records.
  • Evaluate the same-origin fetch gate against an embedded node's own identifier.
  • Accept a delete of an uncached object or actor without verification.
  • Catch MIME::Multipart::Error in local file-upload handling.
  • Map malformed request-body parse failures to Bad Request.

github.com

GitHub - toddsundsted/ktistec: ActivityPub (https://www.w3.org/TR/activitypub/) server for individual users and small groups.

ActivityPub (https://www.w3.org/TR/activitypub/) server for individual users and small groups. - toddsundsted/ktistec

@toddsundsted@epiktistes.com

There are two significant new additions in release v3.8.0 of ktistec.

First, the actor cards on the followed/following pages show relevant actor status. On the followed page, it tells you how long it has been since that actor published an activity (create, announce, like, etc.) that was sent to your server. It's a proxy for how active they are (or are not). On the following page, it tells you how long it has been since you have been able to send to that server. It's a proxy for whether that server is reachable or that actor is still alive.

Second, the backend for user-defined algorithmic feeds is in place, along with a keyword/hashtag/mention feeds implementation. You can't set up a feed via the user-interface, but the feeds work if you set one up directly in the databaseโ€”which is how I've been previewing them.. I plan to release the frontend next week.

Here's the full changelog:

Added

  • Display activity status on actor cards.
  • Back-end support for user-defined algorithmic feeds.
  • Apply community-relayed moderator deletes received as a Group's wrapped Announce.
  • Follow a web page's rel="alternate" link when searching.

Fixed

  • Avoid loading entire has_many collections when constructing child records.
  • Evaluate the same-origin fetch gate against an embedded node's own identifier.
  • Accept a delete of an uncached object or actor without verification.
  • Catch MIME::Multipart::Error in local file-upload handling.
  • Map malformed request-body parse failures to Bad Request.

github.com

GitHub - toddsundsted/ktistec: ActivityPub (https://www.w3.org/TR/activitypub/) server for individual users and small groups.

ActivityPub (https://www.w3.org/TR/activitypub/) server for individual users and small groups. - toddsundsted/ktistec

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

@hrefna@hachyderm.io

This remains one of my least favorite features of .

1. It violates fundamental type safety principles.
2. "without authentication" means that it needs to be accessible to random people on the internet if read literally, and evidently changing this (along with "we should all require transport layer security") are controversial opinions in fediverse development.
3. Literally everything about that Note makes me die inside.
4. Yet another example of how "there are no servers in ActivityPub" is undermined by the spec. Because this entire concept and its use cases assume a server. "There are no servers" has always been a fiction, but this illustrates the tension.
5. It is the kind of thing that could be better implemented by using actors, but the protocol is unwilling to take that route for how to implement features.

5.6 Public Addressing

In addition to [ActivityStreams] collections and objects, Activities may additionally be addressed to the special "public" collection, with the identifier https://www.w3.org/ns/activitystreams#Public. For example:

EXAMPLE 10
{
  "@context": "https://www.w3.org/ns/activitystreams",
  "id": "https://www.w3.org/ns/activitystreams#Public",
  "type": "Collection"
}
Activities addressed to this special URI shall be accessible to all users, without authentication. Implementations MUST NOT deliver to the "public" special collection; it is not capable of receiving actual activities. However, actors MAY have a sharedInbox endpoint which is available for efficient shared delivery of public posts (as well as posts to followers-only); see 7.1.3 Shared Inbox Delivery.

NOTE
Compacting an ActivityStreams object using the ActivityStreams JSON-LD context might result in https://www.w3.org/ns/activitystreams#Public being represented as simply Public or as:Public which are valid representations of the Public collection. Implementations which treat ActivityStreams objects as simply JSON rather than converting an incoming activity over to a local context using JSON-LD tooling should be aware of this and should be prepared to accept all three representations.
ALT text

5.6 Public Addressing In addition to [ActivityStreams] collections and objects, Activities may additionally be addressed to the special "public" collection, with the identifier https://www.w3.org/ns/activitystreams#Public. For example: EXAMPLE 10 { "@context": "https://www.w3.org/ns/activitystreams", "id": "https://www.w3.org/ns/activitystreams#Public", "type": "Collection" } Activities addressed to this special URI shall be accessible to all users, without authentication. Implementations MUST NOT deliver to the "public" special collection; it is not capable of receiving actual activities. However, actors MAY have a sharedInbox endpoint which is available for efficient shared delivery of public posts (as well as posts to followers-only); see 7.1.3 Shared Inbox Delivery. NOTE Compacting an ActivityStreams object using the ActivityStreams JSON-LD context might result in https://www.w3.org/ns/activitystreams#Public being represented as simply Public or as:Public which are valid representations of the Public collection. Implementations which treat ActivityStreams objects as simply JSON rather than converting an incoming activity over to a local context using JSON-LD tooling should be aware of this and should be prepared to accept all three representations.

Been thinking about fediverse wiki after @2chanhaeng mentioned it today. Some ideas:

  • Cross-instance page linking: [[Page Title@other-instance.wiki]]
  • Edit pages on other instances with your home account
  • Fork pages across instances: [[Page@instance-a.wiki]] โ†’ [[Page@instance-b.wiki]], sharing edit history up to the fork point
  • Merge forked pages later when needed

The fork/merge model feels natural for federated collaboration. Thoughts?

hackers.pub

Fediverse + Wiki

Fediverse + Wiki

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

@hrefna@hachyderm.io

This remains one of my least favorite features of .

1. It violates fundamental type safety principles.
2. "without authentication" means that it needs to be accessible to random people on the internet if read literally, and evidently changing this (along with "we should all require transport layer security") are controversial opinions in fediverse development.
3. Literally everything about that Note makes me die inside.
4. Yet another example of how "there are no servers in ActivityPub" is undermined by the spec. Because this entire concept and its use cases assume a server. "There are no servers" has always been a fiction, but this illustrates the tension.
5. It is the kind of thing that could be better implemented by using actors, but the protocol is unwilling to take that route for how to implement features.

5.6 Public Addressing

In addition to [ActivityStreams] collections and objects, Activities may additionally be addressed to the special "public" collection, with the identifier https://www.w3.org/ns/activitystreams#Public. For example:

EXAMPLE 10
{
  "@context": "https://www.w3.org/ns/activitystreams",
  "id": "https://www.w3.org/ns/activitystreams#Public",
  "type": "Collection"
}
Activities addressed to this special URI shall be accessible to all users, without authentication. Implementations MUST NOT deliver to the "public" special collection; it is not capable of receiving actual activities. However, actors MAY have a sharedInbox endpoint which is available for efficient shared delivery of public posts (as well as posts to followers-only); see 7.1.3 Shared Inbox Delivery.

NOTE
Compacting an ActivityStreams object using the ActivityStreams JSON-LD context might result in https://www.w3.org/ns/activitystreams#Public being represented as simply Public or as:Public which are valid representations of the Public collection. Implementations which treat ActivityStreams objects as simply JSON rather than converting an incoming activity over to a local context using JSON-LD tooling should be aware of this and should be prepared to accept all three representations.
ALT text

5.6 Public Addressing In addition to [ActivityStreams] collections and objects, Activities may additionally be addressed to the special "public" collection, with the identifier https://www.w3.org/ns/activitystreams#Public. For example: EXAMPLE 10 { "@context": "https://www.w3.org/ns/activitystreams", "id": "https://www.w3.org/ns/activitystreams#Public", "type": "Collection" } Activities addressed to this special URI shall be accessible to all users, without authentication. Implementations MUST NOT deliver to the "public" special collection; it is not capable of receiving actual activities. However, actors MAY have a sharedInbox endpoint which is available for efficient shared delivery of public posts (as well as posts to followers-only); see 7.1.3 Shared Inbox Delivery. NOTE Compacting an ActivityStreams object using the ActivityStreams JSON-LD context might result in https://www.w3.org/ns/activitystreams#Public being represented as simply Public or as:Public which are valid representations of the Public collection. Implementations which treat ActivityStreams objects as simply JSON rather than converting an incoming activity over to a local context using JSON-LD tooling should be aware of this and should be prepared to accept all three representations.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

@djm62 @shlee

Not sure if there's an existing framework that can be designed to work with . But I do think that thinking about consent in a more general/generic sense would be a worthwhile effort. This should be something that is picked up at the level, or perhaps in documents first. A lot of the mechanisms that proliferate now are also app-centric and almost *assume* that is a glorified environment. The more that trend continues, the more that will indeed be the case. This is what my long blog post was about, that I wrote recently:

coding.social/blog/grassroots-

coding.social

Grassroots fediverse evolution

Social dynamics in the grassroots fediverse ecosystem and laissรฉz-faire practices led to divergence from power and promise of the ActivityPub protocol. Grassroots standards and the ActivityPub API initiative can get us back on track.

Absolute Madness how everyone thinks it is just okay to sprinkle magic opt-in / opt-out and other control words in the profile description of someone's account!

Why do we have be extensible if not for supporting a native mechanism to deal with consent? Why should there be out-of-bound ugliest of ugliest hacks?

With all that jazz being introduced it is no wonder people opt-in for and other more sane social networking protocols that have robust protocol specifications, and not a metric ton of protocol decay to poop on top of your basic AP implementation so it becomes interoperable until the next on-the-fly hack by someone else breaks your nice code..

Fediverse is protocol impl + eternal whack-a-mole development and maintenance this way.

github.com/social-web-foundati

github.com

Opt-in rather than opt-out ยท Issue #37 ยท social-web-foundation/tags.pub

Please switch your system from opt-out to opt-in. The use of hashtags in profiles does not adhere to any known standard. If you are going to force me to include a hashtag, then please ensure that y...

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

Just opened an issue for a major new task for : building an smoke test suite.

To ensure Fedify-built servers federate correctly with the wider , we're planning to run automated E2E tests in against live instances of Mastodon, Misskey, and more. This is crucial for a framework's reliability.

You can see the full plan and discussion here:

https://github.com/fedify-dev/fedify/issues/481

github.com

Interoperability smoke test suite ยท Issue #481 ยท fedify-dev/fedify

Summary As a server framework, Fedify's core value lies in its ability to correctly interoperate with other ActivityPub implementations in the Fediverse. Currently, we rely on unit tests and manual...

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

@liaizon@wake.st

Goodmorning fedi, I just woke up in a windy tent in the middle of a field and sleepily scrolled thru all the opening talks at to figure out what my first stop needs to be: def have to catch @cwebber, @dholms.at and @boris discuss the trade offs, design decisions and points of convergence between and

Christine Lemmer Webber is lead author and co-editor of the W3C ActivityPub specification. Daniel Holmgren is Head of Protocol at Bluesky, working on the AT Protocol specification at the IETF.  Join us for a discussion on decentralization trade-offs and other design decisions in the two protocols, and what that means for different architectures, structures, and even future points of convergence.
ALT text

Christine Lemmer Webber is lead author and co-editor of the W3C ActivityPub specification. Daniel Holmgren is Head of Protocol at Bluesky, working on the AT Protocol specification at the IETF. Join us for a discussion on decentralization trade-offs and other design decisions in the two protocols, and what that means for different architectures, structures, and even future points of convergence.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

@liaizon@wake.st

Goodmorning fedi, I just woke up in a windy tent in the middle of a field and sleepily scrolled thru all the opening talks at to figure out what my first stop needs to be: def have to catch @cwebber, @dholms.at and @boris discuss the trade offs, design decisions and points of convergence between and

Christine Lemmer Webber is lead author and co-editor of the W3C ActivityPub specification. Daniel Holmgren is Head of Protocol at Bluesky, working on the AT Protocol specification at the IETF.  Join us for a discussion on decentralization trade-offs and other design decisions in the two protocols, and what that means for different architectures, structures, and even future points of convergence.
ALT text

Christine Lemmer Webber is lead author and co-editor of the W3C ActivityPub specification. Daniel Holmgren is Head of Protocol at Bluesky, working on the AT Protocol specification at the IETF. Join us for a discussion on decentralization trade-offs and other design decisions in the two protocols, and what that means for different architectures, structures, and even future points of convergence.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

@homegrown@social.growyourown.services

Are you into 3D printing, self-hosting and the Fediverse?

If so you might want to look into Manyfold, a FOSS Fediverse platform which lets you upload and share 3D print models:

๐ŸŒฑ manyfold.app

You can follow the official accounts at:

๐ŸŒฑ @manyfold@3dp.chat (main)
๐ŸŒฑ @manyfold@makertube.net (videos)

You can host your own Manyfold server using the instructions at manyfold.app/get-started/insta (be warned though, installation does require a bit of tech skill).

manyfold.app

Installation

Organise and share your 3d print files

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

One thing I keep coming back to when comparing and AT Protocol: ActivityPub is basically a convention on top of the stuff we already have. An actor is a JSON-LD document you GET. An inbox is an endpoint you POST to. If you already run a website, you can bolt this on without changing the site's basic shape. Ghost didn't set out to join the , and then years later it could, just by adding an endpoint.

AT Protocol feels less like that to me. Running a PDS means a signed repo, a Merkle search tree, a firehose, a DID. It's not a layer you add to an existing site. It's closer to standing up another backend beside it.

I think that's why ActivityPub keeps making sense to me. You can join later. You don't have to have built the whole thing with federation in mind from day one.

@django@social.coop

The ActivityPub API doesn't define a way to get all server known posts with a specific tag.

There are a few ways this could be done in an ActivityPub client

What behaviour would you prefer when clicking on a post Tag link?

(Any other ideas, comment)

  • Open tag at server origin4 (50%)
  • Lists known posts from inbox2 (25%)
  • Lists known posts from tags.pub2 (25%)
@django@social.coop

The ActivityPub API doesn't define a way to get all server known posts with a specific tag.

There are a few ways this could be done in an ActivityPub client

What behaviour would you prefer when clicking on a post Tag link?

(Any other ideas, comment)

  • Open tag at server origin4 (50%)
  • Lists known posts from inbox2 (25%)
  • Lists known posts from tags.pub2 (25%)
@deivudesu@mastodon.social ยท Reply to ใƒ‡ใ‚คใƒด

Building this around ego-graphs (subgraphs of the real underlying social network, centred around one user) allows for a much simpler (and more decentralised) model than protocols like , etc, that need to reconcile multiple participants having equal rights on a discussion spaceโ€ฆ

The trade-off, is that it does not scale very well: these ego-graphs must remain at a manageable size (~10-15k people).

โ€ฆ which is a feature, not a bugโ„ข

3/ ๐Ÿงต

@deivudesu@mastodon.social ยท Reply to ใƒ‡ใ‚คใƒด

Building this around ego-graphs (subgraphs of the real underlying social network, centred around one user) allows for a much simpler (and more decentralised) model than protocols like , etc, that need to reconcile multiple participants having equal rights on a discussion spaceโ€ฆ

The trade-off, is that it does not scale very well: these ego-graphs must remain at a manageable size (~10-15k people).

โ€ฆ which is a feature, not a bugโ„ข

3/ ๐Ÿงต

@musenhain@friendica.andreaskilgus.de

Was ich vom Netzwerk vutuv.de halten soll und ob ich mich weiter damit beschรคftigen werde, weiรŸ ich noch nicht. Vor 9 Jahren habe ich mir dort wohl mal einen Account angelegt und kรผrzlich kam eine E-Mail, dass man nun wieder aktiv am Netzwerk arbeite. Ok.

Womit ich nicht gerechnet hatte: Unter den Einstellungen findet sich ein Abschnitt โ€žFediverseโ€œ, in dem sich eine Verbindung hierher aktivieren lรคsst:

โ€žMastodon und viele weitere Dienste bilden ein groรŸes, offenes Netzwerk: das Fediverse. Wenn Sie teilnehmen, kรถnnen Ihnen Menschen von dort folgen, und Ihre รถffentlichen vutuv-Beitrรคge erscheinen in deren Timelines, ganz ohne vutuv-Konto.โ€œ

vutuv.de

vutuv

Your Fast and Free Career Network. No expensive premium accounts! Get a free account in 30 seconds.

@julian@fietkau.social

I will be at @berlinfediday in September, presenting ongoing work around SciOp (sciop.net). ๐Ÿ˜€

The presentation will focus on ActivityPub-related aspects of the project, but there are many more facets to it.

This will be my first public speaking appearance representing @tibosl. ๐Ÿ™‚

sciop.net

SciOp - Public Information Preservation

Preserving Public Information

@federatedmind@techhub.social

This week, we cover the writing layer of the fediverse: Ghost, WriteFreely, Micro.blog, Plume, WordPress, and Flipboard. Text was ActivityPub's first real workload, but these platforms didn't all arrive at federation the same way.

Ghost: a UK non-profit that funds Fedify (by @hongminhee) the framework its federation is built on. it's a publisher and a fediverse client at once, with an inbox as well as an outbox. Our newsletter is also powered by it, so @index is followable from any Mastodon app right now.

WriteFreely: one primary maintainer, Matt Baer (@matt), roughly 1,400 of 1,900+ commits, going since 2015. Funded by his own hosted product, Write.as.

Micro.blog: a Kickstarter By Manton Reese (@manton) that funded the platform before it had a single user. POSSE, native ActivityPub, and native Bluesky, no bridge.

Plume: a simple platform that also supported collaborative multi-author blogs. But no longer actively developed - it recommends WriteFreely and WordPress instead of itself.

WordPress: built-in ActivityPub (using plugin by Matthias Pfefferle - @pfefferle) plus a native AT Protocol plugin and real moderation tooling.

Flipboard: curating other people's writing rather than hosting its own.

Part 3 of the "Fediverse Beyond Mastodon" series.

federatedmind.com/the-written-

An antique quill and inkwell against a vibrant multicolor cosmic backdrop, with constellation lines connecting points of light across a deep starfield. Magenta, cyan, violet, and amber tones.
ALT text

An antique quill and inkwell against a vibrant multicolor cosmic backdrop, with constellation lines connecting points of light across a deep starfield. Magenta, cyan, violet, and amber tones.

@federatedmind@pixelfed.social
Mapped the writing layer of the fediverse: Ghost, WriteFreely, Micro.blog, Plume, WordPress, and Flipboard.

Text was ActivityPub's first real workload, but these platforms didn't all arrive at federation the same way. Some built it in, some bolted it on while others bridged it through.

Part 3 of the mini-series: Fediverse Beyond Mastodon.

https://federatedmind.com/the-written-fediverse/

Find us on the fediverse:
Mastodon: @federatedmind@techhub.social
Pixelfed: @federatedmind@pixelfed.social

#Fediverse #ActivityPub #OpenWeb #IndieWeb #Blogging #Ghost #WordPress #WriteFreely
An antique book, quill and inkwell against a vibrant multicolor cosmic backdrop, with constellation lines connecting points of light across a deep starfield. Magenta, cyan, violet, and amber tones.
ALT text

An antique book, quill and inkwell against a vibrant multicolor cosmic backdrop, with constellation lines connecting points of light across a deep starfield. Magenta, cyan, violet, and amber tones.

@federatedmind@techhub.social

This week, we cover the writing layer of the fediverse: Ghost, WriteFreely, Micro.blog, Plume, WordPress, and Flipboard. Text was ActivityPub's first real workload, but these platforms didn't all arrive at federation the same way.

Ghost: a UK non-profit that funds Fedify (by @hongminhee) the framework its federation is built on. it's a publisher and a fediverse client at once, with an inbox as well as an outbox. Our newsletter is also powered by it, so @index is followable from any Mastodon app right now.

WriteFreely: one primary maintainer, Matt Baer (@matt), roughly 1,400 of 1,900+ commits, going since 2015. Funded by his own hosted product, Write.as.

Micro.blog: a Kickstarter By Manton Reese (@manton) that funded the platform before it had a single user. POSSE, native ActivityPub, and native Bluesky, no bridge.

Plume: a simple platform that also supported collaborative multi-author blogs. But no longer actively developed - it recommends WriteFreely and WordPress instead of itself.

WordPress: built-in ActivityPub (using plugin by Matthias Pfefferle - @pfefferle) plus a native AT Protocol plugin and real moderation tooling.

Flipboard: curating other people's writing rather than hosting its own.

Part 3 of the "Fediverse Beyond Mastodon" series.

federatedmind.com/the-written-

An antique quill and inkwell against a vibrant multicolor cosmic backdrop, with constellation lines connecting points of light across a deep starfield. Magenta, cyan, violet, and amber tones.
ALT text

An antique quill and inkwell against a vibrant multicolor cosmic backdrop, with constellation lines connecting points of light across a deep starfield. Magenta, cyan, violet, and amber tones.

@federatedmind@pixelfed.social
Mapped the writing layer of the fediverse: Ghost, WriteFreely, Micro.blog, Plume, WordPress, and Flipboard.

Text was ActivityPub's first real workload, but these platforms didn't all arrive at federation the same way. Some built it in, some bolted it on while others bridged it through.

Part 3 of the mini-series: Fediverse Beyond Mastodon.

https://federatedmind.com/the-written-fediverse/

Find us on the fediverse:
Mastodon: @federatedmind@techhub.social
Pixelfed: @federatedmind@pixelfed.social

#Fediverse #ActivityPub #OpenWeb #IndieWeb #Blogging #Ghost #WordPress #WriteFreely
An antique book, quill and inkwell against a vibrant multicolor cosmic backdrop, with constellation lines connecting points of light across a deep starfield. Magenta, cyan, violet, and amber tones.
ALT text

An antique book, quill and inkwell against a vibrant multicolor cosmic backdrop, with constellation lines connecting points of light across a deep starfield. Magenta, cyan, violet, and amber tones.

@federatedmind@techhub.social

This week, we cover the writing layer of the fediverse: Ghost, WriteFreely, Micro.blog, Plume, WordPress, and Flipboard. Text was ActivityPub's first real workload, but these platforms didn't all arrive at federation the same way.

Ghost: a UK non-profit that funds Fedify (by @hongminhee) the framework its federation is built on. it's a publisher and a fediverse client at once, with an inbox as well as an outbox. Our newsletter is also powered by it, so @index is followable from any Mastodon app right now.

WriteFreely: one primary maintainer, Matt Baer (@matt), roughly 1,400 of 1,900+ commits, going since 2015. Funded by his own hosted product, Write.as.

Micro.blog: a Kickstarter By Manton Reese (@manton) that funded the platform before it had a single user. POSSE, native ActivityPub, and native Bluesky, no bridge.

Plume: a simple platform that also supported collaborative multi-author blogs. But no longer actively developed - it recommends WriteFreely and WordPress instead of itself.

WordPress: built-in ActivityPub (using plugin by Matthias Pfefferle - @pfefferle) plus a native AT Protocol plugin and real moderation tooling.

Flipboard: curating other people's writing rather than hosting its own.

Part 3 of the "Fediverse Beyond Mastodon" series.

federatedmind.com/the-written-

An antique quill and inkwell against a vibrant multicolor cosmic backdrop, with constellation lines connecting points of light across a deep starfield. Magenta, cyan, violet, and amber tones.
ALT text

An antique quill and inkwell against a vibrant multicolor cosmic backdrop, with constellation lines connecting points of light across a deep starfield. Magenta, cyan, violet, and amber tones.

@federatedmind@techhub.social

This week, we cover the writing layer of the fediverse: Ghost, WriteFreely, Micro.blog, Plume, WordPress, and Flipboard. Text was ActivityPub's first real workload, but these platforms didn't all arrive at federation the same way.

Ghost: a UK non-profit that funds Fedify (by @hongminhee) the framework its federation is built on. it's a publisher and a fediverse client at once, with an inbox as well as an outbox. Our newsletter is also powered by it, so @index is followable from any Mastodon app right now.

WriteFreely: one primary maintainer, Matt Baer (@matt), roughly 1,400 of 1,900+ commits, going since 2015. Funded by his own hosted product, Write.as.

Micro.blog: a Kickstarter By Manton Reese (@manton) that funded the platform before it had a single user. POSSE, native ActivityPub, and native Bluesky, no bridge.

Plume: a simple platform that also supported collaborative multi-author blogs. But no longer actively developed - it recommends WriteFreely and WordPress instead of itself.

WordPress: built-in ActivityPub (using plugin by Matthias Pfefferle - @pfefferle) plus a native AT Protocol plugin and real moderation tooling.

Flipboard: curating other people's writing rather than hosting its own.

Part 3 of the "Fediverse Beyond Mastodon" series.

federatedmind.com/the-written-

An antique quill and inkwell against a vibrant multicolor cosmic backdrop, with constellation lines connecting points of light across a deep starfield. Magenta, cyan, violet, and amber tones.
ALT text

An antique quill and inkwell against a vibrant multicolor cosmic backdrop, with constellation lines connecting points of light across a deep starfield. Magenta, cyan, violet, and amber tones.

@puppethead@ieji.de

I just discovered the Fediverse (English) Wikipedia page has a huge section on AT Protocol and I question why. It seems like excessive promotion of Bluesky and its protocol that is not compatible with ActivityPub, both technically and in spirit. Illustrating bridging isn't the same as compatibility. Might as well add sections for other random network protocols like XMPP (Jabber).

en.wikipedia.org/wiki/Fediverse

en.wikipedia.org

Fediverse - Wikipedia

@puppethead@ieji.de

I just discovered the Fediverse (English) Wikipedia page has a huge section on AT Protocol and I question why. It seems like excessive promotion of Bluesky and its protocol that is not compatible with ActivityPub, both technically and in spirit. Illustrating bridging isn't the same as compatibility. Might as well add sections for other random network protocols like XMPP (Jabber).

en.wikipedia.org/wiki/Fediverse

en.wikipedia.org

Fediverse - Wikipedia

@puppethead@ieji.de

I just discovered the Fediverse (English) Wikipedia page has a huge section on AT Protocol and I question why. It seems like excessive promotion of Bluesky and its protocol that is not compatible with ActivityPub, both technically and in spirit. Illustrating bridging isn't the same as compatibility. Might as well add sections for other random network protocols like XMPP (Jabber).

en.wikipedia.org/wiki/Fediverse

en.wikipedia.org

Fediverse - Wikipedia

@federatedmind@techhub.social

This week, we cover the writing layer of the fediverse: Ghost, WriteFreely, Micro.blog, Plume, WordPress, and Flipboard. Text was ActivityPub's first real workload, but these platforms didn't all arrive at federation the same way.

Ghost: a UK non-profit that funds Fedify (by @hongminhee) the framework its federation is built on. it's a publisher and a fediverse client at once, with an inbox as well as an outbox. Our newsletter is also powered by it, so @index is followable from any Mastodon app right now.

WriteFreely: one primary maintainer, Matt Baer (@matt), roughly 1,400 of 1,900+ commits, going since 2015. Funded by his own hosted product, Write.as.

Micro.blog: a Kickstarter By Manton Reese (@manton) that funded the platform before it had a single user. POSSE, native ActivityPub, and native Bluesky, no bridge.

Plume: a simple platform that also supported collaborative multi-author blogs. But no longer actively developed - it recommends WriteFreely and WordPress instead of itself.

WordPress: built-in ActivityPub (using plugin by Matthias Pfefferle - @pfefferle) plus a native AT Protocol plugin and real moderation tooling.

Flipboard: curating other people's writing rather than hosting its own.

Part 3 of the "Fediverse Beyond Mastodon" series.

federatedmind.com/the-written-

An antique quill and inkwell against a vibrant multicolor cosmic backdrop, with constellation lines connecting points of light across a deep starfield. Magenta, cyan, violet, and amber tones.
ALT text

An antique quill and inkwell against a vibrant multicolor cosmic backdrop, with constellation lines connecting points of light across a deep starfield. Magenta, cyan, violet, and amber tones.

@puppethead@ieji.de

I just discovered the Fediverse (English) Wikipedia page has a huge section on AT Protocol and I question why. It seems like excessive promotion of Bluesky and its protocol that is not compatible with ActivityPub, both technically and in spirit. Illustrating bridging isn't the same as compatibility. Might as well add sections for other random network protocols like XMPP (Jabber).

en.wikipedia.org/wiki/Fediverse

en.wikipedia.org

Fediverse - Wikipedia

@hrefna@hachyderm.io

Let's talk about hashtags in .

First you need to understand: that concept does not exist in ActivityPub. Tags are not mentioned directly in the spec other than to say that the `tag` field is owned by the server and that the server shouldn't use it to modify the addressing fields. There's also a suggestion on how to read it that is vague on the details.

So we go instead to the Activity Vocabulary document to understand it. This contains a non-normative section on microsyntax with a vague suggestion on how to parse the objects and populate the `tag` property.

We see there that a tag can beโ€ฆย any type of object. Or a list of objects! Or a list of Links! which are theoretically disjoint with objects but only when it is convenient to the spec. Their example uses a tag to refer to a Person object.

But wait there's more.

Mastodon comes along and builds their own specialized interpretation: docs.joinmastodon.org/spec/act It sort of kind of follows the example from the nonnormative section of the Activity Vocabulary document, but the idea of a "Hashtag" object itself is completely foreign.

This has rules about normalizationโ€”not present anywhere else in the spec in any form, but perfectly reasonable on their face.

It then includes a nonconformant link to the AS document in the context, which is basically just likeโ€ฆย pretending to be included.

It's so much fun to navigate this mess.

docs.joinmastodon.org

ActivityPub - Mastodon documentation

A decentralized social networking protocol based upon the ActivityStreams 2.0 data format and JSON-LD.

@hrefna@hachyderm.io

Let's talk about hashtags in .

First you need to understand: that concept does not exist in ActivityPub. Tags are not mentioned directly in the spec other than to say that the `tag` field is owned by the server and that the server shouldn't use it to modify the addressing fields. There's also a suggestion on how to read it that is vague on the details.

So we go instead to the Activity Vocabulary document to understand it. This contains a non-normative section on microsyntax with a vague suggestion on how to parse the objects and populate the `tag` property.

We see there that a tag can beโ€ฆย any type of object. Or a list of objects! Or a list of Links! which are theoretically disjoint with objects but only when it is convenient to the spec. Their example uses a tag to refer to a Person object.

But wait there's more.

Mastodon comes along and builds their own specialized interpretation: docs.joinmastodon.org/spec/act It sort of kind of follows the example from the nonnormative section of the Activity Vocabulary document, but the idea of a "Hashtag" object itself is completely foreign.

This has rules about normalizationโ€”not present anywhere else in the spec in any form, but perfectly reasonable on their face.

It then includes a nonconformant link to the AS document in the context, which is basically just likeโ€ฆย pretending to be included.

It's so much fun to navigate this mess.

docs.joinmastodon.org

ActivityPub - Mastodon documentation

A decentralized social networking protocol based upon the ActivityStreams 2.0 data format and JSON-LD.

@smallcircles@social.coop

If I compare of today with that of a couple of years ago (as my acount perceives it), these are some of my observations:

- Being on a well-moderated instance I see a quieter, calmer fediverse.

- Less drama, performative activism, and purity spiral anti-patterns reach my timeline.

- People are genuine in their posts, yet doom & gloom dominate the feed.

- There are less posts than there used to be.

- In terms of interactions / engagement fediverse feels like a ghost town.

- But there are plenty nice discussions to participate in.

- People boost less, yet that is how we can grow and foster healthy culture at the same time.

- Posts with high engagement depend on weird virality dynamics, or relate to recognized influencers.

- In that sense this microblog space isn't much different than other platforms.

My on this account is shaped by my history of years-long fedi / AP / FOSS advocacy, that made me choose whom to follow and who followed me.

@homegrown@social.growyourown.services

Are you into 3D printing, self-hosting and the Fediverse?

If so you might want to look into Manyfold, a FOSS Fediverse platform which lets you upload and share 3D print models:

๐ŸŒฑ manyfold.app

You can follow the official accounts at:

๐ŸŒฑ @manyfold@3dp.chat (main)
๐ŸŒฑ @manyfold@makertube.net (videos)

You can host your own Manyfold server using the instructions at manyfold.app/get-started/insta (be warned though, installation does require a bit of tech skill).

manyfold.app

Installation

Organise and share your 3d print files

@mczachurski@mastodon.social
@mczachurski@mastodon.social
@homegrown@social.growyourown.services

Are you into 3D printing, self-hosting and the Fediverse?

If so you might want to look into Manyfold, a FOSS Fediverse platform which lets you upload and share 3D print models:

๐ŸŒฑ manyfold.app

You can follow the official accounts at:

๐ŸŒฑ @manyfold@3dp.chat (main)
๐ŸŒฑ @manyfold@makertube.net (videos)

You can host your own Manyfold server using the instructions at manyfold.app/get-started/insta (be warned though, installation does require a bit of tech skill).

manyfold.app

Installation

Organise and share your 3d print files

@toddsundsted@epiktistes.com

i'm sure inline json-ld contexts with server extensions seem like the wrong thing, but they're preferable to identical copies of the same context hosted externally and served by a dozen or more instances of a server or family of servers.

i could be persuaded to change my mind if a server allowed meaningful customization. but if a server is publishing a canonical vocabulary of extensions for that server, it should be hosted in a single, well-know location.

@toddsundsted@epiktistes.com

i'm sure inline json-ld contexts with server extensions seem like the wrong thing, but they're preferable to identical copies of the same context hosted externally and served by a dozen or more instances of a server or family of servers.

i could be persuaded to change my mind if a server allowed meaningful customization. but if a server is publishing a canonical vocabulary of extensions for that server, it should be hosted in a single, well-know location.

@simonjust@mstdn.dk

Jeg har kรธbt @evan's fรฆnomenale ebog "ActivityPub - Programming for the Social Web" (great book, Evan!)

Det er en vildt god primer, hvis du vil bygge fedivers-tjenester. Der er kodeeksempler i Python.

Link: oreilly.com/library/view/activ <-- findes ogsรฅ der hvor du ellers kรธber ebรธger (... jeg kan desvรฆrre ikke finde den i papirform.)

Ps. laver bogoversigt pรฅ fediverset.dk snarest

oreilly.com

ActivityPub

ActivityPub is the new standard for connecting social networks together on the social web. This open, decentralized social networking protocol defines an API for sharing activities... - Selection from ActivityPub [Book]

@simonjust@mstdn.dk

Jeg har kรธbt @evan's fรฆnomenale ebog "ActivityPub - Programming for the Social Web" (great book, Evan!)

Det er en vildt god primer, hvis du vil bygge fedivers-tjenester. Der er kodeeksempler i Python.

Link: oreilly.com/library/view/activ <-- findes ogsรฅ der hvor du ellers kรธber ebรธger (... jeg kan desvรฆrre ikke finde den i papirform.)

Ps. laver bogoversigt pรฅ fediverset.dk snarest

oreilly.com

ActivityPub

ActivityPub is the new standard for connecting social networks together on the social web. This open, decentralized social networking protocol defines an API for sharing activities... - Selection from ActivityPub [Book]

@res260@infosec.exchange

Great post, I suggest to anyone interested in the ActivityPub spec and technical architecture to read it. I had no idea the tool echosystem had this many problems, and Fedify handles a lot of them for you!

hackers.pub/@fedify/2026/why-a

hackers.pub

Why implementing ActivityPub is hard, and why it doesn't have to be

Implementing the ActivityPub protocol from scratch introduces massive technical hurdles, including fragmented signature standards, unpredictable JSON-LD document variations, complex distributed systems engineering, and critical security vulnerabilities. Developers frequently encounter silent failures like out-of-order message deliveries that cause permanently orphaned posts, undocumented platform-specific interoperability quirks, and exposure to server-side request forgery. Fedify, a TypeScript framework compatible with Deno, Node.js, and Bun, abstracts these exhausting complexities by automating multi-spec HTTP signatures, normalizing highly variable document shapes into typed immutable classes, and offering robust queue management with guaranteed ordered delivery. By handling the delicate details of federation, including secure-by-default network routing and extensive developer tooling, the library allows creators to focus on building actual products. This post demonstrates how shifting the burden of low-level protocol compliance to a specialized framework enables developers to build secure, highly interoperable federated applications with minimal effort.

@evan@cosocial.ca ยท Reply to ร‰milio Gonzalez

@res260 @fedify I'd agree. We have a lot more flexibility in than is clear in the text, so a lot of developers expect very specific formats for data. ActivityPub 1.1 will be clearer, with more examples, so that developers can deal with the full variety.

@res260@infosec.exchange

Great post, I suggest to anyone interested in the ActivityPub spec and technical architecture to read it. I had no idea the tool echosystem had this many problems, and Fedify handles a lot of them for you!

hackers.pub/@fedify/2026/why-a

hackers.pub

Why implementing ActivityPub is hard, and why it doesn't have to be

Implementing the ActivityPub protocol from scratch introduces massive technical hurdles, including fragmented signature standards, unpredictable JSON-LD document variations, complex distributed systems engineering, and critical security vulnerabilities. Developers frequently encounter silent failures like out-of-order message deliveries that cause permanently orphaned posts, undocumented platform-specific interoperability quirks, and exposure to server-side request forgery. Fedify, a TypeScript framework compatible with Deno, Node.js, and Bun, abstracts these exhausting complexities by automating multi-spec HTTP signatures, normalizing highly variable document shapes into typed immutable classes, and offering robust queue management with guaranteed ordered delivery. By handling the delicate details of federation, including secure-by-default network routing and extensive developer tooling, the library allows creators to focus on building actual products. This post demonstrates how shifting the burden of low-level protocol compliance to a specialized framework enables developers to build secure, highly interoperable federated applications with minimal effort.

@res260@infosec.exchange

RE: hackers.pub/@fedify/2026/why-a

Great post, I suggest to anyone interested in the ActivityPub spec and technical architecture to read it. I had no idea the tool echosystem had this many problems, and Fedify handles a lot of them for you!

hackers.pub

Why implementing ActivityPub is hard, and why it doesn't have to be

Implementing the ActivityPub protocol from scratch introduces massive technical hurdles, including fragmented signature standards, unpredictable JSON-LD document variations, complex distributed systems engineering, and critical security vulnerabilities. Developers frequently encounter silent failures like out-of-order message deliveries that cause permanently orphaned posts, undocumented platform-specific interoperability quirks, and exposure to server-side request forgery. Fedify, a TypeScript framework compatible with Deno, Node.js, and Bun, abstracts these exhausting complexities by automating multi-spec HTTP signatures, normalizing highly variable document shapes into typed immutable classes, and offering robust queue management with guaranteed ordered delivery. By handling the delicate details of federation, including secure-by-default network routing and extensive developer tooling, the library allows creators to focus on building actual products. This post demonstrates how shifting the burden of low-level protocol compliance to a specialized framework enables developers to build secure, highly interoperable federated applications with minimal effort.

This quote was not authorized by the quoted post's author.

@smallcircles@social.coop ยท Reply to ร‰milio Gonzalez

@res260

"Post pending" on your quote post.

I think perhaps I know the article you want to refer to, and I'm able to quote it. But this makes me wonder about the quote post functionality in general. If you don't get the approval, then your post is meaningless to others, as there is no context.

Before quote posting existed you could share a link to someone's public toot, and clicking it would open it in a new browser tab. Perhaps the consent mechanism is okay as-is, dunno, but it is a bit weird that you can freely share an URL to someone's public blog post, but not to someone's public fediverse post because it is seen by default as an attempt to inline the post with yours.

hackers.pub/@fedify/2026/why-a

hackers.pub

Why implementing ActivityPub is hard, and why it doesn't have to be

Implementing the ActivityPub protocol from scratch introduces massive technical hurdles, including fragmented signature standards, unpredictable JSON-LD document variations, complex distributed systems engineering, and critical security vulnerabilities. Developers frequently encounter silent failures like out-of-order message deliveries that cause permanently orphaned posts, undocumented platform-specific interoperability quirks, and exposure to server-side request forgery. Fedify, a TypeScript framework compatible with Deno, Node.js, and Bun, abstracts these exhausting complexities by automating multi-spec HTTP signatures, normalizing highly variable document shapes into typed immutable classes, and offering robust queue management with guaranteed ordered delivery. By handling the delicate details of federation, including secure-by-default network routing and extensive developer tooling, the library allows creators to focus on building actual products. This post demonstrates how shifting the burden of low-level protocol compliance to a specialized framework enables developers to build secure, highly interoperable federated applications with minimal effort.

@fedify@hackers.pub

A quiet failure

Picture the moment your server sends its first Follow activity to Mastodon. You read the spec, built the JSON, signed the HTTP request, and POSTed it with care. What comes back is a single line: 401 Unauthorized. No body. No explanation.

What went wrong? Maybe the clock behind your Date header drifted a few minutes. Maybe the hash in your Digest header is off. Maybe you uppercased the (request-target) pseudo-header while building the signing string, or published your public key as PEM where the other side wanted multibase. The remote server won't tell you. So you start reading someone else's server code to debug your own.

I know, because I've been there. Fedify began as a casualty of another project. I set out to build a single-user microblogging server, the one that would later become Hollo, and started implementing ActivityPub from scratch. Somewhere between the signature specs and the JSON-LD, the protocol work swallowed the product, and I put the whole thing down. What I picked back up wasn't the app. It was the framework the app should have had. Fedify shipped first; only then could Hollo exist, built on top of it. (I've told this story at more length in A year with the fediverse.)

ActivityPub development gets hard in a few very specific places. In this post I want to walk through five of them, then show what each one looks like with Fedify. If you've spent time in the fediverse, you'll probably nod along. If you haven't, you may wonder why anyone would do all of this by hand. Either way, the conclusion is the same: nobody has to anymore.

Five scenes

Scene 1: there is more than one standard

ActivityPub servers authenticate each other with HTTP signatures. Except there isn't one signature spec. Most of the fediverse runs on draft-cavage-http-signatures-12, an expired draft that never became a standard. The actual standard exists too: RFC 9421, HTTP Message Signatures. The problem is that you can't know which one a given server accepts until you try.

A real-world implementation therefore has to sign with one spec, see whether it gets rejected, re-sign with the other, and remember per server which one worked so it can skip the dance next time. The fediverse calls this double-knocking. Yes, you get to implement it yourself.

That's still not the end. HTTP signatures only prove who sent a request. For situations like inbox forwarding, where you relay an activity you received to a third party, you need signatures that live on the document itself: Linked Data Signatures and Object Integrity Proofs. Four signature mechanisms in total, and two kinds of keys to manage: RSA and Ed25519.

Scene 2: one document, many shapes

ActivityPub's wire format is JSON-LD, and in JSON-LD the same document can take many shapes. This is easier to show than to explain. Here is a Create activity one server might send:

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "type": "Create",
  "actor": "https://example.com/users/alice",
  "to": "https://www.w3.org/ns/activitystreams#Public",
  "object": {
    "type": "Note",
    "id": "https://example.com/notes/123",
    "content": "Hello, fediverse!"
  }
}

And here is a semantically identical activity from another server:

{
  "@context": ["https://www.w3.org/ns/activitystreams"],
  "type": "Create",
  "actor": {
    "type": "Person",
    "id": "https://example.com/users/alice",
    "preferredUsername": "alice"
  },
  "to": ["as:Public"],
  "object": "https://example.com/notes/123"
}

actor turned from a URI string into an inline object. to turned from a string into an array. object went the other way, from an inline object to a URI. Even the address that means โ€œpublicโ€ has three valid spellings: https://www.w3.org/ns/activitystreams#Public, as:Public, and plain Public. Your parser has to accept every combination, and which one arrives depends on the sender's implementation.

The spec-compliant answer is to normalize every document with a JSON-LD processor, expansion followed by compaction. In practice many implementations treat it all as โ€œjust JSONโ€ and quietly break on whatever shape some server happens to emit. Either way, you end up with defensive code smeared across the whole codebase: is this a string? An array? An object? A URI I have to fetch?

Scene 3: the zombie post

A user publishes a post, spots a typo, and deletes it right away. Your server sends a Create, then a Delete. Thanks to network weather, some receiving server gets the Delete first and the Create second. It ignores the deletion of a post that doesn't exist yet, then dutifully processes the creation of a post that was already deleted. That post now lives on that server forever, while its author believes it's gone.

Then there's scale. With five thousand followers, one post means thousands of HTTP deliveries. Do that inline in the request handler and your publish button takes half a minute to respond, or the server falls over. Fine, use a queue. Deliveries fail, so retry them. On what schedule? Exponential backoff. How many times? And is a 500 Internal Server Error the same kind of failure as a 410 Gone? When do you clean up three thousand followers on a server that no longer exists? Should you keep hammering a host that has been down for days?

At some point it dawns on you that this is no longer protocol implementation. It's distributed systems engineering.

Scene 4: it's not a spec, it's an ecosystem

Even perfect spec compliance doesn't buy you interoperability. A few examples from the field:

  • Mastodon's secure mode requires HTTP signatures on GET requests too (so-called authorized fetch). Now suppose both servers run in that mode. To fetch the other side's public key you must sign your request; to verify your signature, the other side must first fetch your key. Deadlock. The community's workaround is to sign with an โ€œinstance actorโ€ that represents the server itself. You won't find that in the spec.
  • Threads can't parse activities whose actor is embedded as an inline object. When sending to Threads, the actor has to be a URI.
  • Lemmy silently rejects Group actors that lack fields Mastodon never asks for, such as a moderators collection linked via attributedTo and a featured collection.
  • Misskey carries vocabulary extensions of its own; quote posts alone go by three different property names across implementations.

The list keeps growing. Interoperability here is not something you finish once and stop thinking about. It's maintenance, forever.

Scene 5: insecure by default

Build it from scratch, and you start out wide open. Skip signature verification on incoming activities and anyone can inject a forged Follow or Delete. Leave the document loader unrestricted and a malicious activity can point it at http://169.254.169.254/ or your internal network, turning your server into an SSRF proxy. Skip origin checks on embedded objects and any server can hand out a document claiming โ€œhere's what the Mastodon lead developer said.โ€

What these traps share is that nothing happens when you fall into them. Everything appears to work. Until someone exploits it.

Ghost ran into this too

If you're thinking โ€œsurely our team would manage,โ€ consider Ghost: a leading open-source publishing platform used by thousands of journalists and creators, and a team that set out to build its own ActivityPub support.

We can definitely attest to the problems that Fedify is working hard to solve, because even in just a few weeks of early prototyping we were running into the issues described above right away.

From Alright, let's Fedify

Ghost ended up building its ActivityPub layer on Fedify.

So I put all of it in a framework

Fedify is a TypeScript library for building federated server apps on ActivityPub and the standards around it. It runs on Deno, Node.js, and Bun, and supports edge runtimes like Cloudflare Workers. The design goal hasn't changed since the beginning: keep everything in those five scenes out of application code.

Here are the same five scenes again, this time with Fedify.

Scene 1, revisited: the signature war is the framework's job

Here is everything it takes to put one actor on the fediverse:

import { createFederation, generateCryptoKeyPair, MemoryKvStore } from "@fedify/fedify";
import { Endpoints, Person } from "@fedify/vocab";

const federation = createFederation<void>({
  kv: new MemoryKvStore(),  // Swap for Redis, PostgreSQL, etc. in production
});

federation
  .setActorDispatcher("/users/{identifier}", async (ctx, identifier) => {
    if (identifier !== "alice") return null;
    const keyPairs = await ctx.getActorKeyPairs(identifier);
    return new Person({
      id: ctx.getActorUri(identifier),
      preferredUsername: identifier,
      name: "Alice",
      inbox: ctx.getInboxUri(identifier),
      endpoints: new Endpoints({ sharedInbox: ctx.getInboxUri() }),
      publicKey: keyPairs[0].cryptographicKey,
      assertionMethods: keyPairs.map((keyPair) => keyPair.multikey),
    });
  })
  .setKeyPairsDispatcher(async (ctx, identifier) => {
    // In real code you'd persist these in a database; this shows the gist
    return [await generateCryptoKeyPair()];
  });

The moment this code runs:

  • Every outgoing request gets signed. With an RSA key, Fedify emits HTTP Signatures and Linked Data Signatures; add an Ed25519 key and it attaches Object Integrity Proofs as well. All four mechanisms coexist on a single activity, and each receiver verifies with the strongest one it understands.
  • Fedify does the double-knocking for you: first contact goes out as RFC 9421, a rejection triggers a draft-cavage retry, and the winning spec is cached per server. If the rejection carries an Accept-Signature challenge (RFC 9421 ยง5), Fedify reads it and re-signs with exactly the components the server asked for.
  • Incoming signatures are verified before your code sees anything. An activity that fails verification never reaches your listeners.
  • One bonus. Because you registered an actor dispatcher, you now have a WebFinger (RFC 7033) server, for free. Type @alice@example.com into Mastodon's search box and your actor comes up. You never wrote a line of WebFinger code.

Scene 2, revisited: types instead of JSON-LD

Fedify ships about eighty classes covering the whole Activity Vocabulary plus the major vendor extensions. The classes are typed and immutable, and their accessors absorb the shape differences that JSON-LD allows.

const actor = await ctx.lookupObject("@hongminhee@hollo.social");
if (actor instanceof Person) {
  console.log(actor.name);           // Safe whether it's a string or langString
  const followers = await actor.getFollowers();  // Fetches a URI, unwraps an object
}

lookupObject() takes a handle and runs the whole chain for you, WebFinger discovery included. Accessors like getFollowers() behave the same way whether the value is a URI reference or an inline object, and fetched values are cached.

Vendor fragmentation gets stitched up here too. The three competing quote properties (quoteUri, _misskey_quote, quoteUrl) are unified behind one API, next to the emerging FEP-044f quote. Misskey's isCat property exists as a type, so your server can determine cat-ness with full type safety. It sounds like a joke, but a few dozen details of exactly this kind are what interoperability is actually made of.

Scene 3, revisited: the zombie post dies in one line

Delivery infrastructure first. Plug a message queue into createFederation() and delivery moves to the background, with automatic retries under exponential backoff (up to ten attempts by default). When a post goes to thousands of followers, two-stage fan-out kicks in: a single consolidated message enters the queue, and a background worker splits it into per-server delivery tasks. The publish button responds immediately.

Retries create a problem of their own: the same activity can arrive twice. Fedify keeps a 24-hour idempotence cache of processed activities, so duplicates get detected and skipped before they reach your handlers.

As for the zombie post, the fix is one option:

await ctx.sendActivity(
  { identifier: "alice" },
  "followers",           // Collects recipients from your followers collection
  deleteActivity,
  { orderingKey: post.id },  // Same key = in-order delivery per server
);

Activities that share an orderingKey are delivered to each receiving server in the order they were sent. A Delete can no longer overtake its Create. Activities with different keys still go out in parallel, so throughput survives.

Fedify also handles dead servers. On a 404 Not Found or 410 Gone, it stops retrying and calls a handler you register. If the delivery went to a shared inbox, you also get the list of followers behind it, so you can prune vanished accounts on the spot. Hosts that fail repeatedly trip a per-host circuit breaker that holds deliveries and probes periodically until the host recovers. It's on by default; there's nothing to configure.

Scene 4, revisited: we track the quirks so you don't

Here is how Fedify disarms the traps from scene 4:

  • Authorized fetch: chain .authorize() onto a dispatcher and the verified identity of the requester lands in your callback. Blocklists, private collections, whatever your app needs is plain application logic. The instance-actor deadlock has a supported pattern as well.
  • Threads and inline actors: an activity transformer, enabled by default, rewrites inline actors into URIs on the way out. You don't need to know Threads has this problem.
  • Lemmy's requirements: the custom collection API exposes a moderators collection in a few lines, and Lemmy's JSON-LD context ships preloaded.

When a new quirk surfaces in the wild, the fix lands in Fedify, not in every application separately. Each interoperability lesson gets learned once.

Scene 5, revisited: becoming unsafe takes effort

Fedify's defaults point the other way.

  • Signature verification is something you turn off (for tests), not something you remember to turn on.
  • The document loader refuses private address ranges and loopback out of the box, with DNS rebinding accounted for. To open yourself up to SSRF you have to flip an option whose very name announces it's for testing.
  • When an embedded object's origin differs from its parent document's, the accessor refuses to trust it and re-fetches from the source (based on FEP-fe34). Content spoofing is stopped at the property access level.

In a from-scratch implementation, you have to keep remembering to do things safely. In Fedify, the unsafe path is the one that takes deliberate effort. For a federated server, with its tangle of trust boundaries, that's the right way around.

Your stack stays your stack

โ€œFine, but what if it doesn't fit our stack?โ€ Fedify was built to fit the stack you already have. There are thirteen web framework integrations: servers like Express, Hono, Fastify, Koa, NestJS, and Elysia, and meta-frameworks like Next.js, Nuxt, SvelteKit, Astro, SolidStart, and Fresh. Middleware handles content negotiation, so the same URL in your existing app serves HTML to browsers and JSON-LD to the fediverse.

Fedify doesn't dictate your database either. For its own storage it asks for one keyโ€“value interface, with seven adapters available (Redis, PostgreSQL, MySQL/MariaDB, SQLite, Deno KV, Cloudflare Workers KV, in-memory). Message queues come in eight flavors (PostgreSQL, Redis, AMQP/RabbitMQ, and so on), and you can implement the interface yourself if none fits. Your domain data stays in whatever database and ORM you already use.

Already running federation on another library? There are migration guides with data migration scripts for moving from activitypub-express and friends without losing your existing followers.

The core isn't the ceiling, either. Higher-level packages build on it: @fedify/relay gives you a complete ActivityPub relay server in a single function call, and @fedify/backfill reconstructs incomplete conversation threads by walking the rest of the fediverse for you.

Tools for the whole development loop

A quieter misery of federated development has always been the missing tooling. Fedify comes with tools for every stage of the loop.

fedify init scaffolds a project in one line, and fedify tunnel exposes your local server over HTTPS so you can test against real Mastodon. Activities your server sends can be received by fedify inbox, a disposable inbox server spun up on the spot; whatever other servers publish, you can inspect with fedify lookup. My personal favorite is fedify lookup --authorized-fetch, which generates a one-off key pair and stands up a temporary ActivityPub server just to make a signed request for an object behind secure mode. The CLI is also useful to ActivityPub developers who don't use Fedify at all.

While you write code, an ActivityPub-specific linter (@fedify/lint) catches twenty kinds of interoperability bugs, like an actor missing its inbox. Tests run without the network using mocks from @fedify/testing. Once the server is up, attach the debug dashboard (@fedify/debugger) with one line and watch activities and signature verification results in your browser, live. In production there's built-in OpenTelemetry instrumentation (28 span types, 37 metrics) plus a monitoring guide, and when performance matters, fedify bench, a load-testing tool built for ActivityPub, catches regressions in CI.

As far as I know, no other ActivityPub framework ships even one of the tools in this section.

The documentation is part of the tooling. The official docs run to a thirty-chapter manual and five tutorials, and they go well past API listings. There's an operations chapter with ready-made PromQL queries and alerting rules for watching your queue backlog, and a field-guide chapter that documents de facto conventions, like which property makes your avatar show up in Mastodon, with screenshots. At two in the morning, when federation is broken and you don't know why, this is the difference between a bad night and a short one.

It's already running

Fedify is not a thought experiment. Ghost's ActivityPub service, mentioned above, is built on it. So are Encyclia, which bridges ORCID researcher records into the fediverse; SiliconBeest, running serverless on Cloudflare Workers; Typo Blue, a Korean blogging platform; Hollo, my own single-user microblogging platform; and Hackers' Pub, run by its community. Hollo, by the way, is the app from the beginning of this post: the project I once had to shelve, finished at last on the framework it forced into existence.

The tutorials give a concrete sense of scale. They walk you from a single-file server, a few dozen lines, that Mastodon can follow, through an image sharing service in roughly 750 lines that fully interoperates with Pixelfed (follows, likes, comments), up to a community platform federating both ways with the real lemmy.ml.

The fediverse needs more apps

I didn't build Fedify to mint more ActivityPub experts. Rather the opposite. I believe the fediverse will only grow beyond microblogging when developers can build federated apps without knowing ActivityPub's fine print. Signature spec transitions and JSON-LD compaction are problems that belong inside a framework, not barriers in front of someone with a new idea.

Starting takes one line:

npm init @fedify

Follow the first tutorial and by the end, Mastodon can find your server. If you get stuck, come find us in the Matrix room or GitHub Discussions. See you in the fediverse.

github.com

fedify-dev/fedify ยท Discussions

Explore the GitHub Discussions forum for fedify-dev fedify. Discuss code, ask questions & collaborate with the developer community.

@ViP@mastodon.social

I'm doing some experiments with different self hosted software, creating accounts for the Fediverse/ActivityPub, like the Wordpress Plugin, Writefreely, GoToSocial and the like. Is there a way to properly delete those accounts when I don't need them anymore? I don't want to leave them orphaned.

@res260@infosec.exchange

RE: hackers.pub/@fedify/2026/why-a

Great post, I suggest to anyone interested in the ActivityPub spec and technical architecture to read it. I had no idea the tool echosystem had this many problems, and Fedify handles a lot of them for you!

hackers.pub

Why implementing ActivityPub is hard, and why it doesn't have to be

Implementing the ActivityPub protocol from scratch introduces massive technical hurdles, including fragmented signature standards, unpredictable JSON-LD document variations, complex distributed systems engineering, and critical security vulnerabilities. Developers frequently encounter silent failures like out-of-order message deliveries that cause permanently orphaned posts, undocumented platform-specific interoperability quirks, and exposure to server-side request forgery. Fedify, a TypeScript framework compatible with Deno, Node.js, and Bun, abstracts these exhausting complexities by automating multi-spec HTTP signatures, normalizing highly variable document shapes into typed immutable classes, and offering robust queue management with guaranteed ordered delivery. By handling the delicate details of federation, including secure-by-default network routing and extensive developer tooling, the library allows creators to focus on building actual products. This post demonstrates how shifting the burden of low-level protocol compliance to a specialized framework enables developers to build secure, highly interoperable federated applications with minimal effort.

This quote was not authorized by the quoted post's author.

@dansup@mastodon.social

When X, Meta and TikTok relaxed their rules on hate speech, racism and transphobia, they didn't undermine the open social web.

They proved why this needs to exist.

Safety and mental health come first here. They're the foundation everything else stands on.

Not optional. Not negotiable. The vulnerable come first, always.

I have a roadmap to improve this, and I'll soon be asking for your feedback to make these spaces safer for the people who need them most.

@ViP@mastodon.social

I'm doing some experiments with different self hosted software, creating accounts for the Fediverse/ActivityPub, like the Wordpress Plugin, Writefreely, GoToSocial and the like. Is there a way to properly delete those accounts when I don't need them anymore? I don't want to leave them orphaned.

@smallcircles@social.coop ยท Reply to Bram Moreinis

@bmoreinis @skyfaller @evan

The story of migration is reasonably okay esp. for masto-to-masto. Microblog content is relatively ephemeral, and its not too bad to leave your old content behind.

I left a sizable account @humanetech@mastodon.social behind, built around Humane Technology advocacy, which I later completely erased from that server. I also once erased the history of this account, to demonstrate the ephemerality, and that we shouldn't use for valuable discussions we like an archive on, like development.

For different domains, such as video apps like , this is a different story, archiving more important. I recently found out that perhaps the ActivityPub Conference 2020 videos have been lost, where instance conf.tube redirects to @fossnorth channel at peertube.anduin.net/c/fossnort

No one is responding thus far. It's unclear who owned APConf channel at the time, who runs the new instance, and who runs .

social.coop/@smallcircles/1168

social.coop

๐Ÿซง Social coding commons (@smallcircles@social.coop)

Are the #ActivityPub Conference 2020 videos still available online? https://socialhub.activitypub.rocks/t/apconf-2020-videos-no-longer-available-on-peertube/8799 https://social.coop/@smallcircles/116839146093069053

@dansup@mastodon.social

When X, Meta and TikTok relaxed their rules on hate speech, racism and transphobia, they didn't undermine the open social web.

They proved why this needs to exist.

Safety and mental health come first here. They're the foundation everything else stands on.

Not optional. Not negotiable. The vulnerable come first, always.

I have a roadmap to improve this, and I'll soon be asking for your feedback to make these spaces safer for the people who need them most.

@smallcircles@social.coop ยท Reply to Bram Moreinis

@bmoreinis @skyfaller @evan

The story of migration is reasonably okay esp. for masto-to-masto. Microblog content is relatively ephemeral, and its not too bad to leave your old content behind.

I left a sizable account @humanetech@mastodon.social behind, built around Humane Technology advocacy, which I later completely erased from that server. I also once erased the history of this account, to demonstrate the ephemerality, and that we shouldn't use for valuable discussions we like an archive on, like development.

For different domains, such as video apps like , this is a different story, archiving more important. I recently found out that perhaps the ActivityPub Conference 2020 videos have been lost, where instance conf.tube redirects to @fossnorth channel at peertube.anduin.net/c/fossnort

No one is responding thus far. It's unclear who owned APConf channel at the time, who runs the new instance, and who runs .

social.coop/@smallcircles/1168

social.coop

๐Ÿซง Social coding commons (@smallcircles@social.coop)

Are the #ActivityPub Conference 2020 videos still available online? https://socialhub.activitypub.rocks/t/apconf-2020-videos-no-longer-available-on-peertube/8799 https://social.coop/@smallcircles/116839146093069053

@evan@cosocial.ca ยท Reply to Evan Prodromou

One thing that people who don't write software might not know is that Mastodon has remarkably low rate limits for other servers to make requests -- getting data from or sending data to a Mastodon server. The rate limits are hard-coded in the Mastodon software, and they're for the whole server. mastodon.social has the same rate limits as your server on a Raspberry Pi. That means that the server that you need to access about 1/4 of the time is throttling everyone's access to it.

@mattcen@aus.social

So (metadata for images and other media) defines fields for ImageDescription and UserComment (timestampcamera.net/photo-guid), both of which could theoretically contain image Alt Text. I wonder if any social media apps (clients for Mastodon of other or services, for example) read and use Alt Text from EXIF on upload, or preserve the metadata in the file if you re-save it. Seems like a relatively obvious and useful feature.

timestampcamera.net

EXIF Tag Reference: Every Field, What It Means, How to Edit It

Comprehensive reference of every common EXIF tag: camera tags, date tags, GPS, lens, exposure, IPTC, XMP. With editing tips and a glossary.

@evan@cosocial.ca ยท Reply to Evan Prodromou

One thing that people who don't write software might not know is that Mastodon has remarkably low rate limits for other servers to make requests -- getting data from or sending data to a Mastodon server. The rate limits are hard-coded in the Mastodon software, and they're for the whole server. mastodon.social has the same rate limits as your server on a Raspberry Pi. That means that the server that you need to access about 1/4 of the time is throttling everyone's access to it.

@weekinfediverse@mitra.social
@weekinfediverse@mitra.social
@mattcen@aus.social

So (metadata for images and other media) defines fields for ImageDescription and UserComment (timestampcamera.net/photo-guid), both of which could theoretically contain image Alt Text. I wonder if any social media apps (clients for Mastodon of other or services, for example) read and use Alt Text from EXIF on upload, or preserve the metadata in the file if you re-save it. Seems like a relatively obvious and useful feature.

timestampcamera.net

EXIF Tag Reference: Every Field, What It Means, How to Edit It

Comprehensive reference of every common EXIF tag: camera tags, date tags, GPS, lens, exposure, IPTC, XMP. With editing tips and a glossary.

@weekinfediverse@mitra.social
@weekinfediverse@mitra.social
@stefan@stefanbohacek.online

This is a really great, technical overview of how the fediverse works behind the scenes. And really makes you appreciate that it works at all.

Massive props to @hongminhee for this write-up and all their work, and those of others that make fediverse possible.

hackers.pub

Why implementing ActivityPub is hard, and why it doesn't have to be

Implementing the ActivityPub protocol from scratch introduces massive technical hurdles, including fragmented signature standards, unpredictable JSON-LD document variations, complex distributed systems engineering, and critical security vulnerabilities. Developers frequently encounter silent failures like out-of-order message deliveries that cause permanently orphaned posts, undocumented platform-specific interoperability quirks, and exposure to server-side request forgery. Fedify, a TypeScript framework compatible with Deno, Node.js, and Bun, abstracts these exhausting complexities by automating multi-spec HTTP signatures, normalizing highly variable document shapes into typed immutable classes, and offering robust queue management with guaranteed ordered delivery. By handling the delicate details of federation, including secure-by-default network routing and extensive developer tooling, the library allows creators to focus on building actual products. This post demonstrates how shifting the burden of low-level protocol compliance to a specialized framework enables developers to build secure, highly interoperable federated applications with minimal effort.

@fedify@hackers.pub

A quiet failure

Picture the moment your server sends its first Follow activity to Mastodon. You read the spec, built the JSON, signed the HTTP request, and POSTed it with care. What comes back is a single line: 401 Unauthorized. No body. No explanation.

What went wrong? Maybe the clock behind your Date header drifted a few minutes. Maybe the hash in your Digest header is off. Maybe you uppercased the (request-target) pseudo-header while building the signing string, or published your public key as PEM where the other side wanted multibase. The remote server won't tell you. So you start reading someone else's server code to debug your own.

I know, because I've been there. Fedify began as a casualty of another project. I set out to build a single-user microblogging server, the one that would later become Hollo, and started implementing ActivityPub from scratch. Somewhere between the signature specs and the JSON-LD, the protocol work swallowed the product, and I put the whole thing down. What I picked back up wasn't the app. It was the framework the app should have had. Fedify shipped first; only then could Hollo exist, built on top of it. (I've told this story at more length in A year with the fediverse.)

ActivityPub development gets hard in a few very specific places. In this post I want to walk through five of them, then show what each one looks like with Fedify. If you've spent time in the fediverse, you'll probably nod along. If you haven't, you may wonder why anyone would do all of this by hand. Either way, the conclusion is the same: nobody has to anymore.

Five scenes

Scene 1: there is more than one standard

ActivityPub servers authenticate each other with HTTP signatures. Except there isn't one signature spec. Most of the fediverse runs on draft-cavage-http-signatures-12, an expired draft that never became a standard. The actual standard exists too: RFC 9421, HTTP Message Signatures. The problem is that you can't know which one a given server accepts until you try.

A real-world implementation therefore has to sign with one spec, see whether it gets rejected, re-sign with the other, and remember per server which one worked so it can skip the dance next time. The fediverse calls this double-knocking. Yes, you get to implement it yourself.

That's still not the end. HTTP signatures only prove who sent a request. For situations like inbox forwarding, where you relay an activity you received to a third party, you need signatures that live on the document itself: Linked Data Signatures and Object Integrity Proofs. Four signature mechanisms in total, and two kinds of keys to manage: RSA and Ed25519.

Scene 2: one document, many shapes

ActivityPub's wire format is JSON-LD, and in JSON-LD the same document can take many shapes. This is easier to show than to explain. Here is a Create activity one server might send:

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "type": "Create",
  "actor": "https://example.com/users/alice",
  "to": "https://www.w3.org/ns/activitystreams#Public",
  "object": {
    "type": "Note",
    "id": "https://example.com/notes/123",
    "content": "Hello, fediverse!"
  }
}

And here is a semantically identical activity from another server:

{
  "@context": ["https://www.w3.org/ns/activitystreams"],
  "type": "Create",
  "actor": {
    "type": "Person",
    "id": "https://example.com/users/alice",
    "preferredUsername": "alice"
  },
  "to": ["as:Public"],
  "object": "https://example.com/notes/123"
}

actor turned from a URI string into an inline object. to turned from a string into an array. object went the other way, from an inline object to a URI. Even the address that means โ€œpublicโ€ has three valid spellings: https://www.w3.org/ns/activitystreams#Public, as:Public, and plain Public. Your parser has to accept every combination, and which one arrives depends on the sender's implementation.

The spec-compliant answer is to normalize every document with a JSON-LD processor, expansion followed by compaction. In practice many implementations treat it all as โ€œjust JSONโ€ and quietly break on whatever shape some server happens to emit. Either way, you end up with defensive code smeared across the whole codebase: is this a string? An array? An object? A URI I have to fetch?

Scene 3: the zombie post

A user publishes a post, spots a typo, and deletes it right away. Your server sends a Create, then a Delete. Thanks to network weather, some receiving server gets the Delete first and the Create second. It ignores the deletion of a post that doesn't exist yet, then dutifully processes the creation of a post that was already deleted. That post now lives on that server forever, while its author believes it's gone.

Then there's scale. With five thousand followers, one post means thousands of HTTP deliveries. Do that inline in the request handler and your publish button takes half a minute to respond, or the server falls over. Fine, use a queue. Deliveries fail, so retry them. On what schedule? Exponential backoff. How many times? And is a 500 Internal Server Error the same kind of failure as a 410 Gone? When do you clean up three thousand followers on a server that no longer exists? Should you keep hammering a host that has been down for days?

At some point it dawns on you that this is no longer protocol implementation. It's distributed systems engineering.

Scene 4: it's not a spec, it's an ecosystem

Even perfect spec compliance doesn't buy you interoperability. A few examples from the field:

  • Mastodon's secure mode requires HTTP signatures on GET requests too (so-called authorized fetch). Now suppose both servers run in that mode. To fetch the other side's public key you must sign your request; to verify your signature, the other side must first fetch your key. Deadlock. The community's workaround is to sign with an โ€œinstance actorโ€ that represents the server itself. You won't find that in the spec.
  • Threads can't parse activities whose actor is embedded as an inline object. When sending to Threads, the actor has to be a URI.
  • Lemmy silently rejects Group actors that lack fields Mastodon never asks for, such as a moderators collection linked via attributedTo and a featured collection.
  • Misskey carries vocabulary extensions of its own; quote posts alone go by three different property names across implementations.

The list keeps growing. Interoperability here is not something you finish once and stop thinking about. It's maintenance, forever.

Scene 5: insecure by default

Build it from scratch, and you start out wide open. Skip signature verification on incoming activities and anyone can inject a forged Follow or Delete. Leave the document loader unrestricted and a malicious activity can point it at http://169.254.169.254/ or your internal network, turning your server into an SSRF proxy. Skip origin checks on embedded objects and any server can hand out a document claiming โ€œhere's what the Mastodon lead developer said.โ€

What these traps share is that nothing happens when you fall into them. Everything appears to work. Until someone exploits it.

Ghost ran into this too

If you're thinking โ€œsurely our team would manage,โ€ consider Ghost: a leading open-source publishing platform used by thousands of journalists and creators, and a team that set out to build its own ActivityPub support.

We can definitely attest to the problems that Fedify is working hard to solve, because even in just a few weeks of early prototyping we were running into the issues described above right away.

From Alright, let's Fedify

Ghost ended up building its ActivityPub layer on Fedify.

So I put all of it in a framework

Fedify is a TypeScript library for building federated server apps on ActivityPub and the standards around it. It runs on Deno, Node.js, and Bun, and supports edge runtimes like Cloudflare Workers. The design goal hasn't changed since the beginning: keep everything in those five scenes out of application code.

Here are the same five scenes again, this time with Fedify.

Scene 1, revisited: the signature war is the framework's job

Here is everything it takes to put one actor on the fediverse:

import { createFederation, generateCryptoKeyPair, MemoryKvStore } from "@fedify/fedify";
import { Endpoints, Person } from "@fedify/vocab";

const federation = createFederation<void>({
  kv: new MemoryKvStore(),  // Swap for Redis, PostgreSQL, etc. in production
});

federation
  .setActorDispatcher("/users/{identifier}", async (ctx, identifier) => {
    if (identifier !== "alice") return null;
    const keyPairs = await ctx.getActorKeyPairs(identifier);
    return new Person({
      id: ctx.getActorUri(identifier),
      preferredUsername: identifier,
      name: "Alice",
      inbox: ctx.getInboxUri(identifier),
      endpoints: new Endpoints({ sharedInbox: ctx.getInboxUri() }),
      publicKey: keyPairs[0].cryptographicKey,
      assertionMethods: keyPairs.map((keyPair) => keyPair.multikey),
    });
  })
  .setKeyPairsDispatcher(async (ctx, identifier) => {
    // In real code you'd persist these in a database; this shows the gist
    return [await generateCryptoKeyPair()];
  });

The moment this code runs:

  • Every outgoing request gets signed. With an RSA key, Fedify emits HTTP Signatures and Linked Data Signatures; add an Ed25519 key and it attaches Object Integrity Proofs as well. All four mechanisms coexist on a single activity, and each receiver verifies with the strongest one it understands.
  • Fedify does the double-knocking for you: first contact goes out as RFC 9421, a rejection triggers a draft-cavage retry, and the winning spec is cached per server. If the rejection carries an Accept-Signature challenge (RFC 9421 ยง5), Fedify reads it and re-signs with exactly the components the server asked for.
  • Incoming signatures are verified before your code sees anything. An activity that fails verification never reaches your listeners.
  • One bonus. Because you registered an actor dispatcher, you now have a WebFinger (RFC 7033) server, for free. Type @alice@example.com into Mastodon's search box and your actor comes up. You never wrote a line of WebFinger code.

Scene 2, revisited: types instead of JSON-LD

Fedify ships about eighty classes covering the whole Activity Vocabulary plus the major vendor extensions. The classes are typed and immutable, and their accessors absorb the shape differences that JSON-LD allows.

const actor = await ctx.lookupObject("@hongminhee@hollo.social");
if (actor instanceof Person) {
  console.log(actor.name);           // Safe whether it's a string or langString
  const followers = await actor.getFollowers();  // Fetches a URI, unwraps an object
}

lookupObject() takes a handle and runs the whole chain for you, WebFinger discovery included. Accessors like getFollowers() behave the same way whether the value is a URI reference or an inline object, and fetched values are cached.

Vendor fragmentation gets stitched up here too. The three competing quote properties (quoteUri, _misskey_quote, quoteUrl) are unified behind one API, next to the emerging FEP-044f quote. Misskey's isCat property exists as a type, so your server can determine cat-ness with full type safety. It sounds like a joke, but a few dozen details of exactly this kind are what interoperability is actually made of.

Scene 3, revisited: the zombie post dies in one line

Delivery infrastructure first. Plug a message queue into createFederation() and delivery moves to the background, with automatic retries under exponential backoff (up to ten attempts by default). When a post goes to thousands of followers, two-stage fan-out kicks in: a single consolidated message enters the queue, and a background worker splits it into per-server delivery tasks. The publish button responds immediately.

Retries create a problem of their own: the same activity can arrive twice. Fedify keeps a 24-hour idempotence cache of processed activities, so duplicates get detected and skipped before they reach your handlers.

As for the zombie post, the fix is one option:

await ctx.sendActivity(
  { identifier: "alice" },
  "followers",           // Collects recipients from your followers collection
  deleteActivity,
  { orderingKey: post.id },  // Same key = in-order delivery per server
);

Activities that share an orderingKey are delivered to each receiving server in the order they were sent. A Delete can no longer overtake its Create. Activities with different keys still go out in parallel, so throughput survives.

Fedify also handles dead servers. On a 404 Not Found or 410 Gone, it stops retrying and calls a handler you register. If the delivery went to a shared inbox, you also get the list of followers behind it, so you can prune vanished accounts on the spot. Hosts that fail repeatedly trip a per-host circuit breaker that holds deliveries and probes periodically until the host recovers. It's on by default; there's nothing to configure.

Scene 4, revisited: we track the quirks so you don't

Here is how Fedify disarms the traps from scene 4:

  • Authorized fetch: chain .authorize() onto a dispatcher and the verified identity of the requester lands in your callback. Blocklists, private collections, whatever your app needs is plain application logic. The instance-actor deadlock has a supported pattern as well.
  • Threads and inline actors: an activity transformer, enabled by default, rewrites inline actors into URIs on the way out. You don't need to know Threads has this problem.
  • Lemmy's requirements: the custom collection API exposes a moderators collection in a few lines, and Lemmy's JSON-LD context ships preloaded.

When a new quirk surfaces in the wild, the fix lands in Fedify, not in every application separately. Each interoperability lesson gets learned once.

Scene 5, revisited: becoming unsafe takes effort

Fedify's defaults point the other way.

  • Signature verification is something you turn off (for tests), not something you remember to turn on.
  • The document loader refuses private address ranges and loopback out of the box, with DNS rebinding accounted for. To open yourself up to SSRF you have to flip an option whose very name announces it's for testing.
  • When an embedded object's origin differs from its parent document's, the accessor refuses to trust it and re-fetches from the source (based on FEP-fe34). Content spoofing is stopped at the property access level.

In a from-scratch implementation, you have to keep remembering to do things safely. In Fedify, the unsafe path is the one that takes deliberate effort. For a federated server, with its tangle of trust boundaries, that's the right way around.

Your stack stays your stack

โ€œFine, but what if it doesn't fit our stack?โ€ Fedify was built to fit the stack you already have. There are thirteen web framework integrations: servers like Express, Hono, Fastify, Koa, NestJS, and Elysia, and meta-frameworks like Next.js, Nuxt, SvelteKit, Astro, SolidStart, and Fresh. Middleware handles content negotiation, so the same URL in your existing app serves HTML to browsers and JSON-LD to the fediverse.

Fedify doesn't dictate your database either. For its own storage it asks for one keyโ€“value interface, with seven adapters available (Redis, PostgreSQL, MySQL/MariaDB, SQLite, Deno KV, Cloudflare Workers KV, in-memory). Message queues come in eight flavors (PostgreSQL, Redis, AMQP/RabbitMQ, and so on), and you can implement the interface yourself if none fits. Your domain data stays in whatever database and ORM you already use.

Already running federation on another library? There are migration guides with data migration scripts for moving from activitypub-express and friends without losing your existing followers.

The core isn't the ceiling, either. Higher-level packages build on it: @fedify/relay gives you a complete ActivityPub relay server in a single function call, and @fedify/backfill reconstructs incomplete conversation threads by walking the rest of the fediverse for you.

Tools for the whole development loop

A quieter misery of federated development has always been the missing tooling. Fedify comes with tools for every stage of the loop.

fedify init scaffolds a project in one line, and fedify tunnel exposes your local server over HTTPS so you can test against real Mastodon. Activities your server sends can be received by fedify inbox, a disposable inbox server spun up on the spot; whatever other servers publish, you can inspect with fedify lookup. My personal favorite is fedify lookup --authorized-fetch, which generates a one-off key pair and stands up a temporary ActivityPub server just to make a signed request for an object behind secure mode. The CLI is also useful to ActivityPub developers who don't use Fedify at all.

While you write code, an ActivityPub-specific linter (@fedify/lint) catches twenty kinds of interoperability bugs, like an actor missing its inbox. Tests run without the network using mocks from @fedify/testing. Once the server is up, attach the debug dashboard (@fedify/debugger) with one line and watch activities and signature verification results in your browser, live. In production there's built-in OpenTelemetry instrumentation (28 span types, 37 metrics) plus a monitoring guide, and when performance matters, fedify bench, a load-testing tool built for ActivityPub, catches regressions in CI.

As far as I know, no other ActivityPub framework ships even one of the tools in this section.

The documentation is part of the tooling. The official docs run to a thirty-chapter manual and five tutorials, and they go well past API listings. There's an operations chapter with ready-made PromQL queries and alerting rules for watching your queue backlog, and a field-guide chapter that documents de facto conventions, like which property makes your avatar show up in Mastodon, with screenshots. At two in the morning, when federation is broken and you don't know why, this is the difference between a bad night and a short one.

It's already running

Fedify is not a thought experiment. Ghost's ActivityPub service, mentioned above, is built on it. So are Encyclia, which bridges ORCID researcher records into the fediverse; SiliconBeest, running serverless on Cloudflare Workers; Typo Blue, a Korean blogging platform; Hollo, my own single-user microblogging platform; and Hackers' Pub, run by its community. Hollo, by the way, is the app from the beginning of this post: the project I once had to shelve, finished at last on the framework it forced into existence.

The tutorials give a concrete sense of scale. They walk you from a single-file server, a few dozen lines, that Mastodon can follow, through an image sharing service in roughly 750 lines that fully interoperates with Pixelfed (follows, likes, comments), up to a community platform federating both ways with the real lemmy.ml.

The fediverse needs more apps

I didn't build Fedify to mint more ActivityPub experts. Rather the opposite. I believe the fediverse will only grow beyond microblogging when developers can build federated apps without knowing ActivityPub's fine print. Signature spec transitions and JSON-LD compaction are problems that belong inside a framework, not barriers in front of someone with a new idea.

Starting takes one line:

npm init @fedify

Follow the first tutorial and by the end, Mastodon can find your server. If you get stuck, come find us in the Matrix room or GitHub Discussions. See you in the fediverse.

github.com

fedify-dev/fedify ยท Discussions

Explore the GitHub Discussions forum for fedify-dev fedify. Discuss code, ask questions & collaborate with the developer community.

@stefan@stefanbohacek.online

This is a really great, technical overview of how the fediverse works behind the scenes. And really makes you appreciate that it works at all.

Massive props to @hongminhee for this write-up and all their work, and those of others that make fediverse possible.

hackers.pub

Why implementing ActivityPub is hard, and why it doesn't have to be

Implementing the ActivityPub protocol from scratch introduces massive technical hurdles, including fragmented signature standards, unpredictable JSON-LD document variations, complex distributed systems engineering, and critical security vulnerabilities. Developers frequently encounter silent failures like out-of-order message deliveries that cause permanently orphaned posts, undocumented platform-specific interoperability quirks, and exposure to server-side request forgery. Fedify, a TypeScript framework compatible with Deno, Node.js, and Bun, abstracts these exhausting complexities by automating multi-spec HTTP signatures, normalizing highly variable document shapes into typed immutable classes, and offering robust queue management with guaranteed ordered delivery. By handling the delicate details of federation, including secure-by-default network routing and extensive developer tooling, the library allows creators to focus on building actual products. This post demonstrates how shifting the burden of low-level protocol compliance to a specialized framework enables developers to build secure, highly interoperable federated applications with minimal effort.

@fedify@hackers.pub

A quiet failure

Picture the moment your server sends its first Follow activity to Mastodon. You read the spec, built the JSON, signed the HTTP request, and POSTed it with care. What comes back is a single line: 401 Unauthorized. No body. No explanation.

What went wrong? Maybe the clock behind your Date header drifted a few minutes. Maybe the hash in your Digest header is off. Maybe you uppercased the (request-target) pseudo-header while building the signing string, or published your public key as PEM where the other side wanted multibase. The remote server won't tell you. So you start reading someone else's server code to debug your own.

I know, because I've been there. Fedify began as a casualty of another project. I set out to build a single-user microblogging server, the one that would later become Hollo, and started implementing ActivityPub from scratch. Somewhere between the signature specs and the JSON-LD, the protocol work swallowed the product, and I put the whole thing down. What I picked back up wasn't the app. It was the framework the app should have had. Fedify shipped first; only then could Hollo exist, built on top of it. (I've told this story at more length in A year with the fediverse.)

ActivityPub development gets hard in a few very specific places. In this post I want to walk through five of them, then show what each one looks like with Fedify. If you've spent time in the fediverse, you'll probably nod along. If you haven't, you may wonder why anyone would do all of this by hand. Either way, the conclusion is the same: nobody has to anymore.

Five scenes

Scene 1: there is more than one standard

ActivityPub servers authenticate each other with HTTP signatures. Except there isn't one signature spec. Most of the fediverse runs on draft-cavage-http-signatures-12, an expired draft that never became a standard. The actual standard exists too: RFC 9421, HTTP Message Signatures. The problem is that you can't know which one a given server accepts until you try.

A real-world implementation therefore has to sign with one spec, see whether it gets rejected, re-sign with the other, and remember per server which one worked so it can skip the dance next time. The fediverse calls this double-knocking. Yes, you get to implement it yourself.

That's still not the end. HTTP signatures only prove who sent a request. For situations like inbox forwarding, where you relay an activity you received to a third party, you need signatures that live on the document itself: Linked Data Signatures and Object Integrity Proofs. Four signature mechanisms in total, and two kinds of keys to manage: RSA and Ed25519.

Scene 2: one document, many shapes

ActivityPub's wire format is JSON-LD, and in JSON-LD the same document can take many shapes. This is easier to show than to explain. Here is a Create activity one server might send:

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "type": "Create",
  "actor": "https://example.com/users/alice",
  "to": "https://www.w3.org/ns/activitystreams#Public",
  "object": {
    "type": "Note",
    "id": "https://example.com/notes/123",
    "content": "Hello, fediverse!"
  }
}

And here is a semantically identical activity from another server:

{
  "@context": ["https://www.w3.org/ns/activitystreams"],
  "type": "Create",
  "actor": {
    "type": "Person",
    "id": "https://example.com/users/alice",
    "preferredUsername": "alice"
  },
  "to": ["as:Public"],
  "object": "https://example.com/notes/123"
}

actor turned from a URI string into an inline object. to turned from a string into an array. object went the other way, from an inline object to a URI. Even the address that means โ€œpublicโ€ has three valid spellings: https://www.w3.org/ns/activitystreams#Public, as:Public, and plain Public. Your parser has to accept every combination, and which one arrives depends on the sender's implementation.

The spec-compliant answer is to normalize every document with a JSON-LD processor, expansion followed by compaction. In practice many implementations treat it all as โ€œjust JSONโ€ and quietly break on whatever shape some server happens to emit. Either way, you end up with defensive code smeared across the whole codebase: is this a string? An array? An object? A URI I have to fetch?

Scene 3: the zombie post

A user publishes a post, spots a typo, and deletes it right away. Your server sends a Create, then a Delete. Thanks to network weather, some receiving server gets the Delete first and the Create second. It ignores the deletion of a post that doesn't exist yet, then dutifully processes the creation of a post that was already deleted. That post now lives on that server forever, while its author believes it's gone.

Then there's scale. With five thousand followers, one post means thousands of HTTP deliveries. Do that inline in the request handler and your publish button takes half a minute to respond, or the server falls over. Fine, use a queue. Deliveries fail, so retry them. On what schedule? Exponential backoff. How many times? And is a 500 Internal Server Error the same kind of failure as a 410 Gone? When do you clean up three thousand followers on a server that no longer exists? Should you keep hammering a host that has been down for days?

At some point it dawns on you that this is no longer protocol implementation. It's distributed systems engineering.

Scene 4: it's not a spec, it's an ecosystem

Even perfect spec compliance doesn't buy you interoperability. A few examples from the field:

  • Mastodon's secure mode requires HTTP signatures on GET requests too (so-called authorized fetch). Now suppose both servers run in that mode. To fetch the other side's public key you must sign your request; to verify your signature, the other side must first fetch your key. Deadlock. The community's workaround is to sign with an โ€œinstance actorโ€ that represents the server itself. You won't find that in the spec.
  • Threads can't parse activities whose actor is embedded as an inline object. When sending to Threads, the actor has to be a URI.
  • Lemmy silently rejects Group actors that lack fields Mastodon never asks for, such as a moderators collection linked via attributedTo and a featured collection.
  • Misskey carries vocabulary extensions of its own; quote posts alone go by three different property names across implementations.

The list keeps growing. Interoperability here is not something you finish once and stop thinking about. It's maintenance, forever.

Scene 5: insecure by default

Build it from scratch, and you start out wide open. Skip signature verification on incoming activities and anyone can inject a forged Follow or Delete. Leave the document loader unrestricted and a malicious activity can point it at http://169.254.169.254/ or your internal network, turning your server into an SSRF proxy. Skip origin checks on embedded objects and any server can hand out a document claiming โ€œhere's what the Mastodon lead developer said.โ€

What these traps share is that nothing happens when you fall into them. Everything appears to work. Until someone exploits it.

Ghost ran into this too

If you're thinking โ€œsurely our team would manage,โ€ consider Ghost: a leading open-source publishing platform used by thousands of journalists and creators, and a team that set out to build its own ActivityPub support.

We can definitely attest to the problems that Fedify is working hard to solve, because even in just a few weeks of early prototyping we were running into the issues described above right away.

From Alright, let's Fedify

Ghost ended up building its ActivityPub layer on Fedify.

So I put all of it in a framework

Fedify is a TypeScript library for building federated server apps on ActivityPub and the standards around it. It runs on Deno, Node.js, and Bun, and supports edge runtimes like Cloudflare Workers. The design goal hasn't changed since the beginning: keep everything in those five scenes out of application code.

Here are the same five scenes again, this time with Fedify.

Scene 1, revisited: the signature war is the framework's job

Here is everything it takes to put one actor on the fediverse:

import { createFederation, generateCryptoKeyPair, MemoryKvStore } from "@fedify/fedify";
import { Endpoints, Person } from "@fedify/vocab";

const federation = createFederation<void>({
  kv: new MemoryKvStore(),  // Swap for Redis, PostgreSQL, etc. in production
});

federation
  .setActorDispatcher("/users/{identifier}", async (ctx, identifier) => {
    if (identifier !== "alice") return null;
    const keyPairs = await ctx.getActorKeyPairs(identifier);
    return new Person({
      id: ctx.getActorUri(identifier),
      preferredUsername: identifier,
      name: "Alice",
      inbox: ctx.getInboxUri(identifier),
      endpoints: new Endpoints({ sharedInbox: ctx.getInboxUri() }),
      publicKey: keyPairs[0].cryptographicKey,
      assertionMethods: keyPairs.map((keyPair) => keyPair.multikey),
    });
  })
  .setKeyPairsDispatcher(async (ctx, identifier) => {
    // In real code you'd persist these in a database; this shows the gist
    return [await generateCryptoKeyPair()];
  });

The moment this code runs:

  • Every outgoing request gets signed. With an RSA key, Fedify emits HTTP Signatures and Linked Data Signatures; add an Ed25519 key and it attaches Object Integrity Proofs as well. All four mechanisms coexist on a single activity, and each receiver verifies with the strongest one it understands.
  • Fedify does the double-knocking for you: first contact goes out as RFC 9421, a rejection triggers a draft-cavage retry, and the winning spec is cached per server. If the rejection carries an Accept-Signature challenge (RFC 9421 ยง5), Fedify reads it and re-signs with exactly the components the server asked for.
  • Incoming signatures are verified before your code sees anything. An activity that fails verification never reaches your listeners.
  • One bonus. Because you registered an actor dispatcher, you now have a WebFinger (RFC 7033) server, for free. Type @alice@example.com into Mastodon's search box and your actor comes up. You never wrote a line of WebFinger code.

Scene 2, revisited: types instead of JSON-LD

Fedify ships about eighty classes covering the whole Activity Vocabulary plus the major vendor extensions. The classes are typed and immutable, and their accessors absorb the shape differences that JSON-LD allows.

const actor = await ctx.lookupObject("@hongminhee@hollo.social");
if (actor instanceof Person) {
  console.log(actor.name);           // Safe whether it's a string or langString
  const followers = await actor.getFollowers();  // Fetches a URI, unwraps an object
}

lookupObject() takes a handle and runs the whole chain for you, WebFinger discovery included. Accessors like getFollowers() behave the same way whether the value is a URI reference or an inline object, and fetched values are cached.

Vendor fragmentation gets stitched up here too. The three competing quote properties (quoteUri, _misskey_quote, quoteUrl) are unified behind one API, next to the emerging FEP-044f quote. Misskey's isCat property exists as a type, so your server can determine cat-ness with full type safety. It sounds like a joke, but a few dozen details of exactly this kind are what interoperability is actually made of.

Scene 3, revisited: the zombie post dies in one line

Delivery infrastructure first. Plug a message queue into createFederation() and delivery moves to the background, with automatic retries under exponential backoff (up to ten attempts by default). When a post goes to thousands of followers, two-stage fan-out kicks in: a single consolidated message enters the queue, and a background worker splits it into per-server delivery tasks. The publish button responds immediately.

Retries create a problem of their own: the same activity can arrive twice. Fedify keeps a 24-hour idempotence cache of processed activities, so duplicates get detected and skipped before they reach your handlers.

As for the zombie post, the fix is one option:

await ctx.sendActivity(
  { identifier: "alice" },
  "followers",           // Collects recipients from your followers collection
  deleteActivity,
  { orderingKey: post.id },  // Same key = in-order delivery per server
);

Activities that share an orderingKey are delivered to each receiving server in the order they were sent. A Delete can no longer overtake its Create. Activities with different keys still go out in parallel, so throughput survives.

Fedify also handles dead servers. On a 404 Not Found or 410 Gone, it stops retrying and calls a handler you register. If the delivery went to a shared inbox, you also get the list of followers behind it, so you can prune vanished accounts on the spot. Hosts that fail repeatedly trip a per-host circuit breaker that holds deliveries and probes periodically until the host recovers. It's on by default; there's nothing to configure.

Scene 4, revisited: we track the quirks so you don't

Here is how Fedify disarms the traps from scene 4:

  • Authorized fetch: chain .authorize() onto a dispatcher and the verified identity of the requester lands in your callback. Blocklists, private collections, whatever your app needs is plain application logic. The instance-actor deadlock has a supported pattern as well.
  • Threads and inline actors: an activity transformer, enabled by default, rewrites inline actors into URIs on the way out. You don't need to know Threads has this problem.
  • Lemmy's requirements: the custom collection API exposes a moderators collection in a few lines, and Lemmy's JSON-LD context ships preloaded.

When a new quirk surfaces in the wild, the fix lands in Fedify, not in every application separately. Each interoperability lesson gets learned once.

Scene 5, revisited: becoming unsafe takes effort

Fedify's defaults point the other way.

  • Signature verification is something you turn off (for tests), not something you remember to turn on.
  • The document loader refuses private address ranges and loopback out of the box, with DNS rebinding accounted for. To open yourself up to SSRF you have to flip an option whose very name announces it's for testing.
  • When an embedded object's origin differs from its parent document's, the accessor refuses to trust it and re-fetches from the source (based on FEP-fe34). Content spoofing is stopped at the property access level.

In a from-scratch implementation, you have to keep remembering to do things safely. In Fedify, the unsafe path is the one that takes deliberate effort. For a federated server, with its tangle of trust boundaries, that's the right way around.

Your stack stays your stack

โ€œFine, but what if it doesn't fit our stack?โ€ Fedify was built to fit the stack you already have. There are thirteen web framework integrations: servers like Express, Hono, Fastify, Koa, NestJS, and Elysia, and meta-frameworks like Next.js, Nuxt, SvelteKit, Astro, SolidStart, and Fresh. Middleware handles content negotiation, so the same URL in your existing app serves HTML to browsers and JSON-LD to the fediverse.

Fedify doesn't dictate your database either. For its own storage it asks for one keyโ€“value interface, with seven adapters available (Redis, PostgreSQL, MySQL/MariaDB, SQLite, Deno KV, Cloudflare Workers KV, in-memory). Message queues come in eight flavors (PostgreSQL, Redis, AMQP/RabbitMQ, and so on), and you can implement the interface yourself if none fits. Your domain data stays in whatever database and ORM you already use.

Already running federation on another library? There are migration guides with data migration scripts for moving from activitypub-express and friends without losing your existing followers.

The core isn't the ceiling, either. Higher-level packages build on it: @fedify/relay gives you a complete ActivityPub relay server in a single function call, and @fedify/backfill reconstructs incomplete conversation threads by walking the rest of the fediverse for you.

Tools for the whole development loop

A quieter misery of federated development has always been the missing tooling. Fedify comes with tools for every stage of the loop.

fedify init scaffolds a project in one line, and fedify tunnel exposes your local server over HTTPS so you can test against real Mastodon. Activities your server sends can be received by fedify inbox, a disposable inbox server spun up on the spot; whatever other servers publish, you can inspect with fedify lookup. My personal favorite is fedify lookup --authorized-fetch, which generates a one-off key pair and stands up a temporary ActivityPub server just to make a signed request for an object behind secure mode. The CLI is also useful to ActivityPub developers who don't use Fedify at all.

While you write code, an ActivityPub-specific linter (@fedify/lint) catches twenty kinds of interoperability bugs, like an actor missing its inbox. Tests run without the network using mocks from @fedify/testing. Once the server is up, attach the debug dashboard (@fedify/debugger) with one line and watch activities and signature verification results in your browser, live. In production there's built-in OpenTelemetry instrumentation (28 span types, 37 metrics) plus a monitoring guide, and when performance matters, fedify bench, a load-testing tool built for ActivityPub, catches regressions in CI.

As far as I know, no other ActivityPub framework ships even one of the tools in this section.

The documentation is part of the tooling. The official docs run to a thirty-chapter manual and five tutorials, and they go well past API listings. There's an operations chapter with ready-made PromQL queries and alerting rules for watching your queue backlog, and a field-guide chapter that documents de facto conventions, like which property makes your avatar show up in Mastodon, with screenshots. At two in the morning, when federation is broken and you don't know why, this is the difference between a bad night and a short one.

It's already running

Fedify is not a thought experiment. Ghost's ActivityPub service, mentioned above, is built on it. So are Encyclia, which bridges ORCID researcher records into the fediverse; SiliconBeest, running serverless on Cloudflare Workers; Typo Blue, a Korean blogging platform; Hollo, my own single-user microblogging platform; and Hackers' Pub, run by its community. Hollo, by the way, is the app from the beginning of this post: the project I once had to shelve, finished at last on the framework it forced into existence.

The tutorials give a concrete sense of scale. They walk you from a single-file server, a few dozen lines, that Mastodon can follow, through an image sharing service in roughly 750 lines that fully interoperates with Pixelfed (follows, likes, comments), up to a community platform federating both ways with the real lemmy.ml.

The fediverse needs more apps

I didn't build Fedify to mint more ActivityPub experts. Rather the opposite. I believe the fediverse will only grow beyond microblogging when developers can build federated apps without knowing ActivityPub's fine print. Signature spec transitions and JSON-LD compaction are problems that belong inside a framework, not barriers in front of someone with a new idea.

Starting takes one line:

npm init @fedify

Follow the first tutorial and by the end, Mastodon can find your server. If you get stuck, come find us in the Matrix room or GitHub Discussions. See you in the fediverse.

github.com

fedify-dev/fedify ยท Discussions

Explore the GitHub Discussions forum for fedify-dev fedify. Discuss code, ask questions & collaborate with the developer community.

@stefan@stefanbohacek.online

This is a really great, technical overview of how the fediverse works behind the scenes. And really makes you appreciate that it works at all.

Massive props to @hongminhee for this write-up and all their work, and those of others that make fediverse possible.

hackers.pub

Why implementing ActivityPub is hard, and why it doesn't have to be

Implementing the ActivityPub protocol from scratch introduces massive technical hurdles, including fragmented signature standards, unpredictable JSON-LD document variations, complex distributed systems engineering, and critical security vulnerabilities. Developers frequently encounter silent failures like out-of-order message deliveries that cause permanently orphaned posts, undocumented platform-specific interoperability quirks, and exposure to server-side request forgery. Fedify, a TypeScript framework compatible with Deno, Node.js, and Bun, abstracts these exhausting complexities by automating multi-spec HTTP signatures, normalizing highly variable document shapes into typed immutable classes, and offering robust queue management with guaranteed ordered delivery. By handling the delicate details of federation, including secure-by-default network routing and extensive developer tooling, the library allows creators to focus on building actual products. This post demonstrates how shifting the burden of low-level protocol compliance to a specialized framework enables developers to build secure, highly interoperable federated applications with minimal effort.

@fedify@hackers.pub

A quiet failure

Picture the moment your server sends its first Follow activity to Mastodon. You read the spec, built the JSON, signed the HTTP request, and POSTed it with care. What comes back is a single line: 401 Unauthorized. No body. No explanation.

What went wrong? Maybe the clock behind your Date header drifted a few minutes. Maybe the hash in your Digest header is off. Maybe you uppercased the (request-target) pseudo-header while building the signing string, or published your public key as PEM where the other side wanted multibase. The remote server won't tell you. So you start reading someone else's server code to debug your own.

I know, because I've been there. Fedify began as a casualty of another project. I set out to build a single-user microblogging server, the one that would later become Hollo, and started implementing ActivityPub from scratch. Somewhere between the signature specs and the JSON-LD, the protocol work swallowed the product, and I put the whole thing down. What I picked back up wasn't the app. It was the framework the app should have had. Fedify shipped first; only then could Hollo exist, built on top of it. (I've told this story at more length in A year with the fediverse.)

ActivityPub development gets hard in a few very specific places. In this post I want to walk through five of them, then show what each one looks like with Fedify. If you've spent time in the fediverse, you'll probably nod along. If you haven't, you may wonder why anyone would do all of this by hand. Either way, the conclusion is the same: nobody has to anymore.

Five scenes

Scene 1: there is more than one standard

ActivityPub servers authenticate each other with HTTP signatures. Except there isn't one signature spec. Most of the fediverse runs on draft-cavage-http-signatures-12, an expired draft that never became a standard. The actual standard exists too: RFC 9421, HTTP Message Signatures. The problem is that you can't know which one a given server accepts until you try.

A real-world implementation therefore has to sign with one spec, see whether it gets rejected, re-sign with the other, and remember per server which one worked so it can skip the dance next time. The fediverse calls this double-knocking. Yes, you get to implement it yourself.

That's still not the end. HTTP signatures only prove who sent a request. For situations like inbox forwarding, where you relay an activity you received to a third party, you need signatures that live on the document itself: Linked Data Signatures and Object Integrity Proofs. Four signature mechanisms in total, and two kinds of keys to manage: RSA and Ed25519.

Scene 2: one document, many shapes

ActivityPub's wire format is JSON-LD, and in JSON-LD the same document can take many shapes. This is easier to show than to explain. Here is a Create activity one server might send:

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "type": "Create",
  "actor": "https://example.com/users/alice",
  "to": "https://www.w3.org/ns/activitystreams#Public",
  "object": {
    "type": "Note",
    "id": "https://example.com/notes/123",
    "content": "Hello, fediverse!"
  }
}

And here is a semantically identical activity from another server:

{
  "@context": ["https://www.w3.org/ns/activitystreams"],
  "type": "Create",
  "actor": {
    "type": "Person",
    "id": "https://example.com/users/alice",
    "preferredUsername": "alice"
  },
  "to": ["as:Public"],
  "object": "https://example.com/notes/123"
}

actor turned from a URI string into an inline object. to turned from a string into an array. object went the other way, from an inline object to a URI. Even the address that means โ€œpublicโ€ has three valid spellings: https://www.w3.org/ns/activitystreams#Public, as:Public, and plain Public. Your parser has to accept every combination, and which one arrives depends on the sender's implementation.

The spec-compliant answer is to normalize every document with a JSON-LD processor, expansion followed by compaction. In practice many implementations treat it all as โ€œjust JSONโ€ and quietly break on whatever shape some server happens to emit. Either way, you end up with defensive code smeared across the whole codebase: is this a string? An array? An object? A URI I have to fetch?

Scene 3: the zombie post

A user publishes a post, spots a typo, and deletes it right away. Your server sends a Create, then a Delete. Thanks to network weather, some receiving server gets the Delete first and the Create second. It ignores the deletion of a post that doesn't exist yet, then dutifully processes the creation of a post that was already deleted. That post now lives on that server forever, while its author believes it's gone.

Then there's scale. With five thousand followers, one post means thousands of HTTP deliveries. Do that inline in the request handler and your publish button takes half a minute to respond, or the server falls over. Fine, use a queue. Deliveries fail, so retry them. On what schedule? Exponential backoff. How many times? And is a 500 Internal Server Error the same kind of failure as a 410 Gone? When do you clean up three thousand followers on a server that no longer exists? Should you keep hammering a host that has been down for days?

At some point it dawns on you that this is no longer protocol implementation. It's distributed systems engineering.

Scene 4: it's not a spec, it's an ecosystem

Even perfect spec compliance doesn't buy you interoperability. A few examples from the field:

  • Mastodon's secure mode requires HTTP signatures on GET requests too (so-called authorized fetch). Now suppose both servers run in that mode. To fetch the other side's public key you must sign your request; to verify your signature, the other side must first fetch your key. Deadlock. The community's workaround is to sign with an โ€œinstance actorโ€ that represents the server itself. You won't find that in the spec.
  • Threads can't parse activities whose actor is embedded as an inline object. When sending to Threads, the actor has to be a URI.
  • Lemmy silently rejects Group actors that lack fields Mastodon never asks for, such as a moderators collection linked via attributedTo and a featured collection.
  • Misskey carries vocabulary extensions of its own; quote posts alone go by three different property names across implementations.

The list keeps growing. Interoperability here is not something you finish once and stop thinking about. It's maintenance, forever.

Scene 5: insecure by default

Build it from scratch, and you start out wide open. Skip signature verification on incoming activities and anyone can inject a forged Follow or Delete. Leave the document loader unrestricted and a malicious activity can point it at http://169.254.169.254/ or your internal network, turning your server into an SSRF proxy. Skip origin checks on embedded objects and any server can hand out a document claiming โ€œhere's what the Mastodon lead developer said.โ€

What these traps share is that nothing happens when you fall into them. Everything appears to work. Until someone exploits it.

Ghost ran into this too

If you're thinking โ€œsurely our team would manage,โ€ consider Ghost: a leading open-source publishing platform used by thousands of journalists and creators, and a team that set out to build its own ActivityPub support.

We can definitely attest to the problems that Fedify is working hard to solve, because even in just a few weeks of early prototyping we were running into the issues described above right away.

From Alright, let's Fedify

Ghost ended up building its ActivityPub layer on Fedify.

So I put all of it in a framework

Fedify is a TypeScript library for building federated server apps on ActivityPub and the standards around it. It runs on Deno, Node.js, and Bun, and supports edge runtimes like Cloudflare Workers. The design goal hasn't changed since the beginning: keep everything in those five scenes out of application code.

Here are the same five scenes again, this time with Fedify.

Scene 1, revisited: the signature war is the framework's job

Here is everything it takes to put one actor on the fediverse:

import { createFederation, generateCryptoKeyPair, MemoryKvStore } from "@fedify/fedify";
import { Endpoints, Person } from "@fedify/vocab";

const federation = createFederation<void>({
  kv: new MemoryKvStore(),  // Swap for Redis, PostgreSQL, etc. in production
});

federation
  .setActorDispatcher("/users/{identifier}", async (ctx, identifier) => {
    if (identifier !== "alice") return null;
    const keyPairs = await ctx.getActorKeyPairs(identifier);
    return new Person({
      id: ctx.getActorUri(identifier),
      preferredUsername: identifier,
      name: "Alice",
      inbox: ctx.getInboxUri(identifier),
      endpoints: new Endpoints({ sharedInbox: ctx.getInboxUri() }),
      publicKey: keyPairs[0].cryptographicKey,
      assertionMethods: keyPairs.map((keyPair) => keyPair.multikey),
    });
  })
  .setKeyPairsDispatcher(async (ctx, identifier) => {
    // In real code you'd persist these in a database; this shows the gist
    return [await generateCryptoKeyPair()];
  });

The moment this code runs:

  • Every outgoing request gets signed. With an RSA key, Fedify emits HTTP Signatures and Linked Data Signatures; add an Ed25519 key and it attaches Object Integrity Proofs as well. All four mechanisms coexist on a single activity, and each receiver verifies with the strongest one it understands.
  • Fedify does the double-knocking for you: first contact goes out as RFC 9421, a rejection triggers a draft-cavage retry, and the winning spec is cached per server. If the rejection carries an Accept-Signature challenge (RFC 9421 ยง5), Fedify reads it and re-signs with exactly the components the server asked for.
  • Incoming signatures are verified before your code sees anything. An activity that fails verification never reaches your listeners.
  • One bonus. Because you registered an actor dispatcher, you now have a WebFinger (RFC 7033) server, for free. Type @alice@example.com into Mastodon's search box and your actor comes up. You never wrote a line of WebFinger code.

Scene 2, revisited: types instead of JSON-LD

Fedify ships about eighty classes covering the whole Activity Vocabulary plus the major vendor extensions. The classes are typed and immutable, and their accessors absorb the shape differences that JSON-LD allows.

const actor = await ctx.lookupObject("@hongminhee@hollo.social");
if (actor instanceof Person) {
  console.log(actor.name);           // Safe whether it's a string or langString
  const followers = await actor.getFollowers();  // Fetches a URI, unwraps an object
}

lookupObject() takes a handle and runs the whole chain for you, WebFinger discovery included. Accessors like getFollowers() behave the same way whether the value is a URI reference or an inline object, and fetched values are cached.

Vendor fragmentation gets stitched up here too. The three competing quote properties (quoteUri, _misskey_quote, quoteUrl) are unified behind one API, next to the emerging FEP-044f quote. Misskey's isCat property exists as a type, so your server can determine cat-ness with full type safety. It sounds like a joke, but a few dozen details of exactly this kind are what interoperability is actually made of.

Scene 3, revisited: the zombie post dies in one line

Delivery infrastructure first. Plug a message queue into createFederation() and delivery moves to the background, with automatic retries under exponential backoff (up to ten attempts by default). When a post goes to thousands of followers, two-stage fan-out kicks in: a single consolidated message enters the queue, and a background worker splits it into per-server delivery tasks. The publish button responds immediately.

Retries create a problem of their own: the same activity can arrive twice. Fedify keeps a 24-hour idempotence cache of processed activities, so duplicates get detected and skipped before they reach your handlers.

As for the zombie post, the fix is one option:

await ctx.sendActivity(
  { identifier: "alice" },
  "followers",           // Collects recipients from your followers collection
  deleteActivity,
  { orderingKey: post.id },  // Same key = in-order delivery per server
);

Activities that share an orderingKey are delivered to each receiving server in the order they were sent. A Delete can no longer overtake its Create. Activities with different keys still go out in parallel, so throughput survives.

Fedify also handles dead servers. On a 404 Not Found or 410 Gone, it stops retrying and calls a handler you register. If the delivery went to a shared inbox, you also get the list of followers behind it, so you can prune vanished accounts on the spot. Hosts that fail repeatedly trip a per-host circuit breaker that holds deliveries and probes periodically until the host recovers. It's on by default; there's nothing to configure.

Scene 4, revisited: we track the quirks so you don't

Here is how Fedify disarms the traps from scene 4:

  • Authorized fetch: chain .authorize() onto a dispatcher and the verified identity of the requester lands in your callback. Blocklists, private collections, whatever your app needs is plain application logic. The instance-actor deadlock has a supported pattern as well.
  • Threads and inline actors: an activity transformer, enabled by default, rewrites inline actors into URIs on the way out. You don't need to know Threads has this problem.
  • Lemmy's requirements: the custom collection API exposes a moderators collection in a few lines, and Lemmy's JSON-LD context ships preloaded.

When a new quirk surfaces in the wild, the fix lands in Fedify, not in every application separately. Each interoperability lesson gets learned once.

Scene 5, revisited: becoming unsafe takes effort

Fedify's defaults point the other way.

  • Signature verification is something you turn off (for tests), not something you remember to turn on.
  • The document loader refuses private address ranges and loopback out of the box, with DNS rebinding accounted for. To open yourself up to SSRF you have to flip an option whose very name announces it's for testing.
  • When an embedded object's origin differs from its parent document's, the accessor refuses to trust it and re-fetches from the source (based on FEP-fe34). Content spoofing is stopped at the property access level.

In a from-scratch implementation, you have to keep remembering to do things safely. In Fedify, the unsafe path is the one that takes deliberate effort. For a federated server, with its tangle of trust boundaries, that's the right way around.

Your stack stays your stack

โ€œFine, but what if it doesn't fit our stack?โ€ Fedify was built to fit the stack you already have. There are thirteen web framework integrations: servers like Express, Hono, Fastify, Koa, NestJS, and Elysia, and meta-frameworks like Next.js, Nuxt, SvelteKit, Astro, SolidStart, and Fresh. Middleware handles content negotiation, so the same URL in your existing app serves HTML to browsers and JSON-LD to the fediverse.

Fedify doesn't dictate your database either. For its own storage it asks for one keyโ€“value interface, with seven adapters available (Redis, PostgreSQL, MySQL/MariaDB, SQLite, Deno KV, Cloudflare Workers KV, in-memory). Message queues come in eight flavors (PostgreSQL, Redis, AMQP/RabbitMQ, and so on), and you can implement the interface yourself if none fits. Your domain data stays in whatever database and ORM you already use.

Already running federation on another library? There are migration guides with data migration scripts for moving from activitypub-express and friends without losing your existing followers.

The core isn't the ceiling, either. Higher-level packages build on it: @fedify/relay gives you a complete ActivityPub relay server in a single function call, and @fedify/backfill reconstructs incomplete conversation threads by walking the rest of the fediverse for you.

Tools for the whole development loop

A quieter misery of federated development has always been the missing tooling. Fedify comes with tools for every stage of the loop.

fedify init scaffolds a project in one line, and fedify tunnel exposes your local server over HTTPS so you can test against real Mastodon. Activities your server sends can be received by fedify inbox, a disposable inbox server spun up on the spot; whatever other servers publish, you can inspect with fedify lookup. My personal favorite is fedify lookup --authorized-fetch, which generates a one-off key pair and stands up a temporary ActivityPub server just to make a signed request for an object behind secure mode. The CLI is also useful to ActivityPub developers who don't use Fedify at all.

While you write code, an ActivityPub-specific linter (@fedify/lint) catches twenty kinds of interoperability bugs, like an actor missing its inbox. Tests run without the network using mocks from @fedify/testing. Once the server is up, attach the debug dashboard (@fedify/debugger) with one line and watch activities and signature verification results in your browser, live. In production there's built-in OpenTelemetry instrumentation (28 span types, 37 metrics) plus a monitoring guide, and when performance matters, fedify bench, a load-testing tool built for ActivityPub, catches regressions in CI.

As far as I know, no other ActivityPub framework ships even one of the tools in this section.

The documentation is part of the tooling. The official docs run to a thirty-chapter manual and five tutorials, and they go well past API listings. There's an operations chapter with ready-made PromQL queries and alerting rules for watching your queue backlog, and a field-guide chapter that documents de facto conventions, like which property makes your avatar show up in Mastodon, with screenshots. At two in the morning, when federation is broken and you don't know why, this is the difference between a bad night and a short one.

It's already running

Fedify is not a thought experiment. Ghost's ActivityPub service, mentioned above, is built on it. So are Encyclia, which bridges ORCID researcher records into the fediverse; SiliconBeest, running serverless on Cloudflare Workers; Typo Blue, a Korean blogging platform; Hollo, my own single-user microblogging platform; and Hackers' Pub, run by its community. Hollo, by the way, is the app from the beginning of this post: the project I once had to shelve, finished at last on the framework it forced into existence.

The tutorials give a concrete sense of scale. They walk you from a single-file server, a few dozen lines, that Mastodon can follow, through an image sharing service in roughly 750 lines that fully interoperates with Pixelfed (follows, likes, comments), up to a community platform federating both ways with the real lemmy.ml.

The fediverse needs more apps

I didn't build Fedify to mint more ActivityPub experts. Rather the opposite. I believe the fediverse will only grow beyond microblogging when developers can build federated apps without knowing ActivityPub's fine print. Signature spec transitions and JSON-LD compaction are problems that belong inside a framework, not barriers in front of someone with a new idea.

Starting takes one line:

npm init @fedify

Follow the first tutorial and by the end, Mastodon can find your server. If you get stuck, come find us in the Matrix room or GitHub Discussions. See you in the fediverse.

github.com

fedify-dev/fedify ยท Discussions

Explore the GitHub Discussions forum for fedify-dev fedify. Discuss code, ask questions & collaborate with the developer community.

@stefan@stefanbohacek.online

This is a really great, technical overview of how the fediverse works behind the scenes. And really makes you appreciate that it works at all.

Massive props to @hongminhee for this write-up and all their work, and those of others that make fediverse possible.

hackers.pub

Why implementing ActivityPub is hard, and why it doesn't have to be

Implementing the ActivityPub protocol from scratch introduces massive technical hurdles, including fragmented signature standards, unpredictable JSON-LD document variations, complex distributed systems engineering, and critical security vulnerabilities. Developers frequently encounter silent failures like out-of-order message deliveries that cause permanently orphaned posts, undocumented platform-specific interoperability quirks, and exposure to server-side request forgery. Fedify, a TypeScript framework compatible with Deno, Node.js, and Bun, abstracts these exhausting complexities by automating multi-spec HTTP signatures, normalizing highly variable document shapes into typed immutable classes, and offering robust queue management with guaranteed ordered delivery. By handling the delicate details of federation, including secure-by-default network routing and extensive developer tooling, the library allows creators to focus on building actual products. This post demonstrates how shifting the burden of low-level protocol compliance to a specialized framework enables developers to build secure, highly interoperable federated applications with minimal effort.

@fedify@hackers.pub

A quiet failure

Picture the moment your server sends its first Follow activity to Mastodon. You read the spec, built the JSON, signed the HTTP request, and POSTed it with care. What comes back is a single line: 401 Unauthorized. No body. No explanation.

What went wrong? Maybe the clock behind your Date header drifted a few minutes. Maybe the hash in your Digest header is off. Maybe you uppercased the (request-target) pseudo-header while building the signing string, or published your public key as PEM where the other side wanted multibase. The remote server won't tell you. So you start reading someone else's server code to debug your own.

I know, because I've been there. Fedify began as a casualty of another project. I set out to build a single-user microblogging server, the one that would later become Hollo, and started implementing ActivityPub from scratch. Somewhere between the signature specs and the JSON-LD, the protocol work swallowed the product, and I put the whole thing down. What I picked back up wasn't the app. It was the framework the app should have had. Fedify shipped first; only then could Hollo exist, built on top of it. (I've told this story at more length in A year with the fediverse.)

ActivityPub development gets hard in a few very specific places. In this post I want to walk through five of them, then show what each one looks like with Fedify. If you've spent time in the fediverse, you'll probably nod along. If you haven't, you may wonder why anyone would do all of this by hand. Either way, the conclusion is the same: nobody has to anymore.

Five scenes

Scene 1: there is more than one standard

ActivityPub servers authenticate each other with HTTP signatures. Except there isn't one signature spec. Most of the fediverse runs on draft-cavage-http-signatures-12, an expired draft that never became a standard. The actual standard exists too: RFC 9421, HTTP Message Signatures. The problem is that you can't know which one a given server accepts until you try.

A real-world implementation therefore has to sign with one spec, see whether it gets rejected, re-sign with the other, and remember per server which one worked so it can skip the dance next time. The fediverse calls this double-knocking. Yes, you get to implement it yourself.

That's still not the end. HTTP signatures only prove who sent a request. For situations like inbox forwarding, where you relay an activity you received to a third party, you need signatures that live on the document itself: Linked Data Signatures and Object Integrity Proofs. Four signature mechanisms in total, and two kinds of keys to manage: RSA and Ed25519.

Scene 2: one document, many shapes

ActivityPub's wire format is JSON-LD, and in JSON-LD the same document can take many shapes. This is easier to show than to explain. Here is a Create activity one server might send:

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "type": "Create",
  "actor": "https://example.com/users/alice",
  "to": "https://www.w3.org/ns/activitystreams#Public",
  "object": {
    "type": "Note",
    "id": "https://example.com/notes/123",
    "content": "Hello, fediverse!"
  }
}

And here is a semantically identical activity from another server:

{
  "@context": ["https://www.w3.org/ns/activitystreams"],
  "type": "Create",
  "actor": {
    "type": "Person",
    "id": "https://example.com/users/alice",
    "preferredUsername": "alice"
  },
  "to": ["as:Public"],
  "object": "https://example.com/notes/123"
}

actor turned from a URI string into an inline object. to turned from a string into an array. object went the other way, from an inline object to a URI. Even the address that means โ€œpublicโ€ has three valid spellings: https://www.w3.org/ns/activitystreams#Public, as:Public, and plain Public. Your parser has to accept every combination, and which one arrives depends on the sender's implementation.

The spec-compliant answer is to normalize every document with a JSON-LD processor, expansion followed by compaction. In practice many implementations treat it all as โ€œjust JSONโ€ and quietly break on whatever shape some server happens to emit. Either way, you end up with defensive code smeared across the whole codebase: is this a string? An array? An object? A URI I have to fetch?

Scene 3: the zombie post

A user publishes a post, spots a typo, and deletes it right away. Your server sends a Create, then a Delete. Thanks to network weather, some receiving server gets the Delete first and the Create second. It ignores the deletion of a post that doesn't exist yet, then dutifully processes the creation of a post that was already deleted. That post now lives on that server forever, while its author believes it's gone.

Then there's scale. With five thousand followers, one post means thousands of HTTP deliveries. Do that inline in the request handler and your publish button takes half a minute to respond, or the server falls over. Fine, use a queue. Deliveries fail, so retry them. On what schedule? Exponential backoff. How many times? And is a 500 Internal Server Error the same kind of failure as a 410 Gone? When do you clean up three thousand followers on a server that no longer exists? Should you keep hammering a host that has been down for days?

At some point it dawns on you that this is no longer protocol implementation. It's distributed systems engineering.

Scene 4: it's not a spec, it's an ecosystem

Even perfect spec compliance doesn't buy you interoperability. A few examples from the field:

  • Mastodon's secure mode requires HTTP signatures on GET requests too (so-called authorized fetch). Now suppose both servers run in that mode. To fetch the other side's public key you must sign your request; to verify your signature, the other side must first fetch your key. Deadlock. The community's workaround is to sign with an โ€œinstance actorโ€ that represents the server itself. You won't find that in the spec.
  • Threads can't parse activities whose actor is embedded as an inline object. When sending to Threads, the actor has to be a URI.
  • Lemmy silently rejects Group actors that lack fields Mastodon never asks for, such as a moderators collection linked via attributedTo and a featured collection.
  • Misskey carries vocabulary extensions of its own; quote posts alone go by three different property names across implementations.

The list keeps growing. Interoperability here is not something you finish once and stop thinking about. It's maintenance, forever.

Scene 5: insecure by default

Build it from scratch, and you start out wide open. Skip signature verification on incoming activities and anyone can inject a forged Follow or Delete. Leave the document loader unrestricted and a malicious activity can point it at http://169.254.169.254/ or your internal network, turning your server into an SSRF proxy. Skip origin checks on embedded objects and any server can hand out a document claiming โ€œhere's what the Mastodon lead developer said.โ€

What these traps share is that nothing happens when you fall into them. Everything appears to work. Until someone exploits it.

Ghost ran into this too

If you're thinking โ€œsurely our team would manage,โ€ consider Ghost: a leading open-source publishing platform used by thousands of journalists and creators, and a team that set out to build its own ActivityPub support.

We can definitely attest to the problems that Fedify is working hard to solve, because even in just a few weeks of early prototyping we were running into the issues described above right away.

From Alright, let's Fedify

Ghost ended up building its ActivityPub layer on Fedify.

So I put all of it in a framework

Fedify is a TypeScript library for building federated server apps on ActivityPub and the standards around it. It runs on Deno, Node.js, and Bun, and supports edge runtimes like Cloudflare Workers. The design goal hasn't changed since the beginning: keep everything in those five scenes out of application code.

Here are the same five scenes again, this time with Fedify.

Scene 1, revisited: the signature war is the framework's job

Here is everything it takes to put one actor on the fediverse:

import { createFederation, generateCryptoKeyPair, MemoryKvStore } from "@fedify/fedify";
import { Endpoints, Person } from "@fedify/vocab";

const federation = createFederation<void>({
  kv: new MemoryKvStore(),  // Swap for Redis, PostgreSQL, etc. in production
});

federation
  .setActorDispatcher("/users/{identifier}", async (ctx, identifier) => {
    if (identifier !== "alice") return null;
    const keyPairs = await ctx.getActorKeyPairs(identifier);
    return new Person({
      id: ctx.getActorUri(identifier),
      preferredUsername: identifier,
      name: "Alice",
      inbox: ctx.getInboxUri(identifier),
      endpoints: new Endpoints({ sharedInbox: ctx.getInboxUri() }),
      publicKey: keyPairs[0].cryptographicKey,
      assertionMethods: keyPairs.map((keyPair) => keyPair.multikey),
    });
  })
  .setKeyPairsDispatcher(async (ctx, identifier) => {
    // In real code you'd persist these in a database; this shows the gist
    return [await generateCryptoKeyPair()];
  });

The moment this code runs:

  • Every outgoing request gets signed. With an RSA key, Fedify emits HTTP Signatures and Linked Data Signatures; add an Ed25519 key and it attaches Object Integrity Proofs as well. All four mechanisms coexist on a single activity, and each receiver verifies with the strongest one it understands.
  • Fedify does the double-knocking for you: first contact goes out as RFC 9421, a rejection triggers a draft-cavage retry, and the winning spec is cached per server. If the rejection carries an Accept-Signature challenge (RFC 9421 ยง5), Fedify reads it and re-signs with exactly the components the server asked for.
  • Incoming signatures are verified before your code sees anything. An activity that fails verification never reaches your listeners.
  • One bonus. Because you registered an actor dispatcher, you now have a WebFinger (RFC 7033) server, for free. Type @alice@example.com into Mastodon's search box and your actor comes up. You never wrote a line of WebFinger code.

Scene 2, revisited: types instead of JSON-LD

Fedify ships about eighty classes covering the whole Activity Vocabulary plus the major vendor extensions. The classes are typed and immutable, and their accessors absorb the shape differences that JSON-LD allows.

const actor = await ctx.lookupObject("@hongminhee@hollo.social");
if (actor instanceof Person) {
  console.log(actor.name);           // Safe whether it's a string or langString
  const followers = await actor.getFollowers();  // Fetches a URI, unwraps an object
}

lookupObject() takes a handle and runs the whole chain for you, WebFinger discovery included. Accessors like getFollowers() behave the same way whether the value is a URI reference or an inline object, and fetched values are cached.

Vendor fragmentation gets stitched up here too. The three competing quote properties (quoteUri, _misskey_quote, quoteUrl) are unified behind one API, next to the emerging FEP-044f quote. Misskey's isCat property exists as a type, so your server can determine cat-ness with full type safety. It sounds like a joke, but a few dozen details of exactly this kind are what interoperability is actually made of.

Scene 3, revisited: the zombie post dies in one line

Delivery infrastructure first. Plug a message queue into createFederation() and delivery moves to the background, with automatic retries under exponential backoff (up to ten attempts by default). When a post goes to thousands of followers, two-stage fan-out kicks in: a single consolidated message enters the queue, and a background worker splits it into per-server delivery tasks. The publish button responds immediately.

Retries create a problem of their own: the same activity can arrive twice. Fedify keeps a 24-hour idempotence cache of processed activities, so duplicates get detected and skipped before they reach your handlers.

As for the zombie post, the fix is one option:

await ctx.sendActivity(
  { identifier: "alice" },
  "followers",           // Collects recipients from your followers collection
  deleteActivity,
  { orderingKey: post.id },  // Same key = in-order delivery per server
);

Activities that share an orderingKey are delivered to each receiving server in the order they were sent. A Delete can no longer overtake its Create. Activities with different keys still go out in parallel, so throughput survives.

Fedify also handles dead servers. On a 404 Not Found or 410 Gone, it stops retrying and calls a handler you register. If the delivery went to a shared inbox, you also get the list of followers behind it, so you can prune vanished accounts on the spot. Hosts that fail repeatedly trip a per-host circuit breaker that holds deliveries and probes periodically until the host recovers. It's on by default; there's nothing to configure.

Scene 4, revisited: we track the quirks so you don't

Here is how Fedify disarms the traps from scene 4:

  • Authorized fetch: chain .authorize() onto a dispatcher and the verified identity of the requester lands in your callback. Blocklists, private collections, whatever your app needs is plain application logic. The instance-actor deadlock has a supported pattern as well.
  • Threads and inline actors: an activity transformer, enabled by default, rewrites inline actors into URIs on the way out. You don't need to know Threads has this problem.
  • Lemmy's requirements: the custom collection API exposes a moderators collection in a few lines, and Lemmy's JSON-LD context ships preloaded.

When a new quirk surfaces in the wild, the fix lands in Fedify, not in every application separately. Each interoperability lesson gets learned once.

Scene 5, revisited: becoming unsafe takes effort

Fedify's defaults point the other way.

  • Signature verification is something you turn off (for tests), not something you remember to turn on.
  • The document loader refuses private address ranges and loopback out of the box, with DNS rebinding accounted for. To open yourself up to SSRF you have to flip an option whose very name announces it's for testing.
  • When an embedded object's origin differs from its parent document's, the accessor refuses to trust it and re-fetches from the source (based on FEP-fe34). Content spoofing is stopped at the property access level.

In a from-scratch implementation, you have to keep remembering to do things safely. In Fedify, the unsafe path is the one that takes deliberate effort. For a federated server, with its tangle of trust boundaries, that's the right way around.

Your stack stays your stack

โ€œFine, but what if it doesn't fit our stack?โ€ Fedify was built to fit the stack you already have. There are thirteen web framework integrations: servers like Express, Hono, Fastify, Koa, NestJS, and Elysia, and meta-frameworks like Next.js, Nuxt, SvelteKit, Astro, SolidStart, and Fresh. Middleware handles content negotiation, so the same URL in your existing app serves HTML to browsers and JSON-LD to the fediverse.

Fedify doesn't dictate your database either. For its own storage it asks for one keyโ€“value interface, with seven adapters available (Redis, PostgreSQL, MySQL/MariaDB, SQLite, Deno KV, Cloudflare Workers KV, in-memory). Message queues come in eight flavors (PostgreSQL, Redis, AMQP/RabbitMQ, and so on), and you can implement the interface yourself if none fits. Your domain data stays in whatever database and ORM you already use.

Already running federation on another library? There are migration guides with data migration scripts for moving from activitypub-express and friends without losing your existing followers.

The core isn't the ceiling, either. Higher-level packages build on it: @fedify/relay gives you a complete ActivityPub relay server in a single function call, and @fedify/backfill reconstructs incomplete conversation threads by walking the rest of the fediverse for you.

Tools for the whole development loop

A quieter misery of federated development has always been the missing tooling. Fedify comes with tools for every stage of the loop.

fedify init scaffolds a project in one line, and fedify tunnel exposes your local server over HTTPS so you can test against real Mastodon. Activities your server sends can be received by fedify inbox, a disposable inbox server spun up on the spot; whatever other servers publish, you can inspect with fedify lookup. My personal favorite is fedify lookup --authorized-fetch, which generates a one-off key pair and stands up a temporary ActivityPub server just to make a signed request for an object behind secure mode. The CLI is also useful to ActivityPub developers who don't use Fedify at all.

While you write code, an ActivityPub-specific linter (@fedify/lint) catches twenty kinds of interoperability bugs, like an actor missing its inbox. Tests run without the network using mocks from @fedify/testing. Once the server is up, attach the debug dashboard (@fedify/debugger) with one line and watch activities and signature verification results in your browser, live. In production there's built-in OpenTelemetry instrumentation (28 span types, 37 metrics) plus a monitoring guide, and when performance matters, fedify bench, a load-testing tool built for ActivityPub, catches regressions in CI.

As far as I know, no other ActivityPub framework ships even one of the tools in this section.

The documentation is part of the tooling. The official docs run to a thirty-chapter manual and five tutorials, and they go well past API listings. There's an operations chapter with ready-made PromQL queries and alerting rules for watching your queue backlog, and a field-guide chapter that documents de facto conventions, like which property makes your avatar show up in Mastodon, with screenshots. At two in the morning, when federation is broken and you don't know why, this is the difference between a bad night and a short one.

It's already running

Fedify is not a thought experiment. Ghost's ActivityPub service, mentioned above, is built on it. So are Encyclia, which bridges ORCID researcher records into the fediverse; SiliconBeest, running serverless on Cloudflare Workers; Typo Blue, a Korean blogging platform; Hollo, my own single-user microblogging platform; and Hackers' Pub, run by its community. Hollo, by the way, is the app from the beginning of this post: the project I once had to shelve, finished at last on the framework it forced into existence.

The tutorials give a concrete sense of scale. They walk you from a single-file server, a few dozen lines, that Mastodon can follow, through an image sharing service in roughly 750 lines that fully interoperates with Pixelfed (follows, likes, comments), up to a community platform federating both ways with the real lemmy.ml.

The fediverse needs more apps

I didn't build Fedify to mint more ActivityPub experts. Rather the opposite. I believe the fediverse will only grow beyond microblogging when developers can build federated apps without knowing ActivityPub's fine print. Signature spec transitions and JSON-LD compaction are problems that belong inside a framework, not barriers in front of someone with a new idea.

Starting takes one line:

npm init @fedify

Follow the first tutorial and by the end, Mastodon can find your server. If you get stuck, come find us in the Matrix room or GitHub Discussions. See you in the fediverse.

github.com

fedify-dev/fedify ยท Discussions

Explore the GitHub Discussions forum for fedify-dev fedify. Discuss code, ask questions & collaborate with the developer community.

@stefan@stefanbohacek.online

This is a really great, technical overview of how the fediverse works behind the scenes. And really makes you appreciate that it works at all.

Massive props to @hongminhee for this write-up and all their work, and those of others that make fediverse possible.

hackers.pub

Why implementing ActivityPub is hard, and why it doesn't have to be

Implementing the ActivityPub protocol from scratch introduces massive technical hurdles, including fragmented signature standards, unpredictable JSON-LD document variations, complex distributed systems engineering, and critical security vulnerabilities. Developers frequently encounter silent failures like out-of-order message deliveries that cause permanently orphaned posts, undocumented platform-specific interoperability quirks, and exposure to server-side request forgery. Fedify, a TypeScript framework compatible with Deno, Node.js, and Bun, abstracts these exhausting complexities by automating multi-spec HTTP signatures, normalizing highly variable document shapes into typed immutable classes, and offering robust queue management with guaranteed ordered delivery. By handling the delicate details of federation, including secure-by-default network routing and extensive developer tooling, the library allows creators to focus on building actual products. This post demonstrates how shifting the burden of low-level protocol compliance to a specialized framework enables developers to build secure, highly interoperable federated applications with minimal effort.

@fedify@hackers.pub

A quiet failure

Picture the moment your server sends its first Follow activity to Mastodon. You read the spec, built the JSON, signed the HTTP request, and POSTed it with care. What comes back is a single line: 401 Unauthorized. No body. No explanation.

What went wrong? Maybe the clock behind your Date header drifted a few minutes. Maybe the hash in your Digest header is off. Maybe you uppercased the (request-target) pseudo-header while building the signing string, or published your public key as PEM where the other side wanted multibase. The remote server won't tell you. So you start reading someone else's server code to debug your own.

I know, because I've been there. Fedify began as a casualty of another project. I set out to build a single-user microblogging server, the one that would later become Hollo, and started implementing ActivityPub from scratch. Somewhere between the signature specs and the JSON-LD, the protocol work swallowed the product, and I put the whole thing down. What I picked back up wasn't the app. It was the framework the app should have had. Fedify shipped first; only then could Hollo exist, built on top of it. (I've told this story at more length in A year with the fediverse.)

ActivityPub development gets hard in a few very specific places. In this post I want to walk through five of them, then show what each one looks like with Fedify. If you've spent time in the fediverse, you'll probably nod along. If you haven't, you may wonder why anyone would do all of this by hand. Either way, the conclusion is the same: nobody has to anymore.

Five scenes

Scene 1: there is more than one standard

ActivityPub servers authenticate each other with HTTP signatures. Except there isn't one signature spec. Most of the fediverse runs on draft-cavage-http-signatures-12, an expired draft that never became a standard. The actual standard exists too: RFC 9421, HTTP Message Signatures. The problem is that you can't know which one a given server accepts until you try.

A real-world implementation therefore has to sign with one spec, see whether it gets rejected, re-sign with the other, and remember per server which one worked so it can skip the dance next time. The fediverse calls this double-knocking. Yes, you get to implement it yourself.

That's still not the end. HTTP signatures only prove who sent a request. For situations like inbox forwarding, where you relay an activity you received to a third party, you need signatures that live on the document itself: Linked Data Signatures and Object Integrity Proofs. Four signature mechanisms in total, and two kinds of keys to manage: RSA and Ed25519.

Scene 2: one document, many shapes

ActivityPub's wire format is JSON-LD, and in JSON-LD the same document can take many shapes. This is easier to show than to explain. Here is a Create activity one server might send:

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "type": "Create",
  "actor": "https://example.com/users/alice",
  "to": "https://www.w3.org/ns/activitystreams#Public",
  "object": {
    "type": "Note",
    "id": "https://example.com/notes/123",
    "content": "Hello, fediverse!"
  }
}

And here is a semantically identical activity from another server:

{
  "@context": ["https://www.w3.org/ns/activitystreams"],
  "type": "Create",
  "actor": {
    "type": "Person",
    "id": "https://example.com/users/alice",
    "preferredUsername": "alice"
  },
  "to": ["as:Public"],
  "object": "https://example.com/notes/123"
}

actor turned from a URI string into an inline object. to turned from a string into an array. object went the other way, from an inline object to a URI. Even the address that means โ€œpublicโ€ has three valid spellings: https://www.w3.org/ns/activitystreams#Public, as:Public, and plain Public. Your parser has to accept every combination, and which one arrives depends on the sender's implementation.

The spec-compliant answer is to normalize every document with a JSON-LD processor, expansion followed by compaction. In practice many implementations treat it all as โ€œjust JSONโ€ and quietly break on whatever shape some server happens to emit. Either way, you end up with defensive code smeared across the whole codebase: is this a string? An array? An object? A URI I have to fetch?

Scene 3: the zombie post

A user publishes a post, spots a typo, and deletes it right away. Your server sends a Create, then a Delete. Thanks to network weather, some receiving server gets the Delete first and the Create second. It ignores the deletion of a post that doesn't exist yet, then dutifully processes the creation of a post that was already deleted. That post now lives on that server forever, while its author believes it's gone.

Then there's scale. With five thousand followers, one post means thousands of HTTP deliveries. Do that inline in the request handler and your publish button takes half a minute to respond, or the server falls over. Fine, use a queue. Deliveries fail, so retry them. On what schedule? Exponential backoff. How many times? And is a 500 Internal Server Error the same kind of failure as a 410 Gone? When do you clean up three thousand followers on a server that no longer exists? Should you keep hammering a host that has been down for days?

At some point it dawns on you that this is no longer protocol implementation. It's distributed systems engineering.

Scene 4: it's not a spec, it's an ecosystem

Even perfect spec compliance doesn't buy you interoperability. A few examples from the field:

  • Mastodon's secure mode requires HTTP signatures on GET requests too (so-called authorized fetch). Now suppose both servers run in that mode. To fetch the other side's public key you must sign your request; to verify your signature, the other side must first fetch your key. Deadlock. The community's workaround is to sign with an โ€œinstance actorโ€ that represents the server itself. You won't find that in the spec.
  • Threads can't parse activities whose actor is embedded as an inline object. When sending to Threads, the actor has to be a URI.
  • Lemmy silently rejects Group actors that lack fields Mastodon never asks for, such as a moderators collection linked via attributedTo and a featured collection.
  • Misskey carries vocabulary extensions of its own; quote posts alone go by three different property names across implementations.

The list keeps growing. Interoperability here is not something you finish once and stop thinking about. It's maintenance, forever.

Scene 5: insecure by default

Build it from scratch, and you start out wide open. Skip signature verification on incoming activities and anyone can inject a forged Follow or Delete. Leave the document loader unrestricted and a malicious activity can point it at http://169.254.169.254/ or your internal network, turning your server into an SSRF proxy. Skip origin checks on embedded objects and any server can hand out a document claiming โ€œhere's what the Mastodon lead developer said.โ€

What these traps share is that nothing happens when you fall into them. Everything appears to work. Until someone exploits it.

Ghost ran into this too

If you're thinking โ€œsurely our team would manage,โ€ consider Ghost: a leading open-source publishing platform used by thousands of journalists and creators, and a team that set out to build its own ActivityPub support.

We can definitely attest to the problems that Fedify is working hard to solve, because even in just a few weeks of early prototyping we were running into the issues described above right away.

From Alright, let's Fedify

Ghost ended up building its ActivityPub layer on Fedify.

So I put all of it in a framework

Fedify is a TypeScript library for building federated server apps on ActivityPub and the standards around it. It runs on Deno, Node.js, and Bun, and supports edge runtimes like Cloudflare Workers. The design goal hasn't changed since the beginning: keep everything in those five scenes out of application code.

Here are the same five scenes again, this time with Fedify.

Scene 1, revisited: the signature war is the framework's job

Here is everything it takes to put one actor on the fediverse:

import { createFederation, generateCryptoKeyPair, MemoryKvStore } from "@fedify/fedify";
import { Endpoints, Person } from "@fedify/vocab";

const federation = createFederation<void>({
  kv: new MemoryKvStore(),  // Swap for Redis, PostgreSQL, etc. in production
});

federation
  .setActorDispatcher("/users/{identifier}", async (ctx, identifier) => {
    if (identifier !== "alice") return null;
    const keyPairs = await ctx.getActorKeyPairs(identifier);
    return new Person({
      id: ctx.getActorUri(identifier),
      preferredUsername: identifier,
      name: "Alice",
      inbox: ctx.getInboxUri(identifier),
      endpoints: new Endpoints({ sharedInbox: ctx.getInboxUri() }),
      publicKey: keyPairs[0].cryptographicKey,
      assertionMethods: keyPairs.map((keyPair) => keyPair.multikey),
    });
  })
  .setKeyPairsDispatcher(async (ctx, identifier) => {
    // In real code you'd persist these in a database; this shows the gist
    return [await generateCryptoKeyPair()];
  });

The moment this code runs:

  • Every outgoing request gets signed. With an RSA key, Fedify emits HTTP Signatures and Linked Data Signatures; add an Ed25519 key and it attaches Object Integrity Proofs as well. All four mechanisms coexist on a single activity, and each receiver verifies with the strongest one it understands.
  • Fedify does the double-knocking for you: first contact goes out as RFC 9421, a rejection triggers a draft-cavage retry, and the winning spec is cached per server. If the rejection carries an Accept-Signature challenge (RFC 9421 ยง5), Fedify reads it and re-signs with exactly the components the server asked for.
  • Incoming signatures are verified before your code sees anything. An activity that fails verification never reaches your listeners.
  • One bonus. Because you registered an actor dispatcher, you now have a WebFinger (RFC 7033) server, for free. Type @alice@example.com into Mastodon's search box and your actor comes up. You never wrote a line of WebFinger code.

Scene 2, revisited: types instead of JSON-LD

Fedify ships about eighty classes covering the whole Activity Vocabulary plus the major vendor extensions. The classes are typed and immutable, and their accessors absorb the shape differences that JSON-LD allows.

const actor = await ctx.lookupObject("@hongminhee@hollo.social");
if (actor instanceof Person) {
  console.log(actor.name);           // Safe whether it's a string or langString
  const followers = await actor.getFollowers();  // Fetches a URI, unwraps an object
}

lookupObject() takes a handle and runs the whole chain for you, WebFinger discovery included. Accessors like getFollowers() behave the same way whether the value is a URI reference or an inline object, and fetched values are cached.

Vendor fragmentation gets stitched up here too. The three competing quote properties (quoteUri, _misskey_quote, quoteUrl) are unified behind one API, next to the emerging FEP-044f quote. Misskey's isCat property exists as a type, so your server can determine cat-ness with full type safety. It sounds like a joke, but a few dozen details of exactly this kind are what interoperability is actually made of.

Scene 3, revisited: the zombie post dies in one line

Delivery infrastructure first. Plug a message queue into createFederation() and delivery moves to the background, with automatic retries under exponential backoff (up to ten attempts by default). When a post goes to thousands of followers, two-stage fan-out kicks in: a single consolidated message enters the queue, and a background worker splits it into per-server delivery tasks. The publish button responds immediately.

Retries create a problem of their own: the same activity can arrive twice. Fedify keeps a 24-hour idempotence cache of processed activities, so duplicates get detected and skipped before they reach your handlers.

As for the zombie post, the fix is one option:

await ctx.sendActivity(
  { identifier: "alice" },
  "followers",           // Collects recipients from your followers collection
  deleteActivity,
  { orderingKey: post.id },  // Same key = in-order delivery per server
);

Activities that share an orderingKey are delivered to each receiving server in the order they were sent. A Delete can no longer overtake its Create. Activities with different keys still go out in parallel, so throughput survives.

Fedify also handles dead servers. On a 404 Not Found or 410 Gone, it stops retrying and calls a handler you register. If the delivery went to a shared inbox, you also get the list of followers behind it, so you can prune vanished accounts on the spot. Hosts that fail repeatedly trip a per-host circuit breaker that holds deliveries and probes periodically until the host recovers. It's on by default; there's nothing to configure.

Scene 4, revisited: we track the quirks so you don't

Here is how Fedify disarms the traps from scene 4:

  • Authorized fetch: chain .authorize() onto a dispatcher and the verified identity of the requester lands in your callback. Blocklists, private collections, whatever your app needs is plain application logic. The instance-actor deadlock has a supported pattern as well.
  • Threads and inline actors: an activity transformer, enabled by default, rewrites inline actors into URIs on the way out. You don't need to know Threads has this problem.
  • Lemmy's requirements: the custom collection API exposes a moderators collection in a few lines, and Lemmy's JSON-LD context ships preloaded.

When a new quirk surfaces in the wild, the fix lands in Fedify, not in every application separately. Each interoperability lesson gets learned once.

Scene 5, revisited: becoming unsafe takes effort

Fedify's defaults point the other way.

  • Signature verification is something you turn off (for tests), not something you remember to turn on.
  • The document loader refuses private address ranges and loopback out of the box, with DNS rebinding accounted for. To open yourself up to SSRF you have to flip an option whose very name announces it's for testing.
  • When an embedded object's origin differs from its parent document's, the accessor refuses to trust it and re-fetches from the source (based on FEP-fe34). Content spoofing is stopped at the property access level.

In a from-scratch implementation, you have to keep remembering to do things safely. In Fedify, the unsafe path is the one that takes deliberate effort. For a federated server, with its tangle of trust boundaries, that's the right way around.

Your stack stays your stack

โ€œFine, but what if it doesn't fit our stack?โ€ Fedify was built to fit the stack you already have. There are thirteen web framework integrations: servers like Express, Hono, Fastify, Koa, NestJS, and Elysia, and meta-frameworks like Next.js, Nuxt, SvelteKit, Astro, SolidStart, and Fresh. Middleware handles content negotiation, so the same URL in your existing app serves HTML to browsers and JSON-LD to the fediverse.

Fedify doesn't dictate your database either. For its own storage it asks for one keyโ€“value interface, with seven adapters available (Redis, PostgreSQL, MySQL/MariaDB, SQLite, Deno KV, Cloudflare Workers KV, in-memory). Message queues come in eight flavors (PostgreSQL, Redis, AMQP/RabbitMQ, and so on), and you can implement the interface yourself if none fits. Your domain data stays in whatever database and ORM you already use.

Already running federation on another library? There are migration guides with data migration scripts for moving from activitypub-express and friends without losing your existing followers.

The core isn't the ceiling, either. Higher-level packages build on it: @fedify/relay gives you a complete ActivityPub relay server in a single function call, and @fedify/backfill reconstructs incomplete conversation threads by walking the rest of the fediverse for you.

Tools for the whole development loop

A quieter misery of federated development has always been the missing tooling. Fedify comes with tools for every stage of the loop.

fedify init scaffolds a project in one line, and fedify tunnel exposes your local server over HTTPS so you can test against real Mastodon. Activities your server sends can be received by fedify inbox, a disposable inbox server spun up on the spot; whatever other servers publish, you can inspect with fedify lookup. My personal favorite is fedify lookup --authorized-fetch, which generates a one-off key pair and stands up a temporary ActivityPub server just to make a signed request for an object behind secure mode. The CLI is also useful to ActivityPub developers who don't use Fedify at all.

While you write code, an ActivityPub-specific linter (@fedify/lint) catches twenty kinds of interoperability bugs, like an actor missing its inbox. Tests run without the network using mocks from @fedify/testing. Once the server is up, attach the debug dashboard (@fedify/debugger) with one line and watch activities and signature verification results in your browser, live. In production there's built-in OpenTelemetry instrumentation (28 span types, 37 metrics) plus a monitoring guide, and when performance matters, fedify bench, a load-testing tool built for ActivityPub, catches regressions in CI.

As far as I know, no other ActivityPub framework ships even one of the tools in this section.

The documentation is part of the tooling. The official docs run to a thirty-chapter manual and five tutorials, and they go well past API listings. There's an operations chapter with ready-made PromQL queries and alerting rules for watching your queue backlog, and a field-guide chapter that documents de facto conventions, like which property makes your avatar show up in Mastodon, with screenshots. At two in the morning, when federation is broken and you don't know why, this is the difference between a bad night and a short one.

It's already running

Fedify is not a thought experiment. Ghost's ActivityPub service, mentioned above, is built on it. So are Encyclia, which bridges ORCID researcher records into the fediverse; SiliconBeest, running serverless on Cloudflare Workers; Typo Blue, a Korean blogging platform; Hollo, my own single-user microblogging platform; and Hackers' Pub, run by its community. Hollo, by the way, is the app from the beginning of this post: the project I once had to shelve, finished at last on the framework it forced into existence.

The tutorials give a concrete sense of scale. They walk you from a single-file server, a few dozen lines, that Mastodon can follow, through an image sharing service in roughly 750 lines that fully interoperates with Pixelfed (follows, likes, comments), up to a community platform federating both ways with the real lemmy.ml.

The fediverse needs more apps

I didn't build Fedify to mint more ActivityPub experts. Rather the opposite. I believe the fediverse will only grow beyond microblogging when developers can build federated apps without knowing ActivityPub's fine print. Signature spec transitions and JSON-LD compaction are problems that belong inside a framework, not barriers in front of someone with a new idea.

Starting takes one line:

npm init @fedify

Follow the first tutorial and by the end, Mastodon can find your server. If you get stuck, come find us in the Matrix room or GitHub Discussions. See you in the fediverse.

github.com

fedify-dev/fedify ยท Discussions

Explore the GitHub Discussions forum for fedify-dev fedify. Discuss code, ask questions & collaborate with the developer community.

@pfefferle@mastodon.social
@smallcircles@social.coop ยท Reply to panos

@panos

That is very cool!

@angusmcleod is the creator of the current Discourse plugin, that has become official. But it is still rough around the edges.

The AP community forum doubles as a test deployment for this plugin.

socialhub.activitypub.rocks

"What is a forum?" if it were built from scratch for the is an interesting exercise.

socialhub.activitypub.rocks

SocialHub

Where ActivityPub developers coordinate their efforts to make the Fediverse a great space for cooperation

@dweb@social.coop

@evan is coming to DWeb Camp to hack the ActivityPub API! ๐Ÿง‘โ€๐Ÿ’ป

talx.dod.ngo/dwebcamp-2026/tal

๐Ÿ’ก Join his workshop to learn how to build fun applications on top of the ActivityPub specification.

Full schedule here โžก๏ธ dwebcamp.org/schedule

@evanprodromou

Evanโ€™s title, profile picture, and workshop title.
ALT text

Evanโ€™s title, profile picture, and workshop title.

@dweb@social.coop

@evan is coming to DWeb Camp to hack the ActivityPub API! ๐Ÿง‘โ€๐Ÿ’ป

talx.dod.ngo/dwebcamp-2026/tal

๐Ÿ’ก Join his workshop to learn how to build fun applications on top of the ActivityPub specification.

Full schedule here โžก๏ธ dwebcamp.org/schedule

@evanprodromou

Evanโ€™s title, profile picture, and workshop title.
ALT text

Evanโ€™s title, profile picture, and workshop title.

@csolisr@hub.azkware.net
Considering the mess and the fact that it's made by a co-creator of the protocol: is AP fundamentally incapable of doing consent by default and if so, how to replace it by a private-by-default protocol where every interaction must be authorized by all parts?
@dweb@social.coop

@evan is coming to DWeb Camp to hack the ActivityPub API! ๐Ÿง‘โ€๐Ÿ’ป

talx.dod.ngo/dwebcamp-2026/tal

๐Ÿ’ก Join his workshop to learn how to build fun applications on top of the ActivityPub specification.

Full schedule here โžก๏ธ dwebcamp.org/schedule

@evanprodromou

Evanโ€™s title, profile picture, and workshop title.
ALT text

Evanโ€™s title, profile picture, and workshop title.

@evan@cosocial.ca
@evan@cosocial.ca
@tom@tomkahe.com

What do we think of anonymous ActivityPub actors? Like, you know how on some sites you can enter your name and post a (likely moderated) comment on a post without logging in. Would it make sense to have the site create an temporary/anonymous actor for that person so if someone fetches replies on your post they can see everything?

@toddsundsted@epiktistes.com

I started to work on algorithmic feeds but was side-tracked by interoperability work. No complaints. It turned out to be a productive detour.

Here's the full changelog for release v3.7.0 of Ktistec:

Added

  • Support FEP-2c59: Discovery of a Webfinger address from an ActivityPub actor.
  • Support ActivityPub Update activities for actor profile changes.

Fixed

  • Disambiguate reblog IDs from status IDs. (fixes #151)
  • Correct the quote_policy mapping to public/nobody values.
  • Ignore malformed pagination parameters instead of raising.
  • Treat "cannot be reconnected" errors as connection failures.
  • Infer a media attachment's type when mediaType is missing.
  • Faster, case-insensitive, actor username lookups.
  • Faster statuses_count using an approximate count.

Changed

  • Resolve JSON-LD contexts by matching their digest against a bundled copy.

The first version of algorithmic feeds won't be very algorithmicโ€”it will let you create a feed that filters by keywords, hashtags, and mentions. That covers a lot of ground for me personally, and lays the groundwork for future enhancements.

github.com

Mastodon API: boosted posts shown as boosted by original poster, but only on Tusker? ยท Issue #151 ยท toddsundsted/ktistec

I've noticed that Tusker on iOS shows boosts/reblogs/retweets as if the user who wrote the post shared it: Oddly enough, the Mastodon client shows the correct person: for reference here's the same ...

@toddsundsted@epiktistes.com

I started to work on algorithmic feeds but was side-tracked by interoperability work. No complaints. It turned out to be a productive detour.

Here's the full changelog for release v3.7.0 of Ktistec:

Added

  • Support FEP-2c59: Discovery of a Webfinger address from an ActivityPub actor.
  • Support ActivityPub Update activities for actor profile changes.

Fixed

  • Disambiguate reblog IDs from status IDs. (fixes #151)
  • Correct the quote_policy mapping to public/nobody values.
  • Ignore malformed pagination parameters instead of raising.
  • Treat "cannot be reconnected" errors as connection failures.
  • Infer a media attachment's type when mediaType is missing.
  • Faster, case-insensitive, actor username lookups.
  • Faster statuses_count using an approximate count.

Changed

  • Resolve JSON-LD contexts by matching their digest against a bundled copy.

The first version of algorithmic feeds won't be very algorithmicโ€”it will let you create a feed that filters by keywords, hashtags, and mentions. That covers a lot of ground for me personally, and lays the groundwork for future enhancements.

github.com

Mastodon API: boosted posts shown as boosted by original poster, but only on Tusker? ยท Issue #151 ยท toddsundsted/ktistec

I've noticed that Tusker on iOS shows boosts/reblogs/retweets as if the user who wrote the post shared it: Oddly enough, the Mastodon client shows the correct person: for reference here's the same ...

@tom@tomkahe.com

What do we think of anonymous ActivityPub actors? Like, you know how on some sites you can enter your name and post a (likely moderated) comment on a post without logging in. Would it make sense to have the site create an temporary/anonymous actor for that person so if someone fetches replies on your post they can see everything?

@smallcircles@social.coop

social.coop

๐Ÿซง Social coding commons (@smallcircles@social.coop)

@fossnorth@toot.io a question.. Was your previous domain location conf.tube perhaps? If so, on conf.tube were the videos of the #ActivityPub 2020 conference, which I cannot find on the new #Peertube location. Looking specifically for @darius@friend.camp talk https://socialhub.activitypub.rocks/t/lets-play-and-win-our-own-game/953

@sirjofri@pleroma.envs.net
#activitypub (or better: #fediverse) question: is there some platform that would allow me to do this?

For my blog, I'd like some comment functionality that's better than what I have: a link to a fedi post. I'd love to have the post and its responses in an #iframe within that blog post page. Ideally with the option for some custom styling so it could fit into the blog page.

Does something like that exist?

I'm not a webdev, and I don't know a lot about CORS and other things that could prevent this, that's why I'm asking here. I think this would be a cool way to integrate fedi into other contexts where it makes sense, without specialized plugins etc.

pleroma.envs.net

Akkoma

@sirjofri@pleroma.envs.net
#activitypub (or better: #fediverse) question: is there some platform that would allow me to do this?

For my blog, I'd like some comment functionality that's better than what I have: a link to a fedi post. I'd love to have the post and its responses in an #iframe within that blog post page. Ideally with the option for some custom styling so it could fit into the blog page.

Does something like that exist?

I'm not a webdev, and I don't know a lot about CORS and other things that could prevent this, that's why I'm asking here. I think this would be a cool way to integrate fedi into other contexts where it makes sense, without specialized plugins etc.

pleroma.envs.net

Akkoma

โš ๏ธ Be sure your Fedi site is current. An updated current site is a happy site. ๐Ÿ˜‡

Mastodon: 4.6.2

Misskey: 2026.6.0

GoToSocial: 0.22.0

Mitra: 5.6.0

Iceshrimp: 2026.5.1

Iceshrimp.NET: 2026.1.1-beta

PeerTube: 8.2.1

Owncast: 0.2.5

Loops: 1.0.0-beta.12

PixelFed: 0.12.7

FunkWhale: 2.0.4

Lemmy: 0.19.19

Mbin: 1.10.0

PieFed: 1.6.27

Pleroma: 2.10

Akkoma: 3.19.0 (2026.05)

Sharkey: 2025.4.7

โš ๏ธ Be sure your Fedi site is current. An updated current site is a happy site. ๐Ÿ˜‡

Mastodon: 4.6.2

Misskey: 2026.6.0

GoToSocial: 0.22.0

Mitra: 5.6.0

Iceshrimp: 2026.5.1

Iceshrimp.NET: 2026.1.1-beta

PeerTube: 8.2.1

Owncast: 0.2.5

Loops: 1.0.0-beta.12

PixelFed: 0.12.7

FunkWhale: 2.0.4

Lemmy: 0.19.19

Mbin: 1.10.0

PieFed: 1.6.27

Pleroma: 2.10

Akkoma: 3.19.0 (2026.05)

Sharkey: 2025.4.7

@dansup@mastodon.social

When X, Meta and TikTok relaxed their rules on hate speech, racism and transphobia, they didn't undermine the open social web.

They proved why this needs to exist.

Safety and mental health come first here. They're the foundation everything else stands on.

Not optional. Not negotiable. The vulnerable come first, always.

I have a roadmap to improve this, and I'll soon be asking for your feedback to make these spaces safer for the people who need them most.

@smallcircles@social.coop

social.coop

๐Ÿซง Social coding commons (@smallcircles@social.coop)

@fossnorth@toot.io a question.. Was your previous domain location conf.tube perhaps? If so, on conf.tube were the videos of the #ActivityPub 2020 conference, which I cannot find on the new #Peertube location. Looking specifically for @darius@friend.camp talk https://socialhub.activitypub.rocks/t/lets-play-and-win-our-own-game/953

@almino@ursal.zone ยท Reply to julia โšก

@julia Eu tava bisbilhotando um novo usuรกrio no Mastodon e percebi que quando ele clica no link pra outra instรขncia, ele tenta fazer login e dรก senha errada. Aรญ ele me avisa que tinha acabado de confirmar o e-mail e criar a senha e mesmo assim nรฃo conseguia entrar.

Foi aรญ que eu percebi que ele tava no domรญnio errado e que ele precisava usar a busca da sua prรณpria instรขncia pra acessar o link que ele queria (link pra uma postagem).

Isso รฉ um pouco difรญcil de explicar e รฉ uma barreira enorme para novos usuรกrios.

Eu atรฉ tentei conversar sobre um link especรญfico do , mas ninguรฉm deu a devida atenรงรฃo. O ideal รฉ que todo link pra dentro do Fediverso comeรงasse com activitypub:// e o aplicativo principal da pessoa se virava pra traduzir isso.

@fediforum@mastodon.social
@allancavanagh@mastodon.social

I can now publish from my blog to my existing account using plugin. Replies to the Bluesky post turn up as comments on the original.

I would love to do this with too but the plugin creates a new Mastodon profile, basically turning your website into an instance. There seems no way to link my blog to my existing Mastodon account.

It's a real shame to see this implemented for Bluesky but not Mastodon.

Screenshot of bluesky post
ALT text

Screenshot of bluesky post

@smallcircles@social.coop
@allancavanagh@mastodon.social

I can now publish from my blog to my existing account using plugin. Replies to the Bluesky post turn up as comments on the original.

I would love to do this with too but the plugin creates a new Mastodon profile, basically turning your website into an instance. There seems no way to link my blog to my existing Mastodon account.

It's a real shame to see this implemented for Bluesky but not Mastodon.

Screenshot of bluesky post
ALT text

Screenshot of bluesky post

@federatedmind@sfba.social

This week, we map the visual layer of the fediverse with current numbers (June 2026): Pixelfed, Loops, PeerTube, and ... Flickr?

Pixelfed: ~100K MAU across 700 servers. @dansup has been building it for eight years, mostly alone, turning down VC offers and funding it through a Kickstarter that raised CA$138K for a nonprofit foundation.

Loops: federated short-form video, also by dansup. mid-4,000s MAU, 26 servers. opt-in algorithmic feed (the default is chronological), trust-score moderation, no AI training on user content.

PeerTube: 47K MAU across 1,500+ servers. Framasoft (French nonprofit). the most infrastructure-heavy platform on the fediverse.

The visual web is the most expensive layer of the internet to decentralize. None of this was built on venture-scale economics.

Part 2 of the Fediverse Beyond Mastodon series.

More here: federatedmind.com/the-visual-f

A hand holding a smartphone displaying a social media feed, with glowing photo thumbnails lifting off the screen and floating into a starfield. Warm amber frames and teal highlights against a dark blue background.
ALT text

A hand holding a smartphone displaying a social media feed, with glowing photo thumbnails lifting off the screen and floating into a starfield. Warm amber frames and teal highlights against a dark blue background.

@federatedmind@sfba.social

This week, we map the visual layer of the fediverse with current numbers (June 2026): Pixelfed, Loops, PeerTube, and ... Flickr?

Pixelfed: ~100K MAU across 700 servers. @dansup has been building it for eight years, mostly alone, turning down VC offers and funding it through a Kickstarter that raised CA$138K for a nonprofit foundation.

Loops: federated short-form video, also by dansup. mid-4,000s MAU, 26 servers. opt-in algorithmic feed (the default is chronological), trust-score moderation, no AI training on user content.

PeerTube: 47K MAU across 1,500+ servers. Framasoft (French nonprofit). the most infrastructure-heavy platform on the fediverse.

The visual web is the most expensive layer of the internet to decentralize. None of this was built on venture-scale economics.

Part 2 of the Fediverse Beyond Mastodon series.

More here: federatedmind.com/the-visual-f

A hand holding a smartphone displaying a social media feed, with glowing photo thumbnails lifting off the screen and floating into a starfield. Warm amber frames and teal highlights against a dark blue background.
ALT text

A hand holding a smartphone displaying a social media feed, with glowing photo thumbnails lifting off the screen and floating into a starfield. Warm amber frames and teal highlights against a dark blue background.

@federatedmind@sfba.social

This week, we map the visual layer of the fediverse with current numbers (June 2026): Pixelfed, Loops, PeerTube, and ... Flickr?

Pixelfed: ~100K MAU across 700 servers. @dansup has been building it for eight years, mostly alone, turning down VC offers and funding it through a Kickstarter that raised CA$138K for a nonprofit foundation.

Loops: federated short-form video, also by dansup. mid-4,000s MAU, 26 servers. opt-in algorithmic feed (the default is chronological), trust-score moderation, no AI training on user content.

PeerTube: 47K MAU across 1,500+ servers. Framasoft (French nonprofit). the most infrastructure-heavy platform on the fediverse.

The visual web is the most expensive layer of the internet to decentralize. None of this was built on venture-scale economics.

Part 2 of the Fediverse Beyond Mastodon series.

More here: federatedmind.com/the-visual-f

A hand holding a smartphone displaying a social media feed, with glowing photo thumbnails lifting off the screen and floating into a starfield. Warm amber frames and teal highlights against a dark blue background.
ALT text

A hand holding a smartphone displaying a social media feed, with glowing photo thumbnails lifting off the screen and floating into a starfield. Warm amber frames and teal highlights against a dark blue background.

@kyonshi@dice.camp

experimenting with running an Enigma1/2 again. From what I can see it now can federate via , but the whole thing is a bit experimental. I managed to post something, I just can't seem to find it from my main account.

@evan@cosocial.ca ยท Reply to Evan Prodromou

@maxleibman I think your point about competing for follows is interesting. I don't think it's usually the direction things work, though. People usually follow topics they are interested in, via hashtag feeds, *then* follow people they found from that hashtag.

If people do decide to follow a hashtag rather than a person, though, that seems like it's OK? If someone decided they wanted to follow instead of following me, for whatever reason, that seems like it's up to them.

@talldudelifestyle@mastodon.social

๐ŸŒ Fediverse Community Poll: Threads Federation

Should our server preemptively block Threads? Please vote below & share your thoughts in replies.

Resources:
โ€ข Anti-Meta Fedi Pact: fedipact.online/
โ€ข Block list tracker: fedipact.veganism.social

This is a conversation starterโ€”not a demand. I trust our admins to decide with community input.

  • โœ… Yes, block immediately7 (58%)
  • โŒ No, keep federating3 (25%)
  • โณ Wait & see1 (8%)
  • ๐Ÿค” Unsure / need more info1 (8%)

fedipact.veganism.social

#Fedipact - The instances blocking Zuckerberg's Threads.net

An interactive list to see which ActivityPub (Matodon, Lemmy, FireFish, etc) instances are federating with Threads.net

@kkarhan@mastodon.social ยท Reply to TelH90

@alice That being said, I'm angry that dismissed the valid need to support blocklist feeds as it makes administrating and updating these a nightmare requiring everyone to basically setup their own and a "replace" with the .
github.com/mastodon/mastodon/i

I've yet to find some Server Software (or even Middleware similar to ) that can do that - even for individual accountsโ€ฆ

github.com

Blocklist Feed Support ยท Issue #28605 ยท mastodon/mastodon

Pitch Besides manually adding a CSV file for blocks under /settings/imports , the option to automatically pull and update / overwrite blocklists would be greatly appreciated. This could also provid...

@cmars@infosec.exchange ยท Reply to Teoh Han Hui

@teohhanhui I've been playing with ideas in codeberg.org/cmars/medina recently (very incomplete and slightly incoherent rough sketch). I had this idea of a hub or relay where the identities are moderated but the clients own their keys and data in a portable db which could be hosted by an instance or relayed. Exploring that balance between moderation and autonomy. I'm also testing some of these ideas with in another project that I haven't shared yet.

Looks like you're using which I haven't tried yet. It's hard for me to commit to side-projects right now, but very interested to see how your project goes!

codeberg.org

medina

A station between worlds. Relaying messages in bottles during dark times.

@teohhanhui@mastodon.social

This is a bit of a long shot, but I'm looking for a collaborator to build something together. (It's just a hobby project that will NEVER be commercialized or monetized. I'm a jobless programmer and I just need to code shit.)

What: Some kind of p2p ActivityPub software.

What I have now: codeberg.org/teohhanhui/tapir2p (there's nothing ActivityPub in there yet)

Disclaimer: I have no prior experience with ActivityPub / Fediverse development. I have been reading up though...

codeberg.org

tapir2p

[WIP] A peer-to-peer ActivityPub experiment

@talldudelifestyle@mastodon.social

๐ŸŒ Fediverse Community Poll: Threads Federation

Should our server preemptively block Threads? Please vote below & share your thoughts in replies.

Resources:
โ€ข Anti-Meta Fedi Pact: fedipact.online/
โ€ข Block list tracker: fedipact.veganism.social

This is a conversation starterโ€”not a demand. I trust our admins to decide with community input.

  • โœ… Yes, block immediately7 (58%)
  • โŒ No, keep federating3 (25%)
  • โณ Wait & see1 (8%)
  • ๐Ÿค” Unsure / need more info1 (8%)

fedipact.veganism.social

#Fedipact - The instances blocking Zuckerberg's Threads.net

An interactive list to see which ActivityPub (Matodon, Lemmy, FireFish, etc) instances are federating with Threads.net

@kkarhan@mastodon.social ยท Reply to TelH90

@alice That being said, I'm angry that dismissed the valid need to support blocklist feeds as it makes administrating and updating these a nightmare requiring everyone to basically setup their own and a "replace" with the .
github.com/mastodon/mastodon/i

I've yet to find some Server Software (or even Middleware similar to ) that can do that - even for individual accountsโ€ฆ

github.com

Blocklist Feed Support ยท Issue #28605 ยท mastodon/mastodon

Pitch Besides manually adding a CSV file for blocks under /settings/imports , the option to automatically pull and update / overwrite blocklists would be greatly appreciated. This could also provid...

@cmars@infosec.exchange ยท Reply to Teoh Han Hui

@teohhanhui I've been playing with ideas in codeberg.org/cmars/medina recently (very incomplete and slightly incoherent rough sketch). I had this idea of a hub or relay where the identities are moderated but the clients own their keys and data in a portable db which could be hosted by an instance or relayed. Exploring that balance between moderation and autonomy. I'm also testing some of these ideas with in another project that I haven't shared yet.

Looks like you're using which I haven't tried yet. It's hard for me to commit to side-projects right now, but very interested to see how your project goes!

codeberg.org

medina

A station between worlds. Relaying messages in bottles during dark times.

@teohhanhui@mastodon.social

This is a bit of a long shot, but I'm looking for a collaborator to build something together. (It's just a hobby project that will NEVER be commercialized or monetized. I'm a jobless programmer and I just need to code shit.)

What: Some kind of p2p ActivityPub software.

What I have now: codeberg.org/teohhanhui/tapir2p (there's nothing ActivityPub in there yet)

Disclaimer: I have no prior experience with ActivityPub / Fediverse development. I have been reading up though...

codeberg.org

tapir2p

[WIP] A peer-to-peer ActivityPub experiment

@dansup@mastodon.social

I'm thinking a federated wiki type service with a trust metric that allows more trusted users to moderate/curate edits.

We could expand this beyond related hashtags.

mastodon.social

dansup (@dansup@mastodon.social)

Attached: 2 images Pixelfed has a related hashtags feature, and I'm thinking maybe we should create a global corpus to help curate them. What do you think?

@dansup@mastodon.social

Pixelfed has a related hashtags feature, and I'm thinking maybe we should create a global corpus to help curate them.

What do you think?

Pixelfed new mobile app hashtag screen
ALT text

Pixelfed new mobile app hashtag screen

Pixelfed new mobile app hashtag screen in grid mode
ALT text

Pixelfed new mobile app hashtag screen in grid mode

@matt@fedi.mattharwood.com

I've been poking around various #ActivityPub projects and one thing led to another - I realised there's not great JSON-LD support (at least, v1.1) in the .NET world. The most popular package works (for v1.0), but is roughly ported from Java, which was roughly ported from JS. It also has a dep on NewtonsoftJson.

All of which is to say I've started work on a .NET library for JSON-LD because life didn't have enough hassle in it ๐Ÿ˜‰ v0.1 will only cover some of the spec - but should prove useful. It'll use `System.Text.Json`. I'll post updates here as I go.

@dansup@mastodon.social

I'm thinking a federated wiki type service with a trust metric that allows more trusted users to moderate/curate edits.

We could expand this beyond related hashtags.

mastodon.social

dansup (@dansup@mastodon.social)

Attached: 2 images Pixelfed has a related hashtags feature, and I'm thinking maybe we should create a global corpus to help curate them. What do you think?

@dansup@mastodon.social

Pixelfed has a related hashtags feature, and I'm thinking maybe we should create a global corpus to help curate them.

What do you think?

Pixelfed new mobile app hashtag screen
ALT text

Pixelfed new mobile app hashtag screen

Pixelfed new mobile app hashtag screen in grid mode
ALT text

Pixelfed new mobile app hashtag screen in grid mode

@dansup@mastodon.social

Took a lil break from Pixelfed dev to update the fedicon.ca website, I hope @reiver approves and merges the PR!

dansup.github.io/fedicon-www/

It's much cleaner and informative, though it does need the final schedule and speakers.

I also added some logic to hide sections after certain dates ๐Ÿ˜Ž

fedicon.ca

FediCon โ€” Fediverse Conference

2 day Fediverse Conference from August 6th and 9th, 2026

@dansup@mastodon.social

Took a lil break from Pixelfed dev to update the fedicon.ca website, I hope @reiver approves and merges the PR!

dansup.github.io/fedicon-www/

It's much cleaner and informative, though it does need the final schedule and speakers.

I also added some logic to hide sections after certain dates ๐Ÿ˜Ž

fedicon.ca

FediCon โ€” Fediverse Conference

2 day Fediverse Conference from August 6th and 9th, 2026

@apps@toot.fedilab.app

lets you run your own server on your device. The goal is to let everyone using AP with a phone or a computer reach full independence, through custom domains and by hosting your media on your own cloud.
This is not a hack of AP (as I have read), everything stays within the spec. The project simply lets you be fully independent. You can reach full independence step by step. And DMs already work through AP.

Don't hesitate to join: holos.social

holos.social

Fediverse Relay - Your Device is Your Fediverse Server

Your device is your fediverse server. End-to-end encrypted DMs, multi-device sync, custom domains. Powered by ActivityPub.

@apps@toot.fedilab.app

lets you run your own server on your device. The goal is to let everyone using AP with a phone or a computer reach full independence, through custom domains and by hosting your media on your own cloud.
This is not a hack of AP (as I have read), everything stays within the spec. The project simply lets you be fully independent. You can reach full independence step by step. And DMs already work through AP.

Don't hesitate to join: holos.social

holos.social

Fediverse Relay - Your Device is Your Fediverse Server

Your device is your fediverse server. End-to-end encrypted DMs, multi-device sync, custom domains. Powered by ActivityPub.

@apps@toot.fedilab.app

lets you run your own server on your device. The goal is to let everyone using AP with a phone or a computer reach full independence, through custom domains and by hosting your media on your own cloud.
This is not a hack of AP (as I have read), everything stays within the spec. The project simply lets you be fully independent. You can reach full independence step by step. And DMs already work through AP.

Don't hesitate to join: holos.social

holos.social

Fediverse Relay - Your Device is Your Fediverse Server

Your device is your fediverse server. End-to-end encrypted DMs, multi-device sync, custom domains. Powered by ActivityPub.

@apps@toot.fedilab.app

lets you run your own server on your device. The goal is to let everyone using AP with a phone or a computer reach full independence, through custom domains and by hosting your media on your own cloud.
This is not a hack of AP (as I have read), everything stays within the spec. The project simply lets you be fully independent. You can reach full independence step by step. And DMs already work through AP.

Don't hesitate to join: holos.social

holos.social

Fediverse Relay - Your Device is Your Fediverse Server

Your device is your fediverse server. End-to-end encrypted DMs, multi-device sync, custom domains. Powered by ActivityPub.

@weekinfediverse@mitra.social
@weekinfediverse@mitra.social
@weekinfediverse@mitra.social
@apps@toot.fedilab.app

lets you run your own server on your device. The goal is to let everyone using AP with a phone or a computer reach full independence, through custom domains and by hosting your media on your own cloud.
This is not a hack of AP (as I have read), everything stays within the spec. The project simply lets you be fully independent. You can reach full independence step by step. And DMs already work through AP.

Don't hesitate to join: holos.social

holos.social

Fediverse Relay - Your Device is Your Fediverse Server

Your device is your fediverse server. End-to-end encrypted DMs, multi-device sync, custom domains. Powered by ActivityPub.

@grishka@mastodon.social

Wow, Misskey has finally added the replies collection to posts??? Nice. Even fewer incomplete threads.

@grishka@mastodon.social

Wow, Misskey has finally added the replies collection to posts??? Nice. Even fewer incomplete threads.

@weekinfediverse@mitra.social
@evan@cosocial.ca

@snarfed.org @quillmatiq @bnewbold.net @trwnh @darius @dmitri @thisismissem and others.

Bluesky is working on a new Communities feature for ATProto. At the same time, the at the W3C is working on Groups features for .

It would be a missed opportunity if we used wildly different architectural patterns that made bridging the two models impossible.

I opened up an issue on our GitHub repo to discuss how we can minimise that:

github.com/swicg/groups/issues

github.com

Bridgeable interoperability with BlueSky Communities ยท Issue #55 ยท swicg/groups

BlueSky announced a new communities feature for ATProto under development. Working on groups in ActivityPub at the same time as this development is happening in the ATProto community seems like a u...

@jcm@wafrn.jcm.re

A few #ActivityPub questions I am hoping someone can answer for me:

  • How good is the support for Ed25519 keys and signatures across the Fediverse? What happens if my instance only does Ed25519 signing and another instance does not support it? What if I try to make an Authorized Fetch signed with Ed25519?
  • Can I use the same key pair for all users on my instance?
  • Is there a functional difference between using an instance actor or the admin user for Authorized Fetch signatures?
  • If I don't want to implement an Outbox (since it seems like the Fediverse has moved away from it), does my endpoint for it still need to exist?
  • What is the worst thing a bad actor could do if my account's private key is compromised?

#fediverse #activitypub #ActivityPub

wafrn.jcm.re

Wafrn, the social media that respects you

Wafrn is a federated social media inspired by tumblr that connects with the fediverse and bluesky

@jcm@wafrn.jcm.re

A few #ActivityPub questions I am hoping someone can answer for me:

  • How good is the support for Ed25519 keys and signatures across the Fediverse? What happens if my instance only does Ed25519 signing and another instance does not support it? What if I try to make an Authorized Fetch signed with Ed25519?
  • Can I use the same key pair for all users on my instance?
  • Is there a functional difference between using an instance actor or the admin user for Authorized Fetch signatures?
  • If I don't want to implement an Outbox (since it seems like the Fediverse has moved away from it), does my endpoint for it still need to exist?
  • What is the worst thing a bad actor could do if my account's private key is compromised?

#fediverse #activitypub #ActivityPub

wafrn.jcm.re

Wafrn, the social media that respects you

Wafrn is a federated social media inspired by tumblr that connects with the fediverse and bluesky

@jcm@wafrn.jcm.re

A few #ActivityPub questions I am hoping someone can answer for me:

  • How good is the support for Ed25519 keys and signatures across the Fediverse? What happens if my instance only does Ed25519 signing and another instance does not support it? What if I try to make an Authorized Fetch signed with Ed25519?
  • Can I use the same key pair for all users on my instance?
  • Is there a functional difference between using an instance actor or the admin user for Authorized Fetch signatures?
  • If I don't want to implement an Outbox (since it seems like the Fediverse has moved away from it), does my endpoint for it still need to exist?
  • What is the worst thing a bad actor could do if my account's private key is compromised?

#fediverse #activitypub #ActivityPub

wafrn.jcm.re

Wafrn, the social media that respects you

Wafrn is a federated social media inspired by tumblr that connects with the fediverse and bluesky

@evan@cosocial.ca

@snarfed.org @quillmatiq @bnewbold.net @trwnh @darius @dmitri @thisismissem and others.

Bluesky is working on a new Communities feature for ATProto. At the same time, the at the W3C is working on Groups features for .

It would be a missed opportunity if we used wildly different architectural patterns that made bridging the two models impossible.

I opened up an issue on our GitHub repo to discuss how we can minimise that:

github.com/swicg/groups/issues

github.com

Bridgeable interoperability with BlueSky Communities ยท Issue #55 ยท swicg/groups

BlueSky announced a new communities feature for ATProto under development. Working on groups in ActivityPub at the same time as this development is happening in the ATProto community seems like a u...

@evan@cosocial.ca

@snarfed.org @quillmatiq @bnewbold.net @trwnh @darius @dmitri @thisismissem and others.

Bluesky is working on a new Communities feature for ATProto. At the same time, the at the W3C is working on Groups features for .

It would be a missed opportunity if we used wildly different architectural patterns that made bridging the two models impossible.

I opened up an issue on our GitHub repo to discuss how we can minimise that:

github.com/swicg/groups/issues

github.com

Bridgeable interoperability with BlueSky Communities ยท Issue #55 ยท swicg/groups

BlueSky announced a new communities feature for ATProto under development. Working on groups in ActivityPub at the same time as this development is happening in the ATProto community seems like a u...

@toddsundsted@epiktistes.com

It is said that there are only two hard things in computer science: cache invalidation and naming things. The story goes: you have something that is expensive to compute, so you compute it once and then you cache it and use the cached value in the future. But the inputs to that computation change, and so the cached value grows stale. You have to decide when and how to recompute that value.

In Ktistec, presenting accurate tag counts is expensive because not every tagged post counts. Posts are deleted, actors are blocked. My own drafts don't count, but when they're published they do. A post tagged with the same hashtag more than once, must count as one. And tag cardinality is not uniform: has hundreds of thousands of posts, others have one or two. Even with indexes, there is no single query that counts all cases in an acceptable amount of time.

So I reached for a cache, counted once and then cached the count. Because I didn't want to maintain adjustments from every place in the code that changed something that touched the count, I settled for eventual consistency and recomputed counts after every server restart.

As it turns out, that's not good enough. On a server with reasonable traffic, an event that affects some tag's count happens every few hours. Days or weeks later there is significant drift. Worse, the implementation didn't recompute on first read, it recomputed on first write (a new tagged object arrives).

This release fixes all that. Counts are still eventually consistent, but all counts are recomputed in a regular background task, so they really are eventually consistent, and care was taken in constructing the query to minimize database (read) locking to ~100-200msec.

Is it better? Yes! Is it perfect? Probably not. Cache invalidation is hard.

Here's the full changelog for this release:

Added

  • Background task to reconcile tag statistics.

Fixed

  • Prevent model hook callbacks from interleaving.
  • Add spacing between content and the sticky footer.

Changed

  • Replace Semantic UI with Fomantic UI.
  • Cache the PURL and GoToSocial JSON-LD contexts.
  • Reduce database lock time when reconciling tags.
  • Block npm dependency install scripts.

Removed

  • The unused idx_relationships_type database index.

In the next release, I'm going to fix a few bugs in the Mastodon-compatible API. These require an internal redesign, so I've held off until a few other things were out of the way. And I'm turning my attention to reading and better tools for surfacing and finding interesting content.

Owning My Fediverse Identity: Migrating Mastodon to Self-Hosted GoToSocial
ALT text

Owning My Fediverse Identity: Migrating Mastodon to Self-Hosted GoToSocial

Owning My Fediverse Identity: Migrating Mastodon to Self-Hosted GoToSocial
ALT text

Owning My Fediverse Identity: Migrating Mastodon to Self-Hosted GoToSocial

@toddsundsted@epiktistes.com

It is said that there are only two hard things in computer science: cache invalidation and naming things. The story goes: you have something that is expensive to compute, so you compute it once and then you cache it and use the cached value in the future. But the inputs to that computation change, and so the cached value grows stale. You have to decide when and how to recompute that value.

In Ktistec, presenting accurate tag counts is expensive because not every tagged post counts. Posts are deleted, actors are blocked. My own drafts don't count, but when they're published they do. A post tagged with the same hashtag more than once, must count as one. And tag cardinality is not uniform: has hundreds of thousands of posts, others have one or two. Even with indexes, there is no single query that counts all cases in an acceptable amount of time.

So I reached for a cache, counted once and then cached the count. Because I didn't want to maintain adjustments from every place in the code that changed something that touched the count, I settled for eventual consistency and recomputed counts after every server restart.

As it turns out, that's not good enough. On a server with reasonable traffic, an event that affects some tag's count happens every few hours. Days or weeks later there is significant drift. Worse, the implementation didn't recompute on first read, it recomputed on first write (a new tagged object arrives).

This release fixes all that. Counts are still eventually consistent, but all counts are recomputed in a regular background task, so they really are eventually consistent, and care was taken in constructing the query to minimize database (read) locking to ~100-200msec.

Is it better? Yes! Is it perfect? Probably not. Cache invalidation is hard.

Here's the full changelog for this release:

Added

  • Background task to reconcile tag statistics.

Fixed

  • Prevent model hook callbacks from interleaving.
  • Add spacing between content and the sticky footer.

Changed

  • Replace Semantic UI with Fomantic UI.
  • Cache the PURL and GoToSocial JSON-LD contexts.
  • Reduce database lock time when reconciling tags.
  • Block npm dependency install scripts.

Removed

  • The unused idx_relationships_type database index.

In the next release, I'm going to fix a few bugs in the Mastodon-compatible API. These require an internal redesign, so I've held off until a few other things were out of the way. And I'm turning my attention to reading and better tools for surfacing and finding interesting content.

Owning My Fediverse Identity: Migrating Mastodon to Self-Hosted GoToSocial
ALT text

Owning My Fediverse Identity: Migrating Mastodon to Self-Hosted GoToSocial

Owning My Fediverse Identity: Migrating Mastodon to Self-Hosted GoToSocial
ALT text

Owning My Fediverse Identity: Migrating Mastodon to Self-Hosted GoToSocial

@mray@social.tchncs.de

ActivityPub = Fediverse
Fediverse = ActivityPub

If other federated things like XMPP, Matrix or E-Mail were part of it, the Fediverse would exist at least since 1971.

Nobody saying "Fediverse" talks about something older than the web.

@mray@social.tchncs.de

ActivityPub = Fediverse
Fediverse = ActivityPub

If other federated things like XMPP, Matrix or E-Mail were part of it, the Fediverse would exist at least since 1971.

Nobody saying "Fediverse" talks about something older than the web.

@grishka@mastodon.social

Wow, Misskey has finally added the replies collection to posts??? Nice. Even fewer incomplete threads.

@internetarchive@mastodon.archive.org ยท Reply to internetarchive

3/3 Participants will take part in talks, workshops, and hands-on collaboration exploring what a more resilient, open, and decentralised web could look like in practice.

DWeb Camp is a space for building, not just talking about, the web we want.

@brewsterkahle @internetarchiveeurope @dweb

A large group of DWeb Camp attendees seated in a circle on a patterned rug inside a white open-sided tent, engaged in a structured group discussion, with a flipchart easel and sunny outdoor landscape visible behind them.
ALT text

A large group of DWeb Camp attendees seated in a circle on a patterned rug inside a white open-sided tent, engaged in a structured group discussion, with a flipchart easel and sunny outdoor landscape visible behind them.

DWeb Camp attendees relaxing and conversing in inflatable lounge chairs among tall redwood trees, with teal paper lanterns strung overhead and a hammock visible in the background.
ALT text

DWeb Camp attendees relaxing and conversing in inflatable lounge chairs among tall redwood trees, with teal paper lanterns strung overhead and a hammock visible in the background.

@evan@cosocial.ca ยท Reply to Evan Prodromou

@js @dave side note: I don't know if you're aware of what an important tool browser.pub is. I use it almost every day in standards work. Talking with ActivityPub developers, they will pull up browser.pub to show examples of their activities. It's really important to the community.

@evan@cosocial.ca ยท Reply to Evan Prodromou

@js @dave side note: I don't know if you're aware of what an important tool browser.pub is. I use it almost every day in standards work. Talking with ActivityPub developers, they will pull up browser.pub to show examples of their activities. It's really important to the community.

@evan@cosocial.ca ยท Reply to Evan Prodromou

@js @dave side note: I don't know if you're aware of what an important tool browser.pub is. I use it almost every day in standards work. Talking with ActivityPub developers, they will pull up browser.pub to show examples of their activities. It's really important to the community.

@matt@fedi.mattharwood.com

Feeling reckless in my heat-induced, sleep-deprived state. I upgraded to the latest GoToSocial release candidate that adds support for #ActivityPub relay servers, and added a couple to push to, and one to ingest. Might wake up (if sleep comes, that is!) to a full VPS, but we'll see!

@internetarchive@mastodon.archive.org ยท Reply to internetarchive

3/3 Participants will take part in talks, workshops, and hands-on collaboration exploring what a more resilient, open, and decentralised web could look like in practice.

DWeb Camp is a space for building, not just talking about, the web we want.

@brewsterkahle @internetarchiveeurope @dweb

A large group of DWeb Camp attendees seated in a circle on a patterned rug inside a white open-sided tent, engaged in a structured group discussion, with a flipchart easel and sunny outdoor landscape visible behind them.
ALT text

A large group of DWeb Camp attendees seated in a circle on a patterned rug inside a white open-sided tent, engaged in a structured group discussion, with a flipchart easel and sunny outdoor landscape visible behind them.

DWeb Camp attendees relaxing and conversing in inflatable lounge chairs among tall redwood trees, with teal paper lanterns strung overhead and a hammock visible in the background.
ALT text

DWeb Camp attendees relaxing and conversing in inflatable lounge chairs among tall redwood trees, with teal paper lanterns strung overhead and a hammock visible in the background.

@prismo@mastodon.social

Do you think there is still a room for Prismo in fediverse? We have couple of amazing projects already, doing something similar or much more (lemmy and piefed as an examples). Would love to hear your thoughts in the comments!

  • Yes, there is still a room3 (100%)
  • No, move on to something else0 (0%)
@federatedmind@techhub.social

Dug into the ActivityPub platforms beyond Mastodon with current FediDB numbers (June 2026): Misskey and its fork family, Pleroma and Akkoma, Friendica, GoToSocial, and the Threadiverse.

Misskey's custom emoji culture runs deeper than it sounds. Instances maintain hand-drawn reaction libraries that federate across the network. The closest analogue is early Slack workspace emoji culture, but federated.

Friendica has been federating since 2010 via its own DFRN protocol, Diaspora*, and OStatus. It added ActivityPub in 2019, consistent with its core goal of bridging every federation protocol it can reach.

GoToSocial exists for people who want a personal fediverse presence but find Mastodon too heavy to self-host. 250MB RAM, SQLite, no web client of its own. Runs on a Raspberry Pi.

Part 1 of the "Fediverse beyond Mastodon" series. Part 2 covers the visual fediverse: Pixelfed, Loops, and PeerTube.

โ†’ federatedmind.com/misskey-pler

Abstract digital art on a dark navy background showing a radial burst of colorful geometric shapes and particles in mint green, coral red, amber, and teal. Scattered sticker-like elements suggest emoji reactions and expressive digital culture. Federated Mind brain logo watermark in the bottom right corner.
ALT text

Abstract digital art on a dark navy background showing a radial burst of colorful geometric shapes and particles in mint green, coral red, amber, and teal. Scattered sticker-like elements suggest emoji reactions and expressive digital culture. Federated Mind brain logo watermark in the bottom right corner.

@federatedmind@sfba.social

Dug into the ActivityPub platforms beyond Mastodon with current FediDB numbers (June 2026): Misskey and its fork family, Pleroma and Akkoma, Friendica, GoToSocial, and the Threadiverse.

Misskey's custom emoji culture runs deeper than it sounds. Instances maintain hand-drawn reaction libraries that federate across the network. The closest analogue is early Slack workspace emoji culture, but federated.

Friendica has been federating since 2010 via its own DFRN protocol, Diaspora*, and OStatus. It added ActivityPub in 2019, consistent with its core goal of bridging every federation protocol it can reach.

Part 1 of the "Fediverse Beyond Mastodon" series inside the greater "Exploring the Fediverse" series. Part 2 will cover the visual fediverse: Pixelfed, Loops, and PeerTube.

โ†’ federatedmind.com/misskey-pler

Abstract digital art on a dark navy background showing a radial burst of colorful geometric shapes and particles in mint green, coral red, amber, and teal. Scattered sticker-like elements suggest emoji reactions and expressive digital culture. Federated Mind brain logo watermark in the bottom right corner.
ALT text

Abstract digital art on a dark navy background showing a radial burst of colorful geometric shapes and particles in mint green, coral red, amber, and teal. Scattered sticker-like elements suggest emoji reactions and expressive digital culture. Federated Mind brain logo watermark in the bottom right corner.

@federatedmind@techhub.social

Dug into the ActivityPub platforms beyond Mastodon with current FediDB numbers (June 2026): Misskey and its fork family, Pleroma and Akkoma, Friendica, GoToSocial, and the Threadiverse.

Misskey's custom emoji culture runs deeper than it sounds. Instances maintain hand-drawn reaction libraries that federate across the network. The closest analogue is early Slack workspace emoji culture, but federated.

Friendica has been federating since 2010 via its own DFRN protocol, Diaspora*, and OStatus. It added ActivityPub in 2019, consistent with its core goal of bridging every federation protocol it can reach.

GoToSocial exists for people who want a personal fediverse presence but find Mastodon too heavy to self-host. 250MB RAM, SQLite, no web client of its own. Runs on a Raspberry Pi.

Part 1 of the "Fediverse beyond Mastodon" series. Part 2 covers the visual fediverse: Pixelfed, Loops, and PeerTube.

โ†’ federatedmind.com/misskey-pler

Abstract digital art on a dark navy background showing a radial burst of colorful geometric shapes and particles in mint green, coral red, amber, and teal. Scattered sticker-like elements suggest emoji reactions and expressive digital culture. Federated Mind brain logo watermark in the bottom right corner.
ALT text

Abstract digital art on a dark navy background showing a radial burst of colorful geometric shapes and particles in mint green, coral red, amber, and teal. Scattered sticker-like elements suggest emoji reactions and expressive digital culture. Federated Mind brain logo watermark in the bottom right corner.

@prismo@mastodon.social

Do you think there is still a room for Prismo in fediverse? We have couple of amazing projects already, doing something similar or much more (lemmy and piefed as an examples). Would love to hear your thoughts in the comments!

  • Yes, there is still a room3 (100%)
  • No, move on to something else0 (0%)
@prismo@mastodon.social

Do you think there is still a room for Prismo in fediverse? We have couple of amazing projects already, doing something similar or much more (lemmy and piefed as an examples). Would love to hear your thoughts in the comments!

  • Yes, there is still a room3 (100%)
  • No, move on to something else0 (0%)
@arokk@app.wafrn.net

I give up.

I have tried every way I can to establish a private instance for all of my #fediverse and #socialnetworking needs. I've tried Hubzilla, GNUSocial, and Friendica, but maintaining the cost of a virtual private server isn't justifiable to me and those apps don't play well with shared hosting, which is all I can afford right now (and I don't have the space to set up a personal server).

The fact of the matter is that the only self-hosted application that checks the boxes of being a) dead simple to install on shared hosting--preferably through Softaculous since I just don't feel like jumping through hoops, b) well-supported, c) easy to use, and d) able to connect with both ActivityPub and AT protocols is WordPress, which I am reluctant to use because Matt Mullenweg is a pretty detestable as a human.

That said, I am holding my nose and using WordPress as my social networking hub until and unless something that isn't tainted with Mullenweg's nonsense comes along, so here I be.

I am rebuilding my profile and follow lists, and I apologize to those of you who seem to get a new follow request from me every other day, but I plan on this being the last time until the unlikely WordPress-killer comes around.

Thank you for your patience.


#activitypub #self-hosting #bluesky #fediverse #mastodon #WAFRN #pixelfed #loops #fediverse #socialnetworking

app.wafrn.net

Wafrn, the social media that respects you

Wafrn is a federated social media inspired by tumblr that connects with the fediverse and bluesky

@arokk@app.wafrn.net

I give up.

I have tried every way I can to establish a private instance for all of my #fediverse and #socialnetworking needs. I've tried Hubzilla, GNUSocial, and Friendica, but maintaining the cost of a virtual private server isn't justifiable to me and those apps don't play well with shared hosting, which is all I can afford right now (and I don't have the space to set up a personal server).

The fact of the matter is that the only self-hosted application that checks the boxes of being a) dead simple to install on shared hosting--preferably through Softaculous since I just don't feel like jumping through hoops, b) well-supported, c) easy to use, and d) able to connect with both ActivityPub and AT protocols is WordPress, which I am reluctant to use because Matt Mullenweg is a pretty detestable as a human.

That said, I am holding my nose and using WordPress as my social networking hub until and unless something that isn't tainted with Mullenweg's nonsense comes along, so here I be.

I am rebuilding my profile and follow lists, and I apologize to those of you who seem to get a new follow request from me every other day, but I plan on this being the last time until the unlikely WordPress-killer comes around.

Thank you for your patience.


#activitypub #self-hosting #bluesky #fediverse #mastodon #WAFRN #pixelfed #loops #fediverse #socialnetworking

app.wafrn.net

Wafrn, the social media that respects you

Wafrn is a federated social media inspired by tumblr that connects with the fediverse and bluesky

@prismo@mastodon.social

Do you think there is still a room for Prismo in fediverse? We have couple of amazing projects already, doing something similar or much more (lemmy and piefed as an examples). Would love to hear your thoughts in the comments!

  • Yes, there is still a room3 (100%)
  • No, move on to something else0 (0%)
@dansup@mastodon.social

Loops + ActivityIntents

Imagine someone sending you a loops.video link and you view it (without a loops.video account), and want to boost it from your own server.

With Activity Intents, this is easily possible, with first class support on Loops โœจ

Loops ActivityIntents demo
ALT text

Loops ActivityIntents demo

@dansup@mastodon.social

Loops + ActivityIntents

Imagine someone sending you a loops.video link and you view it (without a loops.video account), and want to boost it from your own server.

With Activity Intents, this is easily possible, with first class support on Loops โœจ

Loops ActivityIntents demo
ALT text

Loops ActivityIntents demo

@dansup@mastodon.social

Loops + ActivityIntents

Imagine someone sending you a loops.video link and you view it (without a loops.video account), and want to boost it from your own server.

With Activity Intents, this is easily possible, with first class support on Loops โœจ

Loops ActivityIntents demo
ALT text

Loops ActivityIntents demo

@archi_dagac@ieji.de

Hello Mastodon and Fediverse! I should have been there long too before.

(I mean "I should have joined much earlier.")
Thanks to peers of fediverse. I like ActivityPub.
Thanks to @eayavas@mstdn.social @eayavas@pixey.org @eayavas@lemmy.ml @anlar to make me join there.โ€‹


@apps@toot.fedilab.app

Summer is here, and sadly it is peak season for pet abandonment.
is a federated map for animal welfare built on and .

It already shows shelters and vets near you. Found an abandoned animal or need help? Mention @PawFed from any account: a pin lands on the map, and your call is relayed across the , whatever your instance.

More: pawfed.org/how-it-works

pawfed.org

PawFed

Federated platform to help animals through shelters and community

@apps@toot.fedilab.app

Summer is here, and sadly it is peak season for pet abandonment.
is a federated map for animal welfare built on and .

It already shows shelters and vets near you. Found an abandoned animal or need help? Mention @PawFed from any account: a pin lands on the map, and your call is relayed across the , whatever your instance.

More: pawfed.org/how-it-works

pawfed.org

PawFed

Federated platform to help animals through shelters and community

@apps@toot.fedilab.app

Summer is here, and sadly it is peak season for pet abandonment.
is a federated map for animal welfare built on and .

It already shows shelters and vets near you. Found an abandoned animal or need help? Mention @PawFed from any account: a pin lands on the map, and your call is relayed across the , whatever your instance.

More: pawfed.org/how-it-works

pawfed.org

PawFed

Federated platform to help animals through shelters and community

@apps@toot.fedilab.app

Summer is here, and sadly it is peak season for pet abandonment.
is a federated map for animal welfare built on and .

It already shows shelters and vets near you. Found an abandoned animal or need help? Mention @PawFed from any account: a pin lands on the map, and your call is relayed across the , whatever your instance.

More: pawfed.org/how-it-works

pawfed.org

PawFed

Federated platform to help animals through shelters and community

@evan@cosocial.ca
@sl007@digitalcourage.social ยท Reply to 404 Media

@404mediaco

I wonder if the task is too easy or to heavy to (most) publishers:

Independent Media:
Just use this wonderful protocol here to create your own plattforms, audience and possibilities.
It is completely open.
It supports multilanguage and Linked Data for all the wonderful agency / editors vocabularies.
In digital times it is by far not enough to create words only. You need to create the surface too.
About the possibilities of ActivityPub don't hesitate, AMA

@smallcircles@social.coop

:blobhyperthink:

today is like plaintext email.

Whereas is rich email, where we can represent anything, be it an Invoice, Order confirmation, Postal package tracker, Train ticket, Concert booking, Restaurant reservation, Shopping list, Cooking recipe, Science paper, Academic citation, Sport coverage, Adventure game ..

Wherever your fantasy goes.

social.coop/@smallcircles/1167

social.coop

๐Ÿซง Social coding commons (@smallcircles@social.coop)

@innocentzero@social.tchncs.de @ricci@discuss.systems Just had the most horrifying UX parsing this thread in Mastodon's microblog feed, likely causing 10x more network overhead than needed, and replied to @cwebber quote: https://social.coop/@smallcircles/116792896530026124 Stepping away from ATProto vs. AP I was most intrigued by @dialecticalmusings@app.wafrn.net comment: > People arguing about moderation and community building often have fundamentally differing visions for the political economy of the Fediverse, but those differences never get unpacked, so people end up talking past each other. What is never answered well is: What is fediverse? I'd argue it is just a common utility word like internet and web, denoting a communication medium. What do you do with this medium is then the next question. Well, the power of ActivityPub allows us "to extend constructs of society online" to support our daily needs. But on the basis of some warped microblog abstraction turned into a pretzel by bolting on features to hang everything off, this is not possible.

@smallcircles@social.coop ยท Reply to Christine Lemmer-Webber

@innocentzero @ricci

Just had the most horrifying UX parsing this thread in Mastodon's microblog feed, likely causing 10x more network overhead than needed, and replied to @cwebber quote:

social.coop/@smallcircles/1167

Stepping away from ATProto vs. AP I was most intrigued by @dialecticalmusings comment:

> People arguing about moderation and community building often have fundamentally differing visions for the political economy of the Fediverse, but those differences never get unpacked, so people end up talking past each other.

What is never answered well is: What is fediverse? I'd argue it is just a common utility word like internet and web, denoting a communication medium.

What do you do with this medium is then the next question. Well, the power of ActivityPub allows us "to extend constructs of society online" to support our daily needs.

But on the basis of some warped microblog abstraction turned into a pretzel by bolting on features to hang everything off, this is not possible.

social.coop

๐Ÿซง Social coding commons (@smallcircles@social.coop)

@cwebber I mentioned often how the way we accepted the fediverse to evolve, via post-facto interoperability, continually introduces protocol decay. Resulting in an app-centric fedi that represents more of a universal microblogging environment, with a range of abstractions being introduced besides the instance. As you say, there's only actors. My observation is that fediverse-we-have side-tracked from ActivityPub, losing much of its versatility and power, and that a course correction is in order for current fedi to be on track again towards becoming the Future of Social networking. > My biggest regret This is not a past station. A proper grassroots standardization process should be able to guide evolution in healthy direction. My conclusion is that fedi is currently at an inflection point where it chooses its future: back to original power, or a glorified distributed microblog. I put my concerns, thoughts on solutions, and a brainstorm in a lengthy article: https://coding.social/blog/grassroots-evolution

@ferlagod@frikiverse.zone
@smallcircles@social.coop ยท Reply to Daniel Supernault

@dansup

I agree on the gist, but with a twist. The control is in sustainable and healthy evolution of the protocol, which in turn will stimulate organic growth.

I am also a dreamer, and in my dream ActivityPub remains commons based, of the people by the people. I'd love to see Pixelfed and Loops and many other fedi services to gain adoption by millions and billions, because you and those others share value alignment. We dream collectively of making the world a better place.

Unfortunately isn't commons based at the moment. At this point in time every increase in popularity of the fediverse is an attractor of commercial interests. Large platforms prove that there is a market. And very large platforms become a threat to established players, who are then forced to act.

Contrary to perhaps you and others, I don't think that corporate capture and takeover can be avoided once Big Tech giants decide to go all-in and throw billions bucks, 1,000's employees at it.

@dansup@mastodon.social
@innocentzero@social.tchncs.de

So I usually hate sending over bluesky links anywhere since I'm not a fan, but Rob Ricci highlights some important distinctions between and

Fundamentally, activitypub is designed to be useful with a partial view of the network. (Narrowing down to here) Likes are communicated, mentions are communicated, and so on.

Over at atproto land, you have no option but to write to your repo, and so you have no choice but to view the entire network to say, find replies and such (narrowing to here). So the only way you can get your data is to read the network and filter it yourself, or have someone else do it for you, which doesn't solve the problem, only shift it.

bsky.app/profile/ricci.io/post

bsky.app

Rob Ricci (@ricci.io)

ehhh... only sort of agree. The difference is that AP has a way to notify another instance if, say, there is a reply to a post, or a mention of a user. This scales down well. In atproto, since you can only write to your own repo, the only way to find replies is to observe the entire network.

@innocentzero@social.tchncs.de

So I usually hate sending over bluesky links anywhere since I'm not a fan, but Rob Ricci highlights some important distinctions between and

Fundamentally, activitypub is designed to be useful with a partial view of the network. (Narrowing down to here) Likes are communicated, mentions are communicated, and so on.

Over at atproto land, you have no option but to write to your repo, and so you have no choice but to view the entire network to say, find replies and such (narrowing to here). So the only way you can get your data is to read the network and filter it yourself, or have someone else do it for you, which doesn't solve the problem, only shift it.

bsky.app/profile/ricci.io/post

bsky.app

Rob Ricci (@ricci.io)

ehhh... only sort of agree. The difference is that AP has a way to notify another instance if, say, there is a reply to a post, or a mention of a user. This scales down well. In atproto, since you can only write to your own repo, the only way to find replies is to observe the entire network.

@innocentzero@social.tchncs.de ยท Reply to InnocentZero

Having said that, and also disliking the fact that it came out of corpo billionaire creators of twitter, I genuinely believe there's some good stuff to pick up from that protocol.

In particular, I think the coolest part of the architecture is server-independent (more like server-migratable) identity, which is kind of amazing.

Activitypub/fediverse should adopt helge.codeberg.page/fep/fep/ef soon, and I feel like that'd be even better than what atproto has if I understand correctly.

helge.codeberg.page

FEP-ef61: Portable Objects - Fediverse Enhancement Proposals

Portable ActivityPub objects with server-independent IDs.

@lauti@bonfire.cafe

Our next two #activitypub pull requests are ready for review:

bonfire.cafe

Log in ยท bonfire.cafe

A space for Bonfire maintainers and contributors to communicate

@lauti@bonfire.cafe

Our next two #activitypub pull requests are ready for review:

bonfire.cafe

Log in ยท bonfire.cafe

A space for Bonfire maintainers and contributors to communicate

@weekinfediverse@mitra.social
@smallcircles@social.coop ยท Reply to Daniel Supernault

@dansup

I agree on the gist, but with a twist. The control is in sustainable and healthy evolution of the protocol, which in turn will stimulate organic growth.

I am also a dreamer, and in my dream ActivityPub remains commons based, of the people by the people. I'd love to see Pixelfed and Loops and many other fedi services to gain adoption by millions and billions, because you and those others share value alignment. We dream collectively of making the world a better place.

Unfortunately isn't commons based at the moment. At this point in time every increase in popularity of the fediverse is an attractor of commercial interests. Large platforms prove that there is a market. And very large platforms become a threat to established players, who are then forced to act.

Contrary to perhaps you and others, I don't think that corporate capture and takeover can be avoided once Big Tech giants decide to go all-in and throw billions bucks, 1,000's employees at it.

@weekinfediverse@mitra.social
@jwildeboer@social.wildeboer.net

When I want to spin up my own instance that supports when composing a post and that can handle my significant amount of followers with a seamless migration from my current instance, which Implementation would you use? Ideally it should be a simple rootless container setup that JustWorksโ„ข with podman. Perfection would be a single, self-contained container without the need to spin up several ones for databases or other stuff.

@weekinfediverse@mitra.social
@innocentzero@social.tchncs.de

So I usually hate sending over bluesky links anywhere since I'm not a fan, but Rob Ricci highlights some important distinctions between and

Fundamentally, activitypub is designed to be useful with a partial view of the network. (Narrowing down to here) Likes are communicated, mentions are communicated, and so on.

Over at atproto land, you have no option but to write to your repo, and so you have no choice but to view the entire network to say, find replies and such (narrowing to here). So the only way you can get your data is to read the network and filter it yourself, or have someone else do it for you, which doesn't solve the problem, only shift it.

bsky.app/profile/ricci.io/post

bsky.app

Rob Ricci (@ricci.io)

ehhh... only sort of agree. The difference is that AP has a way to notify another instance if, say, there is a reply to a post, or a mention of a user. This scales down well. In atproto, since you can only write to your own repo, the only way to find replies is to observe the entire network.

@NetscapeNavigator@vivaldi.net

ใ‚‚ใ—ใ‚ใชใŸใŒใ€1ๅนดไปฅไธŠใ‚ขใƒƒใƒ—ใƒ‡ใƒผใƒˆใ—ใฆใ„ใชใ„ Misskey ใพใŸใฏ Mastodon ใ‚’้‹็”จใ—ใฆใ„ใ‚‹ใฎใงใ‚ใ‚Œใฐใ€ใชใœใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ—ใชใ„ใฎใ‹ใ€ใใฎ็†็”ฑใ‚’ไปŠไธ€ๅบฆ่ฆ‹็›ดใ—ใฆใปใ—ใ„ใจๆ€ใ„ใพใ™ใ€‚

ใ“ใฎไฝŽใ‚ณใ‚นใƒˆใชๆ”ปๆ’ƒๆ‰‹ๆณ•๏ผˆใ‚นใ‚ฏใƒชใƒผใƒณใ‚ทใƒงใƒƒใƒˆๅ‚็…ง๏ผ‰ใฏใ€Mastodon 4.0.x ใ‹ใ‚‰ 4.3.x ใพใงใฎ็’ฐๅขƒใงๅฎŸ่กŒๅฏ่ƒฝใงใ™ใ€‚ใ‚‚ใ—ใพใ  Mastodon 2.x ใ‚„ 3.x ใ‚’ไฝฟใฃใฆใ„ใ‚‹ใชใ‚‰ใ€็Šถๆณใฏใ•ใ‚‰ใซๆทฑๅˆปใงใ™ใ€‚

โš ๏ธ ใ“ใ‚Œใฏ Mastodon ใ ใ‘ใฎๅ•้กŒใงใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚Misskey ใซใ‚‚ๅฝฑ้Ÿฟใ—ใพใ™ใ€‚2025ๅนดใ‚ˆใ‚Šๅ‰ใฎใƒใƒผใ‚ธใƒงใƒณใฎ Misskey ใ‚’ไฝฟ็”จใ—ใฆใ„ใ‚‹ๅ ดๅˆใ€ใ“ใ‚Œใพใง่ขซๅฎณใซ้ญใ‚ใชใ‹ใฃใŸใฎใฏๅ˜ใซ้‹ใŒ่‰ฏใ‹ใฃใŸใ ใ‘ใงใ™ใ€‚

ๅ‚่€ƒใพใงใซใ€็พๅœจใฎ Mastodon ใฎๆœ€ๆ–ฐใƒใƒผใ‚ธใƒงใƒณใฏ 4.5.11๏ผˆ4.6 beta 1 ใ‚‚ๅˆฉ็”จๅฏ่ƒฝ๏ผ‰ใ€Misskey ใฎๆœ€ๆ–ฐใƒใƒผใ‚ธใƒงใƒณใฏ 2026.5.4๏ผˆ2026.6.0 ใ‚‚ๅˆฉ็”จๅฏ่ƒฝ๏ผ‰ใงใ™ใ€‚ใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ™ใ‚‹ใชใ‚‰ใ€ไปŠใŒใพใ•ใซใใฎๆ™‚ใงใ™ใ€‚โณ

็ง่ฆ‹ใงใ™ใŒใ€Fediverse ใฏใ“ใ‚Œใพใง้žๅธธใซๅนธ้‹ใ ใฃใŸใจๆ€ใ„ใพใ™ใ€‚ๅคšใใฎ็ฎก็†่€…ใŒ็ตŒ้จ“ใ—ใŸๅ•้กŒใฏใ€ใ›ใ„ใœใ„ใ‚นใƒ‘ใƒ ใ‚’ใฐใ‚‰ใพใใƒœใƒƒใƒˆใ‚„ใ€ใ„ใŸใšใ‚‰็›ฎ็š„ใฎใ‚นใ‚ฏใƒชใƒ—ใƒˆใ‚ญใƒ‡ใ‚ฃ็จ‹ๅบฆใ ใฃใŸใงใ—ใ‚‡ใ†ใ€‚ใ—ใ‹ใ—ใ€ใ‚ฝใƒ•ใƒˆใ‚ฆใ‚งใ‚ขใ‚’ๆœชไฟฎๆญฃใฎใพใพๆ”พ็ฝฎใ™ใ‚‹ใ“ใจใฏใ€ใใ‚Œใ‚ˆใ‚Šใฏใ‚‹ใ‹ใซๆทฑๅˆปใช่„…ๅจใซใ‚ทใ‚นใƒ†ใƒ ใ‚’ใ•ใ‚‰ใ™ใ“ใจใซใชใ‚Šใพใ™ใ€‚

็އ็›ดใซ่จ€ใฃใฆใ€ใ‹ใคใฆใ‚ชใƒณใƒฉใ‚คใƒณใƒ•ใ‚ฉใƒผใƒฉใƒ ใฎใ‚ณใƒŸใƒฅใƒ‹ใƒ†ใ‚ฃ็ฎก็†ใ‚’ใ—ใฆใ„ใŸ็ซ‹ๅ ดใ‹ใ‚‰ใ™ใ‚‹ใจใ€ใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ‚’ใŸใ‚ใ‚‰ใ†็†็”ฑใŒ็†่งฃใงใใพใ›ใ‚“ใ€‚ๅฑ้™บใซใ•ใ‚‰ใ•ใ‚Œใ‚‹ใฎใฏ็ฎก็†่€…่‡ช่บซใ ใ‘ใงใฏใชใใ€ใ‚ใชใŸใŒๅฎ‰ๅ…จใซใƒ—ใƒฉใƒƒใƒˆใƒ•ใ‚ฉใƒผใƒ ใ‚’้‹ๅ–ถใ—ใฆใใ‚Œใ‚‹ใจไฟก้ ผใ—ใฆใ„ใ‚‹ๆ•ฐ็™พไบบใ€ๆ•ฐๅƒไบบใฎใƒฆใƒผใ‚ถใƒผใฎใ‚ปใ‚ญใƒฅใƒชใƒ†ใ‚ฃใพใงๅฑ้™บใซใ•ใ‚‰ใ—ใฆใ„ใ‚‹ใฎใงใ™ใ€‚

ใ‚นใ‚ฏใƒชใƒผใƒณใ‚ทใƒงใƒƒใƒˆใซใฏๆฌกใฎใ‚ˆใ†ใซๆ›ธใ‹ใ‚Œใฆใ„ใพใ™ใ€‚

ใพใ ใ“ใ‚Œใ‚’ไฟๅญ˜ใงใใฆใ„ใพใ›ใ‚“ใ€‚ใ‚ณใƒŸใƒƒใƒˆใฏไพ็„ถใจใ—ใฆๅคฑๆ•—ใ—ใพใ™ใ€‚ใ—ใ‹ใ—ใ€ใใฃใจไป–ใฎ่ชฐใ‹ใชใ‚‰ๆˆๅŠŸใ•ใ›ใ‚‰ใ‚Œใ‚‹ใงใ—ใ‚‡ใ†ใ€‚ใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ™ใ‚‹ใจใใŒๆฅใฆใ„ใพใ™๏ผ
ALT text

ใ‚นใ‚ฏใƒชใƒผใƒณใ‚ทใƒงใƒƒใƒˆใซใฏๆฌกใฎใ‚ˆใ†ใซๆ›ธใ‹ใ‚Œใฆใ„ใพใ™ใ€‚ ใพใ ใ“ใ‚Œใ‚’ไฟๅญ˜ใงใใฆใ„ใพใ›ใ‚“ใ€‚ใ‚ณใƒŸใƒƒใƒˆใฏไพ็„ถใจใ—ใฆๅคฑๆ•—ใ—ใพใ™ใ€‚ใ—ใ‹ใ—ใ€ใใฃใจไป–ใฎ่ชฐใ‹ใชใ‚‰ๆˆๅŠŸใ•ใ›ใ‚‰ใ‚Œใ‚‹ใงใ—ใ‚‡ใ†ใ€‚ใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ™ใ‚‹ใจใใŒๆฅใฆใ„ใพใ™๏ผ

Misskey ใ‚ตใ‚คใƒˆใงๆ’ฎๅฝฑใ•ใ‚ŒใŸใ‚นใ‚ฏใƒชใƒผใƒณใ‚ทใƒงใƒƒใƒˆใงใ™ใ€‚

ๆ—ฅๆœฌ่ชžใจ่‹ฑ่ชžใง่กจ็คบใ•ใ‚Œใฆใ„ใ‚‹ใƒกใƒƒใ‚ปใƒผใ‚ธใซใฏใ€ๆฌกใฎใ‚ˆใ†ใซๆ›ธใ‹ใ‚Œใฆใ„ใพใ™ใ€‚

็พๅœจใ€ๅคใ„ใƒใƒผใ‚ธใƒงใƒณใฎ Misskey ใ‚’ไฝฟ็”จใ—ใฆใ„ใพใ™ใ€‚ๆœฌๅฝ“ใซใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ—ใŸใปใ†ใŒใ‚ˆใ„ใงใ—ใ‚‡ใ†ใ€‚
ALT text

Misskey ใ‚ตใ‚คใƒˆใงๆ’ฎๅฝฑใ•ใ‚ŒใŸใ‚นใ‚ฏใƒชใƒผใƒณใ‚ทใƒงใƒƒใƒˆใงใ™ใ€‚ ๆ—ฅๆœฌ่ชžใจ่‹ฑ่ชžใง่กจ็คบใ•ใ‚Œใฆใ„ใ‚‹ใƒกใƒƒใ‚ปใƒผใ‚ธใซใฏใ€ๆฌกใฎใ‚ˆใ†ใซๆ›ธใ‹ใ‚Œใฆใ„ใพใ™ใ€‚ ็พๅœจใ€ๅคใ„ใƒใƒผใ‚ธใƒงใƒณใฎ Misskey ใ‚’ไฝฟ็”จใ—ใฆใ„ใพใ™ใ€‚ๆœฌๅฝ“ใซใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ—ใŸใปใ†ใŒใ‚ˆใ„ใงใ—ใ‚‡ใ†ใ€‚

@innocentzero@social.tchncs.de ยท Reply to InnocentZero

Having said that, and also disliking the fact that it came out of corpo billionaire creators of twitter, I genuinely believe there's some good stuff to pick up from that protocol.

In particular, I think the coolest part of the architecture is server-independent (more like server-migratable) identity, which is kind of amazing.

Activitypub/fediverse should adopt helge.codeberg.page/fep/fep/ef soon, and I feel like that'd be even better than what atproto has if I understand correctly.

helge.codeberg.page

FEP-ef61: Portable Objects - Fediverse Enhancement Proposals

Portable ActivityPub objects with server-independent IDs.

@innocentzero@social.tchncs.de ยท Reply to InnocentZero

overreacted.io/there-are-no-in

While having an extremely snobbish and arrogant tone, I think it makes some good points about separating hosting from viewing, which I think the usual sort of conflates. And while the doesn't doesn't cover it, also has the unique feature of your data being relatively portable, largely absent in .

overreacted.io

There Are No Instances in atproto โ€” overreacted

Like RSS and Google Reader.

@innocentzero@social.tchncs.de

So I usually hate sending over bluesky links anywhere since I'm not a fan, but Rob Ricci highlights some important distinctions between and

Fundamentally, activitypub is designed to be useful with a partial view of the network. (Narrowing down to here) Likes are communicated, mentions are communicated, and so on.

Over at atproto land, you have no option but to write to your repo, and so you have no choice but to view the entire network to say, find replies and such (narrowing to here). So the only way you can get your data is to read the network and filter it yourself, or have someone else do it for you, which doesn't solve the problem, only shift it.

bsky.app/profile/ricci.io/post

bsky.app

Rob Ricci (@ricci.io)

ehhh... only sort of agree. The difference is that AP has a way to notify another instance if, say, there is a reply to a post, or a mention of a user. This scales down well. In atproto, since you can only write to your own repo, the only way to find replies is to observe the entire network.

@dansup@mastodon.social

Don't get me wrong, a lot of fediverse developers do not want millions of users, they are designing their software carefully for them and people like them.

I'm a dreamer, and love to think bigger, and build platforms with millions and even billions of people.

Both types of devs and projects can thrive, because we give the people control and power.

That is what matters, nobody can control this, not even me or mastodon.social

The protocol is the true power.

@apps@toot.fedilab.app

now indexes videos. You can find them in search and timelines, but the way they look still needs some work.
A video is not the same kind of object as a normal post. A post is a short text made to be read in the timeline. A video has a title, a long description, and a media file, so it should be shown as a video card with a thumbnail and a link, not as plain text. That part is coming next.

@weekinfediverse@mitra.social
@apps@toot.fedilab.app

Tagging the first version of the relay will be a proud accomplishment for me. It means officially publishing an relay, here only to maintain your identity and activities when your devices are offline.
It brings custom domains for self-identity, DMs, and multi-device support, while each device runs its own AP server. Not tied to a single platform, it supports microblogging, images, or even videos in one click.
Full sovereignty, without installing an instance on a VPS.

mastodon.social

Holos Social (@HolosSocial@mastodon.social)

Attached: 2 images I am really happy with my work today, I have never seen the relay so stable and fast. The response time is now really short, around 20 ms, and hasn't moved for hours. I am really close to tagging the first version of the relay as 1.0.0. #HolosSocial

@HolosSocial@mastodon.social

I am really happy with my work today, I have never seen the relay so stable and fast. The response time is now really short, around 20 ms, and hasn't moved for hours. I am really close to tagging the first version of the relay as 1.0.0.

Holos Social relay admin dashboard showing performance metrics: a request rate of 406 req/sec, an average response time of 20 ms, an error rate of 0.2 percent, and 80 MB of memory used.
ALT text

Holos Social relay admin dashboard showing performance metrics: a request rate of 406 req/sec, an average response time of 20 ms, an error rate of 0.2 percent, and 80 MB of memory used.

Response time graph over roughly 24 hours, showing peaks around 1600 to 1700 ms in the evening, a middle period fluctuating between 400 and 1000 ms, then dropping to around 20 ms and staying flat for the last several hours.
ALT text

Response time graph over roughly 24 hours, showing peaks around 1600 to 1700 ms in the evening, a middle period fluctuating between 400 and 1000 ms, then dropping to around 20 ms and staying flat for the last several hours.

@apps@toot.fedilab.app

Tagging the first version of the relay will be a proud accomplishment for me. It means officially publishing an relay, here only to maintain your identity and activities when your devices are offline.
It brings custom domains for self-identity, DMs, and multi-device support, while each device runs its own AP server. Not tied to a single platform, it supports microblogging, images, or even videos in one click.
Full sovereignty, without installing an instance on a VPS.

mastodon.social

Holos Social (@HolosSocial@mastodon.social)

Attached: 2 images I am really happy with my work today, I have never seen the relay so stable and fast. The response time is now really short, around 20 ms, and hasn't moved for hours. I am really close to tagging the first version of the relay as 1.0.0. #HolosSocial

@HolosSocial@mastodon.social

I am really happy with my work today, I have never seen the relay so stable and fast. The response time is now really short, around 20 ms, and hasn't moved for hours. I am really close to tagging the first version of the relay as 1.0.0.

Holos Social relay admin dashboard showing performance metrics: a request rate of 406 req/sec, an average response time of 20 ms, an error rate of 0.2 percent, and 80 MB of memory used.
ALT text

Holos Social relay admin dashboard showing performance metrics: a request rate of 406 req/sec, an average response time of 20 ms, an error rate of 0.2 percent, and 80 MB of memory used.

Response time graph over roughly 24 hours, showing peaks around 1600 to 1700 ms in the evening, a middle period fluctuating between 400 and 1000 ms, then dropping to around 20 ms and staying flat for the last several hours.
ALT text

Response time graph over roughly 24 hours, showing peaks around 1600 to 1700 ms in the evening, a middle period fluctuating between 400 and 1000 ms, then dropping to around 20 ms and staying flat for the last several hours.

@jwildeboer@social.wildeboer.net

When I want to spin up my own instance that supports when composing a post and that can handle my significant amount of followers with a seamless migration from my current instance, which Implementation would you use? Ideally it should be a simple rootless container setup that JustWorksโ„ข with podman. Perfection would be a single, self-contained container without the need to spin up several ones for databases or other stuff.

@NetscapeNavigator@vivaldi.net

ใ‚‚ใ—ใ‚ใชใŸใŒใ€1ๅนดไปฅไธŠใ‚ขใƒƒใƒ—ใƒ‡ใƒผใƒˆใ—ใฆใ„ใชใ„ Misskey ใพใŸใฏ Mastodon ใ‚’้‹็”จใ—ใฆใ„ใ‚‹ใฎใงใ‚ใ‚Œใฐใ€ใชใœใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ—ใชใ„ใฎใ‹ใ€ใใฎ็†็”ฑใ‚’ไปŠไธ€ๅบฆ่ฆ‹็›ดใ—ใฆใปใ—ใ„ใจๆ€ใ„ใพใ™ใ€‚

ใ“ใฎไฝŽใ‚ณใ‚นใƒˆใชๆ”ปๆ’ƒๆ‰‹ๆณ•๏ผˆใ‚นใ‚ฏใƒชใƒผใƒณใ‚ทใƒงใƒƒใƒˆๅ‚็…ง๏ผ‰ใฏใ€Mastodon 4.0.x ใ‹ใ‚‰ 4.3.x ใพใงใฎ็’ฐๅขƒใงๅฎŸ่กŒๅฏ่ƒฝใงใ™ใ€‚ใ‚‚ใ—ใพใ  Mastodon 2.x ใ‚„ 3.x ใ‚’ไฝฟใฃใฆใ„ใ‚‹ใชใ‚‰ใ€็Šถๆณใฏใ•ใ‚‰ใซๆทฑๅˆปใงใ™ใ€‚

โš ๏ธ ใ“ใ‚Œใฏ Mastodon ใ ใ‘ใฎๅ•้กŒใงใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚Misskey ใซใ‚‚ๅฝฑ้Ÿฟใ—ใพใ™ใ€‚2025ๅนดใ‚ˆใ‚Šๅ‰ใฎใƒใƒผใ‚ธใƒงใƒณใฎ Misskey ใ‚’ไฝฟ็”จใ—ใฆใ„ใ‚‹ๅ ดๅˆใ€ใ“ใ‚Œใพใง่ขซๅฎณใซ้ญใ‚ใชใ‹ใฃใŸใฎใฏๅ˜ใซ้‹ใŒ่‰ฏใ‹ใฃใŸใ ใ‘ใงใ™ใ€‚

ๅ‚่€ƒใพใงใซใ€็พๅœจใฎ Mastodon ใฎๆœ€ๆ–ฐใƒใƒผใ‚ธใƒงใƒณใฏ 4.5.11๏ผˆ4.6 beta 1 ใ‚‚ๅˆฉ็”จๅฏ่ƒฝ๏ผ‰ใ€Misskey ใฎๆœ€ๆ–ฐใƒใƒผใ‚ธใƒงใƒณใฏ 2026.5.4๏ผˆ2026.6.0 ใ‚‚ๅˆฉ็”จๅฏ่ƒฝ๏ผ‰ใงใ™ใ€‚ใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ™ใ‚‹ใชใ‚‰ใ€ไปŠใŒใพใ•ใซใใฎๆ™‚ใงใ™ใ€‚โณ

็ง่ฆ‹ใงใ™ใŒใ€Fediverse ใฏใ“ใ‚Œใพใง้žๅธธใซๅนธ้‹ใ ใฃใŸใจๆ€ใ„ใพใ™ใ€‚ๅคšใใฎ็ฎก็†่€…ใŒ็ตŒ้จ“ใ—ใŸๅ•้กŒใฏใ€ใ›ใ„ใœใ„ใ‚นใƒ‘ใƒ ใ‚’ใฐใ‚‰ใพใใƒœใƒƒใƒˆใ‚„ใ€ใ„ใŸใšใ‚‰็›ฎ็š„ใฎใ‚นใ‚ฏใƒชใƒ—ใƒˆใ‚ญใƒ‡ใ‚ฃ็จ‹ๅบฆใ ใฃใŸใงใ—ใ‚‡ใ†ใ€‚ใ—ใ‹ใ—ใ€ใ‚ฝใƒ•ใƒˆใ‚ฆใ‚งใ‚ขใ‚’ๆœชไฟฎๆญฃใฎใพใพๆ”พ็ฝฎใ™ใ‚‹ใ“ใจใฏใ€ใใ‚Œใ‚ˆใ‚Šใฏใ‚‹ใ‹ใซๆทฑๅˆปใช่„…ๅจใซใ‚ทใ‚นใƒ†ใƒ ใ‚’ใ•ใ‚‰ใ™ใ“ใจใซใชใ‚Šใพใ™ใ€‚

็އ็›ดใซ่จ€ใฃใฆใ€ใ‹ใคใฆใ‚ชใƒณใƒฉใ‚คใƒณใƒ•ใ‚ฉใƒผใƒฉใƒ ใฎใ‚ณใƒŸใƒฅใƒ‹ใƒ†ใ‚ฃ็ฎก็†ใ‚’ใ—ใฆใ„ใŸ็ซ‹ๅ ดใ‹ใ‚‰ใ™ใ‚‹ใจใ€ใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ‚’ใŸใ‚ใ‚‰ใ†็†็”ฑใŒ็†่งฃใงใใพใ›ใ‚“ใ€‚ๅฑ้™บใซใ•ใ‚‰ใ•ใ‚Œใ‚‹ใฎใฏ็ฎก็†่€…่‡ช่บซใ ใ‘ใงใฏใชใใ€ใ‚ใชใŸใŒๅฎ‰ๅ…จใซใƒ—ใƒฉใƒƒใƒˆใƒ•ใ‚ฉใƒผใƒ ใ‚’้‹ๅ–ถใ—ใฆใใ‚Œใ‚‹ใจไฟก้ ผใ—ใฆใ„ใ‚‹ๆ•ฐ็™พไบบใ€ๆ•ฐๅƒไบบใฎใƒฆใƒผใ‚ถใƒผใฎใ‚ปใ‚ญใƒฅใƒชใƒ†ใ‚ฃใพใงๅฑ้™บใซใ•ใ‚‰ใ—ใฆใ„ใ‚‹ใฎใงใ™ใ€‚

ใ‚นใ‚ฏใƒชใƒผใƒณใ‚ทใƒงใƒƒใƒˆใซใฏๆฌกใฎใ‚ˆใ†ใซๆ›ธใ‹ใ‚Œใฆใ„ใพใ™ใ€‚

ใพใ ใ“ใ‚Œใ‚’ไฟๅญ˜ใงใใฆใ„ใพใ›ใ‚“ใ€‚ใ‚ณใƒŸใƒƒใƒˆใฏไพ็„ถใจใ—ใฆๅคฑๆ•—ใ—ใพใ™ใ€‚ใ—ใ‹ใ—ใ€ใใฃใจไป–ใฎ่ชฐใ‹ใชใ‚‰ๆˆๅŠŸใ•ใ›ใ‚‰ใ‚Œใ‚‹ใงใ—ใ‚‡ใ†ใ€‚ใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ™ใ‚‹ใจใใŒๆฅใฆใ„ใพใ™๏ผ
ALT text

ใ‚นใ‚ฏใƒชใƒผใƒณใ‚ทใƒงใƒƒใƒˆใซใฏๆฌกใฎใ‚ˆใ†ใซๆ›ธใ‹ใ‚Œใฆใ„ใพใ™ใ€‚ ใพใ ใ“ใ‚Œใ‚’ไฟๅญ˜ใงใใฆใ„ใพใ›ใ‚“ใ€‚ใ‚ณใƒŸใƒƒใƒˆใฏไพ็„ถใจใ—ใฆๅคฑๆ•—ใ—ใพใ™ใ€‚ใ—ใ‹ใ—ใ€ใใฃใจไป–ใฎ่ชฐใ‹ใชใ‚‰ๆˆๅŠŸใ•ใ›ใ‚‰ใ‚Œใ‚‹ใงใ—ใ‚‡ใ†ใ€‚ใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ™ใ‚‹ใจใใŒๆฅใฆใ„ใพใ™๏ผ

Misskey ใ‚ตใ‚คใƒˆใงๆ’ฎๅฝฑใ•ใ‚ŒใŸใ‚นใ‚ฏใƒชใƒผใƒณใ‚ทใƒงใƒƒใƒˆใงใ™ใ€‚

ๆ—ฅๆœฌ่ชžใจ่‹ฑ่ชžใง่กจ็คบใ•ใ‚Œใฆใ„ใ‚‹ใƒกใƒƒใ‚ปใƒผใ‚ธใซใฏใ€ๆฌกใฎใ‚ˆใ†ใซๆ›ธใ‹ใ‚Œใฆใ„ใพใ™ใ€‚

็พๅœจใ€ๅคใ„ใƒใƒผใ‚ธใƒงใƒณใฎ Misskey ใ‚’ไฝฟ็”จใ—ใฆใ„ใพใ™ใ€‚ๆœฌๅฝ“ใซใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ—ใŸใปใ†ใŒใ‚ˆใ„ใงใ—ใ‚‡ใ†ใ€‚
ALT text

Misskey ใ‚ตใ‚คใƒˆใงๆ’ฎๅฝฑใ•ใ‚ŒใŸใ‚นใ‚ฏใƒชใƒผใƒณใ‚ทใƒงใƒƒใƒˆใงใ™ใ€‚ ๆ—ฅๆœฌ่ชžใจ่‹ฑ่ชžใง่กจ็คบใ•ใ‚Œใฆใ„ใ‚‹ใƒกใƒƒใ‚ปใƒผใ‚ธใซใฏใ€ๆฌกใฎใ‚ˆใ†ใซๆ›ธใ‹ใ‚Œใฆใ„ใพใ™ใ€‚ ็พๅœจใ€ๅคใ„ใƒใƒผใ‚ธใƒงใƒณใฎ Misskey ใ‚’ไฝฟ็”จใ—ใฆใ„ใพใ™ใ€‚ๆœฌๅฝ“ใซใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ—ใŸใปใ†ใŒใ‚ˆใ„ใงใ—ใ‚‡ใ†ใ€‚

@NetscapeNavigator@vivaldi.net

ใ‚‚ใ—ใ‚ใชใŸใŒใ€1ๅนดไปฅไธŠใ‚ขใƒƒใƒ—ใƒ‡ใƒผใƒˆใ—ใฆใ„ใชใ„ Misskey ใพใŸใฏ Mastodon ใ‚’้‹็”จใ—ใฆใ„ใ‚‹ใฎใงใ‚ใ‚Œใฐใ€ใชใœใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ—ใชใ„ใฎใ‹ใ€ใใฎ็†็”ฑใ‚’ไปŠไธ€ๅบฆ่ฆ‹็›ดใ—ใฆใปใ—ใ„ใจๆ€ใ„ใพใ™ใ€‚

ใ“ใฎไฝŽใ‚ณใ‚นใƒˆใชๆ”ปๆ’ƒๆ‰‹ๆณ•๏ผˆใ‚นใ‚ฏใƒชใƒผใƒณใ‚ทใƒงใƒƒใƒˆๅ‚็…ง๏ผ‰ใฏใ€Mastodon 4.0.x ใ‹ใ‚‰ 4.3.x ใพใงใฎ็’ฐๅขƒใงๅฎŸ่กŒๅฏ่ƒฝใงใ™ใ€‚ใ‚‚ใ—ใพใ  Mastodon 2.x ใ‚„ 3.x ใ‚’ไฝฟใฃใฆใ„ใ‚‹ใชใ‚‰ใ€็Šถๆณใฏใ•ใ‚‰ใซๆทฑๅˆปใงใ™ใ€‚

โš ๏ธ ใ“ใ‚Œใฏ Mastodon ใ ใ‘ใฎๅ•้กŒใงใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚Misskey ใซใ‚‚ๅฝฑ้Ÿฟใ—ใพใ™ใ€‚2025ๅนดใ‚ˆใ‚Šๅ‰ใฎใƒใƒผใ‚ธใƒงใƒณใฎ Misskey ใ‚’ไฝฟ็”จใ—ใฆใ„ใ‚‹ๅ ดๅˆใ€ใ“ใ‚Œใพใง่ขซๅฎณใซ้ญใ‚ใชใ‹ใฃใŸใฎใฏๅ˜ใซ้‹ใŒ่‰ฏใ‹ใฃใŸใ ใ‘ใงใ™ใ€‚

ๅ‚่€ƒใพใงใซใ€็พๅœจใฎ Mastodon ใฎๆœ€ๆ–ฐใƒใƒผใ‚ธใƒงใƒณใฏ 4.5.11๏ผˆ4.6 beta 1 ใ‚‚ๅˆฉ็”จๅฏ่ƒฝ๏ผ‰ใ€Misskey ใฎๆœ€ๆ–ฐใƒใƒผใ‚ธใƒงใƒณใฏ 2026.5.4๏ผˆ2026.6.0 ใ‚‚ๅˆฉ็”จๅฏ่ƒฝ๏ผ‰ใงใ™ใ€‚ใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ™ใ‚‹ใชใ‚‰ใ€ไปŠใŒใพใ•ใซใใฎๆ™‚ใงใ™ใ€‚โณ

็ง่ฆ‹ใงใ™ใŒใ€Fediverse ใฏใ“ใ‚Œใพใง้žๅธธใซๅนธ้‹ใ ใฃใŸใจๆ€ใ„ใพใ™ใ€‚ๅคšใใฎ็ฎก็†่€…ใŒ็ตŒ้จ“ใ—ใŸๅ•้กŒใฏใ€ใ›ใ„ใœใ„ใ‚นใƒ‘ใƒ ใ‚’ใฐใ‚‰ใพใใƒœใƒƒใƒˆใ‚„ใ€ใ„ใŸใšใ‚‰็›ฎ็š„ใฎใ‚นใ‚ฏใƒชใƒ—ใƒˆใ‚ญใƒ‡ใ‚ฃ็จ‹ๅบฆใ ใฃใŸใงใ—ใ‚‡ใ†ใ€‚ใ—ใ‹ใ—ใ€ใ‚ฝใƒ•ใƒˆใ‚ฆใ‚งใ‚ขใ‚’ๆœชไฟฎๆญฃใฎใพใพๆ”พ็ฝฎใ™ใ‚‹ใ“ใจใฏใ€ใใ‚Œใ‚ˆใ‚Šใฏใ‚‹ใ‹ใซๆทฑๅˆปใช่„…ๅจใซใ‚ทใ‚นใƒ†ใƒ ใ‚’ใ•ใ‚‰ใ™ใ“ใจใซใชใ‚Šใพใ™ใ€‚

็އ็›ดใซ่จ€ใฃใฆใ€ใ‹ใคใฆใ‚ชใƒณใƒฉใ‚คใƒณใƒ•ใ‚ฉใƒผใƒฉใƒ ใฎใ‚ณใƒŸใƒฅใƒ‹ใƒ†ใ‚ฃ็ฎก็†ใ‚’ใ—ใฆใ„ใŸ็ซ‹ๅ ดใ‹ใ‚‰ใ™ใ‚‹ใจใ€ใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ‚’ใŸใ‚ใ‚‰ใ†็†็”ฑใŒ็†่งฃใงใใพใ›ใ‚“ใ€‚ๅฑ้™บใซใ•ใ‚‰ใ•ใ‚Œใ‚‹ใฎใฏ็ฎก็†่€…่‡ช่บซใ ใ‘ใงใฏใชใใ€ใ‚ใชใŸใŒๅฎ‰ๅ…จใซใƒ—ใƒฉใƒƒใƒˆใƒ•ใ‚ฉใƒผใƒ ใ‚’้‹ๅ–ถใ—ใฆใใ‚Œใ‚‹ใจไฟก้ ผใ—ใฆใ„ใ‚‹ๆ•ฐ็™พไบบใ€ๆ•ฐๅƒไบบใฎใƒฆใƒผใ‚ถใƒผใฎใ‚ปใ‚ญใƒฅใƒชใƒ†ใ‚ฃใพใงๅฑ้™บใซใ•ใ‚‰ใ—ใฆใ„ใ‚‹ใฎใงใ™ใ€‚

ใ‚นใ‚ฏใƒชใƒผใƒณใ‚ทใƒงใƒƒใƒˆใซใฏๆฌกใฎใ‚ˆใ†ใซๆ›ธใ‹ใ‚Œใฆใ„ใพใ™ใ€‚

ใพใ ใ“ใ‚Œใ‚’ไฟๅญ˜ใงใใฆใ„ใพใ›ใ‚“ใ€‚ใ‚ณใƒŸใƒƒใƒˆใฏไพ็„ถใจใ—ใฆๅคฑๆ•—ใ—ใพใ™ใ€‚ใ—ใ‹ใ—ใ€ใใฃใจไป–ใฎ่ชฐใ‹ใชใ‚‰ๆˆๅŠŸใ•ใ›ใ‚‰ใ‚Œใ‚‹ใงใ—ใ‚‡ใ†ใ€‚ใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ™ใ‚‹ใจใใŒๆฅใฆใ„ใพใ™๏ผ
ALT text

ใ‚นใ‚ฏใƒชใƒผใƒณใ‚ทใƒงใƒƒใƒˆใซใฏๆฌกใฎใ‚ˆใ†ใซๆ›ธใ‹ใ‚Œใฆใ„ใพใ™ใ€‚ ใพใ ใ“ใ‚Œใ‚’ไฟๅญ˜ใงใใฆใ„ใพใ›ใ‚“ใ€‚ใ‚ณใƒŸใƒƒใƒˆใฏไพ็„ถใจใ—ใฆๅคฑๆ•—ใ—ใพใ™ใ€‚ใ—ใ‹ใ—ใ€ใใฃใจไป–ใฎ่ชฐใ‹ใชใ‚‰ๆˆๅŠŸใ•ใ›ใ‚‰ใ‚Œใ‚‹ใงใ—ใ‚‡ใ†ใ€‚ใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ™ใ‚‹ใจใใŒๆฅใฆใ„ใพใ™๏ผ

Misskey ใ‚ตใ‚คใƒˆใงๆ’ฎๅฝฑใ•ใ‚ŒใŸใ‚นใ‚ฏใƒชใƒผใƒณใ‚ทใƒงใƒƒใƒˆใงใ™ใ€‚

ๆ—ฅๆœฌ่ชžใจ่‹ฑ่ชžใง่กจ็คบใ•ใ‚Œใฆใ„ใ‚‹ใƒกใƒƒใ‚ปใƒผใ‚ธใซใฏใ€ๆฌกใฎใ‚ˆใ†ใซๆ›ธใ‹ใ‚Œใฆใ„ใพใ™ใ€‚

็พๅœจใ€ๅคใ„ใƒใƒผใ‚ธใƒงใƒณใฎ Misskey ใ‚’ไฝฟ็”จใ—ใฆใ„ใพใ™ใ€‚ๆœฌๅฝ“ใซใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ—ใŸใปใ†ใŒใ‚ˆใ„ใงใ—ใ‚‡ใ†ใ€‚
ALT text

Misskey ใ‚ตใ‚คใƒˆใงๆ’ฎๅฝฑใ•ใ‚ŒใŸใ‚นใ‚ฏใƒชใƒผใƒณใ‚ทใƒงใƒƒใƒˆใงใ™ใ€‚ ๆ—ฅๆœฌ่ชžใจ่‹ฑ่ชžใง่กจ็คบใ•ใ‚Œใฆใ„ใ‚‹ใƒกใƒƒใ‚ปใƒผใ‚ธใซใฏใ€ๆฌกใฎใ‚ˆใ†ใซๆ›ธใ‹ใ‚Œใฆใ„ใพใ™ใ€‚ ็พๅœจใ€ๅคใ„ใƒใƒผใ‚ธใƒงใƒณใฎ Misskey ใ‚’ไฝฟ็”จใ—ใฆใ„ใพใ™ใ€‚ๆœฌๅฝ“ใซใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ—ใŸใปใ†ใŒใ‚ˆใ„ใงใ—ใ‚‡ใ†ใ€‚

@apps@toot.fedilab.app

now indexes videos. You can find them in search and timelines, but the way they look still needs some work.
A video is not the same kind of object as a normal post. A post is a short text made to be read in the timeline. A video has a title, a long description, and a media file, so it should be shown as a video card with a thumbnail and a link, not as plain text. That part is coming next.

@dansup@mastodon.social

Don't get me wrong, a lot of fediverse developers do not want millions of users, they are designing their software carefully for them and people like them.

I'm a dreamer, and love to think bigger, and build platforms with millions and even billions of people.

Both types of devs and projects can thrive, because we give the people control and power.

That is what matters, nobody can control this, not even me or mastodon.social

The protocol is the true power.

@dansup@mastodon.social

Username changes are coming to Loops, and later Pixelfed this summer.

It's quite challenging, but a necessity since Loops supports Sign in with Apple and it generates a random username.

To prevent federation breakage, we will keep old usernames as aliases, and limit changes to 3 times per year, once per month.

Loops doesn't use usernames in activity urls, so it won't break those.

I am also working on a FEP for this!

@stefan@stefanbohacek.online
@smallcircles@social.coop ยท Reply to Steve Bate

@steve @eblu

There are a couple of projects that explore in its intended format. Plain JSON is allowed, but the AP's primary notation is using . I think there is a slight uptick in interest for this approach again, coming along with the opportunity to implement the Social API (client-to-server) as intended.

What I really like is that ecosystem tools which aim to ease solution development, are gaining an interest. Most notably here is imho, who recently received funding to build Fedify Studio development platform..

studio.fedify.dev

drfed.org

DrFed โ€” The ActivityPub debugging platform

DrFed is a web-based platform for developing and debugging ActivityPub implementations, built by the team behind Fedify.

@steve@social.technoetic.com
@steve@social.technoetic.com
@t3rr0rz0n3@xarxa.cloud

En el , ese lugar aburrido, lo que mรกs nos gusta es reรญrnos de todo.

Meme de dos perros Shiba Inu comparando el registro en dos redes sociales. A la izquierda aparece el perro musculoso bajo el tรญtulo โ€˜Registro en WSocialโ€™, recitando una larga lista de pasos absurdamente complejos: elegir usuario y contraseรฑa, seleccionar intereses, descargar una app de identidad, escanear varios cรณdigos QR, crear un PIN, verificar identidad con pasaporte, leer el chip NFC y hacerse un selfie. A la derecha, un perro pequeรฑo y llorando bajo el tรญtulo โ€˜Registro en el Fediversoโ€™ dice: โ€˜Jooo, pero ยฟquรฉ server tengo que seleccionar? Ayy, quรฉ complicado!โ€™. El meme ironiza sobre cรณmo algunas personas consideran difรญcil elegir instancia en el Fediverso mientras aceptan procesos mucho mรกs invasivos y complejos en redes centralizadas.โ€
ALT text

Meme de dos perros Shiba Inu comparando el registro en dos redes sociales. A la izquierda aparece el perro musculoso bajo el tรญtulo โ€˜Registro en WSocialโ€™, recitando una larga lista de pasos absurdamente complejos: elegir usuario y contraseรฑa, seleccionar intereses, descargar una app de identidad, escanear varios cรณdigos QR, crear un PIN, verificar identidad con pasaporte, leer el chip NFC y hacerse un selfie. A la derecha, un perro pequeรฑo y llorando bajo el tรญtulo โ€˜Registro en el Fediversoโ€™ dice: โ€˜Jooo, pero ยฟquรฉ server tengo que seleccionar? Ayy, quรฉ complicado!โ€™. El meme ironiza sobre cรณmo algunas personas consideran difรญcil elegir instancia en el Fediverso mientras aceptan procesos mucho mรกs invasivos y complejos en redes centralizadas.โ€

@stefan@stefanbohacek.online
@t3rr0rz0n3@xarxa.cloud

En el , ese lugar aburrido, lo que mรกs nos gusta es reรญrnos de todo.

Meme de dos perros Shiba Inu comparando el registro en dos redes sociales. A la izquierda aparece el perro musculoso bajo el tรญtulo โ€˜Registro en WSocialโ€™, recitando una larga lista de pasos absurdamente complejos: elegir usuario y contraseรฑa, seleccionar intereses, descargar una app de identidad, escanear varios cรณdigos QR, crear un PIN, verificar identidad con pasaporte, leer el chip NFC y hacerse un selfie. A la derecha, un perro pequeรฑo y llorando bajo el tรญtulo โ€˜Registro en el Fediversoโ€™ dice: โ€˜Jooo, pero ยฟquรฉ server tengo que seleccionar? Ayy, quรฉ complicado!โ€™. El meme ironiza sobre cรณmo algunas personas consideran difรญcil elegir instancia en el Fediverso mientras aceptan procesos mucho mรกs invasivos y complejos en redes centralizadas.โ€
ALT text

Meme de dos perros Shiba Inu comparando el registro en dos redes sociales. A la izquierda aparece el perro musculoso bajo el tรญtulo โ€˜Registro en WSocialโ€™, recitando una larga lista de pasos absurdamente complejos: elegir usuario y contraseรฑa, seleccionar intereses, descargar una app de identidad, escanear varios cรณdigos QR, crear un PIN, verificar identidad con pasaporte, leer el chip NFC y hacerse un selfie. A la derecha, un perro pequeรฑo y llorando bajo el tรญtulo โ€˜Registro en el Fediversoโ€™ dice: โ€˜Jooo, pero ยฟquรฉ server tengo que seleccionar? Ayy, quรฉ complicado!โ€™. El meme ironiza sobre cรณmo algunas personas consideran difรญcil elegir instancia en el Fediverso mientras aceptan procesos mucho mรกs invasivos y complejos en redes centralizadas.โ€

@toddsundsted@epiktistes.com

I really enjoy optimization. Release v3.5.0 of Ktistec doesn't drop significant new features, but it does deliver a ~15% smaller executable and significantly faster queries on anonymous endpoints. The two are intertwined.

The size reduction comes from replacing a poorly designed, custom rules engine with a materialized view layer that uses SQL to define membership in a collection. The rules engine worked well enough but required a lot of supporting code to present rules as a DSL (Domain Specific Language) over the domain objects in ktistec. The driving realization was that SQL is a DSL and membership in a collection is just a query and domain objects are just rows. Voilร !

Query performance improvements came from using this new view layer to materialize two very popular but expensive-to-query views: the instance's public timeline and public hashtag pages. Because both are public pages they receive more traffic than internal pages.

The problem with the original queries was that performance was not uniform. Querying for posts with popular tags was okay. Querying for posts with sparse tags was very slow. I could have added more indexes, but that's its own cost. After the change, endpoints all respond in a consistent ~10msec timeframe and the CPU barely registers when a crawler hits. (I don't want to make things easier for bots, but I don't want to pay a tax for their activity eitherโ€”ask me about my new nginx configuration.)

Here is the full changelog:

Added

  • Lightweight probe endpoint for authenticated sessions.
  • max-id and min-id pagination links on web pages.

Fixed

  • Correct the notifications collection's JSON representation.
  • Accept both single-value and array forms of JSON-LD properties.
  • Handle variation in schema.org property mapping.

Changed

  • Faster timeline, public, hashtag, and notification collections.
  • Adjust the layout of actor profile properties.

Removed

  • The school dependency; replaced by activity processors and materialized views.
  • The openssl_ext dependency; vendored in.

There are still a few slow queries. In the next release I'm going to see if I can get everything under 10msec, and maybe release a new feature, too. ๐Ÿš€

github.com

Comparing 62d9cc84...319ca17a ยท toddsundsted/ktistec

ActivityPub (https://www.w3.org/TR/activitypub/) server for individual users and small groups. - Comparing 62d9cc84...319ca17a ยท toddsundsted/ktistec

@toddsundsted@epiktistes.com

I really enjoy optimization. Release v3.5.0 of Ktistec doesn't drop significant new features, but it does deliver a ~15% smaller executable and significantly faster queries on anonymous endpoints. The two are intertwined.

The size reduction comes from replacing a poorly designed, custom rules engine with a materialized view layer that uses SQL to define membership in a collection. The rules engine worked well enough but required a lot of supporting code to present rules as a DSL (Domain Specific Language) over the domain objects in ktistec. The driving realization was that SQL is a DSL and membership in a collection is just a query and domain objects are just rows. Voilร !

Query performance improvements came from using this new view layer to materialize two very popular but expensive-to-query views: the instance's public timeline and public hashtag pages. Because both are public pages they receive more traffic than internal pages.

The problem with the original queries was that performance was not uniform. Querying for posts with popular tags was okay. Querying for posts with sparse tags was very slow. I could have added more indexes, but that's its own cost. After the change, endpoints all respond in a consistent ~10msec timeframe and the CPU barely registers when a crawler hits. (I don't want to make things easier for bots, but I don't want to pay a tax for their activity eitherโ€”ask me about my new nginx configuration.)

Here is the full changelog:

Added

  • Lightweight probe endpoint for authenticated sessions.
  • max-id and min-id pagination links on web pages.

Fixed

  • Correct the notifications collection's JSON representation.
  • Accept both single-value and array forms of JSON-LD properties.
  • Handle variation in schema.org property mapping.

Changed

  • Faster timeline, public, hashtag, and notification collections.
  • Adjust the layout of actor profile properties.

Removed

  • The school dependency; replaced by activity processors and materialized views.
  • The openssl_ext dependency; vendored in.

There are still a few slow queries. In the next release I'm going to see if I can get everything under 10msec, and maybe release a new feature, too. ๐Ÿš€

github.com

Comparing 62d9cc84...319ca17a ยท toddsundsted/ktistec

ActivityPub (https://www.w3.org/TR/activitypub/) server for individual users and small groups. - Comparing 62d9cc84...319ca17a ยท toddsundsted/ktistec

@PuercoPop@mastodon.social

Question about HTTP Signatures in , IIUC the header is a digest of the HTTP body. Given that JSON is not white-space sensitive, does that mean that storing the response must preserve the indentation used by the server?

@ccamara@mastodon.social ยท Reply to Aaron Mahler

DrFed is our sister project, built alongside to tackle the debugging side of development. It just received @nlnet funding and now has its own account here: @drfed.

drfed.org

DrFed โ€” The ActivityPub debugging platform

DrFed is a web-based platform for developing and debugging ActivityPub implementations, built by the team behind Fedify.

@drfed@hackers.pub

Some of you have already heard of us as Studio. We now have a proper name: DrFed, short for โ€œDoctor Fed.โ€ We've also just received funding from @nlnet, through the NGI0 Commons Fund.

is a web app for debugging interoperability failures. When two implementations don't federate, the slow part is usually figuring out where the exchange broke: signing, JSON-LD processing, WebFinger, or something less obvious. DrFed's first job is to show where it failed.

We're the team behind @fedify: @2chanhaeng, @gaebalgom, @hongminhee, and @z9mb1. We'll post updates when there's something to try.

nlnet.nl

NLnet; DrFed

@ccamara@mastodon.social ยท Reply to Aaron Mahler

DrFed is our sister project, built alongside to tackle the debugging side of development. It just received @nlnet funding and now has its own account here: @drfed.

drfed.org

DrFed โ€” The ActivityPub debugging platform

DrFed is a web-based platform for developing and debugging ActivityPub implementations, built by the team behind Fedify.

@drfed@hackers.pub

Some of you have already heard of us as Studio. We now have a proper name: DrFed, short for โ€œDoctor Fed.โ€ We've also just received funding from @nlnet, through the NGI0 Commons Fund.

is a web app for debugging interoperability failures. When two implementations don't federate, the slow part is usually figuring out where the exchange broke: signing, JSON-LD processing, WebFinger, or something less obvious. DrFed's first job is to show where it failed.

We're the team behind @fedify: @2chanhaeng, @gaebalgom, @hongminhee, and @z9mb1. We'll post updates when there's something to try.

nlnet.nl

NLnet; DrFed

DrFed is our sister project, built alongside to tackle the debugging side of development. It just received @nlnet funding and now has its own account here: @drfed.

drfed.org

DrFed โ€” The ActivityPub debugging platform

DrFed is a web-based platform for developing and debugging ActivityPub implementations, built by the team behind Fedify.

@drfed@hackers.pub

Some of you have already heard of us as Studio. We now have a proper name: DrFed, short for โ€œDoctor Fed.โ€ We've also just received funding from @nlnet, through the NGI0 Commons Fund.

is a web app for debugging interoperability failures. When two implementations don't federate, the slow part is usually figuring out where the exchange broke: signing, JSON-LD processing, WebFinger, or something less obvious. DrFed's first job is to show where it failed.

We're the team behind @fedify: @2chanhaeng, @gaebalgom, @hongminhee, and @z9mb1. We'll post updates when there's something to try.

nlnet.nl

NLnet; DrFed

@fedify

Congratulations!

I am really delighted with @nlnet decision to select @drfed for an grant. Having good quality developer tools for creating based solutions is so important for a healthy developer ecosystem.

To anyone reading, bookmark the website..

Fedify Studio is focused on alleviating the most pressing issue of "Why is ActivityPub development so frustratingly hard?" that makes it unattractive for newcomers to adopt the technology. And addresses topics of:

- Protocol complexity
- hell
- Debugging nightmare
- Limited visibility

from the very start has paid attention to ease of use for fediverse solution developers, not just by their library codebase, but with comprehensive documentation and tools to guide people along. Kudos here to @hongminhee who started this great initiative!

@fedify

Congratulations!

I am really delighted with @nlnet decision to select @drfed for an grant. Having good quality developer tools for creating based solutions is so important for a healthy developer ecosystem.

To anyone reading, bookmark the website..

Fedify Studio is focused on alleviating the most pressing issue of "Why is ActivityPub development so frustratingly hard?" that makes it unattractive for newcomers to adopt the technology. And addresses topics of:

- Protocol complexity
- hell
- Debugging nightmare
- Limited visibility

from the very start has paid attention to ease of use for fediverse solution developers, not just by their library codebase, but with comprehensive documentation and tools to guide people along. Kudos here to @hongminhee who started this great initiative!

@fedify

Congratulations!

I am really delighted with @nlnet decision to select @drfed for an grant. Having good quality developer tools for creating based solutions is so important for a healthy developer ecosystem.

To anyone reading, bookmark the website..

Fedify Studio is focused on alleviating the most pressing issue of "Why is ActivityPub development so frustratingly hard?" that makes it unattractive for newcomers to adopt the technology. And addresses topics of:

- Protocol complexity
- hell
- Debugging nightmare
- Limited visibility

from the very start has paid attention to ease of use for fediverse solution developers, not just by their library codebase, but with comprehensive documentation and tools to guide people along. Kudos here to @hongminhee who started this great initiative!

@fedify

Congratulations!

I am really delighted with @nlnet decision to select @drfed for an grant. Having good quality developer tools for creating based solutions is so important for a healthy developer ecosystem.

To anyone reading, bookmark the website..

Fedify Studio is focused on alleviating the most pressing issue of "Why is ActivityPub development so frustratingly hard?" that makes it unattractive for newcomers to adopt the technology. And addresses topics of:

- Protocol complexity
- hell
- Debugging nightmare
- Limited visibility

from the very start has paid attention to ease of use for fediverse solution developers, not just by their library codebase, but with comprehensive documentation and tools to guide people along. Kudos here to @hongminhee who started this great initiative!

DrFed is our sister project, built alongside to tackle the debugging side of development. It just received @nlnet funding and now has its own account here: @drfed.

drfed.org

DrFed โ€” The ActivityPub debugging platform

DrFed is a web-based platform for developing and debugging ActivityPub implementations, built by the team behind Fedify.

@drfed@hackers.pub

Some of you have already heard of us as Studio. We now have a proper name: DrFed, short for โ€œDoctor Fed.โ€ We've also just received funding from @nlnet, through the NGI0 Commons Fund.

is a web app for debugging interoperability failures. When two implementations don't federate, the slow part is usually figuring out where the exchange broke: signing, JSON-LD processing, WebFinger, or something less obvious. DrFed's first job is to show where it failed.

We're the team behind @fedify: @2chanhaeng, @gaebalgom, @hongminhee, and @z9mb1. We'll post updates when there's something to try.

nlnet.nl

NLnet; DrFed

DrFed is our sister project, built alongside to tackle the debugging side of development. It just received @nlnet funding and now has its own account here: @drfed.

drfed.org

DrFed โ€” The ActivityPub debugging platform

DrFed is a web-based platform for developing and debugging ActivityPub implementations, built by the team behind Fedify.

@drfed@hackers.pub

Some of you have already heard of us as Studio. We now have a proper name: DrFed, short for โ€œDoctor Fed.โ€ We've also just received funding from @nlnet, through the NGI0 Commons Fund.

is a web app for debugging interoperability failures. When two implementations don't federate, the slow part is usually figuring out where the exchange broke: signing, JSON-LD processing, WebFinger, or something less obvious. DrFed's first job is to show where it failed.

We're the team behind @fedify: @2chanhaeng, @gaebalgom, @hongminhee, and @z9mb1. We'll post updates when there's something to try.

nlnet.nl

NLnet; DrFed

DrFed is our sister project, built alongside to tackle the debugging side of development. It just received @nlnet funding and now has its own account here: @drfed.

drfed.org

DrFed โ€” The ActivityPub debugging platform

DrFed is a web-based platform for developing and debugging ActivityPub implementations, built by the team behind Fedify.

@drfed@hackers.pub

Some of you have already heard of us as Studio. We now have a proper name: DrFed, short for โ€œDoctor Fed.โ€ We've also just received funding from @nlnet, through the NGI0 Commons Fund.

is a web app for debugging interoperability failures. When two implementations don't federate, the slow part is usually figuring out where the exchange broke: signing, JSON-LD processing, WebFinger, or something less obvious. DrFed's first job is to show where it failed.

We're the team behind @fedify: @2chanhaeng, @gaebalgom, @hongminhee, and @z9mb1. We'll post updates when there's something to try.

nlnet.nl

NLnet; DrFed

@fedify

Congratulations!

I am really delighted with @nlnet decision to select @drfed for an grant. Having good quality developer tools for creating based solutions is so important for a healthy developer ecosystem.

To anyone reading, bookmark the website..

Fedify Studio is focused on alleviating the most pressing issue of "Why is ActivityPub development so frustratingly hard?" that makes it unattractive for newcomers to adopt the technology. And addresses topics of:

- Protocol complexity
- hell
- Debugging nightmare
- Limited visibility

from the very start has paid attention to ease of use for fediverse solution developers, not just by their library codebase, but with comprehensive documentation and tools to guide people along. Kudos here to @hongminhee who started this great initiative!

DrFed is our sister project, built alongside to tackle the debugging side of development. It just received @nlnet funding and now has its own account here: @drfed.

drfed.org

DrFed โ€” The ActivityPub debugging platform

DrFed is a web-based platform for developing and debugging ActivityPub implementations, built by the team behind Fedify.

@drfed@hackers.pub

Some of you have already heard of us as Studio. We now have a proper name: DrFed, short for โ€œDoctor Fed.โ€ We've also just received funding from @nlnet, through the NGI0 Commons Fund.

is a web app for debugging interoperability failures. When two implementations don't federate, the slow part is usually figuring out where the exchange broke: signing, JSON-LD processing, WebFinger, or something less obvious. DrFed's first job is to show where it failed.

We're the team behind @fedify: @2chanhaeng, @gaebalgom, @hongminhee, and @z9mb1. We'll post updates when there's something to try.

nlnet.nl

NLnet; DrFed

DrFed is our sister project, built alongside to tackle the debugging side of development. It just received @nlnet funding and now has its own account here: @drfed.

drfed.org

DrFed โ€” The ActivityPub debugging platform

DrFed is a web-based platform for developing and debugging ActivityPub implementations, built by the team behind Fedify.

@drfed@hackers.pub

Some of you have already heard of us as Studio. We now have a proper name: DrFed, short for โ€œDoctor Fed.โ€ We've also just received funding from @nlnet, through the NGI0 Commons Fund.

is a web app for debugging interoperability failures. When two implementations don't federate, the slow part is usually figuring out where the exchange broke: signing, JSON-LD processing, WebFinger, or something less obvious. DrFed's first job is to show where it failed.

We're the team behind @fedify: @2chanhaeng, @gaebalgom, @hongminhee, and @z9mb1. We'll post updates when there's something to try.

nlnet.nl

NLnet; DrFed

DrFed is our sister project, built alongside to tackle the debugging side of development. It just received @nlnet funding and now has its own account here: @drfed.

drfed.org

DrFed โ€” The ActivityPub debugging platform

DrFed is a web-based platform for developing and debugging ActivityPub implementations, built by the team behind Fedify.

@drfed@hackers.pub

Some of you have already heard of us as Studio. We now have a proper name: DrFed, short for โ€œDoctor Fed.โ€ We've also just received funding from @nlnet, through the NGI0 Commons Fund.

is a web app for debugging interoperability failures. When two implementations don't federate, the slow part is usually figuring out where the exchange broke: signing, JSON-LD processing, WebFinger, or something less obvious. DrFed's first job is to show where it failed.

We're the team behind @fedify: @2chanhaeng, @gaebalgom, @hongminhee, and @z9mb1. We'll post updates when there's something to try.

nlnet.nl

NLnet; DrFed

DrFed is our sister project, built alongside to tackle the debugging side of development. It just received @nlnet funding and now has its own account here: @drfed.

drfed.org

DrFed โ€” The ActivityPub debugging platform

DrFed is a web-based platform for developing and debugging ActivityPub implementations, built by the team behind Fedify.

@drfed@hackers.pub

Some of you have already heard of us as Studio. We now have a proper name: DrFed, short for โ€œDoctor Fed.โ€ We've also just received funding from @nlnet, through the NGI0 Commons Fund.

is a web app for debugging interoperability failures. When two implementations don't federate, the slow part is usually figuring out where the exchange broke: signing, JSON-LD processing, WebFinger, or something less obvious. DrFed's first job is to show where it failed.

We're the team behind @fedify: @2chanhaeng, @gaebalgom, @hongminhee, and @z9mb1. We'll post updates when there's something to try.

nlnet.nl

NLnet; DrFed

DrFed is our sister project, built alongside to tackle the debugging side of development. It just received @nlnet funding and now has its own account here: @drfed.

drfed.org

DrFed โ€” The ActivityPub debugging platform

DrFed is a web-based platform for developing and debugging ActivityPub implementations, built by the team behind Fedify.

@drfed@hackers.pub

Some of you have already heard of us as Studio. We now have a proper name: DrFed, short for โ€œDoctor Fed.โ€ We've also just received funding from @nlnet, through the NGI0 Commons Fund.

is a web app for debugging interoperability failures. When two implementations don't federate, the slow part is usually figuring out where the exchange broke: signing, JSON-LD processing, WebFinger, or something less obvious. DrFed's first job is to show where it failed.

We're the team behind @fedify: @2chanhaeng, @gaebalgom, @hongminhee, and @z9mb1. We'll post updates when there's something to try.

nlnet.nl

NLnet; DrFed

@mxv@fediverse.tryptophonic.com

Ooh yeah! I've been waiting for #GoToSocial to support relays for ... well, since I started using it. Which was immediately after #Yunohost made it available, so that's quite a while now. Very exciting news for my favourite #ActivityPub fedi server.

@mxv@fediverse.tryptophonic.com

Ooh yeah! I've been waiting for #GoToSocial to support relays for ... well, since I started using it. Which was immediately after #Yunohost made it available, so that's quite a while now. Very exciting news for my favourite #ActivityPub fedi server.

@stuartb@social.teamb.space

Okay, this is doing my head in.
It turns out that at least some of my posts and comments from some of my Fedi-fied (self-hosted) WordPress sites aren't federating, either when posting through the site, or from various apps.
And I just can't figure out what is going on.
Liking and boosting posts appear to work, but comments appear on my site, but not on the post I allegedly commented on.
The occasional one might sneak through, and I will get a reply back, but others - nope, nothing.
Any ideas?
Any incoming comments are listed on the comments page as "Protocol:ActivityPub", while any I try sending are listed as "Protocol:Local", which I assume means that they are being sent somewhere on my server rather than federated out.
Using WordPress 7.0, and the latest versions of the ActivityPub, Friends, WebFinger, Node.Info, and EnableMastodonApps plugins.
I can't find any settings that need changing on any of these, and would love some help.

@pfefferle
@alex

@stuartb@social.teamb.space

Okay, this is doing my head in.
It turns out that at least some of my posts and comments from some of my Fedi-fied (self-hosted) WordPress sites aren't federating, either when posting through the site, or from various apps.
And I just can't figure out what is going on.
Liking and boosting posts appear to work, but comments appear on my site, but not on the post I allegedly commented on.
The occasional one might sneak through, and I will get a reply back, but others - nope, nothing.
Any ideas?
Any incoming comments are listed on the comments page as "Protocol:ActivityPub", while any I try sending are listed as "Protocol:Local", which I assume means that they are being sent somewhere on my server rather than federated out.
Using WordPress 7.0, and the latest versions of the ActivityPub, Friends, WebFinger, Node.Info, and EnableMastodonApps plugins.
I can't find any settings that need changing on any of these, and would love some help.

@pfefferle
@alex

@fitpub@fosstodon.org

Today we released FitPub 1.1.0. ๐ŸŽ‰

Highlights include password reset, avatar uploads, local follows and follow requests, light/dark mode, activity tiles, NodeInfo support, improved federation, instance statistics, and location support for remote activities.

Thank you to everyone who opened issues, submitted pull requests, tested releases, and shared feedback. Every contribution helps.

๐ŸŒ fitpub.social

fitpub.social

Public Timeline - FitPub

@fitpub@fosstodon.org

Today we released FitPub 1.1.0. ๐ŸŽ‰

Highlights include password reset, avatar uploads, local follows and follow requests, light/dark mode, activity tiles, NodeInfo support, improved federation, instance statistics, and location support for remote activities.

Thank you to everyone who opened issues, submitted pull requests, tested releases, and shared feedback. Every contribution helps.

๐ŸŒ fitpub.social

fitpub.social

Public Timeline - FitPub

@fedizen@mastodon.social
@simon_brooke@mastodon.scot ยท Reply to Lee C

@LJClements8 a really useful new feature for would be for me to be able to subscribe to replies to this post...

(Waits hopefully for someone to say 'that's already done, all you have to do is...')

@fedizen@mastodon.social
@silverpill@mitra.social

I've been reviewing the new FEP from the Mastodon team today, and one thing that caught my attention is the use of Accept and Reject activities for managing approvals. Another day, someone proposed to use Follow activity for "watching a thread".

So now, when you receive a standard activity, you need to use increasingly complicated heuristics to figure out what the activity does, because it is not possible to infer that from its type anymore.

This has to stop. I think we need to start giving our activities better names.

#ActivityPub

mitra.social

Mitra - Federated social network

Federated social network

@silverpill@mitra.social

I've been reviewing the new FEP from the Mastodon team today, and one thing that caught my attention is the use of Accept and Reject activities for managing approvals. Another day, someone proposed to use Follow activity for "watching a thread".

So now, when you receive a standard activity, you need to use increasingly complicated heuristics to figure out what the activity does, because it is not possible to infer that from its type anymore.

This has to stop. I think we need to start giving our activities better names.

#ActivityPub

mitra.social

Mitra - Federated social network

Federated social network

@silverpill@mitra.social

I've been reviewing the new FEP from the Mastodon team today, and one thing that caught my attention is the use of Accept and Reject activities for managing approvals. Another day, someone proposed to use Follow activity for "watching a thread".

So now, when you receive a standard activity, you need to use increasingly complicated heuristics to figure out what the activity does, because it is not possible to infer that from its type anymore.

This has to stop. I think we need to start giving our activities better names.

#ActivityPub

mitra.social

Mitra - Federated social network

Federated social network

@chpietsch@fedifreu.de ยท Reply to Aline Blankertz

@alineblankertz @malteengeler

Regarding the why: When coding Mastodon, Eugen used those parts of the and standards he found useful. For functionality that was not (yet) covered by those standards, he came up with his own solutions and made them part of the Mastodon API which can be considered a quasi-standard now.

When Mastodon was a one person shop, this was a pragmatic way to make progress fast. Standardization bodies are famous for moving slowly, and maybe Eugen was also put off by some of the more eccentric personalities in the ActivityPub community. Now that Mastodon (the organisation) has grown, they should assume a more active role in standards bodies. Perhaps they have โ€“ I have not followed these processes closely in recent years.

At any rate, I think it is fair to say that the Mastodon makers and the Fediverse standards community have had a difficult relationship. This is my impression from visiting FediCamp and FediDay events (where Mastodon makers were absent), and some reading in the ActivityPub community forum, e.g.:
socialhub.activitypub.rocks/t/
socialhub.activitypub.rocks/t/

socialhub.activitypub.rocks

Discussion: Mastodon and the Fediverse

Via this Lemmy post I just bumped into this: An Open Letter Calling for the Resignation of Eugen Rochko (Gargron) from Mastodon Development Posting here because the broader discussion on the topic is very relevant to this community, and in hopes we can - in a very constructive way - find ways to improve on some of the pain points that are brought up, and possible others that are as yet unnamed. Note that I do not endorse the open letter, but Iโ€™ll keep my opinion and thoughts for later (might wr...

@chpietsch@fedifreu.de ยท Reply to Aline Blankertz

@alineblankertz @malteengeler

Regarding the why: When coding Mastodon, Eugen used those parts of the and standards he found useful. For functionality that was not (yet) covered by those standards, he came up with his own solutions and made them part of the Mastodon API which can be considered a quasi-standard now.

When Mastodon was a one person shop, this was a pragmatic way to make progress fast. Standardization bodies are famous for moving slowly, and maybe Eugen was also put off by some of the more eccentric personalities in the ActivityPub community. Now that Mastodon (the organisation) has grown, they should assume a more active role in standards bodies. Perhaps they have โ€“ I have not followed these processes closely in recent years.

At any rate, I think it is fair to say that the Mastodon makers and the Fediverse standards community have had a difficult relationship. This is my impression from visiting FediCamp and FediDay events (where Mastodon makers were absent), and some reading in the ActivityPub community forum, e.g.:
socialhub.activitypub.rocks/t/
socialhub.activitypub.rocks/t/

socialhub.activitypub.rocks

Discussion: Mastodon and the Fediverse

Via this Lemmy post I just bumped into this: An Open Letter Calling for the Resignation of Eugen Rochko (Gargron) from Mastodon Development Posting here because the broader discussion on the topic is very relevant to this community, and in hopes we can - in a very constructive way - find ways to improve on some of the pain points that are brought up, and possible others that are as yet unnamed. Note that I do not endorse the open letter, but Iโ€™ll keep my opinion and thoughts for later (might wr...

@mattcen@aus.social

I remember reading previously that one shouldn't switch an server between implementations (e.g. from to ), but never understood why. I know a fair bit about AP but haven't read the full spec.
Can somebody please tl;dr this for me? Is it primarily due to the private keys used to sign activities, or something more complex?

@apps@toot.fedilab.app

This is Haru and Tanos. Haru is the black cat. We adopted him from a shelter at two years old, after he lived there his whole life. Tanos is a Malinois. We took him in when his owner could not keep him anymore.
Life can change fast, animals are often the first to lose their home. This is why I made , a shared map for animal welfare. Not many people use it yet, but it is worth sharing. It relies fully on and uses .

pawfed.org/how-it-works

Haru, a black cat, sits calmly on a step between two dogs. At the top stands Raven, a white Swiss Shepherd, looking down at the cat. At the bottom, with his back to the camera, is Tanos, a Malinois. They all live together peacefully.
ALT text

Haru, a black cat, sits calmly on a step between two dogs. At the top stands Raven, a white Swiss Shepherd, looking down at the cat. At the bottom, with his back to the camera, is Tanos, a Malinois. They all live together peacefully.

@mattcen@aus.social

I remember reading previously that one shouldn't switch an server between implementations (e.g. from to ), but never understood why. I know a fair bit about AP but haven't read the full spec.
Can somebody please tl;dr this for me? Is it primarily due to the private keys used to sign activities, or something more complex?

@apps@toot.fedilab.app

This is Haru and Tanos. Haru is the black cat. We adopted him from a shelter at two years old, after he lived there his whole life. Tanos is a Malinois. We took him in when his owner could not keep him anymore.
Life can change fast, animals are often the first to lose their home. This is why I made , a shared map for animal welfare. Not many people use it yet, but it is worth sharing. It relies fully on and uses .

pawfed.org/how-it-works

Haru, a black cat, sits calmly on a step between two dogs. At the top stands Raven, a white Swiss Shepherd, looking down at the cat. At the bottom, with his back to the camera, is Tanos, a Malinois. They all live together peacefully.
ALT text

Haru, a black cat, sits calmly on a step between two dogs. At the top stands Raven, a white Swiss Shepherd, looking down at the cat. At the bottom, with his back to the camera, is Tanos, a Malinois. They all live together peacefully.

@apps@toot.fedilab.app

This is Haru and Tanos. Haru is the black cat. We adopted him from a shelter at two years old, after he lived there his whole life. Tanos is a Malinois. We took him in when his owner could not keep him anymore.
Life can change fast, animals are often the first to lose their home. This is why I made , a shared map for animal welfare. Not many people use it yet, but it is worth sharing. It relies fully on and uses .

pawfed.org/how-it-works

Haru, a black cat, sits calmly on a step between two dogs. At the top stands Raven, a white Swiss Shepherd, looking down at the cat. At the bottom, with his back to the camera, is Tanos, a Malinois. They all live together peacefully.
ALT text

Haru, a black cat, sits calmly on a step between two dogs. At the top stands Raven, a white Swiss Shepherd, looking down at the cat. At the bottom, with his back to the camera, is Tanos, a Malinois. They all live together peacefully.

@dansup@mastodon.social

I am working on my Laravel-Activitypub package, it will replace federation support in Pixelfed once all tests are passing!

To demonstrate and test it before we use it in Pixelfed, a small and simple single user photo sharing server will be published and I'll boost the first photo here.

@weekinfediverse@mitra.social
@weekinfediverse@mitra.social
@weekinfediverse@mitra.social
@weekinfediverse@mitra.social
@weekinfediverse@mitra.social
@apps@toot.fedilab.app

Following a thread is now available in the latest version of . already lets you follow an object, not only an account, so a Follow can target a post. You then receive new replies, even from accounts you do not follow. A thread is short-lived, so the Follow uses the standard endTime property to expire on its own. It works best when other servers support it, that's why I want to turn it into a .

For people curious about the idea: tom79.dev/posts/follow-a-note/

@apps@toot.fedilab.app

Following a thread is now available in the latest version of . already lets you follow an object, not only an account, so a Follow can target a post. You then receive new replies, even from accounts you do not follow. A thread is short-lived, so the Follow uses the standard endTime property to expire on its own. It works best when other servers support it, that's why I want to turn it into a .

For people curious about the idea: tom79.dev/posts/follow-a-note/

@HolosSocial@mastodon.social

Following threads will be available in 1.10.0. You can subscribe to a thread and get notified when new replies arrive, even from accounts you do not follow. It works with standard activities by sending a Follow targeting a post, with a polling fallback for servers that do not support it yet.

How it works: tom79.dev/posts/follow-a-note/

tom79.dev

Following conversations across the Fediverse

A proposal for following threads in the Fediverse using standard ActivityPub primitives. How Follow-a-Note works, why it matters, and what Holos does until servers adopt it.

@HolosSocial@mastodon.social

Following threads will be available in 1.10.0. You can subscribe to a thread and get notified when new replies arrive, even from accounts you do not follow. It works with standard activities by sending a Follow targeting a post, with a polling fallback for servers that do not support it yet.

How it works: tom79.dev/posts/follow-a-note/

tom79.dev

Following conversations across the Fediverse

A proposal for following threads in the Fediverse using standard ActivityPub primitives. How Follow-a-Note works, why it matters, and what Holos does until servers adopt it.

@HolosSocial@mastodon.social

Following threads will be available in 1.10.0. You can subscribe to a thread and get notified when new replies arrive, even from accounts you do not follow. It works with standard activities by sending a Follow targeting a post, with a polling fallback for servers that do not support it yet.

How it works: tom79.dev/posts/follow-a-note/

tom79.dev

Following conversations across the Fediverse

A proposal for following threads in the Fediverse using standard ActivityPub primitives. How Follow-a-Note works, why it matters, and what Holos does until servers adopt it.

@HolosSocial@mastodon.social

Following threads will be available in 1.10.0. You can subscribe to a thread and get notified when new replies arrive, even from accounts you do not follow. It works with standard activities by sending a Follow targeting a post, with a polling fallback for servers that do not support it yet.

How it works: tom79.dev/posts/follow-a-note/

tom79.dev

Following conversations across the Fediverse

A proposal for following threads in the Fediverse using standard ActivityPub primitives. How Follow-a-Note works, why it matters, and what Holos does until servers adopt it.

@ElenaMusk@tuiter.rocks

ยฟTikTok pero federado?

Loops es un proyecto del creador de Pixelfed que intenta llevar los vรญdeos cortos al Fediverso usando ActivityPub. Vรญdeos verticales, cรณdigo abierto, financiaciรณn comunitaria y una filosofรญa muy distinta a la de las grandes plataformas.

Todavรญa estรก creciendo y tiene camino por delante, pero ya se puede probar.

En FediPunk le hemos echado un vistazo:

fedipunk.com/que-es-loops-alte

fedipunk.com

Quรฉ es Loops: alternativa federada a TikTok

Loops es una alternativa federada a TikTok basada en ActivityPub. Vรญdeos cortos, Fediverso y un modelo que no depende de vender tu atenciรณn.

@ElenaMusk@tuiter.rocks

ยฟTikTok pero federado?

Loops es un proyecto del creador de Pixelfed que intenta llevar los vรญdeos cortos al Fediverso usando ActivityPub. Vรญdeos verticales, cรณdigo abierto, financiaciรณn comunitaria y una filosofรญa muy distinta a la de las grandes plataformas.

Todavรญa estรก creciendo y tiene camino por delante, pero ya se puede probar.

En FediPunk le hemos echado un vistazo:

fedipunk.com/que-es-loops-alte

fedipunk.com

Quรฉ es Loops: alternativa federada a TikTok

Loops es una alternativa federada a TikTok basada en ActivityPub. Vรญdeos cortos, Fediverso y un modelo que no depende de vender tu atenciรณn.

@pureweb@mastodon.social

A case for organisations running their own ActivityPub servers
The internet has always been about standards, otherwise it simply would not work. The visibility of these for the average user has diminished as large platforms have monopolised activities on the web and run them with their own invisible data structures. Now the internet is the main form of communication there is a g

blog.purewebhosting.nz/a-case-

@pureweb@mastodon.social

A case for organisations running their own ActivityPub servers
The internet has always been about standards, otherwise it simply would not work. The visibility of these for the average user has diminished as large platforms have monopolised activities on the web and run them with their own invisible data structures. Now the internet is the main form of communication there is a g

blog.purewebhosting.nz/a-case-

@pureweb@mastodon.social

A case for organisations running their own ActivityPub servers
The internet has always been about standards, otherwise it simply would not work. The visibility of these for the average user has diminished as large platforms have monopolised activities on the web and run them with their own invisible data structures. Now the internet is the main form of communication there is a g

blog.purewebhosting.nz/a-case-

@janvlug@mastodon.social
@janvlug@mastodon.social
@dansup@mastodon.social
@dansup@mastodon.social

I am working on my Laravel-Activitypub package, it will replace federation support in Pixelfed once all tests are passing!

To demonstrate and test it before we use it in Pixelfed, a small and simple single user photo sharing server will be published and I'll boost the first photo here.

@dansup@mastodon.social

I am working on my Laravel-Activitypub package, it will replace federation support in Pixelfed once all tests are passing!

To demonstrate and test it before we use it in Pixelfed, a small and simple single user photo sharing server will be published and I'll boost the first photo here.

@apps@toot.fedilab.app

This post is about 7 months old, and went far beyond it since. It now has DMs with the Signal protocol, and real identity portability. You can use a custom domain so your identity rests on your own name and keys, and keep your media on your own cloud. Leaving a relay is no longer a migration, you just point your domain elsewhere and keep going. This remains optional, you have time to discover the app and enable things later that will give you full independence on .

toot.fedilab.app

Fedilab Apps (@apps@toot.fedilab.app)

We're building something for the Fediverse. #Holos ActivityPub running on your phone. Your own server, your data stored locally. A relay handles your stable identity when you're offline. One account, all formats. Short text, long articles, photos, videos. The UI adapts to your mood. Switch between text mode, photo grid, video feed, article editor based on what you feel like sharing. Same network, same followers. Early stages, but the foundation is solid. We wanted to share the progress.

@apps@toot.fedilab.app

We're building something for the Fediverse.

ActivityPub running on your phone. Your own server, your data stored locally. A relay handles your stable identity when you're offline.

One account, all formats. Short text, long articles, photos, videos. The UI adapts to your mood. Switch between text mode, photo grid, video feed, article editor based on what you feel like sharing.

Same network, same followers.

Early stages, but the foundation is solid. We wanted to share the progress.

@apps@toot.fedilab.app

This post is about 7 months old, and went far beyond it since. It now has DMs with the Signal protocol, and real identity portability. You can use a custom domain so your identity rests on your own name and keys, and keep your media on your own cloud. Leaving a relay is no longer a migration, you just point your domain elsewhere and keep going. This remains optional, you have time to discover the app and enable things later that will give you full independence on .

toot.fedilab.app

Fedilab Apps (@apps@toot.fedilab.app)

We're building something for the Fediverse. #Holos ActivityPub running on your phone. Your own server, your data stored locally. A relay handles your stable identity when you're offline. One account, all formats. Short text, long articles, photos, videos. The UI adapts to your mood. Switch between text mode, photo grid, video feed, article editor based on what you feel like sharing. Same network, same followers. Early stages, but the foundation is solid. We wanted to share the progress.

@apps@toot.fedilab.app

We're building something for the Fediverse.

ActivityPub running on your phone. Your own server, your data stored locally. A relay handles your stable identity when you're offline.

One account, all formats. Short text, long articles, photos, videos. The UI adapts to your mood. Switch between text mode, photo grid, video feed, article editor based on what you feel like sharing.

Same network, same followers.

Early stages, but the foundation is solid. We wanted to share the progress.

@dima@dol.social

Pretty neat to see @fitpub featured in this week's Self-Hosted Weekly on @selfhst!

It's a project I worked on - an ActivityPub-based platform for sharing fitness activities.

Feels especially relevant right now with Strava paywalling parts of their API and pushing people toward more open alternatives.

Check it out: fitpub.social/
Full digest: selfh.st/weekly/2026-06-05/

Strava (hosted fitness tracking) announced they're paywalling API access, which is impacting self-hosted projects that rely on it for independent data syncing (consider this new ActivityPub alternative (FitHub) or Endurain if you've been impacted)
ALT text

Strava (hosted fitness tracking) announced they're paywalling API access, which is impacting self-hosted projects that rely on it for independent data syncing (consider this new ActivityPub alternative (FitHub) or Endurain if you've been impacted)

@steve@social.technoetic.com

quirk of the day: the AS2 Document type. What is it? Well, obviously "it's document of any kind" (per the AS2 spec). ๐Ÿคฏ There are no Document-specific properties. Page is a Document, but Article is not. Some people have claimed it's related to resources stored in files, but files are not a thing in AS2. Dereferencing an Image URI (which is a Document) might return a dynamically-generated resource, not one stored in a server file. One can't assume file storage for any resource.

@dima@dol.social

Pretty neat to see @fitpub featured in this week's Self-Hosted Weekly on @selfhst!

It's a project I worked on - an ActivityPub-based platform for sharing fitness activities.

Feels especially relevant right now with Strava paywalling parts of their API and pushing people toward more open alternatives.

Check it out: fitpub.social/
Full digest: selfh.st/weekly/2026-06-05/

Strava (hosted fitness tracking) announced they're paywalling API access, which is impacting self-hosted projects that rely on it for independent data syncing (consider this new ActivityPub alternative (FitHub) or Endurain if you've been impacted)
ALT text

Strava (hosted fitness tracking) announced they're paywalling API access, which is impacting self-hosted projects that rely on it for independent data syncing (consider this new ActivityPub alternative (FitHub) or Endurain if you've been impacted)

@steve@social.technoetic.com

quirk of the day: the AS2 Document type. What is it? Well, obviously "it's document of any kind" (per the AS2 spec). ๐Ÿคฏ There are no Document-specific properties. Page is a Document, but Article is not. Some people have claimed it's related to resources stored in files, but files are not a thing in AS2. Dereferencing an Image URI (which is a Document) might return a dynamically-generated resource, not one stored in a server file. One can't assume file storage for any resource.

@bouncepaw@links.bouncepaw.com

ActivityPub and HTTP Signatures

Authentication is not specified by the ActivityPub standard. In practice, the fediverse mostly uses HTTP Message Signatures to authenticate server-to-server requests, using a relatively consistent profile. This document describes that profile and usage, recommends best practices, and evaluates their success so far.

swicg.github.io

ActivityPub and HTTP Signatures

@xabd@mastodon.social

BookWyrm is an open-source social reading platform that lets you track books, write reviews, and discover new reads without relying on Goodreads.

You can host it yourself, connect with other readers, and even interact across the Fediverse thanks to ActivityPub support.

A great choice for book lovers who value openness, ownership, and privacy.

๐Ÿ‘‰ digitalescapetools.com/tools/t

BookWyrm project page showing information about the open-source social reading platform, including release details and a description of its reading, review, and social features.
ALT text

BookWyrm project page showing information about the open-source social reading platform, including release details and a description of its reading, review, and social features.

BookWyrm book discovery interface displaying a grid of book covers from various genres, highlighting browsing and recommendation features for readers.
ALT text

BookWyrm book discovery interface displaying a grid of book covers from various genres, highlighting browsing and recommendation features for readers.

@xabd@mastodon.social

BookWyrm is an open-source social reading platform that lets you track books, write reviews, and discover new reads without relying on Goodreads.

You can host it yourself, connect with other readers, and even interact across the Fediverse thanks to ActivityPub support.

A great choice for book lovers who value openness, ownership, and privacy.

๐Ÿ‘‰ digitalescapetools.com/tools/t

BookWyrm project page showing information about the open-source social reading platform, including release details and a description of its reading, review, and social features.
ALT text

BookWyrm project page showing information about the open-source social reading platform, including release details and a description of its reading, review, and social features.

BookWyrm book discovery interface displaying a grid of book covers from various genres, highlighting browsing and recommendation features for readers.
ALT text

BookWyrm book discovery interface displaying a grid of book covers from various genres, highlighting browsing and recommendation features for readers.

@bouncepaw@links.bouncepaw.com

ActivityPub and HTTP Signatures

Authentication is not specified by the ActivityPub standard. In practice, the fediverse mostly uses HTTP Message Signatures to authenticate server-to-server requests, using a relatively consistent profile. This document describes that profile and usage, recommends best practices, and evaluates their success so far.

swicg.github.io

ActivityPub and HTTP Signatures

@mariusor@metalhead.club

> Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.
> (Brian Kernighan)

Bit hard by this today.

The Rube Goldberg-esque machine of generating HTTP-Signatures and verifying them has become too much for my brain to handle.

Too many elements to keep track of and I'm currently having steam coming out of my ears.

I'll sleep on it...

@yehor@mastodon.glitchy.social ยท Reply to Yehor ๐Ÿ‡บ๐Ÿ‡ฆ

So the federation is working on my instance, and you can actually follow me there from any instance: @yehor@wanderer.glitchy.social

The issue was actually in my instance: mastodon.glitchy.social/@yehor

mastodon.glitchy.social

Yehor ๐Ÿ‡บ๐Ÿ‡ฆ (@yehor@glitchy.social)

Wrote my first server announcement. Because yesterday, after updating my #Mastodon instance to 4.5.11, I didn't realise the Sidekiq died. I spotted an unusual server load and temperature 24 hours later, found out that it was a Mastodon LXC, and realised there had been nothing processed by Sidekiq for 24 hours already. I'm not sure about the reasons, because I didn't find anything useful in the logs. I definitely need better monitoring for #GlitchySocial. #selfhost #homelab #selfhosted

@yehor@mastodon.glitchy.social

Wrote my first server announcement. Because yesterday, after updating my instance to 4.5.11, I didn't realise the Sidekiq died.

I spotted an unusual server load and temperature 24 hours later, found out that it was a Mastodon LXC, and realised there had been nothing processed by Sidekiq for 24 hours already.

I'm not sure about the reasons, because I didn't find anything useful in the logs. I definitely need better monitoring for .

@yehor@mastodon.glitchy.social ยท Reply to Yehor ๐Ÿ‡บ๐Ÿ‡ฆ

So the federation is working on my instance, and you can actually follow me there from any instance: @yehor@wanderer.glitchy.social

The issue was actually in my instance: mastodon.glitchy.social/@yehor

mastodon.glitchy.social

Yehor ๐Ÿ‡บ๐Ÿ‡ฆ (@yehor@glitchy.social)

Wrote my first server announcement. Because yesterday, after updating my #Mastodon instance to 4.5.11, I didn't realise the Sidekiq died. I spotted an unusual server load and temperature 24 hours later, found out that it was a Mastodon LXC, and realised there had been nothing processed by Sidekiq for 24 hours already. I'm not sure about the reasons, because I didn't find anything useful in the logs. I definitely need better monitoring for #GlitchySocial. #selfhost #homelab #selfhosted

@yehor@mastodon.glitchy.social

Wrote my first server announcement. Because yesterday, after updating my instance to 4.5.11, I didn't realise the Sidekiq died.

I spotted an unusual server load and temperature 24 hours later, found out that it was a Mastodon LXC, and realised there had been nothing processed by Sidekiq for 24 hours already.

I'm not sure about the reasons, because I didn't find anything useful in the logs. I definitely need better monitoring for .

@mxv@fediverse.tryptophonic.com

Just discovered the existence of the #snac #ActivityPub server. Looks very interesting, appealing to my #smolweb sensibilities very much, and seems even smoler than #GoToSocial, which I've been using very happily for a few years now. Could be time for me to try another flavour, as Adam Ant might say. And, I'm very very down with the acronym. Yep, Social Networks Are Crap.

@hamiller_friendica@anonsys.net

Das ist ja interessant, die gute, alte Forensoftware APBoard wurde sozusagen runderneuert und hat jetzt auch Activity Pub integriert.

Bin gespannt, ob ein Fรถderieren mit nodeBB und Discourse mรถglich ist.

apboard.de/de/

apboard.de

APBoard v3 โ€“ Next Generation PHP Forum Software

APBoard v3 โ€“ das legendรคre Open-Source-Forum aus dem Jahr 2000, komplett neu aufgebaut. PHP 8.5, Twig-Templates, vollstรคndige Sicherheitsarchitektur, Docker-ready.

@reiver@mastodon.social

Linked Data in HTTP Headers rather than in JSON (i.e., JSON-LD), etc

โ‚

Many Fediverse servers will give you different content depending on the "Accept" header in the HTTP request.

If "application/activity+json" you get ActivityPub/ActivityStreams JSON-LD metadata. If something else, you get actual file/payload.

If we encoded Linked Data as HTTP headers (key-value pairs), we could include the Linked Data with the actual file/payload.

@reiver@mastodon.social

acct-URI like URI for content

โ‚

We have acct-URI for referring to actors.

Ex: acct:bahmankas@example.com

We resolve this to an HTTP-URI using WebFinger.

โ‚

We don't have an acct-URI like URI for referring to an actor's content.

Which would also be resolved with WebFinger.

Ex: obj:bahmankas@example.com/file.ext

โ‚

I think there are many advantages to being able to refer to content separate from where it is stored.

@MichalBryxi@mastodon.world

If you've been wanting to move your activity history from Strava to FitPub but dreaded dealing with the export files, I made a small browser tool that does the heavy lifting.

Drop in your Strava export files, it decompresses the .fit.gz files, splits everything into correctly-sized ZIP batches, and hands them back for upload. No install, no server, runs entirely in your browser.

๐Ÿ‘‰ ๐Ÿƒ๐Ÿปโ€โ™€๏ธ vast-ch.github.io/strava-archi

Screenshot of the app. Move your activity history from Strava to FitPub. This tool converts your Strava data export into correctly formatted, sized, and counted ZIP batches ready for import.
ALT text

Screenshot of the app. Move your activity history from Strava to FitPub. This tool converts your Strava data export into correctly formatted, sized, and counted ZIP batches ready for import.

@lauti@bonfire.cafe

The next step in our #activitypub implementation is ready! This brings a simple instance actor object along with #webfinger support for it and a #nodeinfo endpoint.

We highly appreciate reviews from any #fedidev ๐Ÿ™

codeberg.org/Klasse-Methode/...


We are really greatfull for @nlnet@social.nlnet.nl to fund this work and for @linos@graz.social for being such a great mentor!

codeberg.org

feat(activitypub): add nodeinfo, webfinger and instance actor object

lauti - Open Source Community Calendar for events, groups and places

@reiver@mastodon.social

acct-URI like URI for content

โ‚

We have acct-URI for referring to actors.

Ex: acct:bahmankas@example.com

We resolve this to an HTTP-URI using WebFinger.

โ‚

We don't have an acct-URI like URI for referring to an actor's content.

Which would also be resolved with WebFinger.

Ex: obj:bahmankas@example.com/file.ext

โ‚

I think there are many advantages to being able to refer to content separate from where it is stored.

@NetscapeNavigator@vivaldi.net

If you are running a version of either Misskey or Mastodon that is more than a year old, I strongly urge you to reconsider your reasons for not upgrading.

This low-effort exploit (see screenshot) can be executed on Mastodon 4.0.x through 4.3.x. If you are still running Mastodon 2.x or 3.x, the situation is significantly worse.

โš ๏ธ This isn't just a Mastodon issue; it affects Misskey too. If you are using a version of Misskey older than 2025, you have simply been lucky so far.

For context, the current version of Mastodon is 4.5.11 (with 4.6 beta 1 available), and the current version of Misskey is 2026.5.4 (with 2026.6.0 available). There is no better time to upgrade than right now. โณ

In my opinion, the Fediverse has been incredibly lucky. Most of you have only had to deal with the occasional bot or script kiddie trying to spam your site. However, leaving your software unpatched exposes you to much more severe threats.

Frankly, as someone who used to manage online forum communities, I donโ€™t understand the reluctance to upgrade. You aren't just leaving yourself vulnerable โ€” you are risking the security of the hundreds or thousands of users who have placed their trust in your ability to manage the platform safely.

A screenshot that reads:  I cannot yet get this to save. The commit still fails. But I am sure someone else could. It is time to upgrade!
ALT text

A screenshot that reads: I cannot yet get this to save. The commit still fails. But I am sure someone else could. It is time to upgrade!

A screenshot taken from a Misskey site.  The message written in both Japanese and English reads: You're running an outdated version of Misskey. You should really upgrade.
ALT text

A screenshot taken from a Misskey site. The message written in both Japanese and English reads: You're running an outdated version of Misskey. You should really upgrade.

Berufliches Netzwerken muss nicht zentralisiert und kommerziell sein.
Mit BizzFed.de teste ich, wie professionelles Networking im Fediverse funktionieren kann โ€“ fรถderiert รผber ActivityPub.
Wir sind in der Early-Access-Phase: Es geht darum, das Konzept zu evaluieren und herauszufinden, was funktioniert und was nicht. Dafรผr suche ich Mitstreiter:innen, die ausprobieren und Rรผckmeldung geben.
Interesse? bizzfed.de๐Ÿ™‚

bizzfed.de

BizzFed

Fรถderiertes berufliches Netzwerk. Ohne Algorithmus.

@mxv@fediverse.tryptophonic.com

Just discovered the existence of the #snac #ActivityPub server. Looks very interesting, appealing to my #smolweb sensibilities very much, and seems even smoler than #GoToSocial, which I've been using very happily for a few years now. Could be time for me to try another flavour, as Adam Ant might say. And, I'm very very down with the acronym. Yep, Social Networks Are Crap.

@NetscapeNavigator@vivaldi.net

ใ‚‚ใ—ใ‚ใชใŸใŒใ€1ๅนดไปฅไธŠใ‚ขใƒƒใƒ—ใƒ‡ใƒผใƒˆใ—ใฆใ„ใชใ„ Misskey ใพใŸใฏ Mastodon ใ‚’้‹็”จใ—ใฆใ„ใ‚‹ใฎใงใ‚ใ‚Œใฐใ€ใชใœใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ—ใชใ„ใฎใ‹ใ€ใใฎ็†็”ฑใ‚’ไปŠไธ€ๅบฆ่ฆ‹็›ดใ—ใฆใปใ—ใ„ใจๆ€ใ„ใพใ™ใ€‚

ใ“ใฎไฝŽใ‚ณใ‚นใƒˆใชๆ”ปๆ’ƒๆ‰‹ๆณ•๏ผˆใ‚นใ‚ฏใƒชใƒผใƒณใ‚ทใƒงใƒƒใƒˆๅ‚็…ง๏ผ‰ใฏใ€Mastodon 4.0.x ใ‹ใ‚‰ 4.3.x ใพใงใฎ็’ฐๅขƒใงๅฎŸ่กŒๅฏ่ƒฝใงใ™ใ€‚ใ‚‚ใ—ใพใ  Mastodon 2.x ใ‚„ 3.x ใ‚’ไฝฟใฃใฆใ„ใ‚‹ใชใ‚‰ใ€็Šถๆณใฏใ•ใ‚‰ใซๆทฑๅˆปใงใ™ใ€‚

โš ๏ธ ใ“ใ‚Œใฏ Mastodon ใ ใ‘ใฎๅ•้กŒใงใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚Misskey ใซใ‚‚ๅฝฑ้Ÿฟใ—ใพใ™ใ€‚2025ๅนดใ‚ˆใ‚Šๅ‰ใฎใƒใƒผใ‚ธใƒงใƒณใฎ Misskey ใ‚’ไฝฟ็”จใ—ใฆใ„ใ‚‹ๅ ดๅˆใ€ใ“ใ‚Œใพใง่ขซๅฎณใซ้ญใ‚ใชใ‹ใฃใŸใฎใฏๅ˜ใซ้‹ใŒ่‰ฏใ‹ใฃใŸใ ใ‘ใงใ™ใ€‚

ๅ‚่€ƒใพใงใซใ€็พๅœจใฎ Mastodon ใฎๆœ€ๆ–ฐใƒใƒผใ‚ธใƒงใƒณใฏ 4.5.11๏ผˆ4.6 beta 1 ใ‚‚ๅˆฉ็”จๅฏ่ƒฝ๏ผ‰ใ€Misskey ใฎๆœ€ๆ–ฐใƒใƒผใ‚ธใƒงใƒณใฏ 2026.5.4๏ผˆ2026.6.0 ใ‚‚ๅˆฉ็”จๅฏ่ƒฝ๏ผ‰ใงใ™ใ€‚ใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ™ใ‚‹ใชใ‚‰ใ€ไปŠใŒใพใ•ใซใใฎๆ™‚ใงใ™ใ€‚โณ

็ง่ฆ‹ใงใ™ใŒใ€Fediverse ใฏใ“ใ‚Œใพใง้žๅธธใซๅนธ้‹ใ ใฃใŸใจๆ€ใ„ใพใ™ใ€‚ๅคšใใฎ็ฎก็†่€…ใŒ็ตŒ้จ“ใ—ใŸๅ•้กŒใฏใ€ใ›ใ„ใœใ„ใ‚นใƒ‘ใƒ ใ‚’ใฐใ‚‰ใพใใƒœใƒƒใƒˆใ‚„ใ€ใ„ใŸใšใ‚‰็›ฎ็š„ใฎใ‚นใ‚ฏใƒชใƒ—ใƒˆใ‚ญใƒ‡ใ‚ฃ็จ‹ๅบฆใ ใฃใŸใงใ—ใ‚‡ใ†ใ€‚ใ—ใ‹ใ—ใ€ใ‚ฝใƒ•ใƒˆใ‚ฆใ‚งใ‚ขใ‚’ๆœชไฟฎๆญฃใฎใพใพๆ”พ็ฝฎใ™ใ‚‹ใ“ใจใฏใ€ใใ‚Œใ‚ˆใ‚Šใฏใ‚‹ใ‹ใซๆทฑๅˆปใช่„…ๅจใซใ‚ทใ‚นใƒ†ใƒ ใ‚’ใ•ใ‚‰ใ™ใ“ใจใซใชใ‚Šใพใ™ใ€‚

็އ็›ดใซ่จ€ใฃใฆใ€ใ‹ใคใฆใ‚ชใƒณใƒฉใ‚คใƒณใƒ•ใ‚ฉใƒผใƒฉใƒ ใฎใ‚ณใƒŸใƒฅใƒ‹ใƒ†ใ‚ฃ็ฎก็†ใ‚’ใ—ใฆใ„ใŸ็ซ‹ๅ ดใ‹ใ‚‰ใ™ใ‚‹ใจใ€ใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ‚’ใŸใ‚ใ‚‰ใ†็†็”ฑใŒ็†่งฃใงใใพใ›ใ‚“ใ€‚ๅฑ้™บใซใ•ใ‚‰ใ•ใ‚Œใ‚‹ใฎใฏ็ฎก็†่€…่‡ช่บซใ ใ‘ใงใฏใชใใ€ใ‚ใชใŸใŒๅฎ‰ๅ…จใซใƒ—ใƒฉใƒƒใƒˆใƒ•ใ‚ฉใƒผใƒ ใ‚’้‹ๅ–ถใ—ใฆใใ‚Œใ‚‹ใจไฟก้ ผใ—ใฆใ„ใ‚‹ๆ•ฐ็™พไบบใ€ๆ•ฐๅƒไบบใฎใƒฆใƒผใ‚ถใƒผใฎใ‚ปใ‚ญใƒฅใƒชใƒ†ใ‚ฃใพใงๅฑ้™บใซใ•ใ‚‰ใ—ใฆใ„ใ‚‹ใฎใงใ™ใ€‚

ใ‚นใ‚ฏใƒชใƒผใƒณใ‚ทใƒงใƒƒใƒˆใซใฏๆฌกใฎใ‚ˆใ†ใซๆ›ธใ‹ใ‚Œใฆใ„ใพใ™ใ€‚

ใพใ ใ“ใ‚Œใ‚’ไฟๅญ˜ใงใใฆใ„ใพใ›ใ‚“ใ€‚ใ‚ณใƒŸใƒƒใƒˆใฏไพ็„ถใจใ—ใฆๅคฑๆ•—ใ—ใพใ™ใ€‚ใ—ใ‹ใ—ใ€ใใฃใจไป–ใฎ่ชฐใ‹ใชใ‚‰ๆˆๅŠŸใ•ใ›ใ‚‰ใ‚Œใ‚‹ใงใ—ใ‚‡ใ†ใ€‚ใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ™ใ‚‹ใจใใŒๆฅใฆใ„ใพใ™๏ผ
ALT text

ใ‚นใ‚ฏใƒชใƒผใƒณใ‚ทใƒงใƒƒใƒˆใซใฏๆฌกใฎใ‚ˆใ†ใซๆ›ธใ‹ใ‚Œใฆใ„ใพใ™ใ€‚ ใพใ ใ“ใ‚Œใ‚’ไฟๅญ˜ใงใใฆใ„ใพใ›ใ‚“ใ€‚ใ‚ณใƒŸใƒƒใƒˆใฏไพ็„ถใจใ—ใฆๅคฑๆ•—ใ—ใพใ™ใ€‚ใ—ใ‹ใ—ใ€ใใฃใจไป–ใฎ่ชฐใ‹ใชใ‚‰ๆˆๅŠŸใ•ใ›ใ‚‰ใ‚Œใ‚‹ใงใ—ใ‚‡ใ†ใ€‚ใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ™ใ‚‹ใจใใŒๆฅใฆใ„ใพใ™๏ผ

Misskey ใ‚ตใ‚คใƒˆใงๆ’ฎๅฝฑใ•ใ‚ŒใŸใ‚นใ‚ฏใƒชใƒผใƒณใ‚ทใƒงใƒƒใƒˆใงใ™ใ€‚

ๆ—ฅๆœฌ่ชžใจ่‹ฑ่ชžใง่กจ็คบใ•ใ‚Œใฆใ„ใ‚‹ใƒกใƒƒใ‚ปใƒผใ‚ธใซใฏใ€ๆฌกใฎใ‚ˆใ†ใซๆ›ธใ‹ใ‚Œใฆใ„ใพใ™ใ€‚

็พๅœจใ€ๅคใ„ใƒใƒผใ‚ธใƒงใƒณใฎ Misskey ใ‚’ไฝฟ็”จใ—ใฆใ„ใพใ™ใ€‚ๆœฌๅฝ“ใซใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ—ใŸใปใ†ใŒใ‚ˆใ„ใงใ—ใ‚‡ใ†ใ€‚
ALT text

Misskey ใ‚ตใ‚คใƒˆใงๆ’ฎๅฝฑใ•ใ‚ŒใŸใ‚นใ‚ฏใƒชใƒผใƒณใ‚ทใƒงใƒƒใƒˆใงใ™ใ€‚ ๆ—ฅๆœฌ่ชžใจ่‹ฑ่ชžใง่กจ็คบใ•ใ‚Œใฆใ„ใ‚‹ใƒกใƒƒใ‚ปใƒผใ‚ธใซใฏใ€ๆฌกใฎใ‚ˆใ†ใซๆ›ธใ‹ใ‚Œใฆใ„ใพใ™ใ€‚ ็พๅœจใ€ๅคใ„ใƒใƒผใ‚ธใƒงใƒณใฎ Misskey ใ‚’ไฝฟ็”จใ—ใฆใ„ใพใ™ใ€‚ๆœฌๅฝ“ใซใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใ—ใŸใปใ†ใŒใ‚ˆใ„ใงใ—ใ‚‡ใ†ใ€‚

Berufliches Netzwerken muss nicht zentralisiert und kommerziell sein.
Mit BizzFed.de teste ich, wie professionelles Networking im Fediverse funktionieren kann โ€“ fรถderiert รผber ActivityPub.
Wir sind in der Early-Access-Phase: Es geht darum, das Konzept zu evaluieren und herauszufinden, was funktioniert und was nicht. Dafรผr suche ich Mitstreiter:innen, die ausprobieren und Rรผckmeldung geben.
Interesse? bizzfed.de๐Ÿ™‚

bizzfed.de

BizzFed

Fรถderiertes berufliches Netzwerk. Ohne Algorithmus.

@NetscapeNavigator@vivaldi.net

If you are running a version of either Misskey or Mastodon that is more than a year old, I strongly urge you to reconsider your reasons for not upgrading.

This low-effort exploit (see screenshot) can be executed on Mastodon 4.0.x through 4.3.x. If you are still running Mastodon 2.x or 3.x, the situation is significantly worse.

โš ๏ธ This isn't just a Mastodon issue; it affects Misskey too. If you are using a version of Misskey older than 2025, you have simply been lucky so far.

For context, the current version of Mastodon is 4.5.11 (with 4.6 beta 1 available), and the current version of Misskey is 2026.5.4 (with 2026.6.0 available). There is no better time to upgrade than right now. โณ

In my opinion, the Fediverse has been incredibly lucky. Most of you have only had to deal with the occasional bot or script kiddie trying to spam your site. However, leaving your software unpatched exposes you to much more severe threats.

Frankly, as someone who used to manage online forum communities, I donโ€™t understand the reluctance to upgrade. You aren't just leaving yourself vulnerable โ€” you are risking the security of the hundreds or thousands of users who have placed their trust in your ability to manage the platform safely.

A screenshot that reads:  I cannot yet get this to save. The commit still fails. But I am sure someone else could. It is time to upgrade!
ALT text

A screenshot that reads: I cannot yet get this to save. The commit still fails. But I am sure someone else could. It is time to upgrade!

A screenshot taken from a Misskey site.  The message written in both Japanese and English reads: You're running an outdated version of Misskey. You should really upgrade.
ALT text

A screenshot taken from a Misskey site. The message written in both Japanese and English reads: You're running an outdated version of Misskey. You should really upgrade.

@mxv@fediverse.tryptophonic.com

Just discovered the existence of the #snac #ActivityPub server. Looks very interesting, appealing to my #smolweb sensibilities very much, and seems even smoler than #GoToSocial, which I've been using very happily for a few years now. Could be time for me to try another flavour, as Adam Ant might say. And, I'm very very down with the acronym. Yep, Social Networks Are Crap.

@mxv@fediverse.tryptophonic.com

Just discovered the existence of the #snac #ActivityPub server. Looks very interesting, appealing to my #smolweb sensibilities very much, and seems even smoler than #GoToSocial, which I've been using very happily for a few years now. Could be time for me to try another flavour, as Adam Ant might say. And, I'm very very down with the acronym. Yep, Social Networks Are Crap.

@reiver@mastodon.social

acct-URI like URI for content

โ‚

We have acct-URI for referring to actors.

Ex: acct:bahmankas@example.com

We resolve this to an HTTP-URI using WebFinger.

โ‚

We don't have an acct-URI like URI for referring to an actor's content.

Which would also be resolved with WebFinger.

Ex: obj:bahmankas@example.com/file.ext

โ‚

I think there are many advantages to being able to refer to content separate from where it is stored.

@rolle@mementomori.social

Listening to "Character Limit" by Kate Conger and Ryan Mac on a run. It's a solid account of how Twitter fell apart.

The book sharpens something I keep coming back to about Dorsey and Graber's idea of "decentralized" social media. Graber says she spent years studying existing protocols and decided none were good enough for users, so Bluesky built ATProto from scratch. I still don't buy that none of the existing solutions were worth improving.

There are two kinds of nerds: the Silicon Valley startup kind, and the open standards kind - Torvalds, Berners-Lee, people who build a commons and don't try to own it. Bluesky comes from the first camp. The framing is still commercial: a company, VC money, a product that happens to have an open layer. That's the part that doesn't sit right with me.

Decentralization as something you can market isn't the same as decentralization as something no one controls and any living room nerd could host and tweak on their own.

@weekinfediverse@mitra.social
@dansup@mastodon.social

You, the people, and NLnet, have funded a fully open TikTok alternative with web and mobile clients, ActivityPub federation and an opt-out For You feed algorithm that is privacy friendly.

Anyone can start their own Loops community, and we're working on an official hosting service to help fund development.

Join ๐Ÿš€: joinloops.org/join-the-beta

Roadmap โœจ: joinloops.org/roadmap

Donate ๐Ÿ™: joinloops.org/donate

Source ๐Ÿค–: github.com/joinloops

github.com

Loops

Loops is a short video sharing platform. Loops has 6 repositories available. Follow their code on GitHub.

@dansup@mastodon.social

You, the people, and NLnet, have funded a fully open TikTok alternative with web and mobile clients, ActivityPub federation and an opt-out For You feed algorithm that is privacy friendly.

Anyone can start their own Loops community, and we're working on an official hosting service to help fund development.

Join ๐Ÿš€: joinloops.org/join-the-beta

Roadmap โœจ: joinloops.org/roadmap

Donate ๐Ÿ™: joinloops.org/donate

Source ๐Ÿค–: github.com/joinloops

github.com

Loops

Loops is a short video sharing platform. Loops has 6 repositories available. Follow their code on GitHub.

@rolle@mementomori.social

Listening to "Character Limit" by Kate Conger and Ryan Mac on a run. It's a solid account of how Twitter fell apart.

The book sharpens something I keep coming back to about Dorsey and Graber's idea of "decentralized" social media. Graber says she spent years studying existing protocols and decided none were good enough for users, so Bluesky built ATProto from scratch. I still don't buy that none of the existing solutions were worth improving.

There are two kinds of nerds: the Silicon Valley startup kind, and the open standards kind - Torvalds, Berners-Lee, people who build a commons and don't try to own it. Bluesky comes from the first camp. The framing is still commercial: a company, VC money, a product that happens to have an open layer. That's the part that doesn't sit right with me.

Decentralization as something you can market isn't the same as decentralization as something no one controls and any living room nerd could host and tweak on their own.

@MichalBryxi@mastodon.world

If you've been wanting to move your activity history from Strava to FitPub but dreaded dealing with the export files, I made a small browser tool that does the heavy lifting.

Drop in your Strava export files, it decompresses the .fit.gz files, splits everything into correctly-sized ZIP batches, and hands them back for upload. No install, no server, runs entirely in your browser.

๐Ÿ‘‰ ๐Ÿƒ๐Ÿปโ€โ™€๏ธ vast-ch.github.io/strava-archi

Screenshot of the app. Move your activity history from Strava to FitPub. This tool converts your Strava data export into correctly formatted, sized, and counted ZIP batches ready for import.
ALT text

Screenshot of the app. Move your activity history from Strava to FitPub. This tool converts your Strava data export into correctly formatted, sized, and counted ZIP batches ready for import.

@dansup@mastodon.social
@praveen@social.masto.host

I remember using a service that allows hosting and can generate .ics files. It allowed sending using mastodon. But I can't remember the domain now. Can anyone ?

Update: Thanks to @smallcircles I found it, I was looking for gath.io/

Its pretty neat tool, especially if you want to share calendar events via channels other than email, like .

These days I don't usually need it as can generate ics for time polls.

gath.io

Gathio

An easier, quicker, and much less privacy-invading way to make and share events

@dansup@mastodon.social
@praveen@social.masto.host

I remember using a service that allows hosting and can generate .ics files. It allowed sending using mastodon. But I can't remember the domain now. Can anyone ?

Update: Thanks to @smallcircles I found it, I was looking for gath.io/

Its pretty neat tool, especially if you want to share calendar events via channels other than email, like .

These days I don't usually need it as can generate ics for time polls.

gath.io

Gathio

An easier, quicker, and much less privacy-invading way to make and share events

@kc@social.coop

Lovely does anybody have a list of all the known user-agents for software ?

I have some WAF rules to write to make sure my server can be seen behind a frontend that is only meant to battle AI crawlers and I rather not (knowingly) leave endpoints open to OpenAI

@kc@social.coop

Lovely does anybody have a list of all the known user-agents for software ?

I have some WAF rules to write to make sure my server can be seen behind a frontend that is only meant to battle AI crawlers and I rather not (knowingly) leave endpoints open to OpenAI

@kc@social.coop

Lovely does anybody have a list of all the known user-agents for software ?

I have some WAF rules to write to make sure my server can be seen behind a frontend that is only meant to battle AI crawlers and I rather not (knowingly) leave endpoints open to OpenAI

@smallcircles@social.coop

Fedizens, we dream! โœŠ

But what do we dream about? How do our dreams relate, where do they overlap? Might we realize them together? Turn our online places into a delightful commons of cross-pollination and cocreation? How can we make progress towards forging a better world together, and sustain that progress? Can we turn our collaborative efforts into much more than the sum of their constituent parts, and move on shared vision into a brighter future together?

Questions, questions.

In my previous blog post on Shared responsible ownership I claimed that a commons can be ๐Ÿ”ฅ ignited, and become unstoppable as it realizes positive societal impact. Able to withstand the corrosive forces of Hypercapitalism that seek to corrupt it.

Revolutionary evolution is possible! โœŠ

is the perfect environment to make this happen. We laid the foundations already. We have soil, so now we can blossom. ๐ŸŒป

Fedizens, let's dream! โœŠ

coding.social/blog/fediverse-o

coding.social

Fediverse of dreams

Social coding helps overcome the Paradox of Emergence, which entails that without following our dreams, we are unable to pursue a shared vision.

@smallcircles@social.coop

Fedizens, we dream! โœŠ

But what do we dream about? How do our dreams relate, where do they overlap? Might we realize them together? Turn our online places into a delightful commons of cross-pollination and cocreation? How can we make progress towards forging a better world together, and sustain that progress? Can we turn our collaborative efforts into much more than the sum of their constituent parts, and move on shared vision into a brighter future together?

Questions, questions.

In my previous blog post on Shared responsible ownership I claimed that a commons can be ๐Ÿ”ฅ ignited, and become unstoppable as it realizes positive societal impact. Able to withstand the corrosive forces of Hypercapitalism that seek to corrupt it.

Revolutionary evolution is possible! โœŠ

is the perfect environment to make this happen. We laid the foundations already. We have soil, so now we can blossom. ๐ŸŒป

Fedizens, let's dream! โœŠ

coding.social/blog/fediverse-o

coding.social

Fediverse of dreams

Social coding helps overcome the Paradox of Emergence, which entails that without following our dreams, we are unable to pursue a shared vision.

@weekinfediverse@mitra.social
@csolisr@hub.azkware.net
Somebody went and built a chatroom powered directly by , called "Harmony". Roughly the opposite of Movim, Harmony aims to replace Discord and even includes end-to-end encryption (although I wonder if it'll be compatible with the implementation by Bonfire and Emissary). mony.lol/

mony.lol

Harmony - Open-Source Federated Discord Alternative

The best of Discord meets federation, E2EE, and self-hosting. Voice, video, bots, and the fediverse - all in one open-source platform.

@csolisr@hub.azkware.net
Somebody went and built a chatroom powered directly by , called "Harmony". Roughly the opposite of Movim, Harmony aims to replace Discord and even includes end-to-end encryption (although I wonder if it'll be compatible with the implementation by Bonfire and Emissary). mony.lol/

mony.lol

Harmony - Open-Source Federated Discord Alternative

The best of Discord meets federation, E2EE, and self-hosting. Voice, video, bots, and the fediverse - all in one open-source platform.

@SolSoCoG@ieji.de

I love watching the rel.re stats lol. They continously increase. At fresh start they are at like 1 inbox and 100 deliveries per second, now at 100 inbox and 8337 deliveries per second after running for a while, it really needs to warm up. Still not sure how it chills at like 1-10% cpu usage of one 4ghz core and 100MB RAM. I always thought rust was very performant aswell but they apparently cant beat goroutines. On aoderelay i would be using at least 3 cores 100% by now, possibly because the error handling is not the "yeah you failed 5 times, go to the ignore bench for a couple minutes" way like i handle it with the stale mechanism.

Relre activitypub relay stats, 543 subscribers, 251 stale, 101.6 inbox/s and 8337.0 deliver/s
ALT text

Relre activitypub relay stats, 543 subscribers, 251 stale, 101.6 inbox/s and 8337.0 deliver/s

@csolisr@hub.azkware.net
Somebody went and built a chatroom powered directly by , called "Harmony". Roughly the opposite of Movim, Harmony aims to replace Discord and even includes end-to-end encryption (although I wonder if it'll be compatible with the implementation by Bonfire and Emissary). mony.lol/

mony.lol

Harmony - Open-Source Federated Discord Alternative

The best of Discord meets federation, E2EE, and self-hosting. Voice, video, bots, and the fediverse - all in one open-source platform.

@lauti@bonfire.cafe

The next step in our #activitypub implementation is ready! This brings a simple instance actor object along with #webfinger support for it and a #nodeinfo endpoint.

We highly appreciate reviews from any #fedidev ๐Ÿ™

codeberg.org/Klasse-Methode/...


We are really greatfull for @nlnet@social.nlnet.nl to fund this work and for @linos@graz.social for being such a great mentor!

codeberg.org

feat(activitypub): add nodeinfo, webfinger and instance actor object

lauti - Open Source Community Calendar for events, groups and places

@reiver@mastodon.social

Merging ActivityStreams Core & Vocabulary

It looks like there is an effort to try to merge the ActivityStreams Core specification with the ActivityStreams Vocabulary specification into a single specification ๐ŸŽ‰

github.com/w3c/activitystreams

...

(I think this merged specification should also rename "Activity Streams" (with a space) to "ActivityStreams" (without a space).)

github.com

Combine Activity Streams 2.0 Core and Activity Vocabulary into one document ยท Issue #707 ยท w3c/activitystreams

The division between AS2 Core and the Activity Vocabulary goes back to Activity Streams 1.0 and the AS1 base schema. Does this division still serve a purpose for us in 2026? Would there be a benefi...

@weekinfediverse@mitra.social
@weekinfediverse@mitra.social
@csolisr@hub.azkware.net
Somebody went and built a chatroom powered directly by , called "Harmony". Roughly the opposite of Movim, Harmony aims to replace Discord and even includes end-to-end encryption (although I wonder if it'll be compatible with the implementation by Bonfire and Emissary). mony.lol/

mony.lol

Harmony - Open-Source Federated Discord Alternative

The best of Discord meets federation, E2EE, and self-hosting. Voice, video, bots, and the fediverse - all in one open-source platform.

@weekinfediverse@mitra.social
@SolSoCoG@ieji.de

I love watching the rel.re stats lol. They continously increase. At fresh start they are at like 1 inbox and 100 deliveries per second, now at 100 inbox and 8337 deliveries per second after running for a while, it really needs to warm up. Still not sure how it chills at like 1-10% cpu usage of one 4ghz core and 100MB RAM. I always thought rust was very performant aswell but they apparently cant beat goroutines. On aoderelay i would be using at least 3 cores 100% by now, possibly because the error handling is not the "yeah you failed 5 times, go to the ignore bench for a couple minutes" way like i handle it with the stale mechanism.

Relre activitypub relay stats, 543 subscribers, 251 stale, 101.6 inbox/s and 8337.0 deliver/s
ALT text

Relre activitypub relay stats, 543 subscribers, 251 stale, 101.6 inbox/s and 8337.0 deliver/s

@lauti@bonfire.cafe

The next step in our #activitypub implementation is ready! This brings a simple instance actor object along with #webfinger support for it and a #nodeinfo endpoint.

We highly appreciate reviews from any #fedidev ๐Ÿ™

codeberg.org/Klasse-Methode/...


We are really greatfull for @nlnet@social.nlnet.nl to fund this work and for @linos@graz.social for being such a great mentor!

codeberg.org

feat(activitypub): add nodeinfo, webfinger and instance actor object

lauti - Open Source Community Calendar for events, groups and places

@reiver@mastodon.social

Merging ActivityStreams Core & Vocabulary

It looks like there is an effort to try to merge the ActivityStreams Core specification with the ActivityStreams Vocabulary specification into a single specification ๐ŸŽ‰

github.com/w3c/activitystreams

...

(I think this merged specification should also rename "Activity Streams" (with a space) to "ActivityStreams" (without a space).)

github.com

Combine Activity Streams 2.0 Core and Activity Vocabulary into one document ยท Issue #707 ยท w3c/activitystreams

The division between AS2 Core and the Activity Vocabulary goes back to Activity Streams 1.0 and the AS1 base schema. Does this division still serve a purpose for us in 2026? Would there be a benefi...

@lauti@bonfire.cafe

The next step in our #activitypub implementation is ready! This brings a simple instance actor object along with #webfinger support for it and a #nodeinfo endpoint.

We highly appreciate reviews from any #fedidev ๐Ÿ™

codeberg.org/Klasse-Methode/...


We are really greatfull for @nlnet@social.nlnet.nl to fund this work and for @linos@graz.social for being such a great mentor!

codeberg.org

feat(activitypub): add nodeinfo, webfinger and instance actor object

lauti - Open Source Community Calendar for events, groups and places

@lauti@bonfire.cafe

The next step in our #activitypub implementation is ready! This brings a simple instance actor object along with #webfinger support for it and a #nodeinfo endpoint.

We highly appreciate reviews from any #fedidev ๐Ÿ™

codeberg.org/Klasse-Methode/...


We are really greatfull for @nlnet@social.nlnet.nl to fund this work and for @linos@graz.social for being such a great mentor!

codeberg.org

feat(activitypub): add nodeinfo, webfinger and instance actor object

lauti - Open Source Community Calendar for events, groups and places

@lauti@bonfire.cafe

The next step in our #activitypub implementation is ready! This brings a simple instance actor object along with #webfinger support for it and a #nodeinfo endpoint.

We highly appreciate reviews from any #fedidev ๐Ÿ™

codeberg.org/Klasse-Methode/...


We are really greatfull for @nlnet@social.nlnet.nl to fund this work and for @linos@graz.social for being such a great mentor!

codeberg.org

feat(activitypub): add nodeinfo, webfinger and instance actor object

lauti - Open Source Community Calendar for events, groups and places

@smallcircles@social.coop ยท Reply to Timothy Roes

@TimothyRoes @hpod16

The (over)use of "mastodon" is understandable. Mastodon played a pioneering role in implementing microblogging use cases with the protocol and is also the most mature product at this point in that 'business domain'. Establishing itself as a brand.

is not a very descriptive name to people unfamiliar with it and the idea that it provides access to many apps that integrate with on a single social network (ideally) interoperably is foreign. They are used to 'platform thinking'. Fediverse weaves a social fabric that allows you to be "social together with others" online.

The europa.eu website now has a icon in its social channel list, that hides all that.

Perhaps most communicative is the name (name of W3C standard vocabulary of social actions to support). Then a person would subscribe to EU's activity streams and receive Posts, Articles, Videos, Events, Policies, News. Every service the EU offers adds to the stream.

@toddsundsted@epiktistes.com

This release fixes a small number of bugs found in recent releases.

The full changelog:

Fixed

  • Prevent runaway recursion when handling filtered posts.
  • Ensure profile header and header_static images are always present.
  • Render the inline replies collection for local objects.
  • Exclude blocked actors from object statistics and notifications.

Changed

  • Return 410 Gone instead of 404 Not Found for missing actors.

Removed

  • Tag counts on public pages.

This release fixes a hard-to-exploit but potentially server-crashing bug. If you're running v3.3.9 or v3.4.0, you should upgrade.

@toddsundsted@epiktistes.com

This release fixes a small number of bugs found in recent releases.

The full changelog:

Fixed

  • Prevent runaway recursion when handling filtered posts.
  • Ensure profile header and header_static images are always present.
  • Render the inline replies collection for local objects.
  • Exclude blocked actors from object statistics and notifications.

Changed

  • Return 410 Gone instead of 404 Not Found for missing actors.

Removed

  • Tag counts on public pages.

This release fixes a hard-to-exploit but potentially server-crashing bug. If you're running v3.3.9 or v3.4.0, you should upgrade.

@toddsundsted@epiktistes.com

This release fixes a small number of bugs found in recent releases.

The full changelog:

Fixed

  • Prevent runaway recursion when handling filtered posts.
  • Ensure profile header and header_static images are always present.
  • Render the inline replies collection for local objects.
  • Exclude blocked actors from object statistics and notifications.

Changed

  • Return 410 Gone instead of 404 Not Found for missing actors.

Removed

  • Tag counts on public pages.

This release fixes a hard-to-exploit but potentially server-crashing bug. If you're running v3.3.9 or v3.4.0, you should upgrade.

@toddsundsted@epiktistes.com

This release fixes a small number of bugs found in recent releases.

The full changelog:

Fixed

  • Prevent runaway recursion when handling filtered posts.
  • Ensure profile header and header_static images are always present.
  • Render the inline replies collection for local objects.
  • Exclude blocked actors from object statistics and notifications.

Changed

  • Return 410 Gone instead of 404 Not Found for missing actors.

Removed

  • Tag counts on public pages.

This release fixes a hard-to-exploit but potentially server-crashing bug. If you're running v3.3.9 or v3.4.0, you should upgrade.

@sabrinkmann@hachyderm.io

Tmw at the I will talk about what cool and awesome Activitpub/Fediverse project which are NOT (Social) Media or blogging (in german).
Some of the projects I will talk about will be:
codeberg.org/flohmarkt/flohmar
@manyfold
github.com/open-wanderer/wande
@encyclia
@fitpub
codeberg.org/54GradSoftware/me

Do you have any other projects one should mention in the talk?
I only have 20min but I will try my best.

codeberg.org

menuverse

menuverse

@McPringle@fosstodon.org

Today at 18:00 I'll be at @hackergarten Lucerne working on @fitpub and would love to meet developers, open-source enthusiasts, and anyone interested in federated social fitness platforms.

If you'd like to contribute, discuss ideas, report bugs, review code, or just see what FitPub is all about, feel free to stop by. New contributors are always welcome.

Looking forward to an evening of coding, collaboration, and open source!

A FitPub poster with Screenshots
ALT text

A FitPub poster with Screenshots

@sabrinkmann@hachyderm.io

Tmw at the I will talk about what cool and awesome Activitpub/Fediverse project which are NOT (Social) Media or blogging (in german).
Some of the projects I will talk about will be:
codeberg.org/flohmarkt/flohmar
@manyfold
github.com/open-wanderer/wande
@encyclia
@fitpub
codeberg.org/54GradSoftware/me

Do you have any other projects one should mention in the talk?
I only have 20min but I will try my best.

codeberg.org

menuverse

menuverse

@sabrinkmann@hachyderm.io

Tmw at the I will talk about what cool and awesome Activitpub/Fediverse project which are NOT (Social) Media or blogging (in german).
Some of the projects I will talk about will be:
codeberg.org/flohmarkt/flohmar
@manyfold
github.com/open-wanderer/wande
@encyclia
@fitpub
codeberg.org/54GradSoftware/me

Do you have any other projects one should mention in the talk?
I only have 20min but I will try my best.

codeberg.org

menuverse

menuverse

@sabrinkmann@hachyderm.io

Tmw at the I will talk about what cool and awesome Activitpub/Fediverse project which are NOT (Social) Media or blogging (in german).
Some of the projects I will talk about will be:
codeberg.org/flohmarkt/flohmar
@manyfold
github.com/open-wanderer/wande
@encyclia
@fitpub
codeberg.org/54GradSoftware/me

Do you have any other projects one should mention in the talk?
I only have 20min but I will try my best.

codeberg.org

menuverse

menuverse

@McPringle@fosstodon.org

Today at 18:00 I'll be at @hackergarten Lucerne working on @fitpub and would love to meet developers, open-source enthusiasts, and anyone interested in federated social fitness platforms.

If you'd like to contribute, discuss ideas, report bugs, review code, or just see what FitPub is all about, feel free to stop by. New contributors are always welcome.

Looking forward to an evening of coding, collaboration, and open source!

A FitPub poster with Screenshots
ALT text

A FitPub poster with Screenshots

A friend of mine, @siliconsjang, released SiliconBeest v1.0.0 today. It's a server built on Workers, D1, R2, and Queues, using Fedify.

I like the starting point: after watching fediverse servers go down together during Cloudflare outages, they thought, why not just run on Cloudflare directly?

They're aiming for something cheap enough that a small instance can stay on Cloudflare's free plan, and a somewhat bigger one can fit in the $5/month tier. It's still early; a lot is missing, and Mastodon/Misskey API compatibility is more of a long-term goal.

I'm glad to see Fedify put to use for something like this. Worth checking out.

The source code is on GitHub under AGPL 3.0.

github.com

GitHub - SJang1/siliconbeest: Fediverse in Cloudflare Workers + live serverless code

Fediverse in Cloudflare Workers + live serverless code - SJang1/siliconbeest

@siliconsjang@hackers.pub

์•ˆ๋…•ํ•˜์„ธ์š”! Hello everyone!

SiliconBeest v1.0.0 ๊ณต๊ฐœ

๋งˆ์Šคํ† ๋ˆ API ํ˜ธํ™˜์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” Cloudflare ์—ฃ์ง€ ์ปดํ“จํŒ… ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ฆฌ์Šค ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด, SiliconBeest v1.0.0์„ ๊ณต๊ฐœํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

I'm pleased to announce SiliconBeest v1.0.0, a serverless fediverse software project built on Cloudflare edge computing, aiming for Mastodon API compatibility.

SiliconBeest Logo - a wildebeest with silicon on it


์„ค๋ช… (Description)

ko

  • SiliconBeest๋Š” Cloudflare Workers ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
  • Cloudflare ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋‹ค์ˆ˜์˜ ์—ฐํ•ฉ์šฐ์ฃผ ์„œ๋ฒ„๊ฐ€ ํ•จ๊ป˜ ์ ‘์† ๋ถˆ๊ฐ€ ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ณด๋ฉฐ, ์—ฐํ•ฉ์šฐ์ฃผ ์—ญ์‹œ Cloudflare ์ธํ”„๋ผ์— ์ƒ๋‹นํžˆ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์— ์ฐฉ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž๋Š” ์ƒ๊ฐ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Cloudflare Inc.์—์„œ ๊ฐœ๋ฐœํ–ˆ๋˜ Wildebeest ํ”„๋กœ์ ํŠธ์˜ ์•„์ด๋””์–ด์™€ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ ์ œ ๋‹‰๋„ค์ž„์ธ silicon(sjang) ์ด๋ž‘ Cloudflare์˜ Wildebeest๋ฅผ ์กฐํ•ฉํ•ด SiliconBeest๋กœ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ ์€ ์‚ฌ์šฉ์ž ์ˆ˜์™€ ์ž‘์€ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์„ ๊ธฐ์ค€์œผ๋กœ๋Š” Cloudflare ๋ฌด๋ฃŒ ํ”Œ๋žœ์—์„œ๋„ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์กฐ๊ธˆ ๋” ํฐ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์—์„œ๋Š” ์›” $5 ํ”Œ๋žœ์œผ๋กœ๋„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • API ์ธก๋ฉด์—์„œ SiliconBeest์˜ ๋ชฉํ‘œ๋Š” Mastodon ๋ฐ Misskey API์™€์˜ ํ˜ธํ™˜์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๋ก ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๊ณผ ์‹ค์ œ ๊ตฌํ˜„์€ ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ๋ถ€๋ถ„์€ ์•„์ง ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ๋กœ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

en

  • SiliconBeest is a fediverse project designed to run on Cloudflare Workers.
  • After seeing many fediverse servers become unavailable when Cloudflare had outages, I realized that the fediverse already relies heavily on Cloudflare infrastructure.
  • So I thought: why not build fediverse software directly on top of Cloudflare?
  • This project was inspired by Cloudflare Inc.โ€™s Wildebeest project, and it also references some of its ideas and code.
  • The project name, SiliconBeest, comes from my nickname silicon(sjang) combined with Cloudflareโ€™s Wildebeest.
  • Iโ€™m still working on making it as inexpensive to run as possible. For now, the goal is to support a small number of users with a small federation footprint on the free plan, and a medium federation footprint on the $5 plan.
  • From an API perspective, SiliconBeest aims to be compatible with both Mastodon and Misskey APIs. However, as many people know, full compatibility is difficult in practice, so this remains a long-term goal rather than something fully implemented today.

์•„์ง์€ ์ดˆ๊ธฐ ๋ฒ„์ „์ด๋ผ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„๋„ ๋งŽ์ง€๋งŒ, Cloudflare Workers, D1, R2, Queues ๋“ฑ Cloudflare์˜ ์„œ๋ฒ„๋ฆฌ์Šค ์ธํ”„๋ผ ์œ„์—์„œ ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์–ผ๋งˆ๋‚˜ ๊ฐ€๋ณ๊ณ  ์ €๋ ดํ•˜๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‹คํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

This is still an early version, and many parts are not implemented yet. However, SiliconBeest is an experiment in how lightweight and affordable fediverse software can be when built on top of Cloudflareโ€™s serverless infrastructure, such as Workers, D1, R2, and Queues.

ํ˜„์žฌ v1.0.0์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋จผ์ € ์ •๋ฆฌํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ–ˆ์œผ๋ฉฐ, ์•ž์œผ๋กœ Mastodon API ํ˜ธํ™˜์„ฑ, federation ์•ˆ์ •์„ฑ, ๊ด€๋ฆฌ ๋„๊ตฌ, ๋ฌธ์„œํ™” ๋“ฑ์„ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•ด๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

In v1.0.0, I focused on organizing the basic architecture and core functionality first. Going forward, I plan to gradually improve Mastodon API compatibility, federation stability, admin tooling, and documentation.

๊ด€์‹ฌ ์žˆ์œผ์‹  ๋ถ„๋“ค์€ GitHub ์ €์žฅ์†Œ๋ฅผ ํ™•์ธํ•ด์ฃผ์‹œ๊ณ , ์ด์Šˆ๋‚˜ ํ”ผ๋“œ๋ฐฑ๋„ ์–ธ์ œ๋“  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

If youโ€™re interested, please check out the GitHub repository. Issues, feedback, and suggestions are always welcome.

https://github.com/SJang1/siliconbeest


์„ค์น˜ ๋ฐ ๋ฐฐํฌ ๋ฐฉ๋ฒ• (Installation and Deployment)

SiliconBeest๋Š” GitHub ํ…œํ”Œ๋ฆฟ๊ณผ Cloudflare๋ฅผ ์ด์šฉํ•ด ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GitHub ํ…œํ”Œ๋ฆฟ์—์„œ ์ƒˆ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Cloudflare์—์„œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค์™€ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Cloudflare API ํ† ํฐ๊ณผ ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ GitHub Secrets์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  4. GitHub Actions๋ฅผ ํ†ตํ•ด ์ž๋™ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ธ์Šคํ„ด์Šค ์„ค์ •์„ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์„ค์น˜ ๊ณผ์ •์€ ๊ณ„์† ๋‹ค๋“ฌ๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐœ์„ ์‚ฌํ•ญ์ด ๋งŽ์Œ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”ํ›„ ๋ณด๊ฐ•ํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ด๋ฉฐ, ์ด์— ๋Œ€ํ•œ PR๋„ ํ™˜์˜์ž…๋‹ˆ๋‹ค.

SiliconBeest can be deployed relatively easily using a GitHub template and Cloudflare.

  1. Create a new repository from the GitHub template.
  2. Set up the required resources and environment on Cloudflare.
  3. Store the Cloudflare API token and required environment variables in GitHub Secrets.
  4. Deploy automatically using GitHub Actions.
  5. Once deployment is complete, finish configuring your instance.

The installation process is still being refined, and Iโ€™m aware that there is plenty of room for improvement. I plan to keep improving the documentation and deployment flow over time, and related PRs are always welcome.

็Ÿฅไบบ(์ง€์ธ)์ธ @siliconsjang ๋‹˜์ด ์˜ค๋Š˜ SiliconBeest v1.0.0์„ ๅ…ฌ้–‹(๊ณต๊ฐœ)ํ–ˆ์Šต๋‹ˆ๋‹ค. Fedify์™€ Cloudflare๋ฅผ ๅŸบ็›ค(๊ธฐ๋ฐ˜)์œผ๋กœ ๋งŒ๋“  ์†Œํ”„ํŠธ์›จ์–ด์ธ๋ฐ, Workers, D1, R2, Queues ๋“ฑ ์„œ๋ฒ„๋ฆฌ์Šค ์Šคํƒ ์œ„์—์„œ ๅ…จ้ƒจ(์ „๋ถ€) ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

็™ผๆƒณ(๋ฐœ์ƒ)์˜ ๅ‡บ็™ผ้ปž(์ถœ๋ฐœ์ )์ด ์žฌ๋ฐŒ์Šต๋‹ˆ๋‹ค. Cloudflare ้šœ็ค™(์žฅ์• ) ๋•Œ ่ฏๅˆๅฎ‡ๅฎ™(์—ฐํ•ฉ์šฐ์ฃผ) ์„œ๋ฒ„๋“ค์ด ๋ฉ๋‹ฌ์•„ ๋‹ค์šด๋˜๋Š” ๊ฑธ ๋ณด๊ณ , ใ€Œ๊ทธ๋Ÿผ ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋Œ๋ฆฌ๋ฉด ๋˜์ง€ ์•Š๋‚˜?」๋ผ๋Š” ์ƒ๊ฐ์—์„œ ๅง‹ไฝœ(์‹œ์ž‘)ํ–ˆ๋‹ค๊ณ  ํ•˜๋„ค์š”.

่ฒป็”จ(๋น„์šฉ) ้ข(๋ฉด)์—์„œ๋Š” ๅฐ่ฆๆจก(์†Œ๊ทœ๋ชจ) ์ธ์Šคํ„ด์Šค๋Š” Cloudflare ็„กๆ–™(๋ฌด๋ฃŒ) ํ”Œ๋žœ, ์กฐ๊ธˆ ๋” ํฐ ่ฆๆจก(๊ทœ๋ชจ)๋Š” ๆœˆ(์›”) $5 ํ”Œ๋žœ์œผ๋กœ ๅ ช็•ถ(๊ฐ๋‹น)ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒŒ ็›ฎๆจ™(๋ชฉํ‘œ)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์•„์ง ๅˆๆœŸ(์ดˆ๊ธฐ) ๋ฒ„์ „์ด๋ผ ๆœชๅ…ท้กฏ(๋ฏธ๊ตฌํ˜„) ๆฉŸ่ƒฝ(๊ธฐ๋Šฅ)์ด ๋งŽ๊ณ , Mastodon ๋ฐ Misskey API ไบ’ๆ›(ํ˜ธํ™˜)์€ ้•ทๆœŸ(์žฅ๊ธฐ) ็›ฎๆจ™(๋ชฉํ‘œ)๋กœ ๋ณด๊ณ  ์žˆ๋‹ค๋„ค์š”.

Fedify๋ฅผ ์จ์ฃผ์‹œ๋Š” ๋ถ„์ด๋ผ ๋ฐ˜๊ฐ‘๊ธฐ๋„ ํ•˜๊ณ , ๆ‡‰ๆด(์‘์›)ํ•˜๊ณ  ์‹ถ์–ด ็ดนไป‹(์†Œ๊ฐœ)ํ•ฉ๋‹ˆ๋‹ค.

์†Œ์Šค ์ฝ”๋“œ๋Š” AGPL 3.0์œผ๋กœ GitHub์— ๊ณต๊ฐœ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

github.com

GitHub - SJang1/siliconbeest: Fediverse in Cloudflare Workers + live serverless code

Fediverse in Cloudflare Workers + live serverless code - SJang1/siliconbeest

@siliconsjang@hackers.pub

์•ˆ๋…•ํ•˜์„ธ์š”! Hello everyone!

SiliconBeest v1.0.0 ๊ณต๊ฐœ

๋งˆ์Šคํ† ๋ˆ API ํ˜ธํ™˜์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” Cloudflare ์—ฃ์ง€ ์ปดํ“จํŒ… ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ฆฌ์Šค ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด, SiliconBeest v1.0.0์„ ๊ณต๊ฐœํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

I'm pleased to announce SiliconBeest v1.0.0, a serverless fediverse software project built on Cloudflare edge computing, aiming for Mastodon API compatibility.

SiliconBeest Logo - a wildebeest with silicon on it


์„ค๋ช… (Description)

ko

  • SiliconBeest๋Š” Cloudflare Workers ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
  • Cloudflare ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋‹ค์ˆ˜์˜ ์—ฐํ•ฉ์šฐ์ฃผ ์„œ๋ฒ„๊ฐ€ ํ•จ๊ป˜ ์ ‘์† ๋ถˆ๊ฐ€ ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ณด๋ฉฐ, ์—ฐํ•ฉ์šฐ์ฃผ ์—ญ์‹œ Cloudflare ์ธํ”„๋ผ์— ์ƒ๋‹นํžˆ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์— ์ฐฉ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž๋Š” ์ƒ๊ฐ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Cloudflare Inc.์—์„œ ๊ฐœ๋ฐœํ–ˆ๋˜ Wildebeest ํ”„๋กœ์ ํŠธ์˜ ์•„์ด๋””์–ด์™€ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ ์ œ ๋‹‰๋„ค์ž„์ธ silicon(sjang) ์ด๋ž‘ Cloudflare์˜ Wildebeest๋ฅผ ์กฐํ•ฉํ•ด SiliconBeest๋กœ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ ์€ ์‚ฌ์šฉ์ž ์ˆ˜์™€ ์ž‘์€ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์„ ๊ธฐ์ค€์œผ๋กœ๋Š” Cloudflare ๋ฌด๋ฃŒ ํ”Œ๋žœ์—์„œ๋„ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์กฐ๊ธˆ ๋” ํฐ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์—์„œ๋Š” ์›” $5 ํ”Œ๋žœ์œผ๋กœ๋„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • API ์ธก๋ฉด์—์„œ SiliconBeest์˜ ๋ชฉํ‘œ๋Š” Mastodon ๋ฐ Misskey API์™€์˜ ํ˜ธํ™˜์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๋ก ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๊ณผ ์‹ค์ œ ๊ตฌํ˜„์€ ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ๋ถ€๋ถ„์€ ์•„์ง ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ๋กœ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

en

  • SiliconBeest is a fediverse project designed to run on Cloudflare Workers.
  • After seeing many fediverse servers become unavailable when Cloudflare had outages, I realized that the fediverse already relies heavily on Cloudflare infrastructure.
  • So I thought: why not build fediverse software directly on top of Cloudflare?
  • This project was inspired by Cloudflare Inc.โ€™s Wildebeest project, and it also references some of its ideas and code.
  • The project name, SiliconBeest, comes from my nickname silicon(sjang) combined with Cloudflareโ€™s Wildebeest.
  • Iโ€™m still working on making it as inexpensive to run as possible. For now, the goal is to support a small number of users with a small federation footprint on the free plan, and a medium federation footprint on the $5 plan.
  • From an API perspective, SiliconBeest aims to be compatible with both Mastodon and Misskey APIs. However, as many people know, full compatibility is difficult in practice, so this remains a long-term goal rather than something fully implemented today.

์•„์ง์€ ์ดˆ๊ธฐ ๋ฒ„์ „์ด๋ผ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„๋„ ๋งŽ์ง€๋งŒ, Cloudflare Workers, D1, R2, Queues ๋“ฑ Cloudflare์˜ ์„œ๋ฒ„๋ฆฌ์Šค ์ธํ”„๋ผ ์œ„์—์„œ ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์–ผ๋งˆ๋‚˜ ๊ฐ€๋ณ๊ณ  ์ €๋ ดํ•˜๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‹คํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

This is still an early version, and many parts are not implemented yet. However, SiliconBeest is an experiment in how lightweight and affordable fediverse software can be when built on top of Cloudflareโ€™s serverless infrastructure, such as Workers, D1, R2, and Queues.

ํ˜„์žฌ v1.0.0์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋จผ์ € ์ •๋ฆฌํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ–ˆ์œผ๋ฉฐ, ์•ž์œผ๋กœ Mastodon API ํ˜ธํ™˜์„ฑ, federation ์•ˆ์ •์„ฑ, ๊ด€๋ฆฌ ๋„๊ตฌ, ๋ฌธ์„œํ™” ๋“ฑ์„ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•ด๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

In v1.0.0, I focused on organizing the basic architecture and core functionality first. Going forward, I plan to gradually improve Mastodon API compatibility, federation stability, admin tooling, and documentation.

๊ด€์‹ฌ ์žˆ์œผ์‹  ๋ถ„๋“ค์€ GitHub ์ €์žฅ์†Œ๋ฅผ ํ™•์ธํ•ด์ฃผ์‹œ๊ณ , ์ด์Šˆ๋‚˜ ํ”ผ๋“œ๋ฐฑ๋„ ์–ธ์ œ๋“  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

If youโ€™re interested, please check out the GitHub repository. Issues, feedback, and suggestions are always welcome.

https://github.com/SJang1/siliconbeest


์„ค์น˜ ๋ฐ ๋ฐฐํฌ ๋ฐฉ๋ฒ• (Installation and Deployment)

SiliconBeest๋Š” GitHub ํ…œํ”Œ๋ฆฟ๊ณผ Cloudflare๋ฅผ ์ด์šฉํ•ด ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GitHub ํ…œํ”Œ๋ฆฟ์—์„œ ์ƒˆ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Cloudflare์—์„œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค์™€ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Cloudflare API ํ† ํฐ๊ณผ ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ GitHub Secrets์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  4. GitHub Actions๋ฅผ ํ†ตํ•ด ์ž๋™ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ธ์Šคํ„ด์Šค ์„ค์ •์„ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์„ค์น˜ ๊ณผ์ •์€ ๊ณ„์† ๋‹ค๋“ฌ๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐœ์„ ์‚ฌํ•ญ์ด ๋งŽ์Œ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”ํ›„ ๋ณด๊ฐ•ํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ด๋ฉฐ, ์ด์— ๋Œ€ํ•œ PR๋„ ํ™˜์˜์ž…๋‹ˆ๋‹ค.

SiliconBeest can be deployed relatively easily using a GitHub template and Cloudflare.

  1. Create a new repository from the GitHub template.
  2. Set up the required resources and environment on Cloudflare.
  3. Store the Cloudflare API token and required environment variables in GitHub Secrets.
  4. Deploy automatically using GitHub Actions.
  5. Once deployment is complete, finish configuring your instance.

The installation process is still being refined, and Iโ€™m aware that there is plenty of room for improvement. I plan to keep improving the documentation and deployment flow over time, and related PRs are always welcome.

@mancavgeek@social.teamb.space

Is it possible to import my Masto Following/followers .csv files into a with and plugins?
If I remaned it as an OPML file, would that work?
Anyone have any clues on this?

@steve@social.technoetic.com

Is there a more complete description of the Media Upload behavior discussed at w3.org/wiki/SocialCG/ActivityP (last updated in 2017)? For example, the document describes the 202 Accepted async response but not what's returned for a 201 Created response. Is it an object or an activity? It seems like it would be an object since that's what is created, but I see some implementations return a Create activity.

w3.org

SocialCG/ActivityPub/MediaUpload - W3C Wiki

@steve@social.technoetic.com

Is there a more complete description of the Media Upload behavior discussed at w3.org/wiki/SocialCG/ActivityP (last updated in 2017)? For example, the document describes the 202 Accepted async response but not what's returned for a 201 Created response. Is it an object or an activity? It seems like it would be an object since that's what is created, but I see some implementations return a Create activity.

w3.org

SocialCG/ActivityPub/MediaUpload - W3C Wiki

@steve@social.technoetic.com

Is there a more complete description of the Media Upload behavior discussed at w3.org/wiki/SocialCG/ActivityP (last updated in 2017)? For example, the document describes the 202 Accepted async response but not what's returned for a 201 Created response. Is it an object or an activity? It seems like it would be an object since that's what is created, but I see some implementations return a Create activity.

w3.org

SocialCG/ActivityPub/MediaUpload - W3C Wiki

@jorge@social.jagedn.dev

Charla "#ActivityPub El protocolo que impulsa el Fediverso" ensayada

aรบn hay tiempo para los retoques

>> Descubre el poder de la descentralizaciรณn con ActivityPub y el Fediverso. En esta charla, entenderรกs cรณmo este protocolo abre la puerta a una red social mรกs justa, privada, descentralizada y alternativa a las grandes plataformas

https://koliseo.com/commit/2026/agenda/1?selected=JNIEz5zgefpMwrJMRpl7

koliseo.com

Commit Conf 2026 - Koliseo

@fitpub@fosstodon.org

FitPub 1.0 is here! ๐Ÿšด๐Ÿƒ๐Ÿฅพ

FitPub is a federated social fitness platform and Strava alternative built on ActivityPub, giving athletes control over their data, communities, and connections.

Today also marks the launch of the first official FitPub instance: > fitpub.social

Source code: > codeberg.org/fitpub/fitpub

codeberg.org

fitpub

A federated social application for sports activities and open source Strava alternative with ActivityPub support.

@jorge@social.jagedn.dev

Charla "#ActivityPub El protocolo que impulsa el Fediverso" ensayada

aรบn hay tiempo para los retoques

>> Descubre el poder de la descentralizaciรณn con ActivityPub y el Fediverso. En esta charla, entenderรกs cรณmo este protocolo abre la puerta a una red social mรกs justa, privada, descentralizada y alternativa a las grandes plataformas

https://koliseo.com/commit/2026/agenda/1?selected=JNIEz5zgefpMwrJMRpl7

koliseo.com

Commit Conf 2026 - Koliseo

@reiver@mastodon.social

Self-Hosting an ActivityPub Video Podcast Is Surprisingly Affordable

1/

Imagine this.

You want to launch your own video podcast.

A new episode every week.
Each episode is 1 hour long.
Full HD (1080p), 60 fps video.

What would it cost to host it yourself?

Before I ran the numbers, I assumed it would be expensive โ€” maybe even impractical.

I was wrong.

The reality is surprisingly affordable.

Here is why.

...

Self-Hosting an ActivityPub Video Podcast Is Surprisingly Affordable

4/

When you look at the actual storage requirements, self-hosting a video podcast on the Fediverse starts to look a lot less intimidating โ€” and a lot more realistic.

It is affordable โ€” especially with your own HomeLab (where you buy your own hard drives rather than rent them).

Self-Hosting an ActivityPub Video Podcast Is Surprisingly Affordable

3/

A 2 TB hard drive is often available for around $50โ€“$60, which is enough space for five years of weekly episodes.

Need more room?

4 TB, 8 TB, 12 TB, and even 16 TB drives are widely available and far more affordable than most people expect. (Ex: 8TB is about $130 to $170.)

...

@reiver@mastodon.social

Self-Hosting an ActivityPub Video Podcast Is Surprisingly Affordable

1/

Imagine this.

You want to launch your own video podcast.

A new episode every week.
Each episode is 1 hour long.
Full HD (1080p), 60 fps video.

What would it cost to host it yourself?

Before I ran the numbers, I assumed it would be expensive โ€” maybe even impractical.

I was wrong.

The reality is surprisingly affordable.

Here is why.

...

@mariusor@metalhead.club

So on my ONI instance that I've been use as an alternative fediverse profile for myself for about two years, the full storage used is about 3.4G, but out of that there's 2.5G containing mostly the Delete activities of mastodon.social. Crazy.

@apps@toot.fedilab.app

Today the project takes a step forward by letting one account run on several devices.
It may sound minor, but each device runs its own server, which made it a real challenge: avoiding duplicate actions sent to other instances and keeping everything in sync.
All of this stays transparent for the user: adding a device is as simple as scanning a QR code, and the whole transfer is end to end encrypted between the two devices, so the relay never sees it in clear.

mastodon.social

Holos Social (@HolosSocial@mastodon.social)

#HolosSocial 1.7.0 is available. This version adds multi-device support. You can connect a phone, tablet and desktop to the same account. To add a new device, you scan a QR code from one you already use. This transfers your key and all your account data, encrypted end to end, so the relay never sees it in clear. It also adds bio translation on profiles, actor lists for boost and like notifications, DM filtering, and several fixes. Full release notes: https://codeberg.org/tom79/Holos-App/releases/tag/1.7.0

@HolosSocial@mastodon.social

1.7.0 is available.
This version adds multi-device support. You can connect a phone, tablet and desktop to the same account. To add a new device, you scan a QR code from one you already use. This transfers your key and all your account data, encrypted end to end, so the relay never sees it in clear.
It also adds bio translation on profiles, actor lists for boost and like notifications, DM filtering, and several fixes.

Full release notes: codeberg.org/tom79/Holos-App/r

codeberg.org

Cookie monster!

@apps@toot.fedilab.app

Building is by far my most ambitious project. It might only attract a niche of users, though at first it could seem strange to run an server on a device.
But Holos' purpose is more than that: helping everyone have their own identity, host their media, and not depend on a server admin. Make everything accessible with views depending on your mood. One app, one identity, with all that the fediverse can offer.
That's the beginning, the way is still long but not unreachable.

@apps@toot.fedilab.app

Today the project takes a step forward by letting one account run on several devices.
It may sound minor, but each device runs its own server, which made it a real challenge: avoiding duplicate actions sent to other instances and keeping everything in sync.
All of this stays transparent for the user: adding a device is as simple as scanning a QR code, and the whole transfer is end to end encrypted between the two devices, so the relay never sees it in clear.

mastodon.social

Holos Social (@HolosSocial@mastodon.social)

#HolosSocial 1.7.0 is available. This version adds multi-device support. You can connect a phone, tablet and desktop to the same account. To add a new device, you scan a QR code from one you already use. This transfers your key and all your account data, encrypted end to end, so the relay never sees it in clear. It also adds bio translation on profiles, actor lists for boost and like notifications, DM filtering, and several fixes. Full release notes: https://codeberg.org/tom79/Holos-App/releases/tag/1.7.0

@HolosSocial@mastodon.social

1.7.0 is available.
This version adds multi-device support. You can connect a phone, tablet and desktop to the same account. To add a new device, you scan a QR code from one you already use. This transfers your key and all your account data, encrypted end to end, so the relay never sees it in clear.
It also adds bio translation on profiles, actor lists for boost and like notifications, DM filtering, and several fixes.

Full release notes: codeberg.org/tom79/Holos-App/r

codeberg.org

Cookie monster!

@fitpub@fosstodon.org

FitPub 1.0 is here! ๐Ÿšด๐Ÿƒ๐Ÿฅพ

FitPub is a federated social fitness platform and Strava alternative built on ActivityPub, giving athletes control over their data, communities, and connections.

Today also marks the launch of the first official FitPub instance: > fitpub.social

Source code: > codeberg.org/fitpub/fitpub

codeberg.org

fitpub

A federated social application for sports activities and open source Strava alternative with ActivityPub support.

@fitpub@fosstodon.org

FitPub 1.0 is here! ๐Ÿšด๐Ÿƒ๐Ÿฅพ

FitPub is a federated social fitness platform and Strava alternative built on ActivityPub, giving athletes control over their data, communities, and connections.

Today also marks the launch of the first official FitPub instance: > fitpub.social

Source code: > codeberg.org/fitpub/fitpub

codeberg.org

fitpub

A federated social application for sports activities and open source Strava alternative with ActivityPub support.

@fitpub@fosstodon.org

FitPub 1.0 is here! ๐Ÿšด๐Ÿƒ๐Ÿฅพ

FitPub is a federated social fitness platform and Strava alternative built on ActivityPub, giving athletes control over their data, communities, and connections.

Today also marks the launch of the first official FitPub instance: > fitpub.social

Source code: > codeberg.org/fitpub/fitpub

codeberg.org

fitpub

A federated social application for sports activities and open source Strava alternative with ActivityPub support.

@fitpub@fosstodon.org

FitPub 1.0 is here! ๐Ÿšด๐Ÿƒ๐Ÿฅพ

FitPub is a federated social fitness platform and Strava alternative built on ActivityPub, giving athletes control over their data, communities, and connections.

Today also marks the launch of the first official FitPub instance: > fitpub.social

Source code: > codeberg.org/fitpub/fitpub

codeberg.org

fitpub

A federated social application for sports activities and open source Strava alternative with ActivityPub support.

@fitpub@fosstodon.org

FitPub 1.0 is here! ๐Ÿšด๐Ÿƒ๐Ÿฅพ

FitPub is a federated social fitness platform and Strava alternative built on ActivityPub, giving athletes control over their data, communities, and connections.

Today also marks the launch of the first official FitPub instance: > fitpub.social

Source code: > codeberg.org/fitpub/fitpub

codeberg.org

fitpub

A federated social application for sports activities and open source Strava alternative with ActivityPub support.

Stable Outbox Collection Pages

3/

If the page with 3 items contains the 3 oldest items, then โ€”

Every time a new items is added to the collection, then every single collection page will change. I.e., they all churn.

Which means that all cached copies of any collection pages will be invalidated.

Which means a static site generator will have to regenerate all of them again.

Etc.

BUT, if instead โ€”

@reiver@mastodon.social

Stable Outbox Collection Pages

1/

ActivityPub uses collections for a number of things:

โ€ข followers
โ€ข following
โ€ข inbox
โ€ข outbox

And, rather than dump everything in the collection into a single document, ActivityPub paginates using collection pages.

That's great.

But, how you divide up a collection into pages matters and affects things. Such as: caching.

I'll explain.

@reiver@mastodon.social

Stable Outbox Collection Pages

1/

ActivityPub uses collections for a number of things:

โ€ข followers
โ€ข following
โ€ข inbox
โ€ข outbox

And, rather than dump everything in the collection into a single document, ActivityPub paginates using collection pages.

That's great.

But, how you divide up a collection into pages matters and affects things. Such as: caching.

I'll explain.

@fitpub@fosstodon.org

FitPub 1.0 is here! ๐Ÿšด๐Ÿƒ๐Ÿฅพ

FitPub is a federated social fitness platform and Strava alternative built on ActivityPub, giving athletes control over their data, communities, and connections.

Today also marks the launch of the first official FitPub instance: > fitpub.social

Source code: > codeberg.org/fitpub/fitpub

codeberg.org

fitpub

A federated social application for sports activities and open source Strava alternative with ActivityPub support.

@fitpub@fosstodon.org

FitPub 1.0 is here! ๐Ÿšด๐Ÿƒ๐Ÿฅพ

FitPub is a federated social fitness platform and Strava alternative built on ActivityPub, giving athletes control over their data, communities, and connections.

Today also marks the launch of the first official FitPub instance: > fitpub.social

Source code: > codeberg.org/fitpub/fitpub

codeberg.org

fitpub

A federated social application for sports activities and open source Strava alternative with ActivityPub support.

@steve@social.technoetic.com

What would you consider the minimal features to be considered an C2S server? Support for inbox GET, outbox POST, OAuth2, proxy endpoint, ... ?

@fitpub@fosstodon.org

FitPub 1.0 is here! ๐Ÿšด๐Ÿƒ๐Ÿฅพ

FitPub is a federated social fitness platform and Strava alternative built on ActivityPub, giving athletes control over their data, communities, and connections.

Today also marks the launch of the first official FitPub instance: > fitpub.social

Source code: > codeberg.org/fitpub/fitpub

codeberg.org

fitpub

A federated social application for sports activities and open source Strava alternative with ActivityPub support.

@steve@social.technoetic.com

What would you consider the minimal features to be considered an C2S server? Support for inbox GET, outbox POST, OAuth2, proxy endpoint, ... ?

@reiver@mastodon.social

Something missing from 'followers' and 'following' collections.

1/

ActivityPub 'followers' and 'following' collections tend to be missing an important piece of information โ€”

The date-time when person A followed person B.

There are certain use-cases where this matters.

You can see an example of this information missing in what Mastodon includes in the attached screen-shot.

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "id": "https://mastodon.social/users/reiver/following?page=20",
  "type": "OrderedCollectionPage",
  "totalItems": 1394,
  "next": "https://mastodon.social/users/reiver/following?page=21",
  "prev": "https://mastodon.social/users/reiver/following?page=19",
  "partOf": "https://mastodon.social/users/reiver/following",
  "orderedItems": [
    "https://mastodon.social/users/georgiagemo",
    "https://spectra.video/accounts/fedicon",
    "https://indieweb.social/users/KarenKeiller",
    "https://toot.wales/users/jaz",
    "https://hachyderm.io/users/cyberlyra",
    "https://mstdn.cool/users/fedijedi",
    "https://thecanadian.social/users/mike",
    "https://badges.fedicon.ca/actors/badges.fedicon.ca/fedicon",
    "https://social.linux.pizza/users/chocodum",
    "https://mastodon.social/users/pojntfx",
    "https://cosocial.ca/users/kgw",
    "https://social.anoxinon.de/users/Codeberg"
  ]
}
ALT text

{ "@context": "https://www.w3.org/ns/activitystreams", "id": "https://mastodon.social/users/reiver/following?page=20", "type": "OrderedCollectionPage", "totalItems": 1394, "next": "https://mastodon.social/users/reiver/following?page=21", "prev": "https://mastodon.social/users/reiver/following?page=19", "partOf": "https://mastodon.social/users/reiver/following", "orderedItems": [ "https://mastodon.social/users/georgiagemo", "https://spectra.video/accounts/fedicon", "https://indieweb.social/users/KarenKeiller", "https://toot.wales/users/jaz", "https://hachyderm.io/users/cyberlyra", "https://mstdn.cool/users/fedijedi", "https://thecanadian.social/users/mike", "https://badges.fedicon.ca/actors/badges.fedicon.ca/fedicon", "https://social.linux.pizza/users/chocodum", "https://mastodon.social/users/pojntfx", "https://cosocial.ca/users/kgw", "https://social.anoxinon.de/users/Codeberg" ] }

@steve@social.technoetic.com

What would you consider the minimal features to be considered an C2S server? Support for inbox GET, outbox POST, OAuth2, proxy endpoint, ... ?

@fitpub@fosstodon.org

FitPub 1.0 is here! ๐Ÿšด๐Ÿƒ๐Ÿฅพ

FitPub is a federated social fitness platform and Strava alternative built on ActivityPub, giving athletes control over their data, communities, and connections.

Today also marks the launch of the first official FitPub instance: > fitpub.social

Source code: > codeberg.org/fitpub/fitpub

codeberg.org

fitpub

A federated social application for sports activities and open source Strava alternative with ActivityPub support.

@fitpub@fosstodon.org

FitPub 1.0 is here! ๐Ÿšด๐Ÿƒ๐Ÿฅพ

FitPub is a federated social fitness platform and Strava alternative built on ActivityPub, giving athletes control over their data, communities, and connections.

Today also marks the launch of the first official FitPub instance: > fitpub.social

Source code: > codeberg.org/fitpub/fitpub

codeberg.org

fitpub

A federated social application for sports activities and open source Strava alternative with ActivityPub support.

Something missing from 'followers' and 'following' collections.

2/

I think this could be addressed by using the ActivityPub 'published' field:

w3.org/TR/activitystreams-voca

Such as what is shown in the (new) attached screen-shot.

So that the date-time when person A followed person B is included.

{"@context":"https://www.w3.org/ns/activitystreams","id":"https://mastodon.social/users/reiver/following?page=20","type":"OrderedCollectionPage","totalItems":1394,"next":"https://mastodon.social/users/reiver/following?page=21","prev":"https://mastodon.social/users/reiver/following?page=19","partOf":"https://mastodon.social/users/reiver/following","orderedItems":[{"url":"https://mastodon.social/users/georgiagemo","published":"2025-08-01T12:12:12Z"},{"url":"https://spectra.video/accounts/fedicon","published":"2025-07-25T13:04:12Z"},{"url":"https://indieweb.social/users/KarenKeiller","published":"2025-07-25T02:55:18Z"},{"url":"https://toot.wales/users/jaz","published":"2025-07-25T02:55:18Z"},{"url":"https://hachyderm.io/users/cyberlyra","published":"2025-07-23T17:20:02Z"},{"url":"https://mstdn.cool/users/fedijedi","published":"2025-07-23T17:20:02Z"},{"url":"https://thecanadian.social/users/mike","published":"2025-07-21T14:02:02Z"},{"url":"https://badges.fedicon.ca/actors/badges.fedicon.ca/fedicon","published":"2025-07-14T09:03:04Z"},{"url":"https://social.linux.pizza/users/chocodum","published":"2025-07-13T13:13:13Z"},{"url":"https://mastodon.social/users/pojntfx","published":"2025-07-11T19:20:21Z"},{"url":"https://cosocial.ca/users/kgw","published":"2025-07-10T11:12:13Z"},{"url":"https://social.anoxinon.de/users/Codeberg","published":"2025-07-09T10:11:12Z"}]}
ALT text

{"@context":"https://www.w3.org/ns/activitystreams","id":"https://mastodon.social/users/reiver/following?page=20","type":"OrderedCollectionPage","totalItems":1394,"next":"https://mastodon.social/users/reiver/following?page=21","prev":"https://mastodon.social/users/reiver/following?page=19","partOf":"https://mastodon.social/users/reiver/following","orderedItems":[{"url":"https://mastodon.social/users/georgiagemo","published":"2025-08-01T12:12:12Z"},{"url":"https://spectra.video/accounts/fedicon","published":"2025-07-25T13:04:12Z"},{"url":"https://indieweb.social/users/KarenKeiller","published":"2025-07-25T02:55:18Z"},{"url":"https://toot.wales/users/jaz","published":"2025-07-25T02:55:18Z"},{"url":"https://hachyderm.io/users/cyberlyra","published":"2025-07-23T17:20:02Z"},{"url":"https://mstdn.cool/users/fedijedi","published":"2025-07-23T17:20:02Z"},{"url":"https://thecanadian.social/users/mike","published":"2025-07-21T14:02:02Z"},{"url":"https://badges.fedicon.ca/actors/badges.fedicon.ca/fedicon","published":"2025-07-14T09:03:04Z"},{"url":"https://social.linux.pizza/users/chocodum","published":"2025-07-13T13:13:13Z"},{"url":"https://mastodon.social/users/pojntfx","published":"2025-07-11T19:20:21Z"},{"url":"https://cosocial.ca/users/kgw","published":"2025-07-10T11:12:13Z"},{"url":"https://social.anoxinon.de/users/Codeberg","published":"2025-07-09T10:11:12Z"}]}

{"@context":"https://www.w3.org/ns/activitystreams","id":"https://mastodon.social/users/reiver/following?page=20","type":"OrderedCollectionPage","totalItems":1394,"next":"https://mastodon.social/users/reiver/following?page=21","prev":"https://mastodon.social/users/reiver/following?page=19","partOf":"https://mastodon.social/users/reiver/following","orderedItems":[{"url":"https://mastodon.social/users/georgiagemo","published":"2025-08-01T12:12:12Z"},{"url":"https://spectra.video/accounts/fedicon","published":"2025-07-25T13:04:12Z"},{"url":"https://indieweb.social/users/KarenKeiller","published":"2025-07-25T02:55:18Z"},{"url":"https://toot.wales/users/jaz","published":"2025-07-25T02:55:18Z"},{"url":"https://hachyderm.io/users/cyberlyra","published":"2025-07-23T17:20:02Z"},{"url":"https://mstdn.cool/users/fedijedi","published":"2025-07-23T17:20:02Z"},{"url":"https://thecanadian.social/users/mike","published":"2025-07-21T14:02:02Z"},{"url":"https://badges.fedicon.ca/actors/badges.fedicon.ca/fedicon","published":"2025-07-14T09:03:04Z"},{"url":"https://social.linux.pizza/users/chocodum","published":"2025-07-13T13:13:13Z"},{"url":"https://mastodon.social/users/pojntfx","published":"2025-07-11T19:20:21Z"},{"url":"https://cosocial.ca/users/kgw","published":"2025-07-10T11:12:13Z"},{"url":"https://social.anoxinon.de/users/Codeberg","published":"2025-07-09T10:11:12Z"}]}
ALT text

{"@context":"https://www.w3.org/ns/activitystreams","id":"https://mastodon.social/users/reiver/following?page=20","type":"OrderedCollectionPage","totalItems":1394,"next":"https://mastodon.social/users/reiver/following?page=21","prev":"https://mastodon.social/users/reiver/following?page=19","partOf":"https://mastodon.social/users/reiver/following","orderedItems":[{"url":"https://mastodon.social/users/georgiagemo","published":"2025-08-01T12:12:12Z"},{"url":"https://spectra.video/accounts/fedicon","published":"2025-07-25T13:04:12Z"},{"url":"https://indieweb.social/users/KarenKeiller","published":"2025-07-25T02:55:18Z"},{"url":"https://toot.wales/users/jaz","published":"2025-07-25T02:55:18Z"},{"url":"https://hachyderm.io/users/cyberlyra","published":"2025-07-23T17:20:02Z"},{"url":"https://mstdn.cool/users/fedijedi","published":"2025-07-23T17:20:02Z"},{"url":"https://thecanadian.social/users/mike","published":"2025-07-21T14:02:02Z"},{"url":"https://badges.fedicon.ca/actors/badges.fedicon.ca/fedicon","published":"2025-07-14T09:03:04Z"},{"url":"https://social.linux.pizza/users/chocodum","published":"2025-07-13T13:13:13Z"},{"url":"https://mastodon.social/users/pojntfx","published":"2025-07-11T19:20:21Z"},{"url":"https://cosocial.ca/users/kgw","published":"2025-07-10T11:12:13Z"},{"url":"https://social.anoxinon.de/users/Codeberg","published":"2025-07-09T10:11:12Z"}]}

@fitpub@fosstodon.org

FitPub 1.0 is here! ๐Ÿšด๐Ÿƒ๐Ÿฅพ

FitPub is a federated social fitness platform and Strava alternative built on ActivityPub, giving athletes control over their data, communities, and connections.

Today also marks the launch of the first official FitPub instance: > fitpub.social

Source code: > codeberg.org/fitpub/fitpub

codeberg.org

fitpub

A federated social application for sports activities and open source Strava alternative with ActivityPub support.

@reiver@mastodon.social

Something missing from 'followers' and 'following' collections.

1/

ActivityPub 'followers' and 'following' collections tend to be missing an important piece of information โ€”

The date-time when person A followed person B.

There are certain use-cases where this matters.

You can see an example of this information missing in what Mastodon includes in the attached screen-shot.

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "id": "https://mastodon.social/users/reiver/following?page=20",
  "type": "OrderedCollectionPage",
  "totalItems": 1394,
  "next": "https://mastodon.social/users/reiver/following?page=21",
  "prev": "https://mastodon.social/users/reiver/following?page=19",
  "partOf": "https://mastodon.social/users/reiver/following",
  "orderedItems": [
    "https://mastodon.social/users/georgiagemo",
    "https://spectra.video/accounts/fedicon",
    "https://indieweb.social/users/KarenKeiller",
    "https://toot.wales/users/jaz",
    "https://hachyderm.io/users/cyberlyra",
    "https://mstdn.cool/users/fedijedi",
    "https://thecanadian.social/users/mike",
    "https://badges.fedicon.ca/actors/badges.fedicon.ca/fedicon",
    "https://social.linux.pizza/users/chocodum",
    "https://mastodon.social/users/pojntfx",
    "https://cosocial.ca/users/kgw",
    "https://social.anoxinon.de/users/Codeberg"
  ]
}
ALT text

{ "@context": "https://www.w3.org/ns/activitystreams", "id": "https://mastodon.social/users/reiver/following?page=20", "type": "OrderedCollectionPage", "totalItems": 1394, "next": "https://mastodon.social/users/reiver/following?page=21", "prev": "https://mastodon.social/users/reiver/following?page=19", "partOf": "https://mastodon.social/users/reiver/following", "orderedItems": [ "https://mastodon.social/users/georgiagemo", "https://spectra.video/accounts/fedicon", "https://indieweb.social/users/KarenKeiller", "https://toot.wales/users/jaz", "https://hachyderm.io/users/cyberlyra", "https://mstdn.cool/users/fedijedi", "https://thecanadian.social/users/mike", "https://badges.fedicon.ca/actors/badges.fedicon.ca/fedicon", "https://social.linux.pizza/users/chocodum", "https://mastodon.social/users/pojntfx", "https://cosocial.ca/users/kgw", "https://social.anoxinon.de/users/Codeberg" ] }

@fediway@fediway.com
@lxplm@mastodon.social ยท Reply to Alex Plaum

(3/3)

Negativ:

- technokratischer Top-Down-Ansatz, VC Vibes

- will dezentrale Alternativen ("die nicht mit Leadern reden") gerne รผberholen

- liberal bis neoliberal bis elitรคr (s. Board Members)

- zentralisiert und auf schnelle Skalierung fokussiert

- Dialog bis zur Schmerzgrenze (auch rechtsradikale Akteur*innen erst mal willkommen)

& vs. &

@lxplm@mastodon.social
@reiver@mastodon.social

I have seen the @Codeberg people say they don't want to be the only code-forge.

I.e., they don't want to replace GitHub. They want there to be many code-forges out there, including them.

I agree with this goal.

But โ€” I think until we (at least) have federated pull-requests, this is less likely to happen.

And, I do know that there is an effort to add ActivityPub support to Forgejo, Gitea, and others.

forgefed.org

I think ForgeFed is important for this goal

forgefed.org

ForgeFed

@reiver@mastodon.social

I have seen the @Codeberg people say they don't want to be the only code-forge.

I.e., they don't want to replace GitHub. They want there to be many code-forges out there, including them.

I agree with this goal.

But โ€” I think until we (at least) have federated pull-requests, this is less likely to happen.

And, I do know that there is an effort to add ActivityPub support to Forgejo, Gitea, and others.

forgefed.org

I think ForgeFed is important for this goal

forgefed.org

ForgeFed

@apps@toot.fedilab.app

Today the project takes a step forward by letting one account run on several devices.
It may sound minor, but each device runs its own server, which made it a real challenge: avoiding duplicate actions sent to other instances and keeping everything in sync.
All of this stays transparent for the user: adding a device is as simple as scanning a QR code, and the whole transfer is end to end encrypted between the two devices, so the relay never sees it in clear.

mastodon.social

Holos Social (@HolosSocial@mastodon.social)

#HolosSocial 1.7.0 is available. This version adds multi-device support. You can connect a phone, tablet and desktop to the same account. To add a new device, you scan a QR code from one you already use. This transfers your key and all your account data, encrypted end to end, so the relay never sees it in clear. It also adds bio translation on profiles, actor lists for boost and like notifications, DM filtering, and several fixes. Full release notes: https://codeberg.org/tom79/Holos-App/releases/tag/1.7.0

@HolosSocial@mastodon.social

1.7.0 is available.
This version adds multi-device support. You can connect a phone, tablet and desktop to the same account. To add a new device, you scan a QR code from one you already use. This transfers your key and all your account data, encrypted end to end, so the relay never sees it in clear.
It also adds bio translation on profiles, actor lists for boost and like notifications, DM filtering, and several fixes.

Full release notes: codeberg.org/tom79/Holos-App/r

codeberg.org

Cookie monster!

@reiver@mastodon.social

I have seen the @Codeberg people say they don't want to be the only code-forge.

I.e., they don't want to replace GitHub. They want there to be many code-forges out there, including them.

I agree with this goal.

But โ€” I think until we (at least) have federated pull-requests, this is less likely to happen.

And, I do know that there is an effort to add ActivityPub support to Forgejo, Gitea, and others.

forgefed.org

I think ForgeFed is important for this goal

forgefed.org

ForgeFed

@reiver@mastodon.social

I have seen the @Codeberg people say they don't want to be the only code-forge.

I.e., they don't want to replace GitHub. They want there to be many code-forges out there, including them.

I agree with this goal.

But โ€” I think until we (at least) have federated pull-requests, this is less likely to happen.

And, I do know that there is an effort to add ActivityPub support to Forgejo, Gitea, and others.

forgefed.org

I think ForgeFed is important for this goal

forgefed.org

ForgeFed

@apps@toot.fedilab.app

Today the project takes a step forward by letting one account run on several devices.
It may sound minor, but each device runs its own server, which made it a real challenge: avoiding duplicate actions sent to other instances and keeping everything in sync.
All of this stays transparent for the user: adding a device is as simple as scanning a QR code, and the whole transfer is end to end encrypted between the two devices, so the relay never sees it in clear.

mastodon.social

Holos Social (@HolosSocial@mastodon.social)

#HolosSocial 1.7.0 is available. This version adds multi-device support. You can connect a phone, tablet and desktop to the same account. To add a new device, you scan a QR code from one you already use. This transfers your key and all your account data, encrypted end to end, so the relay never sees it in clear. It also adds bio translation on profiles, actor lists for boost and like notifications, DM filtering, and several fixes. Full release notes: https://codeberg.org/tom79/Holos-App/releases/tag/1.7.0

@HolosSocial@mastodon.social

1.7.0 is available.
This version adds multi-device support. You can connect a phone, tablet and desktop to the same account. To add a new device, you scan a QR code from one you already use. This transfers your key and all your account data, encrypted end to end, so the relay never sees it in clear.
It also adds bio translation on profiles, actor lists for boost and like notifications, DM filtering, and several fixes.

Full release notes: codeberg.org/tom79/Holos-App/r

codeberg.org

Cookie monster!

@apps@toot.fedilab.app

Today the project takes a step forward by letting one account run on several devices.
It may sound minor, but each device runs its own server, which made it a real challenge: avoiding duplicate actions sent to other instances and keeping everything in sync.
All of this stays transparent for the user: adding a device is as simple as scanning a QR code, and the whole transfer is end to end encrypted between the two devices, so the relay never sees it in clear.

mastodon.social

Holos Social (@HolosSocial@mastodon.social)

#HolosSocial 1.7.0 is available. This version adds multi-device support. You can connect a phone, tablet and desktop to the same account. To add a new device, you scan a QR code from one you already use. This transfers your key and all your account data, encrypted end to end, so the relay never sees it in clear. It also adds bio translation on profiles, actor lists for boost and like notifications, DM filtering, and several fixes. Full release notes: https://codeberg.org/tom79/Holos-App/releases/tag/1.7.0

@HolosSocial@mastodon.social

1.7.0 is available.
This version adds multi-device support. You can connect a phone, tablet and desktop to the same account. To add a new device, you scan a QR code from one you already use. This transfers your key and all your account data, encrypted end to end, so the relay never sees it in clear.
It also adds bio translation on profiles, actor lists for boost and like notifications, DM filtering, and several fixes.

Full release notes: codeberg.org/tom79/Holos-App/r

codeberg.org

Cookie monster!

@apps@toot.fedilab.app

Today the project takes a step forward by letting one account run on several devices.
It may sound minor, but each device runs its own server, which made it a real challenge: avoiding duplicate actions sent to other instances and keeping everything in sync.
All of this stays transparent for the user: adding a device is as simple as scanning a QR code, and the whole transfer is end to end encrypted between the two devices, so the relay never sees it in clear.

mastodon.social

Holos Social (@HolosSocial@mastodon.social)

#HolosSocial 1.7.0 is available. This version adds multi-device support. You can connect a phone, tablet and desktop to the same account. To add a new device, you scan a QR code from one you already use. This transfers your key and all your account data, encrypted end to end, so the relay never sees it in clear. It also adds bio translation on profiles, actor lists for boost and like notifications, DM filtering, and several fixes. Full release notes: https://codeberg.org/tom79/Holos-App/releases/tag/1.7.0

@HolosSocial@mastodon.social

1.7.0 is available.
This version adds multi-device support. You can connect a phone, tablet and desktop to the same account. To add a new device, you scan a QR code from one you already use. This transfers your key and all your account data, encrypted end to end, so the relay never sees it in clear.
It also adds bio translation on profiles, actor lists for boost and like notifications, DM filtering, and several fixes.

Full release notes: codeberg.org/tom79/Holos-App/r

codeberg.org

Cookie monster!

@box464@mastodon.social
@ozdreaming@infosec.exchange

Is there an actively-maintained, relatively lightweight / server I can run under plain Debian without using Docker?

Asking for a friend (who is actually me, but a hypothetical "me" who has time to fart around spinning up and maintaining new services).

@ozdreaming@infosec.exchange

Is there an actively-maintained, relatively lightweight / server I can run under plain Debian without using Docker?

Asking for a friend (who is actually me, but a hypothetical "me" who has time to fart around spinning up and maintaining new services).

@box464@mastodon.social
@weekinfediverse@mitra.social
@weekinfediverse@mitra.social
@innocentzero@social.tchncs.de

I kept on thinking about how over would look like only to realise that to solve the problem of server side MITM on TOFU, I needed a central way of looking up actors not tied to the server, and before I knew it I was reinventing (ik y'all don't like it, sorry, it's the only way identity TOFU won't have an MITM problem)

@apps@toot.fedilab.app

Building is by far my most ambitious project. It might only attract a niche of users, though at first it could seem strange to run an server on a device.
But Holos' purpose is more than that: helping everyone have their own identity, host their media, and not depend on a server admin. Make everything accessible with views depending on your mood. One app, one identity, with all that the fediverse can offer.
That's the beginning, the way is still long but not unreachable.

@weekinfediverse@mitra.social
@weekinfediverse@mitra.social
@innocentzero@social.tchncs.de

I kept on thinking about how over would look like only to realise that to solve the problem of server side MITM on TOFU, I needed a central way of looking up actors not tied to the server, and before I knew it I was reinventing (ik y'all don't like it, sorry, it's the only way identity TOFU won't have an MITM problem)

@wrzky@kolektiva.social

๐Ÿšจ Mutual aid checkpoint 29 MAY 2026 ๐Ÿšจ

Reply with a request for yourself or a friend, including the need, deadline, and payment handle or Chuffed/GFM link.

The first 10 direct requests will be collected for next Wednesdayโ€™s roundup + newsletter.

Boost this post and the replies, and tag others to participate. From each according to their capacity, to each according to their needs.

@mutualaid@ovo.st @mutualaid@fedigroups.social
@disability @autistics @actuallyadhd
@posts

Square deep burgundy graphic with a subtle line-art background pattern and white sparkle accents. Large outlined headline reads โ€œMUTUAL AID CHECKPOINT.โ€ Below it, a central panel says โ€œREPLY WITH:โ€ followed by bullet points asking people to share their needs or a friendโ€™s needs plus deadline, how to help through crowdfunding links or preferred payment method, and: โ€œIf you have the capacity to contribute meaningfully (financially or socially), please do.โ€ A bottom CTA says: โ€œBOOST THIS POST + EVERY REPLY. LETโ€™S AMPLIFY EACH OTHER.โ€ Decorative illustrations show digital payment icons, QR-code scanning, and a calendar/deadline symbol on the left; mutual-aid support symbols on the right, including housing, money, clothing, groceries, and medical supplies; a hijabi woman gesturing at the bottom left; and a person holding a megaphone and waving at the bottom right. The word โ€œwrzkyโ€ appears vertically near the right side.
ALT text

Square deep burgundy graphic with a subtle line-art background pattern and white sparkle accents. Large outlined headline reads โ€œMUTUAL AID CHECKPOINT.โ€ Below it, a central panel says โ€œREPLY WITH:โ€ followed by bullet points asking people to share their needs or a friendโ€™s needs plus deadline, how to help through crowdfunding links or preferred payment method, and: โ€œIf you have the capacity to contribute meaningfully (financially or socially), please do.โ€ A bottom CTA says: โ€œBOOST THIS POST + EVERY REPLY. LETโ€™S AMPLIFY EACH OTHER.โ€ Decorative illustrations show digital payment icons, QR-code scanning, and a calendar/deadline symbol on the left; mutual-aid support symbols on the right, including housing, money, clothing, groceries, and medical supplies; a hijabi woman gesturing at the bottom left; and a person holding a megaphone and waving at the bottom right. The word โ€œwrzkyโ€ appears vertically near the right side.

@wrzky@kolektiva.social

๐Ÿšจ Mutual aid checkpoint 29 MAY 2026 ๐Ÿšจ

Reply with a request for yourself or a friend, including the need, deadline, and payment handle or Chuffed/GFM link.

The first 10 direct requests will be collected for next Wednesdayโ€™s roundup + newsletter.

Boost this post and the replies, and tag others to participate. From each according to their capacity, to each according to their needs.

@mutualaid@ovo.st @mutualaid@fedigroups.social
@disability @autistics @actuallyadhd
@posts

Square deep burgundy graphic with a subtle line-art background pattern and white sparkle accents. Large outlined headline reads โ€œMUTUAL AID CHECKPOINT.โ€ Below it, a central panel says โ€œREPLY WITH:โ€ followed by bullet points asking people to share their needs or a friendโ€™s needs plus deadline, how to help through crowdfunding links or preferred payment method, and: โ€œIf you have the capacity to contribute meaningfully (financially or socially), please do.โ€ A bottom CTA says: โ€œBOOST THIS POST + EVERY REPLY. LETโ€™S AMPLIFY EACH OTHER.โ€ Decorative illustrations show digital payment icons, QR-code scanning, and a calendar/deadline symbol on the left; mutual-aid support symbols on the right, including housing, money, clothing, groceries, and medical supplies; a hijabi woman gesturing at the bottom left; and a person holding a megaphone and waving at the bottom right. The word โ€œwrzkyโ€ appears vertically near the right side.
ALT text

Square deep burgundy graphic with a subtle line-art background pattern and white sparkle accents. Large outlined headline reads โ€œMUTUAL AID CHECKPOINT.โ€ Below it, a central panel says โ€œREPLY WITH:โ€ followed by bullet points asking people to share their needs or a friendโ€™s needs plus deadline, how to help through crowdfunding links or preferred payment method, and: โ€œIf you have the capacity to contribute meaningfully (financially or socially), please do.โ€ A bottom CTA says: โ€œBOOST THIS POST + EVERY REPLY. LETโ€™S AMPLIFY EACH OTHER.โ€ Decorative illustrations show digital payment icons, QR-code scanning, and a calendar/deadline symbol on the left; mutual-aid support symbols on the right, including housing, money, clothing, groceries, and medical supplies; a hijabi woman gesturing at the bottom left; and a person holding a megaphone and waving at the bottom right. The word โ€œwrzkyโ€ appears vertically near the right side.

@homegrown@social.growyourown.services

NodeBB is free open source forum software on the Fediverse. You can follow and interact with NodeBB forum members from Mastodon etc. More info:

๐ŸŒฑ nodebb.org
๐ŸŒฑ @nodebb

You can self-host free of charge using the installation instructions:

๐ŸŒฑ docs.nodebb.org

If you don't want to do techy stuff, you can create a NodeBB forum very easily through a paid hosting service:

๐ŸŒฑ nodebb.org/pricing

nodebb.org

Pricing - NodeBB - Modern Forum Software

NodeBB Forum Software - The Modern Discussion Platform

@omz13@mastodon.social

Iโ€™m working on my implementation, I can feel what little remains of my sanity ebbing away . In the background, because I'm and have taste in music:#DeepPurple โ€œDemon's Eye" is playing. Coincidence, yes, but perhaps the universe is trying to hint at something.

@omz13@mastodon.social

Iโ€™m working on my implementation, I can feel what little remains of my sanity ebbing away . In the background, because I'm and have taste in music:#DeepPurple โ€œDemon's Eye" is playing. Coincidence, yes, but perhaps the universe is trying to hint at something.

@mariusor@metalhead.club

So on my ONI instance that I've been use as an alternative fediverse profile for myself for about two years, the full storage used is about 3.4G, but out of that there's 2.5G containing mostly the Delete activities of mastodon.social. Crazy.

@homegrown@social.growyourown.services

NodeBB is free open source forum software on the Fediverse. You can follow and interact with NodeBB forum members from Mastodon etc. More info:

๐ŸŒฑ nodebb.org
๐ŸŒฑ @nodebb

You can self-host free of charge using the installation instructions:

๐ŸŒฑ docs.nodebb.org

If you don't want to do techy stuff, you can create a NodeBB forum very easily through a paid hosting service:

๐ŸŒฑ nodebb.org/pricing

nodebb.org

Pricing - NodeBB - Modern Forum Software

NodeBB Forum Software - The Modern Discussion Platform

@toddsundsted@epiktistes.com

The biggest change in release v3.4.0 of Ktistec is cursor-based pagination for all web-navigable collections (timeline, notifications, etc.). Offset-based pagination will be removed completely in the next release.

Offset-based (e.g. page/size) pagination works well on collections that don't change. But, what does "the second page" contain in a dynamic timeline? Support for cursor-based pagination is required by the Mastodon-compatible API, but has been a desirable feature for quite a while.

While updating queries to paginate by cursor, I also made performance improvements to the queries themselves, as mentioned elsewhere. Scrapers and bots have already adaptedโ€”sort of. I now see odd hybrid requests in the log like /tags/xyz?page=7&min_id=123. Overall CPU usage under normal load is now sitting at 0-1%.

Here is the full changelog for the release:

Added

  • Cursor-based pagination for web-navigable collections. (fixes #122)
  • Mastodon-compatible API: /api/v1/timelines/tag/:hashtag endpoint.

Fixed

  • Negative replies count when viewing a post that is also a reply.
  • Order cached actors' posts by published rather than id.

Changed

  • Report 401 and 403 as distinct errors in Ktistec::Network.get.

Removed

  • Unused paginated query methods.

Enjoy!

github.com

Pagination should be based on timestamp or object ID, rather than page number ยท Issue #122 ยท toddsundsted/ktistec

My typical session is logging in and reading my feed in reverse chronological order until I see content that I've seen before, which usually means navigating through several pages of history. A beh...

@toddsundsted@epiktistes.com

The biggest change in release v3.4.0 of Ktistec is cursor-based pagination for all web-navigable collections (timeline, notifications, etc.). Offset-based pagination will be removed completely in the next release.

Offset-based (e.g. page/size) pagination works well on collections that don't change. But, what does "the second page" contain in a dynamic timeline? Support for cursor-based pagination is required by the Mastodon-compatible API, but has been a desirable feature for quite a while.

While updating queries to paginate by cursor, I also made performance improvements to the queries themselves, as mentioned elsewhere. Scrapers and bots have already adaptedโ€”sort of. I now see odd hybrid requests in the log like /tags/xyz?page=7&min_id=123. Overall CPU usage under normal load is now sitting at 0-1%.

Here is the full changelog for the release:

Added

  • Cursor-based pagination for web-navigable collections. (fixes #122)
  • Mastodon-compatible API: /api/v1/timelines/tag/:hashtag endpoint.

Fixed

  • Negative replies count when viewing a post that is also a reply.
  • Order cached actors' posts by published rather than id.

Changed

  • Report 401 and 403 as distinct errors in Ktistec::Network.get.

Removed

  • Unused paginated query methods.

Enjoy!

github.com

Pagination should be based on timestamp or object ID, rather than page number ยท Issue #122 ยท toddsundsted/ktistec

My typical session is logging in and reading my feed in reverse chronological order until I see content that I've seen before, which usually means navigating through several pages of history. A beh...

@evan@cosocial.ca

Hey, friends! I could use some help. My PR to let users filter or drop notifications from bot users is stalled while the Mastodon team considers whether the notifications page needs a redesign. github.com/mastodon/mastodon/p A bummer since I feel like it helps with a real user problem, but it's important to maintain that UI integrity, too.

github.com

Add policy to filter notifications from bots (#38494) by evanp ยท Pull Request #38809 ยท mastodon/mastodon

Adds a notification policy option to filter notifications from accounts marked as bots. More discussion in #38494 about why this is useful. Adds a column for_bots to the notification policies table...

@evan@cosocial.ca

Hey, friends! I could use some help. My PR to let users filter or drop notifications from bot users is stalled while the Mastodon team considers whether the notifications page needs a redesign. github.com/mastodon/mastodon/p A bummer since I feel like it helps with a real user problem, but it's important to maintain that UI integrity, too.

github.com

Add policy to filter notifications from bots (#38494) by evanp ยท Pull Request #38809 ยท mastodon/mastodon

Adds a notification policy option to filter notifications from accounts marked as bots. More discussion in #38494 about why this is useful. Adds a column for_bots to the notification policies table...

Remote Inbox Architecture

2/

The Remote Inbox server deals with incoming activities, objects, etc, from other users..

The front-end can get the inbox (and other feeds') data from the Remote Inbox server.

(You'd probably want to store cached data from the Fediverse elsewhere from these two servers, as I've said before. But, that is a separate thread.)

@reiver@mastodon.social

Remote Inbox Architecture

1/

This, the Remote Inbox Architecture, is an architecture for a Fediverse back-end server that I think could be useful.

Here is how it works โ€” there are (at least) 2 servers involved: (1) the main back-end server, and (2) a remote inbox server.

The actor file on main back-end server "points" the inbox to the remote server.

It separates the user's content from the front-end related functionality

...

@apps@toot.fedilab.app

Most people know about messages, photos and videos on the . But the protocol actually defines several object types, each one distinct and more or less compatible across apps:

- Note: short post (Mastodon)
- Article / Page: long text or shared link (WriteFreely, Lemmy)
- Image (Pixelfed)
- Video (PeerTube)
- Audio (Funkwhale)
- Event with date and place (Mobilizon)

(1/4)

@phlogiston@mastodon.nz ยท Reply to Raglan Niall :lk: :tinoflag:

@Niall @phil_stevens
There is already (German for 'flea market'), which is an based private ads system.

codeberg.org/flohmarkt/flohmar

Now ... the problem is to get critical mass. Like the RNZ piece describes, Facebook is already quite embedded in many people's daily lives ...

codeberg.org

flohmarkt

federated decentral classified ad software using activitypub

@Pat@mastodon.nz

Thinking more about activitypub (on the back of setting the blog and CanYouBeatWellington up as actors).

I use Strava and Garmin connect to track my bike rides, but I'm now increasingly aware that I don't really own that data or control who sees it. There is also a bunch of stuff in there I don't need - I don't really care about segments / KOMs or anything like that. All I really want is to see a log of the rides I've done (speed, distance, time etc) and a sum up of what I've done over the last week, month, year, decade. And maybe sharing with a few select people.

I'm considering building a lightweight, self hosted activity focused activtypub system. Any interest out there for something like this? What would you like to see in a system like that?

@phlogiston@mastodon.nz ยท Reply to Raglan Niall :lk: :tinoflag:

@Niall @phil_stevens
There is already (German for 'flea market'), which is an based private ads system.

codeberg.org/flohmarkt/flohmar

Now ... the problem is to get critical mass. Like the RNZ piece describes, Facebook is already quite embedded in many people's daily lives ...

codeberg.org

flohmarkt

federated decentral classified ad software using activitypub

@apps@toot.fedilab.app

Most people know about messages, photos and videos on the . But the protocol actually defines several object types, each one distinct and more or less compatible across apps:

- Note: short post (Mastodon)
- Article / Page: long text or shared link (WriteFreely, Lemmy)
- Image (Pixelfed)
- Video (PeerTube)
- Audio (Funkwhale)
- Event with date and place (Mobilizon)

(1/4)

@phlogiston@mastodon.nz ยท Reply to Raglan Niall :lk: :tinoflag:

@Niall @phil_stevens
There is already (German for 'flea market'), which is an based private ads system.

codeberg.org/flohmarkt/flohmar

Now ... the problem is to get critical mass. Like the RNZ piece describes, Facebook is already quite embedded in many people's daily lives ...

codeberg.org

flohmarkt

federated decentral classified ad software using activitypub

@Pat@mastodon.nz

Thinking more about activitypub (on the back of setting the blog and CanYouBeatWellington up as actors).

I use Strava and Garmin connect to track my bike rides, but I'm now increasingly aware that I don't really own that data or control who sees it. There is also a bunch of stuff in there I don't need - I don't really care about segments / KOMs or anything like that. All I really want is to see a log of the rides I've done (speed, distance, time etc) and a sum up of what I've done over the last week, month, year, decade. And maybe sharing with a few select people.

I'm considering building a lightweight, self hosted activity focused activtypub system. Any interest out there for something like this? What would you like to see in a system like that?

@apps@toot.fedilab.app

Most people know about messages, photos and videos on the . But the protocol actually defines several object types, each one distinct and more or less compatible across apps:

- Note: short post (Mastodon)
- Article / Page: long text or shared link (WriteFreely, Lemmy)
- Image (Pixelfed)
- Video (PeerTube)
- Audio (Funkwhale)
- Event with date and place (Mobilizon)

(1/4)

@apps@toot.fedilab.app

Most people know about messages, photos and videos on the . But the protocol actually defines several object types, each one distinct and more or less compatible across apps:

- Note: short post (Mastodon)
- Article / Page: long text or shared link (WriteFreely, Lemmy)
- Image (Pixelfed)
- Video (PeerTube)
- Audio (Funkwhale)
- Event with date and place (Mobilizon)

(1/4)

@HolosSocial@mastodon.social

Multi-device support is progressing well for . The tricky part: each device runs its own server, with its own local data, signing its own activities. Keeping several servers in sync both ways, without duplicating everything, without losing actions on the way, and without two of them handling the same activity at the same time, was the main problem to solve. It also had to stay reliable when a device goes offline for hours or days.
(1/3)

@HolosSocial@mastodon.social

Multi-device support is progressing well for . The tricky part: each device runs its own server, with its own local data, signing its own activities. Keeping several servers in sync both ways, without duplicating everything, without losing actions on the way, and without two of them handling the same activity at the same time, was the main problem to solve. It also had to stay reliable when a device goes offline for hours or days.
(1/3)

@eclecticpassions@fosstodon.org
@eclecticpassions@fosstodon.org
@commonshub@social.peakx.com

This is a recent talk that captures the main goal of why we are developing Commonshub. The world needs and wants a healthy alternative to toxic centralized social media and it exists but not enough people know about it. That will change if more organizations and or individual creators setup up their own communities and invite people to join. Exactly what Commonshub is designed for...

watch.2mr.social/w/k3ngQ8Xr3AN

thecommonshub.com

thecommonshub.com

Own your community.

Like having your own Twitter โ€” a calm, chronological conversation and actually yours.

@emsquared@social.coop
@emsquared@social.coop
@commonshub@social.peakx.com

This is a recent talk that captures the main goal of why we are developing Commonshub. The world needs and wants a healthy alternative to toxic centralized social media and it exists but not enough people know about it. That will change if more organizations and or individual creators setup up their own communities and invite people to join. Exactly what Commonshub is designed for...

watch.2mr.social/w/k3ngQ8Xr3AN

thecommonshub.com

thecommonshub.com

Own your community.

Like having your own Twitter โ€” a calm, chronological conversation and actually yours.

@HolosSocial@mastodon.social

isn't bringing something new to the , especially not to . It builds on what exists, without mimicking any platform.
Every social network has been given its fediverse clone. Asking people to hold a separate account on each is taking the problem backwards.
If the fediverse keeps mirroring the GAFAM, it loses. The point was never to rebuild their world, but to offer something else: one identity across every content.
HolosSocial is simply a try. But we can do it.

Like the previous article on Grassroots fediverse evolution, this is a long blog post, so I provided an article summary to be TL;DR'ed ๐Ÿ˜Š

Article summary:

- We cocreate our future together, yet our rushed modern society holds us back from contributing where it matters most.
- The Paradox of emergence stands in the way of seeing how our two cents of investment contributes to solving wicked problems.
- FOSS and fediverse projects must be more holistically considered to anticipate and address likely huge negative outcomes in-the-large.
- Fediverse is the ideal diverse environment where people can further their own dreams in concert with others, and follow shared vision.
- For fediverse to become the Future of Social networking we must overcome the fragmentation and division caused by specialization.
- Hedonic peer production provides the means to do so, based on the SEE model for Sustainable ecosystem evolution (see diagram above).
- We must foster our ability to truly listen to others, to be able to fight the root cause of Hypercapitalism at inter-personal relationship level.
- Cross-pollination enables knowledge brokering and innovation based on individual needs, assets we can provide, shared values we hold dear.
- To give shape to Hedonic peer production on the social web, SX defines โ€œJoyful creationโ€, a formula and vision for inclusive cocreation.
- Sustainable ecosystem evolution aims for the emergence of a commons based value economy where participants exchange services.
- Purposeful social networking that induces prosocial behavior is key to the transition from an attention to an online Intention economy.
ALT text

Article summary: - We cocreate our future together, yet our rushed modern society holds us back from contributing where it matters most. - The Paradox of emergence stands in the way of seeing how our two cents of investment contributes to solving wicked problems. - FOSS and fediverse projects must be more holistically considered to anticipate and address likely huge negative outcomes in-the-large. - Fediverse is the ideal diverse environment where people can further their own dreams in concert with others, and follow shared vision. - For fediverse to become the Future of Social networking we must overcome the fragmentation and division caused by specialization. - Hedonic peer production provides the means to do so, based on the SEE model for Sustainable ecosystem evolution (see diagram above). - We must foster our ability to truly listen to others, to be able to fight the root cause of Hypercapitalism at inter-personal relationship level. - Cross-pollination enables knowledge brokering and innovation based on individual needs, assets we can provide, shared values we hold dear. - To give shape to Hedonic peer production on the social web, SX defines โ€œJoyful creationโ€, a formula and vision for inclusive cocreation. - Sustainable ecosystem evolution aims for the emergence of a commons based value economy where participants exchange services. - Purposeful social networking that induces prosocial behavior is key to the transition from an attention to an online Intention economy.

@media@eicker.news
@media@eicker.news
@media@eicker.news
@media@eicker.news
@zeitfresser@ztfr.eu
Stop Posting to Platforms โ€” Turn Your Website into a Fediverse Node

Discover how ActivityPub transforms WordPress into a decentralized social platform while keeping full control over content and audience.

๐Ÿ”— Read the full article here: ztfr.eu/stop-posting-to-platfo

Article Feature Picture: Stop Posting to Platforms โ€” Turn Your Website into a Fediverse Node
ALT text

Article Feature Picture: Stop Posting to Platforms โ€” Turn Your Website into a Fediverse Node

@zeitfresser@ztfr.eu
Stop Posting to Platforms โ€” Turn Your Website into a Fediverse Node

Discover how ActivityPub transforms WordPress into a decentralized social platform while keeping full control over content and audience.

๐Ÿ”— Read the full article here: ztfr.eu/stop-posting-to-platfo

Article Feature Picture: Stop Posting to Platforms โ€” Turn Your Website into a Fediverse Node
ALT text

Article Feature Picture: Stop Posting to Platforms โ€” Turn Your Website into a Fediverse Node

@evan@cosocial.ca

ieeexplore.ieee.org

Smart Home Integration and Data Sharing with ActivityPub and UPOD

With the widespread adoption of IoT, smart homes have gradually permeated our daily lives. However, most of this data is held by the data platform company. Platform companies sometimes leak data and sometimes discontinue unprofitable services. Concurrently, device compatibility, personal data security, and fragmentation problems are also becoming increasingly serious. In this study, we developed the Ubi-House system that integrates social and IoT data to provide users with personalized smart home management. The system adheres to a โ€œHuman-centricโ€ principle, allowing users to manage their own smart home data and social network data. Through an authorization management feature, users can autonomously decide who to share their data with and to what extent. We advocate for the use of the ActivityPub protocol, which is widely used in decentralized social networks, as the communication protocol for smart homes. This facilitates centralized management of a user's smart home data and social network data. We have attempted to convert the communication protocols of existing smart home devices to the ActivityPub protocol, aiming to achieve interoperability among IoT devices from various companies. Our research addresses the fragmentation issue of smart home data. With the Ubi-House system, users can better control their data and ensure personal data security. Upon user authorization, third-party applications can assist users in understanding their usage habits, environmental conditions, and more, enhancing their comprehension of their own data. The comprehensive data collected by the Ubi-House system can be utilized with digital twin technology to construct virtual user behaviors, forecast device usage, gain a more accurate understanding of user needs, and deliver personalized services.

@evan@cosocial.ca

ieeexplore.ieee.org

Smart Home Integration and Data Sharing with ActivityPub and UPOD

With the widespread adoption of IoT, smart homes have gradually permeated our daily lives. However, most of this data is held by the data platform company. Platform companies sometimes leak data and sometimes discontinue unprofitable services. Concurrently, device compatibility, personal data security, and fragmentation problems are also becoming increasingly serious. In this study, we developed the Ubi-House system that integrates social and IoT data to provide users with personalized smart home management. The system adheres to a โ€œHuman-centricโ€ principle, allowing users to manage their own smart home data and social network data. Through an authorization management feature, users can autonomously decide who to share their data with and to what extent. We advocate for the use of the ActivityPub protocol, which is widely used in decentralized social networks, as the communication protocol for smart homes. This facilitates centralized management of a user's smart home data and social network data. We have attempted to convert the communication protocols of existing smart home devices to the ActivityPub protocol, aiming to achieve interoperability among IoT devices from various companies. Our research addresses the fragmentation issue of smart home data. With the Ubi-House system, users can better control their data and ensure personal data security. Upon user authorization, third-party applications can assist users in understanding their usage habits, environmental conditions, and more, enhancing their comprehension of their own data. The comprehensive data collected by the Ubi-House system can be utilized with digital twin technology to construct virtual user behaviors, forecast device usage, gain a more accurate understanding of user needs, and deliver personalized services.

@evan@cosocial.ca

ieeexplore.ieee.org

Smart Home Integration and Data Sharing with ActivityPub and UPOD

With the widespread adoption of IoT, smart homes have gradually permeated our daily lives. However, most of this data is held by the data platform company. Platform companies sometimes leak data and sometimes discontinue unprofitable services. Concurrently, device compatibility, personal data security, and fragmentation problems are also becoming increasingly serious. In this study, we developed the Ubi-House system that integrates social and IoT data to provide users with personalized smart home management. The system adheres to a โ€œHuman-centricโ€ principle, allowing users to manage their own smart home data and social network data. Through an authorization management feature, users can autonomously decide who to share their data with and to what extent. We advocate for the use of the ActivityPub protocol, which is widely used in decentralized social networks, as the communication protocol for smart homes. This facilitates centralized management of a user's smart home data and social network data. We have attempted to convert the communication protocols of existing smart home devices to the ActivityPub protocol, aiming to achieve interoperability among IoT devices from various companies. Our research addresses the fragmentation issue of smart home data. With the Ubi-House system, users can better control their data and ensure personal data security. Upon user authorization, third-party applications can assist users in understanding their usage habits, environmental conditions, and more, enhancing their comprehension of their own data. The comprehensive data collected by the Ubi-House system can be utilized with digital twin technology to construct virtual user behaviors, forecast device usage, gain a more accurate understanding of user needs, and deliver personalized services.

@evan@cosocial.ca

ieeexplore.ieee.org

Smart Home Integration and Data Sharing with ActivityPub and UPOD

With the widespread adoption of IoT, smart homes have gradually permeated our daily lives. However, most of this data is held by the data platform company. Platform companies sometimes leak data and sometimes discontinue unprofitable services. Concurrently, device compatibility, personal data security, and fragmentation problems are also becoming increasingly serious. In this study, we developed the Ubi-House system that integrates social and IoT data to provide users with personalized smart home management. The system adheres to a โ€œHuman-centricโ€ principle, allowing users to manage their own smart home data and social network data. Through an authorization management feature, users can autonomously decide who to share their data with and to what extent. We advocate for the use of the ActivityPub protocol, which is widely used in decentralized social networks, as the communication protocol for smart homes. This facilitates centralized management of a user's smart home data and social network data. We have attempted to convert the communication protocols of existing smart home devices to the ActivityPub protocol, aiming to achieve interoperability among IoT devices from various companies. Our research addresses the fragmentation issue of smart home data. With the Ubi-House system, users can better control their data and ensure personal data security. Upon user authorization, third-party applications can assist users in understanding their usage habits, environmental conditions, and more, enhancing their comprehension of their own data. The comprehensive data collected by the Ubi-House system can be utilized with digital twin technology to construct virtual user behaviors, forecast device usage, gain a more accurate understanding of user needs, and deliver personalized services.

@evan@cosocial.ca

ieeexplore.ieee.org

Smart Home Integration and Data Sharing with ActivityPub and UPOD

With the widespread adoption of IoT, smart homes have gradually permeated our daily lives. However, most of this data is held by the data platform company. Platform companies sometimes leak data and sometimes discontinue unprofitable services. Concurrently, device compatibility, personal data security, and fragmentation problems are also becoming increasingly serious. In this study, we developed the Ubi-House system that integrates social and IoT data to provide users with personalized smart home management. The system adheres to a โ€œHuman-centricโ€ principle, allowing users to manage their own smart home data and social network data. Through an authorization management feature, users can autonomously decide who to share their data with and to what extent. We advocate for the use of the ActivityPub protocol, which is widely used in decentralized social networks, as the communication protocol for smart homes. This facilitates centralized management of a user's smart home data and social network data. We have attempted to convert the communication protocols of existing smart home devices to the ActivityPub protocol, aiming to achieve interoperability among IoT devices from various companies. Our research addresses the fragmentation issue of smart home data. With the Ubi-House system, users can better control their data and ensure personal data security. Upon user authorization, third-party applications can assist users in understanding their usage habits, environmental conditions, and more, enhancing their comprehension of their own data. The comprehensive data collected by the Ubi-House system can be utilized with digital twin technology to construct virtual user behaviors, forecast device usage, gain a more accurate understanding of user needs, and deliver personalized services.

@HolosSocial@mastodon.social

isn't bringing something new to the , especially not to . It builds on what exists, without mimicking any platform.
Every social network has been given its fediverse clone. Asking people to hold a separate account on each is taking the problem backwards.
If the fediverse keeps mirroring the GAFAM, it loses. The point was never to rebuild their world, but to offer something else: one identity across every content.
HolosSocial is simply a try. But we can do it.

@dynamic@social.coop

Can someone update me on the state / existence of platforms with end-to-end encryption?

Does such platforms exist? If so, what are they, and do any of them natively use e2ee by default

@nibushibu@vivaldi.net

ใ‚’ :activitypub: ็ตŒ็”ฑใงใŸใพใซ่ฆ‹ใฆใ‚‹ใ‘ใฉใ€ใใ“ใงใฎใƒˆใƒฌใƒณใƒ‰ใซ่จ€ๅŠใ—ใฆใ„ใ‚‹ใƒใ‚นใƒˆใ‚’ใฟใฆใ‚‚ใ€ๅ…จ็„ถใใฎ่ฉฑ้กŒใ‚’่‡ชๅˆ†ใŒ็›ฎใซใ—ใฆใ„ใชใ„ใ“ใจใจใ€ๅ…จ็„ถ่‡ชๅˆ†ใŒ็›ฎใซใ—ใŸใ„ใ‚ฟใ‚คใƒ—ใฎ่ฉฑ้กŒใงใฏใชใ„ใ“ใจใซใ€ๅˆฅไธ–็•Œๆ„Ÿใ‚’ๆ„Ÿใ˜ใฆใ„ใ‚‹

@HolosSocial@mastodon.social

isn't bringing something new to the , especially not to . It builds on what exists, without mimicking any platform.
Every social network has been given its fediverse clone. Asking people to hold a separate account on each is taking the problem backwards.
If the fediverse keeps mirroring the GAFAM, it loses. The point was never to rebuild their world, but to offer something else: one identity across every content.
HolosSocial is simply a try. But we can do it.

@df@s.dfaria.eu

is a lightweight server you can install by just copying files over FTP to a shared host. No PostgreSQL, no workers, no DevOps. Owning your data with can be much simpler than with . Have you tried it?
https://github.com/dfaria-eu/Starling

github.com

GitHub - dfaria-eu/Starling: Lightweight ActivityPub for small and independent servers.

Lightweight ActivityPub for small and independent servers. - dfaria-eu/Starling

@silverpill@mitra.social

FEP-fe34 (Origin-based security model) update : https://codeberg.org/fediverse/fep/pulls/849

I tried to better explain the assumptions on which the model is based, and clarified how exactly origins should enforce boundaries between actors:

Servers MUST ensure that activities published by a client do not represent unauthorized actions. This includes activities embedded within other activities and objects.

Servers MUST NOT allow clients to publish activities where embedded objects are owned by another actor local actor.

Lemmy API and Mastodon API implementers don't have to worry about this, but one needs to be very careful when accepting arbitrary payloads from clients, for example, when implementing ActivityPub C2S API or FEP-ae97 API. Unfortunately, these security issues are completely ignored by people who push for wide deployment of ActivityPub C2S API.

Another addition is the recommendation to not use partially embedded objects, because that might lead to cache poisoning:

Embedded non-anonymous objects SHOULD NOT be partial representations. A server that relies on embedding for authentication might save a partial representation of an object to the cache, replacing the full object.

(see this issue for details: https://codeberg.org/silverpill/feps/issues/21)

#fep_fe34 #activitypub

mitra.social

Mitra - Federated social network

Federated social network

@silverpill@mitra.social

FEP-fe34 (Origin-based security model) update : https://codeberg.org/fediverse/fep/pulls/849

I tried to better explain the assumptions on which the model is based, and clarified how exactly origins should enforce boundaries between actors:

Servers MUST ensure that activities published by a client do not represent unauthorized actions. This includes activities embedded within other activities and objects.

Servers MUST NOT allow clients to publish activities where embedded objects are owned by another actor local actor.

Lemmy API and Mastodon API implementers don't have to worry about this, but one needs to be very careful when accepting arbitrary payloads from clients, for example, when implementing ActivityPub C2S API or FEP-ae97 API. Unfortunately, these security issues are completely ignored by people who push for wide deployment of ActivityPub C2S API.

Another addition is the recommendation to not use partially embedded objects, because that might lead to cache poisoning:

Embedded non-anonymous objects SHOULD NOT be partial representations. A server that relies on embedding for authentication might save a partial representation of an object to the cache, replacing the full object.

(see this issue for details: https://codeberg.org/silverpill/feps/issues/21)

#fep_fe34 #activitypub

mitra.social

Mitra - Federated social network

Federated social network

@silverpill@mitra.social

FEP-fe34 (Origin-based security model) update : https://codeberg.org/fediverse/fep/pulls/849

I tried to better explain the assumptions on which the model is based, and clarified how exactly origins should enforce boundaries between actors:

Servers MUST ensure that activities published by a client do not represent unauthorized actions. This includes activities embedded within other activities and objects.

Servers MUST NOT allow clients to publish activities where embedded objects are owned by another actor local actor.

Lemmy API and Mastodon API implementers don't have to worry about this, but one needs to be very careful when accepting arbitrary payloads from clients, for example, when implementing ActivityPub C2S API or FEP-ae97 API. Unfortunately, these security issues are completely ignored by people who push for wide deployment of ActivityPub C2S API.

Another addition is the recommendation to not use partially embedded objects, because that might lead to cache poisoning:

Embedded non-anonymous objects SHOULD NOT be partial representations. A server that relies on embedding for authentication might save a partial representation of an object to the cache, replacing the full object.

(see this issue for details: https://codeberg.org/silverpill/feps/issues/21)

#fep_fe34 #activitypub

mitra.social

Mitra - Federated social network

Federated social network

@df@s.dfaria.eu

is a lightweight server you can install by just copying files over FTP to a shared host. No PostgreSQL, no workers, no DevOps. Owning your data with can be much simpler than with . Have you tried it?
https://github.com/dfaria-eu/Starling

github.com

GitHub - dfaria-eu/Starling: Lightweight ActivityPub for small and independent servers.

Lightweight ActivityPub for small and independent servers. - dfaria-eu/Starling

@df@s.dfaria.eu

is a lightweight server you can install by just copying files over FTP to a shared host. No PostgreSQL, no workers, no DevOps. Owning your data with can be much simpler than with . Have you tried it?
https://github.com/dfaria-eu/Starling

github.com

GitHub - dfaria-eu/Starling: Lightweight ActivityPub for small and independent servers.

Lightweight ActivityPub for small and independent servers. - dfaria-eu/Starling

@robin@riley.pub

Great read by @laurenshof on the many parallel efforts to bolt private interaction onto public-by-default protocols:

"Each ends up with bounded spaces, explicit membership, persistent state, and access decisions at the boundary. This is roughly ... what Matrix has been building ... weโ€™re doing carcinization for protocols."

connectedplaces.online/reports

connectedplaces.online

FR#163 โ€“ Decrypting Matrix

On the convergence towards private data on social networking protocols, and the connection to Matrix

@weekinfediverse@mitra.social
@prometheus@pmth.us

relay.pmth.us is live and open. Any ActivityPub instance (Misskey, Mastodon, Pleroma, Akkoma, GoToSocial, others) can subscribe with no pre-approval and start pulling our timeline. Three days in: blocklist is public, shota.house and lolicon.monster blocked on day one, every cartoon-CSAM instance we encounter goes the same way. If you self-host and want denser federation, point your relay subscription at https://relay.pmth.us .

relay.pmth.us

relay.pmth.us | ActivityPub Relay

@robin@riley.pub

Great read by @laurenshof on the many parallel efforts to bolt private interaction onto public-by-default protocols:

"Each ends up with bounded spaces, explicit membership, persistent state, and access decisions at the boundary. This is roughly ... what Matrix has been building ... weโ€™re doing carcinization for protocols."

connectedplaces.online/reports

connectedplaces.online

FR#163 โ€“ Decrypting Matrix

On the convergence towards private data on social networking protocols, and the connection to Matrix

@weekinfediverse@mitra.social
@robin@riley.pub

Great read by @laurenshof on the many parallel efforts to bolt private interaction onto public-by-default protocols:

"Each ends up with bounded spaces, explicit membership, persistent state, and access decisions at the boundary. This is roughly ... what Matrix has been building ... weโ€™re doing carcinization for protocols."

connectedplaces.online/reports

connectedplaces.online

FR#163 โ€“ Decrypting Matrix

On the convergence towards private data on social networking protocols, and the connection to Matrix

@weekinfediverse@mitra.social
@weekinfediverse@mitra.social
@weekinfediverse@mitra.social
@weekinfediverse@mitra.social
@SymfonyStation@drupal.community
@SymfonyStation@drupal.community
@berlinfediday@berlin.social ยท Reply to Berliner Fediverse Tag

In diesem Jahr steht der Sonntag ganz im Zeichen der Developerโ€‘Communityโ€ฏโ€“ mit Sessions zu und โ€ฏProtocol sowie viel Raum fรผr technische und kreative Zusammenarbeit.

๐Ÿ‘‰ Hast du ein spannendes Projekt, Tool, Forschungsthema oder kรผnstlerisches Format zum Fediverse?
Dann reiche jetzt deinen Beitrag ein und gestalte mit uns die Zukunft des offenen Webs:
๐Ÿ”— ctalx.c-base.org/fediday-2026/

Berlin Dayโ€ฏ2026 โ€“ Celebrate openness. Connect the community. Shape the future together.

ctalx.c-base.org

FediDay 2026

Schedule, talks and talk submissions for FediDay 2026

Like the previous article on Grassroots fediverse evolution, this is a long blog post, so I provided an article summary to be TL;DR'ed ๐Ÿ˜Š

Article summary:

- We cocreate our future together, yet our rushed modern society holds us back from contributing where it matters most.
- The Paradox of emergence stands in the way of seeing how our two cents of investment contributes to solving wicked problems.
- FOSS and fediverse projects must be more holistically considered to anticipate and address likely huge negative outcomes in-the-large.
- Fediverse is the ideal diverse environment where people can further their own dreams in concert with others, and follow shared vision.
- For fediverse to become the Future of Social networking we must overcome the fragmentation and division caused by specialization.
- Hedonic peer production provides the means to do so, based on the SEE model for Sustainable ecosystem evolution (see diagram above).
- We must foster our ability to truly listen to others, to be able to fight the root cause of Hypercapitalism at inter-personal relationship level.
- Cross-pollination enables knowledge brokering and innovation based on individual needs, assets we can provide, shared values we hold dear.
- To give shape to Hedonic peer production on the social web, SX defines โ€œJoyful creationโ€, a formula and vision for inclusive cocreation.
- Sustainable ecosystem evolution aims for the emergence of a commons based value economy where participants exchange services.
- Purposeful social networking that induces prosocial behavior is key to the transition from an attention to an online Intention economy.
ALT text

Article summary: - We cocreate our future together, yet our rushed modern society holds us back from contributing where it matters most. - The Paradox of emergence stands in the way of seeing how our two cents of investment contributes to solving wicked problems. - FOSS and fediverse projects must be more holistically considered to anticipate and address likely huge negative outcomes in-the-large. - Fediverse is the ideal diverse environment where people can further their own dreams in concert with others, and follow shared vision. - For fediverse to become the Future of Social networking we must overcome the fragmentation and division caused by specialization. - Hedonic peer production provides the means to do so, based on the SEE model for Sustainable ecosystem evolution (see diagram above). - We must foster our ability to truly listen to others, to be able to fight the root cause of Hypercapitalism at inter-personal relationship level. - Cross-pollination enables knowledge brokering and innovation based on individual needs, assets we can provide, shared values we hold dear. - To give shape to Hedonic peer production on the social web, SX defines โ€œJoyful creationโ€, a formula and vision for inclusive cocreation. - Sustainable ecosystem evolution aims for the emergence of a commons based value economy where participants exchange services. - Purposeful social networking that induces prosocial behavior is key to the transition from an attention to an online Intention economy.

@berlinfediday@berlin.social ยท Reply to Berliner Fediverse Tag

This year, Sunday will be dedicated entirely to the developer community โ€“ with sessions on and โ€ฏProtocol, and plenty of space for technical and creative collaboration.

๐Ÿ‘‰ Do you have an exciting project, tool, research topic, or artistic format related to the Fediverse?
Then submit your proposal now and help us shape the future of the open web:
๐Ÿ”— ctalx.c-base.org/fediday-2026/

Berlinโ€ฏโ€ฏDayโ€ฏ2026 โ€“ Celebrate openness. Connect the community. Shape the future together.

ctalx.c-base.org

FediDay 2026

Schedule, talks and talk submissions for FediDay 2026

@berlinfediday@berlin.social ยท Reply to Berliner Fediverse Tag

This year, Sunday will be dedicated entirely to the developer community โ€“ with sessions on and โ€ฏProtocol, and plenty of space for technical and creative collaboration.

๐Ÿ‘‰ Do you have an exciting project, tool, research topic, or artistic format related to the Fediverse?
Then submit your proposal now and help us shape the future of the open web:
๐Ÿ”— ctalx.c-base.org/fediday-2026/

Berlinโ€ฏโ€ฏDayโ€ฏ2026 โ€“ Celebrate openness. Connect the community. Shape the future together.

ctalx.c-base.org

FediDay 2026

Schedule, talks and talk submissions for FediDay 2026

@smallcircles@social.coop

Fedizens, we dream! โœŠ

But what do we dream about? How do our dreams relate, where do they overlap? Might we realize them together? Turn our online places into a delightful commons of cross-pollination and cocreation? How can we make progress towards forging a better world together, and sustain that progress? Can we turn our collaborative efforts into much more than the sum of their constituent parts, and move on shared vision into a brighter future together?

Questions, questions.

In my previous blog post on Shared responsible ownership I claimed that a commons can be ๐Ÿ”ฅ ignited, and become unstoppable as it realizes positive societal impact. Able to withstand the corrosive forces of Hypercapitalism that seek to corrupt it.

Revolutionary evolution is possible! โœŠ

is the perfect environment to make this happen. We laid the foundations already. We have soil, so now we can blossom. ๐ŸŒป

Fedizens, let's dream! โœŠ

coding.social/blog/fediverse-o

coding.social

Fediverse of dreams

Social coding helps overcome the Paradox of Emergence, which entails that without following our dreams, we are unable to pursue a shared vision.

@surf@flipboard.social
@surf@flipboard.social
@yehor@mastodon.glitchy.social

is a very nice project, but it is currently too raw to use. The last two releases just broke everything, and even a clean setup doesn't help. I'll follow the repository, but shut down my instance for now.

github.com/open-wanderer/wande

github.com

GitHub - open-wanderer/wanderer: wanderer is a self-hosted trail database. Save your adventures!

wanderer is a self-hosted trail database. Save your adventures! - open-wanderer/wanderer

@Linux@ohai.social

๐Ÿšจ Mastodon 4.6.x Nightly update notice!

As you may know, Mastodon 4.5.10 includes some important security updates. However, some of you are still running an earlier Mastodon Nightly build from before those updates were applied.

You should be running at minimum:

4.6.0-nightly.2026-05-21-security

If you're using Mastodon+Glitch, you should be running at minimum:

v4.6.0-alpha.8+glitch

ohai.social

Linux Is Best (@Linux@ohai.social)

In a few days โ€” perhaps in about a week โ€” youโ€™ll hear how all these Mastodon sites were hacked. Why? Because they didnโ€™t update. Some of you are running copies of Mastodon from two years ago or more, and youโ€™ll still wonder why. ๐Ÿคฆ #Mastodon #Fediverse #ActivityPub

@Linux@ohai.social

In a few days โ€” perhaps in about a week โ€” youโ€™ll hear how all these Mastodon sites were hacked.

Why?

Because they didnโ€™t update.

Some of you are running copies of Mastodon from two years ago or more, and youโ€™ll still wonder why. ๐Ÿคฆ

@Linux@ohai.social

๐Ÿšจ Mastodon 4.6.x Nightly update notice!

As you may know, Mastodon 4.5.10 includes some important security updates. However, some of you are still running an earlier Mastodon Nightly build from before those updates were applied.

You should be running at minimum:

4.6.0-nightly.2026-05-21-security

If you're using Mastodon+Glitch, you should be running at minimum:

v4.6.0-alpha.8+glitch

ohai.social

Linux Is Best (@Linux@ohai.social)

In a few days โ€” perhaps in about a week โ€” youโ€™ll hear how all these Mastodon sites were hacked. Why? Because they didnโ€™t update. Some of you are running copies of Mastodon from two years ago or more, and youโ€™ll still wonder why. ๐Ÿคฆ #Mastodon #Fediverse #ActivityPub

@Linux@ohai.social

In a few days โ€” perhaps in about a week โ€” youโ€™ll hear how all these Mastodon sites were hacked.

Why?

Because they didnโ€™t update.

Some of you are running copies of Mastodon from two years ago or more, and youโ€™ll still wonder why. ๐Ÿคฆ

@SymfonyStation@drupal.community
@toddsundsted@epiktistes.com

Release v3.3.9 of Ktistec continues the security hardening work from recent releases, with further progress on the Mastodon-compatible API.

Of note: all network connections now go through a new Ktistec::Network module. This allows Ktistec to limit the size of HTTP bodies it reads, on both inbound and outbound requests, and ensures it only opens connections to valid remote IP addresses.

Here's the full changelog:

Added

  • New Mastodon-compatible APIs.

Fixed

  • Close DNS rebinding window for outbound HTTP requests.
  • Limit the size of HTTP bodies the server reads.
  • Sanitize RSS feed output to prevent CDATA breakout.
  • Destroy all sessions and access tokens on account termination.

Changed

  • Ensure all GET and POST requests utilize Ktistec::Network.
  • Process local recipients in-process in inbox/outbox activity processors.

As always, it's worth upgrading for the security fixes!

github.com

Comparing d73c518c...5cd1c665 ยท toddsundsted/ktistec

ActivityPub (https://www.w3.org/TR/activitypub/) server for individual users and small groups. - Comparing d73c518c...5cd1c665 ยท toddsundsted/ktistec

@yehor@mastodon.glitchy.social

is a very nice project, but it is currently too raw to use. The last two releases just broke everything, and even a clean setup doesn't help. I'll follow the repository, but shut down my instance for now.

github.com/open-wanderer/wande

github.com

GitHub - open-wanderer/wanderer: wanderer is a self-hosted trail database. Save your adventures!

wanderer is a self-hosted trail database. Save your adventures! - open-wanderer/wanderer

@bartknubben@mastodon.nl

Was erg leuk om gisteren samen met @DesireeBCG deze workshop "Open tech voor digitale soevereiniteit" aan ICT-studenten van de te geven.

We gingen in vogelvlucht van de Franse revolutie tot aan en , en van het Vrijheidsbeeld tot aan en . Ook vertelden we over het "Digital Autonomy Assessment Framework" van de Universiteit Utrecht.

Veel goeie energie en scherpe reflecties van de studenten!

๐Ÿงต 1/2

mastodon.nl

jorisgresnigt (@jorisgresnigt@mastodon.nl)

Attached: 1 image Digitale souvereiniteit in het hart van ons ICT curriculum? Gisteren hadden we een zeer inspirende workshop van mijn oud-collega's Dรฉsirรฉe Castillo Gosker en Bart Knubben over het waarom en hoe van digitale souvereiniteit door Open Technologie bij het Business gilde van Open ICT met daarbij verschillende collega's van andere richtingen en enthousiaste eerstejaar die vrijwillig aanhaakten.

@jorisgresnigt@mastodon.nl

Digitale souvereiniteit in het hart van ons ICT curriculum? Gisteren hadden we een zeer inspirende workshop van mijn oud-collega's Dรฉsirรฉe Castillo Gosker en Bart Knubben over het waarom en hoe van digitale souvereiniteit door Open Technologie bij het Business gilde van Open ICT met daarbij verschillende collega's van andere richtingen en enthousiaste eerstejaar die vrijwillig aanhaakten.

franse revolutie
ALT text

franse revolutie

@bartknubben@mastodon.nl

Was erg leuk om gisteren samen met @DesireeBCG deze workshop "Open tech voor digitale soevereiniteit" aan ICT-studenten van de te geven.

We gingen in vogelvlucht van de Franse revolutie tot aan en , en van het Vrijheidsbeeld tot aan en . Ook vertelden we over het "Digital Autonomy Assessment Framework" van de Universiteit Utrecht.

Veel goeie energie en scherpe reflecties van de studenten!

๐Ÿงต 1/2

mastodon.nl

jorisgresnigt (@jorisgresnigt@mastodon.nl)

Attached: 1 image Digitale souvereiniteit in het hart van ons ICT curriculum? Gisteren hadden we een zeer inspirende workshop van mijn oud-collega's Dรฉsirรฉe Castillo Gosker en Bart Knubben over het waarom en hoe van digitale souvereiniteit door Open Technologie bij het Business gilde van Open ICT met daarbij verschillende collega's van andere richtingen en enthousiaste eerstejaar die vrijwillig aanhaakten.

@jorisgresnigt@mastodon.nl

Digitale souvereiniteit in het hart van ons ICT curriculum? Gisteren hadden we een zeer inspirende workshop van mijn oud-collega's Dรฉsirรฉe Castillo Gosker en Bart Knubben over het waarom en hoe van digitale souvereiniteit door Open Technologie bij het Business gilde van Open ICT met daarbij verschillende collega's van andere richtingen en enthousiaste eerstejaar die vrijwillig aanhaakten.

franse revolutie
ALT text

franse revolutie

@toddsundsted@epiktistes.com

Release v3.3.9 of Ktistec continues the security hardening work from recent releases, with further progress on the Mastodon-compatible API.

Of note: all network connections now go through a new Ktistec::Network module. This allows Ktistec to limit the size of HTTP bodies it reads, on both inbound and outbound requests, and ensures it only opens connections to valid remote IP addresses.

Here's the full changelog:

Added

  • New Mastodon-compatible APIs.

Fixed

  • Close DNS rebinding window for outbound HTTP requests.
  • Limit the size of HTTP bodies the server reads.
  • Sanitize RSS feed output to prevent CDATA breakout.
  • Destroy all sessions and access tokens on account termination.

Changed

  • Ensure all GET and POST requests utilize Ktistec::Network.
  • Process local recipients in-process in inbox/outbox activity processors.

As always, it's worth upgrading for the security fixes!

github.com

Comparing d73c518c...5cd1c665 ยท toddsundsted/ktistec

ActivityPub (https://www.w3.org/TR/activitypub/) server for individual users and small groups. - Comparing d73c518c...5cd1c665 ยท toddsundsted/ktistec

@SymfonyStation@drupal.community
@SymfonyStation@drupal.community
@toddsundsted@epiktistes.com

Release v3.3.9 of Ktistec continues the security hardening work from recent releases, with further progress on the Mastodon-compatible API.

Of note: all network connections now go through a new Ktistec::Network module. This allows Ktistec to limit the size of HTTP bodies it reads, on both inbound and outbound requests, and ensures it only opens connections to valid remote IP addresses.

Here's the full changelog:

Added

  • New Mastodon-compatible APIs.

Fixed

  • Close DNS rebinding window for outbound HTTP requests.
  • Limit the size of HTTP bodies the server reads.
  • Sanitize RSS feed output to prevent CDATA breakout.
  • Destroy all sessions and access tokens on account termination.

Changed

  • Ensure all GET and POST requests utilize Ktistec::Network.
  • Process local recipients in-process in inbox/outbox activity processors.

As always, it's worth upgrading for the security fixes!

github.com

Comparing d73c518c...5cd1c665 ยท toddsundsted/ktistec

ActivityPub (https://www.w3.org/TR/activitypub/) server for individual users and small groups. - Comparing d73c518c...5cd1c665 ยท toddsundsted/ktistec

@Linux@ohai.social

In a few days โ€” perhaps in about a week โ€” youโ€™ll hear how all these Mastodon sites were hacked.

Why?

Because they didnโ€™t update.

Some of you are running copies of Mastodon from two years ago or more, and youโ€™ll still wonder why. ๐Ÿคฆ

@box464@mastodon.social

My Hollo instance has been updated to 0.9.1 if you wanna take a peek. It's shaking off the early UI look and feel for something more professional.

A lot of extra configurations that I didn't have time to review or enable, but some of it looks interesting, like more efficient handling of remote media.

hollo.box464.social/@hollo464

hollo.box464.social

Hollo There

A weekend fiddler of all things fediverse.

Here is my work-in-progress FEP for using JSON Resume with ActivityPub:

FEP-6158: ActivityPub 'Resume' Object: JSON Resume expressed as JSON-LD

codeberg.org/reiver/fep/src/br

I prefer to write for clarity, so it still needs work.

codeberg.org

Cookie monster!

@pepecyb@hub.hubzilla.hu
Dreiecksbeziehungen... oder: Wie sich Grid-only-Kanรคle verhalten Angenommen, ich betreibe einen Grid-only-Kanal (GoK), also einen Kanal, bei welchem bewusst das ActivityPub Protokoll (AP) nicht aktiviert ist. Und nun postet eine der Verbindungen (natรผrlich ein Hubzilla-Kanal, denn nur mit denen kann man ja verbunden sein) einen Beitrag. Die Verbindung ist aber ein Fediverse-Kanal, hat also das ActivityPub Protokoll aktiviert und selbst auch Verbindungen zu ActivityPub Accounts...

Dreiecksbeziehungen... oder: Wie sich Grid-only-Kanรคle verhalten


Angenommen, ich betreibe einen Grid-only-Kanal (GoK), also einen Kanal, bei welchem bewusst das ActivityPub Protokoll (AP) nicht aktiviert ist. Und nun postet eine der Verbindungen (natรผrlich ein Hubzilla-Kanal, denn nur mit denen kann man ja verbunden sein) einen Beitrag. Die Verbindung ist aber ein Fediverse-Kanal, hat also das ActivityPub Protokoll aktiviert und selbst auch Verbindungen zu ActivityPub Accounts.

Vรถllig klar: Das Posting der Verbindung landet nun auch im Stream meines GoK.

Aber wie ist es, wenn eine Verbindung des Fediverse-Kanals, z.B. ein Mastodon-Nutzer auf das Posting antwortet? Sehe ich diesen Kommentar, obwohl mein GoK ja gar kein AP kann? Und kann ich, falls dieser AP-Kommentar in meinem Stream antwortet, selbst auch auf diesen Kommentar antworten? Und schlieรŸlich: Wenn das auch geht, wer sieht dann meinen Kommentar auf die AP-Antwort?

Nun, die Frage konnte ich auch nicht aus der Hรผfte raus beantworten. Mir ist das noch nicht untergekommen, weil meine einzigen GoK halt ausschlieรŸlich nicht-รถffentliche Foren-Kanรคle sind und dort solche Ereignisse nicht vorkommen.

Also habe ich mit einem eigens erstellten Kanal Grid-Only, der ein GoK ist, ein entsprechendes Experiment durchgefรผhrt. Und es lieรŸ sich folgendes Verhalten feststellen:

Ist ein GoK mit einem Hubzilla-Kanal verbunden, welcher auch AP aktiviert hat (Fediverse-Kanal), erscheinen selbstverstรคndlich Posting des Fediverse-Kanals auch im Stream des GoK.

Kommentiert nun ein fremder Account eines Fediverse-Dienstes dieses Posting, dann erscheint der Kommentar auch im Thread zum Ausgangsposting beim GoK. Der Inhaber des GoK kann also AP-Beitrรคge sehen, obwohl er gar kein AP unterstรผtzt.

Der GoK kann sogar die im Thread nun angezeigte Antwort des AP-Accounts selbst kommentieren.

Dieser Kommentar erscheint -- logisch -- im Thread im Stream des GoK und -- ebenfalls logisch -- auch im Stream des Fediverse-Kanals (also des Verfassers des Ausgangs-Postings) als Antwort auf den AP-Kommentar.

Aber: Die Antwort des GoK auf den AP-Kommentar erscheint NICHT in der Timeline des AP-Accounts.

Also auf den Punkt gebracht:

Grid-only-Hubzilla-Kanรคle finden in ihrem Stream durchaus auch Inhalte, die von ActivityPub-Diensten stammen, sofern eine ihrer Hubzilla-Verbindungen AP erlaubt und selbst einen Kommentar von einem AP-Dienst empfรคngt.

Solche Antworten aus dem Fediverse sind fรผr den GoK nicht nur im Stream sichtbar, sie kรถnnen durch den GoK sogar kommentiert werden. Diesen Kommentar eines bekommt aber nur der verbundene Hubzilla-Kanal zu Gesicht, nicht aber der AP-Account, dessen Antwort im Thread kommentiert wurde. Kommentare des GoK auf das Ausgangsposting sind hingegen auch fรผr den AP-Account sichtbar. Also: Kommentare eines GoK sieht der AP-Account, Antworten eines GoK auf Kommentare eines AP-Accounts sieht der AP-Account nicht.

Alle Klarheiten beseitigt? ๐Ÿ˜


PERMALINK

#hubzilla #grid #activitypub



---
Member of the Hubzilla Association
Image/photo
@Linux@ohai.social

In a few days โ€” perhaps in about a week โ€” youโ€™ll hear how all these Mastodon sites were hacked.

Why?

Because they didnโ€™t update.

Some of you are running copies of Mastodon from two years ago or more, and youโ€™ll still wonder why. ๐Ÿคฆ

@naferrell@social.emucafe.org ยท Reply to ActivityPub for WordPress

I use the ActivityPub for WordPress plugin here on ECS (follow me from Masotdon or similar at @naferrell@social.emucafe.org). Because ActivityPub for WordPress is a key part of this project, I subscribe to the ActivityPub for WordPress blog with my feed reader. Thanks to my subscription, I was able to read ATmosphere 1.0.0 โ€” Liftoff. ATmosphere is a new WordPress plugin which integrates a Bluesky account with a WordPress website, such that โ€œ[w]hen you publish a post, ATmosphere shares it on Bluesky and stores the full article on your AT Protocol account as a structured record.โ€ Moreover, โ€œBluesky replies, likes, and reposts come back as comments on your WordPress post.โ€ I set up something similar by using Bridgy Fed to bridge my ECS ActivityPub account to Bluesky, but why not create a whole Bluesky account? I installed ATmosphere, set up a new Bluesky account (I have a โ€œpersonalโ€ account for sharing links but it goes mostly unused), and connected it with ATmosphere. Set-up went well. The only issue I had was that I had to manually create a .well-known directory to set up social.emucafe.org as the Bluesky account handle, but it is done โ€” so you can follow this site from Bluesky at social.emucafe.org. (I would offer some sort of guide, but the blog post and WordPress plugin page guides are the ones to follow.)

fed.brid.gy

Bridgy Fed

Bridgy Fed is a bridge between decentralized social networks like the fediverse, Bluesky, and web sites and blogs.

@box464@mastodon.social

My Hollo instance has been updated to 0.9.1 if you wanna take a peek. It's shaking off the early UI look and feel for something more professional.

A lot of extra configurations that I didn't have time to review or enable, but some of it looks interesting, like more efficient handling of remote media.

hollo.box464.social/@hollo464

hollo.box464.social

Hollo There

A weekend fiddler of all things fediverse.

@hollo@hollo.social

Hollo 0.9.0 is out. https://github.com/fedify-dev/hollo/discussions/496

The biggest change this release is a complete redesign of every server-rendered page. Pico CSS is replaced by a new design system built on UnoCSS, and your chosen theme color now tints your profile and dashboard pages throughout.

Other highlights:

  • Passkey (WebAuthn) authentication: sign in with a biometric or PIN gesture, which counts as MFA so there's no separate TOTP step
  • Full FEP-044f quote authorization: QuoteRequest/Accept/Reject federation, quote policy enforcement, and dereferenceable QuoteAuthorization objects
  • A configurable media proxy (MEDIA_PROXY=proxy or cache) that re-serves remote avatars, attachments, and preview images from Hollo's own origin
  • Optional split-domain WebFinger via HANDLE_HOST + WEB_ORIGIN
  • Public followers/following pages and per-post reaction list pages (likes, boosts, emoji reactions, quotes)

There were also several serious database performance fixes: profile page queries that were taking hundreds of seconds on cold caches, a NodeInfo endpoint doing a full table scan on every request, and a handful of timeline pagination bugs.

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below
ALT text

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button
ALT text

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button

@silverpill@mitra.social
@silverpill@mitra.social
@silverpill@mitra.social
@hollo@hollo.social

Hollo 0.9.0 is out. https://github.com/fedify-dev/hollo/discussions/496

The biggest change this release is a complete redesign of every server-rendered page. Pico CSS is replaced by a new design system built on UnoCSS, and your chosen theme color now tints your profile and dashboard pages throughout.

Other highlights:

  • Passkey (WebAuthn) authentication: sign in with a biometric or PIN gesture, which counts as MFA so there's no separate TOTP step
  • Full FEP-044f quote authorization: QuoteRequest/Accept/Reject federation, quote policy enforcement, and dereferenceable QuoteAuthorization objects
  • A configurable media proxy (MEDIA_PROXY=proxy or cache) that re-serves remote avatars, attachments, and preview images from Hollo's own origin
  • Optional split-domain WebFinger via HANDLE_HOST + WEB_ORIGIN
  • Public followers/following pages and per-post reaction list pages (likes, boosts, emoji reactions, quotes)

There were also several serious database performance fixes: profile page queries that were taking hundreds of seconds on cold caches, a NodeInfo endpoint doing a full table scan on every request, and a handful of timeline pagination bugs.

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below
ALT text

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button
ALT text

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button

Here is my work-in-progress FEP for using JSON Resume with ActivityPub:

FEP-6158: ActivityPub 'Resume' Object: JSON Resume expressed as JSON-LD

codeberg.org/reiver/fep/src/br

I prefer to write for clarity, so it still needs work.

codeberg.org

Cookie monster!

Here is my work-in-progress FEP for using JSON Resume with ActivityPub:

FEP-6158: ActivityPub 'Resume' Object: JSON Resume expressed as JSON-LD

codeberg.org/reiver/fep/src/br

I prefer to write for clarity, so it still needs work.

codeberg.org

Cookie monster!

Here is my work-in-progress FEP for using JSON Resume with ActivityPub:

FEP-6158: ActivityPub 'Resume' Object: JSON Resume expressed as JSON-LD

codeberg.org/reiver/fep/src/br

I prefer to write for clarity, so it still needs work.

codeberg.org

Cookie monster!

@hollo@hollo.social

Hollo 0.9.0 is out. https://github.com/fedify-dev/hollo/discussions/496

The biggest change this release is a complete redesign of every server-rendered page. Pico CSS is replaced by a new design system built on UnoCSS, and your chosen theme color now tints your profile and dashboard pages throughout.

Other highlights:

  • Passkey (WebAuthn) authentication: sign in with a biometric or PIN gesture, which counts as MFA so there's no separate TOTP step
  • Full FEP-044f quote authorization: QuoteRequest/Accept/Reject federation, quote policy enforcement, and dereferenceable QuoteAuthorization objects
  • A configurable media proxy (MEDIA_PROXY=proxy or cache) that re-serves remote avatars, attachments, and preview images from Hollo's own origin
  • Optional split-domain WebFinger via HANDLE_HOST + WEB_ORIGIN
  • Public followers/following pages and per-post reaction list pages (likes, boosts, emoji reactions, quotes)

There were also several serious database performance fixes: profile page queries that were taking hundreds of seconds on cold caches, a NodeInfo endpoint doing a full table scan on every request, and a handful of timeline pagination bugs.

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below
ALT text

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button
ALT text

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button

@box464@mastodon.social

@hollo releases a new major version update, 0.90. Too many changes to hit in a single post! Skimming, the most notable to users will be the switch from Pico CSS (my weekend hobbyist fave) to Uno CSS. At least in screenshots, the new UI is taking on a polished look.

Planning to upgrade, but need to review this a bit more before flipping the switch.

github.com/fedify-dev/hollo/di

github.com

Hollo 0.9.0: Redesigned UI, passkey authentication, FEP-044f quote authorization, and major performance improvements ยท fedify-dev/hollo ยท Discussion #496

Hollo is a single-user, headless ActivityPub server. It exposes a Mastodon-compatible API with no built-in frontend, so you can connect any Mastodon client of your choice. It's built on Fedify and ...

I may have written a JSON-LD schema for JSON Resume.

It is defined in terms of ActivityPub.
For example:

'Resume' is a sub-type of an ActivityPub 'Object'. There are some new fields defined. Etc.

...

Now the question is โ€” where do I put it?

Do I create a pull-request to the JSON Resume resume-schema repo?

Do I create a FEP?

Do I put it somewhere else?

I have deeply mixed feelings about 's adoption of JSON-LD, as someone who's spent way too long dealing with it while building .

Part of me wishes it had never happened. A lot of developers jump into ActivityPub development without really understanding JSON-LD, and honestly, can you blame them? The result is a growing number of implementations producing technically invalid JSON-LD. It works, sort of, because everyone's just pattern-matching against what Mastodon does, but it's not correct. And even developers who do take the time to understand JSON-LD often end up hardcoding their documents anyway, because proper JSON-LD processor libraries simply don't exist for many languages. No safety net, no validation, just vibes and hoping you got the @context right. Naturally, mistakes creep in.

But then the other part of me thinks: well, we're stuck with JSON-LD now. There's no going back. So wouldn't it be nice if people actually used it properly? Process the documents, normalize them, do the compaction and expansion dance the way the spec intended. That's what Fedify does.

Here's the part that really gets to me, though. Because Fedify actually processes JSON-LD correctly, it's more likely to break when talking to implementations that produce malformed documents. From the end user's perspective, Fedify looks like the fragile one. โ€œWhy can't I follow this person?โ€ Well, because their server is emitting garbage JSON-LD that happens to work with implementations that just treat it as a regular JSON blob. Every time I get one of these bug reports, I feel a certain injustice. Like being the only person in the group project who actually read the assignment.

To be fair, there are real practical reasons why most people don't bother with proper JSON-LD processing. Implementing a full processor is genuinely a lot of work. It leans on the entire Linked Data stack, which is bigger than most people expect going in. And the performance cost isn't trivial either. Fedify uses some tricks to keep things fast, and I'll be honest, that code isn't my proudest work.

Anyway, none of this is going anywhere. Just me grumbling into the void. If you're building an ActivityPub implementation, maybe consider using a JSON-LD processor if one's available for your language. And if you're not going to, at least test your output against implementations that do.

I have deeply mixed feelings about 's adoption of JSON-LD, as someone who's spent way too long dealing with it while building .

Part of me wishes it had never happened. A lot of developers jump into ActivityPub development without really understanding JSON-LD, and honestly, can you blame them? The result is a growing number of implementations producing technically invalid JSON-LD. It works, sort of, because everyone's just pattern-matching against what Mastodon does, but it's not correct. And even developers who do take the time to understand JSON-LD often end up hardcoding their documents anyway, because proper JSON-LD processor libraries simply don't exist for many languages. No safety net, no validation, just vibes and hoping you got the @context right. Naturally, mistakes creep in.

But then the other part of me thinks: well, we're stuck with JSON-LD now. There's no going back. So wouldn't it be nice if people actually used it properly? Process the documents, normalize them, do the compaction and expansion dance the way the spec intended. That's what Fedify does.

Here's the part that really gets to me, though. Because Fedify actually processes JSON-LD correctly, it's more likely to break when talking to implementations that produce malformed documents. From the end user's perspective, Fedify looks like the fragile one. โ€œWhy can't I follow this person?โ€ Well, because their server is emitting garbage JSON-LD that happens to work with implementations that just treat it as a regular JSON blob. Every time I get one of these bug reports, I feel a certain injustice. Like being the only person in the group project who actually read the assignment.

To be fair, there are real practical reasons why most people don't bother with proper JSON-LD processing. Implementing a full processor is genuinely a lot of work. It leans on the entire Linked Data stack, which is bigger than most people expect going in. And the performance cost isn't trivial either. Fedify uses some tricks to keep things fast, and I'll be honest, that code isn't my proudest work.

Anyway, none of this is going anywhere. Just me grumbling into the void. If you're building an ActivityPub implementation, maybe consider using a JSON-LD processor if one's available for your language. And if you're not going to, at least test your output against implementations that do.

I may have written a JSON-LD schema for JSON Resume.

It is defined in terms of ActivityPub.
For example:

'Resume' is a sub-type of an ActivityPub 'Object'. There are some new fields defined. Etc.

...

Now the question is โ€” where do I put it?

Do I create a pull-request to the JSON Resume resume-schema repo?

Do I create a FEP?

Do I put it somewhere else?

@hollo@hollo.social

Hollo 0.9.0 is out. https://github.com/fedify-dev/hollo/discussions/496

The biggest change this release is a complete redesign of every server-rendered page. Pico CSS is replaced by a new design system built on UnoCSS, and your chosen theme color now tints your profile and dashboard pages throughout.

Other highlights:

  • Passkey (WebAuthn) authentication: sign in with a biometric or PIN gesture, which counts as MFA so there's no separate TOTP step
  • Full FEP-044f quote authorization: QuoteRequest/Accept/Reject federation, quote policy enforcement, and dereferenceable QuoteAuthorization objects
  • A configurable media proxy (MEDIA_PROXY=proxy or cache) that re-serves remote avatars, attachments, and preview images from Hollo's own origin
  • Optional split-domain WebFinger via HANDLE_HOST + WEB_ORIGIN
  • Public followers/following pages and per-post reaction list pages (likes, boosts, emoji reactions, quotes)

There were also several serious database performance fixes: profile page queries that were taking hundreds of seconds on cold caches, a NodeInfo endpoint doing a full table scan on every request, and a handful of timeline pagination bugs.

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below
ALT text

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button
ALT text

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button

@hollo@hollo.social

Hollo 0.9.0 is out. https://github.com/fedify-dev/hollo/discussions/496

The biggest change this release is a complete redesign of every server-rendered page. Pico CSS is replaced by a new design system built on UnoCSS, and your chosen theme color now tints your profile and dashboard pages throughout.

Other highlights:

  • Passkey (WebAuthn) authentication: sign in with a biometric or PIN gesture, which counts as MFA so there's no separate TOTP step
  • Full FEP-044f quote authorization: QuoteRequest/Accept/Reject federation, quote policy enforcement, and dereferenceable QuoteAuthorization objects
  • A configurable media proxy (MEDIA_PROXY=proxy or cache) that re-serves remote avatars, attachments, and preview images from Hollo's own origin
  • Optional split-domain WebFinger via HANDLE_HOST + WEB_ORIGIN
  • Public followers/following pages and per-post reaction list pages (likes, boosts, emoji reactions, quotes)

There were also several serious database performance fixes: profile page queries that were taking hundreds of seconds on cold caches, a NodeInfo endpoint doing a full table scan on every request, and a handful of timeline pagination bugs.

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below
ALT text

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button
ALT text

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button

@hollo@hollo.social

Hollo 0.9.0 is out. https://github.com/fedify-dev/hollo/discussions/496

The biggest change this release is a complete redesign of every server-rendered page. Pico CSS is replaced by a new design system built on UnoCSS, and your chosen theme color now tints your profile and dashboard pages throughout.

Other highlights:

  • Passkey (WebAuthn) authentication: sign in with a biometric or PIN gesture, which counts as MFA so there's no separate TOTP step
  • Full FEP-044f quote authorization: QuoteRequest/Accept/Reject federation, quote policy enforcement, and dereferenceable QuoteAuthorization objects
  • A configurable media proxy (MEDIA_PROXY=proxy or cache) that re-serves remote avatars, attachments, and preview images from Hollo's own origin
  • Optional split-domain WebFinger via HANDLE_HOST + WEB_ORIGIN
  • Public followers/following pages and per-post reaction list pages (likes, boosts, emoji reactions, quotes)

There were also several serious database performance fixes: profile page queries that were taking hundreds of seconds on cold caches, a NodeInfo endpoint doing a full table scan on every request, and a handful of timeline pagination bugs.

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below
ALT text

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button
ALT text

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button

@hollo@hollo.social

Hollo 0.9.0 is out. https://github.com/fedify-dev/hollo/discussions/496

The biggest change this release is a complete redesign of every server-rendered page. Pico CSS is replaced by a new design system built on UnoCSS, and your chosen theme color now tints your profile and dashboard pages throughout.

Other highlights:

  • Passkey (WebAuthn) authentication: sign in with a biometric or PIN gesture, which counts as MFA so there's no separate TOTP step
  • Full FEP-044f quote authorization: QuoteRequest/Accept/Reject federation, quote policy enforcement, and dereferenceable QuoteAuthorization objects
  • A configurable media proxy (MEDIA_PROXY=proxy or cache) that re-serves remote avatars, attachments, and preview images from Hollo's own origin
  • Optional split-domain WebFinger via HANDLE_HOST + WEB_ORIGIN
  • Public followers/following pages and per-post reaction list pages (likes, boosts, emoji reactions, quotes)

There were also several serious database performance fixes: profile page queries that were taking hundreds of seconds on cold caches, a NodeInfo endpoint doing a full table scan on every request, and a handful of timeline pagination bugs.

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below
ALT text

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button
ALT text

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button

@hollo@hollo.social

Hollo 0.9.0 is out. https://github.com/fedify-dev/hollo/discussions/496

The biggest change this release is a complete redesign of every server-rendered page. Pico CSS is replaced by a new design system built on UnoCSS, and your chosen theme color now tints your profile and dashboard pages throughout.

Other highlights:

  • Passkey (WebAuthn) authentication: sign in with a biometric or PIN gesture, which counts as MFA so there's no separate TOTP step
  • Full FEP-044f quote authorization: QuoteRequest/Accept/Reject federation, quote policy enforcement, and dereferenceable QuoteAuthorization objects
  • A configurable media proxy (MEDIA_PROXY=proxy or cache) that re-serves remote avatars, attachments, and preview images from Hollo's own origin
  • Optional split-domain WebFinger via HANDLE_HOST + WEB_ORIGIN
  • Public followers/following pages and per-post reaction list pages (likes, boosts, emoji reactions, quotes)

There were also several serious database performance fixes: profile page queries that were taking hundreds of seconds on cold caches, a NodeInfo endpoint doing a full table scan on every request, and a handful of timeline pagination bugs.

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below
ALT text

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button
ALT text

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button

@box464@mastodon.social

@hollo releases a new major version update, 0.90. Too many changes to hit in a single post! Skimming, the most notable to users will be the switch from Pico CSS (my weekend hobbyist fave) to Uno CSS. At least in screenshots, the new UI is taking on a polished look.

Planning to upgrade, but need to review this a bit more before flipping the switch.

github.com/fedify-dev/hollo/di

github.com

Hollo 0.9.0: Redesigned UI, passkey authentication, FEP-044f quote authorization, and major performance improvements ยท fedify-dev/hollo ยท Discussion #496

Hollo is a single-user, headless ActivityPub server. It exposes a Mastodon-compatible API with no built-in frontend, so you can connect any Mastodon client of your choice. It's built on Fedify and ...

@hollo@hollo.social

Hollo 0.9.0 is out. https://github.com/fedify-dev/hollo/discussions/496

The biggest change this release is a complete redesign of every server-rendered page. Pico CSS is replaced by a new design system built on UnoCSS, and your chosen theme color now tints your profile and dashboard pages throughout.

Other highlights:

  • Passkey (WebAuthn) authentication: sign in with a biometric or PIN gesture, which counts as MFA so there's no separate TOTP step
  • Full FEP-044f quote authorization: QuoteRequest/Accept/Reject federation, quote policy enforcement, and dereferenceable QuoteAuthorization objects
  • A configurable media proxy (MEDIA_PROXY=proxy or cache) that re-serves remote avatars, attachments, and preview images from Hollo's own origin
  • Optional split-domain WebFinger via HANDLE_HOST + WEB_ORIGIN
  • Public followers/following pages and per-post reaction list pages (likes, boosts, emoji reactions, quotes)

There were also several serious database performance fixes: profile page queries that were taking hundreds of seconds on cold caches, a NodeInfo endpoint doing a full table scan on every request, and a handful of timeline pagination bugs.

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below
ALT text

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button
ALT text

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button

@box464@mastodon.social

@hollo releases a new major version update, 0.90. Too many changes to hit in a single post! Skimming, the most notable to users will be the switch from Pico CSS (my weekend hobbyist fave) to Uno CSS. At least in screenshots, the new UI is taking on a polished look.

Planning to upgrade, but need to review this a bit more before flipping the switch.

github.com/fedify-dev/hollo/di

github.com

Hollo 0.9.0: Redesigned UI, passkey authentication, FEP-044f quote authorization, and major performance improvements ยท fedify-dev/hollo ยท Discussion #496

Hollo is a single-user, headless ActivityPub server. It exposes a Mastodon-compatible API with no built-in frontend, so you can connect any Mastodon client of your choice. It's built on Fedify and ...

@box464@mastodon.social

@hollo releases a new major version update, 0.90. Too many changes to hit in a single post! Skimming, the most notable to users will be the switch from Pico CSS (my weekend hobbyist fave) to Uno CSS. At least in screenshots, the new UI is taking on a polished look.

Planning to upgrade, but need to review this a bit more before flipping the switch.

github.com/fedify-dev/hollo/di

github.com

Hollo 0.9.0: Redesigned UI, passkey authentication, FEP-044f quote authorization, and major performance improvements ยท fedify-dev/hollo ยท Discussion #496

Hollo is a single-user, headless ActivityPub server. It exposes a Mastodon-compatible API with no built-in frontend, so you can connect any Mastodon client of your choice. It's built on Fedify and ...

@hollo@hollo.social

Hollo 0.9.0 is out. https://github.com/fedify-dev/hollo/discussions/496

The biggest change this release is a complete redesign of every server-rendered page. Pico CSS is replaced by a new design system built on UnoCSS, and your chosen theme color now tints your profile and dashboard pages throughout.

Other highlights:

  • Passkey (WebAuthn) authentication: sign in with a biometric or PIN gesture, which counts as MFA so there's no separate TOTP step
  • Full FEP-044f quote authorization: QuoteRequest/Accept/Reject federation, quote policy enforcement, and dereferenceable QuoteAuthorization objects
  • A configurable media proxy (MEDIA_PROXY=proxy or cache) that re-serves remote avatars, attachments, and preview images from Hollo's own origin
  • Optional split-domain WebFinger via HANDLE_HOST + WEB_ORIGIN
  • Public followers/following pages and per-post reaction list pages (likes, boosts, emoji reactions, quotes)

There were also several serious database performance fixes: profile page queries that were taking hundreds of seconds on cold caches, a NodeInfo endpoint doing a full table scan on every request, and a handful of timeline pagination bugs.

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below
ALT text

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button
ALT text

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button

@box464@mastodon.social

@hollo releases a new major version update, 0.90. Too many changes to hit in a single post! Skimming, the most notable to users will be the switch from Pico CSS (my weekend hobbyist fave) to Uno CSS. At least in screenshots, the new UI is taking on a polished look.

Planning to upgrade, but need to review this a bit more before flipping the switch.

github.com/fedify-dev/hollo/di

github.com

Hollo 0.9.0: Redesigned UI, passkey authentication, FEP-044f quote authorization, and major performance improvements ยท fedify-dev/hollo ยท Discussion #496

Hollo is a single-user, headless ActivityPub server. It exposes a Mastodon-compatible API with no built-in frontend, so you can connect any Mastodon client of your choice. It's built on Fedify and ...

@hollo@hollo.social

Hollo 0.9.0 is out. https://github.com/fedify-dev/hollo/discussions/496

The biggest change this release is a complete redesign of every server-rendered page. Pico CSS is replaced by a new design system built on UnoCSS, and your chosen theme color now tints your profile and dashboard pages throughout.

Other highlights:

  • Passkey (WebAuthn) authentication: sign in with a biometric or PIN gesture, which counts as MFA so there's no separate TOTP step
  • Full FEP-044f quote authorization: QuoteRequest/Accept/Reject federation, quote policy enforcement, and dereferenceable QuoteAuthorization objects
  • A configurable media proxy (MEDIA_PROXY=proxy or cache) that re-serves remote avatars, attachments, and preview images from Hollo's own origin
  • Optional split-domain WebFinger via HANDLE_HOST + WEB_ORIGIN
  • Public followers/following pages and per-post reaction list pages (likes, boosts, emoji reactions, quotes)

There were also several serious database performance fixes: profile page queries that were taking hundreds of seconds on cold caches, a NodeInfo endpoint doing a full table scan on every request, and a handful of timeline pagination bugs.

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below
ALT text

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button
ALT text

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button

@hollo@hollo.social

Hollo 0.9.0 is out. https://github.com/fedify-dev/hollo/discussions/496

The biggest change this release is a complete redesign of every server-rendered page. Pico CSS is replaced by a new design system built on UnoCSS, and your chosen theme color now tints your profile and dashboard pages throughout.

Other highlights:

  • Passkey (WebAuthn) authentication: sign in with a biometric or PIN gesture, which counts as MFA so there's no separate TOTP step
  • Full FEP-044f quote authorization: QuoteRequest/Accept/Reject federation, quote policy enforcement, and dereferenceable QuoteAuthorization objects
  • A configurable media proxy (MEDIA_PROXY=proxy or cache) that re-serves remote avatars, attachments, and preview images from Hollo's own origin
  • Optional split-domain WebFinger via HANDLE_HOST + WEB_ORIGIN
  • Public followers/following pages and per-post reaction list pages (likes, boosts, emoji reactions, quotes)

There were also several serious database performance fixes: profile page queries that were taking hundreds of seconds on cold caches, a NodeInfo endpoint doing a full table scan on every request, and a handful of timeline pagination bugs.

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below
ALT text

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button
ALT text

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button

@hollo@hollo.social

Hollo 0.9.0 is out. https://github.com/fedify-dev/hollo/discussions/496

The biggest change this release is a complete redesign of every server-rendered page. Pico CSS is replaced by a new design system built on UnoCSS, and your chosen theme color now tints your profile and dashboard pages throughout.

Other highlights:

  • Passkey (WebAuthn) authentication: sign in with a biometric or PIN gesture, which counts as MFA so there's no separate TOTP step
  • Full FEP-044f quote authorization: QuoteRequest/Accept/Reject federation, quote policy enforcement, and dereferenceable QuoteAuthorization objects
  • A configurable media proxy (MEDIA_PROXY=proxy or cache) that re-serves remote avatars, attachments, and preview images from Hollo's own origin
  • Optional split-domain WebFinger via HANDLE_HOST + WEB_ORIGIN
  • Public followers/following pages and per-post reaction list pages (likes, boosts, emoji reactions, quotes)

There were also several serious database performance fixes: profile page queries that were taking hundreds of seconds on cold caches, a NodeInfo endpoint doing a full table scan on every request, and a handful of timeline pagination bugs.

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below
ALT text

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button
ALT text

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button

@hollo@hollo.social

Hollo 0.9.0 is out. https://github.com/fedify-dev/hollo/discussions/496

The biggest change this release is a complete redesign of every server-rendered page. Pico CSS is replaced by a new design system built on UnoCSS, and your chosen theme color now tints your profile and dashboard pages throughout.

Other highlights:

  • Passkey (WebAuthn) authentication: sign in with a biometric or PIN gesture, which counts as MFA so there's no separate TOTP step
  • Full FEP-044f quote authorization: QuoteRequest/Accept/Reject federation, quote policy enforcement, and dereferenceable QuoteAuthorization objects
  • A configurable media proxy (MEDIA_PROXY=proxy or cache) that re-serves remote avatars, attachments, and preview images from Hollo's own origin
  • Optional split-domain WebFinger via HANDLE_HOST + WEB_ORIGIN
  • Public followers/following pages and per-post reaction list pages (likes, boosts, emoji reactions, quotes)

There were also several serious database performance fixes: profile page queries that were taking hundreds of seconds on cold caches, a NodeInfo endpoint doing a full table scan on every request, and a handful of timeline pagination bugs.

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below
ALT text

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button
ALT text

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button

@hollo@hollo.social

Hollo 0.9.0 is out. https://github.com/fedify-dev/hollo/discussions/496

The biggest change this release is a complete redesign of every server-rendered page. Pico CSS is replaced by a new design system built on UnoCSS, and your chosen theme color now tints your profile and dashboard pages throughout.

Other highlights:

  • Passkey (WebAuthn) authentication: sign in with a biometric or PIN gesture, which counts as MFA so there's no separate TOTP step
  • Full FEP-044f quote authorization: QuoteRequest/Accept/Reject federation, quote policy enforcement, and dereferenceable QuoteAuthorization objects
  • A configurable media proxy (MEDIA_PROXY=proxy or cache) that re-serves remote avatars, attachments, and preview images from Hollo's own origin
  • Optional split-domain WebFinger via HANDLE_HOST + WEB_ORIGIN
  • Public followers/following pages and per-post reaction list pages (likes, boosts, emoji reactions, quotes)

There were also several serious database performance fixes: profile page queries that were taking hundreds of seconds on cold caches, a NodeInfo endpoint doing a full table scan on every request, and a handful of timeline pagination bugs.

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below
ALT text

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button
ALT text

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button

@hollo@hollo.social

Hollo 0.9.0 is out. https://github.com/fedify-dev/hollo/discussions/496

The biggest change this release is a complete redesign of every server-rendered page. Pico CSS is replaced by a new design system built on UnoCSS, and your chosen theme color now tints your profile and dashboard pages throughout.

Other highlights:

  • Passkey (WebAuthn) authentication: sign in with a biometric or PIN gesture, which counts as MFA so there's no separate TOTP step
  • Full FEP-044f quote authorization: QuoteRequest/Accept/Reject federation, quote policy enforcement, and dereferenceable QuoteAuthorization objects
  • A configurable media proxy (MEDIA_PROXY=proxy or cache) that re-serves remote avatars, attachments, and preview images from Hollo's own origin
  • Optional split-domain WebFinger via HANDLE_HOST + WEB_ORIGIN
  • Public followers/following pages and per-post reaction list pages (likes, boosts, emoji reactions, quotes)

There were also several serious database performance fixes: profile page queries that were taking hundreds of seconds on cold caches, a NodeInfo endpoint doing a full table scan on every request, and a handful of timeline pagination bugs.

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below
ALT text

Public profile for ๆดช ๆฐ‘ๆ†™ (Hong Minhee) with a bookstore header image, circular avatar, follower and following counts, bio, custom fields including website and GitHub links, and a pinned post card below

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button
ALT text

The โ€œEdit @hongminheeโ€ admin page showing the new Hollo design: profile image upload areas for avatar and header, identity fields for display name and bio, custom fields table with label-value pairs, privacy checkboxes, a 20-swatch theme color picker with orange selected, and a โ€œSave changesโ€ button

@radwebhosting@mastodon.social

How to Host Your Own Server on a (5 Minute Quick-Start Guide)

This article provides a guide for how to host your own Mastodon server on a VPS.

Running your own Mastodon server on a VPS is an excellent way to enjoy an efficient and secure Mastodon experience.
What is Mastodon?
Mastodon is a social media platform that enables users to post ...
Continued ๐Ÿ‘‰ blog.radwebhosting.com/how-to-

@SymfonyStation@drupal.community
@SymfonyStation@drupal.community
@aoeuidhtns@app.wafrn.net ยท Reply to Nelson Lopez

@nelson@wetdry.world

mastodon,,, didn't invent activitypub???
and, guess what happens when you make your own bespoke protocol? nobody uses it! and what is needed for decentralization? for people to use your protocol!!!!!
and, wafrn, wafrn is aiming right at mastodon. it's just mastodon with doohickeys attached. activitypub can do more than that! i think.
better to extend an existing protocol and have some bugs, than make your own and have a complete failure to communicate!!


#activitypub

app.wafrn.net

Wafrn, the social media that respects you

Wafrn is a federated social media inspired by tumblr that connects with the fediverse and bluesky

@pepecyb@hub.hubzilla.hu
Dreiecksbeziehungen... oder: Wie sich Grid-only-Kanรคle verhalten Angenommen, ich betreibe einen Grid-only-Kanal (GoK), also einen Kanal, bei welchem bewusst das ActivityPub Protokoll (AP) nicht aktiviert ist. Und nun postet eine der Verbindungen (natรผrlich ein Hubzilla-Kanal, denn nur mit denen kann man ja verbunden sein) einen Beitrag. Die Verbindung ist aber ein Fediverse-Kanal, hat also das ActivityPub Protokoll aktiviert und selbst auch Verbindungen zu ActivityPub Accounts...

Dreiecksbeziehungen... oder: Wie sich Grid-only-Kanรคle verhalten


Angenommen, ich betreibe einen Grid-only-Kanal (GoK), also einen Kanal, bei welchem bewusst das ActivityPub Protokoll (AP) nicht aktiviert ist. Und nun postet eine der Verbindungen (natรผrlich ein Hubzilla-Kanal, denn nur mit denen kann man ja verbunden sein) einen Beitrag. Die Verbindung ist aber ein Fediverse-Kanal, hat also das ActivityPub Protokoll aktiviert und selbst auch Verbindungen zu ActivityPub Accounts.

Vรถllig klar: Das Posting der Verbindung landet nun auch im Stream meines GoK.

Aber wie ist es, wenn eine Verbindung des Fediverse-Kanals, z.B. ein Mastodon-Nutzer auf das Posting antwortet? Sehe ich diesen Kommentar, obwohl mein GoK ja gar kein AP kann? Und kann ich, falls dieser AP-Kommentar in meinem Stream antwortet, selbst auch auf diesen Kommentar antworten? Und schlieรŸlich: Wenn das auch geht, wer sieht dann meinen Kommentar auf die AP-Antwort?

Nun, die Frage konnte ich auch nicht aus der Hรผfte raus beantworten. Mir ist das noch nicht untergekommen, weil meine einzigen GoK halt ausschlieรŸlich nicht-รถffentliche Foren-Kanรคle sind und dort solche Ereignisse nicht vorkommen.

Also habe ich mit einem eigens erstellten Kanal Grid-Only, der ein GoK ist, ein entsprechendes Experiment durchgefรผhrt. Und es lieรŸ sich folgendes Verhalten feststellen:

Ist ein GoK mit einem Hubzilla-Kanal verbunden, welcher auch AP aktiviert hat (Fediverse-Kanal), erscheinen selbstverstรคndlich Posting des Fediverse-Kanals auch im Stream des GoK.

Kommentiert nun ein fremder Account eines Fediverse-Dienstes dieses Posting, dann erscheint der Kommentar auch im Thread zum Ausgangsposting beim GoK. Der Inhaber des GoK kann also AP-Beitrรคge sehen, obwohl er gar kein AP unterstรผtzt.

Der GoK kann sogar die im Thread nun angezeigte Antwort des AP-Accounts selbst kommentieren.

Dieser Kommentar erscheint -- logisch -- im Thread im Stream des GoK und -- ebenfalls logisch -- auch im Stream des Fediverse-Kanals (also des Verfassers des Ausgangs-Postings) als Antwort auf den AP-Kommentar.

Aber: Die Antwort des GoK auf den AP-Kommentar erscheint NICHT in der Timeline des AP-Accounts.

Also auf den Punkt gebracht:

Grid-only-Hubzilla-Kanรคle finden in ihrem Stream durchaus auch Inhalte, die von ActivityPub-Diensten stammen, sofern eine ihrer Hubzilla-Verbindungen AP erlaubt und selbst einen Kommentar von einem AP-Dienst empfรคngt.

Solche Antworten aus dem Fediverse sind fรผr den GoK nicht nur im Stream sichtbar, sie kรถnnen durch den GoK sogar kommentiert werden. Diesen Kommentar eines bekommt aber nur der verbundene Hubzilla-Kanal zu Gesicht, nicht aber der AP-Account, dessen Antwort im Thread kommentiert wurde. Kommentare des GoK auf das Ausgangsposting sind hingegen auch fรผr den AP-Account sichtbar. Also: Kommentare eines GoK sieht der AP-Account, Antworten eines GoK auf Kommentare eines AP-Accounts sieht der AP-Account nicht.

Alle Klarheiten beseitigt? ๐Ÿ˜


PERMALINK

#hubzilla #grid #activitypub



---
Member of the Hubzilla Association
Image/photo

My personal desire would be to create a format from scratch (because you are in control, you get something bespoke to your needs, and it is personally satisfying), but โ€”

I think there is probably an advantage to using something (such as JSON resume) that already has wide adoption.

I guess that makes me inclined towards the latter.

...

So, if I go that way, I would have to decide: plain JSON or JSON-LD.

@reiver@mastodon.social

More on a resume / CV on the Fediverse on Social Web.

Another option could be to use something like "JSON resume":

jsonresume.org/

github.com/jsonresume/resume-s

It seems to be popular.

It isn't JSON-LD. Although I think it would be straightforward to translate it to JSON-LD, if that was desired.

github.com

resume-schema/job-schema.json at master ยท jsonresume/resume-schema

JSON-Schema is used here to define and validate our proposed resume json - jsonresume/resume-schema

@reiver@mastodon.social

More on a resume / CV on the Fediverse on Social Web.

Another option could be to use something like "JSON resume":

jsonresume.org/

github.com/jsonresume/resume-s

It seems to be popular.

It isn't JSON-LD. Although I think it would be straightforward to translate it to JSON-LD, if that was desired.

github.com

resume-schema/job-schema.json at master ยท jsonresume/resume-schema

JSON-Schema is used here to define and validate our proposed resume json - jsonresume/resume-schema

@reiver@mastodon.social

On Tags (including Hash-Tags) in ActivityPub.

1/

I think new developers coming to ActivityPub want to write something like:

"tag": ["apple", "banana", "cherry"]

It is unfortunate that that isn't valid ActivityPub. But, that it must instead be:

"tag": [
{
"type": "Hashtag",
"name": "#apple"
},
{
"type": "Hashtag",
"name": "#banana"
},
{
"type": "Hashtag",
"name": "#cherry"
}
]

...

On Tags (including Hash-Tags) in ActivityPub.

2/

A new version of ActivityPub could extend the type of "tag" from:

Object | Link

to:

Object | Link | xsd:string

And that would make the following valid ActivityPub:

"tag": ["apple", "banana", "cherry"]

Of course, it would have to be specified how to interpret this. (Ex: as "type":"Hashtag", or whatever.)

@reiver@mastodon.social

On Tags (including Hash-Tags) in ActivityPub.

1/

I think new developers coming to ActivityPub want to write something like:

"tag": ["apple", "banana", "cherry"]

It is unfortunate that that isn't valid ActivityPub. But, that it must instead be:

"tag": [
{
"type": "Hashtag",
"name": "#apple"
},
{
"type": "Hashtag",
"name": "#banana"
},
{
"type": "Hashtag",
"name": "#cherry"
}
]

...

@nogajun@mastodon.social

XMPPใจActivityPubใจใฎใƒ–ใƒชใƒƒใ‚ธใ ใใ†ใ€‚XMPPใ‚‚ใƒกใƒƒใ‚ปใƒณใ‚ธใƒฃใƒผใƒ—ใƒญใƒˆใ‚ณใƒซใ‹ใ‚‰ใ„ใ‚ใ‚“ใชใ‚‚ใฎใซไผธใณใฆใ‚‹ใ‹ใ‚‰ใ€ใ“ใ†ใ„ใ†ใฎใฏใŠใ‚‚ใ—ใ‚ใ„ใญ

Barbapulpe/xmpp-ap-bridge: XMPP / ActivityPub Bridge to chat between XMPP and the Fediverse.: github.com/Barbapulpe/xmpp-ap-

github.com

GitHub - Barbapulpe/xmpp-ap-bridge: XMPP / ActivityPub Bridge to chat between XMPP and the Fediverse.

XMPP / ActivityPub Bridge to chat between XMPP and the Fediverse. - Barbapulpe/xmpp-ap-bridge

@nogajun@mastodon.social

XMPPใจActivityPubใจใฎใƒ–ใƒชใƒƒใ‚ธใ ใใ†ใ€‚XMPPใ‚‚ใƒกใƒƒใ‚ปใƒณใ‚ธใƒฃใƒผใƒ—ใƒญใƒˆใ‚ณใƒซใ‹ใ‚‰ใ„ใ‚ใ‚“ใชใ‚‚ใฎใซไผธใณใฆใ‚‹ใ‹ใ‚‰ใ€ใ“ใ†ใ„ใ†ใฎใฏใŠใ‚‚ใ—ใ‚ใ„ใญ

Barbapulpe/xmpp-ap-bridge: XMPP / ActivityPub Bridge to chat between XMPP and the Fediverse.: github.com/Barbapulpe/xmpp-ap-

github.com

GitHub - Barbapulpe/xmpp-ap-bridge: XMPP / ActivityPub Bridge to chat between XMPP and the Fediverse.

XMPP / ActivityPub Bridge to chat between XMPP and the Fediverse. - Barbapulpe/xmpp-ap-bridge

@nogajun@mastodon.social

XMPPใจActivityPubใจใฎใƒ–ใƒชใƒƒใ‚ธใ ใใ†ใ€‚XMPPใ‚‚ใƒกใƒƒใ‚ปใƒณใ‚ธใƒฃใƒผใƒ—ใƒญใƒˆใ‚ณใƒซใ‹ใ‚‰ใ„ใ‚ใ‚“ใชใ‚‚ใฎใซไผธใณใฆใ‚‹ใ‹ใ‚‰ใ€ใ“ใ†ใ„ใ†ใฎใฏใŠใ‚‚ใ—ใ‚ใ„ใญ

Barbapulpe/xmpp-ap-bridge: XMPP / ActivityPub Bridge to chat between XMPP and the Fediverse.: github.com/Barbapulpe/xmpp-ap-

github.com

GitHub - Barbapulpe/xmpp-ap-bridge: XMPP / ActivityPub Bridge to chat between XMPP and the Fediverse.

XMPP / ActivityPub Bridge to chat between XMPP and the Fediverse. - Barbapulpe/xmpp-ap-bridge

@klu9@ohai.social

Mastodon has changed the way it previews a linked NeoDB collection:
- before, the middle of the cover image & the title in large text
- now, like a quote post, with the poster's info & first few lines of small text. No title, no cover image.

As perhaps the only person regularly posting NeoDB collections on Mastodon (& someone who has changed the design of NeoDB collection cover images for better preview on Mastodon), I'm not sure I approve! ๐Ÿ˜…

Old-style Mastodon preview of NeoDB collection: central part of cover image, collection title.
ALT text

Old-style Mastodon preview of NeoDB collection: central part of cover image, collection title.

New-style preview by Mastodon of NeoDB collection: lots of text, no title or cover image
ALT text

New-style preview by Mastodon of NeoDB collection: lots of text, no title or cover image

@klu9@ohai.social

Mastodon has changed the way it previews a linked NeoDB collection:
- before, the middle of the cover image & the title in large text
- now, like a quote post, with the poster's info & first few lines of small text. No title, no cover image.

As perhaps the only person regularly posting NeoDB collections on Mastodon (& someone who has changed the design of NeoDB collection cover images for better preview on Mastodon), I'm not sure I approve! ๐Ÿ˜…

Old-style Mastodon preview of NeoDB collection: central part of cover image, collection title.
ALT text

Old-style Mastodon preview of NeoDB collection: central part of cover image, collection title.

New-style preview by Mastodon of NeoDB collection: lots of text, no title or cover image
ALT text

New-style preview by Mastodon of NeoDB collection: lots of text, no title or cover image

@reiver@mastodon.social

There is also the other question of โ€” would the resume / CV be JSON-LD.

On one hand, if it was in JSON-LD, it would make it machine-legible similar to ActivityPub.

On the other hand, I don't think anyone is going to write JSON-LD (especially HTML embedded in a JSON string value) by hand. But, I do think some people will want to write their resume by hand.

It feels like user-experience is fighting with JSON-LD based machine-legibility.

mastodon.social

@reiver โŠผ (Charles) :batman: (@reiver@mastodon.social)

How could you represent a resume / CV on the Fediverse and Social Web? Where would you put it? Etc? I think it is temping to put the whole resume in the Actor document. But, it is probably better for the Actor document to point (rather than include) it. And, have the resume / CV live somewhere else. It should probably be done in a way that let's people have multiple resumes / CV. For example, for different roles / career tracks, etc. #ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD

@reiver@mastodon.social

How could you represent a resume / CV on the Fediverse and Social Web? Where would you put it? Etc?

I think it is tempting to put the whole resume in the Actor document.

But, it is probably better for the Actor document to point (rather than include) it. And, have the resume / CV live somewhere else.

It should probably be done in a way that let's people have multiple resumes / CV. For example, for different roles / career tracks, etc.

@reiver@mastodon.social

How could you represent a resume / CV on the Fediverse and Social Web? Where would you put it? Etc?

I think it is tempting to put the whole resume in the Actor document.

But, it is probably better for the Actor document to point (rather than include) it. And, have the resume / CV live somewhere else.

It should probably be done in a way that let's people have multiple resumes / CV. For example, for different roles / career tracks, etc.

@reiver@mastodon.social

There is also the other question of โ€” would the resume / CV be JSON-LD.

On one hand, if it was in JSON-LD, it would make it machine-legible similar to ActivityPub.

On the other hand, I don't think anyone is going to write JSON-LD (especially HTML embedded in a JSON string value) by hand. But, I do think some people will want to write their resume by hand.

It feels like user-experience is fighting with JSON-LD based machine-legibility.

mastodon.social

@reiver โŠผ (Charles) :batman: (@reiver@mastodon.social)

How could you represent a resume / CV on the Fediverse and Social Web? Where would you put it? Etc? I think it is temping to put the whole resume in the Actor document. But, it is probably better for the Actor document to point (rather than include) it. And, have the resume / CV live somewhere else. It should probably be done in a way that let's people have multiple resumes / CV. For example, for different roles / career tracks, etc. #ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD

@reiver@mastodon.social

How could you represent a resume / CV on the Fediverse and Social Web? Where would you put it? Etc?

I think it is tempting to put the whole resume in the Actor document.

But, it is probably better for the Actor document to point (rather than include) it. And, have the resume / CV live somewhere else.

It should probably be done in a way that let's people have multiple resumes / CV. For example, for different roles / career tracks, etc.

@reiver@mastodon.social

How could you represent a resume / CV on the Fediverse and Social Web? Where would you put it? Etc?

I think it is tempting to put the whole resume in the Actor document.

But, it is probably better for the Actor document to point (rather than include) it. And, have the resume / CV live somewhere else.

It should probably be done in a way that let's people have multiple resumes / CV. For example, for different roles / career tracks, etc.

@FediVariety@mastodon.social
@FediVariety@mastodon.social
@FediVariety@mastodon.social
@smallcircles@social.coop ยท Reply to dev
@django@social.coop

Hey look, first post from a custom client using ActivityPub API

mediaformat.org

Posting from c2s โ€“ MediaFormat

The WordPress ActivityPub plugin quietly released an amazing feature in version 8.1.0 back in April. After a fair bit of testing, with various developers, inclu

@dev@mediaformat.org

Posting from c2s

The WordPress ActivityPub plugin quietly released an amazing feature in version 8.1.0 back in April.

After a fair bit of testing, with various developers, including yours truly, Matthias @pfefferle added support for the API.

activitypub.blog/2026/04/22/8-

This very post is written using a custom client I’m building ๐Ÿ˜‰

activitypub.blog

8.1.0 โ€” By the Numbers

ActivityPub for WordPress 8.1.0 is here. A new Fediverse statistics feature leads the release: a dashboard widget, monthly and annual email reports, and a shareable stats block with sharepic. Alongโ€ฆ

@django@social.coop

Hey look, first post from a custom client using ActivityPub API

mediaformat.org

Posting from c2s โ€“ MediaFormat

The WordPress ActivityPub plugin quietly released an amazing feature in version 8.1.0 back in April. After a fair bit of testing, with various developers, inclu

@dev@mediaformat.org

Posting from c2s

The WordPress ActivityPub plugin quietly released an amazing feature in version 8.1.0 back in April.

After a fair bit of testing, with various developers, including yours truly, Matthias @pfefferle added support for the API.

activitypub.blog/2026/04/22/8-

This very post is written using a custom client I’m building ๐Ÿ˜‰

activitypub.blog

8.1.0 โ€” By the Numbers

ActivityPub for WordPress 8.1.0 is here. A new Fediverse statistics feature leads the release: a dashboard widget, monthly and annual email reports, and a shareable stats block with sharepic. Alongโ€ฆ

@django@social.coop

Hey look, first post from a custom client using ActivityPub API

mediaformat.org

Posting from c2s โ€“ MediaFormat

The WordPress ActivityPub plugin quietly released an amazing feature in version 8.1.0 back in April. After a fair bit of testing, with various developers, inclu

@dev@mediaformat.org

Posting from c2s

The WordPress ActivityPub plugin quietly released an amazing feature in version 8.1.0 back in April.

After a fair bit of testing, with various developers, including yours truly, Matthias @pfefferle added support for the API.

activitypub.blog/2026/04/22/8-

This very post is written using a custom client I’m building ๐Ÿ˜‰

activitypub.blog

8.1.0 โ€” By the Numbers

ActivityPub for WordPress 8.1.0 is here. A new Fediverse statistics feature leads the release: a dashboard widget, monthly and annual email reports, and a shareable stats block with sharepic. Alongโ€ฆ

@evan@cosocial.ca

For the , we need a profile of OAuth to use for accessing the actor's data. There's a suggested flow here:

github.com/swicg/activitypub-a

There's an example client here:

swicg.github.io/activitypub-ap

It tries discovery via RFC 8414 or getting the endpoints straight from the actor.

It then provisions a client ID using CIMD, FEP d8c2, or DCR (in that order).

It then tries to do an authorization code flow.

I'm interested in seeing it tested with more ActivityPub API servers.

swicg.github.io

ActivityPub API OAuth demo

@evan@cosocial.ca

For the , we need a profile of OAuth to use for accessing the actor's data. There's a suggested flow here:

github.com/swicg/activitypub-a

There's an example client here:

swicg.github.io/activitypub-ap

It tries discovery via RFC 8414 or getting the endpoints straight from the actor.

It then provisions a client ID using CIMD, FEP d8c2, or DCR (in that order).

It then tries to do an authorization code flow.

I'm interested in seeing it tested with more ActivityPub API servers.

swicg.github.io

ActivityPub API OAuth demo

@sindum@mstdn.dk
@evan@cosocial.ca

For the , we need a profile of OAuth to use for accessing the actor's data. There's a suggested flow here:

github.com/swicg/activitypub-a

There's an example client here:

swicg.github.io/activitypub-ap

It tries discovery via RFC 8414 or getting the endpoints straight from the actor.

It then provisions a client ID using CIMD, FEP d8c2, or DCR (in that order).

It then tries to do an authorization code flow.

I'm interested in seeing it tested with more ActivityPub API servers.

swicg.github.io

ActivityPub API OAuth demo

@evan@cosocial.ca

For the , we need a profile of OAuth to use for accessing the actor's data. There's a suggested flow here:

github.com/swicg/activitypub-a

There's an example client here:

swicg.github.io/activitypub-ap

It tries discovery via RFC 8414 or getting the endpoints straight from the actor.

It then provisions a client ID using CIMD, FEP d8c2, or DCR (in that order).

It then tries to do an authorization code flow.

I'm interested in seeing it tested with more ActivityPub API servers.

swicg.github.io

ActivityPub API OAuth demo

@evan@cosocial.ca

For the , we need a profile of OAuth to use for accessing the actor's data. There's a suggested flow here:

github.com/swicg/activitypub-a

There's an example client here:

swicg.github.io/activitypub-ap

It tries discovery via RFC 8414 or getting the endpoints straight from the actor.

It then provisions a client ID using CIMD, FEP d8c2, or DCR (in that order).

It then tries to do an authorization code flow.

I'm interested in seeing it tested with more ActivityPub API servers.

swicg.github.io

ActivityPub API OAuth demo

@blag@typo.social

Now that it has come up in two recent conversations, I have to ask: what's the simplest social bookmarking application that gets closest to what Delicious* used to be? Ideally free and open source...

And is anyone working on a federated ActivityPub equivalent? Because that would be cool!

*Info for those that don't know/have forgotten: en.wikipedia.org/wiki/Deliciou

en.wikipedia.org

Delicious (website) - Wikipedia

@reiver@mastodon.social

Remote Inbox Architecture

1/

This, the Remote Inbox Architecture, is an architecture for a Fediverse back-end server that I think could be useful.

Here is how it works โ€” there are (at least) 2 servers involved: (1) the main back-end server, and (2) a remote inbox server.

The actor file on main back-end server "points" the inbox to the remote server.

It separates the user's content from the front-end related functionality

...

@blag@typo.social

Now that it has come up in two recent conversations, I have to ask: what's the simplest social bookmarking application that gets closest to what Delicious* used to be? Ideally free and open source...

And is anyone working on a federated ActivityPub equivalent? Because that would be cool!

*Info for those that don't know/have forgotten: en.wikipedia.org/wiki/Deliciou

en.wikipedia.org

Delicious (website) - Wikipedia

Remote Inbox Architecture

2/

The Remote Inbox server deals with incoming activities, objects, etc, from other users..

The front-end can get the inbox (and other feeds') data from the Remote Inbox server.

(You'd probably want to store cached data from the Fediverse elsewhere from these two servers, as I've said before. But, that is a separate thread.)

@reiver@mastodon.social

Remote Inbox Architecture

1/

This, the Remote Inbox Architecture, is an architecture for a Fediverse back-end server that I think could be useful.

Here is how it works โ€” there are (at least) 2 servers involved: (1) the main back-end server, and (2) a remote inbox server.

The actor file on main back-end server "points" the inbox to the remote server.

It separates the user's content from the front-end related functionality

...

On moving an actor's content.

4/

Or, instead of using the ActivityPub 'Update' activity โ€”

Couldn't we use the ActivityPub 'Move' activity.

w3.org/TR/activitystreams-voca

With the "origin" and "target" fields.

Where "origin" contains the old ID URL, and "target" contains the new ID URL.

.

        {
            "@context": "https://www.w3.org/ns/activitystreams",

            "origin":   "htps://example.com/users/joeblow/objects/150197",
            "target":   "http://host.example/~/objects/019e37",
        }
ALT text

{ "@context": "https://www.w3.org/ns/activitystreams", "origin": "htps://example.com/users/joeblow/objects/150197", "target": "http://host.example/~/objects/019e37", }

On moving an actor's content.

3/

There a many different conventions we could come up with to allow an ActvityPub 'Update' activity to be used to change an object's "id" field.

We (the Fediverse developer community) just need to pick one that everyone is willing to implement.

For example, perhaps the "origin", "result", or "target" field should be used:

w3.org/TR/activitystreams-voca

w3.org/TR/activitystreams-voca

w3.org/TR/activitystreams-voca

Or โ€”

...

w3.org

Activity Vocabulary

On moving an actor's content.

2/

Could an ActivityPub 'Update' activity be used to move objects from one server to another server?

Could an 'Update' activity be used to change an object's "id" field?

After all, the "id" is used to identity what is being changed. It is the targeting mechanism.

How can you provide the old "id" to target the (old) object you want to change the "id" of, while also providing a new "id"?

w3.org/TR/activitypub/#update-

...

7.3 Update Activity

For server to server interactions, an Update activity means that the receiving server SHOULD update its copy of the object of the same id to the copy supplied in the Update activity. Unlike the client to server handling of the Update activity, this is not a partial update but a complete replacement of the object.

The receiving server MUST take care to be sure that the Update is authorized to modify its object. At minimum, this may be done by ensuring that the Update and its object are of same origin.
ALT text

7.3 Update Activity For server to server interactions, an Update activity means that the receiving server SHOULD update its copy of the object of the same id to the copy supplied in the Update activity. Unlike the client to server handling of the Update activity, this is not a partial update but a complete replacement of the object. The receiving server MUST take care to be sure that the Update is authorized to modify its object. At minimum, this may be done by ensuring that the Update and its object are of same origin.

7.3 Update Activity

For server to server interactions, an Update activity means that the receiving server SHOULD update its copy of the object of the same id to the copy supplied in the Update activity. Unlike the client to server handling of the Update activity, this is not a partial update but a complete replacement of the object.

The receiving server MUST take care to be sure that the Update is authorized to modify its object. At minimum, this may be done by ensuring that the Update and its object are of same origin.
ALT text

7.3 Update Activity For server to server interactions, an Update activity means that the receiving server SHOULD update its copy of the object of the same id to the copy supplied in the Update activity. Unlike the client to server handling of the Update activity, this is not a partial update but a complete replacement of the object. The receiving server MUST take care to be sure that the Update is authorized to modify its object. At minimum, this may be done by ensuring that the Update and its object are of same origin.

@reiver@mastodon.social

On moving an actor's content.

1/

One of the things that comes up on the Fediverse from time to time โ€” is the ability for people to move their accounts.

For example, someone started off at:

๏ผ joeblow๏ผ example.com

But, now wants to "move" to:

๏ผ misterx๏ผ host.example

There is a mechanism to do that.

That mechanism moves their followers, their followees, BUT โ€”

It does NOT move their content over!

That is a problem. Could we address thisโ€ฝ

...

@dansup@mastodon.social

I've been working on improving Loops federation in preparation to reuse it and it's powerful builder/handler/validation pattern for Pixelfed!

This will solve many federation issues in Pixelfed, like missing comment threading, mentions, blocks and unblocks and much more.

Then I will abstract it into a reusable Laravel package, so any laravel project can easily add federation support in minutes

I also submitted a NLnet grant application for this ๐Ÿคž

github.com/dansup/laravel-acti

github.com

GitHub - dansup/laravel-activitypub: a batteries included ActivityPub package for Laravel

a batteries included ActivityPub package for Laravel - dansup/laravel-activitypub

@mpjgregoire@cosocial.ca
@dansup@mastodon.social

I've been working on improving Loops federation in preparation to reuse it and it's powerful builder/handler/validation pattern for Pixelfed!

This will solve many federation issues in Pixelfed, like missing comment threading, mentions, blocks and unblocks and much more.

Then I will abstract it into a reusable Laravel package, so any laravel project can easily add federation support in minutes

I also submitted a NLnet grant application for this ๐Ÿคž

github.com/dansup/laravel-acti

github.com

GitHub - dansup/laravel-activitypub: a batteries included ActivityPub package for Laravel

a batteries included ActivityPub package for Laravel - dansup/laravel-activitypub

@dansup@mastodon.social

I've been working on improving Loops federation in preparation to reuse it and it's powerful builder/handler/validation pattern for Pixelfed!

This will solve many federation issues in Pixelfed, like missing comment threading, mentions, blocks and unblocks and much more.

Then I will abstract it into a reusable Laravel package, so any laravel project can easily add federation support in minutes

I also submitted a NLnet grant application for this ๐Ÿคž

github.com/dansup/laravel-acti

github.com

GitHub - dansup/laravel-activitypub: a batteries included ActivityPub package for Laravel

a batteries included ActivityPub package for Laravel - dansup/laravel-activitypub

@reiver@mastodon.social

ActivityPub being treated as JSON is a good thing.

1/

Some of us are old enough to remember RSS and blogs.

Some of us are old enough to remember the absurd levels of hype that blogs and RSS attracted โ€” similar to the modern AI hype and recent crypto hype. During that era, it felt like everyone any their pet cat wanted a blog with an RSS feed. During that era, there was a get-rich-quick fever around blogs and RSS.

Web-Browsers even added built-in support for RSS.

@BjornW@mastodon.social

@publicspaces will have a pre-conference unconference on June 4th.

This unconference is an open invitation to discuss & forge relationships between people involved with the . From app builder & protocol architects to advocates, sysadmins, moderators, community organisers & more. Let's forge bonds across cultures, protocols & apps!

Admission free, registration required:
tickets.publicspaces.net/publi

tickets.publicspaces.net

PublicSpaces Conferentie 2026

4 juni 2026 โ€“ 6 juni 2026

ActivityPub being treated as JSON is a good thing.

5/

JSON-LD has similar complexity to RDF. They are actually related formats.

ActivityPub uses JSON-LD, and thus has the potential for the same type of developer user-experience problems as RSS 1.0.

But I think ActivityPub is its own "RSS 2.0".

Whyโ€ฝ Because people can and do treat ActivityPub as JSON (rather than JSON-LD).

That is a strength. It makes ActivityPub much simpler and easier to understand than JSON-LD.

ActivityPub being treated as JSON is a good thing.

5/

JSON-LD has similar complexity to RDF. They are actually related formats.

ActivityPub uses JSON-LD, and thus has the potential for the same type of developer user-experience problems as RSS 1.0.

But I think ActivityPub is its own "RSS 2.0".

Whyโ€ฝ Because people can and do treat ActivityPub as JSON (rather than JSON-LD).

That is a strength. It makes ActivityPub much simpler and easier to understand than JSON-LD.

ActivityPub being treated as JSON is a good thing.

4/

RSS 2.0 won the RSS war.

I think the reason RSS 2.0 beat RSS 1.0 is because the RDF-based syntax of RSS 1.0 made it complex. It made it too complex.

While both RSS 1.0 and RSS 2.0 were XML-based, RSS 2.0 wasn't RDF-based. RSS 2.0's syntax was much simpler and easier to understand.

I think that was a big reason why RSS 2.0 won โ€” it had a better developer user-experience.

...

ActivityPub being treated as JSON is a good thing.

3/

It would be reasonable for anyone to assume that RSS 2.0 is a newer version of RSS 1.0. And there were many who tried to promote that view.

But, really they were completely different formats.

The "RSS" in 1.0 and 2.0 didn't even stand for the same thing.

1.0 RSS = RDF Site Summary

2.0 RSS = Really Simple Syndication

...

ActivityPub being treated as JSON is a good thing.

2/

There are different versions of RSS.

Most people who know of RSS (if they even know it at all) know of RSS 2.0. But, it wasn't the only version of RSS.

(RSS isn't even the first technology of its kind.)

When the online developer community became aware of RSS, there was a fight between two version of RSS:

RSS 1.0 versus RSS 2.0

...

@reiver@mastodon.social

ActivityPub being treated as JSON is a good thing.

1/

Some of us are old enough to remember RSS and blogs.

Some of us are old enough to remember the absurd levels of hype that blogs and RSS attracted โ€” similar to the modern AI hype and recent crypto hype. During that era, it felt like everyone any their pet cat wanted a blog with an RSS feed. During that era, there was a get-rich-quick fever around blogs and RSS.

Web-Browsers even added built-in support for RSS.

@reiver@mastodon.social

ActivityPub being treated as JSON is a good thing.

1/

Some of us are old enough to remember RSS and blogs.

Some of us are old enough to remember the absurd levels of hype that blogs and RSS attracted โ€” similar to the modern AI hype and recent crypto hype. During that era, it felt like everyone any their pet cat wanted a blog with an RSS feed. During that era, there was a get-rich-quick fever around blogs and RSS.

Web-Browsers even added built-in support for RSS.

@reiver@mastodon.social

I think ActivityPub Partial Updates won't work well with attachments or tags.

Not unless there is a way to reliably just target the item in the attachments or tags array that you want to modify. AFAIK, there isn't.

You have to download the old version of the whole attachments or tags array first, update it locally, and then upload the whole (updated) thing. This creates a race-condition.

See also: mastodon.social/@reiver/116446

@mapache@hachyderm.io

Hear me out, if we can integrate these 4, in a seamless frictionless integrated experience for both, companies and users, we could have a nice alternative to that is actually not crap.

Any interest?

A diagram titled "An ActivityPub-based LinkedIn" is presented on a light blue background. The image features four colored rectangular boxes arranged in a grid around a central horizontal bar. The top row includes a light purple box with the text "Professional Profile and Badges" and "fediprofile," alongside a dark purple box with the text "Social Graph and Updates" and "mastodon." A dark blue horizontal bar in the center contains the text "Single Login Identity." The bottom row consists of a black box with the text "Job posts and discussions" and "lemmy," and an orange box with the text "Achievements and Certifications" and "badgefed."
ALT text

A diagram titled "An ActivityPub-based LinkedIn" is presented on a light blue background. The image features four colored rectangular boxes arranged in a grid around a central horizontal bar. The top row includes a light purple box with the text "Professional Profile and Badges" and "fediprofile," alongside a dark purple box with the text "Social Graph and Updates" and "mastodon." A dark blue horizontal bar in the center contains the text "Single Login Identity." The bottom row consists of a black box with the text "Job posts and discussions" and "lemmy," and an orange box with the text "Achievements and Certifications" and "badgefed."

@weekinfediverse@mitra.social
@weekinfediverse@mitra.social
@weekinfediverse@mitra.social
@weekinfediverse@mitra.social
@seanm@infosec.exchange ยท Reply to Sean

Just to be clear, I think JavaScript is fine for authenticated or more complex content. If I'm a user of a server, it seems acceptable that I should trust it and enable JavaScript.

However, if I am some random visitor to your instance and just trying to view a post or user profile, that should not require JavaScript.

The JavaScript ecosystem (e.g., npm) is rife with supply chain hacks. Plus, there are many poorly maintained Mastodon instances (e.g., mastodon.social, I think?). Although, I guess those poorly maintained instances are not pulling down the latest backdoored npm packages... Regardless, it is a security risk to require visitors run JavaScript from every instance they visit for simple content.

@seanm@infosec.exchange

Does anyone have recommendations for a Mastodon fork that doesn't require visitors to enable JavaScript to view basic content? The JavaScript dependency is a security risk and user hostile. Visitors should not be required to enable JavaScript when simply visiting a Mastodon server. Plus, the recommendation to use a native app doesn't even work for all Mastodon/ActivityPub instances.

Also, the requirement for JavaScript makes the Mastodon development team seem incompetent. They can't even make a basic web site that doesn't require JavaScript. I could do that when I was in middle school.

>To use the Mastodon web application, please enable JavaScript. Alternatively, try one of the native apps for Mastodon for your platform.

To use the Mastodon web application, please enable JavaScript. Alternatively, try one of the native apps for Mastodon for your platform.
ALT text

To use the Mastodon web application, please enable JavaScript. Alternatively, try one of the native apps for Mastodon for your platform.

@seanm@infosec.exchange ยท Reply to Sean

Just to be clear, I think JavaScript is fine for authenticated or more complex content. If I'm a user of a server, it seems acceptable that I should trust it and enable JavaScript.

However, if I am some random visitor to your instance and just trying to view a post or user profile, that should not require JavaScript.

The JavaScript ecosystem (e.g., npm) is rife with supply chain hacks. Plus, there are many poorly maintained Mastodon instances (e.g., mastodon.social, I think?). Although, I guess those poorly maintained instances are not pulling down the latest backdoored npm packages... Regardless, it is a security risk to require visitors run JavaScript from every instance they visit for simple content.

@seanm@infosec.exchange

Does anyone have recommendations for a Mastodon fork that doesn't require visitors to enable JavaScript to view basic content? The JavaScript dependency is a security risk and user hostile. Visitors should not be required to enable JavaScript when simply visiting a Mastodon server. Plus, the recommendation to use a native app doesn't even work for all Mastodon/ActivityPub instances.

Also, the requirement for JavaScript makes the Mastodon development team seem incompetent. They can't even make a basic web site that doesn't require JavaScript. I could do that when I was in middle school.

>To use the Mastodon web application, please enable JavaScript. Alternatively, try one of the native apps for Mastodon for your platform.

To use the Mastodon web application, please enable JavaScript. Alternatively, try one of the native apps for Mastodon for your platform.
ALT text

To use the Mastodon web application, please enable JavaScript. Alternatively, try one of the native apps for Mastodon for your platform.

@BjornW@mastodon.social

@publicspaces will have a pre-conference unconference on June 4th.

This unconference is an open invitation to discuss & forge relationships between people involved with the . From app builder & protocol architects to advocates, sysadmins, moderators, community organisers & more. Let's forge bonds across cultures, protocols & apps!

Admission free, registration required:
tickets.publicspaces.net/publi

tickets.publicspaces.net

PublicSpaces Conferentie 2026

4 juni 2026 โ€“ 6 juni 2026

@FediVariety@mastodon.social

Ohyes.. Before we forget it.. At , we attended a workshop on the European Social Web organised by @evan of @SocialWebFoundation. The group agreed that social sovereignty in Europe depends on interoperability, decentralisation, open standards, and open source. A vision paper is in progress and will be released soon. Preludes were shared at by @michael and @bjoernsta.


fedivariety.org/blog/european-

fedivariety.org

European Social Stack

Ooh yes.. almost forgot about it.. btw. In the run-up to FOSDEM, we took part in a workshop regarding the European Social Web, organised by Evan of SocialWebFoundation (thank you,

@BjornW@mastodon.social

@publicspaces will have a pre-conference unconference on June 4th.

This unconference is an open invitation to discuss & forge relationships between people involved with the . From app builder & protocol architects to advocates, sysadmins, moderators, community organisers & more. Let's forge bonds across cultures, protocols & apps!

Admission free, registration required:
tickets.publicspaces.net/publi

tickets.publicspaces.net

PublicSpaces Conferentie 2026

4 juni 2026 โ€“ 6 juni 2026

@FediVariety@mastodon.social

Ohyes.. Before we forget it.. At , we attended a workshop on the European Social Web organised by @evan of @SocialWebFoundation. The group agreed that social sovereignty in Europe depends on interoperability, decentralisation, open standards, and open source. A vision paper is in progress and will be released soon. Preludes were shared at by @michael and @bjoernsta.


fedivariety.org/blog/european-

fedivariety.org

European Social Stack

Ooh yes.. almost forgot about it.. btw. In the run-up to FOSDEM, we took part in a workshop regarding the European Social Web, organised by Evan of SocialWebFoundation (thank you,

@FediVariety@mastodon.social

Ohyes.. Before we forget it.. At , we attended a workshop on the European Social Web organised by @evan of @SocialWebFoundation. The group agreed that social sovereignty in Europe depends on interoperability, decentralisation, open standards, and open source. A vision paper is in progress and will be released soon. Preludes were shared at by @michael and @bjoernsta.


fedivariety.org/blog/european-

fedivariety.org

European Social Stack

Ooh yes.. almost forgot about it.. btw. In the run-up to FOSDEM, we took part in a workshop regarding the European Social Web, organised by Evan of SocialWebFoundation (thank you,

@BjornW@mastodon.social

@publicspaces will have a pre-conference unconference on June 4th.

This unconference is an open invitation to discuss & forge relationships between people involved with the . From app builder & protocol architects to advocates, sysadmins, moderators, community organisers & more. Let's forge bonds across cultures, protocols & apps!

Admission free, registration required:
tickets.publicspaces.net/publi

tickets.publicspaces.net

PublicSpaces Conferentie 2026

4 juni 2026 โ€“ 6 juni 2026

@McPringle@fosstodon.org

@christin @fluffy @kkarhan

> Any implementation of a music collection on top of would still have to implement the collection itself, and maintain standards for how backfilling works and how the collection is shaped, so why not start with a clean implementation that only provides the parts that are important to a music collection to begin with?

Yet I do wonder about xkcd.com/927

We often think about ActivityPub by how we experience it on the fediverse. But the fediverse rn is only a very particular implementation of AP, specialized to support microblogging and traditional social media use cases.

AP offers "a social graph of addressible actors to exchange activities with an object payload". Actors, activities, and objects are all fully customizable linked data, they can be anything, modeled to represent any domain.

With an ActivityPub API client you maintain your music collection locally, then publish and interact to a static site, or other interested actors.

xkcd.com

Standards

@apps@toot.fedilab.app

is a new social network working with . This is not an app where you can connect your Mastodon, Pixelfed or PeerTube account.
There is no web version and no API because the ActivityPub server runs on the device itself. That's the whole challenge behind this project.
If there is more engagement, I plan to build a desktop version and even sync between different devices.

The official account for all announcements is @HolosSocial

More: holos.social/how-it-works

holos.social

How It Works - Holos

Your phone becomes your social server

A friend of mine, @siliconsjang, released SiliconBeest v1.0.0 today. It's a server built on Workers, D1, R2, and Queues, using Fedify.

I like the starting point: after watching fediverse servers go down together during Cloudflare outages, they thought, why not just run on Cloudflare directly?

They're aiming for something cheap enough that a small instance can stay on Cloudflare's free plan, and a somewhat bigger one can fit in the $5/month tier. It's still early; a lot is missing, and Mastodon/Misskey API compatibility is more of a long-term goal.

I'm glad to see Fedify put to use for something like this. Worth checking out.

The source code is on GitHub under AGPL 3.0.

github.com

GitHub - SJang1/siliconbeest: Fediverse in Cloudflare Workers + live serverless code

Fediverse in Cloudflare Workers + live serverless code - SJang1/siliconbeest

@siliconsjang@hackers.pub

์•ˆ๋…•ํ•˜์„ธ์š”! Hello everyone!

SiliconBeest v1.0.0 ๊ณต๊ฐœ

๋งˆ์Šคํ† ๋ˆ API ํ˜ธํ™˜์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” Cloudflare ์—ฃ์ง€ ์ปดํ“จํŒ… ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ฆฌ์Šค ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด, SiliconBeest v1.0.0์„ ๊ณต๊ฐœํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

I'm pleased to announce SiliconBeest v1.0.0, a serverless fediverse software project built on Cloudflare edge computing, aiming for Mastodon API compatibility.

SiliconBeest Logo - a wildebeest with silicon on it


์„ค๋ช… (Description)

ko

  • SiliconBeest๋Š” Cloudflare Workers ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
  • Cloudflare ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋‹ค์ˆ˜์˜ ์—ฐํ•ฉ์šฐ์ฃผ ์„œ๋ฒ„๊ฐ€ ํ•จ๊ป˜ ์ ‘์† ๋ถˆ๊ฐ€ ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ณด๋ฉฐ, ์—ฐํ•ฉ์šฐ์ฃผ ์—ญ์‹œ Cloudflare ์ธํ”„๋ผ์— ์ƒ๋‹นํžˆ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์— ์ฐฉ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž๋Š” ์ƒ๊ฐ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Cloudflare Inc.์—์„œ ๊ฐœ๋ฐœํ–ˆ๋˜ Wildebeest ํ”„๋กœ์ ํŠธ์˜ ์•„์ด๋””์–ด์™€ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ ์ œ ๋‹‰๋„ค์ž„์ธ silicon(sjang) ์ด๋ž‘ Cloudflare์˜ Wildebeest๋ฅผ ์กฐํ•ฉํ•ด SiliconBeest๋กœ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ ์€ ์‚ฌ์šฉ์ž ์ˆ˜์™€ ์ž‘์€ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์„ ๊ธฐ์ค€์œผ๋กœ๋Š” Cloudflare ๋ฌด๋ฃŒ ํ”Œ๋žœ์—์„œ๋„ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์กฐ๊ธˆ ๋” ํฐ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์—์„œ๋Š” ์›” $5 ํ”Œ๋žœ์œผ๋กœ๋„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • API ์ธก๋ฉด์—์„œ SiliconBeest์˜ ๋ชฉํ‘œ๋Š” Mastodon ๋ฐ Misskey API์™€์˜ ํ˜ธํ™˜์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๋ก ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๊ณผ ์‹ค์ œ ๊ตฌํ˜„์€ ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ๋ถ€๋ถ„์€ ์•„์ง ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ๋กœ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

en

  • SiliconBeest is a fediverse project designed to run on Cloudflare Workers.
  • After seeing many fediverse servers become unavailable when Cloudflare had outages, I realized that the fediverse already relies heavily on Cloudflare infrastructure.
  • So I thought: why not build fediverse software directly on top of Cloudflare?
  • This project was inspired by Cloudflare Inc.โ€™s Wildebeest project, and it also references some of its ideas and code.
  • The project name, SiliconBeest, comes from my nickname silicon(sjang) combined with Cloudflareโ€™s Wildebeest.
  • Iโ€™m still working on making it as inexpensive to run as possible. For now, the goal is to support a small number of users with a small federation footprint on the free plan, and a medium federation footprint on the $5 plan.
  • From an API perspective, SiliconBeest aims to be compatible with both Mastodon and Misskey APIs. However, as many people know, full compatibility is difficult in practice, so this remains a long-term goal rather than something fully implemented today.

์•„์ง์€ ์ดˆ๊ธฐ ๋ฒ„์ „์ด๋ผ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„๋„ ๋งŽ์ง€๋งŒ, Cloudflare Workers, D1, R2, Queues ๋“ฑ Cloudflare์˜ ์„œ๋ฒ„๋ฆฌ์Šค ์ธํ”„๋ผ ์œ„์—์„œ ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์–ผ๋งˆ๋‚˜ ๊ฐ€๋ณ๊ณ  ์ €๋ ดํ•˜๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‹คํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

This is still an early version, and many parts are not implemented yet. However, SiliconBeest is an experiment in how lightweight and affordable fediverse software can be when built on top of Cloudflareโ€™s serverless infrastructure, such as Workers, D1, R2, and Queues.

ํ˜„์žฌ v1.0.0์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋จผ์ € ์ •๋ฆฌํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ–ˆ์œผ๋ฉฐ, ์•ž์œผ๋กœ Mastodon API ํ˜ธํ™˜์„ฑ, federation ์•ˆ์ •์„ฑ, ๊ด€๋ฆฌ ๋„๊ตฌ, ๋ฌธ์„œํ™” ๋“ฑ์„ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•ด๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

In v1.0.0, I focused on organizing the basic architecture and core functionality first. Going forward, I plan to gradually improve Mastodon API compatibility, federation stability, admin tooling, and documentation.

๊ด€์‹ฌ ์žˆ์œผ์‹  ๋ถ„๋“ค์€ GitHub ์ €์žฅ์†Œ๋ฅผ ํ™•์ธํ•ด์ฃผ์‹œ๊ณ , ์ด์Šˆ๋‚˜ ํ”ผ๋“œ๋ฐฑ๋„ ์–ธ์ œ๋“  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

If youโ€™re interested, please check out the GitHub repository. Issues, feedback, and suggestions are always welcome.

https://github.com/SJang1/siliconbeest


์„ค์น˜ ๋ฐ ๋ฐฐํฌ ๋ฐฉ๋ฒ• (Installation and Deployment)

SiliconBeest๋Š” GitHub ํ…œํ”Œ๋ฆฟ๊ณผ Cloudflare๋ฅผ ์ด์šฉํ•ด ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GitHub ํ…œํ”Œ๋ฆฟ์—์„œ ์ƒˆ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Cloudflare์—์„œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค์™€ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Cloudflare API ํ† ํฐ๊ณผ ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ GitHub Secrets์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  4. GitHub Actions๋ฅผ ํ†ตํ•ด ์ž๋™ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ธ์Šคํ„ด์Šค ์„ค์ •์„ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์„ค์น˜ ๊ณผ์ •์€ ๊ณ„์† ๋‹ค๋“ฌ๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐœ์„ ์‚ฌํ•ญ์ด ๋งŽ์Œ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”ํ›„ ๋ณด๊ฐ•ํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ด๋ฉฐ, ์ด์— ๋Œ€ํ•œ PR๋„ ํ™˜์˜์ž…๋‹ˆ๋‹ค.

SiliconBeest can be deployed relatively easily using a GitHub template and Cloudflare.

  1. Create a new repository from the GitHub template.
  2. Set up the required resources and environment on Cloudflare.
  3. Store the Cloudflare API token and required environment variables in GitHub Secrets.
  4. Deploy automatically using GitHub Actions.
  5. Once deployment is complete, finish configuring your instance.

The installation process is still being refined, and Iโ€™m aware that there is plenty of room for improvement. I plan to keep improving the documentation and deployment flow over time, and related PRs are always welcome.

@apps@toot.fedilab.app

is a new social network working with . This is not an app where you can connect your Mastodon, Pixelfed or PeerTube account.
There is no web version and no API because the ActivityPub server runs on the device itself. That's the whole challenge behind this project.
If there is more engagement, I plan to build a desktop version and even sync between different devices.

The official account for all announcements is @HolosSocial

More: holos.social/how-it-works

holos.social

How It Works - Holos

Your phone becomes your social server

็Ÿฅไบบ(์ง€์ธ)์ธ @siliconsjang ๋‹˜์ด ์˜ค๋Š˜ SiliconBeest v1.0.0์„ ๅ…ฌ้–‹(๊ณต๊ฐœ)ํ–ˆ์Šต๋‹ˆ๋‹ค. Fedify์™€ Cloudflare๋ฅผ ๅŸบ็›ค(๊ธฐ๋ฐ˜)์œผ๋กœ ๋งŒ๋“  ์†Œํ”„ํŠธ์›จ์–ด์ธ๋ฐ, Workers, D1, R2, Queues ๋“ฑ ์„œ๋ฒ„๋ฆฌ์Šค ์Šคํƒ ์œ„์—์„œ ๅ…จ้ƒจ(์ „๋ถ€) ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

็™ผๆƒณ(๋ฐœ์ƒ)์˜ ๅ‡บ็™ผ้ปž(์ถœ๋ฐœ์ )์ด ์žฌ๋ฐŒ์Šต๋‹ˆ๋‹ค. Cloudflare ้šœ็ค™(์žฅ์• ) ๋•Œ ่ฏๅˆๅฎ‡ๅฎ™(์—ฐํ•ฉ์šฐ์ฃผ) ์„œ๋ฒ„๋“ค์ด ๋ฉ๋‹ฌ์•„ ๋‹ค์šด๋˜๋Š” ๊ฑธ ๋ณด๊ณ , ใ€Œ๊ทธ๋Ÿผ ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋Œ๋ฆฌ๋ฉด ๋˜์ง€ ์•Š๋‚˜?」๋ผ๋Š” ์ƒ๊ฐ์—์„œ ๅง‹ไฝœ(์‹œ์ž‘)ํ–ˆ๋‹ค๊ณ  ํ•˜๋„ค์š”.

่ฒป็”จ(๋น„์šฉ) ้ข(๋ฉด)์—์„œ๋Š” ๅฐ่ฆๆจก(์†Œ๊ทœ๋ชจ) ์ธ์Šคํ„ด์Šค๋Š” Cloudflare ็„กๆ–™(๋ฌด๋ฃŒ) ํ”Œ๋žœ, ์กฐ๊ธˆ ๋” ํฐ ่ฆๆจก(๊ทœ๋ชจ)๋Š” ๆœˆ(์›”) $5 ํ”Œ๋žœ์œผ๋กœ ๅ ช็•ถ(๊ฐ๋‹น)ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒŒ ็›ฎๆจ™(๋ชฉํ‘œ)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์•„์ง ๅˆๆœŸ(์ดˆ๊ธฐ) ๋ฒ„์ „์ด๋ผ ๆœชๅ…ท้กฏ(๋ฏธ๊ตฌํ˜„) ๆฉŸ่ƒฝ(๊ธฐ๋Šฅ)์ด ๋งŽ๊ณ , Mastodon ๋ฐ Misskey API ไบ’ๆ›(ํ˜ธํ™˜)์€ ้•ทๆœŸ(์žฅ๊ธฐ) ็›ฎๆจ™(๋ชฉํ‘œ)๋กœ ๋ณด๊ณ  ์žˆ๋‹ค๋„ค์š”.

Fedify๋ฅผ ์จ์ฃผ์‹œ๋Š” ๋ถ„์ด๋ผ ๋ฐ˜๊ฐ‘๊ธฐ๋„ ํ•˜๊ณ , ๆ‡‰ๆด(์‘์›)ํ•˜๊ณ  ์‹ถ์–ด ็ดนไป‹(์†Œ๊ฐœ)ํ•ฉ๋‹ˆ๋‹ค.

์†Œ์Šค ์ฝ”๋“œ๋Š” AGPL 3.0์œผ๋กœ GitHub์— ๊ณต๊ฐœ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

github.com

GitHub - SJang1/siliconbeest: Fediverse in Cloudflare Workers + live serverless code

Fediverse in Cloudflare Workers + live serverless code - SJang1/siliconbeest

@siliconsjang@hackers.pub

์•ˆ๋…•ํ•˜์„ธ์š”! Hello everyone!

SiliconBeest v1.0.0 ๊ณต๊ฐœ

๋งˆ์Šคํ† ๋ˆ API ํ˜ธํ™˜์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” Cloudflare ์—ฃ์ง€ ์ปดํ“จํŒ… ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ฆฌ์Šค ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด, SiliconBeest v1.0.0์„ ๊ณต๊ฐœํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

I'm pleased to announce SiliconBeest v1.0.0, a serverless fediverse software project built on Cloudflare edge computing, aiming for Mastodon API compatibility.

SiliconBeest Logo - a wildebeest with silicon on it


์„ค๋ช… (Description)

ko

  • SiliconBeest๋Š” Cloudflare Workers ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
  • Cloudflare ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋‹ค์ˆ˜์˜ ์—ฐํ•ฉ์šฐ์ฃผ ์„œ๋ฒ„๊ฐ€ ํ•จ๊ป˜ ์ ‘์† ๋ถˆ๊ฐ€ ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ณด๋ฉฐ, ์—ฐํ•ฉ์šฐ์ฃผ ์—ญ์‹œ Cloudflare ์ธํ”„๋ผ์— ์ƒ๋‹นํžˆ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์— ์ฐฉ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž๋Š” ์ƒ๊ฐ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Cloudflare Inc.์—์„œ ๊ฐœ๋ฐœํ–ˆ๋˜ Wildebeest ํ”„๋กœ์ ํŠธ์˜ ์•„์ด๋””์–ด์™€ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ ์ œ ๋‹‰๋„ค์ž„์ธ silicon(sjang) ์ด๋ž‘ Cloudflare์˜ Wildebeest๋ฅผ ์กฐํ•ฉํ•ด SiliconBeest๋กœ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ ์€ ์‚ฌ์šฉ์ž ์ˆ˜์™€ ์ž‘์€ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์„ ๊ธฐ์ค€์œผ๋กœ๋Š” Cloudflare ๋ฌด๋ฃŒ ํ”Œ๋žœ์—์„œ๋„ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์กฐ๊ธˆ ๋” ํฐ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์—์„œ๋Š” ์›” $5 ํ”Œ๋žœ์œผ๋กœ๋„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • API ์ธก๋ฉด์—์„œ SiliconBeest์˜ ๋ชฉํ‘œ๋Š” Mastodon ๋ฐ Misskey API์™€์˜ ํ˜ธํ™˜์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๋ก ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๊ณผ ์‹ค์ œ ๊ตฌํ˜„์€ ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ๋ถ€๋ถ„์€ ์•„์ง ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ๋กœ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

en

  • SiliconBeest is a fediverse project designed to run on Cloudflare Workers.
  • After seeing many fediverse servers become unavailable when Cloudflare had outages, I realized that the fediverse already relies heavily on Cloudflare infrastructure.
  • So I thought: why not build fediverse software directly on top of Cloudflare?
  • This project was inspired by Cloudflare Inc.โ€™s Wildebeest project, and it also references some of its ideas and code.
  • The project name, SiliconBeest, comes from my nickname silicon(sjang) combined with Cloudflareโ€™s Wildebeest.
  • Iโ€™m still working on making it as inexpensive to run as possible. For now, the goal is to support a small number of users with a small federation footprint on the free plan, and a medium federation footprint on the $5 plan.
  • From an API perspective, SiliconBeest aims to be compatible with both Mastodon and Misskey APIs. However, as many people know, full compatibility is difficult in practice, so this remains a long-term goal rather than something fully implemented today.

์•„์ง์€ ์ดˆ๊ธฐ ๋ฒ„์ „์ด๋ผ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„๋„ ๋งŽ์ง€๋งŒ, Cloudflare Workers, D1, R2, Queues ๋“ฑ Cloudflare์˜ ์„œ๋ฒ„๋ฆฌ์Šค ์ธํ”„๋ผ ์œ„์—์„œ ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์–ผ๋งˆ๋‚˜ ๊ฐ€๋ณ๊ณ  ์ €๋ ดํ•˜๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‹คํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

This is still an early version, and many parts are not implemented yet. However, SiliconBeest is an experiment in how lightweight and affordable fediverse software can be when built on top of Cloudflareโ€™s serverless infrastructure, such as Workers, D1, R2, and Queues.

ํ˜„์žฌ v1.0.0์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋จผ์ € ์ •๋ฆฌํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ–ˆ์œผ๋ฉฐ, ์•ž์œผ๋กœ Mastodon API ํ˜ธํ™˜์„ฑ, federation ์•ˆ์ •์„ฑ, ๊ด€๋ฆฌ ๋„๊ตฌ, ๋ฌธ์„œํ™” ๋“ฑ์„ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•ด๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

In v1.0.0, I focused on organizing the basic architecture and core functionality first. Going forward, I plan to gradually improve Mastodon API compatibility, federation stability, admin tooling, and documentation.

๊ด€์‹ฌ ์žˆ์œผ์‹  ๋ถ„๋“ค์€ GitHub ์ €์žฅ์†Œ๋ฅผ ํ™•์ธํ•ด์ฃผ์‹œ๊ณ , ์ด์Šˆ๋‚˜ ํ”ผ๋“œ๋ฐฑ๋„ ์–ธ์ œ๋“  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

If youโ€™re interested, please check out the GitHub repository. Issues, feedback, and suggestions are always welcome.

https://github.com/SJang1/siliconbeest


์„ค์น˜ ๋ฐ ๋ฐฐํฌ ๋ฐฉ๋ฒ• (Installation and Deployment)

SiliconBeest๋Š” GitHub ํ…œํ”Œ๋ฆฟ๊ณผ Cloudflare๋ฅผ ์ด์šฉํ•ด ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GitHub ํ…œํ”Œ๋ฆฟ์—์„œ ์ƒˆ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Cloudflare์—์„œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค์™€ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Cloudflare API ํ† ํฐ๊ณผ ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ GitHub Secrets์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  4. GitHub Actions๋ฅผ ํ†ตํ•ด ์ž๋™ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ธ์Šคํ„ด์Šค ์„ค์ •์„ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์„ค์น˜ ๊ณผ์ •์€ ๊ณ„์† ๋‹ค๋“ฌ๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐœ์„ ์‚ฌํ•ญ์ด ๋งŽ์Œ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”ํ›„ ๋ณด๊ฐ•ํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ด๋ฉฐ, ์ด์— ๋Œ€ํ•œ PR๋„ ํ™˜์˜์ž…๋‹ˆ๋‹ค.

SiliconBeest can be deployed relatively easily using a GitHub template and Cloudflare.

  1. Create a new repository from the GitHub template.
  2. Set up the required resources and environment on Cloudflare.
  3. Store the Cloudflare API token and required environment variables in GitHub Secrets.
  4. Deploy automatically using GitHub Actions.
  5. Once deployment is complete, finish configuring your instance.

The installation process is still being refined, and Iโ€™m aware that there is plenty of room for improvement. I plan to keep improving the documentation and deployment flow over time, and related PRs are always welcome.

็Ÿฅไบบ(์ง€์ธ)์ธ @siliconsjang ๋‹˜์ด ์˜ค๋Š˜ SiliconBeest v1.0.0์„ ๅ…ฌ้–‹(๊ณต๊ฐœ)ํ–ˆ์Šต๋‹ˆ๋‹ค. Fedify์™€ Cloudflare๋ฅผ ๅŸบ็›ค(๊ธฐ๋ฐ˜)์œผ๋กœ ๋งŒ๋“  ์†Œํ”„ํŠธ์›จ์–ด์ธ๋ฐ, Workers, D1, R2, Queues ๋“ฑ ์„œ๋ฒ„๋ฆฌ์Šค ์Šคํƒ ์œ„์—์„œ ๅ…จ้ƒจ(์ „๋ถ€) ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

็™ผๆƒณ(๋ฐœ์ƒ)์˜ ๅ‡บ็™ผ้ปž(์ถœ๋ฐœ์ )์ด ์žฌ๋ฐŒ์Šต๋‹ˆ๋‹ค. Cloudflare ้šœ็ค™(์žฅ์• ) ๋•Œ ่ฏๅˆๅฎ‡ๅฎ™(์—ฐํ•ฉ์šฐ์ฃผ) ์„œ๋ฒ„๋“ค์ด ๋ฉ๋‹ฌ์•„ ๋‹ค์šด๋˜๋Š” ๊ฑธ ๋ณด๊ณ , ใ€Œ๊ทธ๋Ÿผ ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋Œ๋ฆฌ๋ฉด ๋˜์ง€ ์•Š๋‚˜?」๋ผ๋Š” ์ƒ๊ฐ์—์„œ ๅง‹ไฝœ(์‹œ์ž‘)ํ–ˆ๋‹ค๊ณ  ํ•˜๋„ค์š”.

่ฒป็”จ(๋น„์šฉ) ้ข(๋ฉด)์—์„œ๋Š” ๅฐ่ฆๆจก(์†Œ๊ทœ๋ชจ) ์ธ์Šคํ„ด์Šค๋Š” Cloudflare ็„กๆ–™(๋ฌด๋ฃŒ) ํ”Œ๋žœ, ์กฐ๊ธˆ ๋” ํฐ ่ฆๆจก(๊ทœ๋ชจ)๋Š” ๆœˆ(์›”) $5 ํ”Œ๋žœ์œผ๋กœ ๅ ช็•ถ(๊ฐ๋‹น)ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒŒ ็›ฎๆจ™(๋ชฉํ‘œ)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์•„์ง ๅˆๆœŸ(์ดˆ๊ธฐ) ๋ฒ„์ „์ด๋ผ ๆœชๅ…ท้กฏ(๋ฏธ๊ตฌํ˜„) ๆฉŸ่ƒฝ(๊ธฐ๋Šฅ)์ด ๋งŽ๊ณ , Mastodon ๋ฐ Misskey API ไบ’ๆ›(ํ˜ธํ™˜)์€ ้•ทๆœŸ(์žฅ๊ธฐ) ็›ฎๆจ™(๋ชฉํ‘œ)๋กœ ๋ณด๊ณ  ์žˆ๋‹ค๋„ค์š”.

Fedify๋ฅผ ์จ์ฃผ์‹œ๋Š” ๋ถ„์ด๋ผ ๋ฐ˜๊ฐ‘๊ธฐ๋„ ํ•˜๊ณ , ๆ‡‰ๆด(์‘์›)ํ•˜๊ณ  ์‹ถ์–ด ็ดนไป‹(์†Œ๊ฐœ)ํ•ฉ๋‹ˆ๋‹ค.

์†Œ์Šค ์ฝ”๋“œ๋Š” AGPL 3.0์œผ๋กœ GitHub์— ๊ณต๊ฐœ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

github.com

GitHub - SJang1/siliconbeest: Fediverse in Cloudflare Workers + live serverless code

Fediverse in Cloudflare Workers + live serverless code - SJang1/siliconbeest

@siliconsjang@hackers.pub

์•ˆ๋…•ํ•˜์„ธ์š”! Hello everyone!

SiliconBeest v1.0.0 ๊ณต๊ฐœ

๋งˆ์Šคํ† ๋ˆ API ํ˜ธํ™˜์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” Cloudflare ์—ฃ์ง€ ์ปดํ“จํŒ… ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ฆฌ์Šค ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด, SiliconBeest v1.0.0์„ ๊ณต๊ฐœํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

I'm pleased to announce SiliconBeest v1.0.0, a serverless fediverse software project built on Cloudflare edge computing, aiming for Mastodon API compatibility.

SiliconBeest Logo - a wildebeest with silicon on it


์„ค๋ช… (Description)

ko

  • SiliconBeest๋Š” Cloudflare Workers ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
  • Cloudflare ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋‹ค์ˆ˜์˜ ์—ฐํ•ฉ์šฐ์ฃผ ์„œ๋ฒ„๊ฐ€ ํ•จ๊ป˜ ์ ‘์† ๋ถˆ๊ฐ€ ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ณด๋ฉฐ, ์—ฐํ•ฉ์šฐ์ฃผ ์—ญ์‹œ Cloudflare ์ธํ”„๋ผ์— ์ƒ๋‹นํžˆ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์— ์ฐฉ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž๋Š” ์ƒ๊ฐ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Cloudflare Inc.์—์„œ ๊ฐœ๋ฐœํ–ˆ๋˜ Wildebeest ํ”„๋กœ์ ํŠธ์˜ ์•„์ด๋””์–ด์™€ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ ์ œ ๋‹‰๋„ค์ž„์ธ silicon(sjang) ์ด๋ž‘ Cloudflare์˜ Wildebeest๋ฅผ ์กฐํ•ฉํ•ด SiliconBeest๋กœ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ ์€ ์‚ฌ์šฉ์ž ์ˆ˜์™€ ์ž‘์€ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์„ ๊ธฐ์ค€์œผ๋กœ๋Š” Cloudflare ๋ฌด๋ฃŒ ํ”Œ๋žœ์—์„œ๋„ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์กฐ๊ธˆ ๋” ํฐ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์—์„œ๋Š” ์›” $5 ํ”Œ๋žœ์œผ๋กœ๋„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • API ์ธก๋ฉด์—์„œ SiliconBeest์˜ ๋ชฉํ‘œ๋Š” Mastodon ๋ฐ Misskey API์™€์˜ ํ˜ธํ™˜์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๋ก ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๊ณผ ์‹ค์ œ ๊ตฌํ˜„์€ ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ๋ถ€๋ถ„์€ ์•„์ง ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ๋กœ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

en

  • SiliconBeest is a fediverse project designed to run on Cloudflare Workers.
  • After seeing many fediverse servers become unavailable when Cloudflare had outages, I realized that the fediverse already relies heavily on Cloudflare infrastructure.
  • So I thought: why not build fediverse software directly on top of Cloudflare?
  • This project was inspired by Cloudflare Inc.โ€™s Wildebeest project, and it also references some of its ideas and code.
  • The project name, SiliconBeest, comes from my nickname silicon(sjang) combined with Cloudflareโ€™s Wildebeest.
  • Iโ€™m still working on making it as inexpensive to run as possible. For now, the goal is to support a small number of users with a small federation footprint on the free plan, and a medium federation footprint on the $5 plan.
  • From an API perspective, SiliconBeest aims to be compatible with both Mastodon and Misskey APIs. However, as many people know, full compatibility is difficult in practice, so this remains a long-term goal rather than something fully implemented today.

์•„์ง์€ ์ดˆ๊ธฐ ๋ฒ„์ „์ด๋ผ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„๋„ ๋งŽ์ง€๋งŒ, Cloudflare Workers, D1, R2, Queues ๋“ฑ Cloudflare์˜ ์„œ๋ฒ„๋ฆฌ์Šค ์ธํ”„๋ผ ์œ„์—์„œ ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์–ผ๋งˆ๋‚˜ ๊ฐ€๋ณ๊ณ  ์ €๋ ดํ•˜๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‹คํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

This is still an early version, and many parts are not implemented yet. However, SiliconBeest is an experiment in how lightweight and affordable fediverse software can be when built on top of Cloudflareโ€™s serverless infrastructure, such as Workers, D1, R2, and Queues.

ํ˜„์žฌ v1.0.0์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋จผ์ € ์ •๋ฆฌํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ–ˆ์œผ๋ฉฐ, ์•ž์œผ๋กœ Mastodon API ํ˜ธํ™˜์„ฑ, federation ์•ˆ์ •์„ฑ, ๊ด€๋ฆฌ ๋„๊ตฌ, ๋ฌธ์„œํ™” ๋“ฑ์„ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•ด๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

In v1.0.0, I focused on organizing the basic architecture and core functionality first. Going forward, I plan to gradually improve Mastodon API compatibility, federation stability, admin tooling, and documentation.

๊ด€์‹ฌ ์žˆ์œผ์‹  ๋ถ„๋“ค์€ GitHub ์ €์žฅ์†Œ๋ฅผ ํ™•์ธํ•ด์ฃผ์‹œ๊ณ , ์ด์Šˆ๋‚˜ ํ”ผ๋“œ๋ฐฑ๋„ ์–ธ์ œ๋“  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

If youโ€™re interested, please check out the GitHub repository. Issues, feedback, and suggestions are always welcome.

https://github.com/SJang1/siliconbeest


์„ค์น˜ ๋ฐ ๋ฐฐํฌ ๋ฐฉ๋ฒ• (Installation and Deployment)

SiliconBeest๋Š” GitHub ํ…œํ”Œ๋ฆฟ๊ณผ Cloudflare๋ฅผ ์ด์šฉํ•ด ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GitHub ํ…œํ”Œ๋ฆฟ์—์„œ ์ƒˆ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Cloudflare์—์„œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค์™€ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Cloudflare API ํ† ํฐ๊ณผ ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ GitHub Secrets์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  4. GitHub Actions๋ฅผ ํ†ตํ•ด ์ž๋™ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ธ์Šคํ„ด์Šค ์„ค์ •์„ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์„ค์น˜ ๊ณผ์ •์€ ๊ณ„์† ๋‹ค๋“ฌ๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐœ์„ ์‚ฌํ•ญ์ด ๋งŽ์Œ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”ํ›„ ๋ณด๊ฐ•ํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ด๋ฉฐ, ์ด์— ๋Œ€ํ•œ PR๋„ ํ™˜์˜์ž…๋‹ˆ๋‹ค.

SiliconBeest can be deployed relatively easily using a GitHub template and Cloudflare.

  1. Create a new repository from the GitHub template.
  2. Set up the required resources and environment on Cloudflare.
  3. Store the Cloudflare API token and required environment variables in GitHub Secrets.
  4. Deploy automatically using GitHub Actions.
  5. Once deployment is complete, finish configuring your instance.

The installation process is still being refined, and Iโ€™m aware that there is plenty of room for improvement. I plan to keep improving the documentation and deployment flow over time, and related PRs are always welcome.

็Ÿฅไบบ(์ง€์ธ)์ธ @siliconsjang ๋‹˜์ด ์˜ค๋Š˜ SiliconBeest v1.0.0์„ ๅ…ฌ้–‹(๊ณต๊ฐœ)ํ–ˆ์Šต๋‹ˆ๋‹ค. Fedify์™€ Cloudflare๋ฅผ ๅŸบ็›ค(๊ธฐ๋ฐ˜)์œผ๋กœ ๋งŒ๋“  ์†Œํ”„ํŠธ์›จ์–ด์ธ๋ฐ, Workers, D1, R2, Queues ๋“ฑ ์„œ๋ฒ„๋ฆฌ์Šค ์Šคํƒ ์œ„์—์„œ ๅ…จ้ƒจ(์ „๋ถ€) ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

็™ผๆƒณ(๋ฐœ์ƒ)์˜ ๅ‡บ็™ผ้ปž(์ถœ๋ฐœ์ )์ด ์žฌ๋ฐŒ์Šต๋‹ˆ๋‹ค. Cloudflare ้šœ็ค™(์žฅ์• ) ๋•Œ ่ฏๅˆๅฎ‡ๅฎ™(์—ฐํ•ฉ์šฐ์ฃผ) ์„œ๋ฒ„๋“ค์ด ๋ฉ๋‹ฌ์•„ ๋‹ค์šด๋˜๋Š” ๊ฑธ ๋ณด๊ณ , ใ€Œ๊ทธ๋Ÿผ ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋Œ๋ฆฌ๋ฉด ๋˜์ง€ ์•Š๋‚˜?」๋ผ๋Š” ์ƒ๊ฐ์—์„œ ๅง‹ไฝœ(์‹œ์ž‘)ํ–ˆ๋‹ค๊ณ  ํ•˜๋„ค์š”.

่ฒป็”จ(๋น„์šฉ) ้ข(๋ฉด)์—์„œ๋Š” ๅฐ่ฆๆจก(์†Œ๊ทœ๋ชจ) ์ธ์Šคํ„ด์Šค๋Š” Cloudflare ็„กๆ–™(๋ฌด๋ฃŒ) ํ”Œ๋žœ, ์กฐ๊ธˆ ๋” ํฐ ่ฆๆจก(๊ทœ๋ชจ)๋Š” ๆœˆ(์›”) $5 ํ”Œ๋žœ์œผ๋กœ ๅ ช็•ถ(๊ฐ๋‹น)ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒŒ ็›ฎๆจ™(๋ชฉํ‘œ)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์•„์ง ๅˆๆœŸ(์ดˆ๊ธฐ) ๋ฒ„์ „์ด๋ผ ๆœชๅ…ท้กฏ(๋ฏธ๊ตฌํ˜„) ๆฉŸ่ƒฝ(๊ธฐ๋Šฅ)์ด ๋งŽ๊ณ , Mastodon ๋ฐ Misskey API ไบ’ๆ›(ํ˜ธํ™˜)์€ ้•ทๆœŸ(์žฅ๊ธฐ) ็›ฎๆจ™(๋ชฉํ‘œ)๋กœ ๋ณด๊ณ  ์žˆ๋‹ค๋„ค์š”.

Fedify๋ฅผ ์จ์ฃผ์‹œ๋Š” ๋ถ„์ด๋ผ ๋ฐ˜๊ฐ‘๊ธฐ๋„ ํ•˜๊ณ , ๆ‡‰ๆด(์‘์›)ํ•˜๊ณ  ์‹ถ์–ด ็ดนไป‹(์†Œ๊ฐœ)ํ•ฉ๋‹ˆ๋‹ค.

์†Œ์Šค ์ฝ”๋“œ๋Š” AGPL 3.0์œผ๋กœ GitHub์— ๊ณต๊ฐœ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

github.com

GitHub - SJang1/siliconbeest: Fediverse in Cloudflare Workers + live serverless code

Fediverse in Cloudflare Workers + live serverless code - SJang1/siliconbeest

@siliconsjang@hackers.pub

์•ˆ๋…•ํ•˜์„ธ์š”! Hello everyone!

SiliconBeest v1.0.0 ๊ณต๊ฐœ

๋งˆ์Šคํ† ๋ˆ API ํ˜ธํ™˜์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” Cloudflare ์—ฃ์ง€ ์ปดํ“จํŒ… ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ฆฌ์Šค ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด, SiliconBeest v1.0.0์„ ๊ณต๊ฐœํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

I'm pleased to announce SiliconBeest v1.0.0, a serverless fediverse software project built on Cloudflare edge computing, aiming for Mastodon API compatibility.

SiliconBeest Logo - a wildebeest with silicon on it


์„ค๋ช… (Description)

ko

  • SiliconBeest๋Š” Cloudflare Workers ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
  • Cloudflare ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋‹ค์ˆ˜์˜ ์—ฐํ•ฉ์šฐ์ฃผ ์„œ๋ฒ„๊ฐ€ ํ•จ๊ป˜ ์ ‘์† ๋ถˆ๊ฐ€ ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ณด๋ฉฐ, ์—ฐํ•ฉ์šฐ์ฃผ ์—ญ์‹œ Cloudflare ์ธํ”„๋ผ์— ์ƒ๋‹นํžˆ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์— ์ฐฉ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž๋Š” ์ƒ๊ฐ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Cloudflare Inc.์—์„œ ๊ฐœ๋ฐœํ–ˆ๋˜ Wildebeest ํ”„๋กœ์ ํŠธ์˜ ์•„์ด๋””์–ด์™€ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ ์ œ ๋‹‰๋„ค์ž„์ธ silicon(sjang) ์ด๋ž‘ Cloudflare์˜ Wildebeest๋ฅผ ์กฐํ•ฉํ•ด SiliconBeest๋กœ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ ์€ ์‚ฌ์šฉ์ž ์ˆ˜์™€ ์ž‘์€ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์„ ๊ธฐ์ค€์œผ๋กœ๋Š” Cloudflare ๋ฌด๋ฃŒ ํ”Œ๋žœ์—์„œ๋„ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์กฐ๊ธˆ ๋” ํฐ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์—์„œ๋Š” ์›” $5 ํ”Œ๋žœ์œผ๋กœ๋„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • API ์ธก๋ฉด์—์„œ SiliconBeest์˜ ๋ชฉํ‘œ๋Š” Mastodon ๋ฐ Misskey API์™€์˜ ํ˜ธํ™˜์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๋ก ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๊ณผ ์‹ค์ œ ๊ตฌํ˜„์€ ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ๋ถ€๋ถ„์€ ์•„์ง ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ๋กœ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

en

  • SiliconBeest is a fediverse project designed to run on Cloudflare Workers.
  • After seeing many fediverse servers become unavailable when Cloudflare had outages, I realized that the fediverse already relies heavily on Cloudflare infrastructure.
  • So I thought: why not build fediverse software directly on top of Cloudflare?
  • This project was inspired by Cloudflare Inc.โ€™s Wildebeest project, and it also references some of its ideas and code.
  • The project name, SiliconBeest, comes from my nickname silicon(sjang) combined with Cloudflareโ€™s Wildebeest.
  • Iโ€™m still working on making it as inexpensive to run as possible. For now, the goal is to support a small number of users with a small federation footprint on the free plan, and a medium federation footprint on the $5 plan.
  • From an API perspective, SiliconBeest aims to be compatible with both Mastodon and Misskey APIs. However, as many people know, full compatibility is difficult in practice, so this remains a long-term goal rather than something fully implemented today.

์•„์ง์€ ์ดˆ๊ธฐ ๋ฒ„์ „์ด๋ผ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„๋„ ๋งŽ์ง€๋งŒ, Cloudflare Workers, D1, R2, Queues ๋“ฑ Cloudflare์˜ ์„œ๋ฒ„๋ฆฌ์Šค ์ธํ”„๋ผ ์œ„์—์„œ ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์–ผ๋งˆ๋‚˜ ๊ฐ€๋ณ๊ณ  ์ €๋ ดํ•˜๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‹คํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

This is still an early version, and many parts are not implemented yet. However, SiliconBeest is an experiment in how lightweight and affordable fediverse software can be when built on top of Cloudflareโ€™s serverless infrastructure, such as Workers, D1, R2, and Queues.

ํ˜„์žฌ v1.0.0์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋จผ์ € ์ •๋ฆฌํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ–ˆ์œผ๋ฉฐ, ์•ž์œผ๋กœ Mastodon API ํ˜ธํ™˜์„ฑ, federation ์•ˆ์ •์„ฑ, ๊ด€๋ฆฌ ๋„๊ตฌ, ๋ฌธ์„œํ™” ๋“ฑ์„ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•ด๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

In v1.0.0, I focused on organizing the basic architecture and core functionality first. Going forward, I plan to gradually improve Mastodon API compatibility, federation stability, admin tooling, and documentation.

๊ด€์‹ฌ ์žˆ์œผ์‹  ๋ถ„๋“ค์€ GitHub ์ €์žฅ์†Œ๋ฅผ ํ™•์ธํ•ด์ฃผ์‹œ๊ณ , ์ด์Šˆ๋‚˜ ํ”ผ๋“œ๋ฐฑ๋„ ์–ธ์ œ๋“  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

If youโ€™re interested, please check out the GitHub repository. Issues, feedback, and suggestions are always welcome.

https://github.com/SJang1/siliconbeest


์„ค์น˜ ๋ฐ ๋ฐฐํฌ ๋ฐฉ๋ฒ• (Installation and Deployment)

SiliconBeest๋Š” GitHub ํ…œํ”Œ๋ฆฟ๊ณผ Cloudflare๋ฅผ ์ด์šฉํ•ด ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GitHub ํ…œํ”Œ๋ฆฟ์—์„œ ์ƒˆ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Cloudflare์—์„œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค์™€ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Cloudflare API ํ† ํฐ๊ณผ ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ GitHub Secrets์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  4. GitHub Actions๋ฅผ ํ†ตํ•ด ์ž๋™ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ธ์Šคํ„ด์Šค ์„ค์ •์„ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์„ค์น˜ ๊ณผ์ •์€ ๊ณ„์† ๋‹ค๋“ฌ๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐœ์„ ์‚ฌํ•ญ์ด ๋งŽ์Œ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”ํ›„ ๋ณด๊ฐ•ํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ด๋ฉฐ, ์ด์— ๋Œ€ํ•œ PR๋„ ํ™˜์˜์ž…๋‹ˆ๋‹ค.

SiliconBeest can be deployed relatively easily using a GitHub template and Cloudflare.

  1. Create a new repository from the GitHub template.
  2. Set up the required resources and environment on Cloudflare.
  3. Store the Cloudflare API token and required environment variables in GitHub Secrets.
  4. Deploy automatically using GitHub Actions.
  5. Once deployment is complete, finish configuring your instance.

The installation process is still being refined, and Iโ€™m aware that there is plenty of room for improvement. I plan to keep improving the documentation and deployment flow over time, and related PRs are always welcome.

็Ÿฅไบบ(์ง€์ธ)์ธ @siliconsjang ๋‹˜์ด ์˜ค๋Š˜ SiliconBeest v1.0.0์„ ๅ…ฌ้–‹(๊ณต๊ฐœ)ํ–ˆ์Šต๋‹ˆ๋‹ค. Fedify์™€ Cloudflare๋ฅผ ๅŸบ็›ค(๊ธฐ๋ฐ˜)์œผ๋กœ ๋งŒ๋“  ์†Œํ”„ํŠธ์›จ์–ด์ธ๋ฐ, Workers, D1, R2, Queues ๋“ฑ ์„œ๋ฒ„๋ฆฌ์Šค ์Šคํƒ ์œ„์—์„œ ๅ…จ้ƒจ(์ „๋ถ€) ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

็™ผๆƒณ(๋ฐœ์ƒ)์˜ ๅ‡บ็™ผ้ปž(์ถœ๋ฐœ์ )์ด ์žฌ๋ฐŒ์Šต๋‹ˆ๋‹ค. Cloudflare ้šœ็ค™(์žฅ์• ) ๋•Œ ่ฏๅˆๅฎ‡ๅฎ™(์—ฐํ•ฉ์šฐ์ฃผ) ์„œ๋ฒ„๋“ค์ด ๋ฉ๋‹ฌ์•„ ๋‹ค์šด๋˜๋Š” ๊ฑธ ๋ณด๊ณ , ใ€Œ๊ทธ๋Ÿผ ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋Œ๋ฆฌ๋ฉด ๋˜์ง€ ์•Š๋‚˜?」๋ผ๋Š” ์ƒ๊ฐ์—์„œ ๅง‹ไฝœ(์‹œ์ž‘)ํ–ˆ๋‹ค๊ณ  ํ•˜๋„ค์š”.

่ฒป็”จ(๋น„์šฉ) ้ข(๋ฉด)์—์„œ๋Š” ๅฐ่ฆๆจก(์†Œ๊ทœ๋ชจ) ์ธ์Šคํ„ด์Šค๋Š” Cloudflare ็„กๆ–™(๋ฌด๋ฃŒ) ํ”Œ๋žœ, ์กฐ๊ธˆ ๋” ํฐ ่ฆๆจก(๊ทœ๋ชจ)๋Š” ๆœˆ(์›”) $5 ํ”Œ๋žœ์œผ๋กœ ๅ ช็•ถ(๊ฐ๋‹น)ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒŒ ็›ฎๆจ™(๋ชฉํ‘œ)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์•„์ง ๅˆๆœŸ(์ดˆ๊ธฐ) ๋ฒ„์ „์ด๋ผ ๆœชๅ…ท้กฏ(๋ฏธ๊ตฌํ˜„) ๆฉŸ่ƒฝ(๊ธฐ๋Šฅ)์ด ๋งŽ๊ณ , Mastodon ๋ฐ Misskey API ไบ’ๆ›(ํ˜ธํ™˜)์€ ้•ทๆœŸ(์žฅ๊ธฐ) ็›ฎๆจ™(๋ชฉํ‘œ)๋กœ ๋ณด๊ณ  ์žˆ๋‹ค๋„ค์š”.

Fedify๋ฅผ ์จ์ฃผ์‹œ๋Š” ๋ถ„์ด๋ผ ๋ฐ˜๊ฐ‘๊ธฐ๋„ ํ•˜๊ณ , ๆ‡‰ๆด(์‘์›)ํ•˜๊ณ  ์‹ถ์–ด ็ดนไป‹(์†Œ๊ฐœ)ํ•ฉ๋‹ˆ๋‹ค.

์†Œ์Šค ์ฝ”๋“œ๋Š” AGPL 3.0์œผ๋กœ GitHub์— ๊ณต๊ฐœ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

github.com

GitHub - SJang1/siliconbeest: Fediverse in Cloudflare Workers + live serverless code

Fediverse in Cloudflare Workers + live serverless code - SJang1/siliconbeest

@siliconsjang@hackers.pub

์•ˆ๋…•ํ•˜์„ธ์š”! Hello everyone!

SiliconBeest v1.0.0 ๊ณต๊ฐœ

๋งˆ์Šคํ† ๋ˆ API ํ˜ธํ™˜์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” Cloudflare ์—ฃ์ง€ ์ปดํ“จํŒ… ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ฆฌ์Šค ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด, SiliconBeest v1.0.0์„ ๊ณต๊ฐœํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

I'm pleased to announce SiliconBeest v1.0.0, a serverless fediverse software project built on Cloudflare edge computing, aiming for Mastodon API compatibility.

SiliconBeest Logo - a wildebeest with silicon on it


์„ค๋ช… (Description)

ko

  • SiliconBeest๋Š” Cloudflare Workers ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
  • Cloudflare ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋‹ค์ˆ˜์˜ ์—ฐํ•ฉ์šฐ์ฃผ ์„œ๋ฒ„๊ฐ€ ํ•จ๊ป˜ ์ ‘์† ๋ถˆ๊ฐ€ ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ณด๋ฉฐ, ์—ฐํ•ฉ์šฐ์ฃผ ์—ญ์‹œ Cloudflare ์ธํ”„๋ผ์— ์ƒ๋‹นํžˆ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์— ์ฐฉ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž๋Š” ์ƒ๊ฐ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Cloudflare Inc.์—์„œ ๊ฐœ๋ฐœํ–ˆ๋˜ Wildebeest ํ”„๋กœ์ ํŠธ์˜ ์•„์ด๋””์–ด์™€ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ ์ œ ๋‹‰๋„ค์ž„์ธ silicon(sjang) ์ด๋ž‘ Cloudflare์˜ Wildebeest๋ฅผ ์กฐํ•ฉํ•ด SiliconBeest๋กœ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ ์€ ์‚ฌ์šฉ์ž ์ˆ˜์™€ ์ž‘์€ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์„ ๊ธฐ์ค€์œผ๋กœ๋Š” Cloudflare ๋ฌด๋ฃŒ ํ”Œ๋žœ์—์„œ๋„ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์กฐ๊ธˆ ๋” ํฐ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์—์„œ๋Š” ์›” $5 ํ”Œ๋žœ์œผ๋กœ๋„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • API ์ธก๋ฉด์—์„œ SiliconBeest์˜ ๋ชฉํ‘œ๋Š” Mastodon ๋ฐ Misskey API์™€์˜ ํ˜ธํ™˜์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๋ก ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๊ณผ ์‹ค์ œ ๊ตฌํ˜„์€ ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ๋ถ€๋ถ„์€ ์•„์ง ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ๋กœ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

en

  • SiliconBeest is a fediverse project designed to run on Cloudflare Workers.
  • After seeing many fediverse servers become unavailable when Cloudflare had outages, I realized that the fediverse already relies heavily on Cloudflare infrastructure.
  • So I thought: why not build fediverse software directly on top of Cloudflare?
  • This project was inspired by Cloudflare Inc.โ€™s Wildebeest project, and it also references some of its ideas and code.
  • The project name, SiliconBeest, comes from my nickname silicon(sjang) combined with Cloudflareโ€™s Wildebeest.
  • Iโ€™m still working on making it as inexpensive to run as possible. For now, the goal is to support a small number of users with a small federation footprint on the free plan, and a medium federation footprint on the $5 plan.
  • From an API perspective, SiliconBeest aims to be compatible with both Mastodon and Misskey APIs. However, as many people know, full compatibility is difficult in practice, so this remains a long-term goal rather than something fully implemented today.

์•„์ง์€ ์ดˆ๊ธฐ ๋ฒ„์ „์ด๋ผ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„๋„ ๋งŽ์ง€๋งŒ, Cloudflare Workers, D1, R2, Queues ๋“ฑ Cloudflare์˜ ์„œ๋ฒ„๋ฆฌ์Šค ์ธํ”„๋ผ ์œ„์—์„œ ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์–ผ๋งˆ๋‚˜ ๊ฐ€๋ณ๊ณ  ์ €๋ ดํ•˜๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‹คํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

This is still an early version, and many parts are not implemented yet. However, SiliconBeest is an experiment in how lightweight and affordable fediverse software can be when built on top of Cloudflareโ€™s serverless infrastructure, such as Workers, D1, R2, and Queues.

ํ˜„์žฌ v1.0.0์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋จผ์ € ์ •๋ฆฌํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ–ˆ์œผ๋ฉฐ, ์•ž์œผ๋กœ Mastodon API ํ˜ธํ™˜์„ฑ, federation ์•ˆ์ •์„ฑ, ๊ด€๋ฆฌ ๋„๊ตฌ, ๋ฌธ์„œํ™” ๋“ฑ์„ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•ด๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

In v1.0.0, I focused on organizing the basic architecture and core functionality first. Going forward, I plan to gradually improve Mastodon API compatibility, federation stability, admin tooling, and documentation.

๊ด€์‹ฌ ์žˆ์œผ์‹  ๋ถ„๋“ค์€ GitHub ์ €์žฅ์†Œ๋ฅผ ํ™•์ธํ•ด์ฃผ์‹œ๊ณ , ์ด์Šˆ๋‚˜ ํ”ผ๋“œ๋ฐฑ๋„ ์–ธ์ œ๋“  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

If youโ€™re interested, please check out the GitHub repository. Issues, feedback, and suggestions are always welcome.

https://github.com/SJang1/siliconbeest


์„ค์น˜ ๋ฐ ๋ฐฐํฌ ๋ฐฉ๋ฒ• (Installation and Deployment)

SiliconBeest๋Š” GitHub ํ…œํ”Œ๋ฆฟ๊ณผ Cloudflare๋ฅผ ์ด์šฉํ•ด ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GitHub ํ…œํ”Œ๋ฆฟ์—์„œ ์ƒˆ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Cloudflare์—์„œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค์™€ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Cloudflare API ํ† ํฐ๊ณผ ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ GitHub Secrets์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  4. GitHub Actions๋ฅผ ํ†ตํ•ด ์ž๋™ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ธ์Šคํ„ด์Šค ์„ค์ •์„ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์„ค์น˜ ๊ณผ์ •์€ ๊ณ„์† ๋‹ค๋“ฌ๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐœ์„ ์‚ฌํ•ญ์ด ๋งŽ์Œ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”ํ›„ ๋ณด๊ฐ•ํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ด๋ฉฐ, ์ด์— ๋Œ€ํ•œ PR๋„ ํ™˜์˜์ž…๋‹ˆ๋‹ค.

SiliconBeest can be deployed relatively easily using a GitHub template and Cloudflare.

  1. Create a new repository from the GitHub template.
  2. Set up the required resources and environment on Cloudflare.
  3. Store the Cloudflare API token and required environment variables in GitHub Secrets.
  4. Deploy automatically using GitHub Actions.
  5. Once deployment is complete, finish configuring your instance.

The installation process is still being refined, and Iโ€™m aware that there is plenty of room for improvement. I plan to keep improving the documentation and deployment flow over time, and related PRs are always welcome.

็Ÿฅใ‚Šๅˆใ„ใฎ @siliconsjang ใ•ใ‚“ใŒไปŠๆ—ฅใ€SiliconBeest v1.0.0 ใ‚’ๅ…ฌ้–‹ใ—ใพใ—ใŸใ€‚Cloudflare Workersใ€D1ใ€R2ใ€Queuesใ ใ‘ใงๅ‹•ใใƒ•ใ‚งใƒ‡ใ‚ฃใƒใƒผใ‚นใ‚ตใƒผใƒใƒผใงใ€Fedifyใ‚’ไฝฟใฃใฆใใ‚Œใฆใ„ใพใ™ใ€‚

ๅ€‹ไบบ็š„ใซ้ข็™ฝใ„ใจๆ€ใฃใŸใฎใฏๅ‡บ็™บ็‚นใงใ€Cloudflare้šœๅฎณใฎใŸใณใซใƒ•ใ‚งใƒ‡ใ‚ฃใƒใƒผใ‚นใฎใ‚ตใƒผใƒใƒผใŒใพใจใ‚ใฆ่ฝใกใ‚‹ใฎใ‚’่ฆ‹ใฆใ€ใ€Œใใ‚Œใชใ‚‰ใ„ใฃใCloudflareใฎไธŠใงๅ‹•ใ‹ใ›ใฐใ‚ˆใ„ใฎใงใฏใ€ใจๆ€ใฃใŸใฎใŒๅง‹ใพใ‚Šใ ใใ†ใงใ™ใ€‚

ๅฐ่ฆๆจกใชใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใชใ‚‰Cloudflareใฎ็„กๆ–™ใƒ—ใƒฉใƒณใงใ€ๅฐ‘ใ—ๅคงใใใชใฃใฆใ‚‚ๆœˆ5ใƒ‰ใƒซใใ‚‰ใ„ใง้‹ๅ–ถใงใใ‚‹ใ“ใจใ‚’็›ฎๆŒ‡ใ—ใฆใ„ใ‚‹ใจใฎใ“ใจใ€‚ใพใ ๅˆๆœŸใƒใƒผใ‚ธใƒงใƒณใชใฎใงๆœชๅฎŸ่ฃ…ใฎ้ƒจๅˆ†ใ‚‚ๅคšใใ€Mastodonใ‚„Misskey APIใจใฎไบ’ๆ›ๆ€งใฏๆœชใ ๅ…ˆใฎ็›ฎๆจ™ใฟใŸใ„ใงใ™ใ€‚

Fedifyใ‚’ไฝฟใฃใฆใใ‚Œใฆใ„ใ‚‹ใฎใ‚‚ใ‚ใฃใฆใ€ๅ€‹ไบบ็š„ใซๅฌ‰ใ—ใ„ใงใ™ใ€‚ๆฐ—ใซใชใฃใŸใฎใงๅ…ฑๆœ‰ใ—ใพใ™ใ€‚

ใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใฏAGPL 3.0ใงGitHubใงๅ…ฌ้–‹ใ•ใ‚Œใฆใ„ใพใ™ใ€‚

github.com

GitHub - SJang1/siliconbeest: Fediverse in Cloudflare Workers + live serverless code

Fediverse in Cloudflare Workers + live serverless code - SJang1/siliconbeest

@siliconsjang@hackers.pub

์•ˆ๋…•ํ•˜์„ธ์š”! Hello everyone!

SiliconBeest v1.0.0 ๊ณต๊ฐœ

๋งˆ์Šคํ† ๋ˆ API ํ˜ธํ™˜์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” Cloudflare ์—ฃ์ง€ ์ปดํ“จํŒ… ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ฆฌ์Šค ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด, SiliconBeest v1.0.0์„ ๊ณต๊ฐœํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

I'm pleased to announce SiliconBeest v1.0.0, a serverless fediverse software project built on Cloudflare edge computing, aiming for Mastodon API compatibility.

SiliconBeest Logo - a wildebeest with silicon on it


์„ค๋ช… (Description)

ko

  • SiliconBeest๋Š” Cloudflare Workers ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
  • Cloudflare ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋‹ค์ˆ˜์˜ ์—ฐํ•ฉ์šฐ์ฃผ ์„œ๋ฒ„๊ฐ€ ํ•จ๊ป˜ ์ ‘์† ๋ถˆ๊ฐ€ ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ณด๋ฉฐ, ์—ฐํ•ฉ์šฐ์ฃผ ์—ญ์‹œ Cloudflare ์ธํ”„๋ผ์— ์ƒ๋‹นํžˆ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์— ์ฐฉ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž๋Š” ์ƒ๊ฐ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Cloudflare Inc.์—์„œ ๊ฐœ๋ฐœํ–ˆ๋˜ Wildebeest ํ”„๋กœ์ ํŠธ์˜ ์•„์ด๋””์–ด์™€ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ ์ œ ๋‹‰๋„ค์ž„์ธ silicon(sjang) ์ด๋ž‘ Cloudflare์˜ Wildebeest๋ฅผ ์กฐํ•ฉํ•ด SiliconBeest๋กœ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ ์€ ์‚ฌ์šฉ์ž ์ˆ˜์™€ ์ž‘์€ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์„ ๊ธฐ์ค€์œผ๋กœ๋Š” Cloudflare ๋ฌด๋ฃŒ ํ”Œ๋žœ์—์„œ๋„ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์กฐ๊ธˆ ๋” ํฐ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์—์„œ๋Š” ์›” $5 ํ”Œ๋žœ์œผ๋กœ๋„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • API ์ธก๋ฉด์—์„œ SiliconBeest์˜ ๋ชฉํ‘œ๋Š” Mastodon ๋ฐ Misskey API์™€์˜ ํ˜ธํ™˜์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๋ก ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๊ณผ ์‹ค์ œ ๊ตฌํ˜„์€ ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ๋ถ€๋ถ„์€ ์•„์ง ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ๋กœ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

en

  • SiliconBeest is a fediverse project designed to run on Cloudflare Workers.
  • After seeing many fediverse servers become unavailable when Cloudflare had outages, I realized that the fediverse already relies heavily on Cloudflare infrastructure.
  • So I thought: why not build fediverse software directly on top of Cloudflare?
  • This project was inspired by Cloudflare Inc.โ€™s Wildebeest project, and it also references some of its ideas and code.
  • The project name, SiliconBeest, comes from my nickname silicon(sjang) combined with Cloudflareโ€™s Wildebeest.
  • Iโ€™m still working on making it as inexpensive to run as possible. For now, the goal is to support a small number of users with a small federation footprint on the free plan, and a medium federation footprint on the $5 plan.
  • From an API perspective, SiliconBeest aims to be compatible with both Mastodon and Misskey APIs. However, as many people know, full compatibility is difficult in practice, so this remains a long-term goal rather than something fully implemented today.

์•„์ง์€ ์ดˆ๊ธฐ ๋ฒ„์ „์ด๋ผ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„๋„ ๋งŽ์ง€๋งŒ, Cloudflare Workers, D1, R2, Queues ๋“ฑ Cloudflare์˜ ์„œ๋ฒ„๋ฆฌ์Šค ์ธํ”„๋ผ ์œ„์—์„œ ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์–ผ๋งˆ๋‚˜ ๊ฐ€๋ณ๊ณ  ์ €๋ ดํ•˜๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‹คํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

This is still an early version, and many parts are not implemented yet. However, SiliconBeest is an experiment in how lightweight and affordable fediverse software can be when built on top of Cloudflareโ€™s serverless infrastructure, such as Workers, D1, R2, and Queues.

ํ˜„์žฌ v1.0.0์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋จผ์ € ์ •๋ฆฌํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ–ˆ์œผ๋ฉฐ, ์•ž์œผ๋กœ Mastodon API ํ˜ธํ™˜์„ฑ, federation ์•ˆ์ •์„ฑ, ๊ด€๋ฆฌ ๋„๊ตฌ, ๋ฌธ์„œํ™” ๋“ฑ์„ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•ด๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

In v1.0.0, I focused on organizing the basic architecture and core functionality first. Going forward, I plan to gradually improve Mastodon API compatibility, federation stability, admin tooling, and documentation.

๊ด€์‹ฌ ์žˆ์œผ์‹  ๋ถ„๋“ค์€ GitHub ์ €์žฅ์†Œ๋ฅผ ํ™•์ธํ•ด์ฃผ์‹œ๊ณ , ์ด์Šˆ๋‚˜ ํ”ผ๋“œ๋ฐฑ๋„ ์–ธ์ œ๋“  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

If youโ€™re interested, please check out the GitHub repository. Issues, feedback, and suggestions are always welcome.

https://github.com/SJang1/siliconbeest


์„ค์น˜ ๋ฐ ๋ฐฐํฌ ๋ฐฉ๋ฒ• (Installation and Deployment)

SiliconBeest๋Š” GitHub ํ…œํ”Œ๋ฆฟ๊ณผ Cloudflare๋ฅผ ์ด์šฉํ•ด ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GitHub ํ…œํ”Œ๋ฆฟ์—์„œ ์ƒˆ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Cloudflare์—์„œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค์™€ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Cloudflare API ํ† ํฐ๊ณผ ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ GitHub Secrets์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  4. GitHub Actions๋ฅผ ํ†ตํ•ด ์ž๋™ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ธ์Šคํ„ด์Šค ์„ค์ •์„ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์„ค์น˜ ๊ณผ์ •์€ ๊ณ„์† ๋‹ค๋“ฌ๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐœ์„ ์‚ฌํ•ญ์ด ๋งŽ์Œ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”ํ›„ ๋ณด๊ฐ•ํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ด๋ฉฐ, ์ด์— ๋Œ€ํ•œ PR๋„ ํ™˜์˜์ž…๋‹ˆ๋‹ค.

SiliconBeest can be deployed relatively easily using a GitHub template and Cloudflare.

  1. Create a new repository from the GitHub template.
  2. Set up the required resources and environment on Cloudflare.
  3. Store the Cloudflare API token and required environment variables in GitHub Secrets.
  4. Deploy automatically using GitHub Actions.
  5. Once deployment is complete, finish configuring your instance.

The installation process is still being refined, and Iโ€™m aware that there is plenty of room for improvement. I plan to keep improving the documentation and deployment flow over time, and related PRs are always welcome.

็Ÿฅใ‚Šๅˆใ„ใฎ @siliconsjang ใ•ใ‚“ใŒไปŠๆ—ฅใ€SiliconBeest v1.0.0 ใ‚’ๅ…ฌ้–‹ใ—ใพใ—ใŸใ€‚Cloudflare Workersใ€D1ใ€R2ใ€Queuesใ ใ‘ใงๅ‹•ใใƒ•ใ‚งใƒ‡ใ‚ฃใƒใƒผใ‚นใ‚ตใƒผใƒใƒผใงใ€Fedifyใ‚’ไฝฟใฃใฆใใ‚Œใฆใ„ใพใ™ใ€‚

ๅ€‹ไบบ็š„ใซ้ข็™ฝใ„ใจๆ€ใฃใŸใฎใฏๅ‡บ็™บ็‚นใงใ€Cloudflare้šœๅฎณใฎใŸใณใซใƒ•ใ‚งใƒ‡ใ‚ฃใƒใƒผใ‚นใฎใ‚ตใƒผใƒใƒผใŒใพใจใ‚ใฆ่ฝใกใ‚‹ใฎใ‚’่ฆ‹ใฆใ€ใ€Œใใ‚Œใชใ‚‰ใ„ใฃใCloudflareใฎไธŠใงๅ‹•ใ‹ใ›ใฐใ‚ˆใ„ใฎใงใฏใ€ใจๆ€ใฃใŸใฎใŒๅง‹ใพใ‚Šใ ใใ†ใงใ™ใ€‚

ๅฐ่ฆๆจกใชใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใชใ‚‰Cloudflareใฎ็„กๆ–™ใƒ—ใƒฉใƒณใงใ€ๅฐ‘ใ—ๅคงใใใชใฃใฆใ‚‚ๆœˆ5ใƒ‰ใƒซใใ‚‰ใ„ใง้‹ๅ–ถใงใใ‚‹ใ“ใจใ‚’็›ฎๆŒ‡ใ—ใฆใ„ใ‚‹ใจใฎใ“ใจใ€‚ใพใ ๅˆๆœŸใƒใƒผใ‚ธใƒงใƒณใชใฎใงๆœชๅฎŸ่ฃ…ใฎ้ƒจๅˆ†ใ‚‚ๅคšใใ€Mastodonใ‚„Misskey APIใจใฎไบ’ๆ›ๆ€งใฏๆœชใ ๅ…ˆใฎ็›ฎๆจ™ใฟใŸใ„ใงใ™ใ€‚

Fedifyใ‚’ไฝฟใฃใฆใใ‚Œใฆใ„ใ‚‹ใฎใ‚‚ใ‚ใฃใฆใ€ๅ€‹ไบบ็š„ใซๅฌ‰ใ—ใ„ใงใ™ใ€‚ๆฐ—ใซใชใฃใŸใฎใงๅ…ฑๆœ‰ใ—ใพใ™ใ€‚

ใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใฏAGPL 3.0ใงGitHubใงๅ…ฌ้–‹ใ•ใ‚Œใฆใ„ใพใ™ใ€‚

github.com

GitHub - SJang1/siliconbeest: Fediverse in Cloudflare Workers + live serverless code

Fediverse in Cloudflare Workers + live serverless code - SJang1/siliconbeest

@siliconsjang@hackers.pub

์•ˆ๋…•ํ•˜์„ธ์š”! Hello everyone!

SiliconBeest v1.0.0 ๊ณต๊ฐœ

๋งˆ์Šคํ† ๋ˆ API ํ˜ธํ™˜์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” Cloudflare ์—ฃ์ง€ ์ปดํ“จํŒ… ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ฆฌ์Šค ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด, SiliconBeest v1.0.0์„ ๊ณต๊ฐœํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

I'm pleased to announce SiliconBeest v1.0.0, a serverless fediverse software project built on Cloudflare edge computing, aiming for Mastodon API compatibility.

SiliconBeest Logo - a wildebeest with silicon on it


์„ค๋ช… (Description)

ko

  • SiliconBeest๋Š” Cloudflare Workers ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
  • Cloudflare ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋‹ค์ˆ˜์˜ ์—ฐํ•ฉ์šฐ์ฃผ ์„œ๋ฒ„๊ฐ€ ํ•จ๊ป˜ ์ ‘์† ๋ถˆ๊ฐ€ ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ณด๋ฉฐ, ์—ฐํ•ฉ์šฐ์ฃผ ์—ญ์‹œ Cloudflare ์ธํ”„๋ผ์— ์ƒ๋‹นํžˆ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์— ์ฐฉ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž๋Š” ์ƒ๊ฐ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Cloudflare Inc.์—์„œ ๊ฐœ๋ฐœํ–ˆ๋˜ Wildebeest ํ”„๋กœ์ ํŠธ์˜ ์•„์ด๋””์–ด์™€ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ ์ œ ๋‹‰๋„ค์ž„์ธ silicon(sjang) ์ด๋ž‘ Cloudflare์˜ Wildebeest๋ฅผ ์กฐํ•ฉํ•ด SiliconBeest๋กœ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ ์€ ์‚ฌ์šฉ์ž ์ˆ˜์™€ ์ž‘์€ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์„ ๊ธฐ์ค€์œผ๋กœ๋Š” Cloudflare ๋ฌด๋ฃŒ ํ”Œ๋žœ์—์„œ๋„ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์กฐ๊ธˆ ๋” ํฐ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์—์„œ๋Š” ์›” $5 ํ”Œ๋žœ์œผ๋กœ๋„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • API ์ธก๋ฉด์—์„œ SiliconBeest์˜ ๋ชฉํ‘œ๋Š” Mastodon ๋ฐ Misskey API์™€์˜ ํ˜ธํ™˜์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๋ก ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๊ณผ ์‹ค์ œ ๊ตฌํ˜„์€ ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ๋ถ€๋ถ„์€ ์•„์ง ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ๋กœ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

en

  • SiliconBeest is a fediverse project designed to run on Cloudflare Workers.
  • After seeing many fediverse servers become unavailable when Cloudflare had outages, I realized that the fediverse already relies heavily on Cloudflare infrastructure.
  • So I thought: why not build fediverse software directly on top of Cloudflare?
  • This project was inspired by Cloudflare Inc.โ€™s Wildebeest project, and it also references some of its ideas and code.
  • The project name, SiliconBeest, comes from my nickname silicon(sjang) combined with Cloudflareโ€™s Wildebeest.
  • Iโ€™m still working on making it as inexpensive to run as possible. For now, the goal is to support a small number of users with a small federation footprint on the free plan, and a medium federation footprint on the $5 plan.
  • From an API perspective, SiliconBeest aims to be compatible with both Mastodon and Misskey APIs. However, as many people know, full compatibility is difficult in practice, so this remains a long-term goal rather than something fully implemented today.

์•„์ง์€ ์ดˆ๊ธฐ ๋ฒ„์ „์ด๋ผ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„๋„ ๋งŽ์ง€๋งŒ, Cloudflare Workers, D1, R2, Queues ๋“ฑ Cloudflare์˜ ์„œ๋ฒ„๋ฆฌ์Šค ์ธํ”„๋ผ ์œ„์—์„œ ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์–ผ๋งˆ๋‚˜ ๊ฐ€๋ณ๊ณ  ์ €๋ ดํ•˜๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‹คํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

This is still an early version, and many parts are not implemented yet. However, SiliconBeest is an experiment in how lightweight and affordable fediverse software can be when built on top of Cloudflareโ€™s serverless infrastructure, such as Workers, D1, R2, and Queues.

ํ˜„์žฌ v1.0.0์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋จผ์ € ์ •๋ฆฌํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ–ˆ์œผ๋ฉฐ, ์•ž์œผ๋กœ Mastodon API ํ˜ธํ™˜์„ฑ, federation ์•ˆ์ •์„ฑ, ๊ด€๋ฆฌ ๋„๊ตฌ, ๋ฌธ์„œํ™” ๋“ฑ์„ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•ด๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

In v1.0.0, I focused on organizing the basic architecture and core functionality first. Going forward, I plan to gradually improve Mastodon API compatibility, federation stability, admin tooling, and documentation.

๊ด€์‹ฌ ์žˆ์œผ์‹  ๋ถ„๋“ค์€ GitHub ์ €์žฅ์†Œ๋ฅผ ํ™•์ธํ•ด์ฃผ์‹œ๊ณ , ์ด์Šˆ๋‚˜ ํ”ผ๋“œ๋ฐฑ๋„ ์–ธ์ œ๋“  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

If youโ€™re interested, please check out the GitHub repository. Issues, feedback, and suggestions are always welcome.

https://github.com/SJang1/siliconbeest


์„ค์น˜ ๋ฐ ๋ฐฐํฌ ๋ฐฉ๋ฒ• (Installation and Deployment)

SiliconBeest๋Š” GitHub ํ…œํ”Œ๋ฆฟ๊ณผ Cloudflare๋ฅผ ์ด์šฉํ•ด ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GitHub ํ…œํ”Œ๋ฆฟ์—์„œ ์ƒˆ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Cloudflare์—์„œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค์™€ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Cloudflare API ํ† ํฐ๊ณผ ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ GitHub Secrets์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  4. GitHub Actions๋ฅผ ํ†ตํ•ด ์ž๋™ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ธ์Šคํ„ด์Šค ์„ค์ •์„ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์„ค์น˜ ๊ณผ์ •์€ ๊ณ„์† ๋‹ค๋“ฌ๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐœ์„ ์‚ฌํ•ญ์ด ๋งŽ์Œ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”ํ›„ ๋ณด๊ฐ•ํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ด๋ฉฐ, ์ด์— ๋Œ€ํ•œ PR๋„ ํ™˜์˜์ž…๋‹ˆ๋‹ค.

SiliconBeest can be deployed relatively easily using a GitHub template and Cloudflare.

  1. Create a new repository from the GitHub template.
  2. Set up the required resources and environment on Cloudflare.
  3. Store the Cloudflare API token and required environment variables in GitHub Secrets.
  4. Deploy automatically using GitHub Actions.
  5. Once deployment is complete, finish configuring your instance.

The installation process is still being refined, and Iโ€™m aware that there is plenty of room for improvement. I plan to keep improving the documentation and deployment flow over time, and related PRs are always welcome.

็Ÿฅไบบ(์ง€์ธ)์ธ @siliconsjang ๋‹˜์ด ์˜ค๋Š˜ SiliconBeest v1.0.0์„ ๅ…ฌ้–‹(๊ณต๊ฐœ)ํ–ˆ์Šต๋‹ˆ๋‹ค. Fedify์™€ Cloudflare๋ฅผ ๅŸบ็›ค(๊ธฐ๋ฐ˜)์œผ๋กœ ๋งŒ๋“  ์†Œํ”„ํŠธ์›จ์–ด์ธ๋ฐ, Workers, D1, R2, Queues ๋“ฑ ์„œ๋ฒ„๋ฆฌ์Šค ์Šคํƒ ์œ„์—์„œ ๅ…จ้ƒจ(์ „๋ถ€) ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

็™ผๆƒณ(๋ฐœ์ƒ)์˜ ๅ‡บ็™ผ้ปž(์ถœ๋ฐœ์ )์ด ์žฌ๋ฐŒ์Šต๋‹ˆ๋‹ค. Cloudflare ้šœ็ค™(์žฅ์• ) ๋•Œ ่ฏๅˆๅฎ‡ๅฎ™(์—ฐํ•ฉ์šฐ์ฃผ) ์„œ๋ฒ„๋“ค์ด ๋ฉ๋‹ฌ์•„ ๋‹ค์šด๋˜๋Š” ๊ฑธ ๋ณด๊ณ , ใ€Œ๊ทธ๋Ÿผ ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋Œ๋ฆฌ๋ฉด ๋˜์ง€ ์•Š๋‚˜?」๋ผ๋Š” ์ƒ๊ฐ์—์„œ ๅง‹ไฝœ(์‹œ์ž‘)ํ–ˆ๋‹ค๊ณ  ํ•˜๋„ค์š”.

่ฒป็”จ(๋น„์šฉ) ้ข(๋ฉด)์—์„œ๋Š” ๅฐ่ฆๆจก(์†Œ๊ทœ๋ชจ) ์ธ์Šคํ„ด์Šค๋Š” Cloudflare ็„กๆ–™(๋ฌด๋ฃŒ) ํ”Œ๋žœ, ์กฐ๊ธˆ ๋” ํฐ ่ฆๆจก(๊ทœ๋ชจ)๋Š” ๆœˆ(์›”) $5 ํ”Œ๋žœ์œผ๋กœ ๅ ช็•ถ(๊ฐ๋‹น)ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒŒ ็›ฎๆจ™(๋ชฉํ‘œ)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์•„์ง ๅˆๆœŸ(์ดˆ๊ธฐ) ๋ฒ„์ „์ด๋ผ ๆœชๅ…ท้กฏ(๋ฏธ๊ตฌํ˜„) ๆฉŸ่ƒฝ(๊ธฐ๋Šฅ)์ด ๋งŽ๊ณ , Mastodon ๋ฐ Misskey API ไบ’ๆ›(ํ˜ธํ™˜)์€ ้•ทๆœŸ(์žฅ๊ธฐ) ็›ฎๆจ™(๋ชฉํ‘œ)๋กœ ๋ณด๊ณ  ์žˆ๋‹ค๋„ค์š”.

Fedify๋ฅผ ์จ์ฃผ์‹œ๋Š” ๋ถ„์ด๋ผ ๋ฐ˜๊ฐ‘๊ธฐ๋„ ํ•˜๊ณ , ๆ‡‰ๆด(์‘์›)ํ•˜๊ณ  ์‹ถ์–ด ็ดนไป‹(์†Œ๊ฐœ)ํ•ฉ๋‹ˆ๋‹ค.

์†Œ์Šค ์ฝ”๋“œ๋Š” AGPL 3.0์œผ๋กœ GitHub์— ๊ณต๊ฐœ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

github.com

GitHub - SJang1/siliconbeest: Fediverse in Cloudflare Workers + live serverless code

Fediverse in Cloudflare Workers + live serverless code - SJang1/siliconbeest

@siliconsjang@hackers.pub

์•ˆ๋…•ํ•˜์„ธ์š”! Hello everyone!

SiliconBeest v1.0.0 ๊ณต๊ฐœ

๋งˆ์Šคํ† ๋ˆ API ํ˜ธํ™˜์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” Cloudflare ์—ฃ์ง€ ์ปดํ“จํŒ… ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ฆฌ์Šค ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด, SiliconBeest v1.0.0์„ ๊ณต๊ฐœํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

I'm pleased to announce SiliconBeest v1.0.0, a serverless fediverse software project built on Cloudflare edge computing, aiming for Mastodon API compatibility.

SiliconBeest Logo - a wildebeest with silicon on it


์„ค๋ช… (Description)

ko

  • SiliconBeest๋Š” Cloudflare Workers ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
  • Cloudflare ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋‹ค์ˆ˜์˜ ์—ฐํ•ฉ์šฐ์ฃผ ์„œ๋ฒ„๊ฐ€ ํ•จ๊ป˜ ์ ‘์† ๋ถˆ๊ฐ€ ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ณด๋ฉฐ, ์—ฐํ•ฉ์šฐ์ฃผ ์—ญ์‹œ Cloudflare ์ธํ”„๋ผ์— ์ƒ๋‹นํžˆ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์— ์ฐฉ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž๋Š” ์ƒ๊ฐ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Cloudflare Inc.์—์„œ ๊ฐœ๋ฐœํ–ˆ๋˜ Wildebeest ํ”„๋กœ์ ํŠธ์˜ ์•„์ด๋””์–ด์™€ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ ์ œ ๋‹‰๋„ค์ž„์ธ silicon(sjang) ์ด๋ž‘ Cloudflare์˜ Wildebeest๋ฅผ ์กฐํ•ฉํ•ด SiliconBeest๋กœ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ ์€ ์‚ฌ์šฉ์ž ์ˆ˜์™€ ์ž‘์€ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์„ ๊ธฐ์ค€์œผ๋กœ๋Š” Cloudflare ๋ฌด๋ฃŒ ํ”Œ๋žœ์—์„œ๋„ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์กฐ๊ธˆ ๋” ํฐ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์—์„œ๋Š” ์›” $5 ํ”Œ๋žœ์œผ๋กœ๋„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • API ์ธก๋ฉด์—์„œ SiliconBeest์˜ ๋ชฉํ‘œ๋Š” Mastodon ๋ฐ Misskey API์™€์˜ ํ˜ธํ™˜์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๋ก ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๊ณผ ์‹ค์ œ ๊ตฌํ˜„์€ ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ๋ถ€๋ถ„์€ ์•„์ง ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ๋กœ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

en

  • SiliconBeest is a fediverse project designed to run on Cloudflare Workers.
  • After seeing many fediverse servers become unavailable when Cloudflare had outages, I realized that the fediverse already relies heavily on Cloudflare infrastructure.
  • So I thought: why not build fediverse software directly on top of Cloudflare?
  • This project was inspired by Cloudflare Inc.โ€™s Wildebeest project, and it also references some of its ideas and code.
  • The project name, SiliconBeest, comes from my nickname silicon(sjang) combined with Cloudflareโ€™s Wildebeest.
  • Iโ€™m still working on making it as inexpensive to run as possible. For now, the goal is to support a small number of users with a small federation footprint on the free plan, and a medium federation footprint on the $5 plan.
  • From an API perspective, SiliconBeest aims to be compatible with both Mastodon and Misskey APIs. However, as many people know, full compatibility is difficult in practice, so this remains a long-term goal rather than something fully implemented today.

์•„์ง์€ ์ดˆ๊ธฐ ๋ฒ„์ „์ด๋ผ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„๋„ ๋งŽ์ง€๋งŒ, Cloudflare Workers, D1, R2, Queues ๋“ฑ Cloudflare์˜ ์„œ๋ฒ„๋ฆฌ์Šค ์ธํ”„๋ผ ์œ„์—์„œ ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์–ผ๋งˆ๋‚˜ ๊ฐ€๋ณ๊ณ  ์ €๋ ดํ•˜๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‹คํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

This is still an early version, and many parts are not implemented yet. However, SiliconBeest is an experiment in how lightweight and affordable fediverse software can be when built on top of Cloudflareโ€™s serverless infrastructure, such as Workers, D1, R2, and Queues.

ํ˜„์žฌ v1.0.0์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋จผ์ € ์ •๋ฆฌํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ–ˆ์œผ๋ฉฐ, ์•ž์œผ๋กœ Mastodon API ํ˜ธํ™˜์„ฑ, federation ์•ˆ์ •์„ฑ, ๊ด€๋ฆฌ ๋„๊ตฌ, ๋ฌธ์„œํ™” ๋“ฑ์„ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•ด๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

In v1.0.0, I focused on organizing the basic architecture and core functionality first. Going forward, I plan to gradually improve Mastodon API compatibility, federation stability, admin tooling, and documentation.

๊ด€์‹ฌ ์žˆ์œผ์‹  ๋ถ„๋“ค์€ GitHub ์ €์žฅ์†Œ๋ฅผ ํ™•์ธํ•ด์ฃผ์‹œ๊ณ , ์ด์Šˆ๋‚˜ ํ”ผ๋“œ๋ฐฑ๋„ ์–ธ์ œ๋“  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

If youโ€™re interested, please check out the GitHub repository. Issues, feedback, and suggestions are always welcome.

https://github.com/SJang1/siliconbeest


์„ค์น˜ ๋ฐ ๋ฐฐํฌ ๋ฐฉ๋ฒ• (Installation and Deployment)

SiliconBeest๋Š” GitHub ํ…œํ”Œ๋ฆฟ๊ณผ Cloudflare๋ฅผ ์ด์šฉํ•ด ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GitHub ํ…œํ”Œ๋ฆฟ์—์„œ ์ƒˆ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Cloudflare์—์„œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค์™€ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Cloudflare API ํ† ํฐ๊ณผ ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ GitHub Secrets์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  4. GitHub Actions๋ฅผ ํ†ตํ•ด ์ž๋™ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ธ์Šคํ„ด์Šค ์„ค์ •์„ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์„ค์น˜ ๊ณผ์ •์€ ๊ณ„์† ๋‹ค๋“ฌ๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐœ์„ ์‚ฌํ•ญ์ด ๋งŽ์Œ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”ํ›„ ๋ณด๊ฐ•ํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ด๋ฉฐ, ์ด์— ๋Œ€ํ•œ PR๋„ ํ™˜์˜์ž…๋‹ˆ๋‹ค.

SiliconBeest can be deployed relatively easily using a GitHub template and Cloudflare.

  1. Create a new repository from the GitHub template.
  2. Set up the required resources and environment on Cloudflare.
  3. Store the Cloudflare API token and required environment variables in GitHub Secrets.
  4. Deploy automatically using GitHub Actions.
  5. Once deployment is complete, finish configuring your instance.

The installation process is still being refined, and Iโ€™m aware that there is plenty of room for improvement. I plan to keep improving the documentation and deployment flow over time, and related PRs are always welcome.

็Ÿฅใ‚Šๅˆใ„ใฎ @siliconsjang ใ•ใ‚“ใŒไปŠๆ—ฅใ€SiliconBeest v1.0.0 ใ‚’ๅ…ฌ้–‹ใ—ใพใ—ใŸใ€‚Cloudflare Workersใ€D1ใ€R2ใ€Queuesใ ใ‘ใงๅ‹•ใใƒ•ใ‚งใƒ‡ใ‚ฃใƒใƒผใ‚นใ‚ตใƒผใƒใƒผใงใ€Fedifyใ‚’ไฝฟใฃใฆใใ‚Œใฆใ„ใพใ™ใ€‚

ๅ€‹ไบบ็š„ใซ้ข็™ฝใ„ใจๆ€ใฃใŸใฎใฏๅ‡บ็™บ็‚นใงใ€Cloudflare้šœๅฎณใฎใŸใณใซใƒ•ใ‚งใƒ‡ใ‚ฃใƒใƒผใ‚นใฎใ‚ตใƒผใƒใƒผใŒใพใจใ‚ใฆ่ฝใกใ‚‹ใฎใ‚’่ฆ‹ใฆใ€ใ€Œใใ‚Œใชใ‚‰ใ„ใฃใCloudflareใฎไธŠใงๅ‹•ใ‹ใ›ใฐใ‚ˆใ„ใฎใงใฏใ€ใจๆ€ใฃใŸใฎใŒๅง‹ใพใ‚Šใ ใใ†ใงใ™ใ€‚

ๅฐ่ฆๆจกใชใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใชใ‚‰Cloudflareใฎ็„กๆ–™ใƒ—ใƒฉใƒณใงใ€ๅฐ‘ใ—ๅคงใใใชใฃใฆใ‚‚ๆœˆ5ใƒ‰ใƒซใใ‚‰ใ„ใง้‹ๅ–ถใงใใ‚‹ใ“ใจใ‚’็›ฎๆŒ‡ใ—ใฆใ„ใ‚‹ใจใฎใ“ใจใ€‚ใพใ ๅˆๆœŸใƒใƒผใ‚ธใƒงใƒณใชใฎใงๆœชๅฎŸ่ฃ…ใฎ้ƒจๅˆ†ใ‚‚ๅคšใใ€Mastodonใ‚„Misskey APIใจใฎไบ’ๆ›ๆ€งใฏๆœชใ ๅ…ˆใฎ็›ฎๆจ™ใฟใŸใ„ใงใ™ใ€‚

Fedifyใ‚’ไฝฟใฃใฆใใ‚Œใฆใ„ใ‚‹ใฎใ‚‚ใ‚ใฃใฆใ€ๅ€‹ไบบ็š„ใซๅฌ‰ใ—ใ„ใงใ™ใ€‚ๆฐ—ใซใชใฃใŸใฎใงๅ…ฑๆœ‰ใ—ใพใ™ใ€‚

ใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใฏAGPL 3.0ใงGitHubใงๅ…ฌ้–‹ใ•ใ‚Œใฆใ„ใพใ™ใ€‚

github.com

GitHub - SJang1/siliconbeest: Fediverse in Cloudflare Workers + live serverless code

Fediverse in Cloudflare Workers + live serverless code - SJang1/siliconbeest

@siliconsjang@hackers.pub

์•ˆ๋…•ํ•˜์„ธ์š”! Hello everyone!

SiliconBeest v1.0.0 ๊ณต๊ฐœ

๋งˆ์Šคํ† ๋ˆ API ํ˜ธํ™˜์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” Cloudflare ์—ฃ์ง€ ์ปดํ“จํŒ… ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ฆฌ์Šค ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด, SiliconBeest v1.0.0์„ ๊ณต๊ฐœํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

I'm pleased to announce SiliconBeest v1.0.0, a serverless fediverse software project built on Cloudflare edge computing, aiming for Mastodon API compatibility.

SiliconBeest Logo - a wildebeest with silicon on it


์„ค๋ช… (Description)

ko

  • SiliconBeest๋Š” Cloudflare Workers ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
  • Cloudflare ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋‹ค์ˆ˜์˜ ์—ฐํ•ฉ์šฐ์ฃผ ์„œ๋ฒ„๊ฐ€ ํ•จ๊ป˜ ์ ‘์† ๋ถˆ๊ฐ€ ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ณด๋ฉฐ, ์—ฐํ•ฉ์šฐ์ฃผ ์—ญ์‹œ Cloudflare ์ธํ”„๋ผ์— ์ƒ๋‹นํžˆ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์— ์ฐฉ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž๋Š” ์ƒ๊ฐ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Cloudflare Inc.์—์„œ ๊ฐœ๋ฐœํ–ˆ๋˜ Wildebeest ํ”„๋กœ์ ํŠธ์˜ ์•„์ด๋””์–ด์™€ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ ์ œ ๋‹‰๋„ค์ž„์ธ silicon(sjang) ์ด๋ž‘ Cloudflare์˜ Wildebeest๋ฅผ ์กฐํ•ฉํ•ด SiliconBeest๋กœ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ ์€ ์‚ฌ์šฉ์ž ์ˆ˜์™€ ์ž‘์€ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์„ ๊ธฐ์ค€์œผ๋กœ๋Š” Cloudflare ๋ฌด๋ฃŒ ํ”Œ๋žœ์—์„œ๋„ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์กฐ๊ธˆ ๋” ํฐ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์—์„œ๋Š” ์›” $5 ํ”Œ๋žœ์œผ๋กœ๋„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • API ์ธก๋ฉด์—์„œ SiliconBeest์˜ ๋ชฉํ‘œ๋Š” Mastodon ๋ฐ Misskey API์™€์˜ ํ˜ธํ™˜์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๋ก ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๊ณผ ์‹ค์ œ ๊ตฌํ˜„์€ ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ๋ถ€๋ถ„์€ ์•„์ง ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ๋กœ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

en

  • SiliconBeest is a fediverse project designed to run on Cloudflare Workers.
  • After seeing many fediverse servers become unavailable when Cloudflare had outages, I realized that the fediverse already relies heavily on Cloudflare infrastructure.
  • So I thought: why not build fediverse software directly on top of Cloudflare?
  • This project was inspired by Cloudflare Inc.โ€™s Wildebeest project, and it also references some of its ideas and code.
  • The project name, SiliconBeest, comes from my nickname silicon(sjang) combined with Cloudflareโ€™s Wildebeest.
  • Iโ€™m still working on making it as inexpensive to run as possible. For now, the goal is to support a small number of users with a small federation footprint on the free plan, and a medium federation footprint on the $5 plan.
  • From an API perspective, SiliconBeest aims to be compatible with both Mastodon and Misskey APIs. However, as many people know, full compatibility is difficult in practice, so this remains a long-term goal rather than something fully implemented today.

์•„์ง์€ ์ดˆ๊ธฐ ๋ฒ„์ „์ด๋ผ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„๋„ ๋งŽ์ง€๋งŒ, Cloudflare Workers, D1, R2, Queues ๋“ฑ Cloudflare์˜ ์„œ๋ฒ„๋ฆฌ์Šค ์ธํ”„๋ผ ์œ„์—์„œ ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์–ผ๋งˆ๋‚˜ ๊ฐ€๋ณ๊ณ  ์ €๋ ดํ•˜๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‹คํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

This is still an early version, and many parts are not implemented yet. However, SiliconBeest is an experiment in how lightweight and affordable fediverse software can be when built on top of Cloudflareโ€™s serverless infrastructure, such as Workers, D1, R2, and Queues.

ํ˜„์žฌ v1.0.0์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋จผ์ € ์ •๋ฆฌํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ–ˆ์œผ๋ฉฐ, ์•ž์œผ๋กœ Mastodon API ํ˜ธํ™˜์„ฑ, federation ์•ˆ์ •์„ฑ, ๊ด€๋ฆฌ ๋„๊ตฌ, ๋ฌธ์„œํ™” ๋“ฑ์„ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•ด๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

In v1.0.0, I focused on organizing the basic architecture and core functionality first. Going forward, I plan to gradually improve Mastodon API compatibility, federation stability, admin tooling, and documentation.

๊ด€์‹ฌ ์žˆ์œผ์‹  ๋ถ„๋“ค์€ GitHub ์ €์žฅ์†Œ๋ฅผ ํ™•์ธํ•ด์ฃผ์‹œ๊ณ , ์ด์Šˆ๋‚˜ ํ”ผ๋“œ๋ฐฑ๋„ ์–ธ์ œ๋“  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

If youโ€™re interested, please check out the GitHub repository. Issues, feedback, and suggestions are always welcome.

https://github.com/SJang1/siliconbeest


์„ค์น˜ ๋ฐ ๋ฐฐํฌ ๋ฐฉ๋ฒ• (Installation and Deployment)

SiliconBeest๋Š” GitHub ํ…œํ”Œ๋ฆฟ๊ณผ Cloudflare๋ฅผ ์ด์šฉํ•ด ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GitHub ํ…œํ”Œ๋ฆฟ์—์„œ ์ƒˆ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Cloudflare์—์„œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค์™€ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Cloudflare API ํ† ํฐ๊ณผ ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ GitHub Secrets์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  4. GitHub Actions๋ฅผ ํ†ตํ•ด ์ž๋™ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ธ์Šคํ„ด์Šค ์„ค์ •์„ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์„ค์น˜ ๊ณผ์ •์€ ๊ณ„์† ๋‹ค๋“ฌ๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐœ์„ ์‚ฌํ•ญ์ด ๋งŽ์Œ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”ํ›„ ๋ณด๊ฐ•ํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ด๋ฉฐ, ์ด์— ๋Œ€ํ•œ PR๋„ ํ™˜์˜์ž…๋‹ˆ๋‹ค.

SiliconBeest can be deployed relatively easily using a GitHub template and Cloudflare.

  1. Create a new repository from the GitHub template.
  2. Set up the required resources and environment on Cloudflare.
  3. Store the Cloudflare API token and required environment variables in GitHub Secrets.
  4. Deploy automatically using GitHub Actions.
  5. Once deployment is complete, finish configuring your instance.

The installation process is still being refined, and Iโ€™m aware that there is plenty of room for improvement. I plan to keep improving the documentation and deployment flow over time, and related PRs are always welcome.

A friend of mine, @siliconsjang, released SiliconBeest v1.0.0 today. It's a server built on Workers, D1, R2, and Queues, using Fedify.

I like the starting point: after watching fediverse servers go down together during Cloudflare outages, they thought, why not just run on Cloudflare directly?

They're aiming for something cheap enough that a small instance can stay on Cloudflare's free plan, and a somewhat bigger one can fit in the $5/month tier. It's still early; a lot is missing, and Mastodon/Misskey API compatibility is more of a long-term goal.

I'm glad to see Fedify put to use for something like this. Worth checking out.

The source code is on GitHub under AGPL 3.0.

github.com

GitHub - SJang1/siliconbeest: Fediverse in Cloudflare Workers + live serverless code

Fediverse in Cloudflare Workers + live serverless code - SJang1/siliconbeest

@siliconsjang@hackers.pub

์•ˆ๋…•ํ•˜์„ธ์š”! Hello everyone!

SiliconBeest v1.0.0 ๊ณต๊ฐœ

๋งˆ์Šคํ† ๋ˆ API ํ˜ธํ™˜์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” Cloudflare ์—ฃ์ง€ ์ปดํ“จํŒ… ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ฆฌ์Šค ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด, SiliconBeest v1.0.0์„ ๊ณต๊ฐœํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

I'm pleased to announce SiliconBeest v1.0.0, a serverless fediverse software project built on Cloudflare edge computing, aiming for Mastodon API compatibility.

SiliconBeest Logo - a wildebeest with silicon on it


์„ค๋ช… (Description)

ko

  • SiliconBeest๋Š” Cloudflare Workers ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
  • Cloudflare ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋‹ค์ˆ˜์˜ ์—ฐํ•ฉ์šฐ์ฃผ ์„œ๋ฒ„๊ฐ€ ํ•จ๊ป˜ ์ ‘์† ๋ถˆ๊ฐ€ ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ณด๋ฉฐ, ์—ฐํ•ฉ์šฐ์ฃผ ์—ญ์‹œ Cloudflare ์ธํ”„๋ผ์— ์ƒ๋‹นํžˆ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์— ์ฐฉ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž๋Š” ์ƒ๊ฐ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Cloudflare Inc.์—์„œ ๊ฐœ๋ฐœํ–ˆ๋˜ Wildebeest ํ”„๋กœ์ ํŠธ์˜ ์•„์ด๋””์–ด์™€ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ ์ œ ๋‹‰๋„ค์ž„์ธ silicon(sjang) ์ด๋ž‘ Cloudflare์˜ Wildebeest๋ฅผ ์กฐํ•ฉํ•ด SiliconBeest๋กœ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ ์€ ์‚ฌ์šฉ์ž ์ˆ˜์™€ ์ž‘์€ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์„ ๊ธฐ์ค€์œผ๋กœ๋Š” Cloudflare ๋ฌด๋ฃŒ ํ”Œ๋žœ์—์„œ๋„ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์กฐ๊ธˆ ๋” ํฐ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์—์„œ๋Š” ์›” $5 ํ”Œ๋žœ์œผ๋กœ๋„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • API ์ธก๋ฉด์—์„œ SiliconBeest์˜ ๋ชฉํ‘œ๋Š” Mastodon ๋ฐ Misskey API์™€์˜ ํ˜ธํ™˜์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๋ก ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๊ณผ ์‹ค์ œ ๊ตฌํ˜„์€ ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ๋ถ€๋ถ„์€ ์•„์ง ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ๋กœ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

en

  • SiliconBeest is a fediverse project designed to run on Cloudflare Workers.
  • After seeing many fediverse servers become unavailable when Cloudflare had outages, I realized that the fediverse already relies heavily on Cloudflare infrastructure.
  • So I thought: why not build fediverse software directly on top of Cloudflare?
  • This project was inspired by Cloudflare Inc.โ€™s Wildebeest project, and it also references some of its ideas and code.
  • The project name, SiliconBeest, comes from my nickname silicon(sjang) combined with Cloudflareโ€™s Wildebeest.
  • Iโ€™m still working on making it as inexpensive to run as possible. For now, the goal is to support a small number of users with a small federation footprint on the free plan, and a medium federation footprint on the $5 plan.
  • From an API perspective, SiliconBeest aims to be compatible with both Mastodon and Misskey APIs. However, as many people know, full compatibility is difficult in practice, so this remains a long-term goal rather than something fully implemented today.

์•„์ง์€ ์ดˆ๊ธฐ ๋ฒ„์ „์ด๋ผ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„๋„ ๋งŽ์ง€๋งŒ, Cloudflare Workers, D1, R2, Queues ๋“ฑ Cloudflare์˜ ์„œ๋ฒ„๋ฆฌ์Šค ์ธํ”„๋ผ ์œ„์—์„œ ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์–ผ๋งˆ๋‚˜ ๊ฐ€๋ณ๊ณ  ์ €๋ ดํ•˜๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‹คํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

This is still an early version, and many parts are not implemented yet. However, SiliconBeest is an experiment in how lightweight and affordable fediverse software can be when built on top of Cloudflareโ€™s serverless infrastructure, such as Workers, D1, R2, and Queues.

ํ˜„์žฌ v1.0.0์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋จผ์ € ์ •๋ฆฌํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ–ˆ์œผ๋ฉฐ, ์•ž์œผ๋กœ Mastodon API ํ˜ธํ™˜์„ฑ, federation ์•ˆ์ •์„ฑ, ๊ด€๋ฆฌ ๋„๊ตฌ, ๋ฌธ์„œํ™” ๋“ฑ์„ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•ด๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

In v1.0.0, I focused on organizing the basic architecture and core functionality first. Going forward, I plan to gradually improve Mastodon API compatibility, federation stability, admin tooling, and documentation.

๊ด€์‹ฌ ์žˆ์œผ์‹  ๋ถ„๋“ค์€ GitHub ์ €์žฅ์†Œ๋ฅผ ํ™•์ธํ•ด์ฃผ์‹œ๊ณ , ์ด์Šˆ๋‚˜ ํ”ผ๋“œ๋ฐฑ๋„ ์–ธ์ œ๋“  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

If youโ€™re interested, please check out the GitHub repository. Issues, feedback, and suggestions are always welcome.

https://github.com/SJang1/siliconbeest


์„ค์น˜ ๋ฐ ๋ฐฐํฌ ๋ฐฉ๋ฒ• (Installation and Deployment)

SiliconBeest๋Š” GitHub ํ…œํ”Œ๋ฆฟ๊ณผ Cloudflare๋ฅผ ์ด์šฉํ•ด ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GitHub ํ…œํ”Œ๋ฆฟ์—์„œ ์ƒˆ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Cloudflare์—์„œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค์™€ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Cloudflare API ํ† ํฐ๊ณผ ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ GitHub Secrets์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  4. GitHub Actions๋ฅผ ํ†ตํ•ด ์ž๋™ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ธ์Šคํ„ด์Šค ์„ค์ •์„ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์„ค์น˜ ๊ณผ์ •์€ ๊ณ„์† ๋‹ค๋“ฌ๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐœ์„ ์‚ฌํ•ญ์ด ๋งŽ์Œ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”ํ›„ ๋ณด๊ฐ•ํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ด๋ฉฐ, ์ด์— ๋Œ€ํ•œ PR๋„ ํ™˜์˜์ž…๋‹ˆ๋‹ค.

SiliconBeest can be deployed relatively easily using a GitHub template and Cloudflare.

  1. Create a new repository from the GitHub template.
  2. Set up the required resources and environment on Cloudflare.
  3. Store the Cloudflare API token and required environment variables in GitHub Secrets.
  4. Deploy automatically using GitHub Actions.
  5. Once deployment is complete, finish configuring your instance.

The installation process is still being refined, and Iโ€™m aware that there is plenty of room for improvement. I plan to keep improving the documentation and deployment flow over time, and related PRs are always welcome.

็Ÿฅใ‚Šๅˆใ„ใฎ @siliconsjang ใ•ใ‚“ใŒไปŠๆ—ฅใ€SiliconBeest v1.0.0 ใ‚’ๅ…ฌ้–‹ใ—ใพใ—ใŸใ€‚Cloudflare Workersใ€D1ใ€R2ใ€Queuesใ ใ‘ใงๅ‹•ใใƒ•ใ‚งใƒ‡ใ‚ฃใƒใƒผใ‚นใ‚ตใƒผใƒใƒผใงใ€Fedifyใ‚’ไฝฟใฃใฆใใ‚Œใฆใ„ใพใ™ใ€‚

ๅ€‹ไบบ็š„ใซ้ข็™ฝใ„ใจๆ€ใฃใŸใฎใฏๅ‡บ็™บ็‚นใงใ€Cloudflare้šœๅฎณใฎใŸใณใซใƒ•ใ‚งใƒ‡ใ‚ฃใƒใƒผใ‚นใฎใ‚ตใƒผใƒใƒผใŒใพใจใ‚ใฆ่ฝใกใ‚‹ใฎใ‚’่ฆ‹ใฆใ€ใ€Œใใ‚Œใชใ‚‰ใ„ใฃใCloudflareใฎไธŠใงๅ‹•ใ‹ใ›ใฐใ‚ˆใ„ใฎใงใฏใ€ใจๆ€ใฃใŸใฎใŒๅง‹ใพใ‚Šใ ใใ†ใงใ™ใ€‚

ๅฐ่ฆๆจกใชใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใชใ‚‰Cloudflareใฎ็„กๆ–™ใƒ—ใƒฉใƒณใงใ€ๅฐ‘ใ—ๅคงใใใชใฃใฆใ‚‚ๆœˆ5ใƒ‰ใƒซใใ‚‰ใ„ใง้‹ๅ–ถใงใใ‚‹ใ“ใจใ‚’็›ฎๆŒ‡ใ—ใฆใ„ใ‚‹ใจใฎใ“ใจใ€‚ใพใ ๅˆๆœŸใƒใƒผใ‚ธใƒงใƒณใชใฎใงๆœชๅฎŸ่ฃ…ใฎ้ƒจๅˆ†ใ‚‚ๅคšใใ€Mastodonใ‚„Misskey APIใจใฎไบ’ๆ›ๆ€งใฏๆœชใ ๅ…ˆใฎ็›ฎๆจ™ใฟใŸใ„ใงใ™ใ€‚

Fedifyใ‚’ไฝฟใฃใฆใใ‚Œใฆใ„ใ‚‹ใฎใ‚‚ใ‚ใฃใฆใ€ๅ€‹ไบบ็š„ใซๅฌ‰ใ—ใ„ใงใ™ใ€‚ๆฐ—ใซใชใฃใŸใฎใงๅ…ฑๆœ‰ใ—ใพใ™ใ€‚

ใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใฏAGPL 3.0ใงGitHubใงๅ…ฌ้–‹ใ•ใ‚Œใฆใ„ใพใ™ใ€‚

github.com

GitHub - SJang1/siliconbeest: Fediverse in Cloudflare Workers + live serverless code

Fediverse in Cloudflare Workers + live serverless code - SJang1/siliconbeest

@siliconsjang@hackers.pub

์•ˆ๋…•ํ•˜์„ธ์š”! Hello everyone!

SiliconBeest v1.0.0 ๊ณต๊ฐœ

๋งˆ์Šคํ† ๋ˆ API ํ˜ธํ™˜์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” Cloudflare ์—ฃ์ง€ ์ปดํ“จํŒ… ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ฆฌ์Šค ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด, SiliconBeest v1.0.0์„ ๊ณต๊ฐœํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

I'm pleased to announce SiliconBeest v1.0.0, a serverless fediverse software project built on Cloudflare edge computing, aiming for Mastodon API compatibility.

SiliconBeest Logo - a wildebeest with silicon on it


์„ค๋ช… (Description)

ko

  • SiliconBeest๋Š” Cloudflare Workers ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
  • Cloudflare ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋‹ค์ˆ˜์˜ ์—ฐํ•ฉ์šฐ์ฃผ ์„œ๋ฒ„๊ฐ€ ํ•จ๊ป˜ ์ ‘์† ๋ถˆ๊ฐ€ ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ณด๋ฉฐ, ์—ฐํ•ฉ์šฐ์ฃผ ์—ญ์‹œ Cloudflare ์ธํ”„๋ผ์— ์ƒ๋‹นํžˆ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์— ์ฐฉ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž๋Š” ์ƒ๊ฐ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Cloudflare Inc.์—์„œ ๊ฐœ๋ฐœํ–ˆ๋˜ Wildebeest ํ”„๋กœ์ ํŠธ์˜ ์•„์ด๋””์–ด์™€ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ ์ œ ๋‹‰๋„ค์ž„์ธ silicon(sjang) ์ด๋ž‘ Cloudflare์˜ Wildebeest๋ฅผ ์กฐํ•ฉํ•ด SiliconBeest๋กœ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ ์€ ์‚ฌ์šฉ์ž ์ˆ˜์™€ ์ž‘์€ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์„ ๊ธฐ์ค€์œผ๋กœ๋Š” Cloudflare ๋ฌด๋ฃŒ ํ”Œ๋žœ์—์„œ๋„ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์กฐ๊ธˆ ๋” ํฐ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์—์„œ๋Š” ์›” $5 ํ”Œ๋žœ์œผ๋กœ๋„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • API ์ธก๋ฉด์—์„œ SiliconBeest์˜ ๋ชฉํ‘œ๋Š” Mastodon ๋ฐ Misskey API์™€์˜ ํ˜ธํ™˜์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๋ก ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๊ณผ ์‹ค์ œ ๊ตฌํ˜„์€ ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ๋ถ€๋ถ„์€ ์•„์ง ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ๋กœ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

en

  • SiliconBeest is a fediverse project designed to run on Cloudflare Workers.
  • After seeing many fediverse servers become unavailable when Cloudflare had outages, I realized that the fediverse already relies heavily on Cloudflare infrastructure.
  • So I thought: why not build fediverse software directly on top of Cloudflare?
  • This project was inspired by Cloudflare Inc.โ€™s Wildebeest project, and it also references some of its ideas and code.
  • The project name, SiliconBeest, comes from my nickname silicon(sjang) combined with Cloudflareโ€™s Wildebeest.
  • Iโ€™m still working on making it as inexpensive to run as possible. For now, the goal is to support a small number of users with a small federation footprint on the free plan, and a medium federation footprint on the $5 plan.
  • From an API perspective, SiliconBeest aims to be compatible with both Mastodon and Misskey APIs. However, as many people know, full compatibility is difficult in practice, so this remains a long-term goal rather than something fully implemented today.

์•„์ง์€ ์ดˆ๊ธฐ ๋ฒ„์ „์ด๋ผ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„๋„ ๋งŽ์ง€๋งŒ, Cloudflare Workers, D1, R2, Queues ๋“ฑ Cloudflare์˜ ์„œ๋ฒ„๋ฆฌ์Šค ์ธํ”„๋ผ ์œ„์—์„œ ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์–ผ๋งˆ๋‚˜ ๊ฐ€๋ณ๊ณ  ์ €๋ ดํ•˜๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‹คํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

This is still an early version, and many parts are not implemented yet. However, SiliconBeest is an experiment in how lightweight and affordable fediverse software can be when built on top of Cloudflareโ€™s serverless infrastructure, such as Workers, D1, R2, and Queues.

ํ˜„์žฌ v1.0.0์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋จผ์ € ์ •๋ฆฌํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ–ˆ์œผ๋ฉฐ, ์•ž์œผ๋กœ Mastodon API ํ˜ธํ™˜์„ฑ, federation ์•ˆ์ •์„ฑ, ๊ด€๋ฆฌ ๋„๊ตฌ, ๋ฌธ์„œํ™” ๋“ฑ์„ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•ด๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

In v1.0.0, I focused on organizing the basic architecture and core functionality first. Going forward, I plan to gradually improve Mastodon API compatibility, federation stability, admin tooling, and documentation.

๊ด€์‹ฌ ์žˆ์œผ์‹  ๋ถ„๋“ค์€ GitHub ์ €์žฅ์†Œ๋ฅผ ํ™•์ธํ•ด์ฃผ์‹œ๊ณ , ์ด์Šˆ๋‚˜ ํ”ผ๋“œ๋ฐฑ๋„ ์–ธ์ œ๋“  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

If youโ€™re interested, please check out the GitHub repository. Issues, feedback, and suggestions are always welcome.

https://github.com/SJang1/siliconbeest


์„ค์น˜ ๋ฐ ๋ฐฐํฌ ๋ฐฉ๋ฒ• (Installation and Deployment)

SiliconBeest๋Š” GitHub ํ…œํ”Œ๋ฆฟ๊ณผ Cloudflare๋ฅผ ์ด์šฉํ•ด ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GitHub ํ…œํ”Œ๋ฆฟ์—์„œ ์ƒˆ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Cloudflare์—์„œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค์™€ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Cloudflare API ํ† ํฐ๊ณผ ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ GitHub Secrets์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  4. GitHub Actions๋ฅผ ํ†ตํ•ด ์ž๋™ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ธ์Šคํ„ด์Šค ์„ค์ •์„ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์„ค์น˜ ๊ณผ์ •์€ ๊ณ„์† ๋‹ค๋“ฌ๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐœ์„ ์‚ฌํ•ญ์ด ๋งŽ์Œ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”ํ›„ ๋ณด๊ฐ•ํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ด๋ฉฐ, ์ด์— ๋Œ€ํ•œ PR๋„ ํ™˜์˜์ž…๋‹ˆ๋‹ค.

SiliconBeest can be deployed relatively easily using a GitHub template and Cloudflare.

  1. Create a new repository from the GitHub template.
  2. Set up the required resources and environment on Cloudflare.
  3. Store the Cloudflare API token and required environment variables in GitHub Secrets.
  4. Deploy automatically using GitHub Actions.
  5. Once deployment is complete, finish configuring your instance.

The installation process is still being refined, and Iโ€™m aware that there is plenty of room for improvement. I plan to keep improving the documentation and deployment flow over time, and related PRs are always welcome.

A friend of mine, @siliconsjang, released SiliconBeest v1.0.0 today. It's a server built on Workers, D1, R2, and Queues, using Fedify.

I like the starting point: after watching fediverse servers go down together during Cloudflare outages, they thought, why not just run on Cloudflare directly?

They're aiming for something cheap enough that a small instance can stay on Cloudflare's free plan, and a somewhat bigger one can fit in the $5/month tier. It's still early; a lot is missing, and Mastodon/Misskey API compatibility is more of a long-term goal.

I'm glad to see Fedify put to use for something like this. Worth checking out.

The source code is on GitHub under AGPL 3.0.

github.com

GitHub - SJang1/siliconbeest: Fediverse in Cloudflare Workers + live serverless code

Fediverse in Cloudflare Workers + live serverless code - SJang1/siliconbeest

@siliconsjang@hackers.pub

์•ˆ๋…•ํ•˜์„ธ์š”! Hello everyone!

SiliconBeest v1.0.0 ๊ณต๊ฐœ

๋งˆ์Šคํ† ๋ˆ API ํ˜ธํ™˜์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” Cloudflare ์—ฃ์ง€ ์ปดํ“จํŒ… ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ฆฌ์Šค ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด, SiliconBeest v1.0.0์„ ๊ณต๊ฐœํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

I'm pleased to announce SiliconBeest v1.0.0, a serverless fediverse software project built on Cloudflare edge computing, aiming for Mastodon API compatibility.

SiliconBeest Logo - a wildebeest with silicon on it


์„ค๋ช… (Description)

ko

  • SiliconBeest๋Š” Cloudflare Workers ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
  • Cloudflare ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋‹ค์ˆ˜์˜ ์—ฐํ•ฉ์šฐ์ฃผ ์„œ๋ฒ„๊ฐ€ ํ•จ๊ป˜ ์ ‘์† ๋ถˆ๊ฐ€ ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ณด๋ฉฐ, ์—ฐํ•ฉ์šฐ์ฃผ ์—ญ์‹œ Cloudflare ์ธํ”„๋ผ์— ์ƒ๋‹นํžˆ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์— ์ฐฉ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž๋Š” ์ƒ๊ฐ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Cloudflare Inc.์—์„œ ๊ฐœ๋ฐœํ–ˆ๋˜ Wildebeest ํ”„๋กœ์ ํŠธ์˜ ์•„์ด๋””์–ด์™€ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ ์ œ ๋‹‰๋„ค์ž„์ธ silicon(sjang) ์ด๋ž‘ Cloudflare์˜ Wildebeest๋ฅผ ์กฐํ•ฉํ•ด SiliconBeest๋กœ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ ์€ ์‚ฌ์šฉ์ž ์ˆ˜์™€ ์ž‘์€ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์„ ๊ธฐ์ค€์œผ๋กœ๋Š” Cloudflare ๋ฌด๋ฃŒ ํ”Œ๋žœ์—์„œ๋„ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์กฐ๊ธˆ ๋” ํฐ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์—์„œ๋Š” ์›” $5 ํ”Œ๋žœ์œผ๋กœ๋„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • API ์ธก๋ฉด์—์„œ SiliconBeest์˜ ๋ชฉํ‘œ๋Š” Mastodon ๋ฐ Misskey API์™€์˜ ํ˜ธํ™˜์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๋ก ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๊ณผ ์‹ค์ œ ๊ตฌํ˜„์€ ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ๋ถ€๋ถ„์€ ์•„์ง ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ๋กœ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

en

  • SiliconBeest is a fediverse project designed to run on Cloudflare Workers.
  • After seeing many fediverse servers become unavailable when Cloudflare had outages, I realized that the fediverse already relies heavily on Cloudflare infrastructure.
  • So I thought: why not build fediverse software directly on top of Cloudflare?
  • This project was inspired by Cloudflare Inc.โ€™s Wildebeest project, and it also references some of its ideas and code.
  • The project name, SiliconBeest, comes from my nickname silicon(sjang) combined with Cloudflareโ€™s Wildebeest.
  • Iโ€™m still working on making it as inexpensive to run as possible. For now, the goal is to support a small number of users with a small federation footprint on the free plan, and a medium federation footprint on the $5 plan.
  • From an API perspective, SiliconBeest aims to be compatible with both Mastodon and Misskey APIs. However, as many people know, full compatibility is difficult in practice, so this remains a long-term goal rather than something fully implemented today.

์•„์ง์€ ์ดˆ๊ธฐ ๋ฒ„์ „์ด๋ผ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„๋„ ๋งŽ์ง€๋งŒ, Cloudflare Workers, D1, R2, Queues ๋“ฑ Cloudflare์˜ ์„œ๋ฒ„๋ฆฌ์Šค ์ธํ”„๋ผ ์œ„์—์„œ ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์–ผ๋งˆ๋‚˜ ๊ฐ€๋ณ๊ณ  ์ €๋ ดํ•˜๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‹คํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

This is still an early version, and many parts are not implemented yet. However, SiliconBeest is an experiment in how lightweight and affordable fediverse software can be when built on top of Cloudflareโ€™s serverless infrastructure, such as Workers, D1, R2, and Queues.

ํ˜„์žฌ v1.0.0์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋จผ์ € ์ •๋ฆฌํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ–ˆ์œผ๋ฉฐ, ์•ž์œผ๋กœ Mastodon API ํ˜ธํ™˜์„ฑ, federation ์•ˆ์ •์„ฑ, ๊ด€๋ฆฌ ๋„๊ตฌ, ๋ฌธ์„œํ™” ๋“ฑ์„ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•ด๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

In v1.0.0, I focused on organizing the basic architecture and core functionality first. Going forward, I plan to gradually improve Mastodon API compatibility, federation stability, admin tooling, and documentation.

๊ด€์‹ฌ ์žˆ์œผ์‹  ๋ถ„๋“ค์€ GitHub ์ €์žฅ์†Œ๋ฅผ ํ™•์ธํ•ด์ฃผ์‹œ๊ณ , ์ด์Šˆ๋‚˜ ํ”ผ๋“œ๋ฐฑ๋„ ์–ธ์ œ๋“  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

If youโ€™re interested, please check out the GitHub repository. Issues, feedback, and suggestions are always welcome.

https://github.com/SJang1/siliconbeest


์„ค์น˜ ๋ฐ ๋ฐฐํฌ ๋ฐฉ๋ฒ• (Installation and Deployment)

SiliconBeest๋Š” GitHub ํ…œํ”Œ๋ฆฟ๊ณผ Cloudflare๋ฅผ ์ด์šฉํ•ด ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GitHub ํ…œํ”Œ๋ฆฟ์—์„œ ์ƒˆ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Cloudflare์—์„œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค์™€ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Cloudflare API ํ† ํฐ๊ณผ ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ GitHub Secrets์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  4. GitHub Actions๋ฅผ ํ†ตํ•ด ์ž๋™ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ธ์Šคํ„ด์Šค ์„ค์ •์„ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์„ค์น˜ ๊ณผ์ •์€ ๊ณ„์† ๋‹ค๋“ฌ๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐœ์„ ์‚ฌํ•ญ์ด ๋งŽ์Œ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”ํ›„ ๋ณด๊ฐ•ํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ด๋ฉฐ, ์ด์— ๋Œ€ํ•œ PR๋„ ํ™˜์˜์ž…๋‹ˆ๋‹ค.

SiliconBeest can be deployed relatively easily using a GitHub template and Cloudflare.

  1. Create a new repository from the GitHub template.
  2. Set up the required resources and environment on Cloudflare.
  3. Store the Cloudflare API token and required environment variables in GitHub Secrets.
  4. Deploy automatically using GitHub Actions.
  5. Once deployment is complete, finish configuring your instance.

The installation process is still being refined, and Iโ€™m aware that there is plenty of room for improvement. I plan to keep improving the documentation and deployment flow over time, and related PRs are always welcome.

A friend of mine, @siliconsjang, released SiliconBeest v1.0.0 today. It's a server built on Workers, D1, R2, and Queues, using Fedify.

I like the starting point: after watching fediverse servers go down together during Cloudflare outages, they thought, why not just run on Cloudflare directly?

They're aiming for something cheap enough that a small instance can stay on Cloudflare's free plan, and a somewhat bigger one can fit in the $5/month tier. It's still early; a lot is missing, and Mastodon/Misskey API compatibility is more of a long-term goal.

I'm glad to see Fedify put to use for something like this. Worth checking out.

The source code is on GitHub under AGPL 3.0.

github.com

GitHub - SJang1/siliconbeest: Fediverse in Cloudflare Workers + live serverless code

Fediverse in Cloudflare Workers + live serverless code - SJang1/siliconbeest

@siliconsjang@hackers.pub

์•ˆ๋…•ํ•˜์„ธ์š”! Hello everyone!

SiliconBeest v1.0.0 ๊ณต๊ฐœ

๋งˆ์Šคํ† ๋ˆ API ํ˜ธํ™˜์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” Cloudflare ์—ฃ์ง€ ์ปดํ“จํŒ… ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ฆฌ์Šค ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด, SiliconBeest v1.0.0์„ ๊ณต๊ฐœํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

I'm pleased to announce SiliconBeest v1.0.0, a serverless fediverse software project built on Cloudflare edge computing, aiming for Mastodon API compatibility.

SiliconBeest Logo - a wildebeest with silicon on it


์„ค๋ช… (Description)

ko

  • SiliconBeest๋Š” Cloudflare Workers ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
  • Cloudflare ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋‹ค์ˆ˜์˜ ์—ฐํ•ฉ์šฐ์ฃผ ์„œ๋ฒ„๊ฐ€ ํ•จ๊ป˜ ์ ‘์† ๋ถˆ๊ฐ€ ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ณด๋ฉฐ, ์—ฐํ•ฉ์šฐ์ฃผ ์—ญ์‹œ Cloudflare ์ธํ”„๋ผ์— ์ƒ๋‹นํžˆ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์— ์ฐฉ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž๋Š” ์ƒ๊ฐ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Cloudflare Inc.์—์„œ ๊ฐœ๋ฐœํ–ˆ๋˜ Wildebeest ํ”„๋กœ์ ํŠธ์˜ ์•„์ด๋””์–ด์™€ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ ์ œ ๋‹‰๋„ค์ž„์ธ silicon(sjang) ์ด๋ž‘ Cloudflare์˜ Wildebeest๋ฅผ ์กฐํ•ฉํ•ด SiliconBeest๋กœ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ ์€ ์‚ฌ์šฉ์ž ์ˆ˜์™€ ์ž‘์€ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์„ ๊ธฐ์ค€์œผ๋กœ๋Š” Cloudflare ๋ฌด๋ฃŒ ํ”Œ๋žœ์—์„œ๋„ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์กฐ๊ธˆ ๋” ํฐ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์—์„œ๋Š” ์›” $5 ํ”Œ๋žœ์œผ๋กœ๋„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • API ์ธก๋ฉด์—์„œ SiliconBeest์˜ ๋ชฉํ‘œ๋Š” Mastodon ๋ฐ Misskey API์™€์˜ ํ˜ธํ™˜์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๋ก ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๊ณผ ์‹ค์ œ ๊ตฌํ˜„์€ ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ๋ถ€๋ถ„์€ ์•„์ง ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ๋กœ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

en

  • SiliconBeest is a fediverse project designed to run on Cloudflare Workers.
  • After seeing many fediverse servers become unavailable when Cloudflare had outages, I realized that the fediverse already relies heavily on Cloudflare infrastructure.
  • So I thought: why not build fediverse software directly on top of Cloudflare?
  • This project was inspired by Cloudflare Inc.โ€™s Wildebeest project, and it also references some of its ideas and code.
  • The project name, SiliconBeest, comes from my nickname silicon(sjang) combined with Cloudflareโ€™s Wildebeest.
  • Iโ€™m still working on making it as inexpensive to run as possible. For now, the goal is to support a small number of users with a small federation footprint on the free plan, and a medium federation footprint on the $5 plan.
  • From an API perspective, SiliconBeest aims to be compatible with both Mastodon and Misskey APIs. However, as many people know, full compatibility is difficult in practice, so this remains a long-term goal rather than something fully implemented today.

์•„์ง์€ ์ดˆ๊ธฐ ๋ฒ„์ „์ด๋ผ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„๋„ ๋งŽ์ง€๋งŒ, Cloudflare Workers, D1, R2, Queues ๋“ฑ Cloudflare์˜ ์„œ๋ฒ„๋ฆฌ์Šค ์ธํ”„๋ผ ์œ„์—์„œ ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์–ผ๋งˆ๋‚˜ ๊ฐ€๋ณ๊ณ  ์ €๋ ดํ•˜๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‹คํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

This is still an early version, and many parts are not implemented yet. However, SiliconBeest is an experiment in how lightweight and affordable fediverse software can be when built on top of Cloudflareโ€™s serverless infrastructure, such as Workers, D1, R2, and Queues.

ํ˜„์žฌ v1.0.0์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋จผ์ € ์ •๋ฆฌํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ–ˆ์œผ๋ฉฐ, ์•ž์œผ๋กœ Mastodon API ํ˜ธํ™˜์„ฑ, federation ์•ˆ์ •์„ฑ, ๊ด€๋ฆฌ ๋„๊ตฌ, ๋ฌธ์„œํ™” ๋“ฑ์„ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•ด๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

In v1.0.0, I focused on organizing the basic architecture and core functionality first. Going forward, I plan to gradually improve Mastodon API compatibility, federation stability, admin tooling, and documentation.

๊ด€์‹ฌ ์žˆ์œผ์‹  ๋ถ„๋“ค์€ GitHub ์ €์žฅ์†Œ๋ฅผ ํ™•์ธํ•ด์ฃผ์‹œ๊ณ , ์ด์Šˆ๋‚˜ ํ”ผ๋“œ๋ฐฑ๋„ ์–ธ์ œ๋“  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

If youโ€™re interested, please check out the GitHub repository. Issues, feedback, and suggestions are always welcome.

https://github.com/SJang1/siliconbeest


์„ค์น˜ ๋ฐ ๋ฐฐํฌ ๋ฐฉ๋ฒ• (Installation and Deployment)

SiliconBeest๋Š” GitHub ํ…œํ”Œ๋ฆฟ๊ณผ Cloudflare๋ฅผ ์ด์šฉํ•ด ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GitHub ํ…œํ”Œ๋ฆฟ์—์„œ ์ƒˆ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Cloudflare์—์„œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค์™€ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Cloudflare API ํ† ํฐ๊ณผ ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ GitHub Secrets์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  4. GitHub Actions๋ฅผ ํ†ตํ•ด ์ž๋™ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ธ์Šคํ„ด์Šค ์„ค์ •์„ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์„ค์น˜ ๊ณผ์ •์€ ๊ณ„์† ๋‹ค๋“ฌ๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐœ์„ ์‚ฌํ•ญ์ด ๋งŽ์Œ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”ํ›„ ๋ณด๊ฐ•ํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ด๋ฉฐ, ์ด์— ๋Œ€ํ•œ PR๋„ ํ™˜์˜์ž…๋‹ˆ๋‹ค.

SiliconBeest can be deployed relatively easily using a GitHub template and Cloudflare.

  1. Create a new repository from the GitHub template.
  2. Set up the required resources and environment on Cloudflare.
  3. Store the Cloudflare API token and required environment variables in GitHub Secrets.
  4. Deploy automatically using GitHub Actions.
  5. Once deployment is complete, finish configuring your instance.

The installation process is still being refined, and Iโ€™m aware that there is plenty of room for improvement. I plan to keep improving the documentation and deployment flow over time, and related PRs are always welcome.

A friend of mine, @siliconsjang, released SiliconBeest v1.0.0 today. It's a server built on Workers, D1, R2, and Queues, using Fedify.

I like the starting point: after watching fediverse servers go down together during Cloudflare outages, they thought, why not just run on Cloudflare directly?

They're aiming for something cheap enough that a small instance can stay on Cloudflare's free plan, and a somewhat bigger one can fit in the $5/month tier. It's still early; a lot is missing, and Mastodon/Misskey API compatibility is more of a long-term goal.

I'm glad to see Fedify put to use for something like this. Worth checking out.

The source code is on GitHub under AGPL 3.0.

github.com

GitHub - SJang1/siliconbeest: Fediverse in Cloudflare Workers + live serverless code

Fediverse in Cloudflare Workers + live serverless code - SJang1/siliconbeest

@siliconsjang@hackers.pub

์•ˆ๋…•ํ•˜์„ธ์š”! Hello everyone!

SiliconBeest v1.0.0 ๊ณต๊ฐœ

๋งˆ์Šคํ† ๋ˆ API ํ˜ธํ™˜์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” Cloudflare ์—ฃ์ง€ ์ปดํ“จํŒ… ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ฆฌ์Šค ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด, SiliconBeest v1.0.0์„ ๊ณต๊ฐœํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

I'm pleased to announce SiliconBeest v1.0.0, a serverless fediverse software project built on Cloudflare edge computing, aiming for Mastodon API compatibility.

SiliconBeest Logo - a wildebeest with silicon on it


์„ค๋ช… (Description)

ko

  • SiliconBeest๋Š” Cloudflare Workers ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
  • Cloudflare ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋‹ค์ˆ˜์˜ ์—ฐํ•ฉ์šฐ์ฃผ ์„œ๋ฒ„๊ฐ€ ํ•จ๊ป˜ ์ ‘์† ๋ถˆ๊ฐ€ ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ณด๋ฉฐ, ์—ฐํ•ฉ์šฐ์ฃผ ์—ญ์‹œ Cloudflare ์ธํ”„๋ผ์— ์ƒ๋‹นํžˆ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์— ์ฐฉ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž๋Š” ์ƒ๊ฐ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Cloudflare Inc.์—์„œ ๊ฐœ๋ฐœํ–ˆ๋˜ Wildebeest ํ”„๋กœ์ ํŠธ์˜ ์•„์ด๋””์–ด์™€ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ ์ œ ๋‹‰๋„ค์ž„์ธ silicon(sjang) ์ด๋ž‘ Cloudflare์˜ Wildebeest๋ฅผ ์กฐํ•ฉํ•ด SiliconBeest๋กœ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ ์€ ์‚ฌ์šฉ์ž ์ˆ˜์™€ ์ž‘์€ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์„ ๊ธฐ์ค€์œผ๋กœ๋Š” Cloudflare ๋ฌด๋ฃŒ ํ”Œ๋žœ์—์„œ๋„ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์กฐ๊ธˆ ๋” ํฐ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์—์„œ๋Š” ์›” $5 ํ”Œ๋žœ์œผ๋กœ๋„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • API ์ธก๋ฉด์—์„œ SiliconBeest์˜ ๋ชฉํ‘œ๋Š” Mastodon ๋ฐ Misskey API์™€์˜ ํ˜ธํ™˜์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๋ก ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๊ณผ ์‹ค์ œ ๊ตฌํ˜„์€ ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ๋ถ€๋ถ„์€ ์•„์ง ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ๋กœ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

en

  • SiliconBeest is a fediverse project designed to run on Cloudflare Workers.
  • After seeing many fediverse servers become unavailable when Cloudflare had outages, I realized that the fediverse already relies heavily on Cloudflare infrastructure.
  • So I thought: why not build fediverse software directly on top of Cloudflare?
  • This project was inspired by Cloudflare Inc.โ€™s Wildebeest project, and it also references some of its ideas and code.
  • The project name, SiliconBeest, comes from my nickname silicon(sjang) combined with Cloudflareโ€™s Wildebeest.
  • Iโ€™m still working on making it as inexpensive to run as possible. For now, the goal is to support a small number of users with a small federation footprint on the free plan, and a medium federation footprint on the $5 plan.
  • From an API perspective, SiliconBeest aims to be compatible with both Mastodon and Misskey APIs. However, as many people know, full compatibility is difficult in practice, so this remains a long-term goal rather than something fully implemented today.

์•„์ง์€ ์ดˆ๊ธฐ ๋ฒ„์ „์ด๋ผ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„๋„ ๋งŽ์ง€๋งŒ, Cloudflare Workers, D1, R2, Queues ๋“ฑ Cloudflare์˜ ์„œ๋ฒ„๋ฆฌ์Šค ์ธํ”„๋ผ ์œ„์—์„œ ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์–ผ๋งˆ๋‚˜ ๊ฐ€๋ณ๊ณ  ์ €๋ ดํ•˜๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‹คํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

This is still an early version, and many parts are not implemented yet. However, SiliconBeest is an experiment in how lightweight and affordable fediverse software can be when built on top of Cloudflareโ€™s serverless infrastructure, such as Workers, D1, R2, and Queues.

ํ˜„์žฌ v1.0.0์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋จผ์ € ์ •๋ฆฌํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ–ˆ์œผ๋ฉฐ, ์•ž์œผ๋กœ Mastodon API ํ˜ธํ™˜์„ฑ, federation ์•ˆ์ •์„ฑ, ๊ด€๋ฆฌ ๋„๊ตฌ, ๋ฌธ์„œํ™” ๋“ฑ์„ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•ด๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

In v1.0.0, I focused on organizing the basic architecture and core functionality first. Going forward, I plan to gradually improve Mastodon API compatibility, federation stability, admin tooling, and documentation.

๊ด€์‹ฌ ์žˆ์œผ์‹  ๋ถ„๋“ค์€ GitHub ์ €์žฅ์†Œ๋ฅผ ํ™•์ธํ•ด์ฃผ์‹œ๊ณ , ์ด์Šˆ๋‚˜ ํ”ผ๋“œ๋ฐฑ๋„ ์–ธ์ œ๋“  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

If youโ€™re interested, please check out the GitHub repository. Issues, feedback, and suggestions are always welcome.

https://github.com/SJang1/siliconbeest


์„ค์น˜ ๋ฐ ๋ฐฐํฌ ๋ฐฉ๋ฒ• (Installation and Deployment)

SiliconBeest๋Š” GitHub ํ…œํ”Œ๋ฆฟ๊ณผ Cloudflare๋ฅผ ์ด์šฉํ•ด ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GitHub ํ…œํ”Œ๋ฆฟ์—์„œ ์ƒˆ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Cloudflare์—์„œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค์™€ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Cloudflare API ํ† ํฐ๊ณผ ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ GitHub Secrets์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  4. GitHub Actions๋ฅผ ํ†ตํ•ด ์ž๋™ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ธ์Šคํ„ด์Šค ์„ค์ •์„ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์„ค์น˜ ๊ณผ์ •์€ ๊ณ„์† ๋‹ค๋“ฌ๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐœ์„ ์‚ฌํ•ญ์ด ๋งŽ์Œ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”ํ›„ ๋ณด๊ฐ•ํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ด๋ฉฐ, ์ด์— ๋Œ€ํ•œ PR๋„ ํ™˜์˜์ž…๋‹ˆ๋‹ค.

SiliconBeest can be deployed relatively easily using a GitHub template and Cloudflare.

  1. Create a new repository from the GitHub template.
  2. Set up the required resources and environment on Cloudflare.
  3. Store the Cloudflare API token and required environment variables in GitHub Secrets.
  4. Deploy automatically using GitHub Actions.
  5. Once deployment is complete, finish configuring your instance.

The installation process is still being refined, and Iโ€™m aware that there is plenty of room for improvement. I plan to keep improving the documentation and deployment flow over time, and related PRs are always welcome.

@reiver@mastodon.social

In ActivityPub, these are all equivalent:

"type":"Banana"

"type":["Banana"]

"type":{"๏ผ id":"Banana"}

"type":[{"๏ผ id":"Banana"}]

"type":{"id":"Banana"}

"type":[{"id":"Banana"}]

"๏ผ type":"Banana"

"๏ผ type":["Banana"]

"๏ผ type":{"๏ผ id":"Banana"}

"๏ผ type":[{"๏ผ id":"Banana"}]

"๏ผ type":{"id":"Banana"}

"๏ผ type":[{"id":"Banana"}]

็Ÿฅใ‚Šๅˆใ„ใฎ @siliconsjang ใ•ใ‚“ใŒไปŠๆ—ฅใ€SiliconBeest v1.0.0 ใ‚’ๅ…ฌ้–‹ใ—ใพใ—ใŸใ€‚Cloudflare Workersใ€D1ใ€R2ใ€Queuesใ ใ‘ใงๅ‹•ใใƒ•ใ‚งใƒ‡ใ‚ฃใƒใƒผใ‚นใ‚ตใƒผใƒใƒผใงใ€Fedifyใ‚’ไฝฟใฃใฆใใ‚Œใฆใ„ใพใ™ใ€‚

ๅ€‹ไบบ็š„ใซ้ข็™ฝใ„ใจๆ€ใฃใŸใฎใฏๅ‡บ็™บ็‚นใงใ€Cloudflare้šœๅฎณใฎใŸใณใซใƒ•ใ‚งใƒ‡ใ‚ฃใƒใƒผใ‚นใฎใ‚ตใƒผใƒใƒผใŒใพใจใ‚ใฆ่ฝใกใ‚‹ใฎใ‚’่ฆ‹ใฆใ€ใ€Œใใ‚Œใชใ‚‰ใ„ใฃใCloudflareใฎไธŠใงๅ‹•ใ‹ใ›ใฐใ‚ˆใ„ใฎใงใฏใ€ใจๆ€ใฃใŸใฎใŒๅง‹ใพใ‚Šใ ใใ†ใงใ™ใ€‚

ๅฐ่ฆๆจกใชใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใชใ‚‰Cloudflareใฎ็„กๆ–™ใƒ—ใƒฉใƒณใงใ€ๅฐ‘ใ—ๅคงใใใชใฃใฆใ‚‚ๆœˆ5ใƒ‰ใƒซใใ‚‰ใ„ใง้‹ๅ–ถใงใใ‚‹ใ“ใจใ‚’็›ฎๆŒ‡ใ—ใฆใ„ใ‚‹ใจใฎใ“ใจใ€‚ใพใ ๅˆๆœŸใƒใƒผใ‚ธใƒงใƒณใชใฎใงๆœชๅฎŸ่ฃ…ใฎ้ƒจๅˆ†ใ‚‚ๅคšใใ€Mastodonใ‚„Misskey APIใจใฎไบ’ๆ›ๆ€งใฏๆœชใ ๅ…ˆใฎ็›ฎๆจ™ใฟใŸใ„ใงใ™ใ€‚

Fedifyใ‚’ไฝฟใฃใฆใใ‚Œใฆใ„ใ‚‹ใฎใ‚‚ใ‚ใฃใฆใ€ๅ€‹ไบบ็š„ใซๅฌ‰ใ—ใ„ใงใ™ใ€‚ๆฐ—ใซใชใฃใŸใฎใงๅ…ฑๆœ‰ใ—ใพใ™ใ€‚

ใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใฏAGPL 3.0ใงGitHubใงๅ…ฌ้–‹ใ•ใ‚Œใฆใ„ใพใ™ใ€‚

github.com

GitHub - SJang1/siliconbeest: Fediverse in Cloudflare Workers + live serverless code

Fediverse in Cloudflare Workers + live serverless code - SJang1/siliconbeest

@siliconsjang@hackers.pub

์•ˆ๋…•ํ•˜์„ธ์š”! Hello everyone!

SiliconBeest v1.0.0 ๊ณต๊ฐœ

๋งˆ์Šคํ† ๋ˆ API ํ˜ธํ™˜์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” Cloudflare ์—ฃ์ง€ ์ปดํ“จํŒ… ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ฆฌ์Šค ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด, SiliconBeest v1.0.0์„ ๊ณต๊ฐœํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

I'm pleased to announce SiliconBeest v1.0.0, a serverless fediverse software project built on Cloudflare edge computing, aiming for Mastodon API compatibility.

SiliconBeest Logo - a wildebeest with silicon on it


์„ค๋ช… (Description)

ko

  • SiliconBeest๋Š” Cloudflare Workers ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
  • Cloudflare ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋‹ค์ˆ˜์˜ ์—ฐํ•ฉ์šฐ์ฃผ ์„œ๋ฒ„๊ฐ€ ํ•จ๊ป˜ ์ ‘์† ๋ถˆ๊ฐ€ ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ณด๋ฉฐ, ์—ฐํ•ฉ์šฐ์ฃผ ์—ญ์‹œ Cloudflare ์ธํ”„๋ผ์— ์ƒ๋‹นํžˆ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์— ์ฐฉ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž๋Š” ์ƒ๊ฐ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Cloudflare Inc.์—์„œ ๊ฐœ๋ฐœํ–ˆ๋˜ Wildebeest ํ”„๋กœ์ ํŠธ์˜ ์•„์ด๋””์–ด์™€ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ ์ œ ๋‹‰๋„ค์ž„์ธ silicon(sjang) ์ด๋ž‘ Cloudflare์˜ Wildebeest๋ฅผ ์กฐํ•ฉํ•ด SiliconBeest๋กœ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ ์€ ์‚ฌ์šฉ์ž ์ˆ˜์™€ ์ž‘์€ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์„ ๊ธฐ์ค€์œผ๋กœ๋Š” Cloudflare ๋ฌด๋ฃŒ ํ”Œ๋žœ์—์„œ๋„ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์กฐ๊ธˆ ๋” ํฐ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์—์„œ๋Š” ์›” $5 ํ”Œ๋žœ์œผ๋กœ๋„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • API ์ธก๋ฉด์—์„œ SiliconBeest์˜ ๋ชฉํ‘œ๋Š” Mastodon ๋ฐ Misskey API์™€์˜ ํ˜ธํ™˜์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๋ก ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๊ณผ ์‹ค์ œ ๊ตฌํ˜„์€ ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ๋ถ€๋ถ„์€ ์•„์ง ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ๋กœ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

en

  • SiliconBeest is a fediverse project designed to run on Cloudflare Workers.
  • After seeing many fediverse servers become unavailable when Cloudflare had outages, I realized that the fediverse already relies heavily on Cloudflare infrastructure.
  • So I thought: why not build fediverse software directly on top of Cloudflare?
  • This project was inspired by Cloudflare Inc.โ€™s Wildebeest project, and it also references some of its ideas and code.
  • The project name, SiliconBeest, comes from my nickname silicon(sjang) combined with Cloudflareโ€™s Wildebeest.
  • Iโ€™m still working on making it as inexpensive to run as possible. For now, the goal is to support a small number of users with a small federation footprint on the free plan, and a medium federation footprint on the $5 plan.
  • From an API perspective, SiliconBeest aims to be compatible with both Mastodon and Misskey APIs. However, as many people know, full compatibility is difficult in practice, so this remains a long-term goal rather than something fully implemented today.

์•„์ง์€ ์ดˆ๊ธฐ ๋ฒ„์ „์ด๋ผ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„๋„ ๋งŽ์ง€๋งŒ, Cloudflare Workers, D1, R2, Queues ๋“ฑ Cloudflare์˜ ์„œ๋ฒ„๋ฆฌ์Šค ์ธํ”„๋ผ ์œ„์—์„œ ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์–ผ๋งˆ๋‚˜ ๊ฐ€๋ณ๊ณ  ์ €๋ ดํ•˜๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‹คํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

This is still an early version, and many parts are not implemented yet. However, SiliconBeest is an experiment in how lightweight and affordable fediverse software can be when built on top of Cloudflareโ€™s serverless infrastructure, such as Workers, D1, R2, and Queues.

ํ˜„์žฌ v1.0.0์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋จผ์ € ์ •๋ฆฌํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ–ˆ์œผ๋ฉฐ, ์•ž์œผ๋กœ Mastodon API ํ˜ธํ™˜์„ฑ, federation ์•ˆ์ •์„ฑ, ๊ด€๋ฆฌ ๋„๊ตฌ, ๋ฌธ์„œํ™” ๋“ฑ์„ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•ด๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

In v1.0.0, I focused on organizing the basic architecture and core functionality first. Going forward, I plan to gradually improve Mastodon API compatibility, federation stability, admin tooling, and documentation.

๊ด€์‹ฌ ์žˆ์œผ์‹  ๋ถ„๋“ค์€ GitHub ์ €์žฅ์†Œ๋ฅผ ํ™•์ธํ•ด์ฃผ์‹œ๊ณ , ์ด์Šˆ๋‚˜ ํ”ผ๋“œ๋ฐฑ๋„ ์–ธ์ œ๋“  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

If youโ€™re interested, please check out the GitHub repository. Issues, feedback, and suggestions are always welcome.

https://github.com/SJang1/siliconbeest


์„ค์น˜ ๋ฐ ๋ฐฐํฌ ๋ฐฉ๋ฒ• (Installation and Deployment)

SiliconBeest๋Š” GitHub ํ…œํ”Œ๋ฆฟ๊ณผ Cloudflare๋ฅผ ์ด์šฉํ•ด ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GitHub ํ…œํ”Œ๋ฆฟ์—์„œ ์ƒˆ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Cloudflare์—์„œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค์™€ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Cloudflare API ํ† ํฐ๊ณผ ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ GitHub Secrets์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  4. GitHub Actions๋ฅผ ํ†ตํ•ด ์ž๋™ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ธ์Šคํ„ด์Šค ์„ค์ •์„ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์„ค์น˜ ๊ณผ์ •์€ ๊ณ„์† ๋‹ค๋“ฌ๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐœ์„ ์‚ฌํ•ญ์ด ๋งŽ์Œ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”ํ›„ ๋ณด๊ฐ•ํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ด๋ฉฐ, ์ด์— ๋Œ€ํ•œ PR๋„ ํ™˜์˜์ž…๋‹ˆ๋‹ค.

SiliconBeest can be deployed relatively easily using a GitHub template and Cloudflare.

  1. Create a new repository from the GitHub template.
  2. Set up the required resources and environment on Cloudflare.
  3. Store the Cloudflare API token and required environment variables in GitHub Secrets.
  4. Deploy automatically using GitHub Actions.
  5. Once deployment is complete, finish configuring your instance.

The installation process is still being refined, and Iโ€™m aware that there is plenty of room for improvement. I plan to keep improving the documentation and deployment flow over time, and related PRs are always welcome.

็Ÿฅใ‚Šๅˆใ„ใฎ @siliconsjang ใ•ใ‚“ใŒไปŠๆ—ฅใ€SiliconBeest v1.0.0 ใ‚’ๅ…ฌ้–‹ใ—ใพใ—ใŸใ€‚Cloudflare Workersใ€D1ใ€R2ใ€Queuesใ ใ‘ใงๅ‹•ใใƒ•ใ‚งใƒ‡ใ‚ฃใƒใƒผใ‚นใ‚ตใƒผใƒใƒผใงใ€Fedifyใ‚’ไฝฟใฃใฆใใ‚Œใฆใ„ใพใ™ใ€‚

ๅ€‹ไบบ็š„ใซ้ข็™ฝใ„ใจๆ€ใฃใŸใฎใฏๅ‡บ็™บ็‚นใงใ€Cloudflare้šœๅฎณใฎใŸใณใซใƒ•ใ‚งใƒ‡ใ‚ฃใƒใƒผใ‚นใฎใ‚ตใƒผใƒใƒผใŒใพใจใ‚ใฆ่ฝใกใ‚‹ใฎใ‚’่ฆ‹ใฆใ€ใ€Œใใ‚Œใชใ‚‰ใ„ใฃใCloudflareใฎไธŠใงๅ‹•ใ‹ใ›ใฐใ‚ˆใ„ใฎใงใฏใ€ใจๆ€ใฃใŸใฎใŒๅง‹ใพใ‚Šใ ใใ†ใงใ™ใ€‚

ๅฐ่ฆๆจกใชใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใชใ‚‰Cloudflareใฎ็„กๆ–™ใƒ—ใƒฉใƒณใงใ€ๅฐ‘ใ—ๅคงใใใชใฃใฆใ‚‚ๆœˆ5ใƒ‰ใƒซใใ‚‰ใ„ใง้‹ๅ–ถใงใใ‚‹ใ“ใจใ‚’็›ฎๆŒ‡ใ—ใฆใ„ใ‚‹ใจใฎใ“ใจใ€‚ใพใ ๅˆๆœŸใƒใƒผใ‚ธใƒงใƒณใชใฎใงๆœชๅฎŸ่ฃ…ใฎ้ƒจๅˆ†ใ‚‚ๅคšใใ€Mastodonใ‚„Misskey APIใจใฎไบ’ๆ›ๆ€งใฏๆœชใ ๅ…ˆใฎ็›ฎๆจ™ใฟใŸใ„ใงใ™ใ€‚

Fedifyใ‚’ไฝฟใฃใฆใใ‚Œใฆใ„ใ‚‹ใฎใ‚‚ใ‚ใฃใฆใ€ๅ€‹ไบบ็š„ใซๅฌ‰ใ—ใ„ใงใ™ใ€‚ๆฐ—ใซใชใฃใŸใฎใงๅ…ฑๆœ‰ใ—ใพใ™ใ€‚

ใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใฏAGPL 3.0ใงGitHubใงๅ…ฌ้–‹ใ•ใ‚Œใฆใ„ใพใ™ใ€‚

github.com

GitHub - SJang1/siliconbeest: Fediverse in Cloudflare Workers + live serverless code

Fediverse in Cloudflare Workers + live serverless code - SJang1/siliconbeest

@siliconsjang@hackers.pub

์•ˆ๋…•ํ•˜์„ธ์š”! Hello everyone!

SiliconBeest v1.0.0 ๊ณต๊ฐœ

๋งˆ์Šคํ† ๋ˆ API ํ˜ธํ™˜์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” Cloudflare ์—ฃ์ง€ ์ปดํ“จํŒ… ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ฆฌ์Šค ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด, SiliconBeest v1.0.0์„ ๊ณต๊ฐœํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

I'm pleased to announce SiliconBeest v1.0.0, a serverless fediverse software project built on Cloudflare edge computing, aiming for Mastodon API compatibility.

SiliconBeest Logo - a wildebeest with silicon on it


์„ค๋ช… (Description)

ko

  • SiliconBeest๋Š” Cloudflare Workers ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
  • Cloudflare ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋‹ค์ˆ˜์˜ ์—ฐํ•ฉ์šฐ์ฃผ ์„œ๋ฒ„๊ฐ€ ํ•จ๊ป˜ ์ ‘์† ๋ถˆ๊ฐ€ ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ณด๋ฉฐ, ์—ฐํ•ฉ์šฐ์ฃผ ์—ญ์‹œ Cloudflare ์ธํ”„๋ผ์— ์ƒ๋‹นํžˆ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์— ์ฐฉ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž๋Š” ์ƒ๊ฐ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Cloudflare Inc.์—์„œ ๊ฐœ๋ฐœํ–ˆ๋˜ Wildebeest ํ”„๋กœ์ ํŠธ์˜ ์•„์ด๋””์–ด์™€ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ ์ œ ๋‹‰๋„ค์ž„์ธ silicon(sjang) ์ด๋ž‘ Cloudflare์˜ Wildebeest๋ฅผ ์กฐํ•ฉํ•ด SiliconBeest๋กœ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ ์€ ์‚ฌ์šฉ์ž ์ˆ˜์™€ ์ž‘์€ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์„ ๊ธฐ์ค€์œผ๋กœ๋Š” Cloudflare ๋ฌด๋ฃŒ ํ”Œ๋žœ์—์„œ๋„ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์กฐ๊ธˆ ๋” ํฐ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์—์„œ๋Š” ์›” $5 ํ”Œ๋žœ์œผ๋กœ๋„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • API ์ธก๋ฉด์—์„œ SiliconBeest์˜ ๋ชฉํ‘œ๋Š” Mastodon ๋ฐ Misskey API์™€์˜ ํ˜ธํ™˜์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๋ก ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๊ณผ ์‹ค์ œ ๊ตฌํ˜„์€ ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ๋ถ€๋ถ„์€ ์•„์ง ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ๋กœ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

en

  • SiliconBeest is a fediverse project designed to run on Cloudflare Workers.
  • After seeing many fediverse servers become unavailable when Cloudflare had outages, I realized that the fediverse already relies heavily on Cloudflare infrastructure.
  • So I thought: why not build fediverse software directly on top of Cloudflare?
  • This project was inspired by Cloudflare Inc.โ€™s Wildebeest project, and it also references some of its ideas and code.
  • The project name, SiliconBeest, comes from my nickname silicon(sjang) combined with Cloudflareโ€™s Wildebeest.
  • Iโ€™m still working on making it as inexpensive to run as possible. For now, the goal is to support a small number of users with a small federation footprint on the free plan, and a medium federation footprint on the $5 plan.
  • From an API perspective, SiliconBeest aims to be compatible with both Mastodon and Misskey APIs. However, as many people know, full compatibility is difficult in practice, so this remains a long-term goal rather than something fully implemented today.

์•„์ง์€ ์ดˆ๊ธฐ ๋ฒ„์ „์ด๋ผ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„๋„ ๋งŽ์ง€๋งŒ, Cloudflare Workers, D1, R2, Queues ๋“ฑ Cloudflare์˜ ์„œ๋ฒ„๋ฆฌ์Šค ์ธํ”„๋ผ ์œ„์—์„œ ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์–ผ๋งˆ๋‚˜ ๊ฐ€๋ณ๊ณ  ์ €๋ ดํ•˜๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‹คํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

This is still an early version, and many parts are not implemented yet. However, SiliconBeest is an experiment in how lightweight and affordable fediverse software can be when built on top of Cloudflareโ€™s serverless infrastructure, such as Workers, D1, R2, and Queues.

ํ˜„์žฌ v1.0.0์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋จผ์ € ์ •๋ฆฌํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ–ˆ์œผ๋ฉฐ, ์•ž์œผ๋กœ Mastodon API ํ˜ธํ™˜์„ฑ, federation ์•ˆ์ •์„ฑ, ๊ด€๋ฆฌ ๋„๊ตฌ, ๋ฌธ์„œํ™” ๋“ฑ์„ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•ด๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

In v1.0.0, I focused on organizing the basic architecture and core functionality first. Going forward, I plan to gradually improve Mastodon API compatibility, federation stability, admin tooling, and documentation.

๊ด€์‹ฌ ์žˆ์œผ์‹  ๋ถ„๋“ค์€ GitHub ์ €์žฅ์†Œ๋ฅผ ํ™•์ธํ•ด์ฃผ์‹œ๊ณ , ์ด์Šˆ๋‚˜ ํ”ผ๋“œ๋ฐฑ๋„ ์–ธ์ œ๋“  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

If youโ€™re interested, please check out the GitHub repository. Issues, feedback, and suggestions are always welcome.

https://github.com/SJang1/siliconbeest


์„ค์น˜ ๋ฐ ๋ฐฐํฌ ๋ฐฉ๋ฒ• (Installation and Deployment)

SiliconBeest๋Š” GitHub ํ…œํ”Œ๋ฆฟ๊ณผ Cloudflare๋ฅผ ์ด์šฉํ•ด ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GitHub ํ…œํ”Œ๋ฆฟ์—์„œ ์ƒˆ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Cloudflare์—์„œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค์™€ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Cloudflare API ํ† ํฐ๊ณผ ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ GitHub Secrets์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  4. GitHub Actions๋ฅผ ํ†ตํ•ด ์ž๋™ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ธ์Šคํ„ด์Šค ์„ค์ •์„ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์„ค์น˜ ๊ณผ์ •์€ ๊ณ„์† ๋‹ค๋“ฌ๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐœ์„ ์‚ฌํ•ญ์ด ๋งŽ์Œ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”ํ›„ ๋ณด๊ฐ•ํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ด๋ฉฐ, ์ด์— ๋Œ€ํ•œ PR๋„ ํ™˜์˜์ž…๋‹ˆ๋‹ค.

SiliconBeest can be deployed relatively easily using a GitHub template and Cloudflare.

  1. Create a new repository from the GitHub template.
  2. Set up the required resources and environment on Cloudflare.
  3. Store the Cloudflare API token and required environment variables in GitHub Secrets.
  4. Deploy automatically using GitHub Actions.
  5. Once deployment is complete, finish configuring your instance.

The installation process is still being refined, and Iโ€™m aware that there is plenty of room for improvement. I plan to keep improving the documentation and deployment flow over time, and related PRs are always welcome.

็Ÿฅใ‚Šๅˆใ„ใฎ @siliconsjang ใ•ใ‚“ใŒไปŠๆ—ฅใ€SiliconBeest v1.0.0 ใ‚’ๅ…ฌ้–‹ใ—ใพใ—ใŸใ€‚Cloudflare Workersใ€D1ใ€R2ใ€Queuesใ ใ‘ใงๅ‹•ใใƒ•ใ‚งใƒ‡ใ‚ฃใƒใƒผใ‚นใ‚ตใƒผใƒใƒผใงใ€Fedifyใ‚’ไฝฟใฃใฆใใ‚Œใฆใ„ใพใ™ใ€‚

ๅ€‹ไบบ็š„ใซ้ข็™ฝใ„ใจๆ€ใฃใŸใฎใฏๅ‡บ็™บ็‚นใงใ€Cloudflare้šœๅฎณใฎใŸใณใซใƒ•ใ‚งใƒ‡ใ‚ฃใƒใƒผใ‚นใฎใ‚ตใƒผใƒใƒผใŒใพใจใ‚ใฆ่ฝใกใ‚‹ใฎใ‚’่ฆ‹ใฆใ€ใ€Œใใ‚Œใชใ‚‰ใ„ใฃใCloudflareใฎไธŠใงๅ‹•ใ‹ใ›ใฐใ‚ˆใ„ใฎใงใฏใ€ใจๆ€ใฃใŸใฎใŒๅง‹ใพใ‚Šใ ใใ†ใงใ™ใ€‚

ๅฐ่ฆๆจกใชใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใชใ‚‰Cloudflareใฎ็„กๆ–™ใƒ—ใƒฉใƒณใงใ€ๅฐ‘ใ—ๅคงใใใชใฃใฆใ‚‚ๆœˆ5ใƒ‰ใƒซใใ‚‰ใ„ใง้‹ๅ–ถใงใใ‚‹ใ“ใจใ‚’็›ฎๆŒ‡ใ—ใฆใ„ใ‚‹ใจใฎใ“ใจใ€‚ใพใ ๅˆๆœŸใƒใƒผใ‚ธใƒงใƒณใชใฎใงๆœชๅฎŸ่ฃ…ใฎ้ƒจๅˆ†ใ‚‚ๅคšใใ€Mastodonใ‚„Misskey APIใจใฎไบ’ๆ›ๆ€งใฏๆœชใ ๅ…ˆใฎ็›ฎๆจ™ใฟใŸใ„ใงใ™ใ€‚

Fedifyใ‚’ไฝฟใฃใฆใใ‚Œใฆใ„ใ‚‹ใฎใ‚‚ใ‚ใฃใฆใ€ๅ€‹ไบบ็š„ใซๅฌ‰ใ—ใ„ใงใ™ใ€‚ๆฐ—ใซใชใฃใŸใฎใงๅ…ฑๆœ‰ใ—ใพใ™ใ€‚

ใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใฏAGPL 3.0ใงGitHubใงๅ…ฌ้–‹ใ•ใ‚Œใฆใ„ใพใ™ใ€‚

github.com

GitHub - SJang1/siliconbeest: Fediverse in Cloudflare Workers + live serverless code

Fediverse in Cloudflare Workers + live serverless code - SJang1/siliconbeest

@siliconsjang@hackers.pub

์•ˆ๋…•ํ•˜์„ธ์š”! Hello everyone!

SiliconBeest v1.0.0 ๊ณต๊ฐœ

๋งˆ์Šคํ† ๋ˆ API ํ˜ธํ™˜์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” Cloudflare ์—ฃ์ง€ ์ปดํ“จํŒ… ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ฆฌ์Šค ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด, SiliconBeest v1.0.0์„ ๊ณต๊ฐœํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

I'm pleased to announce SiliconBeest v1.0.0, a serverless fediverse software project built on Cloudflare edge computing, aiming for Mastodon API compatibility.

SiliconBeest Logo - a wildebeest with silicon on it


์„ค๋ช… (Description)

ko

  • SiliconBeest๋Š” Cloudflare Workers ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
  • Cloudflare ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋‹ค์ˆ˜์˜ ์—ฐํ•ฉ์šฐ์ฃผ ์„œ๋ฒ„๊ฐ€ ํ•จ๊ป˜ ์ ‘์† ๋ถˆ๊ฐ€ ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ณด๋ฉฐ, ์—ฐํ•ฉ์šฐ์ฃผ ์—ญ์‹œ Cloudflare ์ธํ”„๋ผ์— ์ƒ๋‹นํžˆ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์— ์ฐฉ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž๋Š” ์ƒ๊ฐ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Cloudflare Inc.์—์„œ ๊ฐœ๋ฐœํ–ˆ๋˜ Wildebeest ํ”„๋กœ์ ํŠธ์˜ ์•„์ด๋””์–ด์™€ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ ์ œ ๋‹‰๋„ค์ž„์ธ silicon(sjang) ์ด๋ž‘ Cloudflare์˜ Wildebeest๋ฅผ ์กฐํ•ฉํ•ด SiliconBeest๋กœ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ ์€ ์‚ฌ์šฉ์ž ์ˆ˜์™€ ์ž‘์€ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์„ ๊ธฐ์ค€์œผ๋กœ๋Š” Cloudflare ๋ฌด๋ฃŒ ํ”Œ๋žœ์—์„œ๋„ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์กฐ๊ธˆ ๋” ํฐ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์—์„œ๋Š” ์›” $5 ํ”Œ๋žœ์œผ๋กœ๋„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • API ์ธก๋ฉด์—์„œ SiliconBeest์˜ ๋ชฉํ‘œ๋Š” Mastodon ๋ฐ Misskey API์™€์˜ ํ˜ธํ™˜์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๋ก ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๊ณผ ์‹ค์ œ ๊ตฌํ˜„์€ ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ๋ถ€๋ถ„์€ ์•„์ง ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ๋กœ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

en

  • SiliconBeest is a fediverse project designed to run on Cloudflare Workers.
  • After seeing many fediverse servers become unavailable when Cloudflare had outages, I realized that the fediverse already relies heavily on Cloudflare infrastructure.
  • So I thought: why not build fediverse software directly on top of Cloudflare?
  • This project was inspired by Cloudflare Inc.โ€™s Wildebeest project, and it also references some of its ideas and code.
  • The project name, SiliconBeest, comes from my nickname silicon(sjang) combined with Cloudflareโ€™s Wildebeest.
  • Iโ€™m still working on making it as inexpensive to run as possible. For now, the goal is to support a small number of users with a small federation footprint on the free plan, and a medium federation footprint on the $5 plan.
  • From an API perspective, SiliconBeest aims to be compatible with both Mastodon and Misskey APIs. However, as many people know, full compatibility is difficult in practice, so this remains a long-term goal rather than something fully implemented today.

์•„์ง์€ ์ดˆ๊ธฐ ๋ฒ„์ „์ด๋ผ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„๋„ ๋งŽ์ง€๋งŒ, Cloudflare Workers, D1, R2, Queues ๋“ฑ Cloudflare์˜ ์„œ๋ฒ„๋ฆฌ์Šค ์ธํ”„๋ผ ์œ„์—์„œ ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์–ผ๋งˆ๋‚˜ ๊ฐ€๋ณ๊ณ  ์ €๋ ดํ•˜๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‹คํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

This is still an early version, and many parts are not implemented yet. However, SiliconBeest is an experiment in how lightweight and affordable fediverse software can be when built on top of Cloudflareโ€™s serverless infrastructure, such as Workers, D1, R2, and Queues.

ํ˜„์žฌ v1.0.0์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋จผ์ € ์ •๋ฆฌํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ–ˆ์œผ๋ฉฐ, ์•ž์œผ๋กœ Mastodon API ํ˜ธํ™˜์„ฑ, federation ์•ˆ์ •์„ฑ, ๊ด€๋ฆฌ ๋„๊ตฌ, ๋ฌธ์„œํ™” ๋“ฑ์„ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•ด๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

In v1.0.0, I focused on organizing the basic architecture and core functionality first. Going forward, I plan to gradually improve Mastodon API compatibility, federation stability, admin tooling, and documentation.

๊ด€์‹ฌ ์žˆ์œผ์‹  ๋ถ„๋“ค์€ GitHub ์ €์žฅ์†Œ๋ฅผ ํ™•์ธํ•ด์ฃผ์‹œ๊ณ , ์ด์Šˆ๋‚˜ ํ”ผ๋“œ๋ฐฑ๋„ ์–ธ์ œ๋“  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

If youโ€™re interested, please check out the GitHub repository. Issues, feedback, and suggestions are always welcome.

https://github.com/SJang1/siliconbeest


์„ค์น˜ ๋ฐ ๋ฐฐํฌ ๋ฐฉ๋ฒ• (Installation and Deployment)

SiliconBeest๋Š” GitHub ํ…œํ”Œ๋ฆฟ๊ณผ Cloudflare๋ฅผ ์ด์šฉํ•ด ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GitHub ํ…œํ”Œ๋ฆฟ์—์„œ ์ƒˆ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Cloudflare์—์„œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค์™€ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Cloudflare API ํ† ํฐ๊ณผ ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ GitHub Secrets์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  4. GitHub Actions๋ฅผ ํ†ตํ•ด ์ž๋™ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ธ์Šคํ„ด์Šค ์„ค์ •์„ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์„ค์น˜ ๊ณผ์ •์€ ๊ณ„์† ๋‹ค๋“ฌ๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐœ์„ ์‚ฌํ•ญ์ด ๋งŽ์Œ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”ํ›„ ๋ณด๊ฐ•ํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ด๋ฉฐ, ์ด์— ๋Œ€ํ•œ PR๋„ ํ™˜์˜์ž…๋‹ˆ๋‹ค.

SiliconBeest can be deployed relatively easily using a GitHub template and Cloudflare.

  1. Create a new repository from the GitHub template.
  2. Set up the required resources and environment on Cloudflare.
  3. Store the Cloudflare API token and required environment variables in GitHub Secrets.
  4. Deploy automatically using GitHub Actions.
  5. Once deployment is complete, finish configuring your instance.

The installation process is still being refined, and Iโ€™m aware that there is plenty of room for improvement. I plan to keep improving the documentation and deployment flow over time, and related PRs are always welcome.

็Ÿฅไบบ(์ง€์ธ)์ธ @siliconsjang ๋‹˜์ด ์˜ค๋Š˜ SiliconBeest v1.0.0์„ ๅ…ฌ้–‹(๊ณต๊ฐœ)ํ–ˆ์Šต๋‹ˆ๋‹ค. Fedify์™€ Cloudflare๋ฅผ ๅŸบ็›ค(๊ธฐ๋ฐ˜)์œผ๋กœ ๋งŒ๋“  ์†Œํ”„ํŠธ์›จ์–ด์ธ๋ฐ, Workers, D1, R2, Queues ๋“ฑ ์„œ๋ฒ„๋ฆฌ์Šค ์Šคํƒ ์œ„์—์„œ ๅ…จ้ƒจ(์ „๋ถ€) ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

็™ผๆƒณ(๋ฐœ์ƒ)์˜ ๅ‡บ็™ผ้ปž(์ถœ๋ฐœ์ )์ด ์žฌ๋ฐŒ์Šต๋‹ˆ๋‹ค. Cloudflare ้šœ็ค™(์žฅ์• ) ๋•Œ ่ฏๅˆๅฎ‡ๅฎ™(์—ฐํ•ฉ์šฐ์ฃผ) ์„œ๋ฒ„๋“ค์ด ๋ฉ๋‹ฌ์•„ ๋‹ค์šด๋˜๋Š” ๊ฑธ ๋ณด๊ณ , ใ€Œ๊ทธ๋Ÿผ ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋Œ๋ฆฌ๋ฉด ๋˜์ง€ ์•Š๋‚˜?」๋ผ๋Š” ์ƒ๊ฐ์—์„œ ๅง‹ไฝœ(์‹œ์ž‘)ํ–ˆ๋‹ค๊ณ  ํ•˜๋„ค์š”.

่ฒป็”จ(๋น„์šฉ) ้ข(๋ฉด)์—์„œ๋Š” ๅฐ่ฆๆจก(์†Œ๊ทœ๋ชจ) ์ธ์Šคํ„ด์Šค๋Š” Cloudflare ็„กๆ–™(๋ฌด๋ฃŒ) ํ”Œ๋žœ, ์กฐ๊ธˆ ๋” ํฐ ่ฆๆจก(๊ทœ๋ชจ)๋Š” ๆœˆ(์›”) $5 ํ”Œ๋žœ์œผ๋กœ ๅ ช็•ถ(๊ฐ๋‹น)ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒŒ ็›ฎๆจ™(๋ชฉํ‘œ)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์•„์ง ๅˆๆœŸ(์ดˆ๊ธฐ) ๋ฒ„์ „์ด๋ผ ๆœชๅ…ท้กฏ(๋ฏธ๊ตฌํ˜„) ๆฉŸ่ƒฝ(๊ธฐ๋Šฅ)์ด ๋งŽ๊ณ , Mastodon ๋ฐ Misskey API ไบ’ๆ›(ํ˜ธํ™˜)์€ ้•ทๆœŸ(์žฅ๊ธฐ) ็›ฎๆจ™(๋ชฉํ‘œ)๋กœ ๋ณด๊ณ  ์žˆ๋‹ค๋„ค์š”.

Fedify๋ฅผ ์จ์ฃผ์‹œ๋Š” ๋ถ„์ด๋ผ ๋ฐ˜๊ฐ‘๊ธฐ๋„ ํ•˜๊ณ , ๆ‡‰ๆด(์‘์›)ํ•˜๊ณ  ์‹ถ์–ด ็ดนไป‹(์†Œ๊ฐœ)ํ•ฉ๋‹ˆ๋‹ค.

์†Œ์Šค ์ฝ”๋“œ๋Š” AGPL 3.0์œผ๋กœ GitHub์— ๊ณต๊ฐœ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

github.com

GitHub - SJang1/siliconbeest: Fediverse in Cloudflare Workers + live serverless code

Fediverse in Cloudflare Workers + live serverless code - SJang1/siliconbeest

@siliconsjang@hackers.pub

์•ˆ๋…•ํ•˜์„ธ์š”! Hello everyone!

SiliconBeest v1.0.0 ๊ณต๊ฐœ

๋งˆ์Šคํ† ๋ˆ API ํ˜ธํ™˜์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” Cloudflare ์—ฃ์ง€ ์ปดํ“จํŒ… ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ฆฌ์Šค ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด, SiliconBeest v1.0.0์„ ๊ณต๊ฐœํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

I'm pleased to announce SiliconBeest v1.0.0, a serverless fediverse software project built on Cloudflare edge computing, aiming for Mastodon API compatibility.

SiliconBeest Logo - a wildebeest with silicon on it


์„ค๋ช… (Description)

ko

  • SiliconBeest๋Š” Cloudflare Workers ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
  • Cloudflare ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋‹ค์ˆ˜์˜ ์—ฐํ•ฉ์šฐ์ฃผ ์„œ๋ฒ„๊ฐ€ ํ•จ๊ป˜ ์ ‘์† ๋ถˆ๊ฐ€ ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ณด๋ฉฐ, ์—ฐํ•ฉ์šฐ์ฃผ ์—ญ์‹œ Cloudflare ์ธํ”„๋ผ์— ์ƒ๋‹นํžˆ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์— ์ฐฉ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž๋Š” ์ƒ๊ฐ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Cloudflare Inc.์—์„œ ๊ฐœ๋ฐœํ–ˆ๋˜ Wildebeest ํ”„๋กœ์ ํŠธ์˜ ์•„์ด๋””์–ด์™€ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ ์ œ ๋‹‰๋„ค์ž„์ธ silicon(sjang) ์ด๋ž‘ Cloudflare์˜ Wildebeest๋ฅผ ์กฐํ•ฉํ•ด SiliconBeest๋กœ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ ์€ ์‚ฌ์šฉ์ž ์ˆ˜์™€ ์ž‘์€ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์„ ๊ธฐ์ค€์œผ๋กœ๋Š” Cloudflare ๋ฌด๋ฃŒ ํ”Œ๋žœ์—์„œ๋„ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์กฐ๊ธˆ ๋” ํฐ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์—์„œ๋Š” ์›” $5 ํ”Œ๋žœ์œผ๋กœ๋„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • API ์ธก๋ฉด์—์„œ SiliconBeest์˜ ๋ชฉํ‘œ๋Š” Mastodon ๋ฐ Misskey API์™€์˜ ํ˜ธํ™˜์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๋ก ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๊ณผ ์‹ค์ œ ๊ตฌํ˜„์€ ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ๋ถ€๋ถ„์€ ์•„์ง ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ๋กœ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

en

  • SiliconBeest is a fediverse project designed to run on Cloudflare Workers.
  • After seeing many fediverse servers become unavailable when Cloudflare had outages, I realized that the fediverse already relies heavily on Cloudflare infrastructure.
  • So I thought: why not build fediverse software directly on top of Cloudflare?
  • This project was inspired by Cloudflare Inc.โ€™s Wildebeest project, and it also references some of its ideas and code.
  • The project name, SiliconBeest, comes from my nickname silicon(sjang) combined with Cloudflareโ€™s Wildebeest.
  • Iโ€™m still working on making it as inexpensive to run as possible. For now, the goal is to support a small number of users with a small federation footprint on the free plan, and a medium federation footprint on the $5 plan.
  • From an API perspective, SiliconBeest aims to be compatible with both Mastodon and Misskey APIs. However, as many people know, full compatibility is difficult in practice, so this remains a long-term goal rather than something fully implemented today.

์•„์ง์€ ์ดˆ๊ธฐ ๋ฒ„์ „์ด๋ผ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„๋„ ๋งŽ์ง€๋งŒ, Cloudflare Workers, D1, R2, Queues ๋“ฑ Cloudflare์˜ ์„œ๋ฒ„๋ฆฌ์Šค ์ธํ”„๋ผ ์œ„์—์„œ ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์–ผ๋งˆ๋‚˜ ๊ฐ€๋ณ๊ณ  ์ €๋ ดํ•˜๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‹คํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

This is still an early version, and many parts are not implemented yet. However, SiliconBeest is an experiment in how lightweight and affordable fediverse software can be when built on top of Cloudflareโ€™s serverless infrastructure, such as Workers, D1, R2, and Queues.

ํ˜„์žฌ v1.0.0์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋จผ์ € ์ •๋ฆฌํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ–ˆ์œผ๋ฉฐ, ์•ž์œผ๋กœ Mastodon API ํ˜ธํ™˜์„ฑ, federation ์•ˆ์ •์„ฑ, ๊ด€๋ฆฌ ๋„๊ตฌ, ๋ฌธ์„œํ™” ๋“ฑ์„ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•ด๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

In v1.0.0, I focused on organizing the basic architecture and core functionality first. Going forward, I plan to gradually improve Mastodon API compatibility, federation stability, admin tooling, and documentation.

๊ด€์‹ฌ ์žˆ์œผ์‹  ๋ถ„๋“ค์€ GitHub ์ €์žฅ์†Œ๋ฅผ ํ™•์ธํ•ด์ฃผ์‹œ๊ณ , ์ด์Šˆ๋‚˜ ํ”ผ๋“œ๋ฐฑ๋„ ์–ธ์ œ๋“  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

If youโ€™re interested, please check out the GitHub repository. Issues, feedback, and suggestions are always welcome.

https://github.com/SJang1/siliconbeest


์„ค์น˜ ๋ฐ ๋ฐฐํฌ ๋ฐฉ๋ฒ• (Installation and Deployment)

SiliconBeest๋Š” GitHub ํ…œํ”Œ๋ฆฟ๊ณผ Cloudflare๋ฅผ ์ด์šฉํ•ด ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GitHub ํ…œํ”Œ๋ฆฟ์—์„œ ์ƒˆ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Cloudflare์—์„œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค์™€ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Cloudflare API ํ† ํฐ๊ณผ ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ GitHub Secrets์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  4. GitHub Actions๋ฅผ ํ†ตํ•ด ์ž๋™ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ธ์Šคํ„ด์Šค ์„ค์ •์„ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์„ค์น˜ ๊ณผ์ •์€ ๊ณ„์† ๋‹ค๋“ฌ๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐœ์„ ์‚ฌํ•ญ์ด ๋งŽ์Œ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”ํ›„ ๋ณด๊ฐ•ํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ด๋ฉฐ, ์ด์— ๋Œ€ํ•œ PR๋„ ํ™˜์˜์ž…๋‹ˆ๋‹ค.

SiliconBeest can be deployed relatively easily using a GitHub template and Cloudflare.

  1. Create a new repository from the GitHub template.
  2. Set up the required resources and environment on Cloudflare.
  3. Store the Cloudflare API token and required environment variables in GitHub Secrets.
  4. Deploy automatically using GitHub Actions.
  5. Once deployment is complete, finish configuring your instance.

The installation process is still being refined, and Iโ€™m aware that there is plenty of room for improvement. I plan to keep improving the documentation and deployment flow over time, and related PRs are always welcome.

A friend of mine, @siliconsjang, released SiliconBeest v1.0.0 today. It's a server built on Workers, D1, R2, and Queues, using Fedify.

I like the starting point: after watching fediverse servers go down together during Cloudflare outages, they thought, why not just run on Cloudflare directly?

They're aiming for something cheap enough that a small instance can stay on Cloudflare's free plan, and a somewhat bigger one can fit in the $5/month tier. It's still early; a lot is missing, and Mastodon/Misskey API compatibility is more of a long-term goal.

I'm glad to see Fedify put to use for something like this. Worth checking out.

The source code is on GitHub under AGPL 3.0.

github.com

GitHub - SJang1/siliconbeest: Fediverse in Cloudflare Workers + live serverless code

Fediverse in Cloudflare Workers + live serverless code - SJang1/siliconbeest

@siliconsjang@hackers.pub

์•ˆ๋…•ํ•˜์„ธ์š”! Hello everyone!

SiliconBeest v1.0.0 ๊ณต๊ฐœ

๋งˆ์Šคํ† ๋ˆ API ํ˜ธํ™˜์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” Cloudflare ์—ฃ์ง€ ์ปดํ“จํŒ… ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ฆฌ์Šค ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด, SiliconBeest v1.0.0์„ ๊ณต๊ฐœํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

I'm pleased to announce SiliconBeest v1.0.0, a serverless fediverse software project built on Cloudflare edge computing, aiming for Mastodon API compatibility.

SiliconBeest Logo - a wildebeest with silicon on it


์„ค๋ช… (Description)

ko

  • SiliconBeest๋Š” Cloudflare Workers ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
  • Cloudflare ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋‹ค์ˆ˜์˜ ์—ฐํ•ฉ์šฐ์ฃผ ์„œ๋ฒ„๊ฐ€ ํ•จ๊ป˜ ์ ‘์† ๋ถˆ๊ฐ€ ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ณด๋ฉฐ, ์—ฐํ•ฉ์šฐ์ฃผ ์—ญ์‹œ Cloudflare ์ธํ”„๋ผ์— ์ƒ๋‹นํžˆ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์— ์ฐฉ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์•„์˜ˆ Cloudflare ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž๋Š” ์ƒ๊ฐ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Cloudflare Inc.์—์„œ ๊ฐœ๋ฐœํ–ˆ๋˜ Wildebeest ํ”„๋กœ์ ํŠธ์˜ ์•„์ด๋””์–ด์™€ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ ์ œ ๋‹‰๋„ค์ž„์ธ silicon(sjang) ์ด๋ž‘ Cloudflare์˜ Wildebeest๋ฅผ ์กฐํ•ฉํ•ด SiliconBeest๋กœ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ ์€ ์‚ฌ์šฉ์ž ์ˆ˜์™€ ์ž‘์€ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์„ ๊ธฐ์ค€์œผ๋กœ๋Š” Cloudflare ๋ฌด๋ฃŒ ํ”Œ๋žœ์—์„œ๋„ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์กฐ๊ธˆ ๋” ํฐ ๊ทœ๋ชจ์˜ ์—ฐํ•ฉ์—์„œ๋Š” ์›” $5 ํ”Œ๋žœ์œผ๋กœ๋„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • API ์ธก๋ฉด์—์„œ SiliconBeest์˜ ๋ชฉํ‘œ๋Š” Mastodon ๋ฐ Misskey API์™€์˜ ํ˜ธํ™˜์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๋ก ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๊ณผ ์‹ค์ œ ๊ตฌํ˜„์€ ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ๋ถ€๋ถ„์€ ์•„์ง ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ๋กœ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

en

  • SiliconBeest is a fediverse project designed to run on Cloudflare Workers.
  • After seeing many fediverse servers become unavailable when Cloudflare had outages, I realized that the fediverse already relies heavily on Cloudflare infrastructure.
  • So I thought: why not build fediverse software directly on top of Cloudflare?
  • This project was inspired by Cloudflare Inc.โ€™s Wildebeest project, and it also references some of its ideas and code.
  • The project name, SiliconBeest, comes from my nickname silicon(sjang) combined with Cloudflareโ€™s Wildebeest.
  • Iโ€™m still working on making it as inexpensive to run as possible. For now, the goal is to support a small number of users with a small federation footprint on the free plan, and a medium federation footprint on the $5 plan.
  • From an API perspective, SiliconBeest aims to be compatible with both Mastodon and Misskey APIs. However, as many people know, full compatibility is difficult in practice, so this remains a long-term goal rather than something fully implemented today.

์•„์ง์€ ์ดˆ๊ธฐ ๋ฒ„์ „์ด๋ผ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„๋„ ๋งŽ์ง€๋งŒ, Cloudflare Workers, D1, R2, Queues ๋“ฑ Cloudflare์˜ ์„œ๋ฒ„๋ฆฌ์Šค ์ธํ”„๋ผ ์œ„์—์„œ ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์–ผ๋งˆ๋‚˜ ๊ฐ€๋ณ๊ณ  ์ €๋ ดํ•˜๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‹คํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

This is still an early version, and many parts are not implemented yet. However, SiliconBeest is an experiment in how lightweight and affordable fediverse software can be when built on top of Cloudflareโ€™s serverless infrastructure, such as Workers, D1, R2, and Queues.

ํ˜„์žฌ v1.0.0์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋จผ์ € ์ •๋ฆฌํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ–ˆ์œผ๋ฉฐ, ์•ž์œผ๋กœ Mastodon API ํ˜ธํ™˜์„ฑ, federation ์•ˆ์ •์„ฑ, ๊ด€๋ฆฌ ๋„๊ตฌ, ๋ฌธ์„œํ™” ๋“ฑ์„ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•ด๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

In v1.0.0, I focused on organizing the basic architecture and core functionality first. Going forward, I plan to gradually improve Mastodon API compatibility, federation stability, admin tooling, and documentation.

๊ด€์‹ฌ ์žˆ์œผ์‹  ๋ถ„๋“ค์€ GitHub ์ €์žฅ์†Œ๋ฅผ ํ™•์ธํ•ด์ฃผ์‹œ๊ณ , ์ด์Šˆ๋‚˜ ํ”ผ๋“œ๋ฐฑ๋„ ์–ธ์ œ๋“  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

If youโ€™re interested, please check out the GitHub repository. Issues, feedback, and suggestions are always welcome.

https://github.com/SJang1/siliconbeest


์„ค์น˜ ๋ฐ ๋ฐฐํฌ ๋ฐฉ๋ฒ• (Installation and Deployment)

SiliconBeest๋Š” GitHub ํ…œํ”Œ๋ฆฟ๊ณผ Cloudflare๋ฅผ ์ด์šฉํ•ด ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GitHub ํ…œํ”Œ๋ฆฟ์—์„œ ์ƒˆ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Cloudflare์—์„œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค์™€ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Cloudflare API ํ† ํฐ๊ณผ ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ GitHub Secrets์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  4. GitHub Actions๋ฅผ ํ†ตํ•ด ์ž๋™ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ธ์Šคํ„ด์Šค ์„ค์ •์„ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์„ค์น˜ ๊ณผ์ •์€ ๊ณ„์† ๋‹ค๋“ฌ๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐœ์„ ์‚ฌํ•ญ์ด ๋งŽ์Œ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”ํ›„ ๋ณด๊ฐ•ํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ด๋ฉฐ, ์ด์— ๋Œ€ํ•œ PR๋„ ํ™˜์˜์ž…๋‹ˆ๋‹ค.

SiliconBeest can be deployed relatively easily using a GitHub template and Cloudflare.

  1. Create a new repository from the GitHub template.
  2. Set up the required resources and environment on Cloudflare.
  3. Store the Cloudflare API token and required environment variables in GitHub Secrets.
  4. Deploy automatically using GitHub Actions.
  5. Once deployment is complete, finish configuring your instance.

The installation process is still being refined, and Iโ€™m aware that there is plenty of room for improvement. I plan to keep improving the documentation and deployment flow over time, and related PRs are always welcome.

@reiver@mastodon.social

In ActivityPub, these are all equivalent:

"type":"Banana"

"type":["Banana"]

"type":{"๏ผ id":"Banana"}

"type":[{"๏ผ id":"Banana"}]

"type":{"id":"Banana"}

"type":[{"id":"Banana"}]

"๏ผ type":"Banana"

"๏ผ type":["Banana"]

"๏ผ type":{"๏ผ id":"Banana"}

"๏ผ type":[{"๏ผ id":"Banana"}]

"๏ผ type":{"id":"Banana"}

"๏ผ type":[{"id":"Banana"}]

@adamsdesk@fosstodon.org

Updated: List of Helpful Mastodon Resources

- Add Connected Places
- Add delightful fediverse clients
- Add delightful fediverse deveopment
- Add delightful fediverse experience
- Remove orphan link

Handmade list of resources for the federated social network Mastodon covering, how to use, find an instance, find people, tools and more.

adamsdesk.com/posts/list-masto

adamsdesk.com

List of Helpful Mastodon Resources

Handmade list of resources for the federated social network Mastodon covering, how to use, find an instance, find people, tools and more.

@homegrown@social.growyourown.services

There are a LOT of Fediverse projects out there!

If you're a techy person interested in self-hosting Fediverse platforms, you might like to check out the "Delightful Fediverse" list which tries to feature every Fediverse project available:

๐ŸŒฑ codeberg.org/fediverse/delight

(It's worth noting the meaning of the emoji next to project names, as the status of different projects varies.)

codeberg.org

delightful-fediverse-experience

A curated list of server applications supported on the ActivityPub Fediverse and related standards.

@homegrown@social.growyourown.services

There are a LOT of Fediverse projects out there!

If you're a techy person interested in self-hosting Fediverse platforms, you might like to check out the "Delightful Fediverse" list which tries to feature every Fediverse project available:

๐ŸŒฑ codeberg.org/fediverse/delight

(It's worth noting the meaning of the emoji next to project names, as the status of different projects varies.)

codeberg.org

delightful-fediverse-experience

A curated list of server applications supported on the ActivityPub Fediverse and related standards.

@apps@toot.fedilab.app

is a new social network working with . This is not an app where you can connect your Mastodon, Pixelfed or PeerTube account.
There is no web version and no API because the ActivityPub server runs on the device itself. That's the whole challenge behind this project.
If there is more engagement, I plan to build a desktop version and even sync between different devices.

The official account for all announcements is @HolosSocial

More: holos.social/how-it-works

holos.social

How It Works - Holos

Your phone becomes your social server

@apps@toot.fedilab.app

is a new social network working with . This is not an app where you can connect your Mastodon, Pixelfed or PeerTube account.
There is no web version and no API because the ActivityPub server runs on the device itself. That's the whole challenge behind this project.
If there is more engagement, I plan to build a desktop version and even sync between different devices.

The official account for all announcements is @HolosSocial

More: holos.social/how-it-works

holos.social

How It Works - Holos

Your phone becomes your social server

@homegrown@social.growyourown.services

There are a LOT of Fediverse projects out there!

If you're a techy person interested in self-hosting Fediverse platforms, you might like to check out the "Delightful Fediverse" list which tries to feature every Fediverse project available:

๐ŸŒฑ codeberg.org/fediverse/delight

(It's worth noting the meaning of the emoji next to project names, as the status of different projects varies.)

codeberg.org

delightful-fediverse-experience

A curated list of server applications supported on the ActivityPub Fediverse and related standards.

@homegrown@social.growyourown.services

There are a LOT of Fediverse projects out there!

If you're a techy person interested in self-hosting Fediverse platforms, you might like to check out the "Delightful Fediverse" list which tries to feature every Fediverse project available:

๐ŸŒฑ codeberg.org/fediverse/delight

(It's worth noting the meaning of the emoji next to project names, as the status of different projects varies.)

codeberg.org

delightful-fediverse-experience

A curated list of server applications supported on the ActivityPub Fediverse and related standards.

@homegrown@social.growyourown.services

There are a LOT of Fediverse projects out there!

If you're a techy person interested in self-hosting Fediverse platforms, you might like to check out the "Delightful Fediverse" list which tries to feature every Fediverse project available:

๐ŸŒฑ codeberg.org/fediverse/delight

(It's worth noting the meaning of the emoji next to project names, as the status of different projects varies.)

codeberg.org

delightful-fediverse-experience

A curated list of server applications supported on the ActivityPub Fediverse and related standards.

@homegrown@social.growyourown.services

There are a LOT of Fediverse projects out there!

If you're a techy person interested in self-hosting Fediverse platforms, you might like to check out the "Delightful Fediverse" list which tries to feature every Fediverse project available:

๐ŸŒฑ codeberg.org/fediverse/delight

(It's worth noting the meaning of the emoji next to project names, as the status of different projects varies.)

codeberg.org

delightful-fediverse-experience

A curated list of server applications supported on the ActivityPub Fediverse and related standards.

@adamsdesk@fosstodon.org

Updated: List of Helpful Mastodon Resources

- Add Connected Places
- Add delightful fediverse clients
- Add delightful fediverse deveopment
- Add delightful fediverse experience
- Remove orphan link

Handmade list of resources for the federated social network Mastodon covering, how to use, find an instance, find people, tools and more.

adamsdesk.com/posts/list-masto

adamsdesk.com

List of Helpful Mastodon Resources

Handmade list of resources for the federated social network Mastodon covering, how to use, find an instance, find people, tools and more.

@McPringle@fosstodon.org
@hopland@snabelen.no

To me, is the future. In many different avenues of digital services, it's usually a monopolistic vendor lock-in situation. is no exception, nor is .

But Forgejo aims to be a git system that uses to communicate with other git instances - in effect decentralizing code repos, and even possibly CD/CI chains. Hold on to your hats, folks.

itsfoss.com/news/netherlands-f

itsfoss.com

Go Away Microsoft! The Netherlands is Quietly Building Its Own GitHub Replacement

The self-hosted, FOSS-only platform is still in the pilot phase, but government agencies are already signing up.

@christin @fluffy @kkarhan

> Any implementation of a music collection on top of would still have to implement the collection itself, and maintain standards for how backfilling works and how the collection is shaped, so why not start with a clean implementation that only provides the parts that are important to a music collection to begin with?

Yet I do wonder about xkcd.com/927

We often think about ActivityPub by how we experience it on the fediverse. But the fediverse rn is only a very particular implementation of AP, specialized to support microblogging and traditional social media use cases.

AP offers "a social graph of addressible actors to exchange activities with an object payload". Actors, activities, and objects are all fully customizable linked data, they can be anything, modeled to represent any domain.

With an ActivityPub API client you maintain your music collection locally, then publish and interact to a static site, or other interested actors.

xkcd.com

Standards

@toddsundsted@epiktistes.com

This release continues my focus on security instead of new features. As I wrote earlier this week, I rebuilt the template framework Ktistec uses with type safety as a central principle. What does that mean?

Imagine that you have an instance of a String that holds federated data. Where can you safely render that in a browser, and what operations (sanitization, escaping, etc.) do you need to do first?

The only way to answer that is to look carefully at the lineage of that data: where it came from, how it was stored, how it was transformed, and where it's rendered. A name holds text; an href or src attribute holds a URL. If you want to render a name inside an HTML element you should HTML escape it. You should escape href and src, too, but the escaping rules for URLs are slightly different from the HTML rules. It's easy to make mistakes.

Ktistec uses four "safe" types to express the contracts:

SafeHTML: A String wrapper marking HTML markup safe to emit raw into HTML data slots (text content, between tags).

SafeAttrValue: A String wrapper marking a value safe to emit raw inside a double-quoted HTML attribute (attr="..."), other than URL or event-handler slots.

SafeURI: A String wrapper marking a URL safe to emit raw into a URL attribute slot (href, src, action, etc.).

SafeJSON: A String wrapper marking JSON output safe to emit raw into the body of a <script type="application/json"> block.

Using the wrong type at a call site is either a compile-time error, or it triggers automatic sanitization of the underlying string value.

Here's the full changelog:

Added

  • String safety framework with typed "safe" strings.
  • New Slang template engine with compile-time safety checks.
  • Vendored WebFinger and HostMeta client shards.

Fixed

  • Prevent delivery to unknown IRIs.
  • Narrow Like/Dislike addressing to the liked object's author.

I have at least one more cleanup pass to do, and then I'll turn my attention back to the Mastodon-compatible API and a few features I've been looking forward toโ€”like scheduled posts.

epiktistes.com

Post by toddsundsted@epiktistes.com

One of the nice benefits of working on an open source project is that you can scratch an itch for as long as you feel like scratching. A game I like to plโ€ฆ

@toddsundsted@epiktistes.com

This release continues my focus on security instead of new features. As I wrote earlier this week, I rebuilt the template framework Ktistec uses with type safety as a central principle. What does that mean?

Imagine that you have an instance of a String that holds federated data. Where can you safely render that in a browser, and what operations (sanitization, escaping, etc.) do you need to do first?

The only way to answer that is to look carefully at the lineage of that data: where it came from, how it was stored, how it was transformed, and where it's rendered. A name holds text; an href or src attribute holds a URL. If you want to render a name inside an HTML element you should HTML escape it. You should escape href and src, too, but the escaping rules for URLs are slightly different from the HTML rules. It's easy to make mistakes.

Ktistec uses four "safe" types to express the contracts:

SafeHTML: A String wrapper marking HTML markup safe to emit raw into HTML data slots (text content, between tags).

SafeAttrValue: A String wrapper marking a value safe to emit raw inside a double-quoted HTML attribute (attr="..."), other than URL or event-handler slots.

SafeURI: A String wrapper marking a URL safe to emit raw into a URL attribute slot (href, src, action, etc.).

SafeJSON: A String wrapper marking JSON output safe to emit raw into the body of a <script type="application/json"> block.

Using the wrong type at a call site is either a compile-time error, or it triggers automatic sanitization of the underlying string value.

Here's the full changelog:

Added

  • String safety framework with typed "safe" strings.
  • New Slang template engine with compile-time safety checks.
  • Vendored WebFinger and HostMeta client shards.

Fixed

  • Prevent delivery to unknown IRIs.
  • Narrow Like/Dislike addressing to the liked object's author.

I have at least one more cleanup pass to do, and then I'll turn my attention back to the Mastodon-compatible API and a few features I've been looking forward toโ€”like scheduled posts.

epiktistes.com

Post by toddsundsted@epiktistes.com

One of the nice benefits of working on an open source project is that you can scratch an itch for as long as you feel like scratching. A game I like to plโ€ฆ

@toddsundsted@epiktistes.com

This release continues my focus on security instead of new features. As I wrote earlier this week, I rebuilt the template framework Ktistec uses with type safety as a central principle. What does that mean?

Imagine that you have an instance of a String that holds federated data. Where can you safely render that in a browser, and what operations (sanitization, escaping, etc.) do you need to do first?

The only way to answer that is to look carefully at the lineage of that data: where it came from, how it was stored, how it was transformed, and where it's rendered. A name holds text; an href or src attribute holds a URL. If you want to render a name inside an HTML element you should HTML escape it. You should escape href and src, too, but the escaping rules for URLs are slightly different from the HTML rules. It's easy to make mistakes.

Ktistec uses four "safe" types to express the contracts:

SafeHTML: A String wrapper marking HTML markup safe to emit raw into HTML data slots (text content, between tags).

SafeAttrValue: A String wrapper marking a value safe to emit raw inside a double-quoted HTML attribute (attr="..."), other than URL or event-handler slots.

SafeURI: A String wrapper marking a URL safe to emit raw into a URL attribute slot (href, src, action, etc.).

SafeJSON: A String wrapper marking JSON output safe to emit raw into the body of a <script type="application/json"> block.

Using the wrong type at a call site is either a compile-time error, or it triggers automatic sanitization of the underlying string value.

Here's the full changelog:

Added

  • String safety framework with typed "safe" strings.
  • New Slang template engine with compile-time safety checks.
  • Vendored WebFinger and HostMeta client shards.

Fixed

  • Prevent delivery to unknown IRIs.
  • Narrow Like/Dislike addressing to the liked object's author.

I have at least one more cleanup pass to do, and then I'll turn my attention back to the Mastodon-compatible API and a few features I've been looking forward toโ€”like scheduled posts.

epiktistes.com

Post by toddsundsted@epiktistes.com

One of the nice benefits of working on an open source project is that you can scratch an itch for as long as you feel like scratching. A game I like to plโ€ฆ

@toddsundsted@epiktistes.com

This release continues my focus on security instead of new features. As I wrote earlier this week, I rebuilt the template framework Ktistec uses with type safety as a central principle. What does that mean?

Imagine that you have an instance of a String that holds federated data. Where can you safely render that in a browser, and what operations (sanitization, escaping, etc.) do you need to do first?

The only way to answer that is to look carefully at the lineage of that data: where it came from, how it was stored, how it was transformed, and where it's rendered. A name holds text; an href or src attribute holds a URL. If you want to render a name inside an HTML element you should HTML escape it. You should escape href and src, too, but the escaping rules for URLs are slightly different from the HTML rules. It's easy to make mistakes.

Ktistec uses four "safe" types to express the contracts:

SafeHTML: A String wrapper marking HTML markup safe to emit raw into HTML data slots (text content, between tags).

SafeAttrValue: A String wrapper marking a value safe to emit raw inside a double-quoted HTML attribute (attr="..."), other than URL or event-handler slots.

SafeURI: A String wrapper marking a URL safe to emit raw into a URL attribute slot (href, src, action, etc.).

SafeJSON: A String wrapper marking JSON output safe to emit raw into the body of a <script type="application/json"> block.

Using the wrong type at a call site is either a compile-time error, or it triggers automatic sanitization of the underlying string value.

Here's the full changelog:

Added

  • String safety framework with typed "safe" strings.
  • New Slang template engine with compile-time safety checks.
  • Vendored WebFinger and HostMeta client shards.

Fixed

  • Prevent delivery to unknown IRIs.
  • Narrow Like/Dislike addressing to the liked object's author.

I have at least one more cleanup pass to do, and then I'll turn my attention back to the Mastodon-compatible API and a few features I've been looking forward toโ€”like scheduled posts.

epiktistes.com

Post by toddsundsted@epiktistes.com

One of the nice benefits of working on an open source project is that you can scratch an itch for as long as you feel like scratching. A game I like to plโ€ฆ

@smallcircles@social.coop

๐Ÿค”

In daily life, if you talk to someone, you have the right to remember what was said, right?

And if you don't possess photographic memory, you have the right to take notes, keep record, maintain a diary, yes?

And no one has the right to order you to forget your memories, or under normal circumstances to destroy your notes?

So if you have a single-person instance, it is okay then to ignore Delete requests to erase your memory of online public conversations you had with others?

  • Yes26 (33%)
  • No34 (44%)
  • Sometimes11 (14%)
  • Other..7 (9%)
@csolisr@hub.azkware.net
Terrible moment to learn that , the up-and-coming implementation, apparently has a hard dependency on instructions that my home server's chipset physically lacks. I'd have to spend upwards of $400 just to replace my server in order to test it, sigh... @Bonfire
@reiver@mastodon.social
@trwnh@mastodon.social
@reiver@mastodon.social
@trwnh@mastodon.social
@federatedmind@techhub.social

A PeerTube instance rejected my account application recently.

Reason: they're "highly opposed to AI, including education on how to use AI-assisted tooling and selfhosting."

Last line: "you might want to try a different instance."

I'm now on spectra.video, where the same content posts without friction.

That rejection isn't a failure but evidence that the structure is working. An instance that knows what it's for, knows its position is unusual, and communicates both clearly โ€” that's governance doing exactly what it's supposed to do.

Part 3 of `Exploring Mastodon` covers what governance actually means at the instance level: defederation, Fedipact, the Truth Social cautionary tale, and why a server's code of conduct is a self-portrait, not a rulebook.

โ†’ federatedmind.com/governance-n

Abstract network topology visualization on a deep navy background. A dense cluster of glowing nodes in teal and coral are connected by luminous edges, with a bright central node suggesting a focal governance point. The image conveys distributed structure โ€” many nodes, no single center. Federated Mind brain logo watermark in the bottom right corner.
ALT text

Abstract network topology visualization on a deep navy background. A dense cluster of glowing nodes in teal and coral are connected by luminous edges, with a bright central node suggesting a focal governance point. The image conveys distributed structure โ€” many nodes, no single center. Federated Mind brain logo watermark in the bottom right corner.

@federatedmind@techhub.social

A PeerTube instance rejected my account application recently.

Reason: they're "highly opposed to AI, including education on how to use AI-assisted tooling and selfhosting."

Last line: "you might want to try a different instance."

I'm now on spectra.video, where the same content posts without friction.

That rejection isn't a failure but evidence that the structure is working. An instance that knows what it's for, knows its position is unusual, and communicates both clearly โ€” that's governance doing exactly what it's supposed to do.

Part 3 of `Exploring Mastodon` covers what governance actually means at the instance level: defederation, Fedipact, the Truth Social cautionary tale, and why a server's code of conduct is a self-portrait, not a rulebook.

โ†’ federatedmind.com/governance-n

Abstract network topology visualization on a deep navy background. A dense cluster of glowing nodes in teal and coral are connected by luminous edges, with a bright central node suggesting a focal governance point. The image conveys distributed structure โ€” many nodes, no single center. Federated Mind brain logo watermark in the bottom right corner.
ALT text

Abstract network topology visualization on a deep navy background. A dense cluster of glowing nodes in teal and coral are connected by luminous edges, with a bright central node suggesting a focal governance point. The image conveys distributed structure โ€” many nodes, no single center. Federated Mind brain logo watermark in the bottom right corner.

@csolisr@hub.azkware.net
Terrible moment to learn that , the up-and-coming implementation, apparently has a hard dependency on instructions that my home server's chipset physically lacks. I'd have to spend upwards of $400 just to replace my server in order to test it, sigh... @Bonfire
@j12t@j12t.social
@sam@break3.social

More Stickers are needing to be designed.

The Fediverse Stickers are now on
https://vex.blue/shop/ so you can order them. But what is the next stickers you'd love to see?

Any artists wanna work together to create something unique for the Fediverse together?

12 Fediverse Stickers compaired to a 50p coin.

Each Sticker being ~50mm
- ActivityPub
- Fediverse
- Misskey
- Sharkey
- Mastodon (Purple)
- PixelFed
- Piefed
- Lemmy
- Loops
- Loops (Big)
- PeerTube
- Mastodon (Blue)
ALT text

12 Fediverse Stickers compaired to a 50p coin. Each Sticker being ~50mm - ActivityPub - Fediverse - Misskey - Sharkey - Mastodon (Purple) - PixelFed - Piefed - Lemmy - Loops - Loops (Big) - PeerTube - Mastodon (Blue)

Fediverse Stickers with 11 different designs (2 of each).

Loops
PixelFed
Sharkey
Mastodon
ActivityPub
Misskey
Piefed
PeerTube
Lemmy
ALT text

Fediverse Stickers with 11 different designs (2 of each). Loops PixelFed Sharkey Mastodon ActivityPub Misskey Piefed PeerTube Lemmy

@sam@break3.social

More Stickers are needing to be designed.

The Fediverse Stickers are now on
https://vex.blue/shop/ so you can order them. But what is the next stickers you'd love to see?

Any artists wanna work together to create something unique for the Fediverse together?

12 Fediverse Stickers compaired to a 50p coin.

Each Sticker being ~50mm
- ActivityPub
- Fediverse
- Misskey
- Sharkey
- Mastodon (Purple)
- PixelFed
- Piefed
- Lemmy
- Loops
- Loops (Big)
- PeerTube
- Mastodon (Blue)
ALT text

12 Fediverse Stickers compaired to a 50p coin. Each Sticker being ~50mm - ActivityPub - Fediverse - Misskey - Sharkey - Mastodon (Purple) - PixelFed - Piefed - Lemmy - Loops - Loops (Big) - PeerTube - Mastodon (Blue)

Fediverse Stickers with 11 different designs (2 of each).

Loops
PixelFed
Sharkey
Mastodon
ActivityPub
Misskey
Piefed
PeerTube
Lemmy
ALT text

Fediverse Stickers with 11 different designs (2 of each). Loops PixelFed Sharkey Mastodon ActivityPub Misskey Piefed PeerTube Lemmy

@apps@toot.fedilab.app
@apps@toot.fedilab.app
@apps@toot.fedilab.app

Fedify is an server framework in & . It aims to eliminate the complexity and redundant boilerplate code when building a federated server app, so that you can focus on your business logic and user experience.

The key features it provides currently are:

If you're curious, take a look at the website! There's comprehensive docs, a demo, a tutorial, example code, and more:

https://fedify.dev/

@apps@toot.fedilab.app
@reiver@mastodon.social

ActivityPub specifications don't seem to provide a way to do Idempotent POSTs to your outbox.

That seems like a problem for C2S to me.

Networks are unreliable. You cannot tell the difference between an unreceived request vs an unreceived response. You'll get unwanted identical duplicate activities.

Although it isn't difficult to solve โ€” a convention just needs to be picked.

For example, a new Idempotency field could be added to the JSON-LD payload.

@sam@break3.social

More Stickers are needing to be designed.

The Fediverse Stickers are now on
https://vex.blue/shop/ so you can order them. But what is the next stickers you'd love to see?

Any artists wanna work together to create something unique for the Fediverse together?

12 Fediverse Stickers compaired to a 50p coin.

Each Sticker being ~50mm
- ActivityPub
- Fediverse
- Misskey
- Sharkey
- Mastodon (Purple)
- PixelFed
- Piefed
- Lemmy
- Loops
- Loops (Big)
- PeerTube
- Mastodon (Blue)
ALT text

12 Fediverse Stickers compaired to a 50p coin. Each Sticker being ~50mm - ActivityPub - Fediverse - Misskey - Sharkey - Mastodon (Purple) - PixelFed - Piefed - Lemmy - Loops - Loops (Big) - PeerTube - Mastodon (Blue)

Fediverse Stickers with 11 different designs (2 of each).

Loops
PixelFed
Sharkey
Mastodon
ActivityPub
Misskey
Piefed
PeerTube
Lemmy
ALT text

Fediverse Stickers with 11 different designs (2 of each). Loops PixelFed Sharkey Mastodon ActivityPub Misskey Piefed PeerTube Lemmy

@reiver@mastodon.social

ActivityPub specifications don't seem to provide a way to do Idempotent POSTs to your outbox.

That seems like a problem for C2S to me.

Networks are unreliable. You cannot tell the difference between an unreceived request vs an unreceived response. You'll get unwanted identical duplicate activities.

Although it isn't difficult to solve โ€” a convention just needs to be picked.

For example, a new Idempotency field could be added to the JSON-LD payload.

@reiver@mastodon.social

ActivityPub specifications don't seem to provide a way to do Idempotent POSTs to your outbox.

That seems like a problem for C2S to me.

Networks are unreliable. You cannot tell the difference between an unreceived request vs an unreceived response. You'll get unwanted identical duplicate activities.

Although it isn't difficult to solve โ€” a convention just needs to be picked.

For example, a new Idempotency field could be added to the JSON-LD payload.

@reiver@mastodon.social

ActivityPub specifications don't seem to provide a way to do Idempotent POSTs to your outbox.

That seems like a problem for C2S to me.

Networks are unreliable. You cannot tell the difference between an unreceived request vs an unreceived response. You'll get unwanted identical duplicate activities.

Although it isn't difficult to solve โ€” a convention just needs to be picked.

For example, a new Idempotency field could be added to the JSON-LD payload.

@smallcircles@social.coop

๐Ÿค”

In daily life, if you talk to someone, you have the right to remember what was said, right?

And if you don't possess photographic memory, you have the right to take notes, keep record, maintain a diary, yes?

And no one has the right to order you to forget your memories, or under normal circumstances to destroy your notes?

So if you have a single-person instance, it is okay then to ignore Delete requests to erase your memory of online public conversations you had with others?

  • Yes26 (33%)
  • No34 (44%)
  • Sometimes11 (14%)
  • Other..7 (9%)
@smallcircles@social.coop ยท Reply to Dawn Ahukanna

@dahukanna

Yes. I think you are asking exactly the right question:"What does it mean in this context?"

Many replies to the ponder related questions, or state an "it depends". It is clear there's a lot of nuance and edge cases.

Reformulated, how delete should work is solution-specific, depends on domain, use cases, and stakeholders in SX terms.

And Delete activity in is not the well-understood part of it is treated as today. See also:

social.coop/@smallcircles/1165

social.coop

๐Ÿซง socialcoding.. (@smallcircles@social.coop)

@hipsterelectron@circumstances.run @ireneista@irenes.space @kopper@not-brain.d.on-t.work I consider this to be part of the "misconceptions" that exist on the ActivityPub fediverse, to once more quote the term as Rich Hickey uses in "Hammock driven development". See: https://coding.social/blog/grassroots-evolution/#remove-misconceptions The way I look at ActivityStreams is as a toolbox of social primitives, building blocks for federated solutions. Not as core capabilities of the ActivityPub protocol. Because they are simply not specified as universal and ubiquitous protocol capabilities. If one particular object supports CRUD is solution-specific in my book. Ideally the ActivityStreams primitives all have well-defined singular purpose, but unfortunately that is not the case. More the opposite where everyone is encouraged to hammer their business domain into an ActivityStreams straitjacket.

@smallcircles@social.coop ยท Reply to d@nny disc@ mcยฒ

@hipsterelectron @ireneista @kopper

I consider this to be part of the "misconceptions" that exist on the ActivityPub fediverse, to once more quote the term as Rich Hickey uses in "Hammock driven development". See:

coding.social/blog/grassroots-

The way I look at ActivityStreams is as a toolbox of social primitives, building blocks for federated solutions. Not as core capabilities of the ActivityPub protocol. Because they are simply not specified as universal and ubiquitous protocol capabilities.

If one particular object supports CRUD is solution-specific in my book. Ideally the ActivityStreams primitives all have well-defined singular purpose, but unfortunately that is not the case. More the opposite where everyone is encouraged to hammer their business domain into an ActivityStreams straitjacket.

coding.social

Grassroots fediverse evolution

Social dynamics in the grassroots fediverse ecosystem and laissรฉz-faire practices led to divergence from power and promise of the ActivityPub protocol. Grassroots standards and the ActivityPub API initiative can get us back on track.

@smallcircles@social.coop

๐Ÿค”

In daily life, if you talk to someone, you have the right to remember what was said, right?

And if you don't possess photographic memory, you have the right to take notes, keep record, maintain a diary, yes?

And no one has the right to order you to forget your memories, or under normal circumstances to destroy your notes?

So if you have a single-person instance, it is okay then to ignore Delete requests to erase your memory of online public conversations you had with others?

  • Yes26 (33%)
  • No34 (44%)
  • Sometimes11 (14%)
  • Other..7 (9%)
@smallcircles@social.coop ยท Reply to Dawn Ahukanna

@dahukanna

Yes. I think you are asking exactly the right question:"What does it mean in this context?"

Many replies to the ponder related questions, or state an "it depends". It is clear there's a lot of nuance and edge cases.

Reformulated, how delete should work is solution-specific, depends on domain, use cases, and stakeholders in SX terms.

And Delete activity in is not the well-understood part of it is treated as today. See also:

social.coop/@smallcircles/1165

social.coop

๐Ÿซง socialcoding.. (@smallcircles@social.coop)

@hipsterelectron@circumstances.run @ireneista@irenes.space @kopper@not-brain.d.on-t.work I consider this to be part of the "misconceptions" that exist on the ActivityPub fediverse, to once more quote the term as Rich Hickey uses in "Hammock driven development". See: https://coding.social/blog/grassroots-evolution/#remove-misconceptions The way I look at ActivityStreams is as a toolbox of social primitives, building blocks for federated solutions. Not as core capabilities of the ActivityPub protocol. Because they are simply not specified as universal and ubiquitous protocol capabilities. If one particular object supports CRUD is solution-specific in my book. Ideally the ActivityStreams primitives all have well-defined singular purpose, but unfortunately that is not the case. More the opposite where everyone is encouraged to hammer their business domain into an ActivityStreams straitjacket.

@smallcircles@social.coop ยท Reply to d@nny disc@ mcยฒ

@hipsterelectron @ireneista @kopper

I consider this to be part of the "misconceptions" that exist on the ActivityPub fediverse, to once more quote the term as Rich Hickey uses in "Hammock driven development". See:

coding.social/blog/grassroots-

The way I look at ActivityStreams is as a toolbox of social primitives, building blocks for federated solutions. Not as core capabilities of the ActivityPub protocol. Because they are simply not specified as universal and ubiquitous protocol capabilities.

If one particular object supports CRUD is solution-specific in my book. Ideally the ActivityStreams primitives all have well-defined singular purpose, but unfortunately that is not the case. More the opposite where everyone is encouraged to hammer their business domain into an ActivityStreams straitjacket.

coding.social

Grassroots fediverse evolution

Social dynamics in the grassroots fediverse ecosystem and laissรฉz-faire practices led to divergence from power and promise of the ActivityPub protocol. Grassroots standards and the ActivityPub API initiative can get us back on track.

@hopland@snabelen.no

To me, is the future. In many different avenues of digital services, it's usually a monopolistic vendor lock-in situation. is no exception, nor is .

But Forgejo aims to be a git system that uses to communicate with other git instances - in effect decentralizing code repos, and even possibly CD/CI chains. Hold on to your hats, folks.

itsfoss.com/news/netherlands-f

itsfoss.com

Go Away Microsoft! The Netherlands is Quietly Building Its Own GitHub Replacement

The self-hosted, FOSS-only platform is still in the pilot phase, but government agencies are already signing up.

@hopland@snabelen.no

To me, is the future. In many different avenues of digital services, it's usually a monopolistic vendor lock-in situation. is no exception, nor is .

But Forgejo aims to be a git system that uses to communicate with other git instances - in effect decentralizing code repos, and even possibly CD/CI chains. Hold on to your hats, folks.

itsfoss.com/news/netherlands-f

itsfoss.com

Go Away Microsoft! The Netherlands is Quietly Building Its Own GitHub Replacement

The self-hosted, FOSS-only platform is still in the pilot phase, but government agencies are already signing up.

@smallcircles@social.coop

๐Ÿค”

In daily life, if you talk to someone, you have the right to remember what was said, right?

And if you don't possess photographic memory, you have the right to take notes, keep record, maintain a diary, yes?

And no one has the right to order you to forget your memories, or under normal circumstances to destroy your notes?

So if you have a single-person instance, it is okay then to ignore Delete requests to erase your memory of online public conversations you had with others?

  • Yes26 (33%)
  • No34 (44%)
  • Sometimes11 (14%)
  • Other..7 (9%)
@adamsdesk@fosstodon.org

Updated: List of Helpful Mastodon Resources

- Add RSS Tooter
- Add Masto Reader

Handmade list of resources for the federated social network Mastodon covering, how to use, find an instance, find people, tools and more.

adamsdesk.com/posts/list-masto

adamsdesk.com

List of Helpful Mastodon Resources

Handmade list of resources for the federated social network Mastodon covering, how to use, find an instance, find people, tools and more.

@smallcircles@social.coop

๐Ÿค”

In daily life, if you talk to someone, you have the right to remember what was said, right?

And if you don't possess photographic memory, you have the right to take notes, keep record, maintain a diary, yes?

And no one has the right to order you to forget your memories, or under normal circumstances to destroy your notes?

So if you have a single-person instance, it is okay then to ignore Delete requests to erase your memory of online public conversations you had with others?

  • Yes26 (33%)
  • No34 (44%)
  • Sometimes11 (14%)
  • Other..7 (9%)

I have written a sample letter that you can use to invite organizations to join the .

The letter is shared under a license. Feel free to copy, adapt and send it to organizations that still rely on .

Thanks to @danie1 for the English translation.

Replies to this post will also appear as comments under the blog post.

bammerlaan.nl/posts/Example_le

bammerlaan.nl

Sample letter Fediverse

I read this post on Mastodon a couple of weeks ago: Post by @Kletskous@mastodon.social View on Mastod...

@adamsdesk@fosstodon.org

Updated: List of Helpful Mastodon Resources

- Add RSS Tooter
- Add Masto Reader

Handmade list of resources for the federated social network Mastodon covering, how to use, find an instance, find people, tools and more.

adamsdesk.com/posts/list-masto

adamsdesk.com

List of Helpful Mastodon Resources

Handmade list of resources for the federated social network Mastodon covering, how to use, find an instance, find people, tools and more.

@weekinfediverse@mitra.social

I have written a sample letter that you can use to invite organizations to join the .

The letter is shared under a license. Feel free to copy, adapt and send it to organizations that still rely on .

Thanks to @danie1 for the English translation.

Replies to this post will also appear as comments under the blog post.

bammerlaan.nl/posts/Example_le

bammerlaan.nl

Sample letter Fediverse

I read this post on Mastodon a couple of weeks ago: Post by @Kletskous@mastodon.social View on Mastod...

I have written a sample letter that you can use to invite organizations to join the .

The letter is shared under a license. Feel free to copy, adapt and send it to organizations that still rely on .

Thanks to @danie1 for the English translation.

Replies to this post will also appear as comments under the blog post.

bammerlaan.nl/posts/Example_le

bammerlaan.nl

Sample letter Fediverse

I read this post on Mastodon a couple of weeks ago: Post by @Kletskous@mastodon.social View on Mastod...

@weekinfediverse@mitra.social
@weekinfediverse@mitra.social
@weekinfediverse@mitra.social
@weekinfediverse@mitra.social
@weekinfediverse@mitra.social
@adamsdesk@fosstodon.org

Updated: List of Helpful Mastodon Resources

- Add RSS Tooter
- Add Masto Reader

Handmade list of resources for the federated social network Mastodon covering, how to use, find an instance, find people, tools and more.

adamsdesk.com/posts/list-masto

adamsdesk.com

List of Helpful Mastodon Resources

Handmade list of resources for the federated social network Mastodon covering, how to use, find an instance, find people, tools and more.

@fediway@fediway.com
@rdela@mastodon.social
@Josh@social.joshbaileycreates.com

Wondering if the devs of have stopped working on improving the integration? Haven't heard of anything since the release of it back with the release of 6.0.

@Josh@social.joshbaileycreates.com

Wondering if the devs of have stopped working on improving the integration? Haven't heard of anything since the release of it back with the release of 6.0.

@rdela@mastodon.social

Drafting a proposal to add API support in for the ActivityPub Media Upload extension, the SocialCG-incubated companion that lets clients upload media via a dedicated endpoints.uploadMedia endpoint, separate from the outbox.

The sketched API mirrors the outbox listeners shipped in Fedify 2.2: setMediaUploader(path, callback) paired with .authorize(). Return a vocab.Object for 201 Created, or a URL for 202 Accepted.

This is still an early design draft. Feedback on the shape, semantics, and edge cases is very welcome:

https://github.com/fedify-dev/fedify/issues/754

github.com

Support ActivityPub Media Upload extension via `setMediaUploader()` ยท Issue #754 ยท fedify-dev/fedify

Summary Add support for the ActivityPub Media Upload extension so that Fedify-based servers can accept C2S media uploads from clients. The proposed API mirrors the C2S outbox listeners introduced i...

Drafting a proposal to add API support in for the ActivityPub Media Upload extension, the SocialCG-incubated companion that lets clients upload media via a dedicated endpoints.uploadMedia endpoint, separate from the outbox.

The sketched API mirrors the outbox listeners shipped in Fedify 2.2: setMediaUploader(path, callback) paired with .authorize(). Return a vocab.Object for 201 Created, or a URL for 202 Accepted.

This is still an early design draft. Feedback on the shape, semantics, and edge cases is very welcome:

https://github.com/fedify-dev/fedify/issues/754

github.com

Support ActivityPub Media Upload extension via `setMediaUploader()` ยท Issue #754 ยท fedify-dev/fedify

Summary Add support for the ActivityPub Media Upload extension so that Fedify-based servers can accept C2S media uploads from clients. The proposed API mirrors the C2S outbox listeners introduced i...

Drafting a proposal to add API support in for the ActivityPub Media Upload extension, the SocialCG-incubated companion that lets clients upload media via a dedicated endpoints.uploadMedia endpoint, separate from the outbox.

The sketched API mirrors the outbox listeners shipped in Fedify 2.2: setMediaUploader(path, callback) paired with .authorize(). Return a vocab.Object for 201 Created, or a URL for 202 Accepted.

This is still an early design draft. Feedback on the shape, semantics, and edge cases is very welcome:

https://github.com/fedify-dev/fedify/issues/754

github.com

Support ActivityPub Media Upload extension via `setMediaUploader()` ยท Issue #754 ยท fedify-dev/fedify

Summary Add support for the ActivityPub Media Upload extension so that Fedify-based servers can accept C2S media uploads from clients. The proposed API mirrors the C2S outbox listeners introduced i...

@SymfonyStation@drupal.community
@SymfonyStation@drupal.community

Drafting a proposal to add API support in for the ActivityPub Media Upload extension, the SocialCG-incubated companion that lets clients upload media via a dedicated endpoints.uploadMedia endpoint, separate from the outbox.

The sketched API mirrors the outbox listeners shipped in Fedify 2.2: setMediaUploader(path, callback) paired with .authorize(). Return a vocab.Object for 201 Created, or a URL for 202 Accepted.

This is still an early design draft. Feedback on the shape, semantics, and edge cases is very welcome:

https://github.com/fedify-dev/fedify/issues/754

github.com

Support ActivityPub Media Upload extension via `setMediaUploader()` ยท Issue #754 ยท fedify-dev/fedify

Summary Add support for the ActivityPub Media Upload extension so that Fedify-based servers can accept C2S media uploads from clients. The proposed API mirrors the C2S outbox listeners introduced i...

Drafting a proposal to add API support in for the ActivityPub Media Upload extension, the SocialCG-incubated companion that lets clients upload media via a dedicated endpoints.uploadMedia endpoint, separate from the outbox.

The sketched API mirrors the outbox listeners shipped in Fedify 2.2: setMediaUploader(path, callback) paired with .authorize(). Return a vocab.Object for 201 Created, or a URL for 202 Accepted.

This is still an early design draft. Feedback on the shape, semantics, and edge cases is very welcome:

https://github.com/fedify-dev/fedify/issues/754

github.com

Support ActivityPub Media Upload extension via `setMediaUploader()` ยท Issue #754 ยท fedify-dev/fedify

Summary Add support for the ActivityPub Media Upload extension so that Fedify-based servers can accept C2S media uploads from clients. The proposed API mirrors the C2S outbox listeners introduced i...

@j12t@j12t.social
@toddsundsted@epiktistes.com

Release v3.3.7 of Ktistec fixes several bugs and introduces two enhancements.

Security is a focus in this release. Every gap in input sanitization or escaping is a potential vulnerability, and I've been systematically closing them. I am also carefully, and maybe conservatively, restricting things like supported URL schemes and uploaded file types.

The two enhancements improve compatibility with Mastodon-compatible clients. Mastodon's OAuth tokens don't expire, and Mastodon clients don't know how to handle tokens that do. Sliding expiration ensures that tokens in active use stay alive, while unused tokens eventually expire.

Here's the full changelog:

Added

  • Sliding token expiration for OAuth2 access tokens.
  • Mastodon-compatible API: /api/v1/accounts/update_credentials endpoint.

Fixed

  • Prevent pinning of (and auto-unpin) private objects.
  • Don't save a quote if the quoted actor cannot be dereferenced.
  • Fix rendering of federated actor profile attachment values.
  • Remove href attributes with unsafe schemes from sanitized HTML.
  • Escape interpolated values in view helpers and the actor icon streaming refresh.
  • Restrict upload extensions and serve uploads with X-Content-Type-Options: nosniff.
  • Escape publicKey and scrub Tag.href.
  • Sanitizer no longer permits single-quote attribute injection.
  • Ensure bearer-token sessions cannot reach the web UI.
  • Require client authentication on the OAuth token endpoint.

I'm working on performance improvements for the next release. A rewrite of the Slang template library looks like it will cut both build time and executable size by around 10%!

๐Ÿ“ก Stay tuned!

github.com

GitHub - toddsundsted/ktistec: ActivityPub (https://www.w3.org/TR/activitypub/) server for individual users and small groups.

ActivityPub (https://www.w3.org/TR/activitypub/) server for individual users and small groups. - toddsundsted/ktistec

@toddsundsted@epiktistes.com

Release v3.3.7 of Ktistec fixes several bugs and introduces two enhancements.

Security is a focus in this release. Every gap in input sanitization or escaping is a potential vulnerability, and I've been systematically closing them. I am also carefully, and maybe conservatively, restricting things like supported URL schemes and uploaded file types.

The two enhancements improve compatibility with Mastodon-compatible clients. Mastodon's OAuth tokens don't expire, and Mastodon clients don't know how to handle tokens that do. Sliding expiration ensures that tokens in active use stay alive, while unused tokens eventually expire.

Here's the full changelog:

Added

  • Sliding token expiration for OAuth2 access tokens.
  • Mastodon-compatible API: /api/v1/accounts/update_credentials endpoint.

Fixed

  • Prevent pinning of (and auto-unpin) private objects.
  • Don't save a quote if the quoted actor cannot be dereferenced.
  • Fix rendering of federated actor profile attachment values.
  • Remove href attributes with unsafe schemes from sanitized HTML.
  • Escape interpolated values in view helpers and the actor icon streaming refresh.
  • Restrict upload extensions and serve uploads with X-Content-Type-Options: nosniff.
  • Escape publicKey and scrub Tag.href.
  • Sanitizer no longer permits single-quote attribute injection.
  • Ensure bearer-token sessions cannot reach the web UI.
  • Require client authentication on the OAuth token endpoint.

I'm working on performance improvements for the next release. A rewrite of the Slang template library looks like it will cut both build time and executable size by around 10%!

๐Ÿ“ก Stay tuned!

github.com

GitHub - toddsundsted/ktistec: ActivityPub (https://www.w3.org/TR/activitypub/) server for individual users and small groups.

ActivityPub (https://www.w3.org/TR/activitypub/) server for individual users and small groups. - toddsundsted/ktistec

@fediforum@mastodon.social
@sam@break3.social

Wordpress is a strange platform try and actually get working with ActivityPub in a meaningful way. While I do enjoy Sharkey I'd love to not have to pay for multiple subscriptions just to run my website and interact with people on the Fediverse.