@opencode/theme
2.1.2 · 21 Oct 2026MIT35.4k / weekRepositoryHomepagenpmAtom feed
Latest releases
All 36 releases2.1.2
21 Oct 2026Hide Free Models: Set
OPENCODE_DISABLE_FREE_MODELS=1ortrueto remove zero-cost models from OpenCode and OpenCode Go catalogs, defaults, and fallbacks.Configurable Location Unloading: Set
experimental.location_idle_timeoutto a duration such as"4 hours", or tofalse, to control when inactive location services unload.
Highlights
Clear Free-Limit Recovery: When your free messages run out, Desktop and the TUI now show the reset time, restore your submitted prompt, and offer direct upgrade or model-switching actions instead of a generic error. (#57466, #57467, #57471)
Hide Free Models: Set
OPENCODE_DISABLE_FREE_MODELS=1ortrueto remove zero-cost models from OpenCode and OpenCode Go catalogs, defaults, and fallbacks.Configurable Location Unloading: Set
experimental.location_idle_timeoutto a duration such as"4 hours", or tofalse, to control when inactive location services unload.Reliable Fresh Installs: The installer now creates
~/.zshrcor Fish’sconfig.fishwhen missing, adds OpenCode toPATH, and tells you to runexec $SHELL.
Core
Improvements
Added
OPENCODE_DISABLE_FREE_MODELSfor hiding free OpenCode and OpenCode Go models.Added
experimental.location_idle_timeout, accepting a duration string orfalse.
Bug fixes
Fixed fresh zsh and Fish installations not adding OpenCode to
PATHwhen their configuration file did not exist.Kept locations loaded while sessions are waiting for input, running long tools, or owning background jobs.
Fixed legacy
console.opencode.aicredentials not being forwarded toopencode.ai/console.Reused recent Console configuration checks when inference is rejected, avoiding unnecessary repeated checks.
TUI
Improvements
Added an inline free-limit notice with the reset time and
/connectand/modelsactions, while restoring the submitted prompt when the composer is empty.Restored the animated “Free limit reached” OpenCode Go dialog with Subscribe, Dismiss, and Don’t show again actions.
Bug fixes
Stopped showing redundant failure notifications when the free-message limit is reached.
Only shows “location unavailable” when the server explicitly reports the location as missing.
Desktop
Bug fixes
Restored the free-limit dialog, reset-time timeline notice, and submitted prompt after free usage is exhausted. Subscribing to OpenCode Go now updates the current session’s model instead of opening another draft.
SDK
Improvements
Added
retryAfterMsto structured session errors so clients can display provider-supplied retry timing.
Bug fixes
Fixed retry timing being dropped from quota, rate-limit, and provider-internal session errors.
Fixed OpenAI realtime client-secret requests by supplying the required
expires_after.anchor.
Extensions
Bug fixes
Fixed Code Mode async jobs interleaving in the middle of statements and losing writes, while preserving concurrent tool calls. Thanks @RhysSullivan!
2.1.1
20 Oct 20262.1.0
20 Oct 2026Persistent Terminals on Windows: Windows users now get persistent PTYs through the same terminal workflow available on macOS and Linux.
Todo Lists in the TUI: Enable
{ "experimental": { "todo": true } }to give models thetodowritetool and display their task list in the session and sidebar.Reliable Long-Running TUI Commands: Plugin commands, shell calls, and other TUI requests can now run beyond Bun’s five-minute fetch deadline without losing their connection.
Highlights
Persistent Terminals on Windows: Windows users now get persistent PTYs through the same terminal workflow available on macOS and Linux.
Todo Lists in the TUI: Enable
{ "experimental": { "todo": true } }to give models thetodowritetool and display their task list in the session and sidebar.Reliable Long-Running TUI Commands: Plugin commands, shell calls, and other TUI requests can now run beyond Bun’s five-minute fetch deadline without losing their connection.
Breaking changes
Version 2.1 makes intentional changes to public SDK, HTTP message/event, and plugin contracts so provider replay data and compaction use consistent names and shapes. Integrations must adopt the new fields. Existing stored sessions, credentials, and older session imports remain readable through compatibility decoders; no database migration is required.
Provider replay data is now
nativeProvider-owned replay data previously used different names on different surfaces. Read and write
nativeinstead; a tool's executionstateand UImetadataare separate and are not renamed.Surface Before After Text and reasoning parts statenativeAssistant and compaction messages providerStatenativeText/reasoning lifecycle events and session.tool.calledstatenativesession.step.ended,session.step.failed, andsession.compaction.endedproviderStatenativesession.tool.successandsession.tool.failedresultStatenativeExported replay-data schema SessionMessage.ProviderStateSessionMessage.NativePlugin compaction hook result SessionCompactionResult.providerStateSessionCompactionResult.nativeTool call and result data share
tool.nativeTool parts no longer have separate
providerStateandproviderResultStatefields:tool - providerState? - providerResultState? + native? state
Success and failure events shallow-merge their
nativeinto the call's existingnative. Missing result data preserves call data; result values win on duplicate keys. Provider/protocol implementations must use distinct keys when call and result values differ. There is nostate.native,resultNative, or nested{ call, result }envelope.Replay passes the merged blob to the protocol, which reads the fields it needs. Tool calls receive it only for the same provider and model. Provider-run results receive it for the same provider, including after a model switch. Local results receive it only for the same provider and model when the step did not fail. Legacy stored or imported
providerResultStateis merged intotool.nativewhen read. Execution status and readable output remain intool.state.Key credential setup answers move to
metadataCredential.Key.configurationis removed. Public credential writes must put setup-form answers in the existingmetadatafield:{ type: "key", key: "...", - configuration: { account: "example" } + metadata: { account: "example" } }Existing stored credentials and
opencode auth importstill accept the old shape. Legacyconfigurationis merged intometadata; the legacy configuration value wins when both contain the same key. This compatibility is for storage/import, not a reason to keep sendingconfigurationin public writes.Summary compactions reference kept messages
Compaction messages and
session.compaction.started/session.compaction.endedno longer exposerecent. New summary compactions reference the first message retained verbatim throughmetadata.keepIDinstead of storing a second, flattened copy:summary compaction - recent: "[User]: ... [Assistant]: ..." + metadata: { keepID: "msg_..." }History reconstructs the kept text from that message up to the compaction boundary. Forks remap the reference to their copied messages, and compaction hooks can override
keepIDthrough metadata. Kept text from pre-2.1 compactions and V1 imports remains available asmetadata.recent. New compactions store the reference, not the duplicated text.Provider compaction windows move to
native.messagesCompleted compactions and
session.compaction.endedno longer haveproviderContext. The replacement message window now lives innative.messages:- providerContext: { version, provenance, messages } + native: { messages }Native compaction replay now matches the compaction's provider ID and model ID, rather than route/protocol/endpoint provenance. If they do not match, history uses the original messages. Endpoint changes alone no longer block replay, and request hooks that rewrite the base URL no longer block native compaction or replay.
Summary compactions no longer save the summary call's unused provider data in
native. A compaction hook'sresult.nativeis still stored; if it containsmessages, that window is replayed instead of the summary. OldproviderContextrows and events are converted when read, including the media format used before 2.0.15.Remove the unused
session.compactedeventThe transitional
session.compactedevent is removed from the public event surface. Update event subscriptions and schema imports to use the current compaction lifecycle events, includingsession.compaction.startedandsession.compaction.ended.Core
Improvements
Added persistent PTY support for Windows x64 and ARM64.
Restored the
todowritetool behind{ "experimental": { "todo": true } }; it accepts the complete list as{ todos: [{ content, status }] }.Restored session archiving, including archive-state filtering and restoring archived sessions.
Added support for editing saved permission actions and resource patterns.
Summary compaction now covers the whole conversation while retaining recent text verbatim, and begins earlier by default to leave more response room.
Added the
streamUsagemodel compatibility option for providers that rejectstream_options.
Bug fixes
Prevented long-running TUI,
run, andminirequests from hitting Bun’s default fetch deadline. Thanks @Finn763.Retried broken-pipe transport failures. Thanks @sdivyanshu90.
Retried transient failures from buffered model generations instead of immediately failing.
Ignored provider keep-alives and unknown stream events while continuing to reject malformed known events. (#56286, #56669)
Limited the OpenAI-compatible
storefield to OpenAI, Azure, and providers that explicitly opt in.Preserved more complete context during compaction and stabilized image trimming and instruction baselines to improve prompt-cache reuse. Thanks @rrauenza for the revert fix. (#56983, #54410)
Ensured shell completion is reported only after output capture finishes, and reported removed running shells as killed. (#56321, #56982)
Prevented undefined permission metadata from breaking pending-request responses.
Bounded skill discovery and file watches, and tolerated filesystem permission denials during sandboxed startup. (#55597, #55817)
Included the root
script/directory in Nix CLI builds.
TUI
Improvements
Added todo lists to session output, compact cards, and the sidebar when experimental todo support is enabled.
/modelsnow opens on the current model and preserves the server’s preferred model order.Added visible keyboard focus and reverse
Shift+Tabnavigation to export options.
Bug fixes
Kept long-running commands connected beyond Bun’s fetch deadline and restored the composer with an error toast when an existing-session shell command fails. Thanks @Finn763.
Retried
session.waitafter transport interruptions inmini.Highlighted the selected file in the diff tree. Thanks @Tarquinen.
Removed per-row resize listeners from selection dialogs. Thanks @tobwen.
Corrected spacing above simple-dialog footers.
Fixed Mermaid flowchart rendering in the TUI when labels contain apostrophes.
Desktop
Bug fixes
Show free OpenCode models alongside their paid counterparts by default instead of hiding them when they share the same model family and release date.
SDK
Improvements
Extended the existing experimental server voice API,
client.voice.session(...), with Gemini Live support forgemini-3.8-live*models over WebSocket. The server uses a stored Google key orGEMINI_API_KEY,GOOGLE_GENERATIVE_AI_API_KEY, orGOOGLE_API_KEY.Added
client.permission.saved.update(...)for changing a saved permission’s action or resource.Added archive filtering to
client.session.list(...)and archive updates toclient.session.update(...).Added
idleto the supportedclient.message.list(...)type filter.
Extensions
Improvements
Added paginated
ctx.session.list(...)to both Effect and Promise plugin APIs.
2.0.32
16 Oct 2026Auth Login in Headless Environments:
opencode auth loginno longer crashes in a container or other headless environment that cannot open a browser; use the URL already printed in the terminal to continue.Prevented
opencode auth loginfrom crashing when no browser opener such asxdg-openis available.
Highlights
Copy the Latest Reply: Run
/copyin the TUI to copy the latest assistant message or completed compaction summary instead of the full transcript. (#56053, #56055)Auth Login in Headless Environments:
opencode auth loginno longer crashes in a container or other headless environment that cannot open a browser; use the URL already printed in the terminal to continue.
Core
Bug fixes
Prevented
opencode auth loginfrom crashing when no browser opener such asxdg-openis available.Gemini sessions now retry or continue after intermittent
MALFORMED_RESPONSEfinishes instead of immediately failing.Made snapshot capture resilient to concurrent Git object writes on Windows.
TUI
Improvements
Changed
/copyto copy the latest assistant message; the full transcript remains available from the command palette or/export.
Bug fixes
/copynow copies a completed compaction summary when it is the latest response.
SDK
Improvements
Added the experimental
client.voice.session(...)API for server-brokered OpenAI GPT-Live and Realtime WebRTC sessions, OpenAI Realtime WebSocket sessions, and xAI Grok Voice WebSocket sessions. It uses an API key stored on the server orOPENAI_API_KEY/XAI_API_KEY; ChatGPT sign-in credentials are not used.
2.0.31
16 Oct 2026
Dependency tracking · free for 3 projects
Know when your own dependencies move
@opencode/theme shipped a new major in the last 12 months, among 36 releases. Inlinr shows which of your projects are behind, and what the upgrade breaks.
Advisories reach you
An email when a critical or high advisory affects a project, before the next install.
Upgrades checked first
Peer ranges, Node, ESM-only and types changes read before you bump.
Only what matters
Majors and breaking notes stay; patches and sibling bumps fold into one line.
Registry facts last checked 22 Oct 2026. Releases and advisories last read 22 Oct 2026.