Why Aegis
You have a server that renders HTML and you want parts of the page to be alive: a search box, a form with validation, a table, a cart. The usual answer is a bundler, a component framework and a second rendering stack. Aegis is the other answer.
| Aegis | React + Query + Router | Vue | htmx + Alpine | |
|---|---|---|---|---|
| Build step | none, one file | Vite/webpack + JSX | Vite or runtime compiler | none |
| Dependencies | 0 | react, react-dom, @tanstack/react-query, react-router | vue, pinia, vue-router | htmx, alpine |
| Size, gzip | 11 KB signals · 21 KB islands + templates · 91 KB everything | 45 KB + 13 KB + 20 KB | 34 KB + 5 KB + 8 KB | 14 KB + 15 KB |
| Server HTML | adopted as is, morph, swap, islands | replaced by the client tree (or SSR with Node) | replaced (or SSR with Node) | swapped as strings |
| Signals | TC39-style, glitch-free | hooks, re-render per change | ref/computed |
Alpine reactivity |
| Data layer | resource() with SWR cache, ETag, offline, optimistic patch log |
TanStack Query | your own or TanStack | none |
| Forms | Constraint Validation, schemas, 422 mapping, wizards | react-hook-form | vee-validate | none |
| Router | Navigation API, loaders, guards before commit | react-router | vue-router | none |
| Dev warnings | 60+ codes with what / why / fix and source position | React DevTools | Vue DevTools | none |
The same todo list is 18 lines in Aegis, 22 in React and 18 in Vue, but the Aegis one needs no build and no dependencies. See it side by side in the playground (tab "vs React / Vue").