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
03 and growing
Total bundle size
~5kB gzip
Dependencies
0 always
#
Package
Keywords
Size
Deps
01
hotkey-hint New
Keyboard shortcut manager with a beautiful overlay. Register hotkeys, press ? to reveal. Supports sequences, groups, themes.
keyboard shortcuts overlay
~3kB
zero
02
form-dirty New
Unsaved changes detection. Snapshot form state, expose isDirty + changedFields, handle beforeunload. Framework agnostic.
forms state ux
~1.0kB
zero
03
paste-rich New
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
viewport-units-fix Soon
Reliable --vh and --vw CSS variables that actually work on mobile Safari. One script, stops the 100vh problem forever.
css mobile safari
~0.5kB
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
paste-rich

The latest package in the collection.
Smart clipboard paste handler — normalizes
every paste into { type, data, files }.
Images, files, HTML, text. One callback.

View documentation
View on npm
Quick start
// 1. Install
npm install paste-rich

// 2. Import & init
import PasteRich from 'paste-rich';
const pr = new PasteRich({
  target: '#editor',
  onPaste: (result) => {
    console.log(result.type);  // 'image' | 'file' | 'html' | 'text'
    console.log(result.data);  // File or string
    console.log(result.files); // File[]
  },
});

// Clean up when done ✦
pr.destroy();