Files
effect-view/packages/vite-plugin
Julien Valverdé 73399c1b24
Lint / lint (push) Failing after 39s
Fix tests
2026-07-25 23:52:11 +02:00
..
2026-07-25 23:52:11 +02:00
2026-07-25 23:47:16 +02:00
2026-07-25 23:47:16 +02:00
2026-07-25 22:44:09 +02:00
2026-07-25 23:47:16 +02:00
2026-07-25 23:47:16 +02:00
2026-07-25 23:47:16 +02:00

@effect-view/vite-plugin

Experimental Vite Fast Refresh support for Effect View components.

import { effectViewPlugin } from "@effect-view/vite-plugin"
import react from "@vitejs/plugin-react"
import { defineConfig } from "vite"

export default defineConfig({
    plugins: [
        effectViewPlugin(),
        react(),
    ],
})

The plugin recognizes Component.make and Component.makeUntraced definitions imported from effect-fc-next. The legacy effect-fc package is not supported. effect-fc-next owns the bundler-neutral refresh cell protocol; this package is the Vite adapter that retains those cells in HMR data. The plugin assigns stable development IDs and self-accepts successfully instrumented modules.

The adapter-facing protocol is exported from effect-fc-next/Refreshable.

Renaming or removing an instrumented View invalidates the module upward instead of leaving a stale mounted descriptor.

React state is retained when the ordered hook signature is unchanged. Adding, removing, or changing a hook call resets the Effect View implementation. Add // @refresh reset to a module to reset its Views on every update.

Current limitations

  • Vite is the only supported bundler.
  • Definitions must be top-level variable, class, or default-export declarations.
  • Hook signature analysis is conservative and based on useX call syntax.
  • Changing a descriptor's trait pipeline during a refresh is not guaranteed to preserve state.
  • Source maps for the injected transform are not generated yet.