We've got a few nice bug fixes and improvements in this release. You can catch those in the individual package changelogs below, but what we really want to talk about today is a huge step forward in a much nicer developer experience for you. Let's get to it!
An early peek at a new dev server 👀
Since the early days of Remix, the remix dev command has been limited by its association with the built-in Remix app server. But one of the major benefits of Remix is that you own your server. While this is a very powerful core feature of our architecture, it presented a few challenges for local development. If you own your server, how can we build a dev server that is flexible enough to work for your specific setup?
Our first answer was … we don't. Don't try to be clever, don't over-abstract anything. Simply run the server directly and let our <LiveReload> watch for changes and reboot as needed.
While this may sound nice and simple, it has a few downsides for local development:
Reloading wipes in-memory references, such as database connections or in-memory caches. This means you have to use workaround like sticking flags on global to persist anything stored in memory across rebuilds.
You have to manually configure the LiveReload port, which is a bit of unnecessary friction.
It makes implementing popular new dev features like hot-module replacement (HMR) much more difficult to implement in a way that works consistently across all app servers.
Each rebuild writes new files to build/ and public/build/. As these files are not removed (unless the dev server crashes or is gracefully terminated), thousands of files could accumulate as the dev server ran. This causes performance issues and could be confusing when debugging.
To start addressing these issues, we decided to take a new approach. This release gives you early access to our new dev server and start making incremental improvements to your local development flow.
Please note that this is an unstable feature and a work-in-progress. But we think there are good reasons to opt in right away!
At this stage, the idea is to spin up the dev server alongside your normal Remix app server:
# spin up the new dev server
remix dev
Spin up your app server in parallel.
This can be done in a separate terminal or with a tool like concurrently.
nodemon ./server.js
Our dev server will build your app in development mode and then rebuild whenever any app files changes. It will also wait for your app server to signal that it's "ready" before triggering a reload in your browser.
No more wiping in-memory caches. No more weird hacks to keep your database alive. A fresh, clean slate for each rebuild.
While this may seem like a relatively small change, but it's removes a huge barrier for future DX improvements for local development. We think you're going to love what we're working on next 🔥🔁
Configuring the unstable_dev server
To enable the new dev server with all defaults, set the unstable_dev future flag to true:
Added a new development server available in the Remix config under the unstable_dev flag. See the release notes for a full description. (#5133)
Patch Changes
Fixed issues with v2_routeConvention on Windows so that new and renamed files are properly included (#5266)
Server build should not be removed in remix watch and remix dev (#5228)
The dev server will now clean up build directories whenever a rebuild starts (#5223)
Updated dependencies:
@remix-run/server-runtime@1.12.0
1.11.1
Patch Changes
Fixed a bug with v2_routeConvention that prevented index modules from being recognized for route paths (195291a3d)
Updated dependencies:
@remix-run/server-runtime@1.11.1
1.11.0
Minor Changes
Specify file loader for .fbx, .glb, .gltf, .hdr, and .mov files (#5030)
Added support for Vanilla Extract via the unstable_vanillaExtract future flag. IMPORTANT: Features marked with unstable are … unstable. While we're confident in the use cases they solve, the API and implementation may change without a major version bump. (#5040)
Add support for CSS side-effect imports via the unstable_cssSideEffectImports future flag. IMPORTANT: Features marked with unstable are … unstable. While we're confident in the use cases they solve, the API and implementation may change without a major version bump. (#4919)
Add support for CSS Modules via the unstable_cssModules future flag. IMPORTANT: Features marked with unstable are … unstable. While we're confident in the use cases they solve, the API and implementation may change without a major version bump. (#4852)
Patch Changes
Add new "flat" routing conventions. This convention will be the default in v2 but is available now under the v2_routeConvention future flag. (#4880)
Added support for handle in MDX frontmatter (#4865)
Updated dependencies:
@remix-run/server-runtime@1.11.0
1.10.1
Patch Changes
Update babel config to transpile down to node 14 (#5047)
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps @remix-run/dev from 1.7.6 to 1.12.0.
Release notes
Sourced from
@remix-run/dev
's releases.... (truncated)
Changelog
Sourced from
@remix-run/dev
's changelog.... (truncated)
Commits
f215e47
chore: Update version for release (#5318)74df911
chore: Update version for release (pre) (#5317)0547eb0
fix(dev): keep dev server process alive (#5283)4351ffe
fix(remix-dev): fast glob will return posix style paths even on windows (#5266)4edd740
chore: Update version for release (pre) (#5260)2f379ee
fix(remix-dev): Server build should not be removed inremix watch
and `remi...0189c54
chore: Update version for release (pre) (#5256)686e20d
chore: Update version for release (pre) (#5243)db89bdb
Merge branch 'main' into release-next8346ace
feat(remix-dev): Improve types for imported MD & MDX files (#2602)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)