FlickJS is a Bun-based monorepo for a small reactive UI framework and its supporting tooling. The core idea is simple: compile JSX to direct DOM operations and update only the nodes that depend on changed state.
@flickjs/runtime: fine-grained reactive primitives likefx()andrun()@flickjs/compiler: JSX compiler for Flick components@flickjs/vite-plugin: Vite integration for the compiler@flickjs/router: file-based routing for Flick appscreate-flick-app: app scaffolding CLI@flickjs/react: Flick signals and AI hooks for React@flickjs/ai: streaming and agent utilities built around the AI SDKpackages/docs: VitePress documentationpackages/landing: marketing sitepackages/linter: Flick Scan, a fast JS/TS linting project living in the same workspace
Create a new app:
bun create flick-app my-app
cd my-app
bun install
bun devThe generated app uses Vite, the Flick Vite plugin, the Flick router, and Tailwind.
import { fx, mount } from '@flickjs/runtime';
function Counter() {
const count = fx(0);
return (
<button onclick={() => count.set(count() + 1)}>
Count: {count()}
</button>
);
}
mount(Counter, document.getElementById('app')!);Install workspace dependencies:
bun installBuild the main packages:
bun run buildUseful commands:
bun run docs:devto run the docs sitebun run build:landingto build the landing pagebun run cleanto remove package build output
- packages/runtime
- packages/compiler
- packages/vite-plugin
- packages/router
- packages/create-app
- packages/react
- packages/ai
- packages/docs
- packages/landing
- packages/linter
For more usage details, see USAGE.md and the docs in packages/docs.