{"id":13764768,"url":"https://github.com/rubiin/ultimate-nest","last_synced_at":"2026-04-25T12:01:14.610Z","repository":{"id":37710904,"uuid":"330174799","full_name":"rubiin/ultimate-nest","owner":"rubiin","description":"Starter template with blog clone as project","archived":false,"fork":false,"pushed_at":"2026-04-22T05:28:51.000Z","size":12644,"stargazers_count":430,"open_issues_count":8,"forks_count":54,"subscribers_count":3,"default_branch":"master","last_synced_at":"2026-04-22T07:32:25.231Z","etag":null,"topics":["hacktoberfest","jwt","mikroorm","nestjs","nestjs-backend","postgresql","typescript","vue"],"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/rubiin.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":"SECURITY.md","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":{"github":["rubiin"],"patreon":null,"open_collective":null,"ko_fi":"rubiin","tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"buy_me_a_coffee":"rubiin","thanks_dev":"rubiin"}},"created_at":"2021-01-16T13:58:35.000Z","updated_at":"2026-04-22T05:27:09.000Z","dependencies_parsed_at":"2024-01-20T11:25:10.563Z","dependency_job_id":"12d8095f-21fb-4e01-85ea-491396a4075d","html_url":"https://github.com/rubiin/ultimate-nest","commit_stats":null,"previous_names":[],"tags_count":76,"template":true,"template_full_name":null,"purl":"pkg:github/rubiin/ultimate-nest","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rubiin%2Fultimate-nest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rubiin%2Fultimate-nest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rubiin%2Fultimate-nest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rubiin%2Fultimate-nest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rubiin","download_url":"https://codeload.github.com/rubiin/ultimate-nest/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rubiin%2Fultimate-nest/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32261124,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T09:15:33.318Z","status":"ssl_error","status_checked_at":"2026-04-25T09:15:31.997Z","response_time":59,"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":["hacktoberfest","jwt","mikroorm","nestjs","nestjs-backend","postgresql","typescript","vue"],"created_at":"2024-08-03T16:00:28.400Z","updated_at":"2026-04-25T12:01:09.590Z","avatar_url":"https://github.com/rubiin.png","language":"TypeScript","funding_links":["https://github.com/sponsors/rubiin","https://ko-fi.com/rubiin","https://buymeacoffee.com/rubiin","https://thanks.dev/rubiin","https://www.buymeacoffee.com/XbgWxt567","https://img.buymeacoffee.com/button-api/?text=Buy"],"categories":["Resources"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"http://nestjs.com/\" target=\"blank\"\u003e\u003cimg src=\"https://i.imgur.com/4xiI9Hu.png\" width=\"620\" alt=\"Nest Logo\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003e ### Blog made using Nestjs + Mikro-orm codebase(backend) containing real world examples (CRUD, auth (password based and oauth), advanced patterns, etc) and batteries included and ever-evolving\n\n\u003cp align=\"center\"\u003e\n\u003cimg alt=\"GitHub package.json version\" src=\"https://img.shields.io/github/package-json/v/rubiin/ultimate-nest\"\u003e\n\u003cimg alt=\"Workflow test\" src=\"https://github.com/rubiin/ultimate-nest/actions/workflows/github-ci.yml/badge.svg\"\u003e\n\u003cimg alt=\"GitHub\" src=\"https://img.shields.io/github/license/rubiin/ultimate-nest\"\u003e\n\u003cimg alt=\"GitHub\" src=\"https://img.shields.io/github/commit-activity/w/rubiin/ultimate-nest\"\u003e\n\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://www.buymeacoffee.com/XbgWxt567\" target=\"_blank\"\u003e\u003cimg src=\"https://cdn.buymeacoffee.com/buttons/v2/default-green.png\" alt=\"Buy Me A Coffee\" style=\"height: 60px !important;width: 217px !important;\" \u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cbr/\u003e\n\nNOTE: Starting April 18,2022 , the repo has ditched most promises for observables. You can check the latest promised\nversion code at\n[commit](https://github.com/rubiin/ultimate-nest/tree/fb06b34f7d36f36195880e600f8f1b5b86f71213)\n\nMore on why observables are better than promises can be\nread [here](https://betterprogramming.pub/observables-vs-promises-which-one-should-you-use-c19aef53c680)\n\n\u003cbr/\u003e\n\n## Table of Contents\n- [Whats included](#Whats-included)\n- [Prerequisites](#prerequisites)\n- [Getting Started](#getting-started)\n- [Available Scripts](#available-scripts)\n- [Setup](#setup)\n- [File Structure](#file-structure)\n- [Authentication](#authentication)\n- [Deployment](#deployment)\n\n## Whats included\n\n- 🌐 [**I18n**](https://en.wikipedia.org/wiki/Internationalization_and_localization) - Internationalization\n- 🧵 [**Stats**](https://github.com/slanatech/swagger-stats/) - Swagger stats for common server metrics\n- 🧵 [**Poolifier**](https://github.com/poolifier/poolifier) - Threads for CPU extensive tasks\n- 💬 [**Twilio**](https://github.com/twilio/twilio-node) - SMS support\n- 📱 [**NestJS**](https://docs.nestjs.com) — Latest version\n- 🎉 [**TypeScript**](https://www.typescriptlang.org/) - Type checking\n- ⚙️ [**Dotenv**](https://github.com/motdotla/dotenv) - Supports environment variables\n- 🗝 [**Authentication**](https://jwt.io/), [RSA256](https://tools.ietf.org/html/rfc7518#section-6.3), [OAuth]([https://oauth.net/](https://docs.nestjs.com/security/authentication) - JWT, RSA256, OAuth\n- 🏬 [**Authorization**](https://github.com/stalniy/casl) - RBAC with casl\n- 🏪 [**MikroORM**](https://mikro-orm.io/) - Database ORM\n- 🏪 [**PostgreSQL**](https://www.postgresql.org/) - Open-Source Relational Database\n- 🧠 [**Configuration**](https://docs.nestjs.com/techniques/configuration) - Single config for all\n- 📃 [**Swagger**](https://swagger.io/) - API Documentation\n- 🐳 [**Docker Compose**](https://docs.docker.com/compose/) - Container Orchestration\n- 🔐 [**Helmet**](https://helmetjs.github.io/) - Secure HTTP headers\n- 📏 [**Oxlint**](https://oxc.rs/docs/guide/usage/linter.html/) —50~100x faster than ESLint 500+ rules and growing\n- ✅ [**Commitlint**](https://commitlint.js.org/) — Checks if your commit messages meet the conventional commit format.\n- 🐺 [**Husky**](https://github.com/typicode/husky) — Helps you create Git hooks easily.\n\n\n## Prerequisites\n\nNodeJS\nhttps://nodejs.org/en/\n\nTypescript\nhttps://www.typescriptlang.org/\n\nPostgresQL\nhttps://www.postgresql.org/\n\nRedis\nhttps://redis.io/\n\nRabbitMQ\nhttps://www.rabbitmq.com\n\n## Getting started\n\n```sh\n\n# 1. Clone the repository or click on \"Use this template\" button.\nnpx degit rubiin/ultimate-nest my-nest-app\n\n# 2. Enter your newly-cloned folder.\ncd ultimate-nest\n\n# 3. Create Environment variables file.\ncp env/.env.sample env/.env.dev\n\n# 4. Install dependencies (preferred: pnpm)\n pnpm install\n npm install\n yarn install\n```\n\u003e [!NOTE]\n\u003e If you face any issues with dependencies when using yarn or npm, stick to pnpm for now\n\n\u003e [!NOTE]\n\u003e Env files are kept in env folder. The config validation allows 4 environment ['dev', 'prod', 'test','stage'].\n\u003e The env file name should be of format .env.[environment] Ex. (.env.dev). The env to use should be provided while running any script as\n\u003e NODE_ENV=dev npm run dev\n\n## Available Scripts\n\n- `npm run start` - Start application\n- `npm run start:dev` - Start application in watch mode\n- `npm run start:prod` - Start built application\n- `npm run start:hmr` - Start application with hot module replacement\n- `npm run lint` - Uses oxlint to lint all the files inside src with config provided in `.oxlintrx.json`\n- `npm run orm migration:create` - Uses Mikroorm to create a migration file\n- `npm run orm migration:up` - This command is used to run availablexisting migration files.\n- `npm run orm migration:down` - This command is used to rollback migration.\n- `npm run orm seeder:run` - This command is used to run existing seeders in `src/common/database`.\n\nAll the scripts require `NODE_ENV` flag\n\nAdditionally, you can also see the scripts in `justfile` which is a cross platform task runner. You can use it by\ninstalling [just](https://github.com/casey/just#packages) and then running `just \u003cscript\u003e`. Ex. `just build`\n\n---\n\n## Setup\n\n- First if you don't want to use any libs from like redis, mailer etc. replace them from the config.module.ts\n  - You will also need to remove the config from `validate.config.ts` from line ` load: []`\n  - Also remove the unwanted config variables from the env file\n\n## Migration and seeding(optional)\n\nMigrations are used to update the database schema. The migration files are stored in `migrations` directory.\n\n```sh\nNODE_ENV=dev npm run orm migration:up # applies migration for dev env\n```\n\nSeeding is used to insert data into the database. The seeding files are stored in `common/database/seeders` directory.\n\n```sh\nUSER_PASSWORD=Test@1234 NODE_ENV=dev npm run orm seeder:run   # seeds data for dev env with all user password set as Test@1234\n```\nSeeding is optional\n\n## Start application\n- `NODE_ENV=dev npm run start`\n- View automatically generated swagger api docs by browsing to `http://localhost:[port]/docs`\n- View automatically generated swagger stats dashboard by browsing to `http://localhost:[port]/stats`. The username and\n  password is the values set in the env file under `SWAGGER_USERNAME` and `SWAGGER_PASS` respectively\n\n## File structure\n\n```text\nultimate-nest\n├── env                                           * Contains all configuration files\n│   └── .env.example                              * Sample configuration file.\n│   └── .env.dev                                  * Configuration file for development environment.\n│   └── .env.prod                                 * Configuration file for production environment.\n│   └── .env.test                                 * Configuration file for test environment.\n├── coverage                                      * Coverage reports after running `npm run test:cov` command.\n├── dist                                          * Optimized code for production after `npm run build` is run.\n├── src\n    └── modules                                   * Folder where specific modules all files are stored\n          └── \u003cmodule\u003e\n      │       └── dto                             * Data Transfer Objects.\n      │       └── \u003cmodule\u003e.controller.ts          * Controller file.\n      │       └── \u003cmodule\u003e.module.ts              * root module file for module.\n      │       └── \u003cmodule\u003e.service.ts             * Service file for \u003cmodule\u003e.\n      │       └── \u003cmodule\u003e.service.spec.ts        * Test file for service.\n      │       └── \u003cmodule\u003e.repository.ts          * Repository file for \u003cmodule\u003e.\n      │       └── \u003cmodule\u003e.repository.spec.ts     * Test file for repository.\n│   └── common                                    * Common helpers function, dto, entity,guards, custom validators,types, exception, decorators etc.\n│   └── __mocks__                                 * Fixtures for unit tests.\n│   └── libs                                      * Resusable pre configured libraries\n│   └── resources                                 * Contains all static resources like ssl, i18n,email templates etc.\n│   └── app.module.ts                             * Root module of the application.\n│   └── main.ts                                   * The entry file of the application which uses the core function NestFactory to create a Nest application instance.\n├── test                                          * End to end test files for the application.\n\n```\n\n# Authentication\n\nThis applications uses JSON Web Token (JWT) to handle authentication. The token is passed with each request using\nthe `Authorization` header with `Token` scheme. The JWT authentication middleware handles the validation and\nauthentication of the token.\n\n# Deployment\n\nYou need to have `docker` and `docker-compose` installed. The image environment variable values can be found at the compose file\n\n```sh\nENV=dev sh ./scripts/deploy.sh   # deploys dev environment (.env.dev used)\nENV=prod sh ./scripts/deploy.sh   # deploys prod environment (.env.prod used)\n```\n\nMore docs found at `docs` folder\n\n\u003ch2 align=\"center\"\u003eDo you use this template?\u003cbr/\u003eDon't be shy to give it a star! ★\u003c/h2\u003e\n\n## Support\n\n\u003ca href=\"https://www.buymeacoffee.com/XbgWxt567\"\u003e\u003cimg src=\"https://img.buymeacoffee.com/button-api/?text=Buy me a coffee\u0026emoji=\u0026slug=XbgWxt567\u0026button_colour=5F7FFF\u0026font_colour=ffffff\u0026font_family=Cookie\u0026outline_colour=000000\u0026coffee_colour=FFDD00\" /\u003e\u003c/a\u003e\n\nAlso if you are into NestJS ecosystem you may be interested in one of my other libs:\n\n[helper-fns](https://github.com/rubiin/helper-fns)\n\n[![GitHub stars](https://img.shields.io/github/stars/rubiin/helper-fns?style=flat-square)](https://github.com/rubiin/helper-fns)\n[![npm](https://img.shields.io/npm/dm/helper-fns?style=flat-square)](https://www.npmjs.com/package/helper-fns)\n\nA collection of helper functions for typescrip development. It includes functions for array,object,string,etc\n\n[nestjs-easyconfig](https://github.com/rubiin/nestjs-easyconfig)\n\n[![GitHub stars](https://img.shields.io/github/stars/rubiin/nestjs-easyconfig?style=flat-square)](https://github.com/NestCrafts/nestjs-easyconfig)\n[![npm](https://img.shields.io/npm/dm/nestjs-easyconfig?style=flat-square)](https://www.npmjs.com/package/nestjs-easyconfig)\n\nPlatform config manager for nestjs. It supports multiple config files and environment variables.\n\n---\n\n[nestjs-minio](https://github.com/rubiin/nestjs-minio)\n\n[![GitHub stars](https://img.shields.io/github/stars/rubiin/nestjs-minio?style=flat-square)](https://github.com/NestCrafts/nestjs-minio)\n[![npm](https://img.shields.io/npm/dm/nestjs-minio?style=flat-square)](https://www.npmjs.com/package/nestjs-sessminioion)\n\nThis is a minio module for Nest.\n\n---\n\n[nestjs-cloudinary](https://github.com/rubiin/nestjs-cloudinary)\n\n[![GitHub stars](https://img.shields.io/github/stars/rubiin/nestjs-cloudinary?style=flat-square)](https://github.com/NestCrafts/nestjs-cloudinary)\n[![npm](https://img.shields.io/npm/dm/nestjs-cloudinary?style=flat-square)](https://www.npmjs.com/package/nestjs-cloudinary)\n\nThis is a cloudinary module for Nest.\n\n---\n\n[nestjs-pgpromise](https://github.com/rubiin/nestjs-pgpromise)\n\n[![GitHub stars](https://img.shields.io/github/stars/rubiin/nestjs-pgpromise?style=flat-square)](https://github.com/NestCrafts/nestjs-pgpromise)\n[![npm](https://img.shields.io/npm/dm/nestjs-pgpromise?style=flat-square)](https://www.npmjs.com/package/nestjs-pgpromise)\n\nA Module for Utilizing Pg-promise with NestJS\n\n---\n\n## Star History\n\n\u003ca href=\"https://star-history.com/#rubiin/ultimate-nest\u0026Timeline\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/svg?repos=rubiin/ultimate-nest\u0026type=Timeline\u0026theme=dark\" /\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/svg?repos=rubiin/ultimate-nest\u0026type=Timeline\" /\u003e\n    \u003cimg alt=\"Star History Chart\" src=\"https://api.star-history.com/svg?repos=rubiin/ultimate-nest\u0026type=Timeline\" /\u003e\n  \u003c/picture\u003e\n\u003c/a\u003e\n\nMade with ❤️ with opensource.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frubiin%2Fultimate-nest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frubiin%2Fultimate-nest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frubiin%2Fultimate-nest/lists"}