{"id":23252706,"url":"https://github.com/liblaf/copier-typescript","last_synced_at":"2026-04-17T03:02:53.770Z","repository":{"id":268845678,"uuid":"905615553","full_name":"liblaf/copier-typescript","owner":"liblaf","description":"Copier template for Bun-first TypeScript libraries with Biome, GitHub Actions CI, release automation, and npm OIDC publishing.","archived":false,"fork":false,"pushed_at":"2026-04-10T21:56:52.000Z","size":200,"stargazers_count":0,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-10T23:25:03.105Z","etag":null,"topics":["biome","bun","continuous-integration","copier","copier-template","github-actions","npm","oidc","release-automation","typescript"],"latest_commit_sha":null,"homepage":null,"language":"Jinja","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/liblaf.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"custom":["https://afdian.com/a/liblaf"]}},"created_at":"2024-12-19T07:27:06.000Z","updated_at":"2026-04-10T21:56:22.000Z","dependencies_parsed_at":"2024-12-19T09:21:31.831Z","dependency_job_id":"52749b3f-d8cc-4230-b181-1c943be7ab87","html_url":"https://github.com/liblaf/copier-typescript","commit_stats":null,"previous_names":["liblaf/copier-typescript"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/liblaf/copier-typescript","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liblaf%2Fcopier-typescript","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liblaf%2Fcopier-typescript/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liblaf%2Fcopier-typescript/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liblaf%2Fcopier-typescript/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/liblaf","download_url":"https://codeload.github.com/liblaf/copier-typescript/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liblaf%2Fcopier-typescript/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31913078,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T18:22:33.417Z","status":"online","status_checked_at":"2026-04-17T02:00:06.879Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["biome","bun","continuous-integration","copier","copier-template","github-actions","npm","oidc","release-automation","typescript"],"created_at":"2024-12-19T10:17:42.759Z","updated_at":"2026-04-17T03:02:53.764Z","avatar_url":"https://github.com/liblaf.png","language":"Jinja","funding_links":["https://afdian.com/a/liblaf"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\" markdown\u003e\n\n![Copier TypeScript](https://socialify.git.ci/liblaf/copier-typescript/image?custom_language=TypeScript\u0026description=1\u0026forks=1\u0026issues=1\u0026language=1\u0026logo=https%3A%2F%2Fraw.githubusercontent.com%2Fcopier-org%2Fcopier%2Frefs%2Fheads%2Fmaster%2Fimg%2Flogo.svg\u0026name=1\u0026owner=1\u0026pattern=Transparent\u0026pulls=1\u0026stargazers=1\u0026theme=Auto)\n\n[![Made with Copier](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/copier-org/copier/master/img/badge/badge-black.json)](https://github.com/copier-org/copier)\n[![Bun](https://img.shields.io/badge/Bun-000000?logo=bun)](https://bun.sh)\n[![Checked with Biome](https://img.shields.io/badge/Checked_with-Biome-60a5fa?style=flat\u0026logo=biome)](https://biomejs.dev)\n[![Release / PR](https://github.com/liblaf/copier-typescript/actions/workflows/release-pr.yaml/badge.svg)](https://github.com/liblaf/copier-typescript/actions/workflows/release-pr.yaml)\n[![Shared / MegaLinter](https://github.com/liblaf/copier-typescript/actions/workflows/shared-mega-linter.yaml/badge.svg)](https://github.com/liblaf/copier-typescript/actions/workflows/shared-mega-linter.yaml)\n\n[Changelog](https://github.com/liblaf/copier-typescript/blob/main/CHANGELOG.md) · [Report Bug](https://github.com/liblaf/copier-typescript/issues) · [Request Feature](https://github.com/liblaf/copier-typescript/issues)\n\n![Rule](https://cdn.jsdelivr.net/gh/andreasbm/readme/assets/lines/rainbow.png)\n\n\u003c/div\u003e\n\nCopier template for TypeScript packages that layers on top of `gh:liblaf/copier-shared` and `gh:liblaf/copier-release`, generating a Bun-first library setup with Biome, GitHub Actions, and npm publishing via OIDC.\n\n## ✨ Features\n\n- 🧱 **Composable template stack:** Designed to be applied after `gh:liblaf/copier-shared` and `gh:liblaf/copier-release`, reusing shared answers and release automation instead of rebuilding them from scratch.\n- ⚡ **Bun-first package workflow:** Generates `package.json` scripts for `build`, `lint`, `test`, and `type-check`, uses `bunup` for builds, and adds a `mise` enter hook that runs `bun install`.\n- 🧼 **Opinionated library defaults:** Ships `biome.jsonc` and `tsconfig.json` that extend `@liblaf/config`, marks the package as ESM, and publishes only `dist/` with npm provenance enabled.\n- 🧪 **CI that matches real projects:** The generated `typescript-test.yaml` packs the package on pushes and pull requests, runs tests only when `*.test.ts` files exist, uploads coverage and test results to Codecov, and runs `tsc --noEmit`.\n- 🚀 **Release automation for npm:** Conventional commits feed the release PR flow from `copier-release`, while the generated `typescript-release.yaml` builds release artifacts, publishes to npm with OIDC, and uploads release assets.\n- 🛡️ **Safer template application:** Skips overwriting existing `package.json`, `tsconfig.json`, `biome.jsonc`, `.gitignore`, and VS Code settings when those files are already present.\n\n## 📦 Installation\n\n\u003e [!IMPORTANT]\n\u003e This template is meant to layer on top of `gh:liblaf/copier-shared` and `gh:liblaf/copier-release`.\n\n```bash\ncopier copy --trust gh:liblaf/copier-shared my-package\ncopier copy --trust gh:liblaf/copier-release my-package\ncopier copy --trust gh:liblaf/copier-typescript my-package\n```\n\nWhen prompted, `package_name` defaults to `@\u003cgithub_user\u003e/\u003cproject_name_slug\u003e`.\n\n## 🚀 Quick Start\n\n```bash\ncd my-package\nbun install\nbun run lint\nbun run test\nbun run type-check\nbun run build\n```\n\nGenerated projects are ESM-first with `\"type\": \"module\"`. If you use `mise`, entering the project also adds `node_modules/.bin` to `PATH` and runs `bun install` automatically.\n\n## 🔄 Release Flow\n\n1. Write conventional commits on `main`.\n2. `release-pr.yaml` computes the next version, updates `CHANGELOG.md`, and opens a release PR.\n3. Merging that PR triggers `release-draft.yaml`, which tags the release and creates the GitHub release. If immutable releases are enabled, it creates a draft first.\n4. Published releases trigger `typescript-release.yaml`, which packs the project, publishes to npm with OIDC and provenance, and uploads the built tarball as a release asset.\n5. `release-publish.yaml` runs hourly and publishes drafts older than 6 hours when immutable releases are enabled.\n\n\u003e [!TIP]\n\u003e After scaffolding a new repository, use `setup-npm-trusted-publish` so the `npm` environment and trusted publisher are ready for OIDC-based publishing.\n\n## ⌨️ Local Development\n\n```bash\ngit clone https://github.com/liblaf/copier-typescript.git\ncd copier-typescript\ncopier copy --trust gh:liblaf/copier-shared ../copier-typescript-sandbox\ncopier copy --trust gh:liblaf/copier-release ../copier-typescript-sandbox\ncopier copy --trust . ../copier-typescript-sandbox\n```\n\nMost day-to-day changes live in `copier.yaml` and `template/`. Recopying into a scratch repository is the quickest way to verify the generated package layout and workflows.\n\n## 🤝 Contributing\n\nIssues and pull requests are welcome, especially when they tighten the generated package surface, improve the release flow, or keep the Bun and Biome defaults sharp.\n\n[![PR WELCOME](https://img.shields.io/badge/%F0%9F%A4%AF%20PR%20WELCOME-%E2%86%92-ffcb47?labelColor=black\u0026style=for-the-badge)](https://github.com/liblaf/copier-typescript/pulls)\n\n[![Contributors](https://contrib.nn.ci/api?repo=liblaf/copier-typescript)](https://github.com/liblaf/copier-typescript/graphs/contributors)\n\n## 🔗 More Copier Templates\n\n- **[Shared](https://github.com/liblaf/copier-shared)** - Base repository hygiene, shared automation, MegaLinter, and recurring maintenance workflows.\n- **[Release](https://github.com/liblaf/copier-release)** - Conventional-commit release PRs, changelog generation, draft releases, and scheduled publish automation.\n- **[Python](https://github.com/liblaf/copier-python)** - A modern Python project template with `mise`, Ruff, pytest, docs, and GitHub Actions.\n- **[Rust](https://github.com/liblaf/copier-rust)** - A Rust project template with cross-compilation, CI, and release automation.\n\n---\n\n#### 📝 License\n\nCopyright © 2024 [liblaf](https://github.com/liblaf). \u003cbr /\u003e\nThis project is [MIT](https://github.com/liblaf/copier-typescript/blob/main/LICENSE) licensed.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fliblaf%2Fcopier-typescript","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fliblaf%2Fcopier-typescript","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fliblaf%2Fcopier-typescript/lists"}