{"id":43007816,"url":"https://github.com/vihuvac/expressure","last_synced_at":"2026-01-31T05:03:58.982Z","repository":{"id":326023670,"uuid":"1079494404","full_name":"vihuvac/expressure","owner":"vihuvac","description":"Expressure is a modern, opinionated boilerplate for building scalable NodeJS APIs with Express.js, TypeScript, OpenAPI, and Docker. Whether you're crafting a monolith or spinning up microservices, Expressure gives you a clean, consistent foundation with smart defaults and zero friction.","archived":false,"fork":false,"pushed_at":"2025-12-21T02:32:53.000Z","size":364,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-22T22:53:38.245Z","etag":null,"topics":["expressjs","micro","nodejs","openapi","restful-api","swagger"],"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/vihuvac.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","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":"2025-10-19T23:03:39.000Z","updated_at":"2025-12-21T02:39:12.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/vihuvac/expressure","commit_stats":null,"previous_names":["vihuvac/expressure"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/vihuvac/expressure","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vihuvac%2Fexpressure","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vihuvac%2Fexpressure/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vihuvac%2Fexpressure/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vihuvac%2Fexpressure/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vihuvac","download_url":"https://codeload.github.com/vihuvac/expressure/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vihuvac%2Fexpressure/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28929865,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T04:05:25.756Z","status":"ssl_error","status_checked_at":"2026-01-31T04:02:35.005Z","response_time":128,"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":["expressjs","micro","nodejs","openapi","restful-api","swagger"],"created_at":"2026-01-31T05:03:57.911Z","updated_at":"2026-01-31T05:03:58.973Z","avatar_url":"https://github.com/vihuvac.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./docs/images/expressure-logo.webp\" width=\"150px\" alt=\"Expressure Logo\" style=\"border-radius: 6px;\" /\u003e\n  \u003ch1\u003eExpressure\u003c/h1\u003e\n  \u003cp\u003e\n    \u003cb\u003eA modern, production-ready boilerplate for building scalable Node.js APIs.\u003c/b\u003e\n  \u003c/p\u003e\n  \u003cp\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Node.js-v20+-green.svg\" alt=\"Node.js Version\" /\u003e\n    \u003cimg src=\"https://img.shields.io/badge/TypeScript-5.x-blue.svg\" alt=\"TypeScript Version\" /\u003e\n    \u003cimg src=\"https://img.shields.io/badge/License-MIT-yellow.svg\" alt=\"License\" /\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Docker-Ready-blue\" alt=\"Docker Ready\" /\u003e\n    \u003cbr/\u003e\n    \u003cimg src=\"https://github.com/vihuvac/expressure/actions/workflows/test.yml/badge.svg\" alt=\"Tests Status\" /\u003e\n    \u003cimg src=\"https://codecov.io/gh/vihuvac/expressure/branch/main/graph/badge.svg\" alt=\"Coverage\" /\u003e\n    \u003cbr/\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Security%20Policy-Active-success\" alt=\"Security Policy\" /\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Code%20of%20Conduct-Contributor%20Covenant-yellow\" alt=\"Code of Conduct\" /\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n---\n\n## 📖 Overview\n\n**Expressure** is a robust and opinionated boilerplate designed to streamline\nthe development of scalable `Node.js` APIs. Built with **Express.js 5**,\n**TypeScript**, and **OpenAPI 3**, it provides a solid foundation for both\nmonolithic applications and microservices.\n\nWe've handled the heavy lifting—configuration, structure, and tooling—so you can\nfocus on building features with zero friction.\n\n## ✨ Key Features\n\n- **🚀 Modern Stack**: Built on Express.js 5 and Node.js 20+.\n- **💪 Type-Safe**: Full TypeScript support for robust and maintainable code.\n- **📄 OpenAPI 3 First**: API-first design with auto-generated Swagger\n  documentation.\n- **🐳 Docker Ready**: Pre-configured `Dockerfile` and `docker-compose` for\n  seamless containerization.\n- **🛡️ Secure**: Integrated `Helmet` for security headers and `Cors`\n  configuration.\n- **📝 Logging**: High-performance logging with `Pino`.\n- **🧪 Testing**: Comprehensive testing setup with `Jest`.\n- **🧹 Code Quality**: Linting and formatting with `ESLint`, `Prettier`, and\n  `Husky` hooks.\n- **⚙️ Configurable**: Environment-based configuration management.\n\n## 🛠️ System Requirements\n\nBefore you begin, ensure you have the following installed:\n\n- **Node.js**: v20.x or higher\n- **PNPM**: v10.23.0 or higher (Recommended package manager)\n- **Docker**: v27.x or higher (Optional, but recommended for containerization)\n\n## 🚀 Getting Started\n\n### 1. Clone the Repository\n\n```bash\ngit clone git@github.com:vihuvac/expressure.git\ncd expressure\n```\n\n### 2. Configure Environment\n\nSet up your environment variables by copying the template:\n\n```bash\ncp .env.template .env\n```\n\n\u003e **IMPORTANT**\n\u003e\n\u003e Ensure `NODE_ENV` is set to `development` for local work. Adjust other\n\u003e settings in `.env` or `config/development.json` as needed.\n\n### 3. Install Dependencies\n\n```bash\npnpm install --frozen-lockfile\n```\n\n### 4. Run the Application\n\n#### Development Mode\n\nStarts the application with hot-reloading.\n\n```bash\npnpm dev\n```\n\n#### Debug Mode\n\nRuns the app with inspection enabled on port 9888.\n\n```bash\npnpm debug\n```\n\n#### Production Build\n\nBuilds and starts the compiled JavaScript application.\n\n```bash\npnpm build\npnpm start\n```\n\n## 🐳 Docker Support\n\nExpressure comes with first-class Docker support.\n\n### Start with Docker Compose\n\n```bash\npnpm docker:up\n# OR\ndocker compose up -d\n```\n\nThis will start the API and detach it to the background.\n\n### View Logs\n\n```bash\ndocker logs -f expressure\n```\n\n### Stop Containers\n\n```bash\npnpm docker:down\n```\n\n## 📚 API Documentation\n\nWhen the application is running (in non-production environments), you can access\nthe interactive API documentation via Swagger UI.\n\n**URL**: `http://localhost:9889/api/docs`\n\n![Swagger UI](./docs/images/swagger-specs.webp)\n\nGenerate comprehensive technical documentation from your code comments using\nJSDoc. Documentation is automatically versioned and saved to the `docs`\ndirectory.\n\n```bash\npnpm docs:generate\n```\n\n![JSDocs](./docs/images/expressure-jsdoc.webp)\n\n## 📂 Project Structure\n\n```text\nsrc/\n├── app/\n│   ├── constants/    # Global constants and enums\n│   ├── controllers/  # Route controllers (request handlers)\n│   ├── helpers/      # Utility functions and helpers\n│   ├── libs/         # Third-party library wrappers/configurations\n│   ├── middlewares/  # Express middlewares\n│   ├── specs/        # OpenAPI specifications\n│   └── app.ts        # App entry point and configuration\n├── tests/            # Unit and integration tests\n└── app.ts            # Main entry file\n```\n\n## 🧪 Running Tests\n\nEnsure your code is reliable by running the test suite.\n\n```bash\n# Run all tests\npnpm test\n\n# Run tests in watch mode\npnpm test:debug\n\n# Generate coverage report\npnpm test:coverage\n```\n\n## 🤝 Contributing\n\nContributions are welcome! Check out the\n[Contribution Guide](./CONTRIBUTING.md).\n\n## 📄 License\n\nThis project is licensed under the **MIT License**. See the [LICENSE](./LICENSE)\nfile for more details.\n\n## Additional Resources\n\n### Project\n\n- [Changelog](./CHANGELOG.md)\n- [Security Policy](./SECURITY.md)\n- [Code of Conduct](./CODE_OF_CONDUCT.md)\n\n### Tools\n\n- [JSDoc](https://github.com/jsdoc/jsdoc)\n- [OpenAPI Specification v3](https://swagger.io/specification/v3/)\n- [swagger-client](https://github.com/swagger-api/swagger-js)\n- [swagger-ui-express](https://github.com/scottie1984/swagger-ui-express)\n- [Express OpenAPI Validator](https://cdimascio.github.io/express-openapi-validator-documentation/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvihuvac%2Fexpressure","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvihuvac%2Fexpressure","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvihuvac%2Fexpressure/lists"}