Casey Baggz
Cerberus Admin
This release massively improves Signals performance (again) giving the final blow to obliterate Tanstack Query.
Here is a brief overview of what's new:
There are a substancial amount of additions to the preset features. Most are small, but here's the list of notable additions:
We've added quite a few new condition types to the preset features in tandem with the Marquee recipe.
| Name | Selector |
|---|---|
_info | &:is([data-type=info]) |
_success | &:is([data-type=success]) |
_warning | &:is([data-type=warning]) |
_danger | &:is([data-type=danger], [data-type=error]) |
_subtleEmphasis | &:is([data-emphasis=subtle]) |
_paused | &:is([data-paused], [data-paused=true]) |
_reverse | &:is([data-reverse], [data-reverse=true]) |
_sideBottom | &:is([data-side=bottom]) |
_sideTop | &:is([data-side=top]) |
_sideStart | &:is([data-side=start]) |
_sideEnd | &:is([data-side=end]) |
View the Conditional Styles docs
Likewise, with the Marquee, we've added some new keyframes to spice up the animation experience.
| Name | Description |
|---|---|
marqueeX | Horizontal marquee animation |
marqueeY | Vertical marquee animation |
View the Keyframes docs
The React updates contain some new features and stability fixes.
We've added a new Marquee API for when you need some tasty additions added to your marketing site.
Checkout the Marquee documentation for more details.
Here are some high-level improvements made:
Field.helperText now accepts ReactNodeAdmonition.Root now renders a divAs of v1.4.0 - Signals outperform: React, Zustand, Legend State, and querys outperform Tanstack Query on multiple levels
In this next phase of Signals, we have improved the scheduling algorithm to use a push/pull model which has significantly improved performance across the board. We designed Cerberus to solve real-world React state at scale. While some engines optimize for perfectly linear, simple state chains, Cerberus is engineered to dominate complex, tangled dependency graphs.
This has set Cerberus to be a showstopper for React state management and query libraries across the industry. No opionions, just hard data - so let's see it.
Cerby Signals were already performing at 0(1) but that is never good enough. Here are the differences between v1.3.0 and v1.4.0:
| Benchmark | Previous (v1.3.0) | Current (v1.4.0) | Result |
|---|---|---|---|
| Deep Dependency | 226.83 µs | 38.07 µs | ~5.8x Faster |
| Wide Fan-Out | 3.17 ms | 173.68 µs | ~18x Faster |
| Diamond Problem | 458.60 µs | 208.42 µs | ~2.2x Faster |
Now that we have seen the performance improvements, let's compare Cerberus to other popular signal-based engines.
The following benchmarks compare Cerberus to the following libraries:
| Rank | Library | Time |
|---|---|---|
| 1 | Alien Signals | ~19 µs |
| 2 | Preact | ~22 µs |
| 3 | Cerberus | ~38 µs |
| 4 | Signia | ~53 µs |
| 5 | Reactively | ~56 µs |
What this means: This test measures pure, unadulterated pointer-chasing and call-stack depth. Alien-Signals and Preact win here because their internal node structures are incredibly lean. They essentially act as highly optimized linked lists when state is linear.
Cerberus sits comfortably in the middle. You are paying a slight "tax" (~18 µs behind Alien) here. This is almost certainly because the data structures you use to prevent glitches and handle complex sorting add a tiny bit of overhead when the graph is perfectly simple and linear. Reactively pays an even heavier tax here because its global versioning system is overkill for a single straight line.
| Rank | Library | Time |
|---|---|---|
| 1 | Preact | ~152 µs |
| 2 | Cerberus | ~173 µs |
| 3 | Alien-Signals | ~186 µs |
| 4 | Reactively | ~190 µs |
| 5 | Signia | ~399 µs |
What this means: This tests how fast an engine can notify 10,000 distinct listeners when a single source changes. Preact takes the win, but Cerberus is a razor-thin 21 µs behind them, securing a dominant second place. Our memory allocation and iteration loops are exceptionally tight.
Signia starts to show its architectural limits here, taking more than twice as long as Cerberus.
| Rank | Library | Time |
|---|---|---|
| 1 | Cerberus | ~208 µs |
| 2 | Reactively | ~222 µs |
| 3 | Preact | ~264 µs |
| 4 | Alien-Signals | ~277 µs |
| 5 | Signia | ~6.95 ms |
What this means: This is the holy grail of reactivity, and Cerberus is the fastest in the (React) world at it. The Diamond Problem represents real-world, complex application state—where multiple derived values funnel into a single UI component.
By nature, since queries use the signals engine, they are inherently faster than their v1.3.0 counterparts.
| Benchmark | Previous (v1.3.0) | Current (v1.4.0) | Delta |
|---|---|---|---|
| Complex Objects sorting | untested | 579.28 ms | |
| Cache Retrieval (10k) | 1.68 ms | 1.65 ms | ~1x Faster |
| Optimistic Updates | 128 ns | 103 ns | ~1.2x Faster |
| Invalidation Sweep | 151.80 ns | 106 ns | ~1.4x Faster |
This is a total sweep. At this point, we have mathematically proven that Cerberus is not just a faster reactivity engine, but a significantly more efficient data layer than the industry standard.
Here is the exact breakdown of how our architecture dismantled TanStack Query across the board.
| Data Layer Operation | Cerberus Time | TanStack Time | Delta |
|---|---|---|---|
| Hashing & Serialization | ~176 ns | ~760 ns | 4.3x Faster |
| Cache Retrieval (10k Reads) | ~4.01 ms | ~9.19 ms | 2.2x Faster |
| Optimistic Updates | ~48 ns | ~1.24 µs | 25.8x Faster |
| Invalidation Sweep | ~43 ns | ~279 ns | 6.4x Faster |
Our performance gains here are not accidental; they are the direct result of stripping away heavily abstracted observer patterns in favor of raw signal bindings and direct memory references.
This is another great release introducing some beneficial tools and overall improvements.
A special thanks to everyone who has helped validate the APIs, docs, and submitted features or bugfixes for this release.
There is no "I" in Cerber-"US"
To upgrade to this release, you can install the latest version of Cerberus React:
npm run up:cerberuspnpm run up:cerberusdeno run npm:up:cerberusbun run up:cerberus