v0.6.0

tashfeenahmed/freellmapiv0.6.0Jul 26, 2026by tashfeenahmed

AI Summary

This release introduces a localized dashboard with 60 languages and a new settings dialog, alongside significant router discipline improvements to prevent rate limit overshooting and new audio transcription capabilities.

Key Highlights

  • New Settings dialog with System/Light/Dark theming support
  • Dashboard now available in 60 languages with full RTL support
  • Router discipline improvements including in-flight request leases and per-minute gates
  • New `/v1/audio/transcriptions` endpoint for speech-to-text
  • Security hardening moving Gemini keys from query strings to headers

New Features

  • Settings dialog and theming
  • 60 languages with RTL support
  • Audio transcription endpoint
  • reasoning_effort parameter on chat completions
  • Per-attempt routing traces
  • Failover-ladder drill-down in Analytics
  • Android and Termux support
  • Per-provider timeout configuration

Full Release Notes

A dashboard you can use in your own language, a settings surface for theme and preferences, and a large router-discipline pass that stops the gateway causing its own rate limits.

## Settings dialog & theming

- **New Settings dialog** reachable from the account menu, alongside license-gated **Upgrade** and **Sign out** (#607)
- **System / Light / Dark theme** — `system` now tracks the OS preference live, and your choice persists across reloads

## 60 dashboard languages

- The dashboard ships in **60 languages** (up from 6), with a searchable language picker (#607)
- **Full RTL support** — Arabic, Hebrew, Persian, Urdu and friends flip `<html dir>` immediately
- Non-English dictionaries are **lazy-loaded**, so the initial bundle doesn't grow
- README now lists every supported language and how to contribute a translation (#610)

## Routing & reliability

- **In-flight request leases + a provider-wide per-minute gate** — concurrent requests no longer all pass the same pre-check and collectively overshoot a free tier's limit (#598)
- **Per-key scoring** — key selection samples each key's own measured reliability and speed instead of treating every key on a provider alike; `platform:model_id` is now a hard pin (#605)
- **Cooldown-probe recovery** — heuristically benched keys are re-probed in the background and released early instead of idling out the timer (#601)
- **Client disconnects abort upstream** — a closed connection stops the fallback ladder, frees the lease, and is no longer recorded as a provider failure (#601)
- **Honest exhaustion statuses** — 413 for context too large, 429 with `Retry-After`, 404 for unknown models, 503 when nothing is configured, 502 for upstream failures (#601)
- **Streaming first-byte grace** — long prefills are no longer killed by the mid-stream stall watchdog (#605)
- **Health false negatives fixed** — a transport blip no longer benches every key on a provider, and serving a live request self-heals a key stuck at `error` (#598)
- **Local Ollama** endpoints stop getting 24h rate-limit benches from plain timeouts (#603)
- A keyless entry in declarative config no longer **crashes the server at boot** (#603)
- Per-provider timeouts via `PROVIDER_TIMEOUT_<PLATFORM>` and a stream stall watchdog

## New capabilities

- **`/v1/audio/transcriptions`** — OpenAI-compatible speech-to-text, catalog-driven, with Groq and Cloudflare adapters (#602)
- **`reasoning_effort`** on chat completions and responses, mapped natively to Gemini thinking budgets, with inline `<think>` blocks extracted into `reasoning_content` (#602)
- **Per-attempt routing traces** — every fallback attempt is persisted; `GET /api/analytics/requests/:id` returns the ordered ladder (#602)
- **Served-model drift detection** — when a provider serves something other than what was asked for, the gateway records it (#603)
- **Gemma tool calling** passes through instead of being stripped (#605)

## Dashboard

- **Failover-ladder drill-down** in Analytics: per-attempt dialog, status/provider filters, per-provider breakdown (#603)
- **Audio tab** split into text-to-speech and speech-to-text, with per-model pages and curl snippets (#602)
- **Honest scores** — merged model rows show min–max ranges and "best of N"; providers with no traffic say "no data" instead of showing an identical prior (#605)
- **Notifications** — success/info auto-dismiss after 5s, errors stay until dismissed, timers pause on hover (#605)
- **70% smaller bundle over the wire** — gzip plus immutable caching for hashed assets, 1390 KB → 411 KB (#574)

## Security & operability

- Gemini key moved out of the `?key=` query string into the **`x-goog-api-key` header** at every call site — it was landing in proxy logs and error strings (#597)
- **Console credential redaction** installed before anything logs (#597)
- Provider daily caps count from **midnight UTC** instead of a sliding window; `Retry-After` clamped to 24h (#597)
- **Cooldowns are visible and clearable** — listed on `GET /api/keys`, cleared with `DELETE /api/keys/:id/cooldowns` (#597)
- SQLite `busy_timeout` plus `0600` on the database and its WAL sidecars (#597)

## Fixes

- TTS: OpenAI voice names mapped to provider voices, so default OpenAI-SDK requests work out of the box (#523)
- Responses report the routed model id instead of upstream placeholders like Reka's `"default"` (#568)
- **Android / Termux support** via a `node:sqlite` adapter; `better-sqlite3` is now optional so a failed native build can't break install (#308, groundwork by @PSYCH0patch)
- Health-check failure reasons captured, redacted, and shown beneath the affected key (#536)
- New `docs/README.md` index and README documentation links (#436)
- NVIDIA NIM `DEGRADED function` 400s treated as provider capacity, not an invalid request
- Docker image ships `server/node_modules` so the proxy can load undici
- Catalog sync guards model override keys against unknown columns (#458)
- macOS DMG falls back to an unsigned build when Apple signing secrets are absent, instead of failing the release (#563)

Full diff: https://github.com/tashfeenahmed/freellmapi/compare/v0.5.0...v0.6.0

Thanks to @NirvanaCh7, @qq97693453, @AskingConical, @emv33, @Arman-Espiar, @MetaMysteries8, @lujun880726, @ousamabenyounes, @cagedbird043, @jasnoorgill, @Joey9024, @ProAlit, @Mohamed3nan, @wangzhenhui1992, @PSYCH0patch and everyone who reported issues.

> **macOS note:** the DMG is not notarized — on first launch use right-click → Open (or `xattr -d com.apple.quarantine /Applications/FreeLLMAPI.app`).

---
⭐ Like the free router? [Go Premium](https://freellmapi.co/?utm_source=github&utm_medium=release&utm_campaign=premium&utm_content=v0.6.0#pricing) — the live signed catalog, $19/yr, cancel anytime.