Releases: remix-run/remix
v1.0.0-rc.4
Nothing to see here. Stay tuned!
Full Changelog: v1.0.0-rc.3...v1.0.0-rc.4
v1.0.0-rc.3
Bug fixes 🐛
- Fixed a bug in
<Form>
where requests were sent to the wrong action (#411). - Fixed a bug with await handlers in server runtime (#413).
- Fixed a few bugs with local development (#417, #431)
Breaking changes 💔
react-router-dom
is no longer a peer dependency, so you can remove it from yourpackage.json
(#424). This isn't technically a breaking change today, but it could break your app in the future without making this switch! All React Router modules should be imported directly fromremix
:
// before
import { Outlet } from "react-router-dom";
// after
import { Outlet } from "remix";
Full Changelog: v1.0.0-rc.2...v1.0.0-rc.3
v1.0.0-rc.2
The best way to find a bug in software is to ship it. On a related note, we shipped rc.1
and found a bug 😅
This is a quick patch release, so if you're upgrading from a v0 release, check out the relevant notes here: https://github.com/remix-run/remix/releases/tag/v1.0.0-rc.1
Full Changelog: v1.0.0-rc.1...v1.0.0-rc.2
v1.0.0-rc.1
Alright friends, we're almost there! Welcome to the first release candidate for Remix v1.0. Buckle up and get ready, let's dive in to what's new!
Features ✨
- Added
<ScrollRestoration />
component that emulates the browser's scroll restoration behavior on client-side navigations (#399). This component is included in the starter template by default, but existing apps can render it in yourroot.(js|tsx)
directly before<Scripts />
.
Bug fixes 🐛
<Form>
will now include values held by named submit buttons (or<input type="submit" />
) (#398)
Breaking changes 💔
Other odds and ends 🤷♂️
- Created fancy new starter templates for
create-remix
💅 - Updated
esbuild
to the latest and greatest (#402) - Made the CLI shutdown process a bit more graceful (#400)
Full Changelog: v0.21.0...v1.0.0-rc.1
v0.21.0
💅 Features
- We're on React Router v6! Go change your
package.json
dependency to"react-router-dom": "^v6.0.0"
. If you've got "history" in there, you can delete it (it's now just a direct dependency of React Router, your app doesn't need to know about it). - You can now get form data directly from the request object! (note that this doesn't yet support
multipart/form-data
requests, but that is in development right now).export function action({ request }) { // old let body = new URLSearchParams(await request.text()); // new let body = await request.formData(); }
- Add support for Resource Routes! You can now omit the default export from any route file and the response will be any resource returned from its loader. You can use this to build:
- RSS feeds
- dynamically generated images
- mobile app API routes (so you can reuse the backend logic for both UIs)
- and lots more!
✨ Improvements
- You can now add attributes to the
<script>
tags rendered by<Scripts />
by passing them as props. This allows you to add a Content Security Policy and drop anonce
on the inline scripts that Remix renders so the browser doesn't block them (we'll have a guide soon, but you can read more about CSP on MDN.) - Added sourcemaps for server builds.
🐛 Bugfixes
- Fixed a bug where
?index
was included in action requests for index routes.
🗒️ Docs
- Lots of docs updates! Be sure to check out https://docs.remix.run for the latest and greatest.
Full Changelog: v0.20.1...v0.21.0
v0.20.1
v0.20.0
Gather 'round folks, this release brings along lots of tasty features and stomps out a few gnarly bugs. Here's a high-level overview of important changes:
- CLI changes
remix dev
is nowremix watch
remix run
is nowremix dev
- Added
remix routes
- Added
remix build --sourcemap
<Form forceRefresh />
is now<Form reloadDocument />
- Added a new
handleDataRequest
API for manipulating request data - Now using
[email protected]
Now, let's get into to the weeds a bit 🤓
🕞 tl;dr Upgrading
- Update your package.json or pm2 configs
remix dev
->remix watch
remix run
->remix dev
<Form forceRefresh />
-><Form reloadDocument />
- Ensure you've got
[email protected]
in your package.json dependencies.
💔 Breaking Changes
- Several users felt that the
remix dev
command did not behave as expected. The CLI commandremix dev
has been changed toremix watch
, andremix run
has been changed toremix dev
to hopefully make the CLI a bit more intuitive. Please note thatremix dev
requires that@remix-run/serve
is installed as a dependency, just asremix run
did before (#315). - The
forceRefresh
prop on<Form>
has been renamed toreloadDocument
. We feel like this more clearly communicates the behavior of the form's submission.
✨ Improvements
-
Now shipping with the latest beta of
react-router-dom
! 🚀 -
We updated all docs and templates to suggest
npx create-remix
instead ofnpm init remix
, which is generally more consistent and less error prone for creating new sites with reasonable defaults. -
TypeScript should now correctly infer types from imported
.json
modules (#314) -
Added support for multiple meta tags that use the same key to a route's
meta
function (#322). We now allow you to pass an array of values to a key in the object returned bymeta
:export let meta: MetaFunction = () => { return { "article:author": ["Chance the Dev", "Ryan Florence"], }; };
-
We added a new CLI command
remix routes
that allows you to visualize your app's route structure from the command line in either JSX or JSON format (#326). -
We introduced
handleDataRequest
for modifying the response of data requests in routes (#329):// example route file import type { HandleDataRequestFunction } from "remix"; // this is an optional export! export let handleDataRequest: HandleDataRequestFunction = ( response, { request, params, context } ) => { // do whatever you'd like before returning the response! response.headers.set("x-custom", "yay!"); return response; };
-
remix build
no longer puts source maps in your browser build by default. This was a security issue because people could see your server side code from the browser! If you want to have source maps in your production builds, you can use the--sourcemap
flag 🗺️ (#350). -
We made a handful of improvements to the new Remix application templates.
🐛 Bugfixes
- The
~/
path alias for theapp
directory now works when importing markdown files (#317). - We squashed a bug in which form submissions were trimming values with duplicate keys (checkboxes, radio inputs, etc.) (#344).
- We annihalated a bug in which redirects are not followed when thrown from an action for client-side form submissions (#349).
- We exterminated a particularly nasty bug in the
@remix/architect
server that was sending requests to invalid URLs (#333). - We wiped out several bugs for sites shipping to Cloudflare Workers (#318).
- We crushed a bug causing back/forward navigation mayhem (#351)
- We demolished a bug where
<Link prefetch>
was prefetching way too much stuff. - We fumigated a bug where imports from React Router weren't working in Remix (like
<Outlet>
). - I'm running out of creative synonyms for "fix", so thankfully I'm also out of bug fixes to describe 😅
🗒️ Docs
- Lots of docs updates and improvements, perhaps too many to capture succinctly in release notes! Be sure to check out https://docs.remix.run for the latest and greatest.
v0.19.3
Couple bug fixes:
- Build no longer fails on layout routes with actions
- Can use npm 7+
v0.19.2
Changed layout route convention from _layout
to two underscores: __layout
. This is a breaking change but it's only been around for 24 hours.
v0.19.1
- Type fixes
EntryContext
Route
LinksFunction
- Bugfixes
- Routes without loaders were being called on client side transitions