Skip to content
15 Actually Useful npm Packages (2026)

15 Actually Useful npm Packages (2026)

DodaTech Updated Jun 20, 2026 4 min read

Every npm list starts with Express, Lodash, and Moment. This one doesn’t. Those are everywhere — you already know them. This list focuses on modern, well-maintained packages (heavily from the unjs ecosystem) that solve real problems you hit daily: validation, bundling, config management, logging, and serialization. Each entry earned its spot by being genuinely useful rather than just popular.

Validation & Parsing

zod — Schema declaration and validation with TypeScript inference. Define a schema once and get both runtime validation and static types. Unlike Joi or Yup, Zod infers TypeScript types automatically so you never maintain duplicate type definitions.

destr — A tiny (200 bytes) utility for safely parsing strings into their native JavaScript types. It handles JSON, numbers, booleans, null, undefined, and NaN without throwing. Perfect for parsing environment variables and query parameters where you don’t know the format ahead of time.

ohash — Ultra-fast hash computation for objects, buffers, and strings. Uses a non-cryptographic algorithm optimized for consistency checks and cache invalidation. Significantly faster than JSON.stringify + hash for object comparison.

Bundling & Building

tsup — Bundle TypeScript libraries with zero configuration. Uses esbuild under the hood for 10-100x faster builds than tsc. Handles CJS, ESM, and dual-package output from a single config. The go-to tool for publishing npm packages in 2026.

Config & Environment

c12 — Universal configuration loader for Node.js. Reads config from multiple sources (package.json, rc files, env vars, CLI flags) with a unified API. Supports TypeScript config files natively and auto-reloads on change. The configuration layer behind modern unjs tools.

rc9 — Read/write .conf files (like .gitconfig or .npmrc) with automatic section parsing. Unlike ini, it handles nested keys, arrays, and preserves formatting on write. Essential for tools that manage user configuration files.

dotenv — Loads .env files into process.env with zero configuration. The standard for managing environment variables across environments. Use with dotenv-expand for variable interpolation.

scule — Case conversion utility that handles every format: camelCase, snake_case, kebab-case, PascalCase, and CONSTANT_CASE. Unlike lodash.camelCase, it correctly handles acronyms and numbers.

Development Utilities

perfect-debounce — A properly typed debounce implementation that handles leading/trailing calls, cancellation, and promise flushing. Unlike naive implementations, it preserves the return type and supports async functions correctly.

consola — Universal console logger with level-based filtering, JSON output, and fancy reporters. Works in Node.js, browsers, and workers. Drop-in replacement for console.log with better DX — colorized output, badge support, and silent mode for tests.

citty — Build beautiful CLI apps with TypeScript-first argument parsing, subcommands, and auto-generated help text. Lighter than Commander, more typed than Yargs. Generates --help output that actually looks good.

hookable — Lightweight hook system for lifecycle events with before/after, parallel, and sequential execution. Lets you add plugins and middleware to any application without coupling. The hook system behind Nuxt and unjs tools.

defu — Deep object merging with array handling and circular reference protection. Unlike Object.assign or spread, it merges nested objects recursively and supports custom merge strategies for different property types.

Error Handling & Data

serialize-error — Converts Error objects to plain serializable objects, preserving the stack trace, name, and custom properties. Essential for logging errors that cross process boundaries, get sent over the network, or stored in databases.

pkg-types — Resolve package.json fields, detect package manager, and read package metadata with full ESM/CJS support. Knows the difference between exports, main, module, and types fields and resolves them correctly.

Which package saves the most time?
Zod. The TypeScript inference alone eliminates hundreds of lines of duplicate type definitions. On top of that, you get runtime validation, so bugs that would take hours to trace get caught instantly.
Are these production-ready?
Every package listed is actively maintained, tested, and used in production by major frameworks (Nuxt, Nitro, H3, and others). The unjs ecosystem packages (c12, destr, consola, citty, hookable, defu, scule, rc9, ohash, pkg-types) are maintained by the same team and follow semver strictly.
What about bundle size?
Destr is ~200 bytes. Ohash, defu, scule, perfect-debounce are under 1 KB each. Zod is the heaviest at ~10 KB gzipped but replaces entire validation libraries. Tsup is a build-time dependency (not bundled). None will bloat your application.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro