A modern, well-configured starter template for creating TypeScript npm packages. This template provides a solid foundation with best practices and essential tooling for TypeScript package development.
- π¦ Modern build setup with tsup
- π₯ ESM and CommonJS support
- π TypeScript with strict mode
- π§ͺ Testing with Jest
- π Code coverage reporting
- π API documentation with TypeDoc
- β¨ Code formatting with Prettier
- π¨ Linting with ESLint
- π Continuous Integration with GitHub Actions
- π Conventional commits with commitlint
- πͺ Git hooks with husky
- π² Tree-shakeable exports
- π¦ Optimized npm package exports
- π€ Automated dependency updates with Renovate
- Node.js >= 22.14.0
- npm >= 10.0.0
- Use this template by clicking the "Use this template" button on GitHub or clone it directly:
git clone https://github.com/imgarylai/ts-package-starter.git my-package
cd my-package-
Update the package information:
- Modify
package.jsonwith your package name, description, author, etc. - Update this README.md with your package's information
- Update the LICENSE file if needed
- Modify
-
Install dependencies:
npm install- Start developing:
npm run devThis is an example of how your package could be used once you publish it. Update this section with your own package's usage:
// This is just a placeholder example - replace with your own package's usage
import { YourFunction } from "your-package-name";
// Use your package
const result = YourFunction();- Clone the repository:
git clone https://github.com/imgarylai/ts-package-starter.git
cd ts-package-starter- Install dependencies:
npm install- Start developing:
npm run devnpm run build- Build the package with tsupnpm run dev- Watch mode for developmentnpm test- Run testsnpm run test:coverage- Run tests with coveragenpm run lint- Lint the codenpm run type-check- Check typesnpm run docs- Generate documentationnpm run docs:watch- Generate documentation in watch modenpm run clean- Clean build outputsnpm run prepare- Install git hooks
.
βββ src/ # Source code
β βββ index.ts # Main entry point
β βββ index.test.ts # Tests
βββ .github/ # GitHub configuration
βββ .husky/ # Git hooks
βββ dist/ # Built files (generated)
βββ docs/ # Generated documentation
βββ coverage/ # Test coverage reports
βββ node_modules/ # Dependencies
- Write your code in the
srcdirectory - Write tests in
*.test.tsfiles - Run tests with
npm test - Build your package with
npm run build
This package uses semantic-release for automated publishing based on conventional commit messages. The process is fully automated and will:
- Determine the next version number based on commit messages
- Generate release notes
- Update the CHANGELOG.md
- Create a GitHub release
- Publish to npm
The release process is triggered by commits to the main branch. The version bump is determined by your commit messages:
fix: ...- Patch release (1.0.0 β 1.0.1)feat: ...- Minor release (1.0.0 β 1.1.0)BREAKING CHANGE: ...in commit body - Major release (1.0.0 β 2.0.0)feat!: ...- Major release with breaking change (1.0.0 β 2.0.0)
Examples:
# Patch release
git commit -m "fix: correct network timeout issue"
# Minor release
git commit -m "feat: add new API endpoint"
# Major release
git commit -m "feat!: redesign public API
BREAKING CHANGE: The entire public API has been redesigned"To enable automated publishing, you need to:
-
Create an npm account if you don't have one
-
Create an npm access token:
- Go to npmjs.com and log in
- Click on your profile picture β "Access Tokens"
- Click "Generate New Token" (select "Automation" type)
- Copy the token
-
Add the npm token to your GitHub repository:
- Go to your GitHub repository settings
- Click on "Secrets and variables" β "Actions"
- Click "New repository secret"
- Name:
NPM_TOKEN - Value: Your npm access token
- Click "Add secret"
- Write your code and commit using conventional commit messages
- Push to the main branch
- semantic-release will automatically:
- Analyze commit messages
- Bump version
- Generate changelog
- Create GitHub release
- Publish to npm
Note: Only commits to the main branch trigger releases. When working on features, use feature branches and pull requests.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes using conventional commits (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project uses Conventional Commits. Examples:
feat: add new featurefix: resolve bug issuedocs: update READMEchore: update dependencies
The project uses tsup for building, which provides:
- Multiple format outputs (ESM, CommonJS)
- TypeScript declaration files
- Source maps
- Tree shaking
- Minification
This project uses TypeDoc for generating API documentation. The documentation is automatically built and deployed to GitHub Pages on every push to the main branch.
To generate documentation locally:
# Generate documentation
npm run docs
# Watch mode for documentation
npm run docs:watchThe documentation will be generated in the docs directory.
The documentation is automatically deployed to GitHub Pages at: https://imgarylai.github.io/ts-package-starter
Features of the documentation:
- Full API reference
- Type information
- Search functionality
- Version information
- Integration with README
- Examples and usage
To set up GitHub Pages for your documentation:
- Go to your GitHub repository settings
- Navigate to "Pages" under "Code and automation"
- Under "Build and deployment":
- Source: Select "GitHub Actions"
- Branch: Leave as default (gh-pages will be created automatically)
The documentation will be automatically built and deployed when:
- You push to the main branch
- The GitHub Actions workflow completes successfully
You can also manually trigger the documentation build:
- Go to the "Actions" tab in your repository
- Select the "Documentation" workflow
- Click "Run workflow"
The documentation is configured in typedoc.json. Key features:
- Excludes private and protected members
- Includes version information
- Validates links and exports
- Uses the default theme
- Integrates with the README
This project uses Renovate for automated dependency updates. The configuration includes:
- Automatic merging of minor and patch updates
- Dependencies are updated every weekend
- Updates are automatically rebased
- Non-major dependencies are grouped together
- Node.js version updates are disabled (managed manually)
The Renovate bot will automatically create pull requests for dependency updates according to this schedule and configuration. This helps keep your dependencies up-to-date while minimizing maintenance overhead.
This project is licensed under the MIT License - see the LICENSE file for details.
Gary Lai - @imgarylai