OmniBox (import-ai/omnibox): a self-hostable AI knowledge hub you run with Docker Compose
Collect, organize, use, and share, all in OmniBox.
At a glance
- What is it?
- OmniBox collects web pages, files and WeChat messages into one searchable store, then answers questions over them. It ships as four Docker services, and the README documents almost none of the operational details.
- Who is it for?
- Adopt OmniBox if you want a single place to drop web pages, PDFs, Office files and WeChat messages and then query them, and you are comfortable running Docker Compose with a .env file you populate yourself. Do not adopt it if you need documented backup, restore or rollback procedures, or if you cannot accept that the README points to an external docs site for deployment details.
- 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 7 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 29, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What OmniBox actually collects, and who ends up using it
The README describes OmniBox as a cross-platform, all-in-one AI knowledge hub with a one-line pitch: collect, then ask. The collection surface is unusually wide for a project at v0.1.48. A browser extension saves the main content of a web page. Files in PDF, Word, PPT and MP3 formats are uploaded and parsed end to end. A WeChat bot accepts files, web pages, videos, voice messages, text and chat records. On iOS there are two entry points: Flash for quick capture of ideas with voice or text, and Share for sending files straight into OmniBox.
That spread tells you who the project is aimed at. It is not a note-taking app for one person on one machine. It has a user and team system, permissions, sharing management and multi-tenancy, which means the intended deployment is a shared instance serving several people rather than a personal vault. The README also lists multi-language support, dark mode and mobile responsiveness as features, which is the vocabulary of a product with a web client rather than a library.
The cost of that breadth is visible in the repository layout. The top level holds backend, web, wizard, client, compose.yaml, compose/ and scripts/. The badge block at the top of the README points at four separate release streams: omnibox-web, omnibox-backend, omnibox-wizard and omnibox-browser-extension. Adopting OmniBox means tracking four artifacts, not one.
Four services, one Compose file: how the pieces fit
The compose.yaml in the repository defines the runtime shape. There are four services: web, backend, wizard and wizard-worker. The web service exposes port 80 inside the container and is published on ${OB_WEB_PORT:-8080}, so the default host port is 8080. It depends on backend with a service_healthy condition, so Compose will not start the web container until the backend healthcheck passes.
The backend healthcheck is a wget call against http://127.0.0.1:8000/api/v1/health, polled every 30 seconds with a 3 second timeout, 5 retries and a 5 second start period. The backend in turn depends on wizard being healthy, and wizard uses the same healthcheck shape. wizard-worker depends on backend and overrides the entrypoint to run uv run --no-sync python3 main.py with a single worker. That chain means a failed wizard healthcheck blocks backend, which blocks web: the whole stack stays down rather than serving a half-initialised interface.
The interesting wiring is in the wizard environment. It sets OBW_VECTOR_HOST to ${OBW_MEILI_HOST} and OBW_VECTOR_MEILI_API_KEY to ${GLOBAL_MEILI_KEY}. The variable name says vector, the value points at Meilisearch. So the retrieval layer that backs question answering and search is Meilisearch, configured through two variables that must exist in your .env file. Neither the README nor the Compose file shows a Meilisearch service definition, which means you supply that endpoint yourself.
All four services mount /etc/localtime read-only and set restart: always. The backend and wizard also set ENV: prod and read from .env via env_file. Images are pinned by tag rather than digest: ghcr.io/import-ai/omnibox-web:0.1.49, omnibox-backend:0.1.49 and omnibox-wizard:0.1.49. Note that the Compose file references 0.1.49 while the latest listed release is v0.1.48, so the Compose tags run ahead of the tagged release.
Installing OmniBox locally and getting the first page indexed
The README's Local Development section is the only install path it gives. It clones with submodules, copies the example environment file, and runs a script. The submodule flag matters: the top level has a .gitmodules entry and separate web, client and wizard directories, so a plain clone without --recurse-submodules will leave those empty.
git clone --recurse-submodules https://github.com/import-ai/omnibox.git
cd omnibox
cp example.env .env
bash scripts/dev.sh up -d --buildAfter that command, Compose builds and starts the stack detached. Because web depends on backend being healthy and backend depends on wizard being healthy, the first start takes longer than the containers themselves suggest. You should expect the web interface on the host port from OB_WEB_PORT, which defaults to 8080.
Before the stack will come up healthy you need the Meilisearch variables populated in .env, since wizard reads OBW_MEILI_HOST and GLOBAL_MEILI_KEY. The example.env file is the place to look for the expected keys; the README does not reproduce them.
For a non-development deployment the README points at a separate Local Deployment page on omnibox.pro rather than describing the steps in the repository. If you want the hosted route instead, the README links omnibox.pro with login by Email, Google or WeChat, and a separate page for browser extension installation. Once the instance is running, the first real use is installing the browser extension and saving a page, which the README describes as capturing the main content of a webpage rather than the whole DOM.
Where OmniBox stops being the right tool
The repository is thin on operations. The README does not document backup, restore or rollback procedures, and it does not describe how to migrate data between versions. For a system that ingests PDFs, Office documents, audio and chat history into a search index, that is a real gap: your content lives in at least two places, the application store and the Meilisearch vector endpoint, and nothing in the README explains how to keep them consistent or how to recover if one is lost.
Version pinning is a second concern. The Compose file pins images to 0.1.49 while the listed releases stop at v0.1.48, and there is no digest pinning. If you deploy from compose.yaml, you are pulling a tag that does not correspond to a tagged release in the repository's release list.
The submodule layout is a third friction point for anyone who wants to patch the frontend. web, client and wizard are separate repositories pulled in as submodules, each with its own release stream and its own badge. A fix in the web client is not a commit in the main repository.
Finally, consider whether you need this at all. If you want a personal note store with no team features, no WeChat ingestion and no Meilisearch dependency, OmniBox's four-service footprint is heavier than the problem. The multi-tenancy, permissions and sharing management that make it useful for a group are exactly the parts that add deployment surface for a single user.
How OmniBox differs from a plain note app with a search box
The obvious comparison is against a self-hosted note application that stores Markdown files and indexes them locally. The difference is in where retrieval happens. OmniBox routes search and question answering through a vector endpoint supplied as OBW_VECTOR_HOST, which in the shipped Compose file points at Meilisearch. A file-based note app typically searches the text of the notes themselves. OmniBox instead parses uploaded PDFs, Word documents, PPTs and MP3s, then indexes the extracted content, which is why the wizard service exists as a separate worker process with its own queue: parsing and embedding are asynchronous work, not request-time work.
The second difference is the ingestion surface. A note app expects you to type or sync files. OmniBox accepts input from a browser extension, an iOS Flash capture, an iOS Share sheet and a WeChat bot, and the README lists an Open API as a completed roadmap item. If your material arrives through chat and mobile capture rather than a folder, that is the gap OmniBox is built to close. If your material is already a folder of Markdown, the extra services buy you little.
The third difference is the editing model. OmniBox renders Markdown with formulas, mind maps, flowcharts, sequence diagrams, Gantt charts and music notation. That is a richer rendering target than most note backends attempt, and it means the web client is doing real work rather than displaying pre-rendered HTML.
Maintenance, licensing and what a version bump costs
The repository is not archived, and the last push was on 2026-09-08. The release list shows v0.1.48 on that same date, with v0.1.48-beta.1 and v0.1.47 both on 2026-09-05. Three releases inside four days, two of them on the same day, is a fast cadence for a project still below 0.2. Expect the tag you pin to move.
Upgrading means pulling new images for web, backend and wizard together, because all three are pinned to the same version string in compose.yaml. If you change one tag and not the others, you are running a mixed-version stack, and the healthcheck chain will not tell you that. The README does not describe a supported upgrade order or a database migration step.
OmniBox is licensed under Apache-2.0. That is a permissive licence that allows commercial use and modification, and it includes a patent grant. It also means the project carries no copyleft obligation on your own code. This is a description of the licence text, not legal advice; if you are embedding OmniBox in a product, read the LICENSE file in the repository and get your own counsel.
The roadmap lists RSS Subscription as the one unchecked item, with agent, folder and document public sharing, the WeChat Bot, the Open API and the mobile app already marked done. So the ingestion surface is close to what the maintainers intended, and the remaining planned work is another input channel rather than a change to the architecture.
Editorial conclusion
Adopt OmniBox if you want a single place to drop web pages, PDFs, Office files and WeChat messages and then query them, and you are comfortable running Docker Compose with a .env file you populate yourself. Do not adopt it if you need documented backup, restore or rollback procedures, or if you cannot accept that the README points to an external docs site for deployment details. Before committing, verify that the wizard service can reach your Meilisearch instance, that OBW_MEILI_HOST and GLOBAL_MEILI_KEY resolve in .env, and that the backend health endpoint at /api/v1/health returns success on your host.
Frequently asked questions
What is OmniBox (import-ai/omnibox)?
It is a cross-platform AI knowledge hub that collects web pages, files and chat messages and then answers questions over them. The README describes it as a place to collect, organize, use and share, with a browser extension, iOS capture, a WeChat bot and an Open API as input paths.
How do I install OmniBox?
The README's Local Development section clones the repository with --recurse-submodules, copies example.env to .env, and runs bash scripts/dev.sh up -d --build. For a non-development install it links to a separate Local Deployment page on omnibox.pro instead of documenting the steps in the repository.
What port does OmniBox's web interface use?
The compose.yaml publishes the web container on ${OB_WEB_PORT:-8080}, so the default host port is 8080. The container itself listens on port 80.
Does OmniBox need Meilisearch?
The wizard service sets OBW_VECTOR_HOST to ${OBW_MEILI_HOST} and OBW_VECTOR_MEILI_API_KEY to ${GLOBAL_MEILI_KEY}, so the retrieval backend is Meilisearch and you must supply its endpoint. No Meilisearch service is defined in the repository's compose.yaml.
What licence is OmniBox released under?
Apache-2.0, according to the repository's LICENSE file and metadata. That is a permissive licence that permits commercial use and modification and includes a patent grant.
Can I save files and messages to OmniBox from my phone?
The README lists Flash for quick capture of ideas on iOS with voice recordings and text notes, and Share for sending files to OmniBox directly from iOS. It also lists a mobile app as a completed roadmap item.
Official sources
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.
[](https://hysenlabs.com/projects/import-ai-omnibox)