Skip to content

Custom collections cookbook example#722

Merged
dahlia merged 10 commits intofedify-dev:mainfrom
dahlia:examples/custom-collections
Apr 26, 2026
Merged

Custom collections cookbook example#722
dahlia merged 10 commits intofedify-dev:mainfrom
dahlia:examples/custom-collections

Conversation

@dahlia
Copy link
Copy Markdown
Member

@dahlia dahlia commented Apr 24, 2026

Closes #694.

Summary

This PR adds an in-repository cookbook-style example for custom collection dispatchers under examples/custom-collections/.

The example uses a small single-user bookmark domain, but keeps the focus on Fedify collection patterns rather than a full CRUD app or tutorial. It demonstrates public ordered collections, URI-template-based tag filtering, cursor pagination, collection counters, actor stream links to custom collections, and requester-aware followers-only results using ctx.getSignedKeyOwner().

Closes #694.

Changes

  • Reworks examples/custom-collections/main.ts into a runnable cookbook covering:
    • /users/alice/collections/public
    • /users/alice/collections/tags/{tag}
    • /users/alice/collections/followers-only
  • Updates the example README to explain the three patterns and how to run the script.
  • Links the manual’s custom collections section to the runnable example.
  • Adds a changelog entry for the accepted issue.

Verification

  • deno check examples/custom-collections/main.ts
  • deno lint examples/custom-collections/main.ts
  • deno run --allow-all examples/custom-collections/main.ts
  • deno run -A examples/test-examples/mod.ts custom-collections
  • Ran an additional local HTTP E2E harness with two Deno.serve() federation servers to verify:
    • public collection metadata and first page responses
    • tag-filtered collection count
    • unsigned followers-only requests return 401 Unauthorized
    • HTTP Signature-signed follower requests return the followers-only bookmark collection and page items

The example runner still reports the pre-existing unrelated warning that solidstart is not registered in the example test runner.

@dahlia dahlia added this to the Fedify 2.2 milestone Apr 24, 2026
@dahlia dahlia self-assigned this Apr 24, 2026
@dahlia dahlia added type/documentation Improvements or additions to documentation component/collections Collections related examples Example code related labels Apr 24, 2026
@issues-auto-labeler issues-auto-labeler Bot added activitypub/interop Interoperability issues component/federation Federation object related labels Apr 24, 2026
Add an in-repository custom collections example that keeps the
bookmark domain small and focuses on dispatcher patterns.  The example
shows cursor-based pagination, URI template filtering, actor collection
links, and requester-aware followers-only collections.

Link the manual's custom collections section to the runnable example
and add a changelog entry for the accepted issue.

fedify-dev#694

Assisted-by: Codex:gpt-5.5
@dahlia dahlia force-pushed the examples/custom-collections branch from 6d3c451 to 5d9dd09 Compare April 24, 2026 19:27
@dahlia dahlia removed component/federation Federation object related activitypub/interop Interoperability issues labels Apr 24, 2026
@dahlia dahlia requested a review from Copilot April 24, 2026 19:28
@dahlia
Copy link
Copy Markdown
Member Author

dahlia commented Apr 24, 2026

@codex review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 24, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds documentation and a runnable example implementing custom ActivityPub collections for bookmarks: cursor-based pagination, URI-template tag filtering, collection counters, actor collection links, and requester-aware authorization via ctx.getSignedKeyOwner().

Changes

Cohort / File(s) Summary
Changelog & Manual
CHANGES.md, docs/manual/collections.md
Added a Version 2.2.0 changelog entry for the custom collections cookbook and a cross-reference in the collections manual; added missing reference link definitions for citations.
Example README
examples/custom-collections/README.md
Rewrote README into a cookbook describing three collection routes (public paginated, tag-filtered via URI-template, followers-only with requester check) and notes on demo outputs.
Custom Collections Implementation
examples/custom-collections/main.ts
Replaced the tagged-posts example with a bookmarks federation demo: exported federation and followerIds, actor dispatcher exposing collection links, three ordered collection dispatchers (public, tag-filtered, followers-only) with numeric cursor pagination, counters, first/last cursor logic, Article/Hashtag conversion, and requester authorization using .authorize() + ctx.getSignedKeyOwner(); demo fetches/prints AP JSON and HTTP statuses.

Sequence Diagram(s)

sequenceDiagram
    participant Client as External Client/Requester
    participant Federation as Fedify Federation
    participant ActorDisp as Actor Dispatcher
    participant CollDisp as Collection Dispatcher
    participant BookmarkStore as In-Memory Bookmarks

    Client->>Federation: GET /actor
    activate Federation
    Federation->>ActorDisp: Dispatch actor request
    activate ActorDisp
    ActorDisp->>BookmarkStore: Query bookmark metadata
    BookmarkStore-->>ActorDisp: Return counts
    ActorDisp-->>Federation: Return Person with collection links
    deactivate ActorDisp
    Federation-->>Client: ActivityPub Person JSON
    deactivate Federation

    rect rgba(100, 150, 200, 0.5)
    Note over Client,BookmarkStore: Public Collection Flow
    Client->>Federation: GET /collections/public?page=1
    activate Federation
    Federation->>CollDisp: Dispatch public collection
    activate CollDisp
    CollDisp->>BookmarkStore: Query public bookmarks with cursor
    BookmarkStore-->>CollDisp: Return paginated results
    CollDisp-->>Federation: OrderedCollection with items & cursors
    deactivate CollDisp
    Federation-->>Client: Paginated ActivityPub Collection
    deactivate Federation
    end

    rect rgba(200, 150, 100, 0.5)
    Note over Client,BookmarkStore: Filtered Collection Flow
    Client->>Federation: GET /collections/tag/work?page=1
    activate Federation
    Federation->>CollDisp: Dispatch tagged collection
    activate CollDisp
    CollDisp->>BookmarkStore: Query bookmarks matching tag
    BookmarkStore-->>CollDisp: Return filtered results
    CollDisp-->>Federation: OrderedCollection with tag filter
    deactivate CollDisp
    Federation-->>Client: Filtered ActivityPub Collection
    deactivate Federation
    end

    rect rgba(150, 200, 100, 0.5)
    Note over Client,BookmarkStore: Access-Controlled Collection Flow
    Client->>Federation: GET /collections/followers-only (with signature)
    activate Federation
    Federation->>CollDisp: Dispatch with signed request
    activate CollDisp
    CollDisp->>BookmarkStore: Check requester follows owner
    alt Requester is authorized follower
        BookmarkStore-->>CollDisp: Return followers bookmarks
        CollDisp-->>Federation: OrderedCollection with items
    else Requester not authorized
        BookmarkStore-->>CollDisp: Deny access
        CollDisp-->>Federation: Empty OrderedCollection
    end
    deactivate CollDisp
    Federation-->>Client: Conditional ActivityPub Collection
    deactivate Federation
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Suggested labels

component/signatures

Suggested reviewers

  • sij411
  • 2chanhaeng
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Custom collections cookbook example' accurately and concisely describes the main change—adding a runnable cookbook-style example for custom collection dispatchers.
Description check ✅ Passed The description clearly relates to the changeset, explaining the addition of a cookbook example for custom collection dispatchers with specific details about patterns demonstrated and verification steps.
Linked Issues check ✅ Passed The PR successfully implements the core coding requirements from issue #694: three custom collection dispatchers (public paginated, URI-template tag-filtered, and signed-follower-authorized), cursor pagination with counters, and requester-aware access control via ctx.getSignedKeyOwner().
Out of Scope Changes check ✅ Passed All changes are scoped to the in-repository example and documentation updates directly supporting the custom collection dispatcher patterns; no unrelated changes to core library code or features.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request replaces the basic custom collections example with a comprehensive cookbook demonstrating advanced patterns. It features cursor-based pagination, URI-template filtering for parameterized collections, and requester-aware collections utilizing ctx.getSignedKeyOwner(). The updates span the example code, documentation, and the project's changelog to provide a clear, runnable reference for developers. I have no feedback to provide.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5d9dd09f38

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread examples/custom-collections/main.ts Outdated
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a runnable in-repo cookbook example demonstrating Fedify custom ordered collections (pagination, filtering, and requester-aware authorization) and links it from the manual with a changelog entry.

Changes:

  • Reworks examples/custom-collections/main.ts into a bookmark-based cookbook covering public, tag-filtered, and followers-only ordered collections.
  • Expands examples/custom-collections/README.md with pattern explanations and run instructions.
  • Links the manual’s custom collections section to the runnable example and adds a CHANGES.md entry.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 4 comments.

File Description
examples/custom-collections/main.ts New runnable cookbook script implementing 3 custom ordered collection patterns.
examples/custom-collections/README.md Updated documentation describing the cookbook patterns and how to run it.
docs/manual/collections.md Adds a link from the manual to the runnable cookbook example.
CHANGES.md Adds a changelog entry and reference links for the new example.

Comment thread examples/custom-collections/main.ts Outdated
Comment thread examples/custom-collections/main.ts Outdated
Comment thread examples/custom-collections/main.ts Outdated
Comment thread examples/custom-collections/main.ts Outdated
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@examples/custom-collections/main.ts`:
- Around line 134-145: The callbacks (setCounter, setFirstCursor, setLastCursor
and the dispatcher) repeatedly call publicBookmarks(), taggedBookmarks(...), and
followersOnlyBookmarks(), causing redundant re-filtering/sorting (and repeated
tag normalization); fix by computing the filtered/sorted list once per incoming
request and reusing it across those callbacks: e.g., inside the dispatcher or
the registration scope, call
publicBookmarks()/taggedBookmarks()/followersOnlyBookmarks() a single time (or
memoize keyed by values.identifier / tag params) and store the result in a local
variable that the functions setCounter, setFirstCursor, setLastCursor reference;
update the taggedBookmarks path to normalize tags once and reuse that normalized
list so each callback reuses the precomputed array instead of recomputing.
- Around line 268-288: The toArticle function builds an HTML string into the
Article.content field by concatenating bookmark.href and bookmark.title without
escaping; update toArticle to sanitize or escape bookmark.title and
bookmark.href before embedding into the content string (or add an inline comment
next to content reminding callers to sanitize user-supplied data) so downstream
apps don't introduce XSS vulnerabilities when using bookmark.title/bookmark.href
in Article.content.
- Around line 123-132: The dispatcher currently returns null when cursor == null
which causes empty public/tagged collections to be treated as "not found";
instead, modify the dispatcher used in TAGGED_BOOKMARKS (and the similar
authenticated-follower branch) so that when cursor == null it returns an empty
collection page object matching the followers-only dispatcher's shape (i.e., an
OrderedCollectionPage with no items and appropriate id/links) rather than null;
update the anonymous/public dispatcher (the (ctx, values, cursor) => { ... }
block that calls pageBookmarks(ctx, publicBookmarks(), cursor)) and the
TAGGED_BOOKMARKS dispatcher to return that empty page shape for cursor == null.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: d1ea26c1-cb22-40f3-bf90-3ec9d4920db6

📥 Commits

Reviewing files that changed from the base of the PR and between 2ba4d27 and 5d9dd09.

📒 Files selected for processing (4)
  • CHANGES.md
  • docs/manual/collections.md
  • examples/custom-collections/README.md
  • examples/custom-collections/main.ts

Comment thread examples/custom-collections/main.ts Outdated
Comment thread examples/custom-collections/main.ts Outdated
Comment thread examples/custom-collections/main.ts Outdated
@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 24, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ All tests successful. No failed tests found.
see 13 files with indirect coverage changes

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Keep tag-filtered collections limited to public bookmarks so the public
route does not expose followers-only bookmark existence.  Return an empty
item set for cursorless empty collections so valid empty custom collections
serialize instead of becoming 404 responses.

Escape bookmark fields before embedding them in Article content HTML so
the cookbook does not model unsafe rendering for user-supplied bookmark
data.

fedify-dev#722 (comment)
fedify-dev#722 (comment)
fedify-dev#722 (comment)
fedify-dev#722 (comment)
fedify-dev#722 (comment)
fedify-dev#722 (comment)
fedify-dev#722 (comment)

Assisted-by: Codex:gpt-5
@dahlia dahlia requested a review from Copilot April 24, 2026 19:45
@dahlia
Copy link
Copy Markdown
Member Author

dahlia commented Apr 24, 2026

@codex review

@dahlia
Copy link
Copy Markdown
Member Author

dahlia commented Apr 24, 2026

/gemini review

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@examples/custom-collections/main.ts`:
- Around line 98-114: The Actor object is advertising custom collections using
the attachments property; change this to use streams instead so the Actor uses
the AP-canonical property. Replace the array assigned to attachments with a
streams array that contains the same collectionLink(...) entries (using
collectionLink, ctx.getCollectionUri, and the constants PUBLIC_BOOKMARKS,
TAGGED_BOOKMARKS, FOLLOWERS_ONLY_BOOKMARKS) and keep the rel="collection"
semantics; update any code that consumes the Actor payload to read streams if
necessary and remove or leave attachments only if used for other profile
metadata.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 7642f8ee-6672-4a55-b8cd-78654f2d1968

📥 Commits

Reviewing files that changed from the base of the PR and between 5d9dd09 and 10d1fdf.

📒 Files selected for processing (2)
  • examples/custom-collections/README.md
  • examples/custom-collections/main.ts

Comment thread examples/custom-collections/main.ts Outdated
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 10d1fdffa6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread examples/custom-collections/main.ts Outdated
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

Comment thread examples/custom-collections/main.ts Outdated
Comment thread examples/custom-collections/main.ts Outdated
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 1 comment.

Comment thread examples/custom-collections/federation.ts Outdated
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a comprehensive cookbook example for custom ActivityPub collections, demonstrating patterns for cursor-based pagination, URI-template filtering, and requester-aware authorization. The implementation includes a new federation setup, mock data utilities, and updated documentation. Feedback suggests optimizing the collection dispatcher to return null when the cursor is absent, which allows the framework to serve collection metadata rather than the entire item set in a single response.

Comment thread examples/custom-collections/federation.ts
Handle getSignedKeyOwner() failures as unauthenticated follower-only
collection requests.  Malformed signature input should keep the cookbook's
restricted collection path on the same unauthorized branch instead of
surfacing as a server error.

fedify-dev#722 (comment)

Assisted-by: Codex:gpt-5.5
@dahlia dahlia requested a review from Copilot April 25, 2026 13:59
@dahlia
Copy link
Copy Markdown
Member Author

dahlia commented Apr 25, 2026

@codex review

@dahlia
Copy link
Copy Markdown
Member Author

dahlia commented Apr 25, 2026

/gemini review

@chatgpt-codex-connector
Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Can't wait for the next one!

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates the custom collections example into a comprehensive cookbook demonstrating cursor-based pagination, URI-template filtering, and requester-aware collections. The changes include a new federation setup, a mock data library, and an updated demonstration script. A review comment suggests improving the pagination example by returning null when no cursor is provided, which allows Fedify to generate standard collection metadata that links to the first page.

Comment thread examples/custom-collections/federation.ts
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 1 comment.

Comment thread examples/custom-collections/federation.ts
@dahlia dahlia requested a review from Copilot April 25, 2026 14:52
@dahlia
Copy link
Copy Markdown
Member Author

dahlia commented Apr 25, 2026

@codex review

@dahlia
Copy link
Copy Markdown
Member Author

dahlia commented Apr 25, 2026

/gemini review

@chatgpt-codex-connector
Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Breezy!

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request adds a custom collections cookbook example to the Fedify project, showcasing various ActivityPub collection patterns including cursor pagination, URI-template filtering, and signed requester-aware collections. The implementation includes a federation setup, mock data library, and a demonstration script. A suggestion was made to improve the efficiency and idiomatic style of the escapeHtml utility function by using a regular expression and a lookup map.

Comment thread examples/custom-collections/federation.ts
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 1 comment.

Comment thread examples/custom-collections/federation.ts
Keep the cookbook's HTML escaping helper compact by replacing matched
characters through a shared lookup table.  This avoids chaining multiple
string replacements while preserving the same escaped output.

fedify-dev#722 (comment)

Assisted-by: Codex:gpt-5.5
@dahlia dahlia requested a review from Copilot April 25, 2026 15:06
@dahlia
Copy link
Copy Markdown
Member Author

dahlia commented Apr 25, 2026

@codex review

@dahlia
Copy link
Copy Markdown
Member Author

dahlia commented Apr 25, 2026

/gemini review

@chatgpt-codex-connector
Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Already looking forward to the next diff.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated no new comments.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a comprehensive cookbook example for custom ActivityPub collections, featuring cursor-based pagination, URI-template filtering, and requester-aware access control. Feedback focuses on adhering to the project's documentation standards by adding JSDoc comments to public APIs in the new example files. Additionally, it is noted that the current implementation of collection dispatchers performs redundant data fetching, which should be optimized for production-ready code.

Comment thread examples/custom-collections/federation.ts
Comment thread examples/custom-collections/federation.ts
Comment thread examples/custom-collections/lib.ts
Copy link
Copy Markdown
Contributor

@sij411 sij411 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code samples worked well

@dahlia dahlia merged commit d2a1ce2 into fedify-dev:main Apr 26, 2026
21 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

activitypub/interop Interoperability issues component/collections Collections related component/federation Federation object related examples Example code related type/documentation Improvements or additions to documentation

Projects

No open projects

Development

Successfully merging this pull request may close these issues.

Build custom collection dispatcher example and tutorial (Hono + Deno)

4 participants