PackageTrack
Sign in Get early access

github.com/thushan/olla

v0.0.29 #2888 most downloaded on Go modules thushan/olla

What this package is like to depend on

Last release 13 days ago

10 Aug 2026

Ships fairly regularly

a new release about every 4 weeks

Rarely documented

notes for 5 of 24 stable releases

Nothing withdrawn

no release was ever pulled

1 years old

32 releases · first in 2025

18 releases in the last 12 months

see the full history below

Release timeline

32 releases · Jun 2025 to Aug 2026
2026
Release Pre-release

Releases

latest 32
  1. v0.0.30-0.20260810225933-9fed553fc1cc 10 Aug 2026 pre-release

    Nothing published for this version

  2. v0.0.29 10 Aug 2026
    Release notes

    What's in this release

    Olla is a high-performance proxy and load balancer for LLM infrastructure.

    Quick Start

    # Docker
    docker pull ghcr.io/thushan/olla:v0.0.29
    
    # Binary (see assets below)
    ./olla --config config.yaml

    What's New in v0.0.29

    Admin Dashboard

    • New embedded, read-only admin dashboard at /internal/ui/ - Overview (fleet status, success rate, latency, live requests-per-second sparkline), Endpoints (per-endpoint health, priority, latency, model count) and Models (inventory grouped by family, with hosting endpoints). Built in Svelte 5 + TailwindCSS, polled (not pushed) against the existing /internal/status* JSON, and served from the same listener as the proxy - no second port (#205).
    • The dashboard has no authentication. Access is controlled by a new dashboard.access_policy config block (allowed_cidrs + allowed_hosts), loopback-only by default. The published Docker image ships with allowed_cidrs pre-widened to the RFC1918 ranges so docker run -p 40114:40114 ghcr.io/thushan/olla:latest gives you a working dashboard with no config mount - which also means the container is reachable from anyone else on the same LAN through that published port (#213). See the Admin Dashboard docs for the full security model.
    • A binary built without make build-web (e.g. plain go build or go install) now logs a clear startup warning and serves 503 at /internal/ui/ instead of a silent placeholder (#213).

    Observability

    • Native GET /internal/metrics in Prometheus text format, built from the same data as /internal/status and /internal/stats/models - no external exporter needed for core proxy monitoring. Thanks to @Puupuls for the contribution (#188).
    • /internal/status, /internal/status/endpoints and /internal/status/models now emit a weak ETag, so polling clients (including the new dashboard) can use If-None-Match and get 304s instead of re-fetching the full payload (#205, #213).
    • Sticky-session and routing decisions are now in the structured "Request completed" log line (sticky_outcome, routing strategy/action/reason, provider_model, translator fallback reason), not just response headers. Addresses issue #178 (#182).
    • Successful proxy requests log at Info again in the access log; a prior regression had silently demoted them to Debug (#211).

    Reliability

    • A request landing on an endpoint whose circuit breaker is open now fails over to the next available endpoint instead of failing outright. The endpoint is dropped from that request's candidate list only - its persisted health is left alone, since an open breaker already reflects accumulated failure state and demoting health on top of it isn't the retry path's job (#213).
    • Strict routing no longer lets an unroutable model_aliases entry silently proxy to the wrong backend: a request for an alias whose target model exists on no endpoint now fails fast with 404/503 and routing_action: rejected, matching how unknown models are already handled. Reported by @skaravos (#197, issue #191).
    • config/models.yaml now actually parses. It used \d inside double-quoted YAML scalars, which is invalid YAML, so the file has never loaded on any install - the failure was swallowed and Olla silently fell back to embedded defaults, discarding any customisation with no diagnostic. Reported by @billford (#206, issue #204).
    • New --validate-config flag checks configuration and provider profiles without starting the server, with a pass/warn/fail report and exit codes (#210).
    • logging.level in config is now actually applied to the runtime logger, instead of being parsed and ignored (#209).

    Model Catalog

    • Refreshed the built-in model catalog for 2026: recognises more families and variants (GPT-OSS, GLM, Kimi, Granite, Nemotron, EXAONE, Hunyuan, MiniMax, OLMo, InternLM, SmolLM, Command-R, Forge) and MXFP4/NVFP4 quantisation (#207).
    • Wired model_extraction.family_aliases and special_rules.preserve_family into the family-extraction pipeline - both were parsed but previously had no effect. Fixes Kimi-K2 being misclassified under deepseek (shared GGUF architecture lineage) (#208).

    Security & Startup

    • An endpoint URL with embedded user:pass@host credentials now fails startup instead of loading silently and leaking the credentials into every status/dashboard JSON response. The boot error rewrites the URL into a ready-to-paste auth: block with placeholders, so the fix doesn't require re-typing the real credentials (#213).
    • The id and url fields on /internal/status and /internal/status/endpoints are now derived from a sanitised URL (userinfo, query and fragment stripped) rather than echoing the raw configured URL (#213).
    • /internal/status no longer reports "status": "critical" on a healthy fresh boot with no traffic yet. A new system.has_traffic boolean lets clients branch on the no-traffic state directly instead of parsing the success_rate string (#213).

    Docker & Release

    • Streamlined the container image and switched to .dockerignore for a smaller, more predictable build context (#213).
    • Added a release dry-run validation step to the release pipeline (#213).

    Breaking Changes

    • Userinfo URLs: - url: "http://user:pass@host:8080" now fails startup. Move credentials into an auth: block:
      - url: "http://host:8080"
        auth:
          type: basic
          username: user
          password: pass
    • Status id/url fields: now derived from a sanitised URL rather than the raw config value. Bookmarked dashboard deep-links to a specific endpoint will change once after upgrading. Clients comparing url for identity should switch to id.
    • Zero-traffic status: a fresh boot with all endpoints healthy no longer reports "critical". Check system.has_traffic if you branch on traffic state.
    • Strict routing on unroutable aliases: /olla/proxy/ with zero healthy endpoints now returns 503 instead of 502. Update any monitor keyed on that status code.
    • owned_by in converted model listings: the shared organisation-extraction logic used by the vLLM, vLLM-MLX, SGLang, llama.cpp, LMDeploy and Lemonade converters now also matches a hyphenated leading segment (e.g. Qwen2.5-7Bowned_by: "Qwen2.5") rather than falling through to a generic default. Treat owned_by as a best-effort label, not a canonical identifier.

    Acknowledgements

    Thanks to everyone who contributed to this release:

    • @Puupuls - contributed the native GET /internal/metrics Prometheus endpoint (#188).
    • @skaravos - reported the strict-routing alias bypass (issue #191).
    • @billford - reported the config/models.yaml parse failure (issue #204).
    • @sg-shag - reported the missing sticky-session/routing decision logging (issue #178).

    Full Changelog: v0.0.28...v0.0.29


    Documentation: thushan.github.io/olla | Issues: github.com/thushan/olla/issues

    Open source →
  3. v0.0.28 13 Jun 2026
    Release notes

    Olla is a high-performance proxy and load balancer for LLM infrastructure.

    Quick Start

    # Docker
    docker pull ghcr.io/thushan/olla:v0.0.28
    
    # Binary (see assets below)
    ./olla --config config.yaml

    What's New in v0.0.28

    This is a huge release and contains a lot of new exciting changes and bugfixes!

    New Backends & Compatibility

    • Native oMLX support - added the oMLX runtime as a first-class backend with native Anthropic Messages API passthrough (#167).
    • Docker Model Runner Anthropic passthrough - passthrough now resolves the native messages path from the backend profile (anthropic_support.messages_path), fixing 404s against DMR's /anthropic/v1/messages (#171).
    • Lemonade models are now routable - Lemonade's downloaded flag is mapped to available state, so downloaded models route correctly instead of being treated as unhealthy. Thanks to @matthewjhunter for the report and fix (#161, issue #160).
    • OpenAI alias fixes - type: "openai" now resolves model listings correctly via /olla/openai/v1/models; removed the duplicate openai.yaml profile that caused non-deterministic route registration. openai-compatible is the canonical value,
      openai remains an accepted alias. Thanks to @petersimmons1972 for the report (#151, issue #148).
    • OpenAI-compatible backends now surface maximum context-length information (#167).

    Authentication & Security

    Highly requested feature finally implemented!

    • Per-endpoint authentication for local backends - bearer, api_key and basic auth, with credentials from inline strings, ${ENV_VAR}, or _file siblings for Docker/k8s. Works with vLLM/llama.cpp/LiteLLM --api-key or any bearer-auth reverse
      proxy. Thanks to @ShubhamTiwary914 for the report (#146, issue #132).
    • 401/403 health probes now report config_error instead of dead; 429 honours Retry-After without tripping the circuit breaker; POST retries are skipped once response bytes have flushed (no double billing on mid-stream resets).
    • Capped upstream error bodies at 1 MiB and enforced max_body_size on non-proxy and translator routes (including chunked bodies) (#173).
    • Strip inbound X-Olla-* headers from upstream responses (anti-spoofing), sanitise X-Request-ID to prevent log injection, and stop leaking the auth scheme in status JSON (#173).

    CORS

    • CORS support (opt-in, via rs/cors) for browser-based clients like OpenWebUI and dashboards. Off by default; auto-exposes the X-Olla-* header set. Thanks to @ccsmart for the request (#159, issue #156).

    Anthropic / Translation

    • Reasoning → thinking translation - OpenAI reasoning/reasoning_content now maps to Anthropic thinking blocks in both streaming and non-streaming responses (#176).
    • Hardened streaming translation: preserves final usage chunks, synthesises fallback output_tokens, keeps same-chunk reasoning/content/tool-call deltas intact, and fixes repeated/interleaved tool-call handling (#176).
    • More reliable translated SSE: emits valid SSE error events after response commit, with proper Flush/Unwrap on wrapped writers (#176).
    • Lenient Anthropic parsing - unknown/experimental Anthropic request fields (e.g. context_management) are now ignored during translation and forwarded unchanged in passthrough mode. Thanks to @RenxuLogan for the report (#157, issue #154).

    Configuration Tunables

    • New tunables, all zero-value-means-default and OLLA_-overridable (#164, #165):
    • server.read_header_timeout (default 10s) - guards against Slowloris-style slow-header attacks.
    • proxy.response_header_timeout (default 30s) - raise for on-demand model loaders (e.g. Lemonade) that would otherwise abort cold starts at 30s. Now honoured by both Olla and Sherpa. Thanks to @matthewjhunter (#164, issue #163).
    • proxy.connection_keep_alive (default 30s) and proxy.tls_handshake_timeout (default 10s).
    • model_registry.unification.cleanup_interval / stale_threshold are now honoured (previously silently ignored, hard-coded to 5m) (#171).

    Reliability & Performance

    • Olla config is now an atomic.Pointer, snapshotted once per request/stream, so a hot-reload can't hand an in-flight request a torn config (#173, #176).
    • Endpoint pools and circuit breakers use LoadOrCompute, eliminating racing transport rebuilds on first use (#173).
    • Cleanup loops survive per-tick panics; fixed event-bus shutdown and health-checker double-stop races; proxy engine cleanup now runs on shutdown (#176).
    • litepool.Get returns errors instead of panicking (handles nil and typed-nil factory results) (#176).
    • Hot-path tuning: typed-struct streaming chunk parsing and pooled SSE encoding buffers (#176).
    • Removed dead code in the Olla engine (unused methods/pools, a forced runtime.GC(), an unread request counter) (#173).

    Behaviour Changes to be aware of

    • /internal/status/models now returns endpoint names for every entry (was inconsistently URL-then-names). Consumers reading endpoints[0] as a URL must switch to names (#173).
    • Upstream X-Olla-* response headers are dropped, so a chained Olla-in-front-of-Olla setup loses the inner instance's headers (#173).
    • Default proxy engine is now Olla and the default load balancer is least-connections (#172).

    Tooling & Docs

    • New validation harness (/olla-validate --quick / --nightly) with a local multi-protocol mock backend and fault injection - no Docker, CI-safe (#174).
    • Standardised GitHub issue/PR templates (#170).
    • Documentation refresh aligning all guides, headers and config examples with the codebase (#172).
    • Fixed /version self-path reporting (previously reported a 404'ing /internal/version) (#171).

    Acknowledgements

    Thanks to everyone who reported issues and contributed to this release:

    • @matthewjhunter - contributed the Lemonade routing fix (#161, issue #160) and the configurable response_header_timeout (#164, issue #163).
    • @ShubhamTiwary914 - reported the need for auth against local backends (#132), which drove per-endpoint authentication.
    • @petersimmons1972 - reported empty model listings for type: "openai" endpoints (#148).
    • @RenxuLogan - reported newer Anthropic request fields breaking translation (#154), driving lenient parsing.
    • @ccsmart - requested CORS support for browser-based clients (#156).

    What's Changed Summary

    New Contributors

    Full Changelog: v0.0.27...v0.0.28


    Documentation: thushan.github.io/olla | Issues: github.com/thushan/olla/issues

    Open source →
  4. v0.0.28-0.20260604125538-f09b5c9e6d0a 04 Jun 2026 pre-release

    Nothing published for this version

  5. v0.0.27 27 Apr 2026
    Release notes

    What's in this release

    We've added native support for LMDeploy after so long as well as bugfixes for sticky sessions thanks to @lbatalha.

    Quick Start

    # Docker
    docker pull ghcr.io/thushan/olla:v0.0.27
    
    # Binary (see assets below)
    ./olla --config config.yaml

    Changelog

    Other


    Documentation: thushan.github.io/olla | Issues: github.com/thushan/olla/issues

    Open source →
  6. v0.0.26 20 Apr 2026
    Release notes

    What's in this release

    This is a bugfix release that addresses SSL connection issues due to mis-handling of the Host header.

    Quick Start

    # Docker
    docker pull ghcr.io/thushan/olla:v0.0.26
    
    # Binary (see assets below)
    ./olla --config config.yaml

    Changelog

    Other


    Documentation: thushan.github.io/olla | Issues: github.com/thushan/olla/issues

    Open source →
  7. v0.0.26-rc.1 18 Apr 2026 pre-release

    Nothing published for this version

  8. v0.0.25 17 Apr 2026
    Release notes

    What's in this release

    Olla is a high-performance proxy and load balancer for LLM infrastructure.

    Quick Start

    # Docker
    docker pull ghcr.io/thushan/olla:v0.0.25
    
    # Binary (see assets below)
    ./olla --config config.yaml

    Release Highlights

    Model Aliasing

    Thanks to @dnnspaul for contributing the Model Aliasing feature to Olla to alias models easily via the configuration.

    Sticky Sessions

    We've now got a way of having sticky sessions in Olla to help keep requests aligned to KV Caches across multiple endpoints, taken from the working implementation in TensorFoundry's FoundryOS.

    Bugfixes and Chores

    Lots of bugfixes and chores from March & April.

    Changelog

    Features

    Bug Fixes

    • 33307eb: fix(inspector): copy buffer bytes before pool return to avoid aliasing (@dnnspaul)
    • c54eea9: fix(inspector): incremental scan with token-level skipping for field-order independence (@dnnspaul)
    • f7222c9: fix(inspector): replace io.NopCloser with readCloser to preserve body Close delegation (@dnnspaul)
    • 2bbb9f7: fix(inspector): restore body on error and fix decoder state in extractTopLevelModelField (@dnnspaul)
    • ed1609a: fix: address CodegRabbit review issues (@thushan)
    • 8a28dbf: fix: extract model name from large requests via streaming JSON prefix scan (@dnnspaul)
    • d923536: fix: propagate model alias rewrite map to translation hanlder (@thushan)
    • 96b67eb: fix: replace regex model rewrite with json.Decoder token scanner (@dnnspaul)

    Other


    Documentation: thushan.github.io/olla | Issues: github.com/thushan/olla/issues

    Open source →
  9. v0.0.25-0.20260222095711-83712ca37b17 22 Feb 2026 pre-release

    Nothing published for this version

  10. v0.0.24 22 Feb 2026

    Nothing published for this version

  11. v0.0.23 20 Feb 2026

    Nothing published for this version

  12. v0.0.23-0.20251215115025-d1603bfe1523 15 Dec 2025 pre-release

    Nothing published for this version

  13. v0.0.22 10 Dec 2025

    Nothing published for this version

  14. v0.0.22-0.20251106104047-fd2733d02235 06 Nov 2025 pre-release

    Nothing published for this version

  15. v0.0.21 06 Nov 2025

    Nothing published for this version

  16. v0.0.20 22 Oct 2025

    Nothing published for this version

  17. v0.0.19 09 Oct 2025

    Nothing published for this version

  18. v0.0.18 23 Sep 2025

    Nothing published for this version

  19. v0.0.18-0.20250823104714-f5b50f06bf27 23 Aug 2025 pre-release

    Nothing published for this version

  20. v0.0.17 23 Aug 2025

    Nothing published for this version

  21. v0.0.17-0.20250816004852-5d2915bccc13 16 Aug 2025 pre-release

    Nothing published for this version

  22. v0.0.16 15 Aug 2025

    Nothing published for this version

  23. v0.0.15 12 Aug 2025

    Nothing published for this version

  24. v0.0.14 05 Aug 2025

    Nothing published for this version

  25. v0.0.13 03 Aug 2025

    Nothing published for this version

  26. v0.0.12 26 Jul 2025

    Nothing published for this version

  27. v0.0.11 18 Jul 2025

    Nothing published for this version

  28. v0.0.10 03 Jul 2025

    Nothing published for this version

  29. v0.0.9 13 Jun 2025

    Nothing published for this version

  30. v0.0.8 10 Jun 2025

    Nothing published for this version

  31. v0.0.7 09 Jun 2025

    Nothing published for this version

  32. v0.0.6 07 Jun 2025

    Nothing published for this version

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive