v1.0.0 · Open source · MIT
Four libraries.
One $.
jsKjs is the jQuery API you already know — plus htmx-style requests, Alpine-style reactivity and GSAP-style motion — in one 8.1 KB script. No build step. No dependencies. Made for humans and their AI agents.
<script src="https://jskjs.org/cdn/1.0.0/jskjs.min.js"></script>Core · jQuery-compatible
The $ you know
Selectors, traversal, events, delegation, AJAX — the jQuery API, on native browser features. Your muscle memory works on day one; collections are real arrays.
- Click an item to strike it
- New items work too
View the source for this demo
<form id="h-form" class="row"><label for="h-in" class="sr-only">New item</label><input id="h-in" type="text" placeholder="Add an item…" style="flex:1;min-width:160px"><button type="submit">Add</button></form>
<ul id="h-list" class="list-plain"><li>Click an item to strike it</li><li>New items work too</li></ul>$('#h-form').on('submit', e => {
e.preventDefault();
if ($('#h-in').val()) $('<li>').text($('#h-in').val()).appendTo('#h-list');
$('#h-in').val('');
});
$('#h-list').on('click', 'li', function () { $(this).css('text-decoration', 'line-through').fadeOut(500); });Hyper · htmx-style
Requests in your HTML
Describe the request in attributes and let the server answer with HTML. Live search, forms, polling and infinite scroll without writing a handler. This one is calling a real PHP endpoint.
View the source for this demo
<label for="h-q">Search jsKjs internals</label>
<input id="h-q" name="q" type="search" autocomplete="off" placeholder="Try “anim” or “store”" style="margin-top:6px"
kj-get="/api/search.php" kj-trigger="keyup delay:250ms" kj-target="#h-hits">
<ul id="h-hits" class="list-plain" aria-live="polite" style="font-family:var(--mono);font-size:14px"></ul>Pulse · Alpine-style
State that lives on the element
Declare state with kj-data, bind it with kj-text, kj-show, kj-model and @click. Change the data and the page follows — no build step, no virtual DOM.
View the source for this demo
<div kj-data="{ yearly: false }">
<div class="row" role="group" aria-label="Billing period">
<button type="button" @click="yearly = false" :aria-pressed="yearly ? 'false' : 'true'">Monthly</button>
<button type="button" @click="yearly = true" :aria-pressed="yearly ? 'true' : 'false'">Yearly</button>
</div>
<p style="margin:14px 0 0"><b style="font:850 40px/1 var(--display)" kj-text="yearly ? '$120' : '$12'"></b>
<span class="muted" kj-text="yearly ? 'per year — two months free' : 'per month'"></span></p>
</div>Motion · GSAP-style
Motion with taste
Tweens, transforms, ten easings, stagger and timelines on requestAnimationFrame — with Promises you can await. Seconds, like GSAP; classic fadeIn() still works.
View the source for this demo
<div id="h-dots" style="display:grid;grid-template-columns:repeat(12,1fr);gap:8px" aria-hidden="true"></div>
<div class="row" style="margin-top:14px"><button type="button" id="h-wave">Play the wave</button></div>for (let i = 0; i < 36; i++) $('<span>').css({ aspectRatio: '1', borderRadius: '50%', background: 'var(--motion)', opacity: .35 }).appendTo('#h-dots');
$('#h-wave').on('click', async () => {
await $.to('#h-dots span', { y: -14, opacity: 1, duration: .25, stagger: .02, ease: 'power2.out' });
$.to('#h-dots span', { y: 0, opacity: .35, duration: .5, stagger: .02, ease: 'bounce.out' });
});Measured, not guessed
A twelfth of the weight
The official builds of the four libraries total 90.2 KB gzipped. jsKjs is 8.1 KB, because it targets evergreen browsers and ports the parts most sites use. See exactly what's included.
gzip -9, October 2026. jsKjs ports the commonly used subset of each — see exactly what's included.Built for AI agents
Tell your agent “use jsKjs”.
One documented API instead of four, HTML you can review at a glance, and nothing to build. Ready-made rules for every major coding agent.
One mental model, not four
An agent asked to add "live search with a fade-in" to a jQuery + htmx + Alpine + GSAP page must juggle four APIs, load orders and overlapping ideas of state.
A closed, written-down API
The rules file lists every available method and every common method that is not available.
Changes you can review at a glance
<form kj-post="/subscribe.php" kj-target="#msg"> says what it does.
Training data that already transfers
Models have read an enormous amount of jQuery.
A fair review
What aged in jQuery
jQuery changed the web. Eight short, sourced essays on what aged — and what jsKjs does instead.
Open source · MIT
The repository is public. Want to see it?
Source, tests, the AI kit and this very website — on GitHub.