Releases

Release notes

jsKjs follows semantic versioning. The documented API is stable within a major version.

v1.0.0 · October 2026 · first public release

Core — jQuery-compatible

Native querySelectorAll selectors; Array-subclass collections; content, attribute, class, CSS (including custom properties), geometry and WeakMap-backed data methods; traversal with selector/function/element matchers; insertion and removal; events with delegation, namespaces, .one() and custom-event payloads; fetch-based $.ajax, $.get, $.post, $.getJSON, .load(), .serialize(), .serializeObject().

Hyper — htmx-style

kj-get/post/put/patch/delete, kj-target, eight kj-swap strategies, kj-trigger (events, delay:, load, revealed, every Ns), kj-confirm, kj-indicator with automatic aria-busy, kj-include, kj-vals, kj-push-url; lifecycle events kj:before/after/error/load; automatic wiring of new content.

Pulse — Alpine-style

kj-data with init(el), kj-text, kj-html, kj-show, kj-model (text, number, range, select, checkbox, radio), @event with .prevent/.stop/.enter/.escape, :attr binding, $.component() with arguments, $.store(), $.reactive().

Motion — GSAP-style

$.to/$.from/$.fromTo with independent transforms, ten easings ($.easings) or custom functions, stagger, Promises; $.timeline() with '<' and '+=N' positions, paused, play(), onComplete; classic fadeIn/fadeOut/fadeToggle/slideDown/slideUp/slideToggle/animate.

Hardening before launch

  • Deep $.extend ignores __proto__, constructor and prototype keys (prototype-pollution fix, with regression test).
  • HTML strings with surrounding whitespace are parsed as HTML, not selectors.
  • Hyper sends URL-encoded bodies (multipart only for file uploads) and includes a named input's own value.
  • kj:after fires before the swap and kj:load reaches document listeners even after outerHTML swaps.
  • Polling stops when its element is removed.
  • kj-model supports radio buttons and accepts programmatic changes on focused fields.
  • Callback-style AJAX no longer reports unhandled promise rejections.
  • .not()/.is() accept functions and elements; .css() reads and writes custom properties without px.
  • Timelines start '<' steps together with the previous step; zero-duration tweens are safe.

Footprint & support

21.6 KB minified, 8.1 KB gzipped, zero dependencies. Chrome/Edge/Firefox 90+, Safari 15+. Tested with 47 unit tests and real-browser checks of every demo on this site.

Report issues and follow future releases on GitHub.