SQLite Runtime Resolution
OmniRoute resolves its SQLite driver at startup through a 5-step fallback chain:
-
Bundled
better-sqlite3(viadependenciesinpackage.json) — fastest, native binary, installed bynpm installwhen build tools are present. -
Runtime-installed
better-sqlite3(in~/.omniroute/runtime/) — installed lazily on first run OR byscripts/build/postinstall.mjs → scripts/postinstall.mjs. Validates native.nodemagic bytes (ELF / Mach-O / PE) before loading to guard against corrupt or wrong-platform binaries. -
node:sqlite(Node ≥22.5 stdlib) — no native build needed; used when both better-sqlite3 paths fail. Limited feature set. -
sql.js(WASM) — final fallback. Works everywhere but is slower and writes data on an interval rather than synchronously.
Why this complexity?
Section titled “Why this complexity?”- Windows EBUSY:
npm install -g omniroute@latestcan fail if the previous version’sbetter_sqlite3.nodeis locked by a running process. The runtime install in~/.omniroute/runtime/sidesteps the global npm cache. - No build tools: Some environments (corporate Windows without VS Build
Tools, minimal Docker images) cannot compile
better-sqlite3. The runtime installer resolves a pre-built binary from the npm registry; the fallback drivers ensure OmniRoute still boots even if that fails. - Air-gapped systems: If the npm registry is unreachable,
node:sqliteorsql.jsguarantee baseline functionality.
Magic-byte validation
Section titled “Magic-byte validation”Before loading a runtime-installed .node file, OmniRoute reads the first 8
bytes and matches against known platform magics:
| Platform | Bytes (hex) | Label |
|---|---|---|
| Linux | 7F 45 4C 46 |
elf |
| macOS 64-bit BE | FE ED FA CF |
macho |
| macOS 64-bit LE | CF FA ED FE |
macho-le |
| macOS fat (universal) | CA FE BA BE |
macho-fat |
| Windows | 4D 5A (MZ) |
pe |
A mismatched magic → file is ignored, fallback continues to the next step.
Checking the active driver
Section titled “Checking the active driver”import { getDriverInfo } from "@/lib/db/core";
const info = getDriverInfo();// { source: "bundled" | "runtime" | "runtime-installed-now" | "node-sqlite" | "sql-js",// kind: "better-sqlite3" | "node-sqlite" | "sql-js" }Manual control
Section titled “Manual control”# Skip postinstall warm-up (for fast CI installs)OMNIROUTE_SKIP_POSTINSTALL=1 npm install -g omniroute
# Force-reinstall runtime better-sqlite3rm -rf ~/.omniroute/runtimeomniroute # will reinstall on next start
# Check what driver is activeomniroute config db-info # (if CLI command exists)Reference
Section titled “Reference”Implementation:
bin/cli/runtime/magicBytes.mjs— binary magic-byte validation helpersbin/cli/runtime/sqliteRuntime.mjs— 5-step runtime resolver + lazy installerbin/cli/runtime/index.mjs— startup orchestrator (warmUpRuntimes())scripts/postinstall.mjs— npm post-install hook (non-fatal warm-up)src/lib/db/core.ts—ensureDbInitialized()/getDriverInfo()exports
Single-writer topology (HA unsupported)
Section titled “Single-writer topology (HA unsupported)”The driver fallback chain above still runs in one process. Default SQLite OmniRoute is a single writer:
- Do not attach two OmniRoute replicas to the same
storage.sqlitefile. - A container restart, Recreate deploy, OOM kill, or HEALTHCHECK restart drops every in-flight SSE session. There is no session drain on the stock path.
- Orchestrator liveness that treats a slow
/healthzas dead will kill the only replica. Prefer TCP liveness + HTTP/healthzreadiness. See Docker Guide — availability and Kubernetes probe recommendations.
HagiCode
HagiCode is an agentic coding workspace. Rich, convenient UI interactions make planning, agent execution, and project work approachable and easy to navigate, creating an engaging development experience.
Explore an engaging development experience through rich, convenient UI interactions.
- SmartOpenSpec workflows turn intent into an executable path, from proposal to design, tasks, and a shipped change.
- EfficientMulti-agent execution keeps research, implementation, and review moving in parallel, across several repositories and the Agent CLIs you already use.
- InterestingRich, convenient UI interactions make planning, agent execution, and project work approachable and easy to navigate.
Download for Windows
Share HagiCode
Turn ideas into shipped software.
HagiCode is an agentic coding workspace. OpenSpec workflows plan the change, multi-agent execution carries it out, and Hero Scenario makes the long run visible, so ideas become shipped software.
- Smart
- OpenSpec workflows turn intent into a path from proposal to shipped change.
- Efficient
- Multi-agent execution runs research, build, and review in parallel.
- Fun
- Rich UI interactions make planning, agent work, and projects easier to follow.
© 2026 HagiCode | Powered By hagilight-starlight@0.21.0 | Branch: main | Commit: de60bcd | Built:

