{"id":27133178,"url":"https://github.com/amankpandey/miniapi","last_synced_at":"2025-04-07T23:19:49.406Z","repository":{"id":283070454,"uuid":"950584538","full_name":"amankpandey/miniapi","owner":"amankpandey","description":"MiniAPI is a blazing-fast, ultra-lightweight API framework for Node.js. At just 1KB, it provides essential routing, middleware, error handling, and more – all without dependencies.","archived":false,"fork":false,"pushed_at":"2025-03-18T11:43:52.000Z","size":34,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-06T18:28:39.450Z","etag":null,"topics":["framework","miniapi","npm"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/amankpandey.png","metadata":{"files":{"readme":"README.md","changelog":null,"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}},"created_at":"2025-03-18T11:41:08.000Z","updated_at":"2025-03-18T11:43:56.000Z","dependencies_parsed_at":"2025-03-18T12:45:49.082Z","dependency_job_id":null,"html_url":"https://github.com/amankpandey/miniapi","commit_stats":null,"previous_names":["losercodes/miniapi","amankpandey/miniapi"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amankpandey%2Fminiapi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amankpandey%2Fminiapi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amankpandey%2Fminiapi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amankpandey%2Fminiapi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/amankpandey","download_url":"https://codeload.github.com/amankpandey/miniapi/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247744325,"owners_count":20988784,"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":["framework","miniapi","npm"],"created_at":"2025-04-07T23:19:48.682Z","updated_at":"2025-04-07T23:19:49.291Z","avatar_url":"https://github.com/amankpandey.png","language":"JavaScript","readme":"# MiniAPI - The Lightweight Node.js API Framework\n\n**MiniAPI** is a blazing-fast, ultra-lightweight API framework for Node.js. At just **1KB**, it provides essential routing, middleware, error handling, and more – all without dependencies.\n\n## 🚀 Why MiniAPI?\n\n- **Ultra-Lightweight** – Only **1KB** in size!\n- **Zero Dependencies** – Pure **Node.js HTTP module**.\n- **Express-Like API** – Simple and intuitive routing.\n- **Middleware Support** – Custom middleware for flexibility.\n- **Error Handling** – Graceful error handling built-in.\n- **Grouped Routes** – Organize APIs with prefixes.\n- **CORS Support** – Enable Cross-Origin Resource Sharing.\n- **Rate Limiting \u0026 Compression** – Optimize performance.\n- **Super Fast** – Outperforms Express with minimal overhead.\n\n---\n\n## 💊 Performance Benchmarks\n\nMiniAPI is significantly faster than Express:\n\n| Framework   | Requests/sec | Avg Response Time |\n| ----------- | ------------ | ----------------- |\n| **MiniAPI** | **12,000**   | **3.20ms**        |\n| Express     | 7,000        | 6.21ms            |\n\n**Benchmark Setup:**\n\n- **10,000 requests** with **50 concurrent connections**.\n- Lower response time = faster performance.\n\n---\n\n## 📦 Installation\n\n```sh\nnpm install miniapi-framework\n```\n\n---\n\n## 🛠 Basic Usage\n\n```javascript\nimport { createAPI } from 'miniapi-framework';\n\n// Create API instance\nconst api = createAPI({\n  logging: true,\n  cors: true\n});\n\n// Define routes\napi.get('/hello', (ctx) =\u003e {\n  ctx.send({ message: 'Hello, World!' });\n});\n\napi.post('/echo', (ctx) =\u003e {\n  ctx.send(ctx.body);\n});\n\n// Start the server\napi.listen(3000, () =\u003e {\n  console.log('Server running on http://localhost:3000');\n});\n```\n\n---\n\n## ⚡ Advanced Usage\n\n### Middleware Support\n\n```javascript\napi.use(async (ctx, next) =\u003e {\n  console.log(`Request: ${ctx.req.method} ${ctx.req.url}`);\n  return next();\n});\n```\n\n### Route Parameters\n\n```javascript\napi.get('/users/:id', (ctx) =\u003e {\n  const userId = ctx.params.id;\n  ctx.send({ id: userId, name: `User ${userId}` });\n});\n```\n\n### Grouped Routes\n\n```javascript\napi.group('/api', (apiRouter) =\u003e {\n  apiRouter.get('/users', (ctx) =\u003e {\n    ctx.send([{ id: 1, name: 'User 1' }]);\n  });\n  \n  apiRouter.get('/users/:id', (ctx) =\u003e {\n    ctx.send({ id: ctx.params.id, name: `User ${ctx.params.id}` });\n  });\n});\n```\n\n### Authentication Middleware\n\n```javascript\nconst auth = async (ctx, next) =\u003e {\n  const token = ctx.req.headers['authorization'];\n  \n  if (!token || !token.startsWith('Bearer ')) {\n    return ctx.send({ error: 'Unauthorized' }, 401);\n  }\n  \n  // Validate token\n  const apiKey = token.split(' ')[1];\n  if (apiKey !== 'your-api-key') {\n    return ctx.send({ error: 'Invalid API key' }, 401);\n  }\n  \n  ctx.user = { id: 1, role: 'admin' };\n  return next();\n};\n\n// Apply to specific routes\napi.get('/protected', auth, (ctx) =\u003e {\n  ctx.send({ message: 'Protected data', user: ctx.user });\n});\n```\n\n### Error Handling\n\n```javascript\napi.onError((error, ctx) =\u003e {\n  console.error('Error:', error);\n  ctx.send({ error: 'Internal Server Error' }, 500);\n  return true; // Error was handled\n});\n```\n\n### Response Methods\n\n```javascript\n// JSON response (default)\nctx.send({ data: 'example' }, 200);\n\n// Text response\nctx.text('Plain text response', 200);\n\n// HTML response\nctx.html('\u003ch1\u003eHello World\u003c/h1\u003e', 200);\n\n// Redirect\nctx.redirect('/new-location', 302);\n```\n\n---\n\n## 🔐 API Reference\n\n### Creating an API Instance\n\n```javascript\nconst api = createAPI(options);\n```\n\n**Options:**\n\n| Option        | Description                 | Default |\n| ------------- | --------------------------- | ------- |\n| `cors`        | Enable CORS                 | `false` |\n| `logging`     | Enable request logging      | `false` |\n| `compression` | Enable response compression | `false` |\n| `rateLimit`   | Enable rate limiting        | `false` |\n| `rateWindow`  | Rate limit window in ms     | `60000` |\n| `rateMax`     | Maximum requests per window | `100`   |\n\n### Routing Methods\n\n```javascript\napi.get(path, handler);\napi.post(path, handler);\napi.put(path, handler);\napi.delete(path, handler);\napi.patch(path, handler);\n```\n\n### Context Object Properties\n\n| Property | Description                      |\n| -------- | -------------------------------- |\n| `req`    | Original Node.js request object  |\n| `res`    | Original Node.js response object |\n| `params` | URL parameters                   |\n| `query`  | Query string parameters          |\n| `body`   | Parsed request body              |\n\n---\n\n## 🌐 Complete Example\n\n```javascript\nimport { createAPI } from 'miniapi-framework';\n\n// Create API instance with options\nconst api = createAPI({\n  logging: true,\n  cors: true,\n  compression: true,\n  rateLimit: true\n});\n\n// Global middleware\napi.use(async (ctx, next) =\u003e {\n  ctx.requestTime = new Date();\n  ctx.res.setHeader('X-Powered-By', 'MiniAPI');\n  return next();\n});\n\n// Basic routes\napi.get('/', (ctx) =\u003e {\n  ctx.send({ \n    message: 'Welcome to MiniAPI!',\n    timestamp: ctx.requestTime.toISOString()\n  });\n});\n\n// API routes group\napi.group('/api', (apiRouter) =\u003e {\n  apiRouter.get('/users', (ctx) =\u003e {\n    const users = [\n      { id: 1, name: 'Alice' },\n      { id: 2, name: 'Bob' }\n    ];\n    ctx.send({ users });\n  });\n  \n  apiRouter.get('/users/:id', (ctx) =\u003e {\n    const userId = ctx.params.id;\n    ctx.send({ id: userId, name: `User ${userId}` });\n  });\n  \n  apiRouter.post('/users', (ctx) =\u003e {\n    if (!ctx.body || !ctx.body.name) {\n      return ctx.send({ error: 'Name is required' }, 400);\n    }\n    \n    ctx.send({ \n      message: 'User created',\n      user: {\n        id: 3,\n        name: ctx.body.name,\n        createdAt: new Date().toISOString()\n      }\n    }, 201);\n  });\n});\n\n// Error handling\napi.onError((error, ctx) =\u003e {\n  console.error('Error:', error);\n  ctx.send({ error: 'Internal Server Error' }, 500);\n  return true;\n});\n\n// Start the server\napi.listen(3000, (server) =\u003e {\n  console.log('🚀 MiniAPI server running on http://localhost:3000');\n});\n```\n\n---\n\n## 💡 Why Choose MiniAPI Over Alternatives?\n\n| Feature       | MiniAPI        | Express | Fastify |\n| ------------- | -------------- | ------- | ------- |\n| Size          | **1KB**        | 60KB+   | 30KB+   |\n| Dependencies  | **0**          | Many    | Some    |\n| Performance   | **🔥 Fastest** | Medium  | High    |\n| Middleware    | ✅ Yes          | ✅ Yes   | ✅ Yes   |\n| CORS Support  | ✅ Yes          | ✅ Yes   | ✅ Yes   |\n| Rate Limiting | ✅ Yes          | ❌ No    | ✅ Yes   |\n\n---\n\n## 🐝 License \u0026 Contributions\n\nMiniAPI is open-source and licensed under **MIT**. Contributions are welcome!\n\nFeel free to submit issues, feature requests, or PRs. Let's make MiniAPI even better! 🚀\n\n## 🔧 Development\n\nTo build from source:\n\n```sh\n# Clone the repository\ngit clone https://github.com/yourusername/miniapi-framework.git\ncd miniapi-framework\n\n# Install development dependencies\nnpm install\n\n# Build the package\nnpm run build\n```\n\nThe build process generates both CommonJS (.cjs) and ES Module (.mjs) versions for maximum compatibility.","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famankpandey%2Fminiapi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Famankpandey%2Fminiapi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famankpandey%2Fminiapi/lists"}