FAQ
Q: Is it really zero build? A: Yes. aegis.js is one ES module. Import it from a URL or copy the file next to your templates; the html`` templates are parsed by a tokenizer at runtime, once per template, and cached. A bundler is optional and only buys tree-shaking.
Q: How is this different from htmx or Alpine? A: htmx swaps HTML strings; Alpine adds small behaviours. Aegis does both of those (swap(), islands) and also has what they leave to you: signals with a dependency graph, a cache with SWR/ETag/offline, a form layer, a router. It is one file with everything, and each part is independent.
Q: Does the server have to render with JavaScript? A: No. Any server HTML works. An island adopts the markup that is already there; adopt() binds a template to existing DOM with zero mutations; swap() and boost() bring server fragments in without rewriting them on the client.
Q: What about TypeScript? A: Hand-authored aegis.d.ts ships with the file and is checked against the runtime on every test run. No build needed: // @ts-check in a plain .js file gives full IntelliSense.
Q: How big is it really? A: What you import. Signals and scopes alone are 11 KB gzip; islands, templates, lists and events 21 KB; everything with the cache, forms and the router 91 KB as a production build. node build.mjs --from app.js emits exactly the subset your app imports.
Q: Is it production-ready? A: It runs the admin of a commercial product with a 15-export custom build (22 KB gzip) and passes 1 072 tests in headless Chrome and Firefox on every commit. The API is stable; older names stay as @deprecated aliases.
Q: Can an AI assistant write Aegis code? A: That is a design goal. llms.txt holds the rules assistants get wrong most, AGENTS.md the working contract, ERRORS.md every warning with its fix, and the dev build explains mistakes in the console with the source position.