{"id":16195164,"url":"https://github.com/janik6n/typescript-starter","last_synced_at":"2026-02-14T10:11:18.519Z","repository":{"id":211601512,"uuid":"729550727","full_name":"janik6n/typescript-starter","owner":"janik6n","description":"Batteries included TypeScript starter for 2025","archived":false,"fork":false,"pushed_at":"2025-09-20T11:29:05.000Z","size":142,"stargazers_count":7,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-20T13:14:50.792Z","etag":null,"topics":["docker","esbuild","eslint","github-actions","nodejs","prettier","starter","typescript","vitest","vscode"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/janik6n.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}},"created_at":"2023-12-09T15:31:47.000Z","updated_at":"2025-09-20T11:21:25.000Z","dependencies_parsed_at":null,"dependency_job_id":"b92c9fd7-2d3e-4b83-a364-165592c44d18","html_url":"https://github.com/janik6n/typescript-starter","commit_stats":{"total_commits":6,"total_committers":1,"mean_commits":6.0,"dds":0.0,"last_synced_commit":"770c32f334cd1d84f0eec2b79c5db5c0bc5a7ba2"},"previous_names":["janik6n/typescript-starter"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/janik6n/typescript-starter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janik6n%2Ftypescript-starter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janik6n%2Ftypescript-starter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janik6n%2Ftypescript-starter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janik6n%2Ftypescript-starter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/janik6n","download_url":"https://codeload.github.com/janik6n/typescript-starter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janik6n%2Ftypescript-starter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29442399,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-14T07:24:13.446Z","status":"ssl_error","status_checked_at":"2026-02-14T07:23:58.969Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["docker","esbuild","eslint","github-actions","nodejs","prettier","starter","typescript","vitest","vscode"],"created_at":"2024-10-10T08:26:28.290Z","updated_at":"2026-02-14T10:11:18.514Z","avatar_url":"https://github.com/janik6n.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![TypeScript](https://shields.io/badge/TypeScript-3178C6?logo=TypeScript\u0026logoColor=FFF\u0026style=flat-square)\n![Node.js](https://shields.io/badge/Node.js-417e38?logo=nodedotjs\u0026logoColor=FFF\u0026style=flat-square)\n![ESLint](https://shields.io/badge/ESLint-4b32c3?logo=eslint\u0026logoColor=FFF\u0026style=flat-square)\n![Prettier](https://shields.io/badge/Prettier-f8bc45?logo=prettier\u0026logoColor=FFF\u0026style=flat-square)\n![Vitest](https://shields.io/badge/Vitest-acd268?logo=vitest\u0026logoColor=FFF\u0026style=flat-square)\n![Esbuild](https://shields.io/badge/Esbuild-ffcf00?logo=esbuild\u0026logoColor=FFF\u0026style=flat-square)\n![Docker](https://shields.io/badge/Docker-1D63ED?logo=Docker\u0026logoColor=FFF\u0026style=flat-square)\n![VS Code](https://shields.io/badge/VS%20Code-0078d4?style=flat-square)\n![GitHub](https://shields.io/badge/GitHub-000?logo=github\u0026logoColor=FFF\u0026style=flat-square)\n[![Build Status](https://github.com/janik6n/typescript-starter/workflows/Code%20quality%20checks/badge.svg)](https://github.com/janik6n/typescript-starter/actions)\n\n# TypeScript Starter 🔋\n\nThis is my batteries included TypeScript starter updated for 2026, with:\n- 🟩 [Node.js](https://nodejs.org/) 24 (LTS)\n- ✏️ [TypeScript](https://www.typescriptlang.org/) 5.9\n- 📚 ECMAScript Modules\n- ⚙️ NPM package manager\n- ⚗️ code linting \u0026 formatting with [ESLint](https://eslint.org/) \u0026 [Prettier](https://prettier.io/)\n- 🚥 testing with [Vitest](https://vitest.dev/)\n- 🔬 [VS Code](https://code.visualstudio.com/) configuration for debugging and testing\n- 🔥 hot reloading\n- 📦 production bundling with [esbuild](https://esbuild.github.io/)\n- 🐳 production ready [Docker](https://www.docker.com/) image build\n- 🔁 GitHub Actions workflow to run code quality checks and tests\n\nThis starter is more geared towards backend than frontend use.\n\n## ✅ Prerequisites\n\n- Make sure you have Node.js 24 installed. This is built, configured and tested with `Node.js 24`.\n- If you want to use VS Code, make sure the following extensions are installed and configured:\n  - [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint)\n  - [Vitest](https://marketplace.visualstudio.com/items?itemName=vitest.explorer)\n\n## 📌 Getting started\n\nHow to use this template?\n\n1. Make sure prerequisites are met.\n2. Download the repository as zip so you don't have to deal with git history of this repository.\n3. Delete `package-lock.json`.\n3. Replace `janik6n` in `package.json` with your own username, along with other info.\n3. Install dependencies by running `npm install` on the project root directory.\n4. Start developing. See below for available scripts.\n\n## Available scripts\n\nFollowing scripts have been configured, and they should give ideas for further development.\n\n### ⚙️ Run development server\n\nTo run TypeScript to JavaScript transpiling and to run transpiled `./dist/index.mjs` run `npm run dev`. Watch mode (a.k.a. *hot reloading* 🔥) is available with `npm run dev:watch`. Development serving is handled with [tsx](https://tsx.is/).\n\n### 🚥 Run tests\n\nTest are run with [Vitest](https://vitest.dev/), and different test scenarios are handled with [Test Projects](https://vitest.dev/guide/projects).\n\nTo run tests, you have a several of options:\n- Run all tests with `npm run test`.\n- Include coverage report with `npm run test:cov`.\n- Run unit tests with `npm run test:unit`. This runs all tests which are in files with name `*.unit.test.ts`.\n- Run integration tests with `npm run test:integration`. This runs all tests which are in files with name `*.integration.test.ts`.\n- Run end-to-end (e2e) tests with `npm run test:e2e`. This runs all tests which are in files with name `*.e2e.test.ts`.\n- Run unit and integration tests in watch mode with `npm run test:watch` in separate terminal session than your development server.\n- Run unit and integration tests in CI environment with `npm run test:ci`. Note: this script exists so it's easy to configure which tests are run in CI.\n\n### ⚗️ Lint source code\n\nLint a.k.a. check the formatting of the source code with `npm run lint`.\n\nThe idea is to run [ESLint](https://eslint.org/) \u0026 [Prettier](https://prettier.io/) on VS Code as you code, so this script is mostly for code quality checks in CI. Prettier is run as ESLint plugin.\n\n### 🛠️ Format source code\n\nFormat the source code with [Prettier](https://prettier.io/) by running `npm run format`.\n\n### 📦 Build production bundle\n\nBuild the production bundle with [esbuild](https://esbuild.github.io/) by running `npm run build`. Build is configured in `build.js`.\n\nBuild command explained: `\"build\": \"rimraf ./dist \u0026\u0026 npx tsc --noEmit \u0026\u0026 node build.js\"`:\n- `rimraf ./dist`: delete ./dist folder\n- `npx tsc --noEmit`: run type checks\n- `node build.js`: build and bundle with esbuild, which does not do type checking, but it creates nice small bundles\n\nSometimes it's necessary to see the built app with just transpiling without bundling. This can be accomplished with `npm run build:tsc`.\n\n### 🚀 Run production bundle\n\nRun the built app with `npm run start`.\n\n### 🐳 Check container build for issues\n\nRun `npm run check:container` to check Docker build for issues, without actually building the image. `Dockerfile` is configured so that failing checks will exit with error status. See [Build checks | Docker Docs](https://docs.docker.com/build/checks/) for more info.\n\n### 🐳 Build as container\n\nRun `npm run build:container` to build the app as Docker container. Multi-stage build is used to minimize the production image size. Debian-based image is used to minimize the risk of compatibility issues.\n\n### 🐳 Run as container\n\nRun the containerized app with `npm run start:container`.\n\n## 🔬 Available VS Code configurations\n\nThere are two debugger launch configurations included:\n- `Debug Current File` is meant to debug the currently active TypeScript file.\n- `Debug Current Test File` is same, but for test files.\n\n## 🐛 Known issues\n\nNone as of now. 🦗\n\n## ✂️ What’s not inside\n\nHere are some things that *could be included* in a starter, but are not in this one:\n- Monorepo setup\n- Any particular app’s source code\n- Git pre-commit hooks\n\n## 📚 Further reading\n\n### TypeScript\n\n- https://www.typescriptlang.org/\n\n### ESLint \u0026 Prettier\n\n- https://eslint.org/\n- https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint\n- https://prettier.io/\n- https://github.com/prettier/eslint-plugin-prettier\n- https://typescript-eslint.io/\n\n### Vitest\n\n- https://vitest.dev/\n- https://vitest.dev/guide/projects\n\n### VS Code TS debugging \u0026 Vitest\n\n- https://code.visualstudio.com/docs/typescript/typescript-debugging\n- https://code.visualstudio.com/docs/editor/testing\n- https://code.visualstudio.com/docs/editor/debugging#_launch-configurations\n- https://marketplace.visualstudio.com/items?itemName=vitest.explorer\n- https://vitest.dev/guide/debugging\n\n### Tsx\n\n- https://tsx.is/\n\n### Esbuild\n\n- https://esbuild.github.io/\n\n### Docker \u0026 Node.js\n\n- https://hub.docker.com/_/node\n- https://snyk.io/blog/choosing-the-best-node-js-docker-image/\n- https://docs.docker.com/build/checks/\n\n### GitHub\n\n- https://github.com/features/actions\n\n## 🔁 Changelog\n\n[CHANGELOG](CHANGELOG.md)\n\n## ⚖️ License\n\nMIT [License](LICENSE). Copyright janik6n.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjanik6n%2Ftypescript-starter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjanik6n%2Ftypescript-starter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjanik6n%2Ftypescript-starter/lists"}