A monorepo of small, focused libraries for JavaScript environments — browsers, Node.js, and other modern runtimes.
Everything here is written in TypeScript and ships with type definitions, so you get autocompletion and type safety out of the box whether your own project uses TypeScript or plain JavaScript. The packages are ESM-only, tree-shakeable, and keep external dependencies to a minimum, so you only pay for what you actually import.
Each package is published independently to npm, using the @zemd and @logtown scopes where applicable — pick just the one you need.
| Package | Version | License | Description |
|---|---|---|---|
@zemd/color |
Apache-2.0 |
Typed sRGB, OKLab, and OKLCH color utilities | |
@zemd/std-modules |
BlueOak-1.0.0 |
Standalone ECMAScript modules for diverse use cases | |
@zemd/http-client |
Apache-2.0 |
A lightweight framework to build your custom fetch |
|
@zemd/openapi |
Apache-2.0 |
OpenAPI TypeScript definitions and tools | |
@zemd/testing |
Apache-2.0 |
Focused helpers for Node.js tests and benchmarks | |
@zemd/tsconfig |
MIT |
Shared TypeScript configs with strict defaults | |
logtown |
Apache-2.0 |
Versatile logging wrapper for JavaScript projects | |
@logtown/hono |
Apache-2.0 |
Hono middleware for logging with logtown |
| Package | Version | License | Description |
|---|---|---|---|
@zemd/nestjs-pino-logger |
BlueOak-1.0.0 |
NestJS logger powered by Pino |
| Package | Version | License | Description |
|---|---|---|---|
@zemd/figma-rest-api |
Apache-2.0 |
Lightweight, fetch-based, type-safe Figma REST API client | |
@zemd/flickr-rest-api |
Apache-2.0 |
Flickr API client simplified |
git clone https://github.com/zemd/js.git
cd js
pnpm installA normal install also configures this checkout's local core.hooksPath to
.githooks. CI sets CI=true, so dependency installation there skips local Git
hook configuration.
Note
The repository uses pnpm workspaces. Install it with corepack enable or follow the pnpm installation guide.
The checked-in Dev Container configuration provides the repository's pinned Node.js, pnpm, and zizmor versions. In VS Code, run Dev Containers: Reopen in Container. The first container creation installs the frozen workspace dependencies and the Chromium build used by Playwright tests.
All tasks are orchestrated by Turborepo and run across every workspace package.
| Command | Description |
|---|---|
pnpm test-bench |
Run package benchmarks with Node.js performance APIs |
pnpm build |
Build all packages |
pnpm test |
Run unit tests with Node.js's native test runner |
pnpm test-coverage |
Run unit tests and write native LCOV reports |
pnpm test-browser |
Run browser tests with Playwright |
pnpm test-browser-setup |
Download the Chromium build used by browser tests |
pnpm test-git-hooks |
Test the native Git hook behavior |
pnpm typecheck |
Type-check all packages |
pnpm format |
Format the codebase with oxfmt |
pnpm format-check |
Verify formatting without writing changes |
pnpm lint-fix |
Run type-aware linting and auto-fix with oxlint |
pnpm lint-check |
Run type-aware linting and fail on warnings |
pnpm lint-actions |
Audit GitHub Actions with zizmor |
pnpm lint-publish |
Validate publishable package metadata (publint) |
pnpm pre-commit |
Format, lint-fix, validate, and stage all files |
pnpm pre-push |
Run the complete local pre-push validation graph |
pnpm run git-hooks-install |
Install this checkout's native Git hooks |
When BENCHER_OUTPUT_DIR is set, the selected package benchmarks write namespaced Bencher Metric Format JSON files there instead of console tables. The reusable benchmark workflow uses those files to maintain performance history without changing the local pnpm test-bench experience.
pnpm lint-actions requires zizmor
1.29.0, matching the exact version pinned by CI. Set GH_TOKEN (for example,
from gh auth token) to include online audits when running it locally.
To run a script for a single package, use the workspace filter:
pnpm --filter @zemd/http-client buildTo report a vulnerability, follow SECURITY.md.
Issues and pull requests are welcome. Native hooks install automatically during
pnpm install. The pre-commit hook runs repository-wide lint fixes and
formatting, runs optional workspace pre-commit scripts, then stages all
resulting changes.
The pre-commit and pre-push coordinators are executable extensionless Bash hooks
under .githooks; the installer is .githooks/install.sh.
Packages opt into additional hook validation by defining a pre-commit or
pre-push script in their package.json. Turbo discovers each matching package
task once. These package tasks must be deterministic and read-only; central
format and lint-fix are the only mutating pre-commit tasks. Any future task
with side effects must also disable Turbo caching explicitly.
The pre-push hook runs builds, type checks, publication metadata checks, tests,
and package pre-push tasks. Hooks can be bypassed, so CI remains authoritative.
Before opening a PR, please make sure that
pnpm lint-check, pnpm lint-actions, pnpm format-check, pnpm typecheck,
pnpm build, pnpm test, pnpm lint-publish, and pnpm test-browser all pass.
Each package declares its own license — see the table above and the LICENSE file inside every package directory. Unless stated otherwise, packages are released under Apache-2.0 😇.