Catalog npm
PACKAGE EXPLORERView in registry

1o1-utils

npm

Fast, tree-shakeable, zero-dependency TypeScript utility library. Most utilities under 500 B gzipped; full bundle ~13 kB gzipped. Fully typed, benchmarked for performance.

accentbetweenbifurcatebind-keybindkeyboundcachecapitalizechunkclampclean-objectclipboardclock-formatclone-deepcompactcompose
All keywords (135)
concurrencyconstructcopycopy-to-clipboardcrushcrypto-randomcurrency-parsedebouncedeburrdeep-equaldeep-mergedevicediacriticdot-notationduratione164emailemail-validatorentropyescape-regexescape-regexpesmfisher-yatesflattenflatten-objectflowformat-secondsfunctionalgenerate-stringgetgroup-byhh-mm-sshotkeyin-rangeis-equalis-mobileis-nilis-valid-emailis-valid-phoneis-valid-urljavascriptkeyboard-shortcutkeymapmap-keysmap-valuesmemomemoizemicro-modulesmm-ssmobilenanoid-alternativenormalize-emailnullishnumeric-extractomitonceparallelparse-numberparse-timepartitionpassword-strengthphonephone-validatorpickpiperandom-stringrandomizerangerange-checkregex-escaperemove-accentsremove-falsyrepeatreplacerestrictretrysafelyseconds-to-time-formatsecure-randomsemaphoresequencesetshallow-equalshannonshufflesleepslugifysort-bysplitstring-strengthswaptabletthrottletime-format-to-secondstimesto-numbertokentransposetree-shakeabletruncatetry-catchtryitttl-cachetypescriptunflattenunzipupdate-arrayurl-validatoruser-agentutilitiesutilityutilsvalidate-emailvalidate-phonevalidate-urlwith-timeoutzero-dependencieszipfunctions
Versions collected10
Direct dependencies32From release 1.10.1
Last observed20 Oct, 18:34 UTC

README

Current package documentation

1o1-utils logo

1o1-utils

Lightweight, tree-shakeable, zero-dependency TypeScript utilities. Pay only for what you import.

CI npm version bundle size license OpenSSF Scorecard


Features

  • Tree-shakeable — every utility ships from its own subpath; bundlers drop everything you don't import.
  • Zero dependencies — no transitive bloat, no supply-chain risk.
  • TypeScript-first — full type inference and strict null safety out of the box.
  • Tiny per-utility footprint — most utilities are under 500 B brotlied; the largest is ~1.2 kB.
  • Benchmarked — measured against lodash, radash, es-toolkit, and native JavaScript — up to 11× faster on the slowest competitor.
  • Interactive playground — every utility has a "Try it" block on its docs page that runs 1o1-utils directly from npm.

Install

pnpm add 1o1-utils
npm install 1o1-utils
yarn add 1o1-utils

Usage

Import everything from the main entry:

import { chunk, pick, slugify, retry } from "1o1-utils";

Or import individual modules for minimal bundles:

import { chunk } from "1o1-utils/chunk";
import { pick } from "1o1-utils/pick";

Utilities

Arrays

UtilityDescriptionImport
arrayToHashConvert an array to a keyed object1o1-utils/array-to-hash
chunkSplit an array into fixed-size chunks1o1-utils/chunk
diffElements in array A not in array B1o1-utils/diff
groupByGroup array items by a key1o1-utils/group-by
partitionSplit into [matches, rest] by predicate1o1-utils/partition
rangeGenerate a numeric range as an array1o1-utils/range
replaceReplace element(s) by predicate (immutable)1o1-utils/replace
shuffleFisher-Yates shuffle (non-mutating)1o1-utils/shuffle
sortBySort an array by a key1o1-utils/sort-by
timesInvoke fn N times and collect results1o1-utils/times
uniqueDeduplicate an array (optionally by key)1o1-utils/unique
unzipSplit an array of tuples into separate arrays1o1-utils/unzip
zipCombine arrays into tuples by index1o1-utils/zip

Numbers

UtilityDescriptionImport
clampClamp a value to [min, max]1o1-utils/clamp
inRangeCheck if a number is in a range1o1-utils/in-range
randomIntCSPRNG random integer in a range1o1-utils/random-int

Objects

UtilityDescriptionImport
cloneDeepDeep clone (objects, arrays, Maps, Sets, etc.)1o1-utils/clone-deep
compactRemove falsy values (with keep exceptions)1o1-utils/compact
deepMergeRecursively merge objects1o1-utils/deep-merge
defaultsFill undefined keys with defaults1o1-utils/defaults
defaultsDeepRecursive defaults1o1-utils/defaults-deep
getRead a nested value via dot notation1o1-utils/get
isCircularDetect circular references in objects/arrays/Maps/Sets1o1-utils/is-circular
isEmptyCheck if a value is empty1o1-utils/is-empty
mapKeysTransform object keys via an iteratee1o1-utils/map-keys
mapValuesTransform object values via an iteratee1o1-utils/map-values
omitRemove keys from an object1o1-utils/omit
omitByRemove entries by predicate1o1-utils/omit-by
pickExtract keys from an object1o1-utils/pick
pickByKeep entries by predicate1o1-utils/pick-by
setSet a nested value immutably via dot notation1o1-utils/set

Strings

UtilityDescriptionImport
capitalizeCapitalize the first letter1o1-utils/capitalize
deburrStrip diacritics (accent-fold)1o1-utils/deburr
escapeRegExpEscape regex metacharacters1o1-utils/escape-reg-exp
generateStringCryptographically-secure random string generator1o1-utils/generate-string
normalizeEmailTrim, lowercase, optional plus-strip1o1-utils/normalize-email
slugifyConvert to a URL-friendly slug1o1-utils/slugify
transformCaseChange string casing (camel, snake, etc.)1o1-utils/transform-case
truncateTruncate a string with a suffix1o1-utils/truncate

Async

UtilityDescriptionImport
debounceDebounce function calls1o1-utils/debounce
retryRetry failed async operations with backoff1o1-utils/retry
safelyWrap a function to return [error, result]1o1-utils/safely
sleepPromise-based delay1o1-utils/sleep
throttleThrottle function calls1o1-utils/throttle
waitForConditionPoll a predicate until truthy or timeout1o1-utils/wait-for-condition
withTimeoutRace a promise against a timeout1o1-utils/with-timeout

Comparisons

UtilityDescriptionImport
deepEqualRecursive structural equality1o1-utils/deep-equal
isNilnull or undefined check1o1-utils/is-nil
shallowEqualTop-level entry equality1o1-utils/shallow-equal

Formatters

UtilityDescriptionImport
secondsToTimeFormatFormat seconds as MM:SS / H:MM:SS1o1-utils/seconds-to-time-format
timeFormatToSecondsParse MM:SS / H:MM:SS into seconds1o1-utils/time-format-to-seconds

Functions

UtilityDescriptionImport
memoMemoize a function with optional TTL1o1-utils/memo
onceRun only once, cache the first result1o1-utils/once
pipeCompose functions left-to-right1o1-utils/pipe

Validators

UtilityDescriptionImport
isValidEmailHTML5 + RFC 5321 email check1o1-utils/is-valid-email
isValidPhoneE.164 international phone check1o1-utils/is-valid-phone
isValidUrlWHATWG URL parseable check1o1-utils/is-valid-url

Browser

UtilityDescriptionImport
bindKeyKeyboard shortcuts (combos + sequences)1o1-utils/bind-key
copyToClipboardClipboard API + execCommand fallback1o1-utils/copy-to-clipboard

Bundle size

Run pnpm size to see per-utility brotli sizes locally. Sample from the latest release:

UtilityBrotli size
isNil36 B
clamp150 B
chunk199 B
deepEqual739 B
bindKey1.05 kB
isValidPhone1.19 kB
Whole library (all utilities)~11.6 kB brotli / ~13 kB gzipped

Tree-shaking removes everything you don't import — typical real-world bundles add a few hundred bytes per utility, not the whole 13 kB.

Benchmarks

All utilities are benchmarked against lodash, radash, es-toolkit, and native JavaScript.

Utilityvs lodashvs radashvs native
arrayToHash / keyByon paron paron par
chunk4.9× fasteron paron par
groupBy1.3× fasteron par1.1× slower
unique (by key)2.7× faster1.6× fasteron par
pick3.3× fasteron par—

Run pnpm bench to reproduce locally. See full benchmark results.

Documentation

Full API reference, interactive playground, and migration guides at pedrotroccoli.github.io/1o1-utils.

Every utility page includes a Try it block — Sandpack-powered, runs 1o1-utils straight from npm in your browser. No install needed to experiment.

Contributing

Contributions are welcome! Check out the Contributing Guide to get started.

License

MIT — Pedro Troccoli

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Versions 10

Collected releases
VersionPublishedDirect dependenciesOpen version
1.10.1Registry latest15 Jun 202632
1.10.012 May 202631
1.9.03 May 202623
1.8.03 May 202618
1.7.129 Apr 202618
1.7.024 Apr 202618
1.5.017 Apr 202617
1.4.015 Apr 202617
1.1.021 Aug 20257
1.0.129 Jun 20250

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

PENDING
pedrotroccoli/1o1-utils

Shared repository data · GitHub

License detected in repository
Not collected

Repository

PENDING
pedrotroccoli/better-utils

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 18:34 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:f31ff00c2b3b8f9d942744fc4bdca7f50ddfa43cadacdb3b582b15095bd43db8