Model or dataset
Osmantic/ODS avatar
Osmantic/ODS

Osmantic ODS: a one-command private AI server stack for your own hardware

Turn your PC, Mac, or Linux box into an AI server. LLM inference, chat UI, voice, agents, workflows, RAG, and image generation.

6,825 stars961 forksPythonApache-2.0

At a glance

What is it?
ODS (Osmantic Deployment System) bundles local inference, Open WebUI chat, a control dashboard, voice, agents, workflows, RAG and image generation behind a single installer. The value is the wiring, not the components, and the cost is that you inherit someone else's stack choices.
Who is it for?
ODS fits people who want a working private AI stack on their own hardware and are willing to accept the project's service choices, and it fits them best on a tagged release such as v2.6.0 rather than on main. It does not fit anyone who needs a single-purpose inference endpoint, a minimal dependency surface, or a stack they intend to modify service by service.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 4 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 25, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What ODS actually bundles, and who ends up using it

The README is explicit about the problem it targets: assembling Ollama, Open WebUI, n8n, ComfyUI and assorted privacy tools by hand. ODS is the wiring layer for that set. It installs local model inference, a ChatGPT-style web UI, a control dashboard for models, services, setup, GPU status and extensions, voice and agents, RAG and search, image generation, and service auth, secrets, observability and diagnostics.

The intended user is not a platform team. The README describes people who want private AI at home, in a lab, or on a workstation without hand-wiring a dozen services, and it points newcomers at a Friendly Guide plus an audio walkthrough rather than at an architecture document. That framing matters when you weigh the trade-offs below: ODS optimises for a working stack on first run, not for minimalism.

The comparison table in the README is the clearest statement of scope. Against Ollama or llama.cpp, ODS adds the surrounding server stack. Against Open WebUI, it adds an installer and control plane plus pre-wired local services. Against AnythingLLM, it claims broader appliance behaviour beyond RAG. Against n8n self-hosted AI starter kits, workflow automation becomes one part of a larger private stack. Read that as a positioning claim from the project, not a measured result.

How the installer, compose overlays and dashboard fit together

The repository layout is the mechanism. The root holds the public README, installers, security policy, GitHub workflows and coordination docs. The ods/ directory is the product runtime, and the README lists what lives there: services, installer phases, compose overlays, dashboard, CLI, tests and operator docs.

So the install path is a phased script that brings up a Docker Compose project, with overlays selecting which services run. The dashboard is a service in that same project, not a separate agent. Ports are assigned per service and every one is configurable through environment variables, with ods/.env.example given as the full list.

The API endpoint note in the README is the detail most likely to confuse a first integration. On Linux Docker installs, llama-server is exposed on http://localhost:11434 by default (the README names OLLAMA_PORT), while containers reach it at llama-server:8080. On macOS native Metal and Windows native or Lemonade paths, the host endpoint is http://localhost:8080 unless overridden. Open WebUI stays on http://localhost:3000. If you write a client against the wrong host and port pair, it will fail even though the stack is healthy.

Installing ODS and sending a first request

Docker must be installed and running before you start. On Windows the README requires Docker Desktop with the WSL2 backend and a normal, non-Administrator PowerShell window. On Linux and macOS, the documented path is a single piped script:

bash
curl -fsSL https://install.osmantic.com/ods.sh | bash

The README states this installs the stack, picks a model for your hardware, starts the services, and gives you the local web UI. When it finishes, open http://localhost:3000 and start chatting. That is the first real use: a browser session against Open WebUI, backed by whatever model the installer selected.

Windows users must not run the curl command from PowerShell. The README gives a PowerShell block that downloads the source ZIP from GitHub, expands it, and runs install.ps1:

powershell
$ProgressPreference = "SilentlyContinue"
$odsSrc = Join-Path $env:TEMP ("ods-install-" + [guid]::NewGuid().ToString("N"))
$odsZip = Join-Path $odsSrc "ods-main.zip"
New-Item -ItemType Directory -Path $odsSrc | Out-Null
Invoke-WebRequest "https://github.com/Osmantic/ODS/archive/refs/heads/main.zip" -OutFile $odsZip
Expand-Archive -LiteralPath $odsZip -DestinationPath $odsSrc -Force
cd (Get-ChildItem -LiteralPath $odsSrc -Directory | Select-Object -First 1).FullName
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\install.ps1

If a port is already taken, the README says to override it at install time. This example moves the web UI off 3000:

bash
WEBUI_PORT=9090 ./install.sh

On a machine without a GPU, the README documents a cloud mode that keeps the same stack but routes inference to OpenAI, Anthropic or Together APIs:

bash
./install.sh --cloud

Removal is documented for both platforms. On Linux or macOS, from the install directory:

bash
cd ~/ods
./ods-uninstall.sh --force

On Windows, from the runtime folder, `ods.ps1 uninstall --force`. The README adds a recovery note: if the runtime folder is partial and ods.ps1 is missing, run the same command from a source checkout as `ods\installers\windows\ods.ps1 uninstall --force`. It removes Docker resources labelled as the ODS compose project before removing the runtime directory.

The hosted installer script is the weakest link in the trust story

The Linux and macOS command pipes a script from install.osmantic.com straight into bash. The README acknowledges this: the hosted endpoint proxies the current bootstrap from repository main, and reviewed merges reach it automatically after edge-cache refresh. That means the script you execute is not necessarily the one in the release you intended to run.

The README offers two mitigations. ODS_REF selects a compatible repository checkout, and the Installer Trust document is where you inspect the script or install a stable release or an audited commit manually. If you are installing on a machine that holds anything you care about, read that document and pin before you pipe. The same page is the honest answer to the question of whether the convenience is worth the exposure, and only you can answer it for your machine.

The second trust issue is channel drift. The README states that main moves quickly and should be used for active development and validation candidates, while v2.6.0 is the current stable release. For forks, appliances, labs or production-like installs it asks you to pin a tagged release or audited commit and keep your own validation receipt. Stable patch fixes land on release/2.6.x before being merged forward. That is a normal release discipline, but it only helps if you actually pin.

What the release validation gate does not cover

The README describes a release-grade fleet and distro lab that checks operational changes: zero-prereq bootstrap, fresh installs, product flows, full-model capabilities, lifecycle recovery, and a final User Green gate, with RELEASE_VALIDATION.md explaining what a green run proves. That is a stronger claim than most homelab installers make, and the phrasing is careful: it says what a green run proves, which implies there are things it does not.

What the README does not document is rollback. There is an uninstall path for both platforms, and the Windows note describes removing Docker resources labelled as the ODS compose project, but nothing in the README describes reverting to a previous ODS version after an upgrade, or downgrading a service overlay. If you upgrade and the stack misbehaves, your documented options are to uninstall or to pin and reinstall.

The other limitation is scope. ODS is the wrong tool if you want a single inference endpoint with a small dependency surface. You cannot take only llama-server from this project without carrying the compose project, the dashboard and the surrounding services. The README's own comparison table makes this explicit: everything ODS adds over Ollama or llama.cpp is the surrounding stack. If you do not want that stack, you do not want ODS.

Hardware is the third boundary. The README lists Linux, Windows with WSL2 and Docker Desktop, and macOS Apple Silicon as the supported platforms. Intel Macs are not named. The cloud mode exists for machines without a GPU, but if you chose ODS specifically for local inference, cloud mode removes the property you came for.

ODS against a hand-wired Ollama and Open WebUI setup

The honest alternative is the one ODS describes in its own table: install Ollama or llama.cpp, install Open WebUI, and connect them yourself. The difference in approach is who owns the integration. In the hand-wired setup you choose each service, its version and its configuration, and you write the connection between them. Nothing updates behind your back, and nothing is bundled that you did not ask for.

ODS inverts that. It chooses the services, wires them, and gives you a dashboard to manage them, at the cost of a larger surface and a stack that moves on the project's schedule. The README's release channels document exists precisely because that schedule is not yours. If your requirement is a chat UI over a local model, the hand-wired path is fewer moving parts. If your requirement is chat plus voice plus agents plus workflows plus RAG plus image generation plus auth and observability, hand-wiring is the thing ODS was built to replace.

A second alternative sits inside ODS itself: cloud mode. Running `./install.sh --cloud` gives the same full stack backed by OpenAI, Anthropic or Together APIs. That is not a competitor product, but it is the right answer when your hardware cannot run the models you want and you still want the surrounding tooling. It is also the clearest test of what you actually value here, since it keeps every ODS feature except local inference.

Licence, maintenance and what an upgrade costs you

ODS is Apache-2.0. For most users that is permissive enough to run, modify and redistribute, including in commercial settings, but the repository also carries a SECURITY.md and a SECURITY_AUDIT.md, and a fork that ships the stack to other people inherits obligations the licence does not resolve on its own. The README points forks at FORKABILITY.md and asks them to pin a tagged release and keep their own validation receipt. Treat that as the project telling you where its support boundary sits.

The last push to the repository was on 2026-07-28, and the most recent release, v2.6.0, carries the same date. The repository is not archived. The releases before it, v2.5.3 and v2.5.2, are both dated 2026-05-26.

Upgrade cost is where the release channels matter more than the version number. The README states that stable patch fixes land on release/2.6.x before being merged forward, and that main is for active development and validation candidates. If you track main, you are running validation candidates, and the README says so plainly. If you pin, you take patches on the release branch and accept that features arriving on main reach you later. Neither is wrong; running main and then being surprised by churn is.

Editorial conclusion

ODS fits people who want a working private AI stack on their own hardware and are willing to accept the project's service choices, and it fits them best on a tagged release such as v2.6.0 rather than on main. It does not fit anyone who needs a single-purpose inference endpoint, a minimal dependency surface, or a stack they intend to modify service by service. Verify two things first: that Docker is installed and running on the target machine, and that the ports ODS wants (3000 for Open WebUI, 11434 for llama-server on Linux Docker, 8080 on macOS native Metal and Windows native/Lemonade) are free, since the README states every port is configurable through environment variables listed in ods/.env.example.

Frequently asked questions

What are semantic IDs?

The README does not use the term semantic IDs. ODS is a deployment system that installs and wires together local model inference, a ChatGPT-style web UI, a control dashboard, voice, agents, workflows, RAG and search, image generation, and privacy and ops tooling. The runtime lives in the ods/ directory as a Docker Compose project.

Can you give me an example of semantic search?

ODS does not document a semantic search example. The README lists RAG and search as one of the bundled capabilities, described as connecting local documents, private search, and retrieval workflows, and the ods/ directory is where the services and operator docs for it live.

What is a semantic web example?

The README does not describe the semantic web. What it does describe is a local stack: Docker Compose services for inference, chat, dashboard, voice, agents, workflows, RAG, search and image generation, installed by a script and reachable at http://localhost:3000 for the chat UI.

What is semantic in llm?

The README does not define this. What it does say about models is that ODS runs open models on your own hardware, that the installer picks a model for your hardware, and that cloud and hybrid API modes are optional if you would rather route inference to a hosted provider.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/osmantic-ods.svg)](https://hysenlabs.com/projects/osmantic-ods)