Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
3bffc1f
Start the threadiverse tutorial
dahlia Apr 21, 2026
6d33756
Tutorial: swap ESLint for Biome
dahlia Apr 21, 2026
e5288e7
Tutorial: layout and navigation
dahlia Apr 21, 2026
3e875ff
Tutorial: users table
dahlia Apr 21, 2026
28d1b2b
Tutorial: signup form
dahlia Apr 21, 2026
a4a9b0f
Tutorial: login and sessions
dahlia Apr 21, 2026
7f50207
Tutorial: profile page
dahlia Apr 21, 2026
682c441
Tutorial: Person actor + tunnel + Academy test
dahlia Apr 21, 2026
c7bbb58
Tutorial: communities as Group actors
dahlia Apr 21, 2026
d57d7ef
Tutorial: Follow and Accept(Follow)
dahlia Apr 21, 2026
d1fdc77
Tutorial: threads, Create(Page), Announce fan-out
dahlia Apr 21, 2026
0e4b956
Tutorial: replies as Create(Note) with Announce fan-out
dahlia Apr 21, 2026
785f02c
Tutorial: Like and Dislike votes
dahlia Apr 21, 2026
d91f8a6
Tutorial: subscribed feed + Undo(Follow)
dahlia Apr 21, 2026
8220fac
Tutorial: closing chapter + CHANGES entry
dahlia Apr 21, 2026
e6e05d7
Tutorial: Lemmy-compatible Group actor
dahlia Apr 21, 2026
12b8c4a
Tutorial: document full Lemmy subscribe round-trip
dahlia Apr 21, 2026
928633d
Tutorial: update Lemmy interop status after tunnel-agnostic fix
dahlia Apr 21, 2026
a5eda7f
Serialize public audience as full URI in outgoing activities
dahlia Apr 22, 2026
a0b08e4
Tutorial: document Lemmy Announce compatibility as working
dahlia Apr 22, 2026
cf187b4
Guard public audience normalization with canonical-form check
dahlia Apr 22, 2026
4965605
Tutorial: tighten typography and cross-references
dahlia Apr 22, 2026
e3f79e9
Address review feedback on public audience normalization
dahlia Apr 22, 2026
b3738c2
Add PR links to the changelog
dahlia Apr 22, 2026
05a07ad
Harden public audience normalization heuristics
dahlia Apr 22, 2026
447610c
Force cache-bypass in the Ed25519-mismatch proof retry
dahlia Apr 22, 2026
acc0848
Guard the public audience fast-path against nested @context
dahlia Apr 22, 2026
9e0779d
Strip the expanded proof key in verifyProof() too
dahlia Apr 22, 2026
6c0e055
Fix the Cloudflare Workers build for the public-audience test
dahlia Apr 22, 2026
a811123
Harden public audience normalization against adversarial input
dahlia Apr 22, 2026
cf6f60f
Reject top-level arrays in verifyProofInternal
dahlia Apr 22, 2026
f5d7a0a
Restore signing-time normalization consistency
dahlia Apr 22, 2026
e560e11
Default to a preloaded-only loader in normalizePublicAudience
dahlia Apr 22, 2026
6381860
Tighten typing and hoist the digest buffer in verifyProofInternal
dahlia Apr 22, 2026
7ce4f97
Tutorial: drop the Next.js 16 downgrade workaround
dahlia Apr 22, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions .hongdown.toml
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,19 @@ proper_nouns = [
"ActivityPub",
"ActivityStreams",
"Akkoma",
"Biome",
"BotKit",
"BrowserPub",
"cloudflared",
"Cloudflare Tunnel",
"Cloudflare Workers",
"create-next-app",
"Deno",
"Deno Deploy",
"Deno Lint",
"Docker Compose",
"Drizzle Kit",
"Drizzle ORM",
"Fastify",
"Fedify",
"Elysia",
Expand All @@ -62,34 +68,46 @@ proper_nouns = [
"Hono",
"HTTP Message Signatures",
"HTTP Signatures",
"JSX",
"Koa",
"Lemmy",
"Linked Data Signatures",
"LitePub",
"LogTape",
"Mastodon",
"Mbin",
"mise",
"Misskey",
"NestJS",
"Next.js",
"Node.js",
"NodeBB",
"NodeInfo",
"ngrok",
"Object Integrity Proofs",
"OpenTelemetry",
"Piefed",
"Pixelfed",
"Pleroma",
"Podman Compose",
"RabbitMQ",
"Redis",
"scrypt",
"Scoop",
"Serveo",
"SiliconBeest",
"SolidStart",
"SQLite",
"SvelteKit",
"TypeScript",
"Typo Blue",
"URI Template",
"URI Templates",
"Visual Studio Code",
"VitePress",
"WebAssembly",
"WebFinger",
"x-forwarded-fetch",
]

[code_block.formatters]
Expand Down
32 changes: 32 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,29 @@ To be released.
`getAuthenticatedDocumentLoader()` now also respects
`GetAuthenticatedDocumentLoaderOptions.maxRedirection`.

- Improved interoperability with threadiverse software by serializing the
public audience as the full `https://www.w3.org/ns/activitystreams#Public`
URI in outgoing activities' `to`, `cc`, `bto`, `bcc`, and `audience`
fields, instead of the compacted `as:Public` or `Public` CURIEs that
JSON-LD compaction would otherwise produce. Some ActivityPub
implementations, [Lemmy] included, match those fields as plain URLs
without JSON-LD expansion and would silently drop activities carrying
the CURIE form; see [LemmyNet/lemmy#6465]. The rewrite is gated on a
URDNA2015 canonical-form equivalence check, so an application-defined
`@context` that redefines the `as:` prefix or the bare `Public` term
is preserved as is. The rewrite is also applied before
`eddsa-jcs-2022` Object Integrity Proof signing so the signed bytes
match what is sent on the wire. [[#710]]

[Agent Skills]: https://agentskills.io/
[skills-npm]: https://github.com/antfu/skills-npm
[Lemmy]: https://join-lemmy.org/
[LemmyNet/lemmy#6465]: https://github.com/LemmyNet/lemmy/issues/6465
[#430]: https://github.com/fedify-dev/fedify/issues/430
[#644]: https://github.com/fedify-dev/fedify/issues/644
[#680]: https://github.com/fedify-dev/fedify/pull/680
[#688]: https://github.com/fedify-dev/fedify/pull/688
[#710]: https://github.com/fedify-dev/fedify/pull/710
[#711]: https://github.com/fedify-dev/fedify/issues/711
[#712]: https://github.com/fedify-dev/fedify/pull/712

Expand Down Expand Up @@ -162,6 +179,21 @@ To be released.
[#656]: https://github.com/fedify-dev/fedify/pull/656
[#675]: https://github.com/fedify-dev/fedify/pull/675

### Documentation

- Added a new tutorial, [*Building a threadiverse community platform*], that
walks through building a Lemmy-style community server with Fedify and
Next.js. Where the existing [*Creating your own federated microblog*]
tutorial is actor- and timeline-centric, this one is community-centric: it
models communities as `Group` actors, threads as `Page` objects wrapped in
`Create`, replies as `Note` objects, and the community-side `Announce`
redistribution that threadiverse software (Lemmy, Mbin, NodeBB) uses to fan
activity out to every subscriber. [[#704], [#710]]

[*Building a threadiverse community platform*]: https://fedify.dev/tutorial/threadiverse
[*Creating your own federated microblog*]: https://fedify.dev/tutorial/microblog
[#704]: https://github.com/fedify-dev/fedify/issues/704


Version 2.1.9
-------------
Expand Down
4 changes: 4 additions & 0 deletions docs/.vitepress/config.mts
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,10 @@ const TUTORIAL = {
},
{ text: "Learning the basics", link: "/tutorial/basics.md" },
{ text: "Creating a microblog", link: "/tutorial/microblog.md" },
{
text: "Building a threadiverse community",
link: "/tutorial/threadiverse.md",
},
],
activeMatch: "/tutorial",
};
Expand Down
Loading