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
04 and growing
Total bundle size
~5.5kB gzip
Dependencies
0 always
#
Package
Keywords
Size
Deps
01
viewport-units-fix New
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
02
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
03
form-dirty Stable
Unsaved changes detection. Snapshot form state, expose isDirty + changedFields, handle beforeunload. Framework agnostic.
forms state ux
~1.0kB
zero
04
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
viewport-units-fix

The latest package in the collection.
Reliable vh/vw on mobile — injects CSS variables
that match the real visible viewport.
One import. Works everywhere.

View documentation
View on npm
Quick start
// 1. Install
npm install viewport-units-fix

// 2. Import & init
import ViewportUnitsFix from 'viewport-units-fix';
new ViewportUnitsFix();

// 3. Use in CSS
// .hero { height: calc(var(--vh) * 100); }
// .sidebar { height: var(--dvh); }

// With options ✦
const vf = new ViewportUnitsFix({
  prefix: 'app-',
  debounce: 50,
  onUpdate: (v) => console.log(v.dvh),
});