{"id":48428961,"url":"https://github.com/ramon-villain/compression-rspack-plugin","last_synced_at":"2026-05-23T23:38:08.058Z","repository":{"id":346811181,"uuid":"1191649270","full_name":"ramon-villain/compression-rspack-plugin","owner":"ramon-villain","description":"Rust-native parallel gzip \u0026 brotli compression plugin for Rspack. Uses flate2 + brotli crates with rayon to compress assets across all CPU cores via a single napi-rs FFI call.","archived":false,"fork":false,"pushed_at":"2026-03-30T17:01:36.000Z","size":135,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-23T23:38:02.394Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ramon-villain.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-25T13:03:02.000Z","updated_at":"2026-04-01T10:33:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ramon-villain/compression-rspack-plugin","commit_stats":null,"previous_names":["ramon-villain/compression-rspack-plugin"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ramon-villain/compression-rspack-plugin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramon-villain%2Fcompression-rspack-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramon-villain%2Fcompression-rspack-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramon-villain%2Fcompression-rspack-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramon-villain%2Fcompression-rspack-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ramon-villain","download_url":"https://codeload.github.com/ramon-villain/compression-rspack-plugin/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramon-villain%2Fcompression-rspack-plugin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33416314,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T22:14:44.296Z","status":"ssl_error","status_checked_at":"2026-05-23T22:14:43.778Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-06T10:00:22.848Z","updated_at":"2026-05-23T23:38:08.053Z","avatar_url":"https://github.com/ramon-villain.png","language":"TypeScript","funding_links":[],"categories":["Plugins"],"sub_categories":["Rspack Plugins"],"readme":"# compression-rspack-plugin\n\n[![npm version](https://img.shields.io/npm/v/compression-rspack-plugin)](https://www.npmjs.com/package/compression-rspack-plugin) [![CI](https://github.com/ramon-villain/compression-rspack-plugin/actions/workflows/ci.yml/badge.svg)](https://github.com/ramon-villain/compression-rspack-plugin/actions/workflows/ci.yml) [![license](https://img.shields.io/npm/l/compression-rspack-plugin)](LICENSE) [![npm downloads](https://img.shields.io/npm/dm/compression-rspack-plugin)](https://www.npmjs.com/package/compression-rspack-plugin) [![coverage](https://img.shields.io/badge/coverage-100%25-brightgreen)]() [![awesome-rstack](https://img.shields.io/badge/awesome-rstack-blue)](https://github.com/rstackjs/awesome-rstack)\n\nRust-native parallel compression plugin for [Rspack](https://rspack.dev). Drop-in replacement for [compression-webpack-plugin](https://github.com/webpack/compression-webpack-plugin).\n\nCompresses assets **in parallel** across all CPU cores via Rust + [rayon](https://github.com/rayon-rs/rayon), instead of serially on the Node.js main thread.\n\n## Install\n\n```bash\nnpm install compression-rspack-plugin\n# or\npnpm add compression-rspack-plugin\n# or\nyarn add compression-rspack-plugin\n```\n\nPrebuilt binaries are available for macOS (arm64, x64), Linux (x64 glibc, arm64 glibc, x64 musl). The correct binary is installed automatically via platform-specific optional dependencies.\n\n## Usage\n\n```js\nimport { CompressionRspackPlugin } from 'compression-rspack-plugin'\n\nexport default {\n  plugins: [\n    new CompressionRspackPlugin({ test: /\\.(js|css|html|json|svg)$/ }),\n    new CompressionRspackPlugin({ algorithm: 'brotliCompress', test: /\\.(js|css|html|json|svg)$/ }),\n  ],\n}\n```\n\n## Options\n\nSame interface as [compression-webpack-plugin](https://github.com/webpack/compression-webpack-plugin#options). Validated via `schema-utils`.\n\n| Option | Type | Default | Description |\n|---|---|---|---|\n| `algorithm` | `string \\| Function` | `\"gzip\"` | `\"gzip\"`, `\"brotliCompress\"`, `\"deflate\"`, `\"deflateRaw\"`, or custom callback |\n| `compressionOptions` | `object` | `{}` | Passed to the algorithm. Defaults to max quality per algorithm. |\n| `filename` | `string \\| Function` | `\"[path][base].gz\"` | Output template. `\"[path][base].br\"` for brotli. |\n| `test` | `RegExp \\| string \\| Array` | — | Include matching assets |\n| `include` | `RegExp \\| string \\| Array` | — | Include matching assets |\n| `exclude` | `RegExp \\| string \\| Array` | — | Exclude matching assets |\n| `threshold` | `number` | `0` | Min size in bytes |\n| `minRatio` | `number` | `0.8` | Only emit if compressed/original \u003c this |\n| `deleteOriginalAssets` | `boolean \\| \"keep-source-map\" \\| Function` | `false` | Remove originals after compression |\n\n## Benchmarks\n\nTested on a production Rspack build (~1,400 assets, Apple M3 Pro 14-core).\n\n| | compression-webpack-plugin | compression-rspack-plugin |\n|---|---|---|\n| **Build time** (avg of 3) | 82.7s | **37.3s** (2.2x faster) |\n| **Compression phase** (RsDoctor) | 61.1s | **20.3s** (3.0x faster) |\n| .gz files | 1,410 | 1,411 |\n| .br files | 1,444 | 1,444 |\n| gzip-6 / 1 KB | 106 MiB/s | 143 MiB/s (1.4x) |\n| gzip-6 / 100 KB | 0.66 GiB/s | 2.77 GiB/s (4.2x) |\n| gzip-6 / 1 MB | 0.66 GiB/s | 3.30 GiB/s (5.0x) |\n| deflate-6 / 1 MB | 0.69 GiB/s | 2.03 GiB/s (2.9x) |\n\n## How it works\n\nBuilt-in algorithms (`gzip`, `brotliCompress`, `deflate`, `deflateRaw`) are handled by [flate2](https://github.com/rust-lang/flate2-rs) and [brotli](https://github.com/dropbox/rust-brotli) in Rust via a single napi-rs FFI call. Custom algorithms fall back to Node.js `zlib`.\n\n## Differences from compression-webpack-plugin\n\n| | compression-webpack-plugin | compression-rspack-plugin |\n|---|---|---|\n| Compression | Node.js zlib (serial) | Rust rayon (parallel) + zlib fallback |\n| Compilation cache | Yes | Not yet |\n| Child compilations | Yes (scoped via `thisCompilation`) | Yes |\n| `[compressed]` stats flag | Yes | Registered, not rendered by rspack 2.0 beta |\n\n## Development\n\n```bash\npnpm install        # install deps\npnpm build          # native addon + TypeScript\npnpm test           # JS tests (120 tests)\npnpm test:rust      # Rust unit tests\npnpm lint           # biome\npnpm lint:rs        # cargo fmt + clippy\npnpm typecheck      # tsc --noEmit\n```\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Framon-villain%2Fcompression-rspack-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Framon-villain%2Fcompression-rspack-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Framon-villain%2Fcompression-rspack-plugin/lists"}