ts-library

Use when authoring TypeScript libraries or npm packages - covers project setup, package.json exports, build tooling (tsdown/unbuild), API design patterns, type inference tricks, testing, and publishing to npm. Use when bundling, configuring dual CJS/ESM output, or setting up release workflows.

By onmax · 1,992 installs

npx skills add onmax/nuxt-skills --skill ts-library

Source repository · Upstream listing

TypeScript Library Development Patterns for authoring high quality TypeScript libraries, extracted from studying unocss, shiki, unplugin, vite, vitest, vueuse, zod, trpc, drizzle orm, and more. When to Use Starting a new TypeScript library (single or monorepo) Setting up package.json exports for dual CJS/ESM Configuring tsconfig for library development Choosing build tools (tsdown, unbuild) Designing type safe APIs (builder, factory, plugin patterns) Writing advanced TypeScript types Setting up vitest for library testing Configuring release workflow and CI For Nuxt module development: use nuxt modules skill Quick Reference Working on... Load file New project setup [references/project setup.md](references/project setup.md) Package exports [references/package exports.md](references/package exports.md) tsconfig options [references/typescript config.md](references/typescript config.md) Build configuration [references/build tooling.md](references/build tooling.md) ESLint config [references/eslint config.md](references/eslint config.md) API design patterns [references/api design.md](references/api design.md) Type inference tricks [references/type patterns.md](references/type patterns.md) Testing setup [references/testing.md](references/testing.md) Release workflow [references/release.md](references/release.md) CI/CD setup [references/ci workflows.md](references/ci workflows.md) Loading Files Consider loading these reference files based on your task: [ ] [references/project setup.md](references/project setup.md) if starting a new TypeScript library project [ ] [references/package exports.md](references/package exports.md) if configuring package.json exports or dual CJS/ESM [ ] [references/typescript config.md](references/typescript config.md) if setting up or modifying tsconfig.json [ ] [references/build tooling.md](references/build tooling.md) if configuring tsdown, unbuild, or build scripts [ ] [references/eslint config.md](references/eslint config.md) if setting up ESLint for library development [ ] [references/api design.md](references/api design.md) if designing public APIs, builder patterns, or plugin systems [ ] [references/type patterns.md](references/type patterns.md) if working with advanced TypeScript types or type inference [ ] [references/testing.md](references/testing.md) if setting up vitest or writing tests for library code [ ] [references/release.md](references/release.md) if configuring release workflow or versioning [ ] [references/ci workflows.md](references/ci workflows.md) if setting up GitHub Actions or CI/CD pipelines DO NOT load all files at once. Load only what's relevant to your current task. New Library Workflow 1. Create project structure → load [references/project setup.md](references/project setup.md) 2. Configure package.json exports → load [references/package exports.md](references/package exports.md) 3. Set up build with tsdown → load [references/build tooling.md](references/build tooling.md) 4. Verify build: pnpm build && pnpm pack dry run — check output includes .mjs , .cjs , .d.ts 5. Add tests → load [references/testing.md](references/testing.md) 6. Configure release → load [references/release.md](references/release.md) Quick Start Key Principles ESM first: "type": "module" with .mjs outputs Dual format: always support both CJS and ESM consumers moduleResolution: "Bundler" for modern TypeScript tsdown for most builds, unbuild for complex cases Smart defaults: detect environment, don't force config Tree shakeable: lazy getters, proper sideEffects: false Token efficiency: Main skill ~300 tokens, each reference ~800 1200 tokens