Guide Devframe launched as a framework-neutral foundation that lets developers build a devtool once and run it inside any host framework, as a standalone tool, or through a coding agent. The project pairs a single `defineDevframe()` definition with a Web Standard `(request: Request) => Promise` handler via `initDevframe()`, serving the web interface, connection metadata, live RPC, authentication, and an optional MCP endpoint under one namespace. Higher-level adapters package the foundation as a standalone CLI, dev server, Vite DevTools plugin, MCP server, or static report. Introduction Devframe is a framework-neutral foundation for building a devtool once and running it everywhere - inside any host framework, as a standalone tool, or through a coding agent. A devtool here is anything that makes a program's implicit state visible and interactive: an inspector, a build or bundle analyzer, an asset viewer, a state or data explorer, a terminal. You describe such a tool one time, and the same definition mounts almost anywhere. Think of it as unplugin https://unplugin.unjs.io/ for devtools. Why it exists why-it-exists Most devtools rebuild the same plumbing node–browser communication, state synchronization, serialization, static-asset hosting, a web interface and wire it to one framework's dev server. The same idea then gets rebuilt, slightly differently, for the next framework, so effort fragments across the ecosystem instead of compounding. Devframe moves that boundary. A capability is defined once against a stable interface and runs on every supported host framework, so a good tool can be built once, travel further, and improve through the work of more communities. Who it's for who-its-for - Devtool authors who want one tool to run standalone, embed in a host framework, ship as a CLI or static report, and answer to a coding agent, without maintaining a separate version per environment. - Framework and build-tool teams who want to offer devtools without rebuilding shared infrastructure, and to inherit capabilities other communities already built. - Anyone who wants a tool's state and actions available to both a human UI and a coding agent from one source of truth. With a coding agent to scaffold the boilerplate, Devframe is also a fast foundation for standing up a bespoke, specific-need, or even one-off devtool. New here? Answer a few questions about your devtool https://devfra.me/guide/getting-started and get a reading list tailored to it. For the story behind Devframe, read Pluggable, Extensible, and Playful DevTools https://devfra.me/posts/pluggable-extensible-playful-devtools . One definition, one standard handler one-definition-one-standard-handler Every devframe starts with defineDevframe https://devfra.me/guide/devframe-definition , pairing a tool's identity with its capabilities. js import { defineDevframe } from 'devframe' import { inspectProject } from './rpc' export default defineDevframe { id: 'my-tool', name: 'My Tool', / package metadata and client entry omitted… / setup ctx { ctx.scope 'my-tool' .rpc.register inspectProject }, } initDevframe https://devfra.me/adapters/initiate turns the definition into a live instance whose handler is a Web Standard request: Request = Promise