github diegosouzapw/OmniRoute v3.8.52

4 hours ago

OmniRoute v3.8.52

1,442 documented changes — 135 features, 1,112 fixes and 195 maintenance entries from 1,386 commits in the cycle, with 306 external contributors. Thank you all.

📄 Complete release notes (every entry, full description and credit): attached below as CHANGELOG-v3.8.52.md, and in CHANGELOG.md → [3.8.52].

⚠️ Known at release time: the i18n mirrors of docs/reference/ENVIRONMENT.md, docs/architecture/RESILIENCE_GUIDE.md and docs/security/GUARDRAILS.md (and 11 more sources) lag the English text; the re-translation wave lands in the next cycle (#15306).

📊 Release by the numbers

👥 People who contributed 318
📝 Commits in the cycle 1,386
🔀 Pull requests referenced 1,369
📋 Changelog entries 1,442
🙌 Contributors credited in entries 317
🤖 Automated dependency commits 17

Entries by type

Type Count
🐛 Fixes 1091
✨ Features 133
📚 Docs 55
🧪 Tests 51
🧹 Chore 45
⚙️ CI 30
⚡ Performance 21
♻️ Refactor 11
🏗️ Build 3
🔒 Security 1
📦 Dependencies 1

🏆 Top 25 contributors this cycle

By commits in 2f42a9ac19..0a1265ea81, author identities consolidated via .mailmap and the merged PR's GitHub login. Bots excluded.

# Contributor Commits
🥇 diegosouzapw 592
🥈 Dizzle (@maxmad64bis) 134
🥉 Paco Cartones (@pacocartones) 62
4 Bob.Hou (@HouMinXi) 49
5 WebPerson (@jonlwheat2-gif) 39
6 Lance Woodson (@woodsonl) 38
7 Fabio Junior Gruchovski (@fabioKoruja00) 19
8 Innokentiy Solntsev (@insoln) 19
9 Caio Figueiroa (@shipsfromrio) 18
10 小妍儿 ✨ (@xiaoyaner0201) 18
11 lorenzozane (@lorenzozanee) 16
12 Praveen K Palaniswamy (@yourspraveen) 15
13 Junior-HJ 14
14 skygunner 14
15 QuangBlue 12
16 Fouad Salkini (@fouadSalkini) 11
17 Jan Leon (@JxnLexn) 11
18 opensource-elearning 10
19 Tiago Rodrigues da Rosa (@tiagolabsit) 7
20 Aldo (@aldoeliacim) 6
21 Ronaldo Davi (@alltomatos) 6
22 Dmitry Galenko (@D4rk4) 6
23 Kizuno18 6
24 Jacob Stoner (@jacobsparts) 5
25 Stanislav (@LazyGatto) 5

✨ New Features

  • feat(providers): add the mainland BigModel.cn (Zhipu) chat-completions provider and correct Z.AI platform links (#12343) — thanks @jackjinke
  • feat(runtime): new REASONING_REPLAY_ENABLED feature flag (Settings → Feature flags, on by default) to stop Reasoning Replay from caching and re-injecting real reasoning text across turns; upstreams that require the reasoning field on replay turns still receive the internal placeholder when it is off (#12486 — thanks @jacobsparts).
  • feat(providers): add NoTrack (notrack.ai) as a free cookie-auth web provider — catalog id notrack-web (alias ntw), /api/dispatch SSE, session cookies uid/si_usr_id/si_ses_id. (#12534) — thanks @jeanbispo
  • feat(services): Added an LLMLingua embedded-service supervisor + HTTP sidecar wrapping the real @atjsh/llmlingua-2 prompt-compression package (ONNX TinyBERT model, downloaded from Hugging Face on first use). The compression engine dispatches /compress calls to the sidecar over HTTP, falling back to the existing in-process worker-thread backend when the sidecar is down. (#12967) — thanks @rqzbeh
  • feat(providers): Hugging Face connections support an optional Bill-To account sent as the X-HF-Bill-To header for cost attribution (#13016) — thanks @Abhijeet1520
  • feat(auto-combo): new nadir auto-router strategy (config.routerStrategy: "nadir") asks Nadir's decision API which model in the candidate pool the prompt needs and routes to it, leaving the connection choice to rules; opt-in, fail-open with a 30 s cooldown after failures, only the last user turn and the model ids leave the box (#13051) — thanks @doramirdor
  • feat(codex): Add explicit per-account paid-credit opt-in with an Extra credits On/Off button in the provider account list. Accounts with available OpenAI credits can continue after their subscription cutoff; credit availability is shown separately, while Spark limits and upstream cooldowns remain effective (#13337) — thanks @feci
  • feat(api-keys): Allow per-key service-tier overrides for OpenAI OAuth requests, preserving inherited defaults and enforcing explicit tiers across combos, retries and Responses transports. (#13554) — thanks @JxnLexn
  • feat(sse): opt-in per-model concurrency caps per connection — configure exact modelConcurrency ceilings inside rateLimitOverrides (dashboard editor or PATCH /api/providers/[id]), enforced as an atomic fourth gate alongside the global/provider/account semaphores with local queueing; unconfigured connections behave exactly as before. Also fixes rateLimitOverrides.executionMaxWaitMs: the schema accepted it but the DB allowlist rejected it, so saving it failed; a dashboard save now also preserves an API-set value (#13700) — thanks @Notaloop763
  • feat(sse): a request no longer dies when the upstream rejects thinking by naming the model instead of the offending field. OmniRoute now drops whichever reasoning field the body actually carries (reasoning_effort, reasoning, thinking, think) and retries once. Ollama rejects this way for Instruct-only models such as Qwen3-Coder, where the 400 reads "Qwen3-Coder:latest" does not support thinking. Neither existing detector could see anything to strip there, so the error went straight back to the client and every Claude Code request carrying a thinking block failed against a self-hosted non-thinking model. (#13868) — thanks @cryptiklemur
  • feat(providers): add Twinmind (twinmind / tm) unofficial web chat provider — Firebase refresh, grouped model discovery, SSE text_delta → OpenAI chunks, emulated tool calling for OpenCode/Claude Code (#14131) — thanks @artickc
  • feat(resilience): skip CLIProxy-backed combo targets before dispatch using management account health, ignoring stale per-model quota rejections (#14206) (#14301) — thanks @sprintberlin
  • feat(providers): WorkBuddy (www.workbuddy.ai, Tencent) is now a first-class provider with its own device-flow OAuth module, catalog entry and token refresh. It is a separate product from CodeBuddy CN (different host, account system and catalog, and a credential from one is not valid on the other), so it deliberately does not alias the CodeBuddy OAuth module — aliasing would point the state request at copilot.tencent.com and mint the wrong credential. The gateway is OpenAI-compatible but accepts only a single-turn request: it rejects the replayed history an agent client sends from turn two on, and reports each violation as a generic code that reads like a transport fault (11148 tool_call_sequence_broken, 11155 reasoning content from the previous turn must be passed back, 11128 Illegal API invocation from an unapproved channel, 11101 non-stream rejected). The repair therefore lands in core as two opt-in RegistryEntry flags — strictChatHistory and bodyStringReplacements — honoured by the existing transformRequest hook and inert for every provider that does not declare them, so no sidecar proxy is required. The catalog is left models: [] with passthroughModels: true and discovered from the authenticated GET /v3/config the official CLI itself uses, because WorkBuddy serves no OpenAI-shaped /models endpoint (/v1/models and /v2/models both 404). That payload is an authenticated GET /v3/config, which returns 22 chat models (observed live via the desktop app's own log); that list replaces the membership of the 26-entry catalogue the CLI ships in cli/product.json rather than extending it, so the image and video entries that exist only in the built-in file are kept out of a chat roster by their capability tags. (#14212) — thanks @zeeshanhaque21
  • feat(rerank): /v1/rerank expands named combos with ordered fallback from a local rerank node to hosted providers (#14286) — thanks @seanford
  • feat(providers): Added onomeo as an OpenAI-compatible API-key gateway (https://onomeo.com/v1), with live model discovery via passthroughModels. The free note states the current call-metered free tier (about 30 free models at 30 calls per 5 hours per account and 12 requests/min per key, inside a shared site-wide pool), that large models are paid from a USD balance with a $0.50/day beta cap, and the optional top-up from $5, and the hint says models are served by third-party upstreams and that onomeo is in public beta (#14297) — thanks @Owaid0723666
  • Share CLI capabilities, aliases, setup recipes and model flags across Node and server consumers, including 5dive; add persistent Gemini setup, private config writes, restricted child environments, signal-aware cleanup and registered native ACP lifecycle. (#14387)
  • feat(sse): Jina token balance in Provider Limits — jina-search, jina, jina-ai and jina-reader connections read the wallet total_balance from GET https://dash.jina.ai/api/v1/api_key/fe_user (60 s cache, fail-open) so rotation can skip exhausted keys (#14449) — thanks @HouMinXi
  • feat(cli): Add opt-in omniroute models test-add for local and remote contexts, with management-authenticated generation, streamed synthetic tool-call and continuation checks pinned to the selected connection. Register the custom model only after verified dispatch, unchanged configuration and transactional readback; return an informational validation receipt without executing real tools. (#14506)
  • feat(providers): add Claude Opus 5.5 (claude-opus-5-5) to the Anthropic API, Claude OAuth, Bedrock and Vertex catalogs — native 1M context, 128K output, five effort tiers (default medium), $4/$20 pricing, Fast Mode, Opus 5 fallback; disabled thinking, manual budgets and forced tool_choice are normalized before dispatch since Opus 5.5 rejects them. The cc/ Opus CLI default stays claude-opus-5, because claude/anthropic connections synced before the launch reject Opus 5.5 until their model list is refreshed (Refs #14612) (#14546). — thanks @ggiak / @HouMinXi / @PixmaNts
  • feat(plugin): filter the published catalog by capability — freeOnly, toolsOnly (on by default, hides models that cannot call tools; set toolsOnly: false for the full catalog), visionOnly (#14554) — thanks @maxmad64bis
  • feat(usage): Per-key weekly USD limits can use a calendar week instead of the earliest upstream account reset. OMNIROUTE_API_KEY_WEEKLY_WINDOW=calendar gives every key the local Monday 00:00 week in OMNIROUTE_API_KEY_WEEKLY_WINDOW_TIMEZONE (default: the process timezone); unset keeps the current behavior (closes #14601) (#14603) — thanks @xiaoyaner0201
  • feat(api-keys): new USAGE_LIMIT_IGNORE_UNPRICED feature flag (Settings → Feature flags, off by default). When on, per-key USD usage quotas count models that have no price as $0 instead of failing closed (#12341), so keys that use subscription or free models without pricing rows are no longer reported and blocked as over quota. Priced spend is still enforced, and dailyHasUnpricedUsage / weeklyHasUnpricedUsage still report the unpriced usage (#14799). — thanks @fouadSalkini
  • feat(providers): add Apmix (apmix.ai) as an OpenAI-compatible, subscription-based provider — one monthly plan with a weighted-token allowance, chat-completions + Responses API at https://api.apmix.ai/v1, live /v1/models discovery keyed to the plan's model union (seed catalog as offline fallback), and a usage fetcher (GET /v1/usage) surfacing the monthly allowance, self-imposed daily/weekly caps and top-up balance in Dashboard › Limits with quota-aware preflight (#14821). — thanks @aref-alapour
  • feat(providers): add BeatAPI as an OpenAI-compatible gateway (#14875) — thanks @erickkkyt
  • feat(api): add or remove models and combos on an API key atomically (#14880). — thanks @fouadSalkini
  • feat(dashboard): full-page API key access editor with tabs, replacing the permissions modal (#14885). — thanks @fouadSalkini
  • feat(dashboard): models and combos catalog with filters and browser-side health tests (#14887). — thanks @fouadSalkini
  • feat(codex): opt-in per-connection codexPromptCacheKeyScope: "thread" aligns the outbound prompt_cache_key with the converged thread id under session-mode fingerprint convergence, so it matches thread_id and stays scoped to the account instead of following a conversation across accounts on failover; the default (client) keeps forwarding the client's key unchanged (#14907) — thanks @gabrielalberton
  • feat(cli): setup-claude and the Claude profile auto-sync skip models of local-CLI providers (zcode, auggie, devin-cli-agentic, codex-app-server) whose binary is not detected on the host, print which providers were skipped and why, and take --include-local / --all to write them anyway (#14952) — thanks @shipsfromrio
  • feat(oauth): Claude Code connections can be added from a claude setup-token token. Dashboard → Claude Code → Add Connection now opens on a Setup Token tab (Browser Login is one click away and no longer starts on open); POST /api/oauth/claude/import-token verifies the token with one max_tokens: 1 request before storing a refresh-less OAuth connection named "Setup token", and re-pasting the same token updates that connection. The connect dialog also resets to its first step with an empty field on every open (#15093) — thanks @dpozimski
  • feat(providers): Added Y-API as an OpenAI-compatible API-key gateway (https://api.y-api.bestvirtualgoods.com/v1), with live model discovery via passthroughModels — its GET /v1/models requires a key, so no model list is seeded. Listed in AGGREGATOR_PROVIDER_IDS because its own catalog states that every model is served by the gateway from third-party upstream vendors rather than trained by it, and its free badge quotes only the models the publisher itself prices at 0 credit. (#15131) — thanks @jiweiyeah
  • feat(dashboard): per-account "Test message" action on each provider connection — a saved test model per connection (Edit connection) and a global test prompt in Settings → AI, backed by GET/PUT/POST /api/providers/{id}/test-message; the quota card footer actions also wrap responsively (#15138 — thanks @JxnLexn)
  • feat(proxy-subscription): generate the local proxy-core config beside the adopted file, opt-in per subscription (#15141) (#15564) — thanks @maxmad64bis
  • feat(proxy-subscription): verify the generated core configuration with the native binary before replacing the adopted file (#15142) (#15564) — thanks @maxmad64bis
  • feat(providers): Add GPT-6.1 Sol to the OpenAI and Codex catalogs with provider-specific limits, Standard pricing, Codex reasoning/Fast wiring, and a synchronized Codex 0.159.2 client identity (#15171) — thanks @xiaoyaner0201
  • feat(codex): add GPT-6.1 Sol support across execution and pricing pipelines — register gpt-6.1-sol and reasoning effort variants (ultra, max, xhigh, high, medium, low), bump Codex client version header to 0.159.2 to resolve upstream ChatGPT account tier-gating, surface upstream detail error diagnostics, retain Responses Lite parallel tool calls, and wire 2.5x Fast mode pricing. (#15192) — thanks @initguru
  • feat(providers): the Xiaomi MiMo Token Plan (mimotp) catalog now lists mimo-v2.6-pro and mimo-v2.6-flash (1M context, 128K output), ahead of Xiaomi retiring mimo-v2.5-pro / mimo-v2.5 on 2026-10-21 (#15219) — thanks @kang-heewon
  • feat(proxy-subscription): reload the local proxy core after a verified config replacement, paced at most once per 60 s per subscription (#15238) (#15564) — thanks @maxmad64bis
  • feat(plugin): filter the published catalog by provider (providersAllow, empty means full catalog) with an explicit empty-result guard (#15239) — thanks @maxmad64bis
  • feat(admin): Expose selector member set-aside state (motive, window, repeat count) in pool visibility (#15240). — thanks @maxmad64bis
  • feat(proxy-subscription): prune nodes the core check rejects, then retry verification before keeping the previous file (#15295) (#15564) — thanks @maxmad64bis
  • feat(proxies): accept operator-provided dated egress observations for pool members — an authenticated push route stores dated observed addresses per member behind a new opt-in flag, merged with the journal read for display and pool order with the freshest observation winning (#15314) — thanks @maxmad64bis
  • feat(proxy): Add OMNIROUTE_UPSTREAM_HTTP2_ENABLED=false to force HTTP/1.1 on Undici direct, HTTP(S)/SOCKS proxy, relay, and retry dispatchers without disabling certificate verification. HTTP/2 remains enabled by default (closes #15313) (#15318). — thanks @Kizuno18
  • feat(proxies): Log refusal-store writes and show transport proof in pool visibility (#15374) — thanks @maxmad64bis
  • perf(db): Serve repeated synced vision verdicts from a version-gated memo instead of re-reading the catalog (#15378) — thanks @maxmad64bis
  • feat(dashboard): flag a provider whose exits fail upstream together so the pool screen reads it as an upstream problem, and show upstream 4xx and 5xx as separate counts (#15386) — thanks @maxmad64bis
  • feat(combos): the /dashboard/combos auto-routing catalog now loads the live built-in auto/* combos from GET /api/combos/auto (kind badge and candidate count per card) with Control Center, Test and Duplicate actions; GET /api/combos/auto?id= materializes one auto combo and POST /api/combos/test can test an auto/* combo (up to 8 highest-weight candidates). auto/* combos with no live candidates are no longer listed in /api/combos/auto or advertised in /v1/models (#15397 — thanks @afonsoft).
  • feat(sse): Agentic pipeline combos can configure ordered executor backups for failed responses and transport errors while preserving successful streams (#15419) — thanks @potatosips.
  • feat(memory): opt-in claude-mem worker backend (pinned to 127.0.0.1), so /api/memory and A2A memory search read and write the same store the claude-mem Claude Code hooks fill; initMemoryBackends() now registers opt-in backends before configure() instead of failing silently on a non-SQLite primary/fallback (#15425) — thanks @engomarzaied-prog
  • feat(providers): ClinePass connections now show their 5-hour, weekly and monthly usage limits on the quota dashboard, read from Cline's /api/v1/users/me/plan/usage-limits, and reset-aware combo strategies can use those windows (closes #9740) (#15427) — thanks @PixmaNts
  • feat(i18n): the translation backend forwards the optional reasoning control when set (#15462) — thanks @maxmad64bis
  • feat(dashboard): token refresh failures can pause per account instead of blocking the whole provider (#15469) — thanks @maxmad64bis (with thanks to @xiaoyaner0201 for the scope proposal in #15444)
  • feat(plugin): trim the default view with per-provider fresh and showcase caps, tunable freshness window and new options (#15484) — thanks @maxmad64bis
  • feat(proxy-subscription): warn with a translated count when generation skips entries instead of reporting not generated or staying silent (#15564) — thanks @maxmad64bis
  • feat(providers): Perplexity API (Sonar, Agent) and Perplexity Search requests now send an X-Pplx-Integration: omniroute attribution header (#15573) — thanks @qirh
  • feat(dashboard): new Monitoring → Cooldown Manager page lists every connection that is out of routing (connection cooldowns, model lockouts, terminal states) and clears cooldowns per connection, for a selection, or for a whole provider, instead of opening each provider page. It also edits the stream-stall cooldown switch and the OAuth / API-key base cooldown and backoff steps. Backed by the new management-only GET/POST /api/resilience/cooldowns; terminal states (banned, expired, credits exhausted) are never cleared there. (#15630) — thanks @fouadSalkini
  • ZenMux image generation — route zenmux/ and zm/ models through the OpenAI Images API or Vertex AI :predict, normalize image output, and enforce Ming Design's text-only/model-selected dimensions contract. (#15670 — thanks @JeanRGW)
  • feat(embeddings): llama.cpp connections accept OmniRoute's canonical multimodal embedding items — image, audio (wav/mp3/flac) and video become llama-server content parts (image_url / input_audio / input_video) with inline data, one vector per item, for servers started with --embedding --mmproj (e.g. EmbeddingGemma 2). Remote sources go through the same SSRF-guarded fetch and 16 MiB request cap as Jina/Gemini (#15758) — thanks @hartmark
  • feat(providers): add the CodeBuddy International (codebuddy.ai) provider as codebuddy-intl (alias cbai), sharing the device-auth flow, executor, token refresh and quota fetcher with codebuddy-cn by realm (closes #15173) (#15799) — thanks @Junior-HJ
  • feat(combos): a successful model sync now flags combo steps pinned to models that are missing from the provider's synced catalog. The sync response lists them in staleComboRefs and an audit entry is written. Combos are never modified (#15800) — thanks @tiagovilasboas
  • feat(combos): opt-in COMBO_AUTO_PRUNE_STALE_STEPS feature flag (default off): a successful model sync removes the combo steps pinned to models missing from the provider's authoritative catalog, with one audit entry per removed step. Failed, degraded and free-only syncs never prune, and a combo is never emptied (#15925) — thanks @tiagovilasboas
  • feat(quality): the forgotten-sibling gate and test-impact selection now follow path-literal edges: tests that read a workflow, root config or doc as a file (new URL(…, import.meta.url), resolve/path.join, readFileSync) are mapped in a new deterministic artifacts section of the impact map, so changing .github/workflows/quality.yml flags and selects check-workflows.test.ts without ever forcing a full run (#16068) (#16129)
  • fix(quality): artifact edges require an existing tracked regular file and reject symbolic links, including linked parent directories. Import specifiers are excluded by occurrence, so a separate file read of the same JSON path still reaches the sibling advisory and additive test selection; deletion and skip/todo masking protections remain unchanged. (#16129)
  • fix(quality): scan quoted path spans without unbounded regular expressions, preserve occurrence-specific imports across whitespace, and retain parentheses inside joined path segments. Oversized or incomplete literals do not create partial artifact edges. (#16129)
  • feat(search): opt-in provider-reported search cost — a connection with providerSpecificData.trustReportedCost: true bills the usage.search_cost_usd its operator-configured endpoint returns (also on error responses) instead of the static costPerQuery, recorded once per request_id in request_cost_ledger; caller provider_options.baseUrl endpoints are never trusted. Per-key daily/weekly USD usage limits now include search spend (#16088) — thanks @thotypous
  • Set ONNXRUNTIME_NODE_INSTALL=skip explicitly for the shared dependency-install action and direct checkout install steps, include the action policy in the dependency cache identity, and document local shell usage. The legacy .npmrc key remains for compatibility; published-package consumer installs are outside this checkout policy. (#16246)
  • feat(video): MiniMax Hailuo text-to-video now works through a native create → poll → file-retrieve transport (previously listed but rejected with Unsupported video format) (#16508) — thanks @octo-patch
  • feat(providers): GitHub Copilot auto model (github/auto): Copilot picks the model, which Copilot Free accounts require. OmniRoute resolves the pick before routing, so a Claude pick uses the native /v1/messages path, and usage, cost and call logs are recorded under the model that served the request (#16679) — thanks @Primexz
  • feat(stt): Deepgram transcription supports opt-in speaker diarization and verbose_json speaker segments (#16685) — thanks @n1klaus
  • feat(sse): opt-in coalescing of Claude content_block_delta events (SSE_COALESCE_*_MS), SSE frame batching (SSE_FRAME_COALESCE_MS) and an interval-based stall watchdog (SSE_STALL_WATCHDOG=interval), all off by default (#16722) — thanks @WYSTAF / @wallerjenifernk530-hash
  • feat(image): Muse Image 1.0 text-to-image and reference-image edits on the Muse Code (Meta) provider, reusing the muse-code API key or device-flow credential (#16871) — thanks @dasepmoch
  • feat(settings): selective transfer of provider accounts (and the custom provider nodes they use) between installations — passphrase-sealed file, import preview and per-item add/skip/replace that never deletes anything (#16877) — thanks @minthanthtoo
  • feat(providers): Baseten opt-in thinking via chat_template_args.enable_thinking, per-model reasoning effort clamp and refreshed model seed (#16879) — thanks @elidrissi-amine
  • feat(providers): Qwen Cloud Token Plan text-to-speech (qct/qwen-audio-3.0-tts-plus, DashScope SpeechSynthesizer, region-aware) and per-model reasoning-effort enums so out-of-enum efforts are mapped on the first request (#16886) — thanks @alysson-souza
  • feat(providers): add DaoXE OpenAI-compatible gateway (daoxe) with live /v1/models discovery and passthrough models (#16889) — thanks @seven7763
  • feat(guardrails): per-type PII selection, custom masking patterns (ReDoS-gated) and detection counters for the opt-in PII masking (#16902) — thanks @lsilveirab39
  • feat(updater): Docker-aware dashboard update — image containers show the host docker compose pull + recreate command, and DOCKER_UPDATE_TRIGGER_FILE enables one-click updates through a host-watched request file inside DATA_DIR (no Docker socket) (#16907) — thanks @semihisikman
  • feat(cli-tools): applying Codex settings can also write an OmniRoute model catalog (model_catalog_json, opt-in checkbox, off by default) so Codex's /model picker lists routable provider-prefixed models; fails open with a warning when Codex can't be read (#16910) — thanks @kalfian
  • feat(providers): add NaN.Builders API-key provider (nan) — chat with live model discovery, embeddings, STT/TTS (Kokoro default voice), image generation, rerank and per-model token quota usage (#16912) — thanks @tasarren
  • feat(models): list Gemini 4 Argon on the Gemini API (API-key) provider and give it a default pricing row (intro paid tier $2 / $10 / $0.10 cached per 1M), so API-key usage is no longer billed at $0 (#16913) — thanks @WYSTAF
  • feat(usage): show the Codex Luna Reserve quota rows as display-only usage rows that never affect account selection (#16915) — thanks @raflyazf
  • feat(compression): opt-in antislop-ui and antislop-copy output styles that steer generated UI and copy away from generic AI defaults (purpose-tested visuals; no em dash, generic CTAs or invented facts; WCAG AA contrast, keyboard and mobile rules) (#16916) — thanks @royhanmh
  • feat(cli): omniroute setup-zed adds OmniRoute as an OpenAI-compatible provider in Zed (key stays in OMNIROUTE_API_KEY), plus a Zed card in the CLI catalog (#16919) — thanks @YoannDev90
  • feat(dashboard): per-connection decode speed (avg/last tok/s, TTFT, sample count per model) on quota cards (#16920) — thanks @raflyazf
  • feat(api-keys): Pin an API key to one model or combo with the new forcedModel permission: every chat request made with the key is routed there even when the client hard-codes or omits the model, while the key's model, combo and budget limits still apply. (#16921) — thanks @sandypratama2030-gif
  • feat(providers): Display each connection's last successful model-sync timestamp beside Auto-Sync and trigger an immediate per-connection model refresh when enabling it, with safe cache invalidation and user-visible sync-failure feedback (refs #16940) (#16947) — thanks @fabioKoruja00
  • feat(api): opt-in capability / min_context / kind / q discovery filters on GET /v1/models (output unchanged without them) and a new POST /v1/models/query deterministic model shortlist (#16945) — thanks @vianhanif
  • feat(search): forward allow-listed, Zod-validated Exa and Tavily request fields via provider_options.exa / provider_options.tavily, map time_range to both, add the Tavily finance topic and keep their extra result fields in provider_raw (#16950) — thanks @asuan-dev
  • feat(providers): "Ping now" button on Codex OAuth connection rows sends one small request right away so the account's quota window starts, without changing Auto-Ping. It skips when the session or weekly quota is exhausted, honours exclusive leases and the provider circuit breaker, and allows one ping per account at a time (#16954) — thanks @Chumr26
  • feat(search): Parallel web search and fetch provider (parallel-search, alias parallel): one API key serves /v1/search (web only, mode-based pricing for turbo/fast/basic/advanced) and /v1/web/fetch (Markdown only, capped at 100,000 characters; a page Parallel cannot extract returns 422) (#16960) — thanks @tommyyzhao
  • feat(providers): optional custom ID suffix for OpenAI-/Anthropic-compatible provider nodes (openai-compatible-<apiType>-<suffix> / anthropic-compatible-<suffix>), with 409 on duplicate ids instead of a 500 (#16961) — thanks @rafi-zadanly
  • feat(dashboard): Copyable connection-ID chip on every provider connection row, plus docs for per-request account pinning with the x-omniroute-connection header (strict pin, single-model requests, Claude Code ANTHROPIC_CUSTOM_HEADERS example) (#16963) — thanks @nhan14t1
  • feat(settings): scheduled wakeups for Codex OAuth accounts: a new section in the Codex Quota Auto-Ping card pings chosen accounts daily at a set time (timezone + weekdays) or every N minutes, so each account's quota window starts when you want. It skips when the circuit breaker is open, the account is cooling down or under an exclusive lease, or its quota is exhausted (#16965) — thanks @Chumr26
  • feat(providers): Add Demon Route as an OpenAI-compatible API-key gateway for open-weight models, with encrypted normal connection storage, live key-scoped model import / Auto-Sync, curated offline seeds, exact vendor/model ID preservation, Chat Completions and streaming, a 120-second minimum upstream wait, provider metadata and generated reference, a setup/troubleshooting guide, and provider-specific regression tests. Free-lane models require a confirmed deposit and are not advertised as an unconditional free plan (refs #16979) (#17001) — thanks @fabioKoruja00
  • feat(i18n): translate up to N locales per request with --locales-per-request in sync-ui-keys (#PRNUM) (#15562) — thanks @maxmad64bis
  • feat(dashboard): add Compact and Exact token display mode toggle to Usage Analytics toolbar (#13019) — thanks @ZaimMarzuki
  • feat(antigravity): dynamically synchronize live-discovered models outside the static catalog into quota normalization, and introduce family quota pools (Gemini Models, Claude & GPT Models) across 5-hour and weekly windows with dashboard group tracking (#13739) — thanks @TheDemonTuan
  • feat(providers): add ChatPlayground (chatplayground, alias cpl) web provider routing models across Azure, LMSYS, and Perplexity endpoints with dynamic model discovery from https://app.chatplayground.ai/api/models (#12690) — thanks @james-martinez
  • feat(providers): auto-minting Clerk session JWT authentication via https://clerk.chatplayground.ai/v1/client/sessions/{sid}/tokens using the __client cookie and sid (derived from the __session JWT cookie), with in-memory caching and expiry skew (#12690) — thanks @james-martinez
  • feat(providers): support multi-account rotation and failover natively via OmniRoute's Combo Router and account fallback engine (#12690) — thanks @james-martinez
  • feat(providers): OpenAI-compatible streaming translation for ChatPlayground via TransformStream, stripping internal CHAT_ID:[a-zA-Z0-9_-]+ tokens (#12690) — thanks @james-martinez
  • feat(usage): add ChatPlayground quota & limits monitoring via GET /api/user tracking daily query allowances (including 300 credits/day for Lifetime subscription accounts) and midnight UTC resets (#12690) — thanks @james-martinez
  • feat(dashboard): add clamp/full description display modes to the feature-flags cards. A persisted toggle in the Feature Flags grid toolbar (localStorage, hydration-safe) switches every card's description between clamp (2-line clamp + full text on hover, via a styled tooltip) and full (always expanded). (#12740) — thanks @jonlwheat2-gif
  • feat(network): new OMNIROUTE_LOCAL_PROVIDER_NODE_HOSTS lets operators list hostnames (typically a Docker/Compose service name such as reranker) that provider-node routing treats as local: eligible for /v1/rerank, /v1/audio/* and the local health check without the *_REMOTE_PROVIDER_NODES flags, and called directly instead of through HTTP(S)_PROXY or a pinned proxy — so a sidecar no longer needs a hard-coded container IP. Empty by default; IP literals and cloud-metadata names are rejected with a warning (#14635) (#14640) — thanks @xiaoyaner0201
  • feat(providers): DeepSeek-web tool-call parsing now recognizes native DSML invoke/parameter tokens (both the printable-ASCII and full-width tokenizer spellings) in addition to the existing <tool>{json}</tool> shapes, and preserves parallel tool calls and stable call IDs/indexes; custom OpenAI-compatible image/video generation providers now fail closed on a missing base URL instead of silently falling back to a built-in provider endpoint (#14103) — thanks @arashashrafii
  • feat(providers): Added SYNTX.ai (syntx / stx) as an unofficial/experimental JWT provider. Chat reuses chat_uuid across OpenAI multi-turn history, PUT /api/v1/user/settings for a 4k system_prompt.default, and keeps compact generate on tools:[]. Media covers image, video, speech, music, transcription, and upscale. Live /api/v1/llm/models discovery, Limits via subscription + rolling-window quotas, JWT validation, and a 10-minute stream-readiness window. (#14269) — thanks @artickc
  • feat(providers): add Token Market (tokenmarket) as an OpenAI-compatible multi-model API gateway with Bearer-key authentication and live model discovery from /v1/models. (#13191) — thanks @FitBBC
  • feat(providers): Added Unifically as an OpenAI-compatible API-key gateway (https://api.unifically.com/v1), with live model discovery via passthroughModels. Discovery is scoped to /v1/models?category=llm, because the same catalog also lists image, video and audio models that run through a separate async task API and are not chat-completion targets. (#14182) — thanks @unifically-dev
  • feat(auth): enable dual auth for Cline and Kilo Code providers (#11837) — thanks @raheemuddin786
  • feat(cli): add omniroute fcc-claude — FCC-style launcher with fallback chain (#11908)
  • feat(providers): add Astra to the curated GitHub Copilot catalog (#12759) — thanks @backryun
  • feat(search): implement /v1/alpha/search endpoint for Codex native web search (fixes #8674) (#13788) — thanks @amsjavan
  • feat(quality): version static gate profiles and detect script drift (#14401)
  • feat(quality): prepare non-mutating admission ruleset proposals (#14419)
  • feat(ci): bind workflow admission to exact candidate results (#14420)
  • feat(quality): common original-source coverage instrumentation (#14524)
  • feat(providers): add vendor-drift tooling for codex-chatgpt-web (#14194) (#14719) — thanks @alexdrgpy06
  • feat(dashboard): per-account quota display on provider page (#14803) — thanks @aref-alapour
  • feat(claude): add Claude Sonnet 5.5 and correct Sonnet 5 pricing (#15035) — thanks @HouMinXi
  • feat(resilience): expose live combo queue telemetry (#15092) — thanks @xiaoyaner0201
  • feat(providers): add TypeSafe System One client for Jev routing (#15278) — thanks @miguelenes
  • feat(dashboard): one-click show/hide toggles for sidebar sections (#15508) — thanks @for-the-zero
  • feat(images): support Gemini Antigravity image-to-image editing in /v1/images/edits (#15513) — thanks @Ardem2025
  • feat(identity): refresh pinned CLI versions from their release feeds (#15642) — thanks @HouMinXi
  • feat(sse): trace Anthropic thinking-signature failures without payload logging (#15685) — thanks @insoln
  • feat(dashboard): add Blacklist button for models with error test status (#15858) — thanks @kveita
  • feat(resilience): add typed provider availability states (#15918) — thanks @atescivitci-cmd
  • feat(sse): upload images for DeepSeek Web Flash (#16034) — thanks @ape1121
  • feat(server): headless mode — OMNIROUTE_HEADLESS=1 / serve --headless (rail 3.8.53) (#16079)
  • feat(dev): local candidate build/validate/promote loop with rollback (rail 3.8.53, #8084 local side) (#16180)
  • feat(grok-cli): allow a validated client version override (#16397) — thanks @TechNickAI
  • feat(api): support Grok subscription image generation (#15423) — thanks @QuangBlue
  • feat(api): add Firecrawl Map endpoint with account fallback (#15703) — thanks @lacijowo
  • feat(models): opt-in MODELS_DEV_EFFORT_TIERS_ENABLED (default off) uses the reasoning effort tiers models.dev publishes when neither an override nor the registry declares any, and treats a declared empty tier list as "no tiers" in /v1/models (#15944) — thanks @HouMinXi
  • feat(plugin): opt-in combosSource: "models" for the v2 plugin publishes the combo rows /v1/models already serves and skips the /api/combos request; the default "api" source and its every-member filtering are unchanged (#16167) — thanks @maxmad64bis

🐛 Bug Fixes and 📝 Maintenance

1,112 fixes and 195 maintenance entries — listed in full, each with its PR and credit, in the attached CHANGELOG-v3.8.52.md.

🙌 Contributors

Thanks to everyone whose work landed in v3.8.52:

Contributor PRs / Issues
@0xH3li0 #16281
@123abab123789 #16468, #16479, #16491
@47vigen #16284
@66666-design #16290
@70nyIT #15193
@AbdullahPesteli #16686
@Abhijeet1520 #13016
@adivekar-utexas #15565
@afonsoft #15397, #16109
@aldoeliacim #15259, #15841, #16255, #17049, #17096, #17097
@AlexanderMakarov #16640
@alexdrgpy06 #14719
@aliepratama #16153
@alltomatos #15195, #15197, #15578, #15631, #16038, #16744
@alvinveroy #13003, #13005, #15640
@alysson-souza #16886
@amirho1 #16729
@amirsalaar #16717, #16738, #16909
@AmirSys-dev #16289
@amsjavan #13788
@AnandkumarMall #16537
@andikadevs #16530
@AndreAlmeidaDC #16654, #16955, #16959
@AndresDiagoM #16546, #16648
@Android-Login-Analysis #16297
@andyvandaric #16713
@anhtahaylove #14988
@anndev-69 #16892
@ape1121 #16034, #16106
@arashashrafii #14103, #15448
@ArchdukeViel #16296
@arcslash #16543
@Ardem2025 #15513
@aref-alapour #14803, #14821, #14835
@artickc #14131, #14269, #16559
@asdlombardi4-lang #14313
@askidmobile #16524, #16841
@asuan-dev #16735, #16950
@atescivitci-cmd #12917, #15868, #15918
@avichal15 #13127
@Azzt17 #16510
@backryun #12608, #12759
@bayhnf #16537
@bbmy85552 #15179
@BenjaminAronsson #15428, #15945, #15948
@bilalsafdardev #14889
@Bl0ck154 #16623
@branben #15498
@brashdaniel-droid #16322
@brimob-sowax #16521, #16675
@c4lyp5o #15333
@caniko #15920
@castocolina #16985, #16986, #16987, #16988
@Ch3fUlrich #14901, #14992
@chenli971014-sketch #16283
@chirag127 #12564
@christianjgilman #16601
@christianmahardhika #15559
@Chumr26 #16954, #16965
@ClaudioASantana #13387
@claw-io #15492
@claytontavaresdan #16539
@cmbergamo #16610
@CodeSavvy77 #15886, #16060
@coozgan #16537, #16894
@copystring #17000
@coqfu #17044
@cryptiklemur #13868, #15102, #15103, #16866
@D4rk4 #15533, #15750, #15787, #16006, #16017, #16260
@dajiaohuang #15708
@DangTAnh #14199
@daniadasaya #16642
@DarknessKiller #16999, #17029
@dasepmoch #16871
@DavyMassoneto #16447, #16448
@Deepleakk #16644
@defyma #16703
@developerjillur #16522
@doramirdor #13051, #15113
@dpozimski #15093
@dqphong0302 #16541
@dungartoriaaa #16287, #16511
@DuqueSouza #16357
@ebouther #15755
@edosulai #15359, #15566, #17030
@ekinnee #15668, #15693
@elidrissi-amine #16879
@elielsousa-pathbit #16621
@ElioBonfim #15615, #15935
@ElissonNadson #16337
@elvis460 #16840
@engomarzaied-prog #15425
@erickkkyt #14875
@erikyao0125 #16733
@ersaasyhar #16618
@espokaos-ops #13345
@exodus2512 #15669
@f-liva #16293
@fabioKoruja00 #16819, #16856, #16859, #16860, #16863, #16868, #16888, #16934, #16937, #16938, #16947, #16951, #16952, #16956, #17001, #17022, #17031, #17042, #17087
@fabioluissilva #15178
@farshadasadpour #16085
@fasilu #16529
@feci #13337, #15624, #16586
@FerryAr #16512
@fidelix #15299, #15310
@FitBBC #13191
@fomathpro-arch #15711
@for-the-zero #15255, #15508, #17024
@fouadSalkini #14799, #14880, #14885, #14887, #15628, #15630, #15637, #15700, #15990, #16438, #17056
@foxy1402 #16403
@gabrielalberton #14907
@ggdayup #15778
@ggiak #14546
@GGsXPosiedon #16234
@GimingRao #16908
@gonisulaimann #14701
@grapeslush #15450
@gsmarcil #16478, #16818
@guanbear #12893
@hamedniroomand #16628
@hartmark #15757, #15758, #15761, #15881
@haumanto #16542
@HDBR #15262, #15532, #15629, #15941
@hongkongkiwi #15904, #15932
@HouMinXi #13603, #14449, #14546, #14548, #14725, #14884, #15035, #15049, #15090, #15099, #15158, #15280, #15355, #15356, #15361, #15363, #15364, #15365, #15368, #15369, #15406, #15407, #15408, #15415, #15416, #15418, #15430, #15461, #15472, #15494, #15495, #15505, #15510, #15516, #15535, #15553, #15624, #15642, #15643, #15674, #15701, #15710, #15830, #15943, #15944, #16018, #16028, #16033, #16054, #16071, #16423, #16673, #16901
@huohua-dev #16708
@hussmanne #15237
@huynle-dev #17040
@iamzidar #13311
@IEatCodeDaily #16675
@igorgomes3 #16285
@imnotscare #16113
@initguru #15192
@innonazarene #16314
@insoln #15557, #15597, #15598, #15608, #15685, #15772, #15784, #15786, #15891, #15893, #15895, #15897, #15917, #16007, #16011, #16014, #16015, #16037, #16041
@jackjinke #12343
@jackyfan01 #16966
@jacobsparts #12486, #16076, #16309, #16549, #16784
@james-martinez #12690
@jeanbispo #12534
@JeanRGW #15670
@jefripunza #16852
@JessenReinhart #16917
@jiweiyeah #15131
@JJAbrams-eng #13330
@jktan0504 #16248, #16825
@jonlwheat2-gif #12740, #15215, #15217, #15221, #15222, #15226, #15227, #15233, #15242, #15244, #15281, #15282, #15283, #15290, #15291, #15376, #15379, #15381, #15382, #15384, #15388, #15394, #15468, #15520, #15522, #15695, #15766, #15767, #15768, #15771, #15773, #15949, #15950, #15951, #15952, #15964, #15965, #15966, #16056
@Jordannst #16493, #16625
@JunDev76 #16682
@Junior-HJ #15572, #15575, #15602, #15791, #15792, #15797, #15799, #16118, #16396, #16427, #16627, #16632, #16922, #16998, #17046
@juniorgaudencio00-code #16704
@Juriseagle #15561
@JxnLexn #13554, #15132, #15133, #15135, #15138, #15481, #15486, #15487, #16299, #16404, #16474
@kabeza #16281
@kalfian #16910
@kalpakprod #15357
@kang-heewon #15219
@khanghack222 #16622
@KiaroSama #15574, #16420, #16424, #16599
@Kizuno18 #15318, #15319, #16098, #16099, #16100, #16101
@KooshaPari #4165
@krzemienski #16523
@KrzysiekSko #16434
@kveita #15858
@kvyb #16711
@lacijowo #15703
@Laksopan23 #15156
@LazyGatto #15308, #15752, #15759, #16274, #16752
@lepkov #15082
@likongkong666 #16646
@lorenzozanee #15476, #15478, #15479, #15480, #15499, #15541, #15542, #15543, #15576, #15739, #16080, #16105, #16213, #16426, #16433, #16601
@Louayzouaoui1 #16204, #16216, #16425
@louisphamdev #16294, #16295
@lsilveirab39 #16902
@LuisAlejandro #15975, #15976, #15977, #16372, #16378
@m00nie #16725
@M3stryX #16250
@mad-gooze #17004
@MakdumIbrohim #16531
@mannnrachman #16949
@matheusgcdj #14910
@maxmad64bis #14554, #14805, #15003, #15140, #15224, #15225, #15236, #15239, #15240, #15248, #15314, #15316, #15353, #15354, #15362, #15374, #15375, #15378, #15383, #15386, #15389, #15390, #15392, #15395, #15396, #15398, #15399, #15402, #15432, #15433, #15434, #15435, #15436, #15443, #15449, #15451, #15455, #15462, #15463, #15466, #15469, #15474, #15475, #15482, #15483, #15484, #15560, #15562, #15564, #15737, #15738, #15741, #15748, #15885, #15888, #15908, #15978, #15980, #15981, #16051, #16067, #16082, #16102, #16104, #16162, #16163, #16164, #16166, #16167, #16193, #16194, #16212, #16228, #16267, #16268, #16270, #16271, #16272, #16273, #16275, #16276, #16291, #16292, #16300, #16301, #16302, #16303, #16304, #16305, #16331, #16333, #16334, #16335, #16336, #16339, #16340, #16344, #16350, #16353, #16354, #16361, #16362, #16363, #16367, #16371, #16373, #16374, #16376, #16377, #16379, #16382, #16386, #16389, #16390, #16391, #16408, #16419, #16504, #16759, #16760, #16769, #16773, #16775, #16779, #16785, #16786, #16793, #16797, #16798, #16925, #16927, #16932, #17011, #17014, #17072
@mdc2122 #15024
@mdigitalbh81 #15277
@megamen32 #16926, #17062
@miguelenes #15278
@MikeTuev #16236
@minhtuancn #16282
@minthanthtoo #16877
@mohammadraufzahed #15431, #15446
@morpheus9393 #13891
@mrnim94 #16700
@MRQC-st #16598
@MumuTW #15127, #15128
@mwpn #16490
@n1klaus #16685
@Neuron-Mr-White #15187, #16567, #16568
@nhan14t1 #16963
@nitsuah #16280, #16867
@Notaloop763 #13700
@ntdat812 #16519, #16520, #16521, #16523, #16862
@ntdatt812 #16510, #16521, #16539, #16540, #16891, #16893
@octo-patch #16508
@octrow #16387
@omar-nahhas #16483, #16484
@omnitrixAG #16498
@onexer88-blip #16077
@oooohhoo #16974
@opensource-elearning #16323, #16324, #16341, #16342, #16346, #16355, #16430, #16436, #17036, #17067
@Owaid0723666 #14297
@pacocartones #15946, #15989, #15991, #15992, #15993, #15994, #15995, #15996, #15997, #15999, #16001, #16005, #16008, #16009, #16043, #16047, #16117, #16119, #16123, #16124, #16168, #16441, #16453, #16456, #16501, #16504, #16507, #16517, #16544, #16556, #16606, #16607, #16609, #16614, #16615, #16620, #16630, #16633, #16636, #16639, #16641, #16647, #16649, #16650, #16651, #16656, #16657, #16658, #16659, #16661, #16668, #16671, #16730, #16991, #16992, #17009, #17010, #17012, #17013, #17016, #17019, #17020, #17021, #17023
@patrykkopycinski #15647, #15724, #15725
@pedrohx26 #16683
@PIKACHUIM #16911
@PixmaNts #14546, #15427
@piyush97 #15485
@Poid-ZA #15676
@pompousman #16613
@potatosips #15419
@Primexz #16629, #16679
@PrinceThummar011 #16155, #16683, #16764
@qirh #15573
@QuangBlue #14973, #15117, #15160, #15168, #15186, #15261, #15331, #15332, #15412, #15413, #15423, #15702
@quantum-shubham #17085
@rafi-zadanly #16961
@raflyazf #16626, #16710, #16719, #16906, #16915, #16920, #16946
@raheemuddin786 #11837
@RaviTharuma #15745
@Reinazhard #16713
@rifuki #16710
@royhanmh #16916
@rqzbeh #12967
@rusak47 #16513
@ryanngit #16288, #16469, #16475, #16480, #16484, #16497, #16728, #16742
@sadSanta-07 #16262, #16269
@Sahas2711 #15712
@sandypratama2030-gif #16921
@sasazemzulin058-debug #16532
@scottchristian #16705
@seanford #14286, #15549
@semihisikman #16628, #16699, #16704, #16713, #16715, #16720, #16907
@SemonCat #16495
@seven7763 #16889
@shannonlowder #15358
@Sheshiyer #13052
@ShiDai567 #16638
@shipsfromrio #14952, #15023, #15154, #15155, #15164, #15169, #16108, #16146, #16151, #16525, #16550, #16566, #16580, #16581, #16584, #16588, #16589, #16592, #16594
@Shurelia #16617
@sirwhy #16494
@Siva-2517 #15570
@SkiiOS #16665
@skygunner #15054, #15231, #15457, #15458, #15459, #16091, #16316, #16359, #16360, #16375, #16388, #16395, #16504, #16528, #16582
@SoloDrex52 #15742
@Spoon94 #16865, #16914
@sprintberlin #14301
@StevanusPangau #16684
@suhanrain #16821
@tasarren #16912
@TechNickAI #16397
@Theadd #15340, #16605, #17079
@TheCrabe #16481, #16499
@TheDemonTuan #13739
@themirzaalibaig #16858, #16895
@TheViniAlmeida #15594
@thienpvt #16541
@thotypous #16086, #16087, #16088
@tiagolabsit #16462, #16463, #16464, #16465, #16466, #16467, #16514
@tiagovilasboas #15800, #15925, #17101
@tikhomirov #15900
@timootten #15754, #15756
@tommyyzhao #16960
@TPOHH #13224
@trabgarmarjc-maker #16534
@trespassmk #15699, #16144, #17002
@turbolego #16223, #16227, #16810
@Tushar49 #16021
@unifically-dev #14182
@velizarofff #16826
@vianhanif #16511, #16539, #16645, #16945
@VihaanR #15301
@W25X80 #16181
@wahidsadik371-coder #12743
@wakqasahmed #15905
@waleedkkk #15878
@wallerjenifernk530-hash #16722
@webzidev #14988
@wedreamer #15548
@WellArtDev #16295
@woodsonl #15137, #15206, #15209, #15296, #15298, #15345, #15346, #15571, #15583, #15587, #15589, #15590, #15591, #15592, #15593, #15596, #15599, #15600, #15601, #15603, #15604, #15605, #15607, #15609, #15610, #15612, #15613, #15614, #15617, #15618, #15682, #15801, #15857, #16277, #16278, #16366, #16392, #16445
@wray-lee #12914, #16351
@wusaki0723 #16674
@WYSTAF #16698, #16702, #16722, #16913
@x-adam #16732
@xiaoyaner0201 #14603, #14619, #14640, #14976, #15084, #15086, #15087, #15092, #15094, #15171, #15189, #16473, #16505, #16574, #16585, #16591, #16655, #16663, #16693, #16829
@Xxx91n #11902
@Yashxp1 #15114
@Yi-111-a #15328
@YoannDev90 #16919
@yourspraveen #15252, #15253, #15254, #15452, #15453, #15465, #15467, #16399, #16401, #16410, #16415, #16418, #16564, #16565, #16931
@yugui923 #12869, #15213
@ZaimMarzuki #13019
@zasasamar2129 #16637
@zebrajaeger #15337
@zeeshanhaque21 #14212
@zeydsama #16222
@zitus91 #15663
@diegosouzapw maintainer

Don't miss a new OmniRoute release

NewReleases is sending notifications on new releases.