Skip to content

bQuery.jsThe full-stack framework that speaks jQuery.

Batteries-included TypeScript framework with signals, Web Components, routing, SSR, and a dependency-free server — zero mandatory build step.

bQuery Logo

What is bQuery.js?

bQuery.js is a batteries-included TypeScript framework for the modern web — not just a DOM utility library. It bundles fine-grained reactivity, Web Components, routing, state management, forms, motion, accessibility, drag-and-drop, runtime-agnostic SSR, and a dependency-free backend behind a familiar jQuery-inspired API. Every public module ships its own entry point so bundlers can keep your build small.

Read more in the Introduction or jump straight to Getting Started.

Why bQuery?

You want…bQuery gives you
A jQuery-style DOM API on modern reactive primitives$(selector) returns a typed BQueryElement; signals and effects participate in chainable code without a virtual DOM.
Zero build for small projectsDrop a <script type="module"> from a CDN — no Vite, no bundler, no transpiler required.
A real framework when projects grow23 tree-shakeable modules covering routing, state, forms, SSR, server, motion, a11y, i18n, devtools, testing, plugins.
One stack for client and server@bquery/bquery/ssr + @bquery/bquery/server render and serve from the same runtime (Node, Bun, Deno, or edge).
Security defaults that don't fight youHTML-writing APIs sanitize untrusted input; Trusted Types and CSP-friendly patterns are first-class.
Predictable bundle sizeZero runtime dependencies; every public surface is tree-shakeable; a /full bundle is reserved for CDN consumers.

At a glance

@bquery/bquery
├── core ─────────── selectors, traversal, events, utilities
├── reactive ─────── signals, computed, watch, async data, HTTP, realtime
├── concurrency ──── worker tasks, RPC, pools, reactive metrics
├── component ────── typed Web Components, slots, refs, lifecycle
├── motion ───────── transitions, springs, tweens, timelines
├── security ─────── sanitization, Trusted Types
├── platform ─────── storage, cache, cookies, page meta
├── router ───────── SPA routing, guards, navigation results
├── store ────────── signal-based state with persistence
├── view ─────────── declarative bq-* directives
├── forms ────────── reactive forms, validators, schema
├── i18n ─────────── locale negotiation, Intl, pluralization
├── a11y ─────────── focus, live regions, audits, prefs
├── dnd ──────────── draggable, droppable, sortable
├── media ────────── viewport, network, clipboard, prefs
├── plugin ───────── hooks, DI, namespaced directives
├── devtools ─────── timeline, signal/store diffs, perf
├── testing ──────── screen, userEvent, mocks
├── storybook ────── safe story helpers
├── ssr ──────────── runtime-agnostic rendering & streaming
└── server ───────── dependency-free routing + WebSockets

See the full Architecture overview and the Modules matrix below.

Install

bash
npm install @bquery/bquery
bash
bun add @bquery/bquery
bash
pnpm add @bquery/bquery
bash
yarn add @bquery/bquery
html
<script type="module">
  import { $, signal, effect } from 'https://unpkg.com/@bquery/bquery@1/dist/full.es.mjs';
</script>

Supported runtimes: Node.js ≥ 24, Bun ≥ 1.3.13, modern Chromium / Firefox / Safari / Edge. See Supported Runtimes.

Two-minute example — client

ts
import { $, signal, effect } from '@bquery/bquery';

const count = signal(0);

effect(() => {
  $('#counter').text(`Count: ${count.value}`);
});

$('#counter').on('click', () => {
  count.value++;
});

Two-minute example — server

ts
import { createServer } from '@bquery/bquery/server';

const app = createServer();

app.get('/', async (ctx) => {
  return ctx.renderResponse(`<h1 bq-text="message"></h1>`, { message: 'Hello from bQuery SSR' });
});

await app.listen({ port: 3000 });

Walk through both end-to-end in the Tutorial and the Full-Stack Workflows.

I want to…

I want to…Start here
Reactively update the DOM without a buildCore + Reactive
Build a single-page appRouter, Store, View
Build Web ComponentsComponent + Storybook
Build a full-stack app with SSRSSR + Server
Handle forms, i18n, and a11yForms + i18n + A11y
Animate thingsMotion
Move work off the main threadConcurrency
Migrate from jQueryMigration Guide

What's new in 1.14.0

The 1.14.0 release graduates media, plugin, devtools, and testing into batteries-included tiers, with additive expansions across router, view, a11y, i18n, dnd, storybook, concurrency, ssr, and server.

Read the structured release notes at Release Notes — 1.14.0 or the full CHANGELOG.

Learn more

Released under the MIT License.