Search results

We're excited to announce the release of BotKit 0.3.0! This release marks a significant milestone as now supports .js alongside , making it accessible to a wider audience. The minimum required Node.js version is 22.0.0. This dual-runtime support means you can now choose your preferred runtime while building with the same powerful BotKit APIs.

One of the most requested features has landed: poll support! You can now create interactive polls in your messages, allowing followers to vote on questions with single or multiple-choice options. Polls are represented as ActivityPub Question objects with proper expiration times, and your bot can react to votes through the new onVote event handler. This feature enhances engagement possibilities and brings BotKit to feature parity with major platforms like Mastodon and Misskey.

// Create a poll with multiple choices
await session.publish(text`What's your favorite programming language?`, {
  class: Question,
  poll: {
    multiple: true,  // Allow multiple selections
    options: ["JavaScript", "TypeScript", "Python", "Rust"],
    endTime: Temporal.Now.instant().add({ hours: 24 }),
  },
});

// Handle votes
bot.onVote = async (session, vote) => {
  console.log(`${vote.actor} voted for "${vote.option}"`);
};

The web frontend has been enhanced with a new followers page, thanks to the contribution from Hyeonseo Kim (@gaebalgom개발곰)! The /followers route now displays a paginated list of your bot's followers, and the follower count on the main profile page is now clickable, providing better visibility into your bot's audience. This improvement makes the web interface more complete and user-friendly.

For developers looking for alternative storage backends, we've introduced the SqliteRepository through the new @fedify/botkit-sqlite package. This provides a production-ready SQLite-based storage solution with ACID compliance, write-ahead logging (WAL) for optimal performance, and proper indexing. Additionally, the new @fedify/botkit/repository module offers MemoryCachedRepository for adding an in-memory cache layer on top of any repository implementation, improving read performance for frequently accessed data.

This release also includes an important security update: we've upgraded to 1.8.8, ensuring your bots stay secure and compatible with the latest ActivityPub standards. The repository pattern has been expanded with new interfaces and types like RepositoryGetMessagesOptions, RepositoryGetFollowersOptions, and proper support for polls storage through the KvStoreRepositoryPrefixes.polls option, providing more flexibility for custom implementations.

2
1
0
0
0
0
0
0

I've setup quite a few fediverse platforms. The instances are small, usually me and a few other fediverse devs that use them for testing.

It's quiet. Very quiet.

I've tried pulling in data from relays. But that's like opening floodgates to who knows what type of content.

FediBuzz was nice because I could follow specific hashtags ONLY. That cut down on the noise. But that is dependent on posts using those tags.

Is there a better way to curate content? I think so.

0

@silverpill @pepper0Decenta Lyzed

Don't know Autonomi, react to more general point:

- robust technologies exist
- there's no large uptake of p2p (social) networks

In 2017 investigating promising decentralized tech, most noteworthy was the landscape of tombstones of long-dead forgotten projects where people pumped in years of coding.

I came to as best positioned for broad adoption and 'universal social networking' (bit disillusioned now).

Following holistic adoption approach is crucial.

@silverpill @pepper0Decenta Lyzed

With project you saw a "Just create intricate specs, omit appealing to dev community, target biz directly. And broad adoption will come".

With we saw "Let's have these initial specs be the basis, and throw it into this grassroots ecosystem, and vNext will rise from that".

project saw cryptography and compsci experts going deep in the tech, without considering how it would be adopted, implicit "code it and they will come".

Etcetera.

0

@pepper0Decenta Lyzed It was started in 2010s under the name MaidSafe. It was a blockchain, there was a token sale, etc. Didn't get any traction.
Then it was rebranded to SAFE Network.
Then to Autonomi.

I've never met anyone who actually uses it, but I guess they made enough money from the token sale to keep developing it for the next 100 years.

@silverpill @pepper0Decenta Lyzed

Don't know Autonomi, react to more general point:

- robust technologies exist
- there's no large uptake of p2p (social) networks

In 2017 investigating promising decentralized tech, most noteworthy was the landscape of tombstones of long-dead forgotten projects where people pumped in years of coding.

I came to as best positioned for broad adoption and 'universal social networking' (bit disillusioned now).

Following holistic adoption approach is crucial.

0

Taking Back Control: My Journey into Self-Hosting with Raspberry Pi
I am using Raspberry Pi 4 and 5 to self-host my blog, social media, and cloud storage. Here is why digital sovereignty matters, and how you can start your own self-hosti
https://beitmenotyou.online/taking-back-control-my-journey-into-self-hosting-with-raspberry-pi/
#SelfHosting #ActivityPub #Blogging #Cloudflare #Decentralisation #DigitalSovereignty #Docker #Nextcloud #RaspberryPi #SelfHosting #Web3 #WordPress

0

In order to understand why FEP-fe34: Origin-based security model is true, we need to derive it from the first principles. Let's try.

#ActivityPub objects are JSON documents with a special id property. This property is an URI indicating the location of a document, and we can authenticate a document by fetching its id. If the document exists at the specified location, and has the same ID, we conclude that it is valid.

This has several important corollaries:

1. The server of origin is the only authority. Other servers must not be trusted.
2. ActivityPub is fundamentally a "pull" protocol, not "push".
3. The type of a document is not relevant for authentication. Actor documents are not special.

However, fetching documents is not always practical, and developers may want to push data to other nodes. How documents can be authenticated without making an HTTP request? Digital signatures.

The server publishes a JSON document containing a public key, and then starts signing other documents with a corresponding secret key.

Upon receiving a signed document (such as activity), we determine the ID of a public key document, retrieve the document and verify the signature. If the public key document has the same server of origin as the signed document, and the signature is valid, we conclude that the signed document is valid too, because a chain of trust has been established: received document -> public key document -> server.

The public key document doesn't change often, so now we can verify many signed documents without re-fetching the public key.

This also has important corollaries:

1. Once again, the type of a signed document is not relevant for authentication.
2. Public keys do not need to be attached to actor documents.
3. One key per server is enough.

Developers are constantly being told that ActivityPub is an actor-centric "push" protocol, and that each actor must have its own key. But those ideas are wrong and it is time to put them to rest.

Update 2025-08-26: a link between a key and an actor is required for implementing access control and may be required in some other special cases; see the latest version of the FEP for details

#fep_fe34

0

As @hongminhee洪 民憙 (Hong Minhee) recently posted about

A new drawing community called oeee.cafe (@oeee_cafeお絵かき OEEEカフェ 🥒) made by @jihyeokJihyeok Seo and others just implemented and joined the . It's exciting to see niche art focused software using these tools and techniques to share in our weird network we have here.

via hollo.social/@hongminhee/0198e

announcement post: hackers.pub/@jihyeok/0198e00f-

2

Excited to share some great news from the community! Oeee Cafe, a fantastic oekaki platform, just added support today. This means all the amazing artwork being created there can now be shared and discovered across the , which is such a wonderful step toward connecting creative communities.

Big shoutout to my friend @jihyeokJihyeok Seo for building this platform and bringing it to the fediverse. It's always inspiring to see developers creating spaces for artists and then opening them up to the broader federated community. If you're into digital art or just appreciate seeing creative work, definitely worth checking out what people are sharing from Oeee Cafe on your timeline now. You can find me there at @hongminhee洪兔 if you want to connect!

6
1
0

For the past couple of days I've been hard at work writing documentation in the attempt to decrease the friction for developers that try for their applications.

I am of a mind to pay some developers in the near future to do a weekend's worth of programming into trying to use the library in projects, so we can iron out potential issues with the use of the library itself and the documentation.

Anyone interested?

0
0

meta

There's a whole thread happening over at Eugen's place re: what even is decentralization maaaan

So the thing is, in practice, AP isn't actually decentralized. What it's done is replace one center with many that are even less scrutable. This is not in any way an improvement.

I used to be a big fan of AP

Not being able to see art anymore on tech dot LGBT due to The Art Instance™️ being run by a tyrant was the first big crack in my liking the AP fediverse. It revealed how centralized it really is. Meanwhile Bluesky builds AT and all the tooling to moot the company and its potential power.

AT still has potential. AP is hard locked to a certain course unless some massive disruption happens internally. Its potential, timeline-wise, was where AT is now, not almost 10 years in. I don't see it happening in a world where it peaked at ~3m and doesn't seem to grow any. The million active users it has are the million it will have for the foreseeable future.

0

Occasionally, during my free time, I have been generating a list of Fedi sites, that use non-US domain names.

codeberg.org/Linux-Is-Best/The

Generally speaking, assuming they're wise enough to also use non-US hosting (as everyone should), that can place them outside U.S. Jurisdiction.

0
0
0

Is it possible to make a post on the Fediverse which:

  • is publicly viewable to all,

  • doesn't necessarily get delivered to my followers' timelines, and

  • is delivered to everyone following a particular hashtag?

I have lots of interests and would like to toot more about them: railways, FOSS, standards, politics etc., but I don't want to spam all of my followers with stuff they're not interested in. I could create multiple profiles, but that seems like a crude hack - is there a better way?

#FediTips

I don't think this exists, @seabassSebastian Crane. I am / / n00b, but I think your options for this are:

0) Create a separate account for other interests & link them via your profiles (I see this often.)

1) Contain the discussion to a thread (always reply, never new post) & use the appropriate hash tag.

2) Use the hashtag as content warning so followers can ignore easily if not interested.

I post about enough I've considered (0) & making @bkuhn@mst3k.social …

0

Release v2.4.10 of Ktistec

Todd Sundsted @toddsundsted@epiktistes.com

I'm trying to get through the backlog of bugs and features in my to-do list. Release v2.4.10 of Ktistec packages up several important improvements. The most impactful change is graceful server shutdown—I've never had a problem with shutdown leaving the database in a broken state, but prevention is the best cure.

Added

  • Support manually refreshing actor information. (fixes #112)
  • Add link to log level settings to the navigation bar.

Fixed

  • Enable dragging source links to the address bar. (fixes #109)
  • Fix missing reply/mention notifications for non-create activities.
  • Ensure the network is up before attempting to refresh a page.

Changed

  • Block actor handle and display name when actor or post is blocked.
  • Gracefully shut down the server.

I'm considering adding lightweight multi-user support (invitation-only, not open registration). I'm interested in your thoughts on whether this would be useful.

#ktistec #fediverse #activitypub #crystallang

Read more →
0
0
0

The creators of WeDistribute have announced a newsletter, Relay, that will provide deep dive content by the core team as well as guest writers each week, about all things social.

Subscribe now, the first newsletter coming soon.

newsletter.wedistribute.org/we

0

Via @ieeespectrum:

"Web 3.0 is poised to change this dynamic by returning ownership to the data owners. This is not speculative; it’s already emerging. For example, the protocol behind decentralized social networks like Mastodon, combines content sharing with built-in attribution."

spectrum.ieee.org/data-integri

0

“Mastodon’s developers — many of whom were queer and trans — did not enjoy the privilege of living the totally open life: they needed privacy and safety, means to protect themselves from harassment.”

Which led to particular choices that were made for . Good ones imho.
1/2

0

Ω🪬Ω
New version (v1.1.0) of , the customizable timeline algorithm / filtering system for your Mastodon feed, has a toggle switch to allow or disallow the selection of more than one filter option for when you're checking out your favourite hashtags.

* Link: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action (slightly out of date): universeodon.com/@cryptadamist

screenshot of fedialgo multiselect for hashtag filters
0
0

Stories might be our most complex feature yet (harder than Collections, Groups, Portfolios combined).

But they're everywhere - Snapchat, Instagram, Facebook, Twitter, TikTok, LinkedIn. People expect them.

Love them or hate them, they're how we share moments.

@pixelfed is doing Stories ethically - no tracking, no ads, just authentic sharing.

The future is federated. ❤️

0
0
0
0

Release v3.0.0 of Ktistec

Todd Sundsted @toddsundsted@epiktistes.com

I've been running v3.0.0 of Ktistec in production for the last few weeks, and it seems stable and I’m using it every day, so it’s time to release it!

This release adds:

  • Model Context Protocol (MCP) support. Ktistec can act as an MCP Server.
  • OAuth2 authentication support. Ktistec can act as both an OAuth2 authentication server and a resource server.

Model Context Protocol (MCP) is a simple, general API that exposes Ktistec ActivityPub collections (timeline, notifications, likes, announces, etc.) to MCP clients. To be fully transparent about what this means, MCP clients are shells for Large Language Models (LLMs).

When building this, I focused on a few use cases that are important to me: content summarization, content prioritization (or filtering) based on my interests or the content's structure (well-constructed arguments vs. low-signal opinions) or its tone, especially when it comes to shared posts. Ktistec is a single user ActivityPub server and Epiktistes (my instance) gets a lot of traffic. I want to build the “algorithms” that surface the content I want to see.

Of note, there’s currently no support for content generation.

While I work on this, I’m not abandoning the 2.x line. I’ll continue to add compatible features and fix bugs as long as I'm able. I realize the use of LLMs, and MCP by extension, and therefore the 3.x branch, is controversial—I don’t intend to push v3 on anyone.

If you're still with me, Ktistec now exposes:

  • MCP Resources
    • ActivityPub actors (ktistec://actors/{id*})
    • ActivityPub objects (ktistec://objects/{id*})
    • registered users (ktistec://users/{id})
    • server information (ktistec://information)
  • Tools
    • count_collection_since(name, since)
    • paginate_collection(name, page, size)
    • read_resources(uris)
  • Prompts
    • whats_new

Supported collections include:

  • timeline, notifications, posts, drafts, likes, announces, followers, following
  • collections of hashtags of the form hashtag#<name> (e.g., "hashtag#technology")
  • collections of mentions of the form mention@<name> (e.g., "mention@euripides")

There is more detail in the README.

TL;DR Add a remote MCP connector in your MCP client of choice: supply the URL of your instance including the /mcp path (e.g. "https://epiktistes.com/mcp").

Screenshot of the MCP Inspector connected to Epiktistes


#ktistec #fediverse #activitypub #crystallang #mcp #llm

Read more →
0

I have a demo at work in like 5 minutes, then I have meetings until 11pm PST which I go live on the @firesidefedi ! But I just realized I don't have an fediverse appropriate tshirt, so I will try to create one.

I already choose one text, and is not in this list, but what would have been your fav?

0
0

🏕️ my adventures in #selfhosting: day 244 (Everest edition) ⛰️

a blog post that details some of the highs and lows I have been experiencing lately in my self-hosting adventures. I have a major challenge ahead - learning #Docker - in order to take advantage of #Ghost x #ActivityPub federation. It's my new Everest 🥲

🔗​:
https://news.elenarossini.com/my-so-called-sudo-life/my-adventures-in-self-hosting-day-244-everest-edition/

#MySoCalledSudoLife

0

:blobhyperthink:

is peanuts, right? All peanuts, all varieties, shapes and sizes. Isn't it peculiar then that six years after AP became a recommendation we are still all mostly eating from 1 small ingredient package of the primitive variety. One small bag to cook with, and supply us with rich peanut butter. Isn't that becoming somewhat bland and boring?

Which recipe do you cook tomorrow?

0
0

Social Web Conferences

reiver.codeberg.page/social-we

I am working on creating a list of upcoming Social Web Conferences.

Using a broad definition of "Social Web" that includes the ActivityPub, AT-Protocol, ATmosphere, Bluesky, Farcaster, Fediverse, Matrix, and Nostr.

These are conferences that I might want to attend. (And, perhaps you may, too.)

Is there anything else I should add to this?

1
0
0

Running a single user (or small) instance in the Fediverse? Relay instances acting as a spreading proxy can help you to find your content and also to make your posts visible to others - and you can easily join with , and many other ones!

The fedi-relay.gyptazy.com relay is mostly for tech related content and just got updates to the manpageblog design.

Image of the activity pub relay instance by gyptazy
0

If you're thinking of creating a Fedi site, I strongly recommend avoiding a .com, .net, .org, .info, .us, or .edu domain name.

You want to avoid U.S. jurisdiction entirely, which means choosing a domain name, registrar, and web hosting provider located outside of it.

I personally recommend the following domain extensions: .be (Belgium), .nl (Netherlands), .is (Iceland), .ch (Switzerland), .at (Austria), and finally, .tw (Taiwan).

All of these countries have strong protections for freedom of speech, including speech that defends and promotes minority rights — such as LGBTQ+ rights. Domain registration is open to everyone... You don’t need to be a citizen or own a business in any of these countries.

No solution is 100% perfect, but at this moment, we can say with confidence that the USA, China, and Russia are not ideal choices.

I have expanded my list of domain extensions I would recommend:

.be (Belgium)

.nl (Netherlands)

.is (Iceland)

.ch (Switzerland)

.at (Austria)

.tw (Taiwan)

.fi (Finland)

.se (Sweden)

.li (Liechtenstein)

.cz (Czech Republic)

All of these countries have strong protections for freedom of speech, including speech that defends and promotes minority rights — such as LGBTQ+ rights. Domain registration is open to everyone... You don’t need to be a citizen or own a business in any of these countries.

I would also add an optional, alternative:

.de (Germany, with registrar help * )

* Germany technically allows anyone with verified contact details within the country to register a domain. Many registrars offer this as a service. However, you should ensure your domain registrar is located outside U.S. jurisdiction.

0

For a sneak preview of my followup to the Fediverse Schema Observatory, there's now a project page on the lab website for the ActivityPub Fuzzer:

asml.cyber.harvard.edu/activit

Basically it lets an ActivityPub server developer test compatibility with simulated messages from Fediverse software known to the Observatory (dozens of software projects and hundreds of versions!). The dev can do this entirely in a local dev environment.

The project is still in the works but I'll be releasing the code soon.

@dariusDarius Kazemi

super nice.

What I worked on the past weeks was to analyze the current news corpora of the University of Leipzig in different languages.
Then mixed it with an anonymized fedi corpus and wrote a thing which can
- compress ActivityPub Objects to 20% of its size by a combination of semantic compression where 256 languages can be covered. The rest would be uncompressed in multilanguage Objects (see Evans new Primer Page).
Result is UInt8Array for a database.

What I am working on now is to "preserve hashtags and common knowledge".
One byte is a pointer to Hashtags (where any word has a # at 0) and one byte is a pointer to 3x(256²) wikidata tables. So that we directly get the e.g. Q1055 for Hamburg and can ask the author if the prominent Hamburg is meant …
This was just a first demo for German github.com/sebilasse/compressDE which meanwhile improved and soon you can generate your lexica from corpora.
btw This can detect 852 languages github.com/redaktor/languages
Less data, better climate …

0
0
0
0
0

Dumb question that I was always too afraid to ask:

I know how the #Fediverse and its federation works. It's intuitive and familiar to me; I mean, I even host my own instance.

But I never understood how interaction cross-software is supposed to work. In theory, I can use whatever #ActivityPub software I want and still interact with everyone else. But in practice that just... isn't the case, right?

I mean, for text it's quite simple: I write a short post on #Mastodon and people on #GoToSocial or #Misskey or whatever can see and read that same post and interact with it. They can see my profile and it appears on their instance in their style and with their features.

Even outside of microblogging I still get it. A super-long post on #Friendica or #Diaspora appears on my timeline, too. Their profiles might have more fields than I can see here, but that's fine.

But what's up beyond that?

I can see #Pixelfed posts here, converted into image galleries. But what about the other way 'round? If someone on Pixelfed follows my Mastodon account, they can't see any of my non-image posts, right?

What about #PeerTube and such niche software? I guess I could follow a PeerTube account as a microblogger and see their videos and descriptions in my timeline. Video comments are replies.

But the other way 'round? How are they supposed to interact with Friendica or Pixelfed users? PeerTube doesn't even have a "timeline".

Doesn't that feature disparity undermine the whole idea of the #Fediverse or am I missing something?

#AskFedi #FediAdmin

0
0

I just realized that the default specifications for ActivityPub/ActivityStreams do not have a way to perform an update on an object's ID. (ie, moving it from example.com/1 -> example.com/2)

An Update activity does not allow ID updates because it would lose the reference to the original one. (It can be massaged by using an Origin property, but I don't like that).

Another option would be to use a Move activity (which is defined as moving objects between collections), where the Origin property is the object itself instead of a collection. (I like this behaviour better, as it requires less divergence from the spec)

0

I just realized that the default specifications for ActivityPub/ActivityStreams do not have a way to perform an update on an object's ID. (ie, moving it from example.com/1 -> example.com/2)

An Update activity does not allow ID updates because it would lose the reference to the original one. (It can be massaged by using an Origin property, but I don't like that).

Another option would be to use a Move activity (which is defined as moving objects between collections), where the Origin property is the object itself instead of a collection. (I like this behaviour better, as it requires less divergence from the spec)

0