web_modules 0.1.0

Pure-Rust, buildless toolchain for ES modules and Web Components
Documentation

web_modules

Pure-Rust tooling for developing Web Components: vendor npm packages, transform TypeScript/SCSS, and serve or embed a native-ESM frontend, with no Node, no npm and no bundler at build time. Use it as a web-modules CLI for everyday development, or as a library from a build.rs / at runtime. Built on npm-utils, oxc, grass and rolldown.

What it does

  • Vendor - resolve and download npm packages into web_modules/<name>, targeted or including dependencies.
  • Transform - compile and convert source files, minify and process.
  • Dev server - serve from source, compile on the fly, watch and live-reload.
  • Build - vendor, transform and render an embeddable dist/, then bake it into your binary.
  • Bundle (opt-in) - fold CommonJS packages and their node_modules/ into ES modules.

Features

Each is a Cargo --features flag:

  • typescript / scss - compile to browser JS and CSS
  • tera - HTML and import map templating
  • minify · dts · i18n · icons - optional processors
  • compress - gzip sidecars for static serving
  • bundle - CommonJS to ESM
  • axum · dev - serve the frontend, with a live-reload dev server

CLI

cargo install web_modules --features cli
$ web-modules --help
Buildless web frontend toolchain (no Node)

Usage: web-modules <COMMAND>

Commands:
  dev      Dev server: compile TS/SCSS on the fly, watch the tree, live-reload
  compile  Compile source root(s) into an output tree (TS→JS, SCSS→CSS, static files copied)
  vendor   Vendor npm packages into web_modules/ + an import map
  ci       Install a package-lock.json's exact tree into node_modules/ — a pure-Rust npm ci
  npm      Run an npm-utils command (add · install · ci · upgrade · …)
  help     Print this message or the help of the given subcommand(s)

Options:
  -h, --help     Print help
  -V, --version  Print version

Run web-modules <command> --help for flags.

Library

[dependencies]
web_modules = "0.1"   # Rust 1.94+

typescript, scss and tera are on by default; full enables everything except bundle. For the build.rs / runtime API see the API docs.

Examples

The examples/ tree is full of runnable demos; cargo run and open the browser. A few picks:

  • lit-element - a Lit 3 component themed with Bootstrap 5, baked at build time, served by axum.
  • d3 - a bar chart with D3, a non-Lit npm dependency vendored and served as-is.
  • react-esm - React from npm bundled into one browser ES module, entirely in Rust (the bundle feature).
  • embedded - the whole frontend baked into the binary; no filesystem, no network.
  • tauri - a Tauri v2 desktop app, frontend live-served (and release-baked) by web-modules.

License

MIT. See LICENSE.