Me: In my book I invented the Dilemma Prison as a cautionary tale
Vibecoders: at long last, we have created the Dilemma Prison from the classic sci-fi novel ...
Today, we are launching Red Queen Bio (https://t.co/b1szn8oyps), an AI biosecurity company, with a $15M seed led by @OpenAI. Biorisk grows exponentially with AI capabilities. Our mission is to scale biological defenses at the same rate. A 🧵 on who we are + what we do!👇🏻1/19
Vamos Miami! First event in the books. Thank you to our speaker @cbnsndwch and all who attended!
Join us again December 9th! Where @SocaBlood will be giving and
intro to the new @remix_run ! Link below
South Florida! Come to the first @remix_miami meetup! This monthly meetup we will dive into @remix_run and the web together. First event November 11th!
In collaboration with @joinhello_miami and their very own @cbnsndwch is our first speaker! So please stay, build or just hang out with us after!
Join me at Add React Router 7 to your NestJS app | Remix Miami https://t.co/FgpftGoX4l
Had a great time at Remix Jam -- now for my initial take on Remix 3:
Regardless of how much you like React, it's a hard truth that a lot of people don't feel like they are able to understand it. This isn't a technical argument. This is an acknowledgement that there is a market out there of people who still use it but aren't super happy. That's why the "for idiots" tagline works. (I'm one of them. I would consider myself smart, but just don't get a lot of the new stuff)
Why won't that market of people just move to something else? A few things. One is inertia; React is a wildly huge and their existing company or projects are invested in React. Another is that other frameworks (vue, svelte, etc) are just too different. They don't want fine-grained reactivity through signals etc; they still like the core model of React. They just want to write multiple components in a single file that rerender when values change, using a basic `css` or `style` prop (or tailwind). They don't want to switch to `<template>` or learn svelte's compiler language
I admire @ryanflorence and @mjackson's conviction and ability to just launch something like this in front of everybody. It feels impossible to launch a new framework these days but they are uniquely positioned to do it.
All of the above is why I think this has a chance of success. Now to some of the technical merits.
The events API is cool. At Stripe, we built a design system from scratch that had something similar. The problem is React has a glaring flaw: interactions are not composable. Hooks let you package up state and effects into small unity, but you can't do that with events. If you've ever done `const { selectProps } = useSelect()` and then `<Select {...selectProps} />` you know what I mean.
Our design system at Stripe has something called "intents". Props to @koop and @SlexAxton and others for inventing this. Every component has a `uses` prop (similar to remix's `on`), but instead of only being events, it's arbitrary behavior (it's an "intent" to do something).
For example, while we do have a builtin `css` prop, it just transforms to applying a CSS intent, so applying CSS would be:
<Select uses=[css({ padding: 'large', shadow: 'medium' })] />
Why do this? It decouples the css system from the component API. At one point we were transitioning CSS systems, so we could technically support two different `css` functions and you could pull in which one you needed (not great, but required for migrations in a large company)
You can also apply props. But why would you do that? Just add the prop normally. Well, the interesting part is being able to lift it up into an intent that can be reused:
```
function tempo() {
const [beats, setBeats] = useState(0);
return applyProps({ onClick: ... })
}
<Select uses=[tempo()] />
```
This let us package up interactions that can be reused. We could have had builtin event intents like `https://t.co/3p8wgEu6I0` so you could do `<Select uses=[https://t.co/3p8wgEu6I0()] />` which is very similar to Remix 3.
So anyway, this is a real problem and I like how Remix is thinking about it
In terms of the manual update, I think it's a bold move. I still need to sit down and give it a try to have better thoughts. I think they will need to figure out some basic scheduling problems, but it definitely doesn't seem unsolvable. This is different from the manual updating we did back in backbone/angular/etc.
I'm a little worried about over-rendering. However, everyone is already using huge abstractions over React's state. A lot of these libraries internally force rerenders, so Remix is basically just opting out of having a builtin one and letting users do it in userland.
It's an open question how this will scale to hundreds of developers working on an app. At Stripe when lots of backend devs work on frontend you end up with code that does not follow best practices, so my question is: what is the regression to the mean here? What guardrails can Remix 3 put in place to raise that mean?
Large companies end up building their own abstractions (or using ones from the community) anyway for the most part. So even if `this.update` doesn't scale (developer-wise, not performance-wise) companies rarely use the raw APIs anyway, and having a framework they encourages you to just build a complex solution on top of the simple path feels viable. (with React, it feels like building a complex solution on top of a complex path which multiplies complexity)
Anyway I'm about to play @ryanflorence in tennis so lmk what I should yell at him about