opencode v2.1.2 turns the free-limit wall into a recovery flow and adds `OPENCODE_DISABLE_FREE_MODELS` plus `experimental.location_idle_timeout`
v2.1.2 published on @opencode/cli on October 21, 2026 (npm latest moved at 03:39 UTC) — a patch bump, again with no GitHub release page — so this article reads the official changelog entry at opencode.ai/changelog (fetched 2026-10-22). Unlike v2.1.1, which shipped without a changelog entry, this one has a full write-up.
Highlights: free-limit recovery, hidden free models, configurable location unloading
Free-limit recovery: when free messages run out, Desktop and the TUI now show the reset time, restore the submitted prompt, and offer direct upgrade or model-switching actions instead of a generic error (#57466, #57467, #57471). On the TUI side that is an inline notice with the reset time and /connect and /models actions (the prompt comes back when the composer is empty), the animated “Free limit reached” OpenCode Go dialog returns with Subscribe / Dismiss / Don’t show again, and the redundant failure notifications are gone. Desktop restores the free-limit dialog, reset-time timeline notice, and submitted prompt — and subscribing to OpenCode Go now switches the current session’s model instead of opening another draft (#57466). Hide free models: set OPENCODE_DISABLE_FREE_MODELS=1 (or true) to remove zero-cost OpenCode and OpenCode Go models from catalogs, defaults, and fallbacks (#57478). Configurable location unloading: experimental.location_idle_timeout accepts a duration string such as "4 hours" or false, controlling when inactive location services unload (#57476) — and locations now stay loaded while sessions are waiting for input, running long tools, or owning background jobs (#57416). Reliable fresh installs: the installer creates ~/.zshrc or Fish’s config.fish when missing, adds OpenCode to PATH, and tells you to run exec $SHELL (#57348).
Also in 2.1.2
Core fixes: legacy console.opencode.ai credentials are forwarded to opencode.ai/console (#57588), and recent Console configuration checks are reused when inference is rejected instead of re-running them (#57465). The TUI only shows “location unavailable” when the server explicitly reports the location as missing (#57594). In the SDK, structured session errors gain retryAfterMs so clients can display provider-supplied retry timing (#57146), that timing is no longer dropped from quota, rate-limit, and provider-internal session errors (#57589), and OpenAI realtime client-secret requests now send the required expires_after.anchor. Extensions: Code Mode async jobs no longer interleave in the middle of statements and lose writes, while concurrent tool calls are preserved (#54276).
source: https://opencode.ai/changelog