@bosejs/core
v0.1.5
Published
Bose Framework: All-powerful Resumable Islands. Combines Astro-style islands with Qwik-style zero-hydration resumability.
Maintainers
Readme
@bosejs/core
The Vite plugin for Bosejs — Resumable Islands for the modern web.
What is Bosejs?
Bosejs combines Astro's Islands Architecture with Qwik's Resumability. Pages ship with zero JavaScript. Event handlers are serialized into HTML and resumed on first interaction — no hydration, no virtual DOM.
Install
npm install @bosejs/core @bosejs/state
@bosejs/compilerand@bosejs/runtimeare installed automatically as dependencies.
Usage
// vite.config.js
import { defineConfig } from 'vite';
import bosePlugin from '@bosejs/core';
export default defineConfig({
plugins: [bosePlugin()],
});Create a page in src/pages/index.js:
import { useSignal } from '@bosejs/state';
export default function Home() {
const count = useSignal(0);
const increment = $(() => { count.value++; });
return `
<div>
<span bose:bind="count">${count.value}</span>
<button bose:on:click="${increment.chunk}"
bose:state='${increment.state}'>+</button>
</div>
`;
}Run vite and open http://localhost:5173. The page loads with 0 JS — the increment chunk is fetched only on first click.
Scaffold a new project
npx create-bose my-appKey concepts
| Concept | What it does |
|---|---|
| $() | Extracts the closure into a lazy JS chunk at build time |
| useSignal | Creates reactive state serialized into HTML |
| bose:bind | Binds a DOM node to a signal — updates surgically |
| bose:on:* | Attaches a lazy event handler |
| bose:state | Serializes state into HTML for resumption |
| css$() | Scoped CSS extracted at build time, zero runtime cost |
| server$() | Marks a function as server-only (Auto-RPC) |
| $().state | Auto-generated JSON string for bose:state — no manual serialization needed |
File-based routing
Drop files in src/pages/ — they become routes automatically.
src/pages/index.js→/src/pages/about.md→/aboutsrc/pages/product/[id].js→/product/123
License
MIT © Bosejs Contributors
