-
route(fn, { private: true }) for pages that depend on the visitor. The HTML
cache is bypassed, cache.html patterns can no longer turn caching on for that route, and the response is sent with private, no-store, Vary: Cookie and no ETag.
-
A runtime guard against identity leaks: when a cacheable route reads
Cookie, Authorization or a session field, the rendered HTML is never stored. In development the request fails with an explanation, in production it is served with no-store and logged.
-
fragment() for layout-less partial responses, with no-store and cache
bypass built in.
-
CSRF protection. Cross-site state-changing requests are rejected based on
Origin and Sec-Fetch-Site; requests carrying neither header still pass, so webhooks keep working. An optional double-submit token layer is enabled with security.csrf.token and rendered into forms by the new csrfField() helper.
-
Signed cookie helpers under jskelet/cookies: parseCookies(),
setCookie(), clearCookie(), setSignedCookie(), getSignedCookie(), randomToken() and safeEqual(). Defaults are HttpOnly, SameSite=Lax and Secure outside development.
-
A security configuration section
trustProxy, cookieSecret and csrf.
-
seeOther() for the post/redirect/get flow, which needs 303 rather than the
method-preserving 307 that redirect() sends.
-
Island cleanup. A mount() function may return a teardown callback; it is now
stored and called by the new unmount(root) export when the subtree leaves the DOM.
-
Client helpers for partial updates: swap() and startSwapLinks() for
fetching and replacing a region, enhanceForm() and startForms() for submitting forms without a full page load while keeping the no-JavaScript path working.
-
A fourth example, examples/dashboard: sign-in with a signed cookie session,
a private page, a paginated table fragment, a CSRF-protected mutation and an island with cleanup, covered by its own smoke.mjs.
-
An npm version badge in the README, linking to the package page.
-
An English edition of the documentation under docs/en/, mirroring every
chapter of the Turkish docs/.
-
The dev overlay now compares the installed version against the latest tag on
npm: the Server tab shows the version, marks an update chip when a newer release exists and offers the upgrade command. The lookup is cached for six hours, never blocks the server and can be turned off with JSKELET_VERSION_CHECK=0.