This collection of packages empowers you to build modern web applications with maximum interoperability and portability, leveraging the power of web standards. Whether you're using Remix or another framework, these tools are designed to seamlessly integrate into your workflow.
This repository is laying the groundwork for the next major evolution of Remix.
Our core philosophy is simple: build on web standards, embrace single responsibility.
Each package in this repository:
- Adheres to the single-responsibility principle.
- Prioritizes web standards to ensure maximum interoperability and portability across JavaScript runtimes.
- Augments standards unobtrusively where they are missing or incomplete, minimizing incompatibility risks.
This approach means the JavaScript you write is portable by default. These packages work seamlessly across Node.js, Bun, Deno, Cloudflare Workers, and other environments.
We leverage server-side web APIs like:
- The Web Streams API instead of Node.js streams
Uint8Array
instead of Node.jsBuffer
s- The Web Crypto API instead of the Node.js crypto library
Blob
andFile
instead of some bespoke runtime-specific API
The benefit? Code that's not just reusable, but future-proof.
The goal is that these packages should be useful for anyone who is building for the web. If you're using Remix, we've designed it from the start to work with web standards. If you're using some other framework, you should easily be able to integrate these tools into your workflow as well without going full-blown Remix. If you're building your own framework, we hope you'll be able to build on this foundation as well.
Discover our growing suite of tools:
- fetch-proxy: Seamlessly construct HTTP proxies with the familiar
fetch()
API – ideal for API gateways or abstracting microservices. - file-storage: Robust key/value storage tailored for JavaScript
File
objects, simplifying file management. - form-data-parser: An enhanced
request.formData()
wrapper enabling efficient, streaming file uploads. - headers: A comprehensive toolkit for effortlessly managing HTTP headers in your JavaScript applications.
- lazy-file: Optimize performance with lazy-loaded, streaming
Blob
s andFile
s for JavaScript. - multipart-parser: High-performance, streaming parser for multipart messages, perfect for handling complex form data.
- node-fetch-server: Build Node.js HTTP servers using the web-standard
fetch()
API, promoting code consistency. - tar-parser: A fast, streaming parser for tar archives, designed for efficient data extraction.
- Web Standard-Focused: Write code that's portable across Node.js, Deno, Bun, Cloudflare Workers, and more.
- Single Responsibility: Each package is focused and does one thing well, making them easy to understand and integrate.
- Interoperable: Designed to work together, and with your existing tools, thanks to their adherence to web standards.
- Future-Proof: By building on web standards, your codebase remains adaptable and resilient to ecosystem changes.
- Remix Ready (and Beyond!): While born from the needs of Remix, these packages are valuable for any web developer or framework author seeking robust, standard-compliant tools.
If you're trying to use these libraries with Remix v2, you'll need to enable "Single Fetch" first. This tells Remix to use Node's built-in fetch primitives (Request
, Response
, Headers
, etc.) instead of a broken polyfill we shipped in earlier versions of Remix.
Each package is available on npm and can be installed using:
npm install <package-name>
Then, import and use as needed in your project. Refer to individual package README
files for specific usage instructions.
All packages are published in both modern ESM and legacy CJS formats for maximum compatibility with both existing and new projects.
We welcome contributions! If you'd like to contribute, please feel free to open an issue or submit a pull request. See CONTRIBUTING for more information.
See LICENSE