TypeScript library starter that works out-of-the-box with Node, Deno, Bun, and the browser. Batteries included: linting, testing, bundling, size-limit, and automated releases.
- Biome: lint and format with a single tool
- Vitest: fast tests with coverage and thresholds
- Size Limit: keep bundles tiny, with CI checks
- tsdown: ESM builds for Node and a separate browser bundle
- CI: lint, typecheck, test, coverage, and size comments/badges
- Release Please: automated release PRs and changelogs
- Commit Linting: conventional commits enforced in CI
- Deno-friendly:
.ts
source imports for direct consumption - Multi-runtime:
src/internal.ts
is runtime-agnostic;src/index.ts
(Node) andsrc/browser.ts
(browser) wire runtime-specific APIs - OIDC + Provenance: publish to npm and JSR via manual CI release
Install dependencies and run scripts:
pnpm i
pnpm lint
pnpm test
pnpm build
Node usage:
import { add, greet, getSecureRandomId } from "@bgub/ts-base";
console.log(add(2, 3));
console.log(greet("Ada"));
console.log(getSecureRandomId());
Browser usage (bundled or via import maps):
import { add, greet, getSecureRandomId } from "@bgub/ts-base/browser";
add(1, 2);
greet("Linus");
getSecureRandomId();
Deno usage (import from src
if desired):
import { add, greet } from "https://jsr.io/@bgub/ts-base/<version>/src/index.ts";
src/internal.ts
: core logic, no Node/browser APIssrc/index.ts
: Node adapter (e.g.,crypto.randomBytes
)src/browser.ts
: browser adapter (e.g.,crypto.getRandomValues
)tsdown.config.ts
: builds Node entry and browsercore
bundlevitest.config.ts
: coverage config and thresholds
- Merge the automated Release PR created by Release Please
- Manually run the "Release" workflow to publish to npm and JSR with provenance
MIT © bgub