Open source collection · Est. 2026

Everything frontend needs

A curated collection of micro-utilities for the web.
Each one solves exactly one frontend problem —
perfectly, with zero dependencies.

Packages published
05 and growing
Total bundle size
~6.1kB gzip
Dependencies
0 always
#
Package
Keywords
Size
Deps
01
scroll-into-view-promise New
Promise-based scrollIntoView. Wraps the native smooth-scroll and resolves when the animation finishes. Finally, a callback.
scroll promise callback
~0.6kB
zero
02
viewport-units-fix Stable
Reliable --vh and --vw CSS variables that actually work on mobile Safari. One script, stops the 100vh problem forever.
css mobile safari
~0.7kB
zero
03
paste-rich Stable
Smart clipboard paste handler. Normalizes paste events into typed payloads: image, file, html, text. No more clipboardData parsing.
clipboard paste files
~0.8kB
zero
04
form-dirty Stable
Unsaved changes detection. Snapshot form state, expose isDirty + changedFields, handle beforeunload. Framework agnostic.
forms state ux
~1.0kB
zero
05
hotkey-hint Stable
Keyboard shortcut manager with a beautiful overlay. Register hotkeys, press ? to reveal. Supports sequences, groups, themes.
keyboard shortcuts overlay
~3kB
zero
01 — Rule

One problem.
One package.

No feature creep. No "while we're at it."
Each utility does exactly one thing
and does it better than a 5-minute
StackOverflow copy-paste ever could.

02 — Rule

Zero deps.
Always.

No lodash. No moment. No anything.
You install the package — not the package
plus a hundred transitive dependencies
you didn't ask for.

03 — Rule

Ships typed.
Works everywhere.

TypeScript-first. ESM + CJS output.
Every package works in React, Vue,
Svelte, vanilla JS, and anywhere
else you're building.

Start with
scroll-into-view-promise

The latest package in the collection.
Promise-based scrollIntoView — wraps the native
smooth-scroll and resolves when it finishes.
One import. Works everywhere.

View documentation
View on npm
Quick start
// 1. Install
npm install scroll-into-view-promise

// 2. Import
import scrollIntoView from 'scroll-into-view-promise';

// 3. Await the scroll
const el = document.getElementById('pricing');
await scrollIntoView(el);
console.log('Scroll complete!');

// With options ✦
await scrollIntoView(el, {
  block: 'center',
  timeout: 5000,
});