@ic-reactor/vite-plugin
v0.9.0
Published
Vite plugin for zero-config IC reactor generation from Candid files
Downloads
1,191
Maintainers
Readme
@ic-reactor/vite-plugin
Vite plugin for IC Reactor code generation. It runs the shared
@ic-reactor/codegen pipeline, watches .did files, and can inject the
ic_env cookie used by ClientManager during local development.
Install
pnpm add -D @ic-reactor/vite-plugin
pnpm add @ic-reactor/react @tanstack/react-query @icp-sdk/coreQuick Start
// vite.config.ts
import { defineConfig } from "vite"
import react from "@vitejs/plugin-react"
import { icReactor } from "@ic-reactor/vite-plugin"
export default defineConfig({
plugins: [
react(),
icReactor({
canisters: [{ name: "backend", didFile: "./backend/backend.did" }],
}),
],
})// src/clients.ts
import { ClientManager } from "@ic-reactor/react"
import { QueryClient } from "@tanstack/react-query"
export const queryClient = new QueryClient()
export const clientManager = new ClientManager({
queryClient,
withCanisterEnv: true,
})The plugin generates files under src/declarations/<canister>/ by default.
If you want non-React output, set target: "core" and install the matching
runtime package instead of @ic-reactor/react.
Options
icReactor({
canisters: [
{
name: "backend",
didFile: "./backend/backend.did",
mode: "DisplayReactor",
},
],
outDir: "src/declarations",
clientManagerPath: "../../clients",
target: "react",
injectEnvironment: true,
})Per-canister options
namedidFileoutDirclientManagerPathtargetmodecanisterId
Supported mode values:
ReactorDisplayReactorCandidReactorCandidDisplayReactorMetadataDisplayReactor
Supported target values:
react(default): generates the reactor plus bound React hookscore: generates only the typed reactor exports with no React dependency
Local Development Behavior
When injectEnvironment is enabled during vite dev, the plugin:
- asks
icp-clifor the local network status - resolves configured canister IDs
- sets the
ic_envcookie - proxies
/apito the local replica
If environment detection fails, the plugin still falls back to proxying /api
to http://127.0.0.1:4943, but it will not inject canister metadata.
File Regeneration
On startup and on .did file changes, the plugin regenerates declarations and
the managed index.generated.ts implementation. The user-facing index.ts
entry is created once, then preserved unless it still matches the default
wrapper or a legacy generated scaffold that can be migrated automatically.
When a watched .did file changes, the plugin sends a full browser reload so
the new declarations are picked up.
When To Use It
- Vite apps with active
.diditeration - teams that want zero extra codegen commands during development
- projects that want the same output format as the CLI without manual steps
See Also
- Docs: https://ic-reactor.b3pay.net/v3/packages/vite-plugin
@ic-reactor/codegen: ../codegen/README.md@ic-reactor/cli: ../cli/README.md
