Gina
FreeNot checkedNode.js MVC framework with built-in HTTP/2, multi-bundle architecture, and scope-based data isolation — no Express dependency
About
Node.js MVC framework with built-in HTTP/2, multi-bundle architecture, and scope-based data isolation — no Express dependency
README
npm version npm downloads GitHub stars Tests Socket Badge Node.js >= 22 Bun >= 1.2 License: MIT
Documentation: gina.io/docs · Issues: GitHub · Changelog: CHANGELOG.md
Node.js MVC framework with built-in HTTP/2, multi-bundle architecture, and scope-based data isolation — no Express dependency.
- HTTP/2 first. Built-in
isaacserver with TLS, h2c, ALPN, HTTP/1.1 fallback, and full CVE hardening (Rapid Reset, CONTINUATION flood, RST flood, HPACK bomb) — all on by default. - Multi-bundle. One project hosts multiple independent bundles (API, web, admin, …). Each bundle has its own routing, controllers, models, and config. Share code via the project layer.
- Scope isolation. Run
local,beta, andproductionfrom the same codebase. Scopes propagate through routing, config interpolation, and data (every DB record is stamped with_scope).
Features
| Feature | Detail |
|---|---|
| HTTP/2 server | Built-in isaac engine — TLS, h2c, ALPN, HTTP/1.1 fallback, 103 Early Hints, CVE-hardened |
| Multi-bundle | One project, N independent bundles with shared config and project layer |
| Scope isolation | local / beta / production — per-request and per-record |
| MVC routing | routing.json — declare routes in config, not code; O(m) radix trie lookup |
| Async/await | Controller actions can be async; rejections routed to throwError automatically |
| ORM / entities | EventEmitter-based entity system; SQL files auto-wired to entity methods |
| Connectors | Couchbase, MongoDB, ScyllaDB / Cassandra, MySQL, PostgreSQL, Redis, SQLite, AI (LLM) — loaded from project node_modules |
| AI connector | Any LLM provider via named protocol (anthropic://, openai://, ollama://, …) |
| Template engine | @rhinostone/swig 2.7.2 — maintained fork with CVE-2023-25345 patched; streaming SSE/chunked via renderStream(). Nunjucks supported as opt-in via render.engine = "nunjucks" or per-section "ext": ".njk" |
| Internationalisation | Per-bundle JSON catalogs, t() helper, swig + nunjucks t filter, CLDR plurals, ICU MessageFormat opt-in via t.icu() |
| Observability | Built-in /_gina/metrics Prometheus endpoint (opt-in, IP-allowlisted) — Node.js process metrics + HTTP counter / duration histogram with cardinality-safe route labels |
| Hot reload | WatcherService evicts require.cache only on file change — zero per-request overhead in dev |
| K8s ready | gina-container, gina-init, SIGTERM drain, JSON stdout logging |
| Dependency injection | Mockable connectors and config for unit testing |
| Runtime | Node.js 22–26, or Bun (bun add -g gina) — install + boot validated end-to-end by a CI Bun smoke |
Quick start
npm install -g gina@latest --prefix=~/.npm-global # or, on the Bun runtime: bun add -g gina
gina project:add @myproject --path=$(pwd)/myproject
gina bundle:add api @myproject
gina bundle:start api @myproject
open https://localhost:3100
npm 12+ blocks install scripts by default, and gina's post-install bootstraps
~/.ginaand the framework dependencies. Install withnpm install -g gina@latest --allow-scripts=gina, or allow it once for all global installs withnpm config set allow-scripts=gina --location=user. (Not needed on npm ≤ 11.)
What's in 0.5.17
- Fixed —
npm install -g ginaworks under the npm 12--allow-scripts=ginaremedy. With the npm 12 install-script allowance set (the--allow-scripts=ginaflag, ornpm config set allow-scripts=gina --location=user), the global install no longer fails withEALLOWSCRIPTS: the nested framework-dependency install inside post-install now drops the inheritednpm_config_allow_scriptsfor its duration (those dependencies carry no install scripts, so nothing is lost). This makes0.5.17the first Gina version installable on npm 12, where install scripts are blocked by default and the allowance is required. (#B106) - Fixed — stale project cleanup is reliable.
gina project:rm @<project> --force(the:rmalias) now removes the registration instead of erroring, and neitherproject:removenorproject:rm --forcecrashes withENOENTwhen a stale project's path can no longer be created (a top-level path, or one under a read-only parent) — it goes straight to registry-only removal, cleaning~/.gina/projects.json, its state-store mirror, and the project's port assignments without resurrecting an empty skeleton directory. (#B104 / #B105) - Fixed —
gina bundle:starthonours a bundle's configured default scope. A typo in the scope-resolution expression returned an undefined property, so a bundle that declared a default scope in its manifest started with an undefined scope; the command now reads the correct property. (Bundles with no configured default scope were unaffected — they already fell back to the framework default scope.)
See the full Changelog and Roadmap.
Documentation
Full installation guide, tutorials, configuration reference, and API docs at gina.io/docs.
Ecosystem
| Package | Description |
|---|---|
| @rhinostone/swig | Maintained fork of the Swig template engine (upstream abandoned since 2015). CVE-2023-25345 patched. |
| gina-starter | Minimal starter project — one bundle, one route, Docker Compose included |
Governance
Gina is co-authored by Martin Luther ETOUMAN NDAMBWE (Rhinostone) and Fabrice DELANEAU (fdelaneau.com). Final decisions on direction, API design, and releases rest with Martin Luther. Community contributions and RFCs are welcome and taken seriously. See GOVERNANCE.md for details.
License (MIT)
Copyright © 2009-2026 Rhinostone
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Install Gina in Claude Desktop, Claude Code & Cursor
unyly install ginaInstalls into Claude Desktop, Claude Code, Cursor & VS Code — handles npx, uvx and build-from-source repos for you.
First time? Get the CLI: curl -fsSL https://unyly.org/install | sh
Or configure manually
Run in your terminal:
claude mcp add gina -- npx -y ginaFAQ
Is Gina MCP free?
Yes, Gina MCP is free — one-click install via Unyly at no cost.
Does Gina need an API key?
No, Gina runs without API keys or environment variables.
Is Gina hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Gina in Claude Desktop, Claude Code or Cursor?
Open Gina on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
wenb1n-dev/SmartDB_MCP
A universal database MCP server supporting simultaneous connections to multiple databases. It provides tools for database operations, health analysis, SQL optim
by wenb1n-devPostgres Server
This server enables interaction with PostgreSQL databases through the Model Context Protocol, optimized for the AWS Bedrock AgentCore Runtime. It provides tools
by madhurprashPostgres
Query your database in natural language
by AnthropicPostgreSQL
Read-only database access with schema inspection.
by modelcontextprotocolCompare Gina with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All data MCPs
