React Router v7
React Router v7 brings all the great things you love from Remix back to React Router
React Router v7 brings all the great things you love from Remix back to React Router
Join Ryan and Michael as they walk through the Remix/React Router Roadmap - Public roadmap 👉 https://github.com/orgs/remix-run/projects/5 - RFCs 👉 https://github.com/remix-run/remix/discussions/categories/official-rfcs - "Open Development" blog post 👉 https://remix.run/blog/open-development Learn more at https://remix.run
Join Ryan and Michael as they walk through the Remix/React Router Roadmap - Public roadmap 👉 https://github.com/orgs/remix-run/projects/5 - RFCs 👉 https://github.com/remix-run/remix/discussions/categories/official-rfcs - "Open Development" blog post 👉 https://remix.run/blog/open-development - React Router Prerelease docs 👉 https://reactrouter.com/dev/ 0:00 Bumper 0:42 React Router v7 Overview 9:10 React Router v7 demo 11:12 Improved routing config with routes.ts 15:22 Automatic type-safe routing 25:31 How the type-safe routing works 32:33 "Are we forced into every new feature"? 41:06 Pre-rendering 49:59 Single fetch/turbo-stream 56:48 Final notes Learn more at https://remix.run
Introducing Fog of War: infinitely scalable Remix and React Router applications
React Router v7 will provide an incremental path to the entire, full stack feature set of React. Upgrading from to React Router v7 is non-breaking for both React Router v6 and Remix v2.
We've been building a bridge from React Router to Remix, and we made it so good that we're going to merge the two projects.
Kiliman shows Brooks how to use two new packages he's created for homegrown session context and middleware, and walks him through authentication and session management examples in a Remix application. remix-express-vite-plugin 👉 https://github.com/kiliman/remix-express-vite-plugin Learn more about Kiliman 👉 https://twitter.com/codingthirty 00:00 - Introduction 00:44 - Kiliman's background with Remix 02:44 - Thoughts on Remix's routing convention 06:47 - Motivation for homegrown middleware 09:24 - Setting up the project 11:03 - Setting up express-dev-server and remix-create-express-app 18:36 - Setting up middleware 19:38 - Implementing session middleware 31:23 - Implementing auth middleware 40:55 - Comparing with the RFC 47:33 - Final thoughts Learn more at https://remix.run
- Public roadmap 👉 https://github.com/orgs/remix-run/projects/5 - RFCs 👉 https://github.com/remix-run/remix/discussions/categories/official-rfcs - "Open Development" blog post 👉 https://remix.run/blog/open-development 00:00 - Introduction and current work 10:18 - Overview of "In Progress" 13:44 - Fog of War 18:50 - Split out client loaders/actions 24:19 - Middleware and Server Context 40:48 - SSG Learn more at https://remix.run
A case study on how Shopify rapidly built a web version of their popular iOS/Android app Shop with Remix
Brooks walks through how to get started with Remix SPA mode (ssr: false) and how to setup a simple GitHub Action to deploy to GitHub Pages. Repo: https://github.com/brookslybrand/remix-gh-pages 00:00 - Intro 00:19 - Setting up a Remix SPA mode project 02:26 - Setting up GitHub Pages 03:47 - Setting up a GitHub Action 06:12 - Fixing asset 404s with basename 08:44 - Outro Learn more at https://remix.run
Learn how to implement internationalization (i18n) in your Remix project. Discover the significance of i18n, gain an understanding of the core principles, and learn various strategies for effective i18n management with Remix.
Tying all of the previous Trellix Singles together, this videos shows how you can build something as complex as optimistic Drag and Drop with the simple primitives of Remix. Explore the full code here 👉 COMING SOON 00:00 - Overview 00:46 - Drag and Drop implementation 05:45 - UX before optimistic UI 06:52 - Board state implementation 07:45 - Adding optimistic drag and drop 11:42 - UX with optimistic UI 12:28 - Canceling fetches with fetcher keys Learn more at https://remix.run
Learn how to leverage useSubmit and useFetchers to handle the complex use case of optimistically updating multiple forms without a single useState or useEffect. Explore the full code here 👉 COMING SOON 00:00 - Overview 02:14 - Before optimistic UI 04:16 - Using useSubmit 06:47 - Update data with pending items 09:45 - Get pending items with useFetchers 15:54 - Add pending items to data 17:50 - Demoing optimistic UI 18:26 - Auto scroll with flushSync 21:15 - Review Learn more at https://remix.run
Learn how to create in-place optimistic UI to avoid flickering of state after submitting an action and waiting for the loader to revalidate. Explore the full code here 👉 COMING SOON 00:00 - Overview 00:57 - EditableText component 01:50 - Form submissions without optimistic UI 03:14 - Adding optimistic UI 06:58 - Handling focus management 10:19 - Demoing the optimistic UI Learn more at https://remix.run
With useNavigation we can render contextual pending UI to give our user feedback that our application is "thinking" while they way for an action to resolve. Explore the full code here 👉 COMING SOON 00:00 - Overview 00:45 - Adding pending UI via useNavigation 02:57 - Improving pending UI via formAction 04:10 - Pending UI for multiple actions Learn more at https://remix.run
By returning redirects we can improve the user's experience after they create a new board by changing a single line of code. Explore the full code here 👉 COMING SOON 00:00 - Overview 00:33 - Redirect after creating a record Learn more at https://remix.run
This video brings everything together from the first 9 videos to allow authenticated users to create a new board and automatically see their new board once it's created. This is the loader, component, action trifecta that makes Remix so powerful. Explore the full code here 👉 COMING SOON 00:00 - Overview 01:31 - Setting up a Remix Action 02:24 - Validating the form data 05:08 - Creating a new board 05:27 - Essential vs. incidental complexity Learn more at https://remix.run
Like protecting routes from unauthenticated users, sometimes you also want to redirect authenticated users away from other routes. This video shows you the best way to handle redirecting a users from the root of Trellix to the "home" route. Explore the full code here 👉 COMING SOON 00:00 - Overview 00:19 - Redirecting from the root route (❌) 02:11 - Redirecting from the index route (✔️) 03:44 - Demoing redirecting logged in users 04:44 - Remix in the future: middleware Learn more at https://remix.run
Remix makes it easy to protect routes that require the user to be authenticated. With a single function you can get the user's data if they're authenticated and otherwise redirect them to the login page. Explore the full code here 👉 COMING SOON 00:00 - Overview 00:36 - Requiring a user on routes 02:32 - Throwing a redirect 04:40 - Demoing the protected route Learn more at https://remix.run
Learn how to log users out by invalidating the auth Cookie and redirecting after submitting the logout form. Explore the full code here 👉 COMING SOON 00:00 - Creating a logout route 00:38 - Deleting the auth cookie 01:39 - Demoing the logout form Learn more at https://remix.run
Learn how to create new users on signup, and enhances the user validation by checking whether or not the user exists. Explore the full code here 👉 COMING SOON 00:00 - Overview 00:20 - Exploring the signup/queries module 00:58 - Validating account existence Learn more at https://remix.run
A cookie is a small piece of information that your server sends someone in a HTTP response that their browser will send back on subsequent requests. In this Single we explore how to create, write, and read cookies to manage user authentication. Explore the full code here 👉 COMING SOON 00:00 - Overview 00:39 - Scaffolding a createAccount function 03:20 - Creating a cookie 04:14 - Writing the cookie 05:30 - Cookie attributes explained 09:03 - Reading the cookie 11:22 - Review Learn more at https://remix.run
Remix's routing convention allows you to convert a route to a folder so you can co-locate modules and keep your route logic clean. Explore the full code here 👉 COMING SOON 00:00 - Overview 00:27 - Converting route files into folders 01:12 - Moving validation code outside the route 02:05 - Cleaning up the code Learn more at https://remix.run
Learn how to validate form data inside a Remix Action and display useful error messages to your user. Explore the full code here 👉 COMING SOON 00:00 - Overview 00:29 - Setting up placeholder error messages 02:17 - Validating form data in Remix Actions 06:03 - Rendering validation errors Learn more at https://remix.run
Learn the difference between submitting a form with a GET vs. a POST method, and how to access that information using an Action in Remix. Explore the full code here 👉 COMING SOON 00:00 - Overview 00:26 - Submitting a GET request 01:16 - Submitting a POST request 2:00 - Accessing form data on the server 4:24 - Review Learn more at https://remix.run
Today we’re announcing that unstable support for Vite is available in Remix v2.2.0!
An objective comparison between Remix and Next.js
Remix takes the idea of “one-way data flow” and extends it across the network, so your UI truly is a function of state: from the client to the server and back again.
“The edge” isn’t just about static assets anymore. It’s increasingly becoming a place for dynamic assets resulting from compute. Remix is taking full advantage of this next generation of edge computing.
The web ecosystem can feel like it moves too fast sometimes. We're sensitive to that at Remix so we've designed it with your future in mind. Get good at Remix, get better at the web.
Decoupling data-fetching from rendering introduces some complexities if you want to lazily load your route components. Check out how the newly introduced `route.lazy()` method helps solve this to keep your app bundles small and your UX snappy!
We've introduced the concept of future flags to give you a smooth upgrade path for your Remix app.