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_ENABLEDfeature 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 idnotrack-web(aliasntw),/api/dispatchSSE, session cookiesuid/si_usr_id/si_ses_id. (#12534) — thanks @jeanbispo - feat(services): Added an LLMLingua embedded-service supervisor + HTTP sidecar wrapping the real
@atjsh/llmlingua-2prompt-compression package (ONNX TinyBERT model, downloaded from Hugging Face on first use). The compression engine dispatches/compresscalls 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-Toheader for cost attribution (#13016) — thanks @Abhijeet1520 - feat(auto-combo): new
nadirauto-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 torules; 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
modelConcurrencyceilings insiderateLimitOverrides(dashboard editor orPATCH /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 fixesrateLimitOverrides.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, SSEtext_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 atcopilot.tencent.comand 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,11101non-stream rejected). The repair therefore lands in core as two opt-inRegistryEntryflags —strictChatHistoryandbodyStringReplacements— honoured by the existingtransformRequesthook and inert for every provider that does not declare them, so no sidecar proxy is required. The catalog is leftmodels: []withpassthroughModels: trueand discovered from the authenticatedGET /v3/configthe official CLI itself uses, because WorkBuddy serves no OpenAI-shaped/modelsendpoint (/v1/modelsand/v2/modelsboth 404). That payload is an authenticatedGET /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 incli/product.jsonrather 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/rerankexpands 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 viapassthroughModels. 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-aiandjina-readerconnections read the wallettotal_balancefromGET 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-addfor 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 (defaultmedium), $4/$20 pricing, Fast Mode, Opus 5 fallback; disabled thinking, manual budgets and forcedtool_choiceare normalized before dispatch since Opus 5.5 rejects them. Thecc/Opus CLI default staysclaude-opus-5, becauseclaude/anthropicconnections 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; settoolsOnly: falsefor 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=calendargives every key the local Monday 00:00 week inOMNIROUTE_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_UNPRICEDfeature 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, anddailyHasUnpricedUsage/weeklyHasUnpricedUsagestill 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/modelsdiscovery 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 outboundprompt_cache_keywith the converged thread id under session-mode fingerprint convergence, so it matchesthread_idand 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-claudeand 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/--allto write them anyway (#14952) — thanks @shipsfromrio - feat(oauth): Claude Code connections can be added from a
claude setup-tokentoken. 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-tokenverifies the token with onemax_tokens: 1request 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 viapassthroughModels— itsGET /v1/modelsrequires a key, so no model list is seeded. Listed inAGGREGATOR_PROVIDER_IDSbecause 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-soland reasoning effort variants (ultra,max,xhigh,high,medium,low), bump Codex client version header to0.159.2to resolve upstream ChatGPT account tier-gating, surface upstreamdetailerror 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 listsmimo-v2.6-proandmimo-v2.6-flash(1M context, 128K output), ahead of Xiaomi retiringmimo-v2.5-pro/mimo-v2.5on 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=falseto 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/combosauto-routing catalog now loads the live built-inauto/*combos fromGET /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 andPOST /api/combos/testcan test anauto/*combo (up to 8 highest-weight candidates).auto/*combos with no live candidates are no longer listed in/api/combos/autoor 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/memoryand A2A memory search read and write the same store the claude-mem Claude Code hooks fill;initMemoryBackends()now registers opt-in backends beforeconfigure()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: omnirouteattribution 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/andzm/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) andvideobecome llama-servercontentparts (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 ascodebuddy-intl(aliascbai), sharing the device-auth flow, executor, token refresh and quota fetcher withcodebuddy-cnby 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
staleComboRefsand an audit entry is written. Combos are never modified (#15800) — thanks @tiagovilasboas - feat(combos): opt-in
COMBO_AUTO_PRUNE_STALE_STEPSfeature 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 deterministicartifactssection of the impact map, so changing.github/workflows/quality.ymlflags and selectscheck-workflows.test.tswithout 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: truebills theusage.search_cost_usdits operator-configured endpoint returns (also on error responses) instead of the staticcostPerQuery, recorded once perrequest_idinrequest_cost_ledger; callerprovider_options.baseUrlendpoints are never trusted. Per-key daily/weekly USD usage limits now include search spend (#16088) — thanks @thotypous - Set
ONNXRUNTIME_NODE_INSTALL=skipexplicitly 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.npmrckey 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
automodel (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/messagespath, 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_jsonspeaker segments (#16685) — thanks @n1klaus - feat(sse): opt-in coalescing of Claude
content_block_deltaevents (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/modelsdiscovery 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, andDOCKER_UPDATE_TRIGGER_FILEenables one-click updates through a host-watched request file insideDATA_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/modelpicker 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-uiandantislop-copyoutput 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-zedadds OmniRoute as an OpenAI-compatible provider in Zed (key stays inOMNIROUTE_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
forcedModelpermission: 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/qdiscovery filters onGET /v1/models(output unchanged without them) and a newPOST /v1/models/querydeterministic model shortlist (#16945) — thanks @vianhanif - feat(search): forward allow-listed, Zod-validated Exa and Tavily request fields via
provider_options.exa/provider_options.tavily, maptime_rangeto both, add the Tavilyfinancetopic and keep their extra result fields inprovider_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, aliasparallel): 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-connectionheader (strict pin, single-model requests, Claude CodeANTHROPIC_CUSTOM_HEADERSexample) (#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-requestinsync-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, aliascpl) web provider routing models across Azure, LMSYS, and Perplexity endpoints with dynamic model discovery fromhttps://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}/tokensusing the__clientcookie andsid(derived from the__sessionJWT 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 internalCHAT_ID:[a-zA-Z0-9_-]+tokens (#12690) — thanks @james-martinez - feat(usage): add ChatPlayground quota & limits monitoring via
GET /api/usertracking 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 betweenclamp(2-line clamp + full text on hover, via a styled tooltip) andfull(always expanded). (#12740) — thanks @jonlwheat2-gif - feat(network): new
OMNIROUTE_LOCAL_PROVIDER_NODE_HOSTSlets operators list hostnames (typically a Docker/Compose service name such asreranker) that provider-node routing treats as local: eligible for/v1/rerank,/v1/audio/*and the local health check without the*_REMOTE_PROVIDER_NODESflags, and called directly instead of throughHTTP(S)_PROXYor 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/parametertokens (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 reuseschat_uuidacross OpenAI multi-turn history, PUT/api/v1/user/settingsfor a 4ksystem_prompt.default, and keeps compact generate ontools:[]. Media covers image, video, speech, music, transcription, and upscale. Live/api/v1/llm/modelsdiscovery, 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 viapassthroughModels. 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/modelsalready serves and skips the/api/combosrequest; 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 |