RepoPilot

web-infra-dev/rspack

Fast Rust-based bundler for the web with a modernized webpack API πŸ¦€

Healthy

Healthy across the board

HealthyDependency

Permissive license, no critical CVEs, actively maintained β€” safe to depend on.

HealthyFork & modify

Has a license, tests, and CI β€” clean foundation to fork and modify.

HealthyLearn from

Documented and popular β€” useful reference codebase to read through.

HealthyDeploy as-is

No critical CVEs, sane security posture β€” runnable as-is.

  • βœ“Last commit today
  • βœ“19 active contributors
  • βœ“Distributed ownership (top contributor 28% of recent commits)
  • βœ“MIT licensed
  • βœ“CI configured
  • βœ“Tests present

Computed from maintenance signals β€” commit recency, contributor breadth, bus factor, license, CI, tests

Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.

Embed the "Healthy" badge

Paste into your README β€” live-updates from the latest cached analysis.

Variant:
RepoPilot: Healthy
[![RepoPilot: Healthy](https://repopilot.app/api/badge/web-infra-dev/rspack)](https://repopilot.app/r/web-infra-dev/rspack)

Paste at the top of your README.md β€” renders inline like a shields.io badge.

β–ΈPreview social card

This card auto-renders when someone shares https://repopilot.app/r/web-infra-dev/rspack on X, Slack, or LinkedIn.

Ask AI about web-infra-dev/rspack

Grounded in the actual source code. Pick a starter question or write your own.

Or write your own question β†’

Onboarding doc

Onboarding: web-infra-dev/rspack

Generated by RepoPilot Β· 2026-06-24 Β· Source

🎯Verdict

GO β€” Healthy across the board

  • Last commit today
  • 19 active contributors
  • Distributed ownership (top contributor 28% of recent commits)
  • MIT licensed
  • CI configured
  • Tests present

<sub>Computed from maintenance signals β€” commit recency, contributor breadth, bus factor, license, CI, tests</sub>

⚑TL;DR

Rspack is a Rust-based JavaScript bundler that replaces webpack with a modernized API and dramatically faster build speeds. It provides webpack-compatible plugins and loaders, built-in optimizations (tree-shaking, minification), Module Federation support, and incremental HMRβ€”designed to deliver production-grade bundling for large-scale web applications without changing developer workflows. Monorepo with three layers: (1) crates/* contains Rust core packages (rspack_core, rspack_binding, rspack_plugin_); (2) packages/ holds TypeScript/JavaScript bindings and ecosystem packages like @rspack/core, @rspack/cli, @rstack/ toolchain; (3) .agents/ contains architectural documentation (ARCHITECTURE.md, CODE_STYLE.md, PASSES.md, GLOSSARY.md) for AI-assisted development. Build system uses Cargo for Rust and pnpm for Node.js layers.

πŸ‘₯Who it's for

Frontend engineers and teams building modern web applications who want webpack compatibility without slow build times; framework teams adopting Rspack as their default bundler; contributors interested in Rust-based tooling, performance optimization, and JavaScript build infrastructure.

🌱Maturity & risk

Actively maintained and production-ready. At v0.100.2 (approaching v1.0), it has comprehensive CI/CD pipelines (GitHub Actions with performance benchmarking, binary size limits, codspeed tracking), extensive test coverage across Rust and TypeScript layers, and regular releases. The monorepo shows consistent, recent commit activity and strong community engagement (Discord, npm/crates registries).

Low maturity risk given active development, but Rspack's pre-1.0 versioning means API breaking changes remain possible. The large dependency tree (workspace members in crates/*, heavy Rust ecosystem dependencies like swc_core, regex, etc.) and tight coupling to JavaScript tooling versions could introduce compatibility friction. Single-organization backing (web-infra-dev) means feature direction is tied to ByteDance's priorities rather than broader consensus.

Active areas of work

The project is preparing for v1.0 release (currently 0.100.2). Active work visible in skills subdirectories (.agents/skills/) including rspack-release-pr, rspack-perf-profiling, and rspack-pgo (profile-guided optimization). CI infrastructure shows heavy focus on performance benchmarking and binary size limits via GitHub Actions. Expanding Rstack unified toolchain (Rspack-centered) as webpack replacement.

πŸš€Get running

git clone https://github.com/web-infra-dev/rspack.git && cd rspack && pnpm install && cargo build. For development: pnpm dev (uses workspace scripts) or cargo build --release for optimized Rust binaries. See README.md and .agents/ARCHITECTURE.md for deeper onboarding.

Daily commands: Development: pnpm install && pnpm dev (boots dev server with HMR). Building Rust: cargo build (debug) or cargo build --release. Running tests: cargo test (Rust) or pnpm test (TypeScript). CLI: @rspack/cli package provides rspack CLI after building.

πŸ—ΊοΈMap of the codebase

  • crates/rspack_core/src/lib.rs: Entry point for core bundler logic; defines Module, Chunk, Compilation, and Plugin trait hierarchy
  • packages/@rspack/core/src/: TypeScript webpack-compatible API layer; exposes Rust bindings via napi to JavaScript consumers
  • .agents/ARCHITECTURE.md: Authoritative guide to codebase structure, compilation phases, and plugin system design
  • .agents/PASSES.md: Documents incremental compilation phases and how HMR invalidation works
  • crates/rspack_binding/src/: napi-rs bindings that expose Rust bundler to Node.js; critical for performance
  • .cargo/config.toml: Workspace configuration; specifies Rust edition (2024), dependency resolution strategy (resolver v2)
  • .github/actions/: Custom CI/CD actions for performance benchmarking, binary limits, Docker builds, essential for understanding release process
  • .agents/CODE_STYLE.md: Enforced code style, naming conventions, and architectural patterns for PRs

πŸ› οΈHow to make changes

New bundler features: start in crates/rspack_core/src/ and crates/rspack_plugin_*/src/. Webpack-compatible APIs: edit packages/@rspack/core/src/ (TypeScript). Plugins/loaders: follow patterns in crates/rspack_plugin_javascript, crates/rspack_plugin_css. Documentation: MDX files in packages/rspack/docs/ and .agents/ subdirectories. Tests: place alongside source in __tests__ or tests/ directories per Rust convention.

πŸͺ€Traps & gotchas

Rust edition 2024 in Cargo.toml requires nightly or recent stable toolchain. Workspace resolver v2 uses feature unification across all workspace membersβ€”ensure dependency features align or builds fail silently. napi-rs bindings require Node.js headers and native compilation; pre-built binaries are cached but rebuilds slow on ARM64. Transient cache (see .agents/TRANSIENT_CACHE.md) is non-persistent; understand invalidation strategy before modifying state. Monorepo coordination: pnpm workspace and Cargo workspace must stay synchronized; running only cargo build skips TypeScript packages. CI environment: uses Docker containers for reproducible builds; local dev may behave differently on macOS/Linux/Windows (check .github/actions/docker/run/action.yml).

πŸ’‘Concepts to learn

  • Module Graph β€” Core abstraction in Rspack representing dependencies between modules; understanding graph traversal is essential for debugging bundling logic and plugin development
  • Incremental Compilation β€” Rspack's signature performance feature for HMR; the transient cache and module invalidation strategy directly impact rebuild speed
  • Plugin Architecture (Trait-Based) β€” Rspack uses Rust traits to define plugin hooks (similar to webpack hooks); understanding the hook lifecycle is mandatory for extending bundler behavior
  • Module Federation β€” Rspack has first-class support via rspack_plugin_module_federation; enables micro-frontend patterns at build time, not runtime
  • napi-rs FFI (Foreign Function Interface) β€” Rspack's Rust core communicates with JavaScript via napi bindings; understanding the boundary between Rust and JS is critical for performance and debugging
  • Tree Shaking & Dead Code Elimination β€” Built-in optimization strategy in Rspack using swc_core's DCE; essential for understanding bundle size optimization
  • Transient Cache (Invalidation Strategy) β€” Rspack's non-persistent cache for incremental builds; see .agents/TRANSIENT_CACHE.md for state management during watch mode
  • webpack/webpack β€” Original bundler Rspack is designed to replace; understanding webpack's architecture helps appreciate Rspack's API compatibility and performance gains
  • swc-project/swc β€” Rspack's underlying Rust parser/codegen engine; Rspack depends on swc_core for AST transformation and minification
  • vercel/next.js β€” Early adopter of Rspack for Next.js 14+ bundling; reference implementation of Rspack integration at scale
  • facebook/metro β€” Alternative bundler for React Native; similar performance-focused Rust-based approach, useful comparison for architecture decisions
  • web-infra-dev/rsbuild β€” Higher-level build tool built on top of Rspack; if you use Rspack, Rsbuild is the recommended framework-agnostic wrapper

πŸͺ„PR ideas

To work on one of these in Claude Code or Cursor, paste: Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.

Add comprehensive skill documentation and integration tests for rspack-sftrace

The .agents/skills/rspack-sftrace/SKILL.md file exists but appears to be a specialized performance profiling tool with no visible integration tests or validation workflows. Given that rspack is a performance-critical Rust bundler, adding tests to verify sftrace functionality and a GitHub Action workflow (similar to bench-binding.yml and bench-rust.yml) would ensure this performance profiling skill remains reliable and is actively validated in CI.

  • [ ] Review .agents/skills/rspack-sftrace/SKILL.md to understand current capabilities
  • [ ] Create tests/sftrace_integration_test.rs with test cases for trace generation and output validation
  • [ ] Add .github/workflows/ci-sftrace.yml workflow to run sftrace tests on Rust changes
  • [ ] Document expected sftrace output format in .agents/skills/rspack-sftrace/SKILL.md
  • [ ] Add validation script similar to .github/actions/binary-limit/binary-limit-script.js for sftrace output

Implement crate-level CHANGELOG tracking and validation in CI

The workspace has 40+ crates under crates/* with a centralized version 0.100.2, but there's no visible per-crate changelog mechanism or validation. This makes it difficult to track which crates changed between releases. Adding a CI workflow to validate CHANGELOG.md exists in modified crates and a script to aggregate changelogs would improve release transparency.

  • [ ] Create crates/*/CHANGELOG.md template structure
  • [ ] Add .github/actions/changelog/validate/action.yml to check for CHANGELOG updates in modified crates
  • [ ] Add .github/workflows/ci-changelog.yml to run changelog validation on PRs
  • [ ] Create xtask/changelog/src/main.rs tool to aggregate and lint per-crate changelogs
  • [ ] Document changelog format requirements in .agents/CODE_STYLE.md

Add workspace dependency audit and update workflow with security scanning

The workspace.dependencies section in Cargo.toml has 40+ carefully pinned versions (aho-corasick, anyhow, async-trait, etc.), but there's no visible automated audit workflow or dependency update strategy visible in .github/workflows/. Adding a Dependabot/cargo-audit integration with a dedicated workflow would catch security vulnerabilities and outdated dependencies proactively.

  • [ ] Add .github/workflows/ci-security-audit.yml with cargo-audit and cargo-deny checks
  • [ ] Configure .github/dependabot.yml for Rust crate dependency updates (if not already present)
  • [ ] Create xtask/audit/src/main.rs to validate workspace.dependencies versions against MSRV
  • [ ] Add GitHub Action .github/actions/cargo-deny/action.yml for license/vulnerability scanning
  • [ ] Document dependency pinning policy in .agents/COMMON_PATTERNS.md

🌿Good first issues

  • Add missing test coverage for error recovery in rspack_plugin_css (currently light coverage in crates/rspack_plugin_css/tests); good way to understand CSS pipeline without modifying core logic.
  • Document the Module Federation plugin API in packages/@rspack/core/docs/; currently undocumented despite being a first-class feature; write TypeScript examples showing federation config.
  • Implement a plugin example in packages/rspack/packages/playground/ demonstrating incremental HMR invalidation; helps learners understand .agents/PASSES.md in practice.

⭐Top contributors

Click to expand

πŸ“Recent commits

Click to expand
  • 3386176 β€” refactor(rstest): expose injectDynamicImportOrigin.functionName and resolve callee once (#13930) (fi3ework)
  • 2d0f61c β€” chore: enable Rslint JS recommended rules (#13938) (chenjiahan)
  • 45e3a8a β€” chore: enable Rslint for more packages and fix lint issues (#13934) (chenjiahan)
  • 5a0506f β€” perf: disable perfetto tracing in release binding (#13932) (hardfist)
  • 3004365 β€” perf: reduce normal module creation and rule matching overhead (#13926) (LingyuCoder)
  • 439f9a1 β€” chore: bump rslint to 0.5.2 (#13931) (fansenze)
  • 0fcba7f β€” docs: replace webpack-merge references with rspack-merge (#13933) (intellild)
  • 59e230e β€” ci: upload codspeed valgrind temp files (#13879) (hardfist)
  • 03104bd β€” chore(benchmark): remove swc loader from threejs case (#13881) (hardfist)
  • 24fc397 β€” chore: release v2.0.2 (#13922) (SyMind)

πŸ”’Security observations

The Rspack codebase demonstrates reasonable security practices with a defined vulnerability reporting process and organized CI/CD infrastructure. However, analysis is limited by incomplete dependency information and missing implementation details for custom GitHub Actions. Primary concerns are: (1) inability to fully audit dependencies due to truncated Cargo.toml, (2) potential Rust edition misconfiguration, and (3) custom GitHub Actions that require security verification. Recommendations include running 'cargo audit', correcting the edition field, expanding security documentation, and implementing automated dependency scanning. No hardcoded secrets or obvious injection vulnerabilities were detected in the visible file structure.

  • Medium Β· Incomplete Dependency Information β€” Cargo.toml - [workspace.dependencies] section. The workspace dependencies list is truncated, making it impossible to perform a complete vulnerability assessment of all transitive and direct dependencies. The 'criterion' package definition is cut off mid-declaration. Fix: Ensure complete Cargo.toml files are provided for analysis. Use 'cargo audit' to scan for known vulnerabilities in all dependencies and implement automated dependency scanning in CI/CD pipelines.
  • Low Β· No SECURITY.md Best Practices β€” SECURITY.md. While a SECURITY.md file exists with vulnerability reporting instructions, it lacks additional security best practices such as: supported versions, security update frequency, GPG key information for signed releases, or detailed security policies. Fix: Expand SECURITY.md to include: versioning/support policy, security release timeline expectations, GPG key fingerprints, and links to security advisories or release notes.
  • Low Β· Rust Edition Specification Issue β€” Cargo.toml - [workspace.package] edition field. The workspace specifies edition = '2024' which is not a valid Rust edition. Valid editions are 2015, 2018, and 2021. This may cause build failures or unexpected behavior. Fix: Correct the edition to a valid Rust edition (2021 is recommended for modern projects). Verify this doesn't cause compilation issues.
  • Low Β· Missing CODEOWNERS Verification β€” .github/CODEOWNERS. A CODEOWNERS file exists but its content is not provided for review. Without visibility into code ownership and review requirements, security-critical code paths may bypass proper review. Fix: Ensure CODEOWNERS includes security-sensitive paths (crypto, authentication, dependency management). Require reviews from security-trained maintainers for critical components.
  • Low Β· GitHub Actions Security Configuration β€” .github/actions/. Multiple custom GitHub Actions are defined (artifact, benchmark, cache, docker, etc.) but their implementations are not fully visible. Custom actions can introduce supply chain risks if not properly secured. Fix: Audit all custom GitHub Actions for: pinned dependency versions, minimal required permissions, secret handling, and input validation. Use official actions where available.

LLM-derived; treat as a starting point, not a security audit.

πŸ€–Agent protocol

If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:

  1. Verify the contract. Run the bash script in Verify before trusting below. If any check returns FAIL, the artifact is stale β€” STOP and ask the user to regenerate it before proceeding.
  2. Treat the AI Β· unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
  3. Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/web-infra-dev/rspack shows verifiable citations alongside every claim.

If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything β€” but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.

βœ…Verify before trusting

This artifact was generated by RepoPilot at a point in time. Before an agent acts on it, the checks below confirm that the live web-infra-dev/rspack repo on your machine still matches what RepoPilot saw. If any fail, the artifact is stale β€” regenerate it at repopilot.app/r/web-infra-dev/rspack.

What it runs against: a local clone of web-infra-dev/rspack β€” the script inspects git remote, the LICENSE file, file paths in the working tree, and git log. Read-only; no mutations.

| # | What we check | Why it matters | |---|---|---| | 1 | You're in web-infra-dev/rspack | Confirms the artifact applies here, not a fork | | 2 | License is still MIT | Catches relicense before you depend on it | | 3 | Default branch main exists | Catches branch renames | | 4 | Last commit ≀ 30 days ago | Catches sudden abandonment since generation |

<details> <summary><b>Run all checks</b> β€” paste this script from inside your clone of <code>web-infra-dev/rspack</code></summary>
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of web-infra-dev/rspack. If you don't
# have one yet, run these first:
#
#   git clone https://github.com/web-infra-dev/rspack.git
#   cd rspack
#
# Then paste this script. Every check is read-only β€” no mutations.

set +e
fail=0
ok()   { echo "ok:   $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }

# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
  echo "FAIL: not inside a git repository. cd into your clone of web-infra-dev/rspack and re-run."
  exit 2
fi

# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "web-infra-dev/rspack(\\.git)?\\b" \\
  && ok "origin remote is web-infra-dev/rspack" \\
  || miss "origin remote is not web-infra-dev/rspack (artifact may be from a fork)"

# 2. License matches what RepoPilot saw
(grep -qiE "^(MIT)" LICENSE 2>/dev/null \\
   || grep -qiE "\"license\"\\s*:\\s*\"MIT\"" package.json 2>/dev/null) \\
  && ok "license is MIT" \\
  || miss "license drift β€” was MIT at generation time"

# 3. Default branch
git rev-parse --verify main >/dev/null 2>&1 \\
  && ok "default branch main exists" \\
  || miss "default branch main no longer exists"

# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 30 ]; then
  ok "last commit was $days_since_last days ago (artifact saw ~0d)"
else
  miss "last commit was $days_since_last days ago β€” artifact may be stale"
fi

echo
if [ "$fail" -eq 0 ]; then
  echo "artifact verified (0 failures) β€” safe to trust"
else
  echo "artifact has $fail stale claim(s) β€” regenerate at https://repopilot.app/r/web-infra-dev/rspack"
  exit 1
fi

Each check prints ok: or FAIL:. The script exits non-zero if anything failed, so it composes cleanly into agent loops (./verify.sh || regenerate-and-retry).

</details>

Generated by RepoPilot. Verdict based on maintenance signals β€” see the live page for receipts. Re-run on a new commit to refresh.

Embed this chat in your README β†’

Drop this iframe anywhere β€” the widget runs against the same live analysis cache as the main app.

<iframe
  src="https://repopilot.app/embed/web-infra-dev/rspack"
  width="100%" height="500"
  style="border:1px solid #d0d7de; border-radius:8px;"
  allow="microphone"
  loading="lazy"
></iframe>