Rslib is a library development tool built on top of Rsbuild (which uses Rspack). It provides a CLI and JavaScript API to build JavaScript/TypeScript libraries in multiple output formats: ESM, CJS, UMD, IIFE, and Module Federation. It supports both bundle and bundleless modes, TypeScript declaration generation via three backends (TypeScript Compiler API, tsgo, and isolatedDeclarations), CSS processing with preprocessors and modules, static assets (including SVGR), WebAssembly, Web Workers, and Node.js single-executable applications (SEA). The architecture is plugin-based, leveraging Rsbuild's plugin system and Rspack's compilation pipeline. Key entry points include the CLI commands (`rslib build`, `rslib inspect`, `rslib mf-dev`) and the programmatic API (`createRslib`, `defineConfig`). External dependencies include Rsbuild, Rspack, SWC, Lightning CSS, TypeScript, API Extractor, and the Module Federation plugin. The monorepo contains three published packages: `@rslib/core` (core build engine), `create-rslib` (project scaffolding), and `rsbuild-plugin-dts` (declaration bundling). It includes extensive integration tests with snapshot assertions, e2e tests with Playwright, and a bilingual documentation website. The tool is designed for library authors who need multi-format builds, type declarations, and compatibility with various frameworks (React, Vue, Svelte, Solid). It is part of the Rstack ecosystem alongside Rspress, Rsdoctor, Rstest, and Rslint. Data flows: User configuration (rslib.config.ts) is parsed and merged with defaults, then passed to Rsbuild to generate Rspack configurations per output format. The build process compiles source files with SWC, extracts CSS, generates declarations, and produces final bundles. In bundleless mode, files are emitted individually with import path rewriting. The tool also supports development servers for Module Federation and watch mode for incremental builds.
Microbundle is a zero-configuration bundler for small JavaScript/TypeScript libraries, built on top of Rollup. It automatically generates multiple output formats (ESM, CJS, UMD, and a modern ES2017 bundle) from a single source entry, using package.json fields to determine input and output paths. The system reads the package.json, resolves entry points, and creates Rollup configurations for each format, applying Babel for transpilation (with custom presets for modern vs legacy targets), TypeScript via rollup-plugin-typescript2, CSS handling via PostCSS, and minification via Terser. It supports features like JSX, CSS Modules, property mangling, build-time constant replacement, module aliasing, Web Workers, and bundle visualization. The architecture is a CLI tool (`src/cli.js`) that parses arguments with `sade` and calls the core `microbundle()` function (`src/index.js`), which orchestrates the build pipeline. The codebase is well-structured, with reusable utility modules for option normalization, Babel plugin customization, and size reporting. While the dependency versions are somewhat dated (Rollup 2, Babel 7.12), the project remains actively maintained with recent commits and a comprehensive test suite covering many edge cases.