v1.5.0
Welcome to version 1.5 of Remix. Can you believe that we are already 1.5 years versions old? Time flies when you're building fun web frameworks!
We've got a few things that we're excited to share with this one, so let's get started 💿 💿 💿
Official support for Deno
Your scientists were so preoccupied with whether they could that they didn't stop to think if they should.
Dr. Ian Malcolm, Jurassic Park
A short while ago we rolled out a new adapter with experimental support for building on top of Deno. At long last, the mad scientists at Remix are now ready to announce a major breakthrough:
Remix now officially supports Deno. 🦕
Apart from compiler-related changes, Deno support comes in the form of:
- a brand new
@remix-run/deno
package - an updated Deno template (
npx create-remix@latest --template deno
)
We couldn't be more excited to see what Deno enables for your future Remix projects. Deno takes a very different approach than most other JS runtimes, and we learned some big lessons while implementing our adapter. For those curious, check out a some tricky Deno-related decisions we made along the way.
It was tough going at times, but as Dr. Malcolm would say:
🦖life the compiler finds a way
Moving closer to The Platform™
One of our driving forces with Remix is to use web standards and get to connect developers more closely to them with our APIs.
In the olden days, the only JavaScript runtime was the one implemented by browsers, but Node changed the game for everyone. In those days, many standards and APIs necessary to build a proper JS server runtime didn't exist, so the good folks working on Node had to invent them for us. Or in many cases we'd get "polyfills" for new standards from third-party libraries like node-fetch
.
These were innovative times, and moving quickly allowed devs to ship more quickly. But inconsistency between runtimes also created a lot of problems. Thankfully we are getting closer than ever to consensus-driven solutions, and Remix is moving towards this new, more standardized approach.
We have removed our dependency on node-fetch
and moved forward with our own implementation that gets closer to the living Fetch Standard. This opens the door to new features in your loaders and actions—you can now return ReadableStream
in the body of your response, which allows you to stream data from your server and paves the way for the new streaming APIs in React 18.
This comes at an exciting time for the web, as just a few weeks ago we saw the formation of a new Web-interoperable Runtimes Community Group. We've never been more optimistic about the web, and we see this change as a necessary first step to embrace its future.
What's Changed
✨ Features
- Replaced
node-fetch
with@remix-run/web-fetch
for a more standards-based fetch implementation (#2736) - Launched official support for Deno (#3117)
💅 Enhancements
- Made a few improvements in our experimental Netlify Edge adapter (#3107)
🐛 Bug fixes
- Fixed support for JSX in
.js
route files (#3059) - Fixed issues with package manager detection (#3109)
- Fixed the
packageExports
map (#3189) - Avoid duplicate
loader
calls when usingprefetch-intent
(#2938)
⚠️ Unstable API changes
unstable_parseMultipartFormData
no longer operates on a Node.jsstream
, this has been changed to anAsyncIterable<Uint8Array>
calleddata
to bring this functionality to all platforms (#2736)unstable_parseMultipartFormData
no longer parses fields automatically for you; instead useunstable_composeUploadHandlers
to combine multiple upload handlers (#2736)
New Contributors
- @chiangs made their first contribution in #2960
- @kbariotis made their first contribution in #2275
- @arvindell made their first contribution in #3031
- @cloudy9101 made their first contribution in #3045
- @achinchen made their first contribution in #3042
- @vkrol made their first contribution in #3068
- @JulesBlm made their first contribution in #3077
- @chenxsan made their first contribution in #3033
- @dogukanakkaya made their first contribution in #2441
- @michaeldebetaz made their first contribution in #3043
- @frontsideair made their first contribution in #3019
- @youbicode made their first contribution in #3111
- @penspinner made their first contribution in #2309
- @konradkalemba made their first contribution in #3144
- @nexxeln made their first contribution in #3119
- @alireza-bonab made their first contribution in #2865
- @DNLHC made their first contribution in #3154
- @Jannis-Morgenstern made their first contribution in #3167
- @janhoogeveen made their first contribution in #3141
- @bmarvinb made their first contribution in #3198
Full Changelog: v1.4.3...v1.5.0