Skip to content

Releases: elixir-volt/volt

v0.13.1

22 May 17:23

Choose a tag to compare

Fixed

  • mix volt.js.check --type-aware now forwards only typescript/* rules to tsgolint, matching Oxlint's type-aware rule namespace and avoiding crashes when normal oxlint category rules such as "correctness" are configured.

v0.13.0

22 May 14:14

Choose a tag to compare

Added

  • env_prefix config for choosing which .env variables are exposed through import.meta.env, including Vite-compatible prefixes like "VITE_".
  • asset_url_prefix config and mix volt.build --asset-url-prefix for changing production JavaScript and CSS asset URLs without changing Phoenix output paths.
  • Production chunk manifests now include richer chunk metadata: imports, dynamicImports, chunk-local css, and emitted assets.
  • Plugin embedded_modules/3 hook for exposing JavaScript-like scripts embedded in custom file formats.

Changed

  • Upgraded oxc to 0.15.1, quickbeam to 0.10.15, and reach to 2.6.1.
  • mix volt.js.check now supports --type-aware and --type-check for TypeScript-aware linting through tsgolint.
  • Type-aware checks now analyze Vue and Svelte component scripts via plugin-provided virtual modules while leaving templates on the normal syntax lint path.
  • Production builds now tree-shake JavaScript by default, with tree_shaking: false and mix volt.build --no-tree-shaking available to preserve unused exports.
  • Code-split dynamic imports now preload dependency chunks and chunk-local CSS when doing so avoids loading waterfalls.
  • Code-split production builds now preserve dynamic import facades, rewrite chunk imports by exact resolved specifier, and avoid worker filename collisions.
  • HMR boundary lookup now uses a served module graph, with a dedicated glob graph for import.meta.glob() invalidation.
  • HMR updates now support self-accepting modules, dependency accept callbacks, multi-dependency accept callbacks, disposal data, CSS import updates, and full-reload fallback more closely to Vite's behavior.
  • Production builds now write the final merged manifest once after all entries are built.
  • Production JavaScript asset URL imports now emit hashed files and include them in manifest asset metadata.
  • Worker build failures now fail the parent build instead of being ignored.
  • JavaScript runtime installs now validate package signatures for reused install directories, and named runtimes reject option mismatches.
  • glob_ex is now a direct dependency for HMR glob invalidation.
  • Volt now dogfoods type-aware JavaScript checks in mix lint.

Breaking changes

  • Custom plugins that return {:proxy, filename, opts} from prebundle_entry/1 must use Volt.JS.PrebundleEntry.Import and Volt.JS.PrebundleEntry.Export entries for :imports and :exports; plain map entries are no longer accepted.
  • Custom extract_imports/3 plugin callbacks must return {:ok, %Volt.JS.ImportExtractor.Result{}} instead of plain maps.

v0.12.0

20 May 13:56

Choose a tag to compare

Added

  • Vite-compatible asset query imports for ?raw, ?url, ?inline, and ?no-inline in development and production builds.
  • Production new URL("./asset.ext", import.meta.url) asset rewriting through generated asset URL imports.
  • Expanded import.meta.glob support, dynamic import variable rewriting, and glob importer invalidation during HMR updates.
  • Optional Vite-style public directory support for projects that want public-root compatibility.
  • Vite-style plugin enforce ordering for :pre, normal, and :post hooks.

Changed

  • CSS asset URL rewriting now uses Vize/LightningCSS AST mutation and printing instead of source-range patching.
  • JavaScript emitted by plugins and framework compilers now re-enters Volt's common post-processing pipeline.
  • Upgraded vize to 0.11.1 and QuickBEAM to 0.10.14.
  • Documented CSS-emitting plugins and OXC-backed template generation patterns.

Fixed

  • CSS-referenced assets are copied once per source asset, preserve query and fragment suffixes, and are included in build metadata.
  • Asset import module identity now preserves query modes, avoiding collisions when the same file is imported with different asset queries.
  • Mutating JavaScript post-processing steps now drop stale sourcemaps instead of returning mismatched maps.
  • Dynamic import rewriting now preserves query suffixes.

v0.11.3

17 May 16:40

Choose a tag to compare

  • Fix watcher caching its own compilation results, which could cause stale responses missing HMR preamble, import.meta.env injection, and dev import rewriting
  • Fix CSS ?import cache entries not being evicted on file changes

v0.11.2

16 May 19:07

Choose a tag to compare

  • Fix Tailwind @plugin "daisyui" and subpath imports like daisyui/theme
  • Fix Tailwind @import "tw-animate-css" resolution via style export condition

v0.11.1

16 May 13:54

Choose a tag to compare

Added

  • module_types config option — maps file extensions to bundler loaders (e.g. %{".css" => :empty, ".ttf" => :empty}). Passed to both production builds and vendor prebundling. Useful for packages like Monaco Editor that import non-JS files.

Changed

  • Upgraded OXC to 0.13 and QuickBEAM to 0.10.13.

v0.11.0

16 May 12:30

Choose a tag to compare

Added

  • Named configuration profiles for multi-app and umbrella support. Use config :volt, :my_app_web, [...] to define per-app configs, and pass the profile name to Mix tasks (mix volt.build my_app_web) and the dev server plug (plug Volt.DevServer, profile: :my_app_web). The existing flat config :volt format continues to work unchanged.

v0.10.9

16 May 11:34

Choose a tag to compare

Fixed

  • mix volt.build now compiles the project and starts only Volt's application, avoiding database connection attempts during asset builds in Phoenix projects while keeping Volt services available for Tailwind builds.

v0.10.8

16 May 11:31

Choose a tag to compare

Fixed

  • mix volt.build now compiles the project without starting the application, avoiding database connection attempts during asset builds in Phoenix projects.

v0.10.7

16 May 11:24

Choose a tag to compare

Added

  • Vendor prebundling and dev-server on-demand bundling now honor resolve_dirs, allowing bare imports to resolve from additional module directories such as Phoenix's _build/$MIX_ENV/phoenix-colocated output.
  • Documented the Phoenix LiveView colocated JavaScript setup for projects migrating from esbuild's NODE_PATH configuration.

Changed

  • Upgraded the Tailwind CSS runtime package requirement to ^4.3.0.
  • mix ci now runs the test suite through env MIX_ENV=test, which works with newer Mix versions.

Fixed

  • Additional resolve directories now support package-like folders without package.json, including subpath imports such as phoenix-colocated/my_app.