· 6 min read
What's new in ActivityPods?
Here is an overview of what changed in ActivityPods in versions 2.1, 2.2 and 2.3: data registrations, Verifiable Credentials, sharing between users based on Solid Application Interoperability. And also apps without a backend, new Refine providers, a website to discover shapes, an updated documentation, and soon collective Pods.
Since ActivityPods 2.0 was released, three new versions have come out quietly:
- 2.1 (March 2025) introduced data registrations.
- 2.2 (July 2025) rewrote capabilities with Verifiable Credentials.
- 2.3 (August 2026) brought sharing between users based on SAI.
Time to look back at what changed for people building apps on top of ActivityPods.
Data registrations (2.1)
In 2.1, we are following more closely the Solid Application Interoperability (SAI) specification. Pod data is organized in data registrations: when an app asks for a shape tree that no app has used before, a container is created for it, and the next apps asking for the same shape tree are given access to the same container. This is what makes several apps work on the same data. The data browser of the Pod provider also uses this data registry.
See Add new types of data to your app.
Capabilities with Verifiable Credentials (2.2)
In 2.2, capabilities were rewritten using Verifiable Credentials. They are used for contact links: anyone opening such a link can see the user’s profile, log in with their own Pod (or create one) and send a contact request that will be accepted automatically. They can also be used by applications for custom needs.
Sharing between users, the SAI way (2.3)
In 2.3, we went one step further and used the SAI mechanism for sharing data between users, not only with apps. When a user shares a resource with their contacts, the Pod provider now creates SAI access authorizations and access grants for the recipients. The applications of the recipients receive delegated access grants, issued by the authorization agent of the data owner. The creator of a resource can also allow the recipients to share it further with their own contacts. This was a preparation for group storages (see below).
See Contacts and sharing for code examples.
Apps without a backend
An app doesn’t always need a backend. If it only reads and writes the data of the logged-in user, a frontend is enough, and its description and access needs can be served as static files.
The new @activitypods/app-manifest package lets you declare your app in an app-manifest.json file, and generates these documents at build time with a Vite plugin. The frontend-only example app shows the result, and a new guide walks you through it.
In the future, we plan to use this method also for applications with backend.
Refine providers
Until now, our frontend tooling was based on React-Admin, through the SemApps packages. React-Admin is tightly coupled to Material UI, which is not an easy-to-use framework (in our opinion). It also lacks a way to update the interface when data changes on the server, since its live provider is only available in the Entreprise edition.
So we now offer packages for Refine, a headless React framework which works with any UI library and has a built-in live provider:
@activitypods/refine-providers: an auth provider using Solid-OIDC, a data provider which reads and writes resources on the user’s Pod (resources on other servers are fetched through the user’s proxy), and a live provider based on Solid Notifications WebSocket channels.@activitypods/refine-hooks: hooks to read collections, post to the outbox, handle the login flow, etc.@activitypods/refine-antd: ready-made Ant Design components, like the login page and the background checks of the app status.
The live provider lets your lists and pages refresh by themselves when a resource is created, updated or deleted on the Pod, by another app or by another device of the user.
The app boilerplate and the tutorial now use these packages.
New and updated applications
The first apps to be rewritten with Refine are the two apps developed by Reconnexion:
- Welcome to my place: private events, visible only to the people you invited, who can then connect with each other.
- Mutual Aid: classified ads that are only visible to your network of trust, to help each other.
Both use the Refine providers with Ant Design. Their source code (Welcome to my place, Mutual Aid) is a good place to see how a real-world app is built with ActivityPods.
For French-speaking people, Reconnexion also released two new apps in beta: PorteJunes, a wallet for the Ğ1 libre currency, and La Carte des Savoirs, a directory of skills within your network of trust.
A new home for shapes
Interoperability only works if apps agree on the data they handle. With data registrations (available since ActivityPods 2.1), two apps share the same data as soon as they request the same shape tree. Reusing existing shape trees is thus the best way to make your app work with others.
That’s why we built shapes.activitypods.org, a website to discover the shapes used by ActivityPods apps:
- Browse the shape trees, with a description in English and French, and the properties expected by their SHACL shape.
- See which applications use each shape tree, and which shapes are the most used.
- If nothing fits your needs, propose a new shape directly from the website: fill in a form, preview the generated Turtle files, and a pull request is opened on the shapes repository for review.
The URI of each shape tree is also its documentation: open it in a browser and you get the website, request it with an Accept: text/turtle or application/ld+json header and you get the RDF.
An updated documentation
The documentation website has been largely rewritten to match these changes:
- A new Key concepts page explains how Pods, apps, shape trees, access grants and activities fit together.
- A Standards support page summarizes which standards are supported by ActivityPods providers, and to what extent.
- The Contacts and sharing page describes contact requests, contact links and resources sharing.
- The frontend pages, the reference and the tutorial have been updated for Refine.
What is next?
The next big feature is almost there: group storages. A group will be an ActivityPub actor with its own Pod, where members can store and share data together.
- Users will be able to create groups, invite their contacts and manage members.
- Groups can be joined freely, on request, or on invitation-only.
- Members get roles (owner, admin, member, or custom roles), which give them access to the group’s data and special rights.
- Apps will be able to read and write data in a group’s Pod just like in a personal Pod.
We will publish a dedicated blog post when it is released. Stay tuned!