Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
b002ef5
Address for improvements skills
2chanhaeng Apr 11, 2026
2456bb8
Create @fedify/nuxt with GPT-5.3-codex in one-shot
2chanhaeng Apr 12, 2026
2d0f54e
Add pull request reference for Nuxt changelog entry
2chanhaeng Apr 13, 2026
5d6b6f0
Fix imports
2chanhaeng Apr 13, 2026
a5bba6f
Extract shared constants into lib.ts
2chanhaeng Apr 13, 2026
f909d0b
Fix docs
2chanhaeng Apr 13, 2026
55e5ca8
Format
2chanhaeng Apr 13, 2026
7fec746
Remove `@nuxt/kit` from global packages and add `@nuxt/kit`, `@nuxt/s…
2chanhaeng Apr 13, 2026
b0f4a23
Replace hard-coded type with imported type
2chanhaeng Apr 13, 2026
32b4dac
Include runtime server files in deno check scope
2chanhaeng Apr 13, 2026
58807b9
Explicit type
2chanhaeng Apr 13, 2026
f5b22a1
Validate contextDataFactory export type at startup
2chanhaeng Apr 13, 2026
1ec06ab
Fix typography and formatting in docs
2chanhaeng Apr 14, 2026
37c57d0
Add @fedify/fixture to nuxt devDependencies
2chanhaeng Apr 14, 2026
adff9f6
Add regression tests for PR review issues
2chanhaeng Apr 14, 2026
6cddda7
Use identity check for not-acceptable detection
2chanhaeng Apr 14, 2026
0dd8492
Preserve framework 404 on shared routes
2chanhaeng Apr 14, 2026
6d98b88
Resolve relative module paths against Nuxt root
2chanhaeng Apr 14, 2026
12d3d77
Throw on missing contextDataFactory exports
2chanhaeng Apr 14, 2026
5d42150
Add Nuxt plugin regression tests
2chanhaeng Apr 14, 2026
0986264
Replace `~~/server` to `#server`
2chanhaeng Apr 14, 2026
4b23e69
Preserve bare specifiers in resolveModulePath
2chanhaeng Apr 14, 2026
ae96934
Make fetchWithFedify() generic
2chanhaeng Apr 14, 2026
9aeb076
Add benefits of developing with examples when using skills
2chanhaeng Apr 14, 2026
2401ef6
Add @fedify/nuxt to @fedify/init with GPT-5.4
2chanhaeng Apr 12, 2026
85003f0
Add Nuxt support entry to @fedify/init changelog
2chanhaeng Apr 13, 2026
b59bd93
Ignore `replacePortInApp` for some web framework
2chanhaeng Apr 13, 2026
deaaa62
Fix @fedify/init related with Nuxt
2chanhaeng Apr 13, 2026
7303fdb
Remove unused code
2chanhaeng Apr 13, 2026
bb22a01
Replace `~~/server` to `#server`
2chanhaeng Apr 14, 2026
8ef4fc9
Create examples/nuxt with Claude Opus 4.6
2chanhaeng Apr 13, 2026
40800bb
Replace `~~/server` to `#server`
2chanhaeng Apr 15, 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
6 changes: 3 additions & 3 deletions .agents/skills/add-to-fedify-init/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@ modifications consistent with the existing code style and context.
### Write the `WebFrameworkDescription` object

Create a `packages/init/src/webframeworks/framework.ts` file and write the
`WebFrameworkDescription` object, referring to <init/framework.ts>. Check
the specifications in the comments in `packages/init/src/types.ts` for
details.
`WebFrameworkDescription` object, referring to
[init/framework.ts](./init/framework.ts). Check the specifications in the
comments in `packages/init/src/types.ts` for details.

### Add to the `WEB_FRAMEWORK` array

Expand Down
4 changes: 2 additions & 2 deletions .agents/skills/commit/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ EOF

Don't put `Generated with [Claude Code](https://claude.ai/code)`, or
`Co-authored-by` trailers at the end of the commit message. Instead,
use the `Assiged-by` trailer to indicate that the commit was generated by
an AI assistant, if necessary. The format of the `Assiged-by` trailer should
use the `Assigned-by` trailer to indicate that the commit was generated by
an AI assistant, if necessary. The format of the `Assigned-by` trailer should
be:

~~~~
Expand Down
85 changes: 62 additions & 23 deletions .agents/skills/create-example-app-with-integration/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ Two reference documents describe what the example must do and how it must
look. Both are references only — do not create these files in the actual
generated example app.

### <ARCHITECTURE.md>
### [ARCHITECTURE.md](./ARCHITECTURE.md)

Defines the example's functional behavior. Consult it for:

Expand All @@ -44,10 +44,11 @@ Defines the example's functional behavior. Consult it for:
bridge between the framework routing layer and the federation layer.
- **Federation** and **Storing**: Which source files to set up
(`src/federation.ts`, `src/store.ts`) and the template files they are
based on (<example/src/federation.ts>, <example/src/store.ts>).
based on ([example/src/federation.ts](./example/src/federation.ts),
[example/src/store.ts](./example/src/store.ts)).
- **Logging**: How to use `@logtape/logtape` and `src/logging.ts`.

### <DESIGN.md>
### [DESIGN.md](./DESIGN.md)

Defines the example's visual presentation. Consult it for:

Expand All @@ -61,7 +62,8 @@ Defines the example's visual presentation. Consult it for:
- **Layout principles**: Spacing, containers, grid, and whitespace.
- **Responsive behavior**: Single breakpoint at `768px` and mobile
adaptations.
- **Static assets**: Files to serve from `public/` (<example/public/\*>).
- **Static assets**: Files to serve from `public/`
([example/public/](./example/public/)).
- **Page structure**: Detailed layout of the home page, actor profile
page, and post detail page.

Expand All @@ -70,46 +72,77 @@ Set up the example project
--------------------------

Create an `examples/framework/` app and write an example for the new
package. Unless the framework itself prevents it, support both Deno and
Node.js environments. If Deno is supported, add a *deno.json* based on
<example/deno.json>; if Node.js is supported, add *package.json* based on
<example/package.jsonc> and *tsdown.config.ts*. Depending on the supported
environments, add the example path to the `workspace` field in
the root *deno.json* and to the `packages` field in
*pnpm-workspace.yaml*.
package. Copy the template files from [example/](./example/) as-is and modify
as needed.

- [deno.json](./example/deno.jsonc)
- Deno configuration for the example app.
- If the framework does not support Deno, this file can be omitted.
- [package.json](./example/package.jsonc)
- Node.js configuration for the example app.
- If the framework does not support Node.js, this file can be omitted.
- [federation.ts](./example/src/federation.ts): Set up the Federation instance
and configure ActivityPub handling.
- [logging.ts](./example/src/logging.ts): Set up Logtape logging.
- [store.ts](./example/src/store.ts): Set up in-memory stores for actors,
posts, and followers.
- [fedify-logo.svg](./example/public/fedify-logo.svg)
- The Fedify logo.
- Use this file as favicon.
- You can make a custom logo to add the svg of the framework logo.
- [demo-profile.png](./example/public/demo-profile.png):
- Profile image for the demo user.
- You can make this image from the `fedify-logo.svg` rendering to png
- [style.css](./example/public/style.css): The CSS file for the example app.
- [theme.js](./example/public/theme.js): The JavaScript file for theme
toggling dark/light mode in the example app.

Unless the framework itself prevents it, support both Deno
and Node.js environments. If Deno is supported, add a *deno.json* based on
[example/deno.json](./example/deno.jsonc); if Node.js is supported, add
*package.json* based on [example/package.jsonc](./example/package.jsonc) and
*tsdown.config.ts*. Depending on the supported environments, add the example
path to the `workspace` field in the root *deno.json* and to the `packages`
field in *pnpm-workspace.yaml*.

If the framework is backend-only and needs a frontend framework, and there
is no natural pairing like solidstart-solid, use Hono.

Copy the template files from <example/\*> as-is and modify as needed.

If the framework does not have a prescribed entry point, use `src/main.ts`
as the application entry point. Define and export the framework app in
`src/app.ts`, then import and run it from the entry file. Import
`src/logging.ts` in the entry file to initialize `@logtape/logtape`.
When logging is needed, use the `getLogger` function from `@logtape/logtape`
to create a logger.

When configuring the example app server, disable host restrictions and allow
all hosts so tunneled/public domains can access the app during development
and tests.


Implement the example app
-------------------------

Follow the specifications in <ARCHITECTURE.md> and <DESIGN.md> to
implement the example. In particular:
Follow the specifications in [ARCHITECTURE.md](./ARCHITECTURE.md) and
[DESIGN.md](./DESIGN.md) to implement the example. In particular:

- Register the Fedify middleware in `src/app.ts` per the “Middleware
integration” and “Reverse proxy support” sections of
<ARCHITECTURE.md>.
[ARCHITECTURE.md](./ARCHITECTURE.md).
- Set up federation logic in `src/federation.ts` based on
<example/src/federation.ts>. Set up in-memory stores in `src/store.ts`
based on <example/src/store.ts>.
[example/src/federation.ts](./example/src/federation.ts). Set up in-memory
stores in `src/store.ts` based on
[example/src/store.ts](./example/src/store.ts).
- Implement all routes listed in the “Routing” section of
<ARCHITECTURE.md>, using `RequestContext` as described in the
“Server-side data access” section.
- Render HTML pages according to <DESIGN.md>. Serve static assets from
the `public/` directory (copy from <example/public/\*>).
[ARCHITECTURE.md](./ARCHITECTURE.md), using `RequestContext` as described
in the “Server-side data access” section.
- Render HTML pages according to [DESIGN.md](./DESIGN.md). Serve static assets
from the `public/` directory (copy from
[example/public/](./example/public/)).
- Implement the SSE endpoint per the “Server-sent events” section of
<ARCHITECTURE.md>.
[ARCHITECTURE.md](./ARCHITECTURE.md).
- Ensure the app can build and run in the supported environments
(Deno, Node.js, or both).


Test the example with `mise test:examples`
Expand Down Expand Up @@ -142,6 +175,12 @@ is broken:
mise test:examples
~~~~

If the `test:examples` cannot be run, just run the server and test with curl:

~~~~ bash
curl -H "Accept: application/activity+json" http://localhost:0000/users/demo
~~~~


Lint, format, and final checks
------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,19 @@

<!-- Replace `프레임워크` with the name of the framework you are integrating with -->

프레임워크 example application
==============================
Fedify–프레임워크 integration example application
=================================================

A comprehensive example of building a federated server application using
[Fedify] with [프레임워크]. This example demonstrates how to create an
ActivityPub-compatible federated social media server that can interact with
other federated platforms like Mastodon, Pleroma, and other ActivityPub
other federated platforms like [Mastodon], [Misskey], and other ActivityPub
implementations using the Fedify and [프레임워크].

[Fedify]: https://fedify.dev
[프레임워크]: https://프레임.워크/
[Mastodon]: https://mastodon.social/
[Misskey]: https://misskey.io/


Running the example
Expand Down Expand Up @@ -40,14 +42,14 @@ Communicate with other federated servers
1. Tunnel your local server to the internet using `fedify tunnel`

~~~~ sh
fedify tunnel 0000
fedify tunnel 0000
~~~~

2. Open the tunneled URL in your browser and check that the server is running
properly.

3. Search your handle and follow from other federated servers such as Mastodon
or Misskey.
3. Search your handle and follow from other federated servers such as
[Mastodon] or [Misskey].

> [!NOTE]
> [ActivityPub Academy] is a great resource to learn how to interact
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
import { configure, getConsoleSink } from "@logtape/logtape";
import {
configure, // If top-level await is not supported, replace with configureSync
getConsoleSink
} from "@logtape/logtape";
import { AsyncLocalStorage } from "node:async_hooks";

await configure({
Expand Down
Loading
Loading