Releases: beerush-id/airstack
v1.2.6
🚀 Features
- (ssr) Add support for optional app shell wrapping during SSR rendering
- (ssr) Add support for optional app shell component in SSR rendering
- (ssr) Add support for optional Shell component during SSR rendering
- (irpc) Add file upload/download and enhance adapter drivers
💼 Other
- (irpc) Split IRPCAdapter into base and extended classes
🚜 Refactor
- (irpc) Rename and restructure adapter and driver for CRUD operations
- (irpc) Standardize id parameter types and enhance type safety
📚 Documentation
- (getting-started) Add air-material-css skill installation instructions
⚙️ Miscellaneous Tasks
- (release) Bump version to 1.2.4 across all packages
- (release) Bump version to 1.2.5 across packages and demos
- (version) Bump version to 1.2.6 across all packages and demos
v1.2.3
v1.2.2
🚀 Features
- (irpc) Add IRPCBlob support for remote blob handling
- (file) Add abort support and blob decoding for file operations
🐛 Bug Fixes
- (irpc) Update IRPCReader initialization and state management for scheduled executions
🚜 Refactor
- (reactive) Simplify derived ref observer creation
📚 Documentation
- (material-css) Add comprehensive documentation for AIR Material 3 CSS library
- (material-css) Remove components documentation pages
⚙️ Miscellaneous Tasks
- (release) Bump version to 1.2.1 across all packages
- (release) Bump version to 1.2.2 across all packages
v1.2.1
🚀 Features
- (docs) Update AIR Form documentation and v1.2 release notes
🐛 Bug Fixes
- (irpc) Update IRPCReader initialization and state management for scheduled executions
🚜 Refactor
- (reactive) Simplify derived ref observer creation
📚 Documentation
- (posts) Update forms tutorial with reactive state example
- (skills) Introduce air-form-react agent skill and update form engine documentation
- Add SolidJS skills and update installation commands
⚙️ Miscellaneous Tasks
- (release) Bump version to 1.2.1 across all packages
v1.2.0
🐛 Bug Fixes
- (react) Resolve HOC context loss during snippet re-rendering
- *(vite-ssr) Fix dev server running different core instances
- (build) Remove caret symbol from package version references in prepublish scripts
- Move to peer dependencies and using static version
⚙️ Miscellaneous Tasks
- Bump version to 1.1.2 across all packages
- (release) Bump version to 1.2.0 across all packages
v1.1.1
🚜 Refactor
- (vite-ssr) Modularize middleware and configure SSR externalization. This change also fix the hydration mismatch issue caused by disconnected instance on the modules.
📚 Documentation
- Add AIR Form homepage section and bump template dependencies to 1.1.0
⚙️ Miscellaneous Tasks
- (workspace) Bump version to 1.1.1
- (scripts) Defer vite-ssr publishing to the end of the sequence
v1.1.0
🚀 Features
- (cookie) Enforce writable context validation for server-side cookie mutations
- (irpc) Introduce buffered configuration and simplify declare signatures
- (http) Introduce standalone dispatch mode for full HTTP lifecycle support
🐛 Bug Fixes
- (solid) Resolve children render prop detection in setup components
🚜 Refactor
- (form) Simplify form state initialization and remove reactive sync
- (vite-ssr) Dynamically load core context utilities via ssrLoadModule
- (vite-ssr) Remove cookie context middleware from IRPC HTTP router
📚 Documentation
- (news) Remove SSR and ISR documentation links from release notes
- (ssr) Introduce universal SSR and ISR documentation
- (index) Update landing page code examples and SSR content
- (posts) Add framework and RPC comparison articles to documentation
- (posts) Add smart form component tutorial and interactive demo
- (skills) Update cookie state management and SSR examples
- (form) Introduce comprehensive AIR Form documentation
⚙️ Miscellaneous Tasks
- (docs) Refine glob patterns for AI markdown files
- (workspace) Standardize build scripts and apply comprehensive formatting
- (format) Apply standard code formatting across http and core packages
- (workspace) Bump version to 1.1.0 and apply formatting
v1.0.0
AIR Stack v1.0.0 — Reactive Full-Stack Framework, from DB to UI
Anchor (state) + IRPC (network) + Router (navigation), backed by a single reactive graph. No separate state manager, API client, caching layer, or form library.
Highlights
Remote Functions (IRPC)
Typed function stubs that separate signature, implementation, and transport. Call them like local functions — HTTP, WebSocket, or BroadcastChannel, the call site stays identical.
- Standard & streaming — one-shot calls and progressive streaming (AI generation, long-running ops)
- Transport agnosticism — HTTP, WebSocket, BroadcastChannel; swap at runtime without changing code
- Automatic batching — concurrent calls merged into a single request
- Request coalescing — identical concurrent calls share one in-flight request
- Caching + invalidation —
maxAgecaches,irpc.invalidate()clears stale entries - Retry with backoff — configurable linear or exponential retry
- Reactive bindings —
.with(),.when(),.later(),.once()for component-level data fetching - File uploads — pass
IRPCFileas arguments, transport handles the rest - Runtime validation — Zod schemas for input/output enforcement
- CRUD module —
irpc.crud()generates get/create/update/delete with adapter wiring - Hooks — cross-cutting concerns (auth, logging) via
irpc.hook() - Microservice routing — each package routes to its own server
- Publishable stubs — declaration files safe to ship as npm packages
Workflow Orchestration
Promise-like chaining for multi-step async logic with built-in routing, validation, recovery, and observability.
plan()+.then()/.catch()/.finally()— familiar async composition.switch()— key-based or matcher-function branching with isolated branches- Schema validation — Zod/Valibot at pipeline input, output, and step boundaries
- Reactive bindings —
.once(),.with(),.when(),.later()mirror IRPC patterns - Step tracking —
reader.current.nameshows which step is running - Manual stepping —
.step(),.run(),.skip(),.reset()for wizard-style flows - Persistence —
snapshot()/hydrate()for resuming after crashes - WorkflowStore — global observability and telemetry subscription
Routing (Router)
URL path, guards, and data loaders in a single typed chain. View attaches separately — route logic and UI stay decoupled.
- Type-safe route tree — TypeScript infers params across the entire tree
- Pre-render guards — run before mount, no flash of unauthorized content
- Reactive providers — re-run when reactive dependencies change, no manual tracking
- Fine-grained routing — only components observing changed state re-render
- Parameter mutations —
/users/1→/users/2updates state in place, no unmount - Modal routes —
modal()renders as overlay, keeps current page mounted - Preloading — providers fetch on
<Link>hover - Render modes —
deferred(block until resolved) andimmediate(stream in)
State Management (Anchor Core)
Transparent reactive Proxies — read and write properties normally, the system tracks dependencies and triggers updates.
- Direct mutation —
state.count++triggers updates, no setters or copies - Deep reactivity — nested objects auto-wrapped, configurable depth
- Computed getters — standard JS
geton mutable objects, auto-tracks dependencies - Read-only state —
immutable()blocks writes,writable()for controlled access derived()— combine multiple state sources, no dependency arraysordered()— reactive sorted view with O(log N) binary insertioneffect()— auto-tracks dependencies, cleanup on re-run/unmountform()— Zod schema validation with reactive error map per field$bind()/$use()— two-way binding and error linking- Class support —
mutable(new MyClass())works out of the box
User Interface
Autonomous components following HTML's mental model — each component carries its own state, determines its own behavior, syncs with parent through state contracts ($bind).
setup()— component function runs once, stable closure survives re-rendersrender()/template()/snippet()— reactive view boundaries (React)- Bindable props — two-way prop binding, child writes propagate to parent
- IRPC integration —
.once(),.with(),.when(),.later()directly in components - Optimistic UI — update state before server confirms, rollback on failure
- React & SolidJS — same API, typically differs by a single line
Universal SSR
Same component renders on every runtime — Bun, Node.js, Cloudflare Workers, Deno.
- Request isolation — each render gets its own reactive scope, no state leaks
- Cookie propagation — mutations during SSR captured as
Set-Cookieheaders - Abort signals — SSR renders respect
AbortControllerwith configurable timeout - Vite plugin —
airSSR()runs SSR + IRPC + WebSocket on one dev server - ISR — cached HTML on hit, SSR on miss, stale-while-revalidate with background re-renders
Testing
168 test files · 2,774 tests · 100% coverage (statements, branches, functions, lines)
Get Started
# React
npx degit beerush-id/airstack/templates/air-react my-app
cd my-app && bun install && bun dev
# SolidJS
npx degit beerush-id/airstack/templates/air-solid my-app
cd my-app && bun install && bun devDocumentation · Getting Started
License
MIT
v1.0.0-beta.25
🚀 Features
- (irpc) Add
pipeTomethod to RemoteState and implement subscription cleanup - (workflow) Add initial state seeding and reader state piping
- (workflow) Introduce stepper and runner for stateful multi-step execution
🐛 Bug Fixes
- (irpc) Clear internal pipes on state teardown and improve test typing
💼 Other
- (vite-ssr) Update vite and ws to use workspace catalog
🚜 Refactor
- (docs) Remove numeric prefixes from content files and add library authoring guide
- (templates) Migrate to vite-ssr plugin and simplify server entry points
- (starter) Remove WebSocket transport from air-react and air-solid templates
- (workflow) Replace WorkflowReader with WorkflowStepper and integrate schema parsing
- (workflow) Remove internal execution logic and expand schema validation tests
- (workflow) Remove
AsyncReaderandWorkflowReaderutilities - (workflow) Use options objects for stepper and runner initialization
- (irpc) Replace
initwithseedfor call initialization - (air-stack) Update IRPC primitives and modernize React skill documentation
- (irpc) Remove
initfrom call configuration and type definitions - (irpc) Introduce domain-specific error classes and structured payloads
- (error) Replace generic errors with custom error factories
- (templates) Adopt seed property for IRPC state initialization
📚 Documentation
- (irpc) Introduce structured error hierarchy and update documentation
- (readme) Enhance architectural overview and update code examples
- (readme) Add bold formatting to framework name in AI quote
- Remove AI knowledge base files and clean up config
- (ssr) Add Incremental Static Regeneration (ISR) patterns and examples
🎨 Styling
- (irpc) Apply code formatting and fix line wrapping
⚙️ Miscellaneous Tasks
- Pin template dependencies and document IRPC streaming patterns
- (templates) Lock anchorlib and irpclib dependencies to explicit versions
- (workspace) Remove obsolete apps, demos, and legacy packages
- (workspace) Bump version to 1.0.0-beta.25 and apply formatting
- (templates) Bump dependencies to beta.25 and reset template versions
v1.0.0-beta.24
🚀 Features
- (react) Allow getter functions for binding sources
- (stub) Add manual execution capability with later method
- (workflow) Add resumable workflow readers with debounce support
- (air-stack-react) Introduce new skill for AIR Stack and React development
- (router) Implement route state caching and hydration
- (router) Introduce parallel data provider resolution
- (router) Introduce renderAsync for lazy loading route renderers
- (react) Introduce SSR renderer utility and async route rendering
- (solid) Introduce SSR utility and async route rendering
- (irpc) Introduce router isolation method and refine error codes
- (core) Introduce createContext API and rename IRPC context store
- (router) Add AbortController support to route activation
- (irpc) Introduce preHook to router and implement abort signal propagation
- (react) Introduce edge worker utilities and refactor SSR renderer
- (solid) Introduce SSR worker utilities and modularize renderer
- (irpc) Introduce credential signing and RemoteState piping
- (vite-ssr) Introduce airSSR plugin for unified SSR and IRPC routing
🐛 Bug Fixes
- (irpc) Add proper cleanup for debounced dispatch in reader module
- (core) Allow asynchronous callbacks in
withIsolation
🚜 Refactor
- (router) Introduce class-based error handling and update activation flow
- (router) Export error classes and strongly type exception renderer
- (router) Transition resolving state to a Set and adjust error handling
- (anchor) Gracefully handle non-reactive objects in snapshot and stringify
- (core) Optimize passive mode tracking and untrack serialization
- (router) Replace
withIsolationwith internalwithContextutility - (ssr) Centralize worker types and enhance API documentation
- (transport) Restructure payloads to single calls and introduce credentials
- (react) Simplify createSSR by importing renderToString directly
- (react) Remove custom renderer from
createSSRtests - (solid) Simplify SSR renderer by directly importing
renderToString - (vite-ssr) Replace dynamic core imports with static imports
- (templates) Overhaul SSR configuration and introduce demo application
📚 Documentation
- (readme) Overhaul architecture documentation and update resource links
- (remote-function) Add detailed documentation for IRPCStub reactive APIs
- (react) Expand guides for SSR, optimistic UI, and state primitives
- (react) Update context API, overhaul SSR setup, and expand router features
- Expand API documentation and introduce optimistic UI guide
🧪 Testing
- (react) Add comprehensive test suite for createSSR
⚙️ Miscellaneous Tasks
- (workspace) Bump packages to 1.0.0-beta.24 and format json configurations
- (publish) Add vite-ssr package to release script