Introducing Preact Signals: a reactive state primitive that is fast by default.
โ feels like using plain values
๐ฅณ automatic updates when values change
โฑ updates DOM directly (fast!)
๐ฅน no dependencies arrays
https://t.co/p4PIxThcEW
Git at Scale (by cursor) has been one of the most interesting blog posts i've read in a while. It came right when I was frustrated with Shopify's internal git system.
As an exercise, I've implemented it over the weekend as open source. It's a single rust binary that you can point at any S3 type object store. It uses WAL and CAS primitives and requires no other data store.
It also implements bundle-uri so large git repos (like our mono) are very fast to download as a chain of static bundles. Also comes with basic familiar UX.
https://t.co/oEnWK3eIL4
@TheLarkInn the "sideEffects" config means packages can have their exported interface be a barrel without no performance hit (Vite dissolves re-exports, TS types are generated+cached so no source fan-out). And the packages made it so file moves usually don't change importer specifiers.
@TheLarkInn late reply but: no, not really. the DX win from the performance improvement massively outweighed any familiarity loss.
One thing we did to help was convert a bunch of "pseudo-package dirs" to real pnpm workspace packages with `"sideEffects"` configured.
@TheLarkInn And then the bonus was that doing it as a bundler plugin meant it had to be fast, which forced decisions like doing it all via a Rust lexer (no ast), and those all got reused to build the codemod tool that we then used to stamp the barrels out of the source after.
@TheLarkInn This got us to the end goal fast, but the main value was that it uncovered all of the incredibly nuanced bugs we had when barrel files were removed - module trees shifting between bundles, their exec timing changing, etc.
What if a signal on the server could just be a signal on the client?
Wrote about @_developit's mixed-signals - it reflects server-side Preact Signals to clients over any transport. Write your state once as a model, decide where it runs.
No fetch glue. No cache invalidation. Just signals.
https://t.co/C9SF8ZB3PK
Has anyone else noticed mobile frontends (native and web) are getting increasingly terrible (as we descend into UX vibe coding?)?
I keep noticing I've developed ridiculous coping strategies like constantly copying input to clipboard in case it gets lost when sending.