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.

One script tag
<script src="https://jskjs.org/cdn/1.0.0/jskjs.min.js"></script>
90.2 KB → 8.1 KB gzipped0 dependencies0 build steps40 features with live demos11 AI-agent rule files

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.

Core features →

Live · Delegation in six lines

  • Click an item to strike it
  • New items work too
View the source for this demo
HTML
<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>
JavaScript
$('#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.

Hyper features →

Live · Live search — zero JavaScript

    View the source for this demo
    HTML
    <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.

    Pulse features →

    Live · Pricing toggle — zero JavaScript

    View the source for this demo
    HTML
    <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.

    Motion features →

    Live · A staggered wave

    View the source for this demo
    HTML
    <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>
    JavaScript
    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.

    Official minified builds from npm (jquery, htmx.org, alpinejs, gsap), compressed with 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.

    Why agents build better with jsKjs → Get the agent kit

    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.

    🥁 Drum roll, please