{"id":20525806,"url":"https://github.com/expressive-tea/expresive-tea","last_synced_at":"2026-02-25T17:12:33.350Z","repository":{"id":37016128,"uuid":"172819087","full_name":"Expressive-Tea/expresive-tea","owner":"Expressive-Tea","description":"A Simple, Clean, Flexible and Modulable web framework project, based on Express and Typescript","archived":false,"fork":false,"pushed_at":"2024-04-25T05:06:21.000Z","size":2333,"stargazers_count":94,"open_issues_count":8,"forks_count":9,"subscribers_count":4,"default_branch":"develop","last_synced_at":"2024-04-26T04:32:04.344Z","etag":null,"topics":["dependency-injection","descriptive-decorators","expressjs","middlewares","rest-api","restful-api","typescript"],"latest_commit_sha":null,"homepage":"https://expressive-tea.io","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Expressive-Tea.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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}},"created_at":"2019-02-27T01:23:21.000Z","updated_at":"2024-06-18T08:52:50.443Z","dependencies_parsed_at":"2024-03-28T14:02:36.790Z","dependency_job_id":"860109ec-e859-4e2d-b4c9-df83e135d6fb","html_url":"https://github.com/Expressive-Tea/expresive-tea","commit_stats":null,"previous_names":["zero-oneit/expresive-tea"],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Expressive-Tea%2Fexpresive-tea","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Expressive-Tea%2Fexpresive-tea/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Expressive-Tea%2Fexpresive-tea/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Expressive-Tea%2Fexpresive-tea/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Expressive-Tea","download_url":"https://codeload.github.com/Expressive-Tea/expresive-tea/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230462906,"owners_count":18229864,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["dependency-injection","descriptive-decorators","expressjs","middlewares","rest-api","restful-api","typescript"],"created_at":"2024-11-15T23:09:45.580Z","updated_at":"2026-02-25T17:12:33.342Z","avatar_url":"https://github.com/Expressive-Tea.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@expressive-tea/core\"\u003e\n  \u003cimg alt=\"npm version\" src=\"https://img.shields.io/npm/v/@expressive-tea/core?style=flat-square\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@expressive-tea/core\"\u003e\n  \u003cimg alt=\"downloads\" src=\"https://img.shields.io/npm/dw/@expressive-tea/core?style=flat-square\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://snyk.io//test/github/Expressive-Tea/expresive-tea?targetFile=package.json\"\u003e\n  \u003cimg alt=\"vulnerabilities\" src=\"https://img.shields.io/snyk/vulnerabilities/github/expressive-tea/expresive-tea?style=flat-square\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/Expressive-Tea/expresive-tea\"\u003e\n  \u003cimg alt=\"coverage\" src=\"https://img.shields.io/codecov/c/github/expressive-tea/expresive-tea?label=coverage\u0026style=flat-square\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://travis-ci.org/Expressive-Tea/expresive-tea\"\u003e\n  \u003cimg alt=\"build\" src=\"https://ci.zero-oneit.systems/buildStatus/icon?job=Expressive+Tea\u0026style=flat-square\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/Expressive-Tea/expresive-tea/stargazers\"\u003e\n  \u003cimg alt=\"stars\" src=\"https://img.shields.io/github/stars/Expressive-Tea/expresive-tea?style=flat-square\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/Expressive-Tea/expresive-tea/blob/main/LICENSE\"\u003e\n  \u003cimg alt=\"license\" src=\"https://img.shields.io/github/license/Expressive-Tea/expresive-tea?style=flat-square\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cbr /\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/Expressive-Tea/expresive-tea\"\u003e\n    \u003cimg src=\"images/logo.png\" alt=\"Logo\" width=\"160\" /\u003e\n  \u003c/a\u003e\n\n  \u003ch1 align=\"center\"\u003eExpressive Tea\u003c/h1\u003e\n\n  \u003cp align=\"center\"\u003e\n    \u003cstrong\u003eA modern, TypeScript-first framework for building scalable Node.js applications\u003c/strong\u003e\n    \u003cbr /\u003e\n    \u003cem\u003eClean architecture • Dependency Injection • Decorator-driven • Express-powered\u003c/em\u003e\n    \u003cbr /\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"https://zero-oneit.github.io/expresive-tea/\"\u003e\u003cstrong\u003e📚 Documentation\u003c/strong\u003e\u003c/a\u003e\n    ·\n    \u003ca href=\"https://codesandbox.io/s/expressive-tea-2kmg7?fontsize=14\u0026hidenavigation=1\u0026theme=dark\"\u003e\u003cstrong\u003e🚀 Live Demo\u003c/strong\u003e\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/Expressive-Tea/expresive-tea/issues\"\u003e\u003cstrong\u003e🐛 Report Bug\u003c/strong\u003e\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/Expressive-Tea/expresive-tea/issues\"\u003e\u003cstrong\u003e💡 Request Feature\u003c/strong\u003e\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/p\u003e\n\n---\n\n\u003e [!IMPORTANT]\n\u003e ### 📦 Package Renamed: `@expressive-tea/core`\n\u003e \n\u003e **Expressive Tea has a new home on npm!** Starting with v2.0.0, install using:\n\u003e \n\u003e ```bash\n\u003e npm install @expressive-tea/core\n\u003e ```\n\u003e \n\u003e **Legacy package `@zerooneit/expressive-tea` will be maintained until April 30, 2026** for security patches only. Please migrate to `@expressive-tea/core` as soon as possible.\n\u003e \n\u003e **Why the change?**\n\u003e - ✨ Better namespace organization (`@expressive-tea/*`)\n\u003e - 🌍 Community-focused ownership\n\u003e - 🚀 Clearer project identity\n\u003e \n\u003e **Migration is simple:** Just update your `package.json` and imports remain the same!\n\u003e ```diff\n\u003e - \"dependencies\": { \"@zerooneit/expressive-tea\": \"^1.2.0\" }\n\u003e + \"dependencies\": { \"@expressive-tea/core\": \"^2.0.0\" }\n\u003e ```\n\n---\n\n\u003e [!CAUTION]\n\u003e ### ⚠️ CRITICAL: v1.x Security Notice\n\u003e \n\u003e **All versions 1.x are DEPRECATED and UNSUPPORTED** as of January 27, 2026.\n\u003e \n\u003e **v1.3.x Beta** - 🔴 **CRITICAL SECURITY VULNERABILITY** - DO NOT USE  \n\u003e Contains critical cryptography flaws in Teapot/Teacup gateway. If you're using this, **STOP IMMEDIATELY** and upgrade to v2.0.0.\n\u003e \n\u003e **v1.2.x Production** - 🟡 No crypto issues, but **deprecated** (InversifyJS v6 EOL)\n\u003e \n\u003e **👉 Upgrade to v2.0.0 NOW** - See [Migration Guide](docs/MIGRATION_GUIDE_v2.md)\n\n---\n\n## ⚡ Quick Start\n\n```bash\n# Install the new package\nnpm install @expressive-tea/core\n\n# Or with yarn\nyarn add @expressive-tea/core\n```\n\n```typescript\nimport { ServerSettings, Route, Get, Boot } from '@expressive-tea/core';\n\n@ServerSettings({ port: 3000 })\nclass App extends Boot {}\n\n@Route('/hello')\nclass HelloController {\n  @Get('/')\n  sayHello() {\n    return { message: 'Hello, World! 🍵' };\n  }\n}\n\nnew App().start();\n// 🎉 Server running on http://localhost:3000\n```\n\n**[Try it live on CodeSandbox →](https://codesandbox.io/s/expressive-tea-2kmg7?fontsize=14\u0026hidenavigation=1\u0026theme=dark)**\n\n---\n\n## 🎯 Why Expressive Tea?\n\n### The Problem\nBuilding Node.js applications is powerful, but messy. You get a blank canvas with Express—no structure, no conventions, just middleware chaos. Sound familiar?\n\n### The Solution\n**Expressive Tea** brings the elegance of modern frameworks to Node.js, without the bloat. Think NestJS simplicity meets Express flexibility.\n\n### 🌟 What Makes It Special\n\n| Feature | What You Get |\n|---------|-------------|\n| 🎨 **Clean Architecture** | Decorators organize your code beautifully—no more spaghetti routes |\n| 🔌 **Plugin Everything** | Share database configs, auth, websockets across projects |\n| 💉 **Smart DI** | Singleton, Transient, Scoped services—InversifyJS under the hood |\n| 🛡️ **Type-Safe** | Full TypeScript strict mode—catch bugs before they ship |\n| 🔒 **Secure by Default** | AES-256-GCM + HKDF crypto, built-in security best practices |\n| ⚡ **Production Ready** | 92%+ test coverage, battle-tested in real applications |\n| 🎯 **Express Compatible** | Use ANY Express middleware—gradual migration friendly |\n| 📦 **Zero Lock-in** | BYOA (Bring Your Own Architecture)—we don't force opinions |\n\n---\n\n## 🚀 What's New in v2.0\n\n**Major security and architecture improvements!**\n\n```diff\n+ ✅ Security: Fixed critical crypto vulnerabilities (AES-256-GCM + HKDF)\n+ ✅ Type Safety: Full TypeScript strict mode support\n+ ✅ DI: Scoped dependency injection (Singleton/Transient/Scoped)\n+ ✅ Health Checks: Built-in health endpoints for Kubernetes/monitoring\n+ ✅ Environment: .env file support with @Env decorator\n+ ✅ Performance: Native utilities, removed lodash dependencies\n+ ✅ ESLint: Migrated to ESLint v9 flat config\n+ ✅ Quality: 95%+ coverage, all tests passing\n```\n\n**⚠️ Breaking Changes:**\n- Cryptography format changed (must re-encrypt data)\n- TypeScript strict mode enabled\n- **Node.js 20+ required** (Node.js 18 reached EOL April 2025)\n- Express 5.x required\n- ESLint v9 (flat config)\n\n**[📖 Full Changelog](CHANGELOG.md)** • **[🔄 Migration Guide](docs/MIGRATION_GUIDE_v2.md)**\n\n---\n\n## 💡 Features That'll Make You Smile\n\n### 🎨 Decorator-Driven Development\n```typescript\n@Route('/api/users')\nclass UserController {\n  @Get('/:id')\n  async getUser(@Param('id') id: string) {\n    return this.userService.findById(id);\n  }\n\n  @Post('/')\n  async createUser(@Body() data: CreateUserDto) {\n    return this.userService.create(data);\n  }\n}\n```\n\n### 🔌 Pluggable Architecture\n```typescript\nimport { AuthPlugin } from '@my-org/auth-plugin';\nimport { DatabasePlugin } from '@my-org/db-plugin';\n\n@ServerSettings({\n  port: 3000,\n  plugins: [AuthPlugin, DatabasePlugin]\n})\nclass App extends Boot {}\n```\n\n### 💉 Dependency Injection\n```typescript\n@injectable()\nclass UserService {\n  constructor(\n    @inject(TYPES.Database) private db: Database,\n    @inject(TYPES.Logger) private logger: Logger\n  ) {}\n}\n```\n\n### 🎯 Type-Safe Everything\n```typescript\n// Generics everywhere\nclass ApiResponse\u003cT\u003e {\n  constructor(\n    public data: T,\n    public status: number\n  ) {}\n}\n\n@Get('/users')\ngetUsers(): ApiResponse\u003cUser[]\u003e {\n  return new ApiResponse(users, 200);\n}\n```\n\n### 🏥 Built-in Health Checks\n```typescript\n@HealthCheck({\n  checks: [\n    {\n      name: 'database',\n      check: async () =\u003e {\n        const isConnected = await db.ping();\n        return { status: isConnected ? 'pass' : 'fail' };\n      },\n      critical: true, // Blocks readiness probe if fails\n      timeout: 5000\n    }\n  ]\n})\nclass App extends Boot {}\n\n// Endpoints:\n// GET /health       - Detailed health status\n// GET /health/live  - Liveness probe (K8s)\n// GET /health/ready - Readiness probe (K8s)\n```\n\n### 🌍 Environment Variable Support\n```typescript\n// Load from .env files\n@Env({ path: '.env', required: ['DATABASE_URL', 'API_KEY'] })\n@Env({ path: '.env.local', override: true, silent: true })\nclass App extends Boot {}\n\n// In your .env:\n// DATABASE_URL=postgres://localhost:5432/mydb\n// API_KEY=\"secret-key\"\n```\n\n### 🎯 Type-Safe Environment Variables (v2.0.1+)\n```typescript\nimport { z } from 'zod';\n\nconst EnvSchema = z.object({\n  PORT: z.string().transform(Number),\n  DATABASE_URL: z.string().url(),\n  API_KEY: z.string().min(32)\n});\n\ntype Env = z.infer\u003ctypeof EnvSchema\u003e;\n\n@Env\u003cEnv\u003e({\n  transform: (env) =\u003e EnvSchema.parse(env),\n  onTransformError: 'throw' // Fail fast on invalid env\n})\nclass App extends Boot {\n  constructor() {\n    super();\n    const env = Settings.getInstance().getEnv\u003cEnv\u003e();\n    console.log(env.PORT); // Type: number (validated!)\n  }\n}\n```\n\n### 📄 Configuration Files (v2.0.1+)\n```yaml\n# .expressive-tea.yaml (YAML support!)\nport: 3000\nsecurePort: 4443\n\ndatabase:\n  host: localhost\n  port: 5432\n\n# Comments supported!\ncache:\n  enabled: true\n  ttl: 3600\n```\n\n**File Priority**: `.expressive-tea.yaml` \u003e `.expressive-tea.yml` \u003e `.expressive-tea` (JSON)\n\n---\n\n## 📦 Installation \u0026 Setup\n\n### Prerequisites\n\n- **Node.js** ≥ 20.0.0\n- **TypeScript** ≥ 5.0.0\n- **Express** ≥ 5.0.0\n\n\u003e **Note:** Node.js 18 support was dropped in v2.0.0 as it reached End-of-Life in April 2025. We recommend using Node.js 20 LTS or Node.js 22 for the best experience and security updates.\n\n### Configure TypeScript\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"ES2017\",\n    \"module\": \"commonjs\",\n    \"experimentalDecorators\": true,\n    \"emitDecoratorMetadata\": true,\n    \n    // Recommended for maximum safety\n    \"strict\": true,\n    \"strictNullChecks\": true,\n    \"noImplicitAny\": true\n  }\n}\n```\n\n### Install\n\n```bash\n# npm\nnpm install @expressive-tea/core reflect-metadata\n\n# yarn\nyarn add @expressive-tea/core reflect-metadata\n```\n\n---\n\n## Local staging with Verdaccio\n\nIf you want to test publishing locally before pushing to the public registry, use a local Verdaccio instance as a staging registry.\n\nQuick steps:\n\n1. Start Verdaccio (Docker):\n\n```bash\ndocker run -d --rm --name verdaccio-expressive-tea -p 4873:4873 verdaccio/verdaccio:latest\n```\n\n2. Point npm to local registry and publish:\n\n```bash\n# point npm to local registry\nnpm set registry http://localhost:4873\n\n# publish (from package root)\nnpm publish --registry http://localhost:4873\n\n# restore default registry\nnpm set registry https://registry.npmjs.org/\n```\n\n3. Optional: Use the repo-provided Verdaccio config for deterministic behavior:\n\n```bash\ndocker run -d --rm --name verdaccio-expressive-tea -p 4873:4873 \\\n  -v $(pwd)/.docs/verdaccio/config.yaml:/verdaccio/conf/config.yaml \\\n  verdaccio/verdaccio:latest\n```\n\nNotes:\n- Default URL: http://localhost:4873\n- Container name: verdaccio-expressive-tea (the agent checks for this name before starting a new container)\n- Anonymous publishing is enabled in the example config (local only). Do not expose to public networks.\n- The config permits overwriting the same package version for easy iterative testing.\n\n\n### Your First App\n\n**1. Create your server:**\n```typescript\n// server.ts\nimport 'reflect-metadata';\nimport { ServerSettings, Boot } from '@expressive-tea/core';\n\n@ServerSettings({\n  port: 3000,\n  controllers: [HelloController]\n})\nclass MyApp extends Boot {}\n\nexport default MyApp;\n```\n\n**2. Add a controller:**\n```typescript\n// controllers/hello.controller.ts\nimport { Route, Get } from '@expressive-tea/core';\n\n@Route('/hello')\nexport class HelloController {\n  @Get('/')\n  sayHello() {\n    return { message: 'Hello, Expressive Tea! 🍵' };\n  }\n}\n```\n\n**3. Start it up:**\n```typescript\n// main.ts\nimport MyApp from './server';\n\nconst app = new MyApp();\napp.start().then(() =\u003e {\n  console.log('🚀 Server is running!');\n});\n```\n\n**[📚 Full Tutorial →](https://zero-oneit.github.io/expresive-tea/)**\n\n---\n\n## 🎓 Learn More\n\n### 📖 Documentation\n- [Complete Guide](https://zero-oneit.github.io/expresive-tea/) - Full documentation\n- [API Reference](https://zero-oneit.github.io/expresive-tea/api/) - Complete API docs\n- [Examples](https://github.com/Expressive-Tea/expressive-tea-sandbox) - Sample projects\n\n### 🆕 v2.0.1 Features\n- [Configuration Files Guide](docs/configuration-files.md) - YAML/JSON config support\n- [Environment Variables Guide](docs/env-decorator.md) - Type-safe env with Zod\n\n### 🔄 Migration \u0026 Upgrading\n- [Migration Guide v1 → v2](docs/MIGRATION_GUIDE_v2.md) - Step-by-step upgrade\n- [Release Notes v2.0](docs/RELEASE_NOTES_v2.0.0.md) - What's new\n- [Deprecation Notice](docs/DEPRECATION_NOTICE.md) - v1.x timeline\n\n### 🛡️ Security\n- [Security Policy](SECURITY.md) - Vulnerability reporting\n- [Changelog](CHANGELOG.md) - Version history\n\n---\n\n## 🤝 Contributing\n\nWe love contributions! Whether it's bug fixes, features, or docs.\n\n**Quick links:**\n- [Contributing Guide](CONTRIBUTING.md) - How to contribute\n- [Code of Conduct](CODE_OF_CONDUCT.md) - Community guidelines\n- [Issues](https://github.com/Expressive-Tea/expresive-tea/issues) - Report bugs or request features\n\n```bash\n# Get started\ngit clone https://github.com/Expressive-Tea/expresive-tea.git\ncd expresive-tea\nyarn install\nyarn test\n```\n\n### 🤖 AI-Assisted Development \u0026 Vibe Coding\n\n**We welcome AI-assisted contributions!** Whether you're using GitHub Copilot, Cursor, Claude, or other AI coding assistants, we embrace the future of collaborative development.\n\n**⚠️ IMPORTANT: AI-Generated Code Requirements**\n\nIf you're using AI tools for code generation, you **MUST**:\n\n1. **📖 Follow Repository Guidelines**\n   - ✅ Read and strictly adhere to [`AGENTS.md`](AGENTS.md) - Agent-specific coding rules\n   - ✅ Read and strictly adhere to [`CLAUDE.md`](CLAUDE.md) - Claude AI guidelines\n   - ✅ These files contain critical project conventions, style guides, and quality standards\n\n2. **👨‍💻 Human Review is MANDATORY**\n   - ✅ **All AI-generated code MUST be reviewed by a human developer** before creating a pull request\n   - ✅ Understand the code completely—don't submit code you can't explain\n   - ✅ Test thoroughly (aim for 95%+ coverage)\n   - ✅ Verify the code follows our architectural patterns and best practices\n\n3. **✅ Quality Standards**\n   - ✅ All tests must pass (`yarn test`)\n   - ✅ Linting must pass (`yarn linter:ci`)\n   - ✅ TypeScript must compile without errors (`yarn build`)\n   - ✅ Code must match our existing patterns and conventions\n   - ✅ Documentation must be updated (JSDoc, README, CHANGELOG)\n\n4. **📝 PR Transparency**\n   - ✅ Disclose AI assistance in your pull request description\n   - ✅ Example: \"This PR was developed with assistance from Claude/Copilot/Cursor\"\n   - ✅ Highlight any sections that were fully AI-generated for extra review\n\n**Why These Rules?**\n\n- 🛡️ **Quality Assurance** - AI can make subtle mistakes humans catch\n- 🎯 **Consistency** - Ensures code matches our architectural vision\n- 📚 **Knowledge Transfer** - Reviewers understand your contribution\n- 🔒 **Security** - Prevents AI from introducing vulnerabilities\n- 🤝 **Collaboration** - Maintains clear communication in the codebase\n\n**Vibe Coding Best Practices:**\n\n```typescript\n// ✅ GOOD: AI-generated, reviewed, and refined by human\n@Route('/api/users')\nclass UserController {\n  @Get('/:id')\n  async getUser(@Param('id') id: string): Promise\u003cUser\u003e {\n    // Human: Added validation per AGENTS.md security guidelines\n    if (!id || !validator.isUUID(id)) {\n      throw new BadRequestException('Invalid user ID');\n    }\n    return this.userService.findById(id);\n  }\n}\n\n// ❌ BAD: AI-generated, unreviewed, missing error handling\n@Route('/api/users')\nclass UserController {\n  @Get('/:id')\n  async getUser(@Param('id') id: string) {\n    return this.userService.findById(id); // What if id is invalid?\n  }\n}\n```\n\n**📚 Required Reading for AI-Assisted Development:**\n- [`AGENTS.md`](AGENTS.md) - Repository-specific rules for AI agents\n- [`CLAUDE.md`](CLAUDE.md) - Claude AI coding guidelines\n- [`CONTRIBUTING.md`](CONTRIBUTING.md) - General contribution guide\n- [`.prettierrc`](.prettierrc) - Code formatting rules\n- [`eslint.config.js`](eslint.config.js) - Linting configuration\n\n**Questions?** Ask in [GitHub Discussions](https://github.com/Expressive-Tea/expresive-tea/discussions) before submitting AI-generated code.\n\n---\n\n## 💬 Community \u0026 Support\n\n### Get Help\n- 📖 [Documentation](https://zero-oneit.github.io/expresive-tea/)\n- 💬 [Gitter Chat](https://gitter.im/Expressive-Tea/expresive-tea)\n- 📧 [Email Support](mailto:support@expressive-tea.io)\n- 🐛 [GitHub Issues](https://github.com/Expressive-Tea/expresive-tea/issues)\n- 🔖 [Stack Overflow](https://stackoverflow.com/questions/tagged/expressive-tea) - Use tag `expressive-tea`\n\n### Stay Connected\n- 🐦 Twitter: [@expressive_tea](https://twitter.com/expressive_tea)\n- 📧 Email: [support@expressive-tea.io](mailto:support@expressive-tea.io)\n- 👨‍💻 Author: [Diego Resendez](https://twitter.com/diegoresendez)\n\n---\n\n## 🌟 Built With\n\n| Technology | Purpose |\n|------------|---------|\n| [Express](https://expressjs.com/) | Fast, unopinionated web framework |\n| [TypeScript](https://www.typescriptlang.org/) | Type-safe JavaScript |\n| [InversifyJS](https://inversify.io/) | Powerful dependency injection |\n| [Reflect Metadata](https://github.com/rbuckton/reflect-metadata) | Decorator metadata support |\n\n---\n\n## 🏆 Sponsors\n\nBuilding Expressive Tea takes time and dedication. If this project helps you, consider sponsoring!\n\n**Principal Sponsor:**\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://zerooneit.com\" target=\"_blank\"\u003e\n    \u003cimg src=\"images/zero-oneit.png\" width=\"180\" alt=\"Zero-OneIT\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n**Interested in sponsoring?** Contact [projects@zero-oneit.com](mailto:projects@zero-oneit.com)\n\n---\n\n## 📄 License\n\nApache-2.0 License - see [LICENSE](LICENSE) file for details\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://app.fossa.io/projects/git%2Bgithub.com%2FExpressive-Tea%2Fexpresive-tea?ref=badge_large\"\u003e\n    \u003cimg src=\"https://app.fossa.io/api/projects/git%2Bgithub.com%2FExpressive-Tea%2Fexpresive-tea.svg?type=large\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## 📌 Versioning\n\nWe use [Semantic Versioning](http://semver.org/) (SemVer). See [tags](https://github.com/Expressive-Tea/expresive-tea/tags) for available versions.\n\n---\n\n## 👥 Contributors\n\n**Lead Developer:** [Diego Resendez](https://github.com/zerooneit)\n\nSee all [contributors](https://github.com/Expressive-Tea/expresive-tea/contributors) who've helped shape Expressive Tea.\n\n---\n\n## ❤️ Credits\n\nLogo and banner designed by [Freepik](http://www.freepik.com)\n\n---\n\n\u003cp align=\"center\"\u003e\n  Made with ☕ and 🍵 by the Expressive Tea Team\n  \u003cbr /\u003e\n  \u003csub\u003eStart brewing better Node.js apps today!\u003c/sub\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexpressive-tea%2Fexpresive-tea","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fexpressive-tea%2Fexpresive-tea","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexpressive-tea%2Fexpresive-tea/lists"}