Devon Govett's Avatar

Devon Govett

@devongovett.me.bsky.social

I write javascript

4,015 Followers  |  75 Following  |  427 Posts  |  Joined: 24.04.2023  |  2.3876

Latest posts by devongovett.me on Bluesky

If you’re curious how React Server Components integrate with a bundler, how β€œuse client” actually works, and how RSCs can even benefit client rendered apps, tune into my talk at React Conf at 2:30 PST today!

08.10.2025 16:25 β€” πŸ‘ 15    πŸ” 2    πŸ’¬ 0    πŸ“Œ 0
View overlooking a lake with palm trees in the foreground.

View overlooking a lake with palm trees in the foreground.

What a nice view to wake up to for React Conf!

06.10.2025 16:42 β€” πŸ‘ 21    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Yes. We're still planning a TagField, which would allow "inline" editing of the tags (like the gmail "To" field). But you can get pretty close with Select + TagGroup + Autocomplete example I showed.

03.10.2025 16:12 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Yes! bsky.app/profile/devo...

02.10.2025 21:16 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
<Select>
  <Label />
  <SelectValue>
    <TagGroup />
  </SelectValue>
  <Button />
  <Popover>
    <Autocomplete>
      <SearchField />
      <ListBox />
    </Autocomplete>
  </Popover>
</Select>

<Select> <Label /> <SelectValue> <TagGroup /> </SelectValue> <Button /> <Popover> <Autocomplete> <SearchField /> <ListBox /> </Autocomplete> </Popover> </Select>

Here's the demo shown in the video combining a Select with a TagGroup. You can add a TagGroup within a SelectValue and access the selected items via the render prop function. It also uses Autocomplete to allow filtering. Composition ftw! πŸ˜€

stackblitz.com/edit/rac-sel...

02.10.2025 21:15 β€” πŸ‘ 4    πŸ” 0    πŸ’¬ 2    πŸ“Œ 1
Video thumbnail

Big React Aria release! πŸš€

πŸ₯³ Multi Select!
🎬 ComboBox onAction prop, e.g. "create" item
➑️ Disclosure animation
βœ… New SelectionIndicator component – animations in Tabs, ToggleButtonGroup, etc.
πŸ“± Improved modal behavior in iOS 26
πŸ“† Calendar selectionAlignment

react-spectrum.adobe.com/releases/202...

02.10.2025 20:15 β€” πŸ‘ 76    πŸ” 6    πŸ’¬ 7    πŸ“Œ 1

Cool. I've been testing it with some React Aria demos I'm working on. Very excited about it.

01.10.2025 22:29 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

No ViewTransition? 😒

01.10.2025 22:23 β€” πŸ‘ 6    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Video thumbnail

Pretty amazing that we can now implement swipeable Tabs with native CSS. Updating the React Aria demo I made a few years ago to use native scroll snapping, scroll timeline, and anchor positioning instead of Framer Motion. Feels smooooooth! πŸŽ‰

stackblitz.com/edit/rac-swi...

29.09.2025 19:32 β€” πŸ‘ 66    πŸ” 3    πŸ’¬ 1    πŸ“Œ 0
G174: Providing a control with a sufficient contrast ratio that allows users to switch to a presentation that uses sufficient contrast | WAI | W3C

Btw WCAG actually covers this. But the path to get from each page to the accessibility settings needs to itself be accessible by default so users can find it. www.w3.org/WAI/WCAG21/T...

27.09.2025 02:26 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

I agree that user customization is helpful, but WCAG is a good default. I don’t think it’s acceptable to make the UI inaccessible by default just because there are settings to change it. Users may not be aware of these settings.

27.09.2025 02:19 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 2    πŸ“Œ 0

WCAG says 3:1. I know the algorithm isn’t perfect but the spirit is pretty clear I think. We’ve been working on similar components recently so it’s been on my mind. There are also other ways to pass than a dark border or inverted background, like adding an indicator line, bolding the text etc.

27.09.2025 02:14 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

None of them have enough contrast to tell which one is selected

27.09.2025 01:56 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Looking forward to speaking at React Conf about how Server Components and bundlers work together!

26.09.2025 15:45 β€” πŸ‘ 19    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Video thumbnail

You can add a "Create" option to a React Aria ComboBox in just a few lines of code.

stackblitz.com/edit/szjf6ul...

23.09.2025 18:15 β€” πŸ‘ 16    πŸ” 1    πŸ’¬ 0    πŸ“Œ 0

~140

18.09.2025 21:03 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Video thumbnail

I think I finally found a solution to reliably prevent scrolling behind modals on iOS! 😲

Works when tapping inputs, with different keyboard sizes, when the address bar is collapsed or expanded, programmatic focus, dialog scroll animations, etc.

Coming soon to React Aria! πŸŽ‰

18.09.2025 18:55 β€” πŸ‘ 47    πŸ” 1    πŸ’¬ 1    πŸ“Œ 0
Video thumbnail

Animating React Aria Tabs, ToggleButtonGroup, etc. is about to be super easy with the new SelectionIndicator component. πŸ₯³

β€’ Native CSS transitions, no animation library needed.
β€’ Works with SSR with no flicker before JS runs.
β€’ No ResizeObserver.
β€’ Enter + exit animations.

16.09.2025 20:54 β€” πŸ‘ 32    πŸ” 3    πŸ’¬ 2    πŸ“Œ 0

In particular, Parcel’s asset graph is language agnostic (CSS, images, etc are natively supported). It also supports multiple environments (eg ssr and csr) in a single module graph, which enabled things like RSC support in a non-hacky way. And it’s a bundler, so dev and prod work the same way.

16.09.2025 14:29 β€” πŸ‘ 4    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Parcel solved all of those issues 5+ years ago πŸ˜‰

16.09.2025 14:26 β€” πŸ‘ 4    πŸ” 0    πŸ’¬ 1    πŸ“Œ 1
Video thumbnail

In the next release of React Aria, disclosures are animatable with 2 lines of code. πŸŽ‰

height: var(--disclosure-panel-height);
transition: height 200ms;

Works with browser page search too!

15.09.2025 18:32 β€” πŸ‘ 36    πŸ” 3    πŸ’¬ 1    πŸ“Œ 0

The rest of the sentence is talking about the order things occur in time (β€œrenders ahead of time”) so I would assume β€œbefore” also refers to time. Maybe restructuring the whole sentence instead of just that phrase would be better.

14.09.2025 16:58 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Ehhhh, not necessarily. We say SSR for build time too and that’s way more confusing. I can’t think of anything better.

14.09.2025 16:24 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

That’s why I said β€œbefore the client loads”. How important is it that it happens before SSR? It either has to be before or during SSR to happen before the client loads. One vs two passes is kind of an implementation detail? I just think of it as outputting HTML or β€œJSON”.

14.09.2025 15:55 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

I would say β€œbundling” is creating the chunks (build time), not determining which to load (runtime). In client-only apps that’s done in the browser with dynamic import(), and in RSCs it happens during rendering on the server.

14.09.2025 15:46 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Bundling happens at build time, not at request time so I don’t think that’s right.

14.09.2025 15:39 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Btw I think SSR needs a more specific name now. I’ve been saying β€œHTML rendering” or β€œSSR to HTML”. RSCs are also rendering that happens server side, but not to HTML. πŸ€·πŸ»β€β™‚οΈ

14.09.2025 15:38 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

That’s still before the client loads. I guess if you want to be even more clear that it happens before SSR, maybe β€œbefore HTML and client rendering” but it’s hard to capture in only one sentence. I would say something more general first and then have a diagram or something showing the stages.

14.09.2025 15:36 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 2    πŸ“Œ 0

Not sure what you mean by this. They do run on the server or during the build, both of which are before the client loads?

14.09.2025 15:25 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Hmm, technically it is after bundling in current implementations (there’s no per-request bundling I’m aware of). I would say β€œrenders ahead of time, before the client loads” or something like that.

14.09.2025 15:19 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

@devongovett.me is following 20 prominent accounts