UniProvider and Open Provider Registry

The annoying future (unless we stop it)

Someone ships a unilayer that auto-detects Ollama. Someone else ships a unilayer that prefers LM Studio. A third app invents a private JSON registration scheme for “any runner.” Offline model developers then spend their lives complying with three formats that all mean “here is my base_url.”

That is the failure mode. Open Provider Registry (OPR) exists so registration and exposure are a shared protocol, not a product brand war.

Division of labor

Layer Job

OPR

Discover and describe endpoints (online + offline). On-disk manifests + optional /opr/v1/* HTTP.

UniProvider

Dev-Centr reference implementation: library, CLI, transitional well-known probes, localhost aggregator.

Mixr / app routers

Pick which model for which job (cost, latency, policy). Consumes discovered endpoints; does not own registration.

Editors (e.g. SoloMD)

UX for writing; may keep BYOK cloud lists; should consume OPR instead of hard-coding every local runner.

Vocabulary for where weights run: Agent control planes. Mixr detail: Mixr routing and cost.

Protocol stance

  • Open source, versioned — draft in spec/opr.md.

  • Neutral paths%LOCALAPPDATA%\opr\providers\ / ~/.config/opr/providers/ (not a single vendor folder as the only root).

  • Competing aggregators OK — another “unilayer” that reads OPR is conformant.

  • Competing registration formats not OK — extend opr_version; do not invent a sibling schema for the same job.

PoC behavior in UniProvider: recognize a few well-known runners by port until they emit OPR manifests on install. Long-term, runners maintain their own registration (file drop and/or library helper on first-run).

Prior art (honest)

OpenAI-compat is the common wire format — not a registration service. OpenRouter is a curated online marketplace. LiteLLM and Olla are strong self-hosted proxies with operator config / profiles. UPP is a client call abstraction. None of those replace a neutral on-disk registration protocol runners write once for every consumer. Detail table: OPR prior art. Verdict: not invalidated — prefer OPR feeding existing proxies rather than replacing them.

Online directory (implemented)

Trivial global self-registration needs a hosted directory. That is OPR Directory — SolidStart on Netlify/Vercel (not Cloudflare Workers): dev-centr/opr-directory. Planned hostname providers.devcentr.org once DNS is pointed. Local runners still use UniProvider on disk; the online directory rejects localhost base_url values.

Consuming from Tauri / JavaScript

Prefer localhost HTTP or reading manifests from disk. FFI/WASM bridges to the D library are optional and only justified by measured cost — see the UniProvider bridge note.

Markdown editor context: Markdown editors on local disk.