diff --git a/docs/app/app.config.ts b/docs/app/app.config.ts index 12f0146ef..cac01f465 100644 --- a/docs/app/app.config.ts +++ b/docs/app/app.config.ts @@ -21,6 +21,7 @@ export default defineAppConfig({ sections: ['adapters', 'frameworks'], }, { label: 'Add-ons', sections: ['add-ons'], link: 'section' as const }, + { label: 'Ecosystem', sections: ['ecosystem'], link: 'section' as const }, { label: 'Reference', sections: ['references'], link: 'section' as const }, { label: 'Errors', sections: ['errors'], link: 'section' as const }, { label: 'Blog', sections: ['posts'], link: 'section' as const }, @@ -143,10 +144,6 @@ export default defineAppConfig({ '/guide/build-your-own-hub-ui', ], }, - { - title: 'Ecosystem', - items: ['/guide/built-with'], - }, ], }, ogImage: { diff --git a/docs/app/components/global/EcosystemCta.vue b/docs/app/components/global/EcosystemCta.vue new file mode 100644 index 000000000..bf9e022b7 --- /dev/null +++ b/docs/app/components/global/EcosystemCta.vue @@ -0,0 +1,25 @@ + diff --git a/docs/app/components/global/EcosystemList.vue b/docs/app/components/global/EcosystemList.vue new file mode 100644 index 000000000..bff254a15 --- /dev/null +++ b/docs/app/components/global/EcosystemList.vue @@ -0,0 +1,269 @@ + + + + + diff --git a/docs/app/components/global/EcosystemShowcase.vue b/docs/app/components/global/EcosystemShowcase.vue new file mode 100644 index 000000000..e53effc59 --- /dev/null +++ b/docs/app/components/global/EcosystemShowcase.vue @@ -0,0 +1,104 @@ + + + diff --git a/docs/content/1.guide/23.built-with.md b/docs/content/1.guide/23.built-with.md deleted file mode 100644 index 5bff2ccc5..000000000 --- a/docs/content/1.guide/23.built-with.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: 'Built with Devframe' -navigation: - icon: i-lucide-blocks -description: 'Real-world devtools and hub UI providers built on devframe, from Vite DevTools to ESLint Config Inspector.' ---- - -## Real-world DevTools - -- [**Vite DevTools**](https://devtools.vite.dev/) bundles many devframes into one UI. Mount your own via the [`vite` adapter](/adapters/vite). -- [**Nuxt DevTools**](https://devtools.nuxt.com/) bundles many devframes into a Nuxt-specific UI. Mount your own via the [`nuxt` framework kit](/frameworks/nuxt). -- [**ESLint Config Inspector**](https://github.com/eslint/config-inspector) inspects flat configs. -- [**node-modules-inspector**](https://github.com/antfu/node-modules-inspector) visualizes your `node_modules` dependency graph. -- [**medula**](https://github.com/posva/medula) lets AI agents inspect and mutate a running app's live state over MCP. -- [**Pinia Colada devtools**](https://github.com/posva/pinia-colada/tree/main/devtools) inspects Pinia Colada queries and mutations. -- [**UnoCSS Inspector**](https://github.com/unocss/unocss/tree/main/packages-integrations/inspector) inspects generated utility classes and matched rules. - -## Built-in Devframes - -The [built-in devframes](/add-ons) are real tools built on Devframe, each in a different UI framework: - -| Devframe | UI framework | What it does | -|--------|--------------|--------------| -| [Data Inspector](/add-ons/devframes/data-inspector) | Vue | Query live server-side objects with jora. | -| [Devframe Inspector](/add-ons/devframes/inspect) | Vue | Browse RPC, shared state, and the agent-consumable API. | -| [Open Graph Viewer](/add-ons/devframes/og) | Vue | Inspect Open Graph / Twitter metadata and card previews. | -| [Accessibility Inspector](/add-ons/devframes/a11y) | Solid | Run axe-core; list WCAG violations. | -| [Git](/add-ons/devframes/git) | React (Next.js) | Repository dashboard: status, graph, branches, diffs. | -| [Terminals](/add-ons/devframes/terminals) | Svelte | Stream output and run interactive PTY shells. | -| [Code Server](/add-ons/devframes/code-server) | Vue | Run VS Code in the browser. | -| [Assets](/add-ons/devframes/assets) | Vue | Browse, preview, upload, rename, and delete files. | - -## Playable Examples - -Runnable examples in the [repository](https://github.com/devframes/devframe/tree/main/examples), each a single node-side definition behind a different UI. Run one with: - -```sh -pnpm install -pnpm --filter dev -``` - -| Example | UI | Shows | -|---------|----|-------| -| [files-inspector](https://github.com/devframes/devframe/tree/main/examples/files-inspector) | Preact | Lists cwd files over RPC. | -| [json-render](https://github.com/devframes/devframe/tree/main/examples/json-render) | Vue | Server-authored view via `@devframes/json-render-ui`; live state + action bridge. | -| [streaming-chat](https://github.com/devframes/devframe/tree/main/examples/streaming-chat) | Preact | Streams tokens; history in shared state. | -| [next-runtime-snapshot](https://github.com/devframes/devframe/tree/main/examples/next-runtime-snapshot) | React (Next.js) | App Router SPA surfacing the Node runtime. | -| [custom-hub-vite](https://github.com/devframes/devframe/tree/main/examples/custom-hub-vite) | Vanilla TS (Vite) | ~120-line Vite host wiring `@devframes/hub`; hand-built hub UI provider. | -| [custom-hub-next](https://github.com/devframes/devframe/tree/main/examples/custom-hub-next) | React (Next.js) | Same protocol, Next.js route. | - -The **minimal** family mounts `initHub({ ui: createUi() })` with `@devframes/hub-ui`: - -| Example | Host framework | Shows | -|---------|------|-------| -| [hub-vite](https://github.com/devframes/devframe/tree/main/examples/hub-vite) | Vite | Dev middleware. | -| [hub-next](https://github.com/devframes/devframe/tree/main/examples/hub-next) | Next.js | App Router route. | -| [hub-nitro](https://github.com/devframes/devframe/tree/main/examples/hub-nitro) | Nitro | Catch-all route. | -| [hub-hono](https://github.com/devframes/devframe/tree/main/examples/hub-hono) | Hono | Node and Bun. | -| [hub-fastify](https://github.com/devframes/devframe/tree/main/examples/hub-fastify) | Fastify | `nodeMiddleware`. | -| [hub-sveltekit](https://github.com/devframes/devframe/tree/main/examples/hub-sveltekit) | SvelteKit | Catch-all endpoint. | -| [hub-deno](https://github.com/devframes/devframe/tree/main/examples/hub-deno) | Deno | `Deno.serve` + upgrade socket. | -| [hub-rsbuild](https://github.com/devframes/devframe/tree/main/examples/hub-rsbuild) | Rsbuild | Dev middleware. | diff --git a/docs/content/1.guide/index.md b/docs/content/1.guide/index.md index bd813cf27..5ceb64940 100644 --- a/docs/content/1.guide/index.md +++ b/docs/content/1.guide/index.md @@ -106,7 +106,7 @@ The mounted devframes share one RPC registry, state store, connection, auth gate ## Inheriting the ecosystem -[Vite DevTools](https://devtools.vite.dev/) is the first flagship hub UI provider, using `initHub()` alongside its own Vite, Rolldown, Vitest, and Oxc tooling. The [framework kits](/frameworks) ([`@devframes/vite`](/frameworks/vite), [`@devframes/nuxt`](/frameworks/nuxt), [`@devframes/next`](/frameworks/next)) add conventions over the same handler. See [Built with Devframe](/guide/built-with). +[Vite DevTools](https://devtools.vite.dev/) is the first flagship hub UI provider, using `initHub()` alongside its own Vite, Rolldown, Vitest, and Oxc tooling. The [framework kits](/frameworks) ([`@devframes/vite`](/frameworks/vite), [`@devframes/nuxt`](/frameworks/nuxt), [`@devframes/next`](/frameworks/next)) add conventions over the same handler. See the [Ecosystem](/ecosystem) page. ## Install diff --git a/docs/content/4.ecosystem.md b/docs/content/4.ecosystem.md new file mode 100644 index 000000000..8d2d5856b --- /dev/null +++ b/docs/content/4.ecosystem.md @@ -0,0 +1,227 @@ +--- +title: Ecosystem +description: Devtools, hosts and services built on Devframe by the community and the core team. +navigation: + layout: page + icon: i-lucide-blocks +seo: + title: "Devframe ecosystem: devtools, hosts and services" + description: "Browse devtools built on Devframe, the hub UI providers that host them, wire services, and real products running Devframe in production." +--- + +::ecosystem-list +--- +packages: + - name: ESLint Config Inspector + description: Inspects ESLint flat configs + author: eslint + repo: eslint/config-inspector + category: Devframes + image: /images/ecosystem/logos/eslint-config-inspector.svg + color: "#4b32c3" + - name: node-modules-inspector + description: Visualizes the node_modules dependency graph + author: antfu + repo: antfu/node-modules-inspector + category: Devframes + image: /images/ecosystem/logos/node-modules-inspector.svg + color: "#3f8f4a" + - name: vite-plugin-inspect + description: Inspects the intermediate state of Vite plugins + author: antfu-collective + repo: antfu-collective/vite-plugin-inspect + category: Devframes + icon: i-carbon-search-advanced + color: "#646cff" + - name: medula + description: Lets AI agents inspect and mutate live app state over MCP + author: posva + repo: posva/medula + category: Devframes + icon: i-octicon-mcp-24 + color: "#d97706" + - name: Pinia Colada devtools + description: Inspects Pinia Colada queries and mutations + author: posva + url: https://github.com/posva/pinia-colada/tree/main/devtools + category: Devframes + image: /images/ecosystem/logos/pinia-colada.svg + color: "#e0b000" + - name: UnoCSS Inspector + description: Inspects generated utility classes and matched rules + author: unocss + url: https://github.com/unocss/unocss/tree/main/packages-integrations/inspector + category: Devframes + image: /images/ecosystem/logos/unocss-inspector.svg + - name: Vite DevTools + description: Hosts many devframes in one dock for any Vite app + author: vitejs + url: https://devtools.vite.dev + category: Hosts + image: /images/ecosystem/logos/vite-devtools.svg + color: "#8b5cf6" + - name: Nuxt DevTools + description: Nuxt DevTools v4, built on Devframe and Vite DevTools + author: nuxt + url: https://devtools.nuxt.com + category: Hosts + image: /images/ecosystem/logos/nuxt-devtools.svg + color: "#00dc82" + - name: "@devframes/plugin-data-inspector" + description: Queries live server objects with jora + author: devframes + url: /add-ons/devframes/data-inspector + category: Devframes + icon: i-ph:crosshair-duotone + official: true + - name: "@devframes/plugin-inspect" + description: Browses RPC, shared state and the agent surface of a connection + author: devframes + url: /add-ons/devframes/inspect + category: Devframes + icon: i-ph:stethoscope-duotone + official: true + - name: "@devframes/plugin-og" + description: Inspects Open Graph metadata and previews social cards + author: devframes + url: /add-ons/devframes/og + category: Devframes + icon: i-ph:image-square-duotone + official: true + - name: "@devframes/plugin-a11y" + description: Runs axe-core and highlights accessibility issues in the page + author: devframes + url: /add-ons/devframes/a11y + category: Devframes + icon: i-ph:person-simple-circle-duotone + official: true + - name: "@devframes/plugin-git" + description: Git dashboard for status, log, branches and diffs + author: devframes + url: /add-ons/devframes/git + category: Devframes + icon: i-ph:git-branch-duotone + official: true + - name: "@devframes/plugin-terminals" + description: Terminal panels for streamed output and interactive PTY shells + author: devframes + url: /add-ons/devframes/terminals + category: Devframes + icon: i-ph:terminal-window-duotone + official: true + - name: "@devframes/plugin-code-server" + description: Runs VS Code in the browser as an embedded editor panel + author: devframes + url: /add-ons/devframes/code-server + category: Devframes + icon: i-ph:code-duotone + official: true + - name: "@devframes/plugin-assets" + description: Browses, previews, uploads and manages static assets + author: devframes + url: /add-ons/devframes/assets + category: Devframes + icon: i-ph:images-duotone + official: true + - name: "@devframes/plugin-messages" + description: Browses, filters and dismisses the hub message feed + author: devframes + url: https://github.com/devframes/devframe/tree/main/plugins/messages + category: Devframes + icon: i-ph:chat-circle-dots-duotone + official: true + - name: "@devframes/service-open" + description: Opens files in the editor or reveals them in the file explorer + author: devframes + url: /add-ons/services/open + category: Services + icon: i-ph:file-arrow-up-duotone + official: true + - name: "@devframes/service-git" + description: Read and write git operations over RPC + author: devframes + url: /add-ons/services/git + category: Services + icon: i-ph:git-branch-duotone + official: true + - name: "@devframes/service-shiki" + description: Server-side Shiki highlighting shared by every devframe + author: devframes + url: /add-ons/services/shiki + category: Services + icon: i-ph:paint-brush-duotone + official: true +--- +:: + +::ecosystem-showcase +--- +addUrl: https://github.com/devframes/devframe/edit/main/docs/content/4.ecosystem.md +sites: + - name: Vite DevTools + description: One dock for any Vite app, with Rolldown bundle analysis, Vitest UI, Oxc tooling and the devframes you mount. + author: vitejs + url: https://devtools.vite.dev + screenshot: /images/ecosystem/vite-devtools.webp + - name: Nuxt DevTools + description: Nuxt DevTools v4 builds on Devframe and Vite DevTools and adds Nuxt-specific panels. + author: nuxt + url: https://devtools.nuxt.com + screenshot: /images/ecosystem/nuxt-devtools.webp + - name: ESLint Config Inspector + description: Visualizes ESLint flat configs, the rules each file gets and where they come from. + author: eslint + url: https://github.com/eslint/config-inspector + screenshot: /images/ecosystem/eslint-config-inspector.webp + - name: node-modules-inspector + description: Interactive dependency graph of node_modules with versions, duplicates and module types. + author: antfu + url: https://github.com/antfu/node-modules-inspector + screenshot: /images/ecosystem/node-modules-inspector.webp + - name: vite-plugin-inspect + description: Shows how each Vite plugin transforms a module, step by step. + author: antfu-collective + url: https://github.com/antfu-collective/vite-plugin-inspect + screenshot: /images/ecosystem/vite-plugin-inspect.webp + - name: Pinia Colada devtools + description: Inspects Pinia Colada queries and mutations, with refetch, invalidate and simulated errors. + author: posva + url: https://github.com/posva/pinia-colada/tree/main/devtools + screenshot: /images/ecosystem/pinia-colada-devtools.webp +--- + +#title +Built with Devframe + +#description +Devtools that run Devframe in production +:: + +::ecosystem-cta +#title +Add your project + +#description +Building on Devframe? Open a pull request that adds a card, or open an issue first if you are not sure it fits. + +#ctas + :::u-button + --- + to: https://github.com/devframes/devframe/edit/main/docs/content/4.ecosystem.md + icon: i-lucide-plus + target: _blank + color: neutral + --- + Add your project + ::: + + :::u-button + --- + to: https://github.com/devframes/devframe/issues/new + target: _blank + color: neutral + variant: outline + --- + Open an issue + ::: +:: diff --git a/docs/content/9.posts/1.pluggable-extensible-playful-devtools.md b/docs/content/9.posts/1.pluggable-extensible-playful-devtools.md index fd30f0846..31f4ea04b 100644 --- a/docs/content/9.posts/1.pluggable-extensible-playful-devtools.md +++ b/docs/content/9.posts/1.pluggable-extensible-playful-devtools.md @@ -113,7 +113,7 @@ export const buildReport = () => createBuild(myDevframe, { outDir: 'dist-static' A package can ship several of these entry points at once. For example, a build inspector could offer a standalone CLI for any project, generate static reports in CI, appear as a dock entry inside Vite DevTools, and let a coding agent query the active build, all backed by the same definition. -We are already using this model in [Node Modules Inspector](https://github.com/antfu/node-modules-inspector), [ESLint Config Inspector](https://github.com/eslint/config-inspector), and [Vite Plugin Inspect](https://github.com/antfu-collective/vite-plugin-inspect). They remain focused tools with their own interfaces, while sharing Devframe underneath. You can find more examples on the [Built with Devframe](/guide/built-with) page. +We are already using this model in [Node Modules Inspector](https://github.com/antfu/node-modules-inspector), [ESLint Config Inspector](https://github.com/eslint/config-inspector), and [Vite Plugin Inspect](https://github.com/antfu-collective/vite-plugin-inspect). They remain focused tools with their own interfaces, while sharing Devframe underneath. You can find more examples on the [Ecosystem](/ecosystem) page. The browser side is up to each tool as well. Devframe handles the protocol and runtime, while the tool can choose whichever UI framework and design system suits it. To dogfood that promise, the [built-in devframes](#built-in-devframes) span Vue, Svelte, Solid, React, and Next.js. @@ -203,7 +203,7 @@ It is heavily inspired by [`@nuxt/a11y`](https://github.com/nuxt/a11y), which br Other built-in devframes cover a [VS Code editor on the web](/add-ons/devframes/code-server), [asset management](/add-ons/devframes/assets), a [Git panel](/add-ons/devframes/git), [Open Graph previews](/add-ons/devframes/og), and [Devframe's own RPC and state inspector](/add-ons/devframes/inspect). They share the devframe definition and protocol while each chooses its own UI framework. -These built-in devframes show what Devframe can support and offer starting points for communities to build their own. We believe many more interesting DevTools will emerge over time. You can follow the growing list on [Built with Devframe](/guide/built-with). +These built-in devframes show what Devframe can support and offer starting points for communities to build their own. We believe many more interesting DevTools will emerge over time. You can follow the growing list on the [Ecosystem](/ecosystem) page. ## From One Devframe to a DevTools Host diff --git a/docs/package.json b/docs/package.json index f86a96f51..970a7ff10 100644 --- a/docs/package.json +++ b/docs/package.json @@ -17,6 +17,7 @@ "@iconify-json/twemoji": "catalog:frontend", "@iconify-json/unjs": "catalog:frontend", "@shikijs/magic-move": "catalog:frontend", + "@vueuse/core": "catalog:frontend", "comark-docs": "catalog:docs", "d3-shape": "catalog:frontend", "nuxt": "catalog:build", diff --git a/docs/public/images/ecosystem/eslint-config-inspector.webp b/docs/public/images/ecosystem/eslint-config-inspector.webp new file mode 100644 index 000000000..89ddddd57 Binary files /dev/null and b/docs/public/images/ecosystem/eslint-config-inspector.webp differ diff --git a/docs/public/images/ecosystem/logos/eslint-config-inspector.svg b/docs/public/images/ecosystem/logos/eslint-config-inspector.svg new file mode 100644 index 000000000..33562b4c2 --- /dev/null +++ b/docs/public/images/ecosystem/logos/eslint-config-inspector.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/public/images/ecosystem/logos/node-modules-inspector.svg b/docs/public/images/ecosystem/logos/node-modules-inspector.svg new file mode 100644 index 000000000..1cd279ae7 --- /dev/null +++ b/docs/public/images/ecosystem/logos/node-modules-inspector.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/public/images/ecosystem/logos/nuxt-devtools.svg b/docs/public/images/ecosystem/logos/nuxt-devtools.svg new file mode 100644 index 000000000..ead151fc7 --- /dev/null +++ b/docs/public/images/ecosystem/logos/nuxt-devtools.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/public/images/ecosystem/logos/pinia-colada.svg b/docs/public/images/ecosystem/logos/pinia-colada.svg new file mode 100644 index 000000000..ad5a89f49 --- /dev/null +++ b/docs/public/images/ecosystem/logos/pinia-colada.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/images/ecosystem/logos/unocss-inspector.svg b/docs/public/images/ecosystem/logos/unocss-inspector.svg new file mode 100644 index 000000000..7b268ca33 --- /dev/null +++ b/docs/public/images/ecosystem/logos/unocss-inspector.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/public/images/ecosystem/logos/vite-devtools.svg b/docs/public/images/ecosystem/logos/vite-devtools.svg new file mode 100644 index 000000000..0f2bdacd0 --- /dev/null +++ b/docs/public/images/ecosystem/logos/vite-devtools.svg @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/public/images/ecosystem/node-modules-inspector.webp b/docs/public/images/ecosystem/node-modules-inspector.webp new file mode 100644 index 000000000..9924a9cac Binary files /dev/null and b/docs/public/images/ecosystem/node-modules-inspector.webp differ diff --git a/docs/public/images/ecosystem/nuxt-devtools.webp b/docs/public/images/ecosystem/nuxt-devtools.webp new file mode 100644 index 000000000..0a2a660e3 Binary files /dev/null and b/docs/public/images/ecosystem/nuxt-devtools.webp differ diff --git a/docs/public/images/ecosystem/pinia-colada-devtools.webp b/docs/public/images/ecosystem/pinia-colada-devtools.webp new file mode 100644 index 000000000..8ac51263c Binary files /dev/null and b/docs/public/images/ecosystem/pinia-colada-devtools.webp differ diff --git a/docs/public/images/ecosystem/vite-devtools.webp b/docs/public/images/ecosystem/vite-devtools.webp new file mode 100644 index 000000000..fb55e7424 Binary files /dev/null and b/docs/public/images/ecosystem/vite-devtools.webp differ diff --git a/docs/public/images/ecosystem/vite-plugin-inspect.webp b/docs/public/images/ecosystem/vite-plugin-inspect.webp new file mode 100644 index 000000000..a053d035f Binary files /dev/null and b/docs/public/images/ecosystem/vite-plugin-inspect.webp differ diff --git a/docs/vercel.json b/docs/vercel.json index 55305c45f..f444d5b6d 100644 --- a/docs/vercel.json +++ b/docs/vercel.json @@ -9,6 +9,7 @@ { "source": "/guide/terms", "destination": "/references/terms", "permanent": true }, { "source": "/guide/when-clauses", "destination": "/references/when-clauses", "permanent": true }, { "source": "/guide/events", "destination": "/references/events", "permanent": true }, + { "source": "/guide/built-with", "destination": "/ecosystem", "permanent": true }, { "source": "/plugins", "destination": "/add-ons", "permanent": true }, { "source": "/plugins/data-inspector", "destination": "/add-ons/devframes/data-inspector", "permanent": true }, { "source": "/plugins/inspect", "destination": "/add-ons/devframes/inspect", "permanent": true }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 565fbd6a9..8ad08c512 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -718,6 +718,9 @@ importers: '@shikijs/magic-move': specifier: catalog:frontend version: 4.5.0(react@19.2.8)(shiki@4.5.0)(solid-js@1.9.15)(svelte@5.57.0(@typescript-eslint/types@8.69.0))(vue@3.5.43(typescript@6.0.3)) + '@vueuse/core': + specifier: catalog:frontend + version: 14.4.0(vue@3.5.43(typescript@6.0.3)) comark-docs: specifier: catalog:docs version: https://codeload.github.com/comarkdown/comark-docs/tar.gz/f97dc864b0aa702d54c600f868589b7a2c185b3a(patch_hash=5f1078be206123f957de74141ae02eaae510555cc7444404bffbfaae8d407e33)(82db2e45faa43624590d83dfe0c71ad0)