# ORBIT: a self-hosted AI gateway for private RAG, NL-to-SQL and MCP agents

> ORBIT (schmitech/orbit) is a Python 3.12+ self-hosted backend that puts files, databases, REST APIs and MCP tools behind one OpenAI-compatible API. The design is adapter-driven and governed, but the documentation is uneven and the release tarball is the main supported install path.

**schmitech/orbit** — Self-hosted AI gateway for private RAG, natural-language data access, and tool-calling agents.

- Repository: https://github.com/schmitech/orbit
- Website: https://github.com/schmitech/orbit
- Stars: 351 · Forks: 57
- Language: Python
- License: Apache-2.0
- Published: 2026-09-10 · Updated: 2026-09-10 · Language: en
- Canonical page: https://hysenlabs.com/projects/schmitech-orbit

## The gap ORBIT fills: one contract in front of private data and tools

Most teams end up with three disconnected pieces: a vector store for document search, a text-to-SQL layer for databases, and some hand-rolled function-calling loop for agents. Each has its own auth, its own logging, and its own idea of what an API key is. ORBIT's pitch is that all three sit behind a single OpenAI-compatible API, with an admin panel for adapters, API keys and prompts, so applications keep one client contract while the backend swaps models or data sources underneath.

The README frames the audience explicitly: teams that want to "deploy on-premises, in a private cloud, or in an air-gapped environment" while choosing local, self-hosted or hosted models. That is a specific buyer. It is not someone who wants the fastest path to a chatbot. It is someone who already has data they cannot ship to a vendor, and who needs the retrieval, query and tool layers to be auditable in one place.

## How the adapter layer routes a request

The mechanism visible in the repository is YAML-configured adapters. The README lists the things an adapter can front: files, SQL, NoSQL, vector stores, Elasticsearch, REST and GraphQL APIs, and MCP tools. A request arrives through the REST or OpenAI-compatible API, and the gateway selects the adapter that owns that data source rather than the application hard-coding a connection string.

The repository layout supports this reading. There is a top-level config/ directory alongside server/ and utils/, and examples/ contains per-scenario folders such as examples/customer-360-composite/, examples/intent-templates/ and examples/sqlite/. The composite demo is the clearest illustration of the data flow: the README describes joining "billing data from SQL, support SLA data from HTTP, and live CRM context from MCP tools" in one request. That means the gateway is not just proxying a model call. It is resolving multiple adapters, and the model sees the combined result.

The same adapter idea covers tool calling. ORBIT can act as an MCP server, and it can connect outward to external MCP servers as a tool-using client, with what the README calls "procedural skills, and bounded tool loops." The word bounded matters here. An unbounded agent loop against a live database is a liability, and the project treats loop limits as a configuration concern rather than something the caller manages.

## Installing ORBIT and asking your first database question

The README's prerequisites are Python 3.12+ and an internet connection for dependencies. The default configuration uses Ollama for inference, so if you keep the default provider you need Ollama installed as well. Windows users are pointed at install/windows.md. The documented local path is the release tarball, not a pip package or a Docker image.

The README gives the download as a curl command against the v2.17.8 release asset:

```bash
curl -LO https://github.com/schmitech/orbit/releases/download/v2.17.8/orbit-2.17.8.tar
```

Note the extension in the README snippet is .tar while the link text calls it a tarball. Extract it, enter the release directory, and start ORBIT from there. The README stops at "start ORBIT" and the truncated material does not show the launch command, so check the extracted directory for the entry point rather than guessing a flag.

For a first real use, the lowest-friction target is a SQLite database, because examples/sqlite/ and examples/sample-db-setup.sh exist in the repository. The setup script is the intended way to produce a sample database; the intent templates under examples/intent-templates/ are the reviewed query patterns the natural-language layer maps onto. Configure the SQLite adapter in config/ to point at the database the script creates, start the server, then send a natural-language question through the HTTP API. The README also points at examples/openai-compatible-api/ if you would rather call it with an OpenAI client library, and at the Node.js client under clients/node-api/ if your application is JavaScript.

If you want to see the expected shape without installing anything, the README offers a hosted sandbox with no download, Docker or account required.

## Where ORBIT gets in the way

The install story is the weakest part. There is a docker/ directory in the repository, but the README's quick start does not document a Docker or Compose command, and it does not give a Helm chart or Kubernetes manifests. If your deployment standard is a container image with a pinned digest, you are reading the repository rather than the README to get there. The same applies to upgrades: the README documents downloading a versioned tarball, and there is no documented rollback procedure, so treat an upgrade as a manual file replacement you have rehearsed.

Natural-language-to-SQL is the second place to be careful. The README describes the HR demo as using "reviewed intent templates," which is a deliberate constraint rather than a free-form text-to-SQL generator. If your users expect arbitrary ad-hoc SQL over an unfamiliar schema, template review is a workflow cost you will feel. The upside is that parameterized queries are the documented behavior, which is a better default than letting a model emit raw SQL against production.

Finally, the breadth is a real cost. A gateway that fronts files, SQL, NoSQL, Elasticsearch, vector stores, HTTP APIs and MCP servers has a large configuration surface, and the README is a landing page, not a reference. Anything beyond the quick start sends you into docs/, and the quality of those pages varies by adapter. Budget time for reading the repository, not the README.

## ORBIT compared with a thin LLM proxy

The obvious alternative is a lightweight gateway such as LiteLLM, which routes requests across providers and normalizes their APIs. The difference in approach is scope. A proxy like that sits between your application and the model and does not own your data sources; retrieval, SQL access and tool execution stay in your application code. ORBIT puts those layers inside the gateway, which is why it ships adapters, an admin panel, RBAC, OIDC/SSO, per-key quotas and audit logs as part of the same system.

That trade is straightforward. If all you need is provider routing with fallbacks, a proxy is less to operate and less to configure. If you need the retrieval and query layers to be governed centrally, with one audit trail across documents and databases, a proxy leaves you building that yourself. ORBIT's own README positions it as the thing that lets you "move from a local prototype to a governed deployment without replacing the architecture," which is a claim about avoiding a rewrite, not about being lighter.

## Maintenance, licence and upgrade cost

The last push to the default branch was on 2026-09-10, and v2.17.8 was released on 2026-09-08, with v2.17.7 and v2.17.6 in the days before that. The repository is not archived. That release cadence means the version you download is a moving target, and the README's quick start is pinned to a specific tarball URL, so you will be editing that URL on every upgrade.

Licensing is Apache-2.0, which is permissive and includes an explicit patent grant. That is the whole of what the repository states on the subject; the README does not discuss commercial support, trademark terms or any enterprise edition, and I am not going to read implications into a licence file. If your organization has rules about model weights, provider terms or data residency, those obligations come from the providers you configure in ORBIT, not from ORBIT's own licence.

## Conclusion

Adopt ORBIT if you need one governed API in front of private documents, SQL, NoSQL and MCP tools, and you are willing to run Python 3.12+ plus Ollama or another provider yourself. Skip it if you only need a thin proxy in front of a hosted model, or if you expect a complete Docker or Helm deployment guide, since the README only documents the release-tarball path. Before committing, check which of the adapters you need actually appear under docs/ and examples/, and confirm that the v2.17.8 tarball extracts and starts on your target OS.

## FAQ

### What is ORBIT (schmitech/orbit) and who is it for?

It is a self-hosted AI gateway that connects files, databases, APIs and MCP tools to local or hosted models behind one OpenAI-compatible API, with authentication, observability and an admin UI included. The README targets teams that need to keep data on-premises, in a private cloud or in an air-gapped environment.

### Which Python version and providers does ORBIT require?

The README states Python 3.12+ and an internet connection for dependencies. The default configuration uses Ollama for inference, so Ollama is needed if you keep the default provider, and the README says the gateway can also route to OpenAI, Anthropic, Gemini, Bedrock, Microsoft Foundry, OpenRouter and others.

### How do I install ORBIT locally?

The README's documented path is to download the v2.17.8 release tarball with curl, extract it, enter the release directory and start ORBIT from there. Windows users are pointed at install/windows.md, and the README also offers a hosted sandbox for trying it without installing.

### Can ORBIT query a database in natural language?

Yes. The README lists natural-language querying across SQL, MongoDB, Elasticsearch and composite data sources, with parameterized queries, and the HR demo is described as using reviewed intent templates over a SQLite database. That template review is a deliberate constraint rather than free-form SQL generation.

### What licence does ORBIT use?

The repository is licensed under Apache-2.0. The README and repository do not describe a commercial edition or support terms, so any provider-level obligations come from the models and services you configure inside ORBIT.

## Sources

- [License: Apache-2.0](https://github.com/schmitech/orbit/blob/main/LICENSE)
- [Project website](https://github.com/schmitech/orbit)
- [README](https://github.com/schmitech/orbit/blob/main/README.md)
- [Releases](https://github.com/schmitech/orbit/releases)
- [schmitech/orbit on GitHub](https://github.com/schmitech/orbit)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/schmitech-orbit
