Jonathan Reinink Profile picture
Feb 3 1 tweets 2 min read Read on X
Some big personal news: The Laravel team is officially taking over my Inertia.js project.

Almost exactly six years ago, I started a project inspired by Turbolinks that let developers using classic server-side frameworks like Laravel and Rails build rich client-side SPAs with libraries like React and Vue. That project became Inertia.js.

The goal was simple—I wanted to build apps using the classic monolith architecture while leveraging modern JavaScript frameworks as the templating layer.

At the time, there was no standard way to do this. Everyone told me the “right” approach was to turn my server-side app into a REST or GraphQL API and build a separate client-side app to consume it.

While that approach makes sense for some projects, it was total overkill for what I was building. I just wanted Laravel, but with React or Vue as my templating layer—yet, that meant adopting an entirely different architecture.

Back then, I used Turbolinks a lot to give my apps an SPA feel, but it didn't work well with React or Vue. That's when it hit me: what if I could create something like Turbolinks, but optimized for modern JavaScript frameworks?

I started hacking, and pretty quickly, I had a working prototype!

The two key ideas that made Inertia work so well:

1. Dynamic components – Modern JavaScript frameworks can dynamically swap one page component for another as you navigate.

2. Reactivity – These frameworks automatically re-render when props change. So, simply visiting the same page with different data (props) updates it automatically—no manual handling required.

With the proof of concept in place, I kept building. We ended up with:

- A core client-side routing library
- Client-side adapters for React, Vue, and Svelte
- Server-side adapters for Laravel, Rails, and many other frameworks (thanks to community contributions)

Exciting times! Well, mostly...

Along this journey I got deeply involved in another project—Tailwind CSS. And while it's incredible when your open-source projects succeed, it's also stressful when you don't have the capacity to give them the attention they need. And, for a while, Inertia suffered because of this.

Thankfully, my friend Taylor Otwell stepped in. He dedicated Laravel staff to help with GitHub issues and bug fixes, including having Joe Tannenbaum effectively rewrite the entire library for v2.0. This was a huge help for me.

Recently, Taylor and I talked and decided that it was in the best interest of the project for Laravel to take it over officially. I'm incredibly grateful for this—Inertia.js will now get the dedicated long-term care it requires.

As for me, while the Laravel team will handle the day-to-day upkeep of the project, I plan to stay involved in an advisory role.

Huge thanks to Taylor Otwell and everyone else who has supported me and the project over the last six years—it's been an incredible journey ❤️

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Jonathan Reinink

Jonathan Reinink Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @reinink

Nov 24, 2022
Hey folks! We released a beta version of Inertia.js v1.0 this week! 🚀

This release focuses on simplifying the project with the goal of making it easier to maintain (and use) moving forward. So while there's no big new features, it's a significant step forward for the project 🥳
We've greatly simplified the various client-side packages for Inertia.

Moving forward you only need to deal with a single package — the adapter of your choice (Vue 2, Vue 3, React or Svelte) 👌

The core, progress, and server libraries are automatically included.
We've also massively simplified the versioning of these packages.

All the client-side packages moving forward will all share the exact same version number. ✨

This will make maintaining changelogs, updating documentation and writing upgrade guides much easier.
Read 10 tweets
May 2, 2022
We started converting the Tailwind UI codebase to Inertia.js and React today (with Laravel on the backend).

The hardest part is converting all the Blade files to React components, but it's so worth the effort.

A few things I love about it 👇
Automatic CSRF token handling.

Laravel sets a CSRF cookie that axios automatically includes on all Inertia.js requests.

Bye bye {{csrf_field() }} 👋

inertiajs.com/csrf-protection
Writing JSX.

While I don't hate Blade by any means, I just love writing JSX so much. You get the power of a full fledge JavaScript framework. You can easily extract pieces of the page templates to inline components. You get automatic Prettier formatting, and more!
Read 6 tweets
Dec 24, 2020
The last few months I've been super busy building native iOS and Android apps for my SaaS app. This week, they got approved by Apple and Google, and my customers are now using it. 🙌

I have so much I want to share about the process, because I learned a TON.

Some highlights:
I built the app with React Native. Originally it was built using React Native CLI, and being totally honest, I hated the whole experience. This is the "closer to the iOS/Andriod metal" approach to building a React Native apps, which gives you more flexibility. It wasn't for me.
So, late in the development process, I pivoted to using @expo. Expo is basically a layer on top of React Native that makes the whole process SO MUCH EASIER. They handle the builds, certificate signing, pushing to the stores, over-the-air updates, push notifications, and more.
Read 9 tweets
Jun 27, 2020
One interesting thing about hey.com is the total lack of modals.

I used to think you needed modals for a great user experience. However, more and more I'm not sure that's the case. Simply visiting a new page to create or edit a record is *totally* fine.
Doing modals properly is really hard. Here are the three keys issues I've run into:

First, modals are a nightmare to implement properly across all browsers, especially on mobile devices. Scroll issues. Focus issues. Spacing issues.

Just look into the iOS 11 modal bug.
Second, if you want to build an accessible modal (and you should), you need to do focus trapping, which is anything but trivial.

I suspect that most people creating modals are not even considering this problem.

Simply creating a "position fixed" element is not enough.
Read 5 tweets
Apr 7, 2020
🚨 Developers, be careful with thinking "it's okay if this page in my app is slow".

Your admin dashboard might only be used by support staff, but *databases are a shared resource*. A slow dashboard can slow down your site for every other user.

Every query matters!

A thread 👇
As web developers, it's easy to think of every two requests as largely independent of one another. If one request is slow, it's unlikely to affect the other...right?

That's very much not the case with your database. It must run whatever queries are fired at it, collectively.
Your database has limits (connections, CPU, memory). It can only run so many queries at a time.

Treat your database as a limited resource, shared by all users. Every query you run is using part of this finite resource. Run too many, and it will crash.
Read 5 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us!

:(