{"releases":[{"id":26896,"slug":"cli-v2026.4.1-59618","release_details":{"is_release":true,"release_name":"CLI v2026.4.1","release_number":null,"release_summary":"Bitwarden Clients re-releases CLI v2026.3.0.","release_deep_source":"https://github.com/bitwarden/clients/releases/tag/cli-v2026.4.1"},"product_id":4025,"created_at":"2026-04-23T17:30:06.005904+00:00","release_date":"2026-04-23T00:00:00","formatted_content":"Re-release of CLI v2026.3.0.","product":{"id":4025,"slug":"bitwarden-clients","vendor":{"id":2930,"slug":"bitwarden","display_name":"Bitwarden"},"vendor_id":2930,"display_name":"Bitwarden Clients"},"source":{"id":82047,"source_url":"https://github.com/bitwarden/clients/releases.atom"}},{"id":26895,"slug":"seamlessly-reset-email-content-and-change-editors-96047","release_details":{"is_release":true,"release_name":"Seamlessly reset email content and change editors","release_number":null,"release_summary":"Customer.io improves Messaging UI with Reset message content for starting email campaigns or newsletters from scratch.","release_deep_source":null},"product_id":212,"created_at":"2026-04-23T17:22:09.661718+00:00","release_date":"2026-04-23T00:00:00","formatted_content":"### MESSAGING\n\n#### UI IMPROVEMENTS\n\nYou can now use Reset message content to quickly change the email editor you’re using and start from scratch. This means you no longer have to delete email blocks in campaigns or switch message types in newsletters to start over and change email editors!\n\nGo to the docs","product":{"id":212,"slug":"customerio","vendor":{"id":202,"slug":"customerio","display_name":"Customer.io"},"vendor_id":202,"display_name":"Customer.io"},"source":{"id":327,"source_url":"https://docs.customer.io/release-notes/"}},{"id":26894,"slug":"change-your-campaign's-trigger-type-23026","release_details":{"is_release":true,"release_name":"Change your campaign’s trigger type","release_number":null,"release_summary":"Customer.io adds trigger type changes for draft or stopped campaigns, with warnings for affected workflow items.","release_deep_source":null},"product_id":212,"created_at":"2026-04-23T17:22:09.369782+00:00","release_date":"2026-04-22T00:00:00","formatted_content":"### UI IMPROVEMENTS\n\nPreviously, if you created a campaign and later realized you needed a different trigger type, you’d have to create a new campaign. Now, you can change your trigger type in your existing campaign!\n\nYou can only modify the trigger type when the campaign is in a draft or stopped state. This ensures you have time to review and update any workflow items impacted by a change to your trigger.\n\nIf you need to make changes before you start the campaign, you’ll see warnings under each action block needing attention.\n\nGo to the docs","product":{"id":212,"slug":"customerio","vendor":{"id":202,"slug":"customerio","display_name":"Customer.io"},"vendor_id":202,"display_name":"Customer.io"},"source":{"id":327,"source_url":"https://docs.customer.io/release-notes/"}},{"id":26892,"slug":"openclaw-2026.4.22-61699","release_details":{"is_release":true,"release_name":"openclaw 2026.4.22","release_number":null,"release_summary":"OpenClaw releases a broad platform update with new xAI image, speech, and realtime transcription support, easier onboarding and model registration, local embedded TUI mode, richer diagnostics, and numerous provider, chat, and plugin reliability fixes.","release_deep_source":"https://github.com/openclaw/openclaw/releases/tag/v2026.4.22"},"product_id":4000,"created_at":"2026-04-23T17:18:22.506282+00:00","release_date":"2026-04-23T00:00:00","formatted_content":"### 2026.4.22\n\n### Changes\n\nProviders/xAI: add image generation, text-to-speech, and speech-to-text support, including grok-imagine-image / grok-imagine-image-pro, reference-image edits, six live xAI voices, MP3/WAV/PCM/G.711 TTS formats, grok-stt audio transcription, and xAI realtime transcription for Voice Call streaming. (#68694) Thanks @KateWilkins.\n\nProviders/STT: add Voice Call streaming transcription for Deepgram, ElevenLabs, and Mistral, alongside the existing OpenAI and xAI realtime STT paths; ElevenLabs also gains Scribe v2 batch audio transcription for inbound media.\n\nTUI: add local embedded mode for running terminal chats without a Gateway while keeping plugin approval gates enforced. (#66767) Thanks @fuller-stack-dev.\n\nOnboarding: auto-install missing provider and channel plugins during setup so first-run configuration can complete without manual plugin recovery.\n\nOpenAI/Responses: use OpenAI's native web_search tool automatically for direct OpenAI Responses models when web search is enabled and no managed search provider is pinned; explicit providers such as Brave keep the managed web_search tool.\n\nModels/commands: add /models add &lt;provider&gt; &lt;modelId&gt; so you can register a model from chat and use it without restarting the gateway; keep /models as a simple provider browser while adding clearer add guidance and copy-friendly command examples. (#70211) Thanks @Takhoffman.\n\nWhatsApp: add configurable native reply quoting with replyToMode for WhatsApp conversations. Thanks @mcaxtr.\n\nWhatsApp/groups+direct: forward per-group and per-direct systemPrompt config into inbound context GroupSystemPrompt so configured per-chat behavioral instructions are injected on every turn. Supports \"*\" wildcard fallback and account-scoped overrides under channels.whatsapp.accounts.&lt;id&gt;.{groups,direct}; account maps fully replace root maps (no deep merge), matching the existing requireMention pattern. Closes #7011. (#59553) Thanks @Bluetegu.\n\nAgents/sessions: add mailbox-style sessions_list filters for label, agent, and search plus visibility-scoped derived title and last-message previews. (#69839) Thanks @dangoZhang.\n\nControl UI/settings+chat: add a browser-local personal identity for the operator (name plus local-safe avatar), route user identity rendering through the shared chat/avatar path used by assistant and agent surfaces, and tighten Quick Settings, agent fallback chips, and narrow-screen chat layouts so personalization no longer wastes space or clips controls. (#70362) Thanks @BunsDev.\n\nGateway/diagnostics: enable payload-free stability recording by default and add a support-ready diagnostics export with sanitized logs, status, health, config, and stability snapshots for bug reports. (#70324) Thanks @gumadeiras.\n\nProviders/Tencent: add the bundled Tencent Cloud provider plugin with TokenHub onboarding, docs, hy3-preview model catalog entries, and tiered Hy3 pricing metadata. (#68460) Thanks @JuniperSling.\n\nProviders/Amazon Bedrock Mantle: add Claude Opus 4.7 through Mantle's Anthropic Messages route with provider-owned bearer-auth streaming, so the model is actually callable without treating AWS bearer tokens like Anthropic API keys. Thanks @wirjo.\n\nProviders/GPT-5: move the GPT-5 prompt overlay into the shared provider runtime so compatible GPT-5 models receive the same behavior and heartbeat guidance through OpenAI, OpenRouter, OpenCode, Codex, and other GPT providers; add agents.defaults.promptOverlays.gpt5.personality as the global friendly-style toggle while keeping the OpenAI plugin setting as a fallback.\n\nProviders/OpenAI Codex: remove the Codex CLI auth import path from onboarding and provider discovery so OpenClaw no longer copies ~/.codex OAuth material into agent auth stores; use browser login or device pairing instead. (#70390) Thanks @pashpashpash.\n\nCLI/Claude: default claude-cli runs to warm stdio sessions, including custom configs that omit transport fields, and resume from the stored Claude session after Gateway restarts or idle exits. (#69679) Thanks @obviyus.\n\nPi/models: update the bundled pi packages to 0.68.1 and let the OpenCode Go catalog come from pi instead of plugin-maintained model aliases, adding the refreshed opencode-go/kimi-k2.6, Qwen, GLM, MiMo, and MiniMax entries.\n\nTokenjuice: add bundled native OpenClaw support for tokenjuice as an opt-in plugin that compacts noisy exec and bash tool results in Pi embedded runs. (#69946) Thanks @vincentkoc.\n\nACPX: add an explicit openClawToolsMcpBridge option that injects a core OpenClaw MCP server for selected built-in tools, starting with cron.\n\nCLI/doctor plugins: lazy-load doctor plugin paths and prefer installed plugin dist/* runtime entries over source-adjacent JavaScript fallbacks, reducing the measured doctor --non-interactive runtime by about 74% while keeping cold doctor startup on built plugin artifacts. (#69840) Thanks @gumadeiras.\n\nCLI/debugging: add an opt-in temporary debug timing helper for local CLI performance investigations, with readable stderr output, JSONL capture, and docs for removing probes before landing fixes. (#70469) Thanks @shakkernerd.\n\nDocs/i18n: add Thai translation support for the docs site.\n\nProviders/OpenAI-compatible: mark known local backends such as vLLM, SGLang, llama.cpp, LM Studio, LocalAI, Jan, TabbyAPI, and text-generation-webui as streaming-usage compatible, so their token accounting no longer degrades to unknown/stale totals. (#68711) Thanks @gaineyllc.\n\nProviders/OpenAI-compatible: recover streamed token usage from llama.cpp-style timings.prompt_n / timings.predicted_n metadata and sanitize usage counts before accumulation, fixing unknown or stale totals when compatible servers do not emit an OpenAI-shaped usage object. (#41056) Thanks @xaeon2026.\n\nPlugins/startup: prefer native Jiti loading for built bundled plugin dist modules on supported runtimes, cutting measured bundled plugin load time by 82-90% while keeping source TypeScript on the transform path. (#69925) Thanks @aauren.\n\nPlugin SDK/STT: share realtime transcription WebSocket transport and multipart batch transcription form helpers across bundled STT providers, reducing provider plugin boilerplate while preserving proxy capture, reconnects, audio queueing, close flushing, upload filename normalization, and ready handshakes.\n\nPlugin SDK/Pi embedded runs: add a bundled-plugin embedded extension factory seam so native plugins can extend Pi embedded runs with async runtime hooks such as tool_result handling instead of falling back to the older synchronous persistence path. (#69946) Thanks @vincentkoc.\n\nCodex harness/hooks: route native Codex app-server turns through before_prompt_build and emit before_compaction / after_compaction for native compaction items so prompt and compaction hooks stop drifting from Pi. Thanks @vincentkoc.\n\nCodex harness/plugins: add a bundled-plugin Codex app-server extension seam for async tool_result middleware, fire after_tool_call for Codex tool runs, and route mirrored Codex transcript writes through before_message_write so tool integrations stop diverging from Pi. Thanks @vincentkoc.\n\nCodex harness/hooks: fire llm_input, llm_output, and agent_end for native Codex app-server turns so lifecycle hooks stop drifting from Pi. Thanks @vincentkoc.\n\nQA/Telegram: record per-scenario reply RTT in the live Telegram QA report and summary, starting with the canary response. (#70550) Thanks @obviyus.\n\nStatus: add an explicit Runner: field to /status so sessions now report whether they are running on embedded Pi, a CLI-backed provider, or an ACP harness agent/backend such as codex (acp/acpx) or gemini (acp/acpx). (#70595)\n\n### Fixes\n\nThinking defaults/status: raise the implicit default thinking level for reasoning-capable models from legacy off/low fallback behavior to a safe provider-supported medium equivalent when no explicit config default is set, preserve configured-model reasoning metadata when runtime catalog loading is empty, and make /status report the same resolved default as runtime.\n\nGateway/model pricing: fetch OpenRouter and LiteLLM pricing asynchronously at startup and extend catalog fetch timeouts to 30 seconds, reducing noisy timeout warnings during slow upstream responses.\n\nAgents/sessions: keep daily reset and idle-maintenance bookkeeping from bumping session activity or pruning freshly active routes, so active conversations no longer look newer or disappear for maintenance-only updates.\n\nPlugins/install: add newly installed plugin ids to an existing plugins.allow list before enabling them, so allowlisted configs load installed plugins after restart.\n\nStatus: show Fast in /status when fast mode is enabled, including config/default-derived fast mode, and omit it when disabled.\n\nOpenAI/image generation: detect Azure OpenAI-style image endpoints, use Azure api-key auth plus deployment-scoped image URLs, honor AZURE_OPENAI_API_VERSION, and document the Azure setup path so image generation and edits work against Azure-hosted OpenAI resources. (#70570) Thanks @zhanggpcsu.\n\nTelegram/forum topics: cache recovered forum metadata with bounded expiry so supergroup updates no longer need repeated getChat lookups before topic routing.\n\nOnboarding/WeCom: show the official WeCom channel plugin with its native Enterprise WeChat display name and blurb in the external channel catalog.\n\nModels/auth: merge provider-owned default-model additions from openclaw models auth login instead of replacing agents.defaults.models, so re-authenticating an OAuth provider such as OpenAI Codex no longer wipes other providers' aliases and per-model params. Migrations that must rename keys (Anthropic -&gt; Claude CLI) opt in with replaceDefaultModels. Fixes #69414. (#70435) Thanks @neeravmakwana.\n\nMedia understanding/audio: prefer configured or key-backed STT providers before auto-detected local Whisper CLIs, so installed local transcription tools no longer shadow API providers such as Groq/OpenAI in tools.media.audio auto mode. Fixes #68727.\n\nProviders/OpenAI: lock the auth picker wording for OpenAI API key, Codex browser login, and Codex device pairing so the setup choices no longer imply a mixed Codex/API-key auth path. (#67848) Thanks @tmlxrd.\n\nAgents/BTW: route /btw side questions through provider stream registration with the session workspace, so Ollama provider URL construction and workspace-scoped hooks apply correctly. Fixes #68336. (#70413) Thanks @suboss87.\n\nAgents/sessions: make session transcript write locks non-reentrant by default, so same-process transcript writers contend unless a helper explicitly opts into nested lock ownership.\n\nACPX/probe: expose an optional probeAgent plugin config field so the embedded ACP runtime health probe can target a configured agent (for example opencode or claude) instead of hardcoding codex, and stop marking the entire ACP runtime backend unavailable when the default probe agent is simply not installed or not authenticated. (#68409) Thanks @lyfuci.\n\nMemory search: use sqlite-vec KNN for vector recall while preserving full post-filter result limits in multi-model indexes. Fixes #69666. (#69680) Thanks @aalekh-sarvam.\n\nProviders/OpenAI Codex: stop stale per-agent openai-codex:default OAuth profiles from shadowing a newer main-agent identity-scoped profile, and let openclaw doctor offer the matching cleanup. (#70393) Thanks @pashpashpash.\n\nACPX: route OpenClaw ACP bridge commands through the MCP-free runtime path even when the command is wrapped with env, has bridge flags, or is resumed from persisted session state, so documented acpx openclaw setups no longer fail on per-session MCP injection. (#68741) Thanks @alexlomt.\n\nCodex harness: route Codex-tagged MCP tool approval elicitations through OpenClaw plugin approvals, including current empty-schema app-server requests, while leaving generic user-input prompts fail-closed. (#68807) Thanks @kesslerio.\n\nWhatsApp/outbound: hold an in-memory active-delivery claim while a live outbound send is in flight, so a concurrent reconnect drain no longer re-drives the same pending queue entry and duplicates cron sends 7-12x after the 30-minute inbound-silence watchdog fires mid-delivery. Crash-replay of fresh queue entries left behind by a dead process is preserved because the claim is intentionally process-local. Fixes #70386. (#70428) Thanks @neeravmakwana.\n\nMatrix/commands: keep Matrix DM allowlist state out of room control-command authorization, so trusted DM senders do not accidentally gain room-command access.\n\nProviders/SDK retry: cap long Retry-After sleeps in Stainless-based Anthropic/OpenAI model SDKs so 60s+ retry windows surface immediately for OpenClaw failover instead of blocking the run. (#68474) Thanks @jetd1.\n\nAgents/TTS: preserve spoken text in TTS tool results while defusing reply directives in transcript content, so future turns remember voice replies without treating spoken MEDIA: or voice tags as delivery metadata. (#68869) Thanks @zqchris.\n\nProviders/OpenAI: harden Voice Call realtime transcription against OpenAI Realtime session-update drift, forward language and prompt hints, and add live coverage for realtime STT.\n\nAgents/Pi embedded runs: suppress the \"⚠️ Agent couldn't generate a response\" warning when the assistant already delivered user-visible content through a messaging tool and the turn ended cleanly (stopReason=stop). Real failure modes (tool errors, provider stopReason=error, interrupted tool use) still surface the existing \"verify before retrying\" warning. Fixes #70396. (#70425) Thanks @neeravmakwana.\n\nGateway/Linux: wrap gateway-managed supervisor, PTY, MCP stdio, and browser child processes in a tiny /bin/sh shim that raises the child's own oom_score_adj on Linux, so under cgroup memory pressure the kernel prefers transient workers over the long-lived gateway. Opt out with OPENCLAW_CHILD_OOM_SCORE_ADJ=0. Fixes #70404. (#70419) Thanks @neeravmakwana.\n\nProviders/Moonshot: stop strict-sanitizing Kimi's native tool_call IDs (shaped like functions.&lt;name&gt;:&lt;index&gt;) on the OpenAI-compatible transport, so multi-turn agentic flows through Kimi K2.6 no longer break after 2-3 tool-calling rounds when the serving layer fails to match mangled IDs against the original tool definitions. Adds a sanitizeToolCallIds opt-out to the shared openai-compatible replay family helper and wires Moonshot to it. Fixes #62319. (#70030) Thanks @LeoDu0314.\n\nDependencies/security: override transitive uuid to 14.0.0, clearing the runtime advisory across dependencies.\n\nCodex harness: ignore dynamic tool descriptions when deciding whether to reuse a native app-server thread while still fingerprinting tool schemas, so channel-specific copy changes no longer reset otherwise compatible Codex conversations. (#69976) Thanks @chen-zhang-cs-code.\n\nCodex harness: expose the Codex app-server model catalog in models list/status, avoid startup hangs from app-server discovery timeouts, and accept current Codex turn-completion notifications so Docker live gateway turns finish reliably.\n\nCodex harness: drop invalid legacy app-server serviceTier values such as \"priority\" before native thread and turn requests, while keeping supported Codex tiers limited to \"fast\" and \"flex\". Fixes #64815.\n\nCodex harness: show bounded, sanitized permission target samples in app-server approval prompts, so native permission requests keep their specific hosts, roots, and paths visible without leaking home usernames or URL credentials. (#70340) Thanks @Lucenx9.\n\nDocs/Codex harness: narrow native compaction docs to the current start/completion signals, without promising a readable summary or kept-entry audit list yet. (#69612) Thanks @91wan.\n\nProviders/Amazon Bedrock: use known context-window metadata for discovered models while keeping the unknown-model fallback conservative, so compaction and overflow handling improve for newer Bedrock models without overstating unlisted model limits. Thanks @wirjo.\n\nProviders/Amazon Bedrock Mantle: refresh IAM-backed bearer tokens at runtime instead of baking discovery-time tokens into provider config, so long-lived Mantle sessions keep working after the initial token ages out. Thanks @wirjo.\n\nConfig/includes: write through single-file top-level includes for isolated OpenClaw-owned mutations, so plugins install and plugins update update an included plugins.json5 file instead of flattening modular $include configs. Fixes #41050 and #66048.\n\nConfig/reload: plan gateway reloads from source-authored config instead of runtime-materialized snapshots, so plugin update writes no longer trigger false restarts from derived provider/plugin config paths. Fixes #68732.\n\nPlugins/update: skip npm plugin reinstall/config rewrites when the installed version and recorded artifact identity already match the registry target, let bare npm package names resolve back to tracked install records, and point already-installed plugins install attempts at plugins update / --force instead of a hook-pack fallback. Fixes #46955, #67957, and #68073.\n\nAgents/MCP: keep mcp.servers and bundle MCP tools available in Pi embedded\ncoding and messaging sessions while preserving minimal profile and\ntools.deny: [\"bundle-mcp\"] opt-out behavior. Fixes #68875 and #68818.\n\nPlugins/startup: tolerate transient bundled-channel catalog/metadata drift while auto-enabling configured plugins, so CLI and gateway startup no longer crash when a channel id is known but its display metadata is unavailable.\n\nCLI/Claude: report CLI-backed reply runs as streaming while Claude/Codex CLI turns are still in flight, so WebChat keeps visible response state until the backend finishes. Fixes #70125.\n\nSlack/streaming: fall back to normal Slack replies for Slack Connect streams rejected before the SDK flushes its local buffer, so short replies no longer disappear or report success before Slack acknowledges delivery. Fixes #70295. (#70370) Thanks @mvanhorn.\n\nCodex harness: rotate the shared app-server websocket client when the configured bearer token changes, so auth-token refreshes reconnect with the new Authorization header instead of reusing a stale socket. (#70328) Thanks @Lucenx9.\n\nChannels/sandbox: derive runtime policy keys for external direct messages that share the main conversation, so sandbox/tool policy no longer treats channel-originated DMs as local main-session runs.\n\nConfig/models: merge provider-scoped model allowlist updates and protect model/provider map writes from accidental full replacement, adding config set --merge for additive updates and --replace for intentional clobbers. Fixes #65920, #68392, and #68653.\n\nAgents/Pi auth: preserve AWS SDK-authenticated Bedrock runs for IMDS and task-role setups, clear stale refresh timers on sentinel fallback, and log unexpected runtime-auth prep failures instead of silently leaving the provider unauthenticated. Thanks @wirjo.\n\nConfig/gateway: restore last-known-good config on critical clobber signatures such as missing metadata, missing gateway.mode, or sharp size drops, preventing gateway crash loops when a valid backup exists. Fixes #70336.\n\nConfig/gateway: recover configs accidentally prefixed with non-JSON output during gateway startup or openclaw doctor --fix, preserving the clobbered file as a backup while leaving normal config reads read-only.\n\nAgents/GitHub Copilot: normalize connection-bound Responses item IDs in the Copilot provider wrapper so replayed histories no longer fail after the upstream connection changes. (#69362) Thanks @Menci.\n\nPi embedded runs: pass real built-in tools into Pi session creation and then narrow active tool names after custom tool registration, so the runner and compaction paths compile cleanly and keep OpenClaw-managed custom tool allowlists without feeding string arrays into createAgentSession. Thanks @vincentkoc.\n\nAgents/OpenAI websocket: route native OpenAI websocket metadata and session-header decisions through the shared endpoint classifier so local mocks and custom models.providers.openai.baseUrl endpoints stay out of the native OpenAI path consistently across embedded-runner and websocket transport code. Thanks @vincentkoc.\n\nCron/MCP: retire bundled MCP runtimes through one shared cleanup path for isolated cron run ends, persistent cron session rollover, and direct cron deleteAfterRun fallback cleanup. Fixes #69145, #68623, and #68827.\n\nMCP/gateway: tear down stdio MCP process trees on transport close and dispose bundled MCP runtimes during session delete/reset, preventing orphaned wrapper/server processes from accumulating. Fixes #68809 and #69465.\n\nAgents/MCP: retire bundled MCP runtimes after completed one-shot subagent cleanup and nested sessions_send steps, while keeping persistent subagent sessions warm.\n\nConfig: render validation warnings with real line breaks instead of a literal \\n sequence in CLI/audit output. Fixes #70140.\n\nCron/doctor: repair malformed persisted cron job IDs through openclaw doctor, including legacy jobId, non-string id, and missing id rows, so cron list no longer needs display-layer coercion for corrupt store data. Fixes #70128.\n\nDiscord: normalize prefixed channel targets only at the thread-binding API boundary, so sessions_spawn({ runtime: \"acp\", thread: true }) can create child threads from Discord channels without breaking current-channel ACP bindings. (#68034) Thanks @Zetarcos.\n\nDiscord: harden inbound thread metadata handling against partial Carbon channel getters, so non-command thread messages and queued jobs no longer crash when name, parentId, parent, or ownerId requires fetched raw data.\n\nDiscord: let message tool reactions resolve user:&lt;id&gt; DM targets and preserve channels.discord.guilds.&lt;guild&gt;.channels.&lt;channel&gt;.requireMention: false during reply-stage activation fallback. Fixes #70165 and #69441.\n\nPlugins/startup: pre-normalize and cache Jiti alias maps before creating plugin loaders, so module-scoped loader filenames do not reintroduce per-plugin alias-normalization startup cost. Fixes #70186.\n\nACP/Codex: run the bundled Codex ACP harness with an isolated CODEX_HOME and avoid writing incomplete ChatGPT auth bridge files, so Codex ACP sessions no longer clobber the user's real Codex CLI auth. Fixes #70234. Thanks @Lonobers88.\n\nGateway/client: keep long-running RPCs such as ACP agent.wait calls in charge of their own timeout instead of closing the websocket on a missed app-level tick while work is still pending.\n\nTelegram/webhooks: lower the grammY webhook callback timeout to 5s so Telegram gets an early 200 response instead of retrying long-running updates as read timeouts. (#70146) Thanks @friday-james.\n\nTelegram/polling: rebuild the polling HTTP transport after getUpdates 409 conflicts, so retries use a fresh TCP connection instead of looping on a Telegram-terminated keep-alive socket. (#69873) Thanks @hclsys.\n\nMedia delivery: strip persisted base64 audio payloads from webchat history, resolve stored media://inbound/* attachments before local-root checks, suppress duplicate Telegram voice/audio sends when TTS emits the same media twice, and support custom image-model IDs that already include their provider prefix.\n\nSlack/files: resolve downloadFile bot tokens from the runtime config when callers provide cfg without an explicit token or prebuilt client, preserving cfg-only file downloads outside the action runtime path. (#70160) Thanks @martingarramon.\n\nSlack/HTTP: dispatch registered Request URL webhooks through the same handler registry used by Slack monitor setup, so HTTP-mode Slack events no longer 404 after successful route registration. (#70275) Thanks @FroeMic.\n\nSlack/runtime bindings: route focused Slack thread replies through their bound ACP session instead of preparing replies against the default agent shell. Fixes #67739. Thanks @Frankla20.\n\nCLI/Claude: keep stored Claude CLI sessions through OAuth refresh-token rotation by keying auth epochs on stable account identity instead of mutable OAuth token material. (#70452) Thanks @obviyus.\n\nCLI/Claude: verify stored Claude CLI session ids have a readable project transcript before resuming, clearing phantom bindings with reason=transcript-missing instead of silently starting fresh under --resume. Fixes #70177.\n\nCLI sessions: persist CLI session clearing through the atomic session-store merge path, so expired Claude/Codex CLI bindings are actually removed before retrying without the stale session id. (#70298) Thanks @HFConsultant.\n\nACP/sessions_spawn: honor explicit model overrides for ACP child sessions instead of silently falling back to the target agent default model. (#70210) Thanks @felix-miao.\n\nDiffs/viewer: re-read remote viewer access policy from live runtime config on each request, so toggling plugins.entries.diffs.config.security.allowRemoteViewer closes proxied viewer access immediately instead of waiting for a restart. Thanks @vincentkoc.\n\nDiffs/tooling: re-read viewerBaseUrl, presentation defaults, and viewer access policy from live runtime config, and fail closed when the live diffs plugin entry disappears instead of reviving startup viewer settings. Thanks @vincentkoc.\n\nMemory/LanceDB: stop resurrecting removed live memory-lancedb hook config from startup snapshots, so deleting or disabling the plugin entry shuts off auto-recall and auto-capture without a restart. Thanks @vincentkoc.\n\nMemory/LanceDB: keep auto-recall and auto-capture hooks wired when those settings start disabled, so turning them on in live config starts recall and capture without waiting for a restart. Thanks @vincentkoc.\n\nSkill Workshop: keep the tool plus before_prompt_build / agent_end hooks wired while the plugin is disabled at startup, so turning the plugin back on in live config starts guidance and capture without waiting for a restart. Thanks @vincentkoc.\n\nActive Memory: stop reviving removed live active-memory config from startup snapshots, so removing the plugin entry turns the hook off immediately instead of waiting for a restart. Thanks @vincentkoc.\n\nGitHub Copilot: re-read plugin discovery config from the live runtime snapshot, so toggling plugins.entries.github-copilot.config.discovery.enabled takes effect without a restart. Thanks @vincentkoc.\n\nOllama: re-read plugin discovery config from the live runtime snapshot, so toggling plugins.entries.ollama.config.discovery.enabled takes effect without a restart. Thanks @vincentkoc.\n\nOpenAI: re-read the plugin prompt-overlay personality from live runtime config, so GPT-5 system prompt contributions update without a restart when plugins.entries.openai.config.personality changes. Thanks @vincentkoc.\n\nAmazon Bedrock: re-read live discovery and guardrail plugin config, so toggling plugins.entries.amazon-bedrock.config.discovery or plugins.entries.amazon-bedrock.config.guardrail takes effect without a restart. Thanks @vincentkoc.\n\nCodex: re-read the plugin discovery config from the live runtime snapshot, so toggling plugins.entries.codex.config.discovery takes effect without a restart. Thanks @vincentkoc.\n\nAgents/subagents: drop bare NO_REPLY from the parent turn when the session still has pending spawned children, so direct-conversation surfaces such as Telegram DMs no longer rewrite the sentinel into visible fallback chatter while waiting for the child completion event. (#69942) Thanks @neeravmakwana.\n\nPlugins/install: keep bundled plugin dependencies off npm install while repairing them when plugins activate from a packaged install, including Feishu/Lark, Browser, and direct bundled channel setup-entry loads.\n\nCLI/channels: skip and cache bundled channel plugin, setup, and secrets load failures during read-only discovery, so one broken unused bundled channel cannot crash openclaw status or bootstrap secret scans.\n\nMemory/LanceDB: retry initialization after a failed LanceDB load and report unsupported Intel macOS native runtime clearly instead of caching the failure or repeatedly attempting an install that cannot work.\n\nCLI/Claude: hash only static extra system prompt parts when deciding whether to reuse a CLI session, so per-message inbound metadata no longer resets Claude CLI conversations on every turn. (#70122) Thanks @zijunl.\n\nHooks/Slack: standardize shared message hook routing fields (threadId / replyToId) and stop Slack outbound delivery from re-running message_sending inside the channel adapter, so plugins like thread-ownership make one outbound routing decision per reply. Thanks @vincentkoc.\n\nAuto-reply/media: share one run-scoped reply media context between streamed block delivery and final payload filtering, so a local MEDIA: attachment is staged once and duplicate media sends are suppressed reliably. (#68111) Thanks @ayeshakhalid192007-dev.\n\nPlugins/gateway hooks: expose startup config, workspace dir, and a live cron getter on the typed gateway_start hook, and move memory-core managed dreaming off the internal gateway:startup bridge so cron reconciliation stays on the public plugin hook path. Thanks @vincentkoc.\n\nPlugins/config: read plugin trust decisions from the source config snapshot when a resolved runtime snapshot is active, so plugins.allow remains enforced and doctor/gateway startup no longer warn that the allowlist is empty when it is configured. Fixes #70161. Also fixes #70141.\n\nAgents/openai-completions: enable malformed streamed tool-call argument repair for self-hosted OpenAI-compatible backends such as Kimi/SGLang, so fragmented tool-call arguments no longer reach tools as empty or unusable objects. Fixes #69672. (#70294) Thanks @MonkeyLeeT.\n\nGateway/restart: preserve group and channel chat context when resuming an agent turn after a Gateway restart, so continuation replies keep the same prompt, routing, and tool-status behavior as the original conversation.\n\nGateway/pairing: shared-secret loopback CLI clients now silently auto-approve metadata-upgrade pairing (platform / device family refresh) instead of being disconnected with 1008 pairing required. This matches the scope-upgrade and role-upgrade behavior added in #69431 and unblocks non-interactive CLI automation when a paired-device record has a stale platform string (e.g. device key replicated across hosts, install migrated between OSes, or platform-string format changed between OpenClaw versions). Browser / Control-UI clients keep the existing approval-required flow for metadata changes.\n\nGateway/pairing: treat any forwarded-header evidence (Forwarded, X-Forwarded-*, or X-Real-IP) as proxied WebSocket traffic before pairing locality checks, so reverse-proxy topologies cannot use the loopback shared-secret helper auto-pairing path.\n\nAgents/OpenAI: treat exact NO_REPLY assistant output as a deliberate silent reply in embedded runs, so GPT-5.4 turns with signed reasoning plus a silent final no longer surface a false incomplete-turn error.\n\nAuto-reply/streaming: preserve streamed reply directives through chunk boundaries and phase-aware final_answer delivery, so split MEDIA:&lt;path&gt; lines, voice tags, and reply targets reach channel delivery instead of leaking as text or being dropped. (#70243) Thanks @zqchris.\n\nAnthropic/Claude Opus 4.7: normalize Opus 4.7 and claude-cli Opus 4.7 variants to a 1M context window in resolved runtime metadata and active-agent status/context reporting, so they no longer inherit the stale 200k fallback. Thanks @BunsDev.\n\nGateway/pairing webchat: render /pair qr replies as structured media instead of raw markdown text, preserve inline reply threading and silent-control handling on media replies, avoid persisting sensitive QR images into transcript history, and keep local webchat media embedding behind internal-only trust markers. (#70047) Thanks @BunsDev.\n\nCodex harness: default app-server runs to unchained local execution, so OpenAI heartbeats can use network and shell tools without stalling behind native Codex approvals or the workspace-write sandbox.\n\nCodex harness: fail closed for unknown native app-server approval methods instead of routing unsupported future approval shapes through OpenClaw approval grants. (#70356) Thanks @Lucenx9.\n\nCodex harness: apply the GPT-5 behavior and heartbeat prompt overlay to native Codex app-server runs, so codex/gpt-5.x sessions get the same follow-through, tool-use, and proactive heartbeat guidance as OpenAI GPT-5 runs.\n\nCodex harness: add an explicit Guardian mode for Codex app-server approvals, plus a Docker live probe for approved and ask-back Guardian decisions, while keeping default app-server runs unchained for unattended local heartbeats. The legacy OPENCLAW_CODEX_APP_SERVER_GUARDIAN shortcut is removed; use plugin config appServer.mode: \"guardian\" or OPENCLAW_CODEX_APP_SERVER_MODE=guardian. Thanks @pashpashpash.\n\nOpenAI/Responses: keep embedded OpenAI Responses runs on HTTP when models.providers.openai.baseUrl points at a local mock or other non-public endpoint, so mocked/custom endpoints no longer drift onto the hardcoded public websocket transport. (#69815) Thanks @vincentkoc.\n\nChannels/config: require resolved runtime config on channel send/action/client helpers and block runtime helper loadConfig() calls, so SecretRefs are resolved at startup/boundaries instead of being re-read during sends.\n\nDiscord: pass resolved runtime config through guild and moderation action helpers, so thread-originated Discord commands can run channel, member, role, and guild actions without falling back to runtime config reads. (#70215) Thanks @szponeczek.\n\nCLI/channels: preserve bundled setup promotion metadata when a loaded partial channel plugin omits it, so adding a non-default account still moves legacy single-account fields such as Telegram streaming into accounts.default.\n\nTelegram: keep the sent-message ownership cache isolated per configured session store, so own-message reaction filtering remains correct with custom session.store paths.\n\nSecurity/update: fail closed when exact pinned npm plugin or hook-pack updates detect integrity drift, and expose aborted plugin drift details in openclaw update --json.\n\nOllama: forward OpenClaw thinking control to native /api/chat requests as top-level think, so /think off and openclaw agent --thinking off suppress thinking on models such as qwen3 instead of idling until the watchdog fires. Fixes #69902. (#69967) Thanks @WZH8898.\n\nMemory-core/dreaming: suppress the startup-only managed dreaming cron unavailable warning when the cron service is still attaching, while preserving the runtime warning if cron genuinely remains unavailable. Fixes #69939. (#69941) Thanks @Sanjays2402.\n\nMattermost: suppress reasoning-only payloads even when they arrive as blockquoted &gt; Reasoning: text, preventing /reasoning on from leaking thinking into channel posts. (#69927) Thanks @lawrence3699.\n\nDiscord: read channel.parentId through a safe accessor in the slash-command, reaction, and model-picker paths so partial GuildThreadChannel prototype getters no longer throw Cannot access rawData on partial Channel when commands like /new run from inside a thread. Fixes #69861. (#69908) Thanks @neeravmakwana.\n\nDiscord: use safe channel name and parent accessors across voice command authorization, so /vc commands from partial Discord thread channels no longer crash on Carbon rawData getters. (#70199) Thanks @hanamizuki.\n\nDiscord: make auto-thread parent transcript inheritance opt-in via channels.discord.thread.inheritParent, keeping newly created Discord thread sessions isolated by default while preserving explicit inheritance for configured accounts. Fixes #69907. (#69986) Thanks @Blahdude.\n\nBrowser/Chrome MCP: reset cached existing-session control sessions when a navigate_page call times out, so one stuck navigation no longer poisons the browser profile until a gateway restart. (#69733) Thanks @ayeshakhalid192007-dev.\n\nBrowser/Chrome MCP: propagate click timeouts and abort signals to existing-session actions so a stuck click fails fast and reconnects instead of poisoning the browser tool until gateway restart. (#63524) Thanks @dongseok0.\n\nAmazon Bedrock/prompt caching: resolve opaque application inference profile targets before injecting Bedrock cache points, require every routed target to support explicit cache points, and retry transient profile lookups instead of caching a false negative for the rest of the process. (#69953) Thanks @anirudhmarc and @vincentkoc.\n\nGateway/channel health: base stale-socket recovery on provider-proven transport activity instead of inbound app-event freshness, preventing quiet Slack, Discord, Telegram, Matrix, and local-style channels from being restarted solely because no user traffic arrived. (#69833) Thanks @bek91.\n\nOpenCode Go: canonicalize stale bundled opencode-go base URLs from /go or /go/v1 to /zen/go or /zen/go/v1, so older generated model metadata stops hitting the 404 HTML endpoint. (#69898)\n\nCLI/channels: honor channels.&lt;id&gt;.enabled=false as a hard read-only presence opt-out, so env vars, manifest env vars, or stale persisted auth state no longer make disabled channel plugins appear in status, doctor, or setup-only discovery.\n\nChannels/preview streaming: centralize draft-preview finalization so Slack, Discord, Mattermost, and Matrix no longer flush temporary preview messages for media/error finals, and preserve first-reply threading for normal fallback delivery.\n\nDiscord: keep slash command follow-up chunks ephemeral when the command is configured for ephemeral replies, so long /status output no longer leaks fallback model or runtime details into the public channel. (#69869) thanks @gumadeiras.\n\nGateway/session history: re-check current auth and chat.history scope before later SSE keepalives and transcript updates, so active session-history streams close before delivering post-revocation events.\n\nPlugins/discovery: reject package plugin source entries that escape the package directory before explicit runtime entries or inferred built JavaScript peers can be used. (#69868) thanks @gumadeiras.\n\nCLI/channels: resolve channel presence through a shared policy that keeps ambient env vars and stale persisted auth from surfacing disabled bundled plugins in status, doctor, security audit, and cron delivery validation unless the channel or plugin is effectively enabled or explicitly configured. (#69862) Thanks @gumadeiras.\n\nDoctor/plugins: hydrate legacy partial interactive handler state before plugin reload clears dedupe caches, so openclaw doctor and post-update doctor runs no longer crash with Cannot read properties of undefined (reading 'clear'). (#70135) Thanks @ngutman.\n\nControl UI/config: preserve intentionally empty raw config snapshots when clearing pending updates so reset restores the original bytes instead of synthesizing JSON for blank config files. (#68178) Thanks @BunsDev.\n\nmemory-core/dreaming: surface a Dreaming status: blocked line in openclaw memory status when dreaming is enabled but the heartbeat that drives the managed cron is not firing for the default agent, and add a Troubleshooting section to the dreaming docs covering the two common causes (per-agent heartbeat blocks excluding main, and heartbeat.every set to 0/empty/invalid), so the silent failure described in #69843 becomes legible on the status surface.\n\nCron/run-log: report generic message tool sends under the resolved delivery channel when they match the cron target, while preserving account-specific mismatch checks for delivery traces. (#69940) Thanks @davehappyminion.\n\nDoctor/channels: merge configured-channel doctor hooks across read-only, loaded, setup, and runtime plugin discovery so partial adapters no longer hide runtime-only compatibility repair or allowlist warnings, preserve disabled-channel opt-outs, and ignore malformed hook values before they can mask valid fallbacks. (#69919) Thanks @gumadeiras.\n\nModels/CLI: show bundled provider-owned static catalog rows in models list --all before auth is configured, including Kimi K2.6 rows for Moonshot, OpenRouter, and Vercel AI Gateway, while keeping local-only and workspace plugin catalog paths isolated. (#69909) Thanks @shakkernerd.\n\nModels/CLI: clarify that models list --provider expects provider ids and reject display labels before loading model discovery. (#70504) Thanks @shakkernerd.\n\nConfigure: skip generic CLI startup bootstrap for openclaw configure and bound hint-only gateway probes so the onboarding TUI reaches its first prompt faster when the Gateway is unavailable. (#69984) Thanks @obviyus.\n\nAgents/harness: surface selected plugin harness failures directly instead of replaying the same turn through embedded PI, preventing misleading secondary PI auth errors and avoiding duplicate side effects.\n\nOpenAI Codex: add a ChatGPT device-code auth option beside browser OAuth, so headless or callback-hostile setups can sign in without relying on the localhost browser callback. (#69557) Thanks @vincentkoc.\n\nCLI sessions: keep provider-owned CLI sessions through implicit daily expiry while preserving explicit reset behavior, and retain Claude CLI binding metadata across gateway agent requests. (#70106) Thanks @obviyus.\n\nfix(config): accept truncateAfterCompaction (#68395). Thanks @MonkeyLeeT\n\nCLI/Claude: keep Claude CLI session bindings stable across OAuth access-token refreshes, so gateway restarts continue the same Claude conversation instead of minting a fresh one. (#70132) Thanks @obviyus.\n\nQQBot: add INTERACTION intent (1 &lt;&lt; 26) to the gateway constants and include it in the FULL_INTENTS mask so interaction events are received. (#70143) Thanks @cxyhhhhh.\n\nGateway/restart: preserve one-shot continuation instructions across gateway restarts so agents can resume and reply back to the original chat after reboot. (#63406) Thanks @VACInc.\n\nGateway/restart: write restart sentinel files atomically so interrupted writes cannot leave a truncated sentinel behind. (#70225) Thanks @obviyus.\n\nPairing: remove stale pending requests for a device when that paired device is deleted, so an old repair approval cannot recreate the removed device from leftover state.\n\nSecurity/dotenv: block workspace .env overrides for Matrix, Mattermost, IRC, and Synology endpoint settings so cloned workspaces cannot redirect bundled connector traffic through local endpoint config. (#70240) Thanks @drobison00.\n\nTelegram: require the same /models authorization for group model-picker callbacks, so unauthorized participants can no longer browse or change the session model through inline buttons. (#70235) Thanks @drobison00.\n\nAgents/Pi: keep the filtered tool-name allowlist active for embedded OpenAI/OpenAI Codex GPT-5 runs and compaction sessions, so bundled and client tools still execute after the Pi 0.68.1 session-tool allowlist change instead of stopping at plan-only replies with no tool call. (#70281) Thanks @jalehman.\n\nAgents/Pi: honor explicit strict-agentic execution contracts for incomplete-turn retry guards across providers, so manually opted-in local or compatible models get the same retry behavior without relying on OpenAI model inference. (#66750) Thanks @ziomancer.\n\nOpenShell/sandbox: pin verified file reads to an already-opened descriptor, walk the ancestor chain for symlinked parents on platforms without fd-path readlink, and re-check file identity so parent symlink swaps cannot redirect in-sandbox reads to host files outside the allowed mount root. (#69798) Thanks @drobison00.\n\nGateway/Control UI: require authenticated Control UI read access before serving /__openclaw/control-ui-config.json when gateway.auth is enabled, so unauthenticated callers can no longer read bootstrap metadata. (#70247) Thanks @drobison00.\n\nGateway/restart: default session-scoped restart sentinels to a one-shot agent continuation, so chat-initiated Gateway restarts acknowledge successful boot automatically. (#70269) Thanks @obviyus.\n\nBuild/npm publish: fail postpublish verification when root dist/* files import bundled plugin runtime dependencies without mirroring them in the root package manifest, so Slack-style plugin deps cannot silently ship on the wrong module-resolution path again. (#60112) thanks @medns.","product":{"id":4000,"slug":"openclaw","vendor":{"id":2985,"slug":"openclaw","display_name":"OpenClaw"},"vendor_id":2985,"display_name":"OpenClaw"},"source":{"id":75082,"source_url":"https://github.com/openclaw/openclaw/releases.atom"}},{"id":26891,"slug":"v2026.4.22-beta.1-31728","release_details":{"is_release":true,"release_name":"v2026.4.22-beta.1","release_number":null,"release_summary":"OpenClaw releases 2026.4.22-beta.1.","release_deep_source":"https://github.com/openclaw/openclaw/releases/tag/v2026.4.22-beta.1"},"product_id":4000,"created_at":"2026-04-23T17:18:22.133486+00:00","release_date":"2026-04-23T00:00:00","formatted_content":"OpenClaw 2026.4.22-beta.1","product":{"id":4000,"slug":"openclaw","vendor":{"id":2985,"slug":"openclaw","display_name":"OpenClaw"},"vendor_id":2985,"display_name":"OpenClaw"},"source":{"id":75082,"source_url":"https://github.com/openclaw/openclaw/releases.atom"}},{"id":26854,"slug":"4.1.0-72437","release_details":{"is_release":true,"release_name":"4.1.0","release_number":"4.1.0","release_summary":"Distill adds workspace monitoring on local devices, a revamped Macro Recorder with AI assistance, and a new Change Feed for tracking monitor activity. It also brings flexible workspace layouts, better website monitoring, improved diffs and notifications, plus mobile team support.","release_deep_source":null},"product_id":3983,"created_at":"2026-04-23T15:36:05.871433+00:00","release_date":"2026-04-09T00:00:00","formatted_content":"### New Features\n\n- Teams & Workspaces: Run workspace monitors using a local device. Any workspace member can run monitors through the browser extension or desktop app, making it easier to monitor sites inside secure networks and other hard-to-track websites.\n- Macro Recorder V2: The updated macro engine and editor make it easier to record, edit, and replay macros, enabling more powerful automation.\n- AI Assistant: AI assistants are now integrated into the platform. They are currently available in the Macro Recorder to help create macros and fix errors.\n- Monitor Feed View: A new chronological Change Feed page in the sidebar shows a timeline of all detected changes across your monitors. You can filter by monitor or triggered status, evaluate conditions for crawler and feed data, and inspect crawler job details in a tree view.\n- Watchlist Layouts: Choose from four configurable workspace layouts: Default, Vertical Split, Horizontal Split, and Full View.\n\n### Improvements\n\n- Teams & Workspaces :\n- Workspace groups are sorted alphabetically for easier navigation, and error notification emails now include the workspace name.\n- Website Monitor: You can now monitor entire websites automatically with Distill's full website monitor, making it a better fit for compliance monitoring and competitive intelligence.\n- Visual Selector on Web :\n- The visual element selector, available in the web app, has been upgraded to offer better user experience. Better support for selecting content in iframes have been added.\n- Change History View Redesign :\n- Monitor's change history is now displayed in a collapsible accordion interface. A improved feedback system lets you rate change summaries with thumbs up or down.\n- Diff & Change Detection :\n- JSON diff now ignores key reordering.\n- Diff preferences (styled, deleted, snipped, and content mode) are saved per monitor.\n- The HTML diff view now supports toggling the visibility of snipped elements.\n- Notifications :\n- Notification text is formatted more cleanly to highlight changed content.\n- The Action Logs page now includes a monitor filter.\n- Fixed notification deep links.\n- Mobile :\n- Team and workspace support is now available on iOS and Android.\n\n### Bug Fixes\n\n- Fixed duplicate global monitor notifications.\n- Fixed layout jumps caused by the loader appearing.\n- Fixed desktop app database upgrade issues.\n- Fixed crashes when a purchase is terminated during the purchasing state on mobile apps.\n- Fixed rule result evaluation issues.\n- Fixed SVG dimension handling and noscript exclusion in page context.\n- Fixed visual selector bugs in Electron.\n- Fixed tab focus rotation causing UI issues.\n- Fixed the loader not closing when no changes are detected.\n- Fixed duplicate push token saves for the same workspace.\n- Fixed monitor text fallback when primary text is unavailable.","product":{"id":3983,"slug":"distill","vendor":{"id":2971,"slug":"distill","display_name":"Distill"},"vendor_id":2971,"display_name":"Distill"},"source":{"id":66292,"source_url":"https://distill.io/changelog"}},{"id":26842,"slug":"2026-04-22-96380","release_details":{"is_release":true,"release_name":"2026-04-22","release_number":null,"release_summary":"Releasebot adds a blog and posts section, a public JSON feed guide, and UI polish across the submit page, welcome flow, admin lists, and grid display modes. It also expands the Releasebot catalog with many new products and brands.","release_deep_source":null},"product_id":4125,"created_at":"2026-04-23T14:34:48.981764+00:00","release_date":"2026-04-22T00:00:00","formatted_content":"- Added a blog/posts section with article pages and a posts index.\n- Added a public-facing JSON feed guide page explaining the endpoint and pagination.\n- Improved the submit page layout and form styling.\n- Added a \"no links\" display mode for vendor and product grids.\n- Updated the welcome flow to better guide new users.\n- Added \"emails off\" status in the admin user list.\n- Added timestamp formatting for release detection in the admin release list.\n\n### Added to the Releasebot catalog:\n\n- Tanium\n- Coda\n- Kimi\n- eufyMake\n- Snapmaker\n- HoneyBook\n- Tally\n- Zapier\n- CoreView\n- Mammouth AI\n- Kagi\n- Zoho\n- ActivTrak\n- Seamless AI\n- Aternity\n- HP\n- Workelevate\n- HCL Software\n- Ivanti\n- Trigger.dev\n- Tanium Asset by Tanium\n- swift-format by Swift\n- Apple Developer by Apple\n- Tanium Engage by Tanium\n- Meta AI by Meta\n- U1 Firmware by Snapmaker\n- Snapmaker Orca by Snapmaker\n- Snapmaker 2.0 by Snapmaker\n- Zoho One by Zoho\n- Deluge by Zoho\n- Zoom Meetings by Zoom\n- Agentforce by Salesforce\n- Joule by SAP\n- Agent Framework by Microsoft\n- Agent Platform by Kore AI\n- Firefly by Adobe","product":{"id":4125,"slug":"releasebot","vendor":{"id":3073,"slug":"releasebot","display_name":"Releasebot"},"vendor_id":3073,"display_name":"Releasebot"},"source":{"id":95879,"source_url":"https://releasebot.io/changelog.txt"}},{"id":26841,"slug":"2026-04-21-33461","release_details":{"is_release":true,"release_name":"2026-04-21","release_number":null,"release_summary":"Releasebot adds improved release extraction, broader RSS lookback and digest controls, idempotent digest sending, a clearer email layout, and new admin dashboard filters with expanded product tracking.","release_deep_source":null},"product_id":4125,"created_at":"2026-04-23T14:34:48.726723+00:00","release_date":"2026-04-21T00:00:00","formatted_content":"- Added support for date-grouped release pages in source detection and extraction.\n- Improved stacked release extraction prompts and examples to reduce missed items.\n- Extended the RSS feed lookback window and digest date filtering to capture older releases.\n- Added support for API idempotency when sending digests to prevent duplicate emails.\n- Improved the digest email layout by making the \"more releases\" message larger and easier to read.\n- Updated the admin releases dashboard with new layout filters, including \"iTunes\" and \"Date-Grouped\".\n- Added tracking for Snapmaker Snapmaker 2.0\n- Added tracking for Snapmaker Snapmaker Orca\n- Added tracking for Snapmaker U1 Firmware\n- Added tracking for eufyMake eufyMake\n- Added tracking for Coda Coda","product":{"id":4125,"slug":"releasebot","vendor":{"id":3073,"slug":"releasebot","display_name":"Releasebot"},"vendor_id":3073,"display_name":"Releasebot"},"source":{"id":95879,"source_url":"https://releasebot.io/changelog.txt"}},{"id":26802,"slug":"april-22-2026-51662","release_details":{"is_release":true,"release_name":"April 22, 2026","release_number":null,"release_summary":"ChatGPT rolls out Fast answers, a quicker way to handle common questions with high-confidence responses. It now answers faster on web, iOS, and Android worldwide, supports logged in and logged out users, and can be turned off in Personalization settings for more personalized replies.","release_deep_source":null},"product_id":530,"created_at":"2026-04-23T12:49:35.599079+00:00","release_date":"2026-04-22T00:00:00","formatted_content":"Sometimes, you just want the right answer as quickly as possible. We’re rolling out Fast answers, a quicker way to get responses to common information-seeking questions in ChatGPT, like “Show me the Seven Wonders of the World” or “Which football team has the most super bowl titles?”\n\nWhen your question doesn’t require a personalized response and ChatGPT has a high-confidence answer ready, it can now respond faster while still providing a useful, in-depth answer. Fast answers do not reference your past chats or memory.\n\nFast answers are available globally on web, iOS, and Android for logged in and logged out users across plans. If you prefer ChatGPT to always generate personalized answers, you can turn Fast answers off anytime in Personalization settings.\n\nWe’ll continue expanding Fast answers to more kinds of questions over time.","product":{"id":530,"slug":"chatgpt","vendor":{"id":471,"slug":"openai","display_name":"OpenAI"},"vendor_id":471,"display_name":"ChatGPT"},"source":{"id":788,"source_url":"https://help.openai.com/en/articles/6825453-chatgpt-release-notes"}},{"id":26801,"slug":"april-22-2026-44474","release_details":{"is_release":true,"release_name":"April 22, 2026","release_number":null,"release_summary":"ChatGPT launches ChatGPT for Clinicians, a free U.S. version for verified clinicians that supports care-time work with clinical search, citations, reusable skills, deep medical research, documentation help, and CME credits. It appears as a separate workspace under the same login.","release_deep_source":null},"product_id":530,"created_at":"2026-04-23T12:49:35.415337+00:00","release_date":"2026-04-22T00:00:00","formatted_content":"We’re launching ChatGPT for Clinicians, a free version of ChatGPT for verified clinicians in the United States. It’s designed to support real clinical work at the time of care, including evidence review, documentation, and medical research, with trusted clinical search, citations, reusable skills, deep research across medical literature, and support for earning CME credits on eligible clinical questions.\n\nIf you already have a ChatGPT account, you can use that same account to sign up. After signup, ChatGPT for Clinicians appears as a separate workspace under the same login, and your existing ChatGPT workspace remains available.\n\nFor more information, please see our help article ChatGPT for Clinicians or our blog post Making ChatGPT better for clinicians.","product":{"id":530,"slug":"chatgpt","vendor":{"id":471,"slug":"openai","display_name":"OpenAI"},"vendor_id":471,"display_name":"ChatGPT"},"source":{"id":788,"source_url":"https://help.openai.com/en/articles/6825453-chatgpt-release-notes"}},{"id":26760,"slug":"introducing-shuffle-for-your-up-next-queue!-44701","release_details":{"is_release":true,"release_name":"Introducing Shuffle for Your Up Next Queue!  🎲","release_number":null,"release_summary":"Pocket Casts introduces Shuffle for Plus and Patron users, letting listeners randomly play episodes from the Up Next queue on Android, iOS, and web. The new option makes queues more spontaneous and keeps playback fresh.","release_deep_source":null},"product_id":4280,"created_at":"2026-04-23T07:36:33.069335+00:00","release_date":"2024-11-29T00:00:00","formatted_content":"Looking to add a dash of spontaneity to your listening lineup? Say hello to Shuffle! Available now for Plus and Patron users on Android 7.77, iOS 7.77, and web version 4.5.8, our new Shuffle feature lets you randomly play episodes from your Up Next queue.\n\n### Why Shuffle?\n\nShuffle is perfect for rediscovering old favorites, mixing up genres, or simply keeping things fresh. Whether you’re in the mood for a surprise or just can’t decide what’s next, let Shuffle take the reins and make your queue as exciting as ever!\n\n### How to Use Shuffle\n\nOn Android, iOS, and Web:\n\n1. Go to your Up Next queue.\n2. Enable Shuffle by tapping the Shuffle icon at the top right.\n3. The next episode that plays will be randomly selected.\n\nWhen Shuffle is enabled, the next episode played will always be picked randomly from your Up Next queue. If you want to go back to the normal playback order, you just have to tap the button again to turn Shuffle off.\n\nUpdate to the latest version of Pocket Casts and give Shuffle a try today! From revisiting episodes you forgot you had queued to discovering hidden gems in your library, Shuffle will keep your listening experience dynamic and engaging.\n\nLet us know what you think by tagging us on social media. Happy shuffling!","product":{"id":4280,"slug":"pocket-casts","vendor":{"id":3191,"slug":"pocket-casts","display_name":"Pocket Casts"},"vendor_id":3191,"display_name":"Pocket Casts"},"source":{"id":120033,"source_url":"https://blog.pocketcasts.com/2024/11/29/shuffle/"}},{"id":26759,"slug":"introducing-smart-folders-59704","release_details":{"is_release":true,"release_name":"Introducing Smart Folders","release_number":null,"release_summary":"Pocket Casts adds Smart Folders, automatically organizing followed podcasts by content on Android 7.85 and iOS 7.85, with web support coming soon. The new feature helps keep podcast libraries tidy and easy to browse, with editable folder suggestions for free and Plus users.","release_deep_source":null},"product_id":4280,"created_at":"2026-04-23T07:36:11.745859+00:00","release_date":"2025-04-03T00:00:00","formatted_content":"### How about having your podcast list automatically organized by content?\n\nSay hello to Smart Folders! Available now on Android 7.85, iOS 7.85, and coming soon to web, our Smart Folders feature takes all your followed podcasts and groups them into folders based on their content.\n\n### Why Smart Folders?\n\nSmart Folders will revolutionize the way you manage your podcast library! Your podcasts will automatically be grouped by content, so you’ll never waste time searching through endless shows to find what you’re looking for. Everything you love will be neatly organized and easy to access. It’s the perfect way to keep your podcast list tidy. But don’t worry, if you’re not a fan of some suggestions or want to make adjustments, you can easily edit your folders just like you can with the ones you create.\n\n### How to use this feature?\n\n#### For free users\n\nOnce you’ve followed at least 8 podcasts, suggested folders will become available to you.\n\n1. Go to the Podcasts tab.\n2. If we’ve identified folders for you, a new Smart Folders screen will pop up.\n3. Tap the Use These Folders button.\n\nTo unlock this feature, you need to sign in with a Pocket Casts Plus account. Check out our Plus and Patron plans to access this feature.\n\nAfter signing in to your Pocket Casts Plus account, tap the Use These Folders button again to apply the suggestions, and your podcast list will be automatically organized!\n\n#### For Pocket Casts Plus users\n\nYou need to follow at least 8 podcasts for our system to start suggesting folders. To check if our system has already identified folders for you:\n\n1. Go to the Podcasts tab.\n2. Tap to create a folder.\n3. If we’ve identified folders for you, the Smart Folders screen will appear.\n4. Tap the Replace folders button to organize your podcasts.\n\nIf you’d like to create a custom folder, simply use the Create Custom Folders button, and it will redirect you to the manual folder creation screen.\n\nWe hope you enjoy this new feature!","product":{"id":4280,"slug":"pocket-casts","vendor":{"id":3191,"slug":"pocket-casts","display_name":"Pocket Casts"},"vendor_id":3191,"display_name":"Pocket Casts"},"source":{"id":120032,"source_url":"https://blog.pocketcasts.com/2025/04/03/smart-folders/"}},{"id":26758,"slug":"generated-transcripts-are-here-36103","release_details":{"is_release":true,"release_name":"Generated Transcripts Are Here","release_number":"7.85","release_summary":"Pocket Casts adds Generated Transcripts for Plus and Patron members on Android and iOS, making it easier to read along with podcasts, search phrases, and find key moments even when a show has no transcript.","release_deep_source":null},"product_id":4280,"created_at":"2026-04-23T07:35:50.038877+00:00","release_date":"2025-04-29T00:00:00","formatted_content":"Great news, Pocket Casts fans! With version 7.85, we’ve introduced Generated Transcripts, a powerful new feature that makes engaging with your favorite podcasts easier than ever. Available on both Android and iOS for our Plus and Patron members, this feature allows you to follow along with podcast conversations.\n\nPodcasts are full of incredible insights, but sometimes you want to revisit a key moment without scrubbing through the entire episode. With Generated Transcripts, you can now read along, search for specific phrases, and quickly find key discussions—even if a show doesn’t have their own transcripts.\n\nTo access them go to the player and from the toolbar tap the message icon. If you don’t see it you can reach it through the dot menu or customize the toolbar.\n\nWe continue to support transcripts provided by podcast creators, ensuring that manually curated ones remain available. However, with this new feature, we’re expanding access by automatically generating them for new episodes from the most-followed podcasts.\n\nIf a show already provides its own transcripts, those will remain available. But if they don’t, our generated transcripts will step in to ensure you can still follow along and search key moments.\n\nWe can’t wait to hear what you think—try it out and let us know your feedback!","product":{"id":4280,"slug":"pocket-casts","vendor":{"id":3191,"slug":"pocket-casts","display_name":"Pocket Casts"},"vendor_id":3191,"display_name":"Pocket Casts"},"source":{"id":120031,"source_url":"https://blog.pocketcasts.com/2025/04/29/generated-transcripts-are-here/"}},{"id":26757,"slug":"discover-more-with-recommendations-25814","release_details":{"is_release":true,"release_name":"Discover More with Recommendations","release_number":null,"release_summary":"Pocket Casts adds new podcast Recommendations in mobile apps, including the You Might Like tab on podcast pages and personalized Discover lists. It also surfaces creator-curated Podroll picks and keeps human-selected featured collections for a mix of editorial and smart suggestions.","release_deep_source":null},"product_id":4280,"created_at":"2026-04-23T07:35:33.728977+00:00","release_date":"2025-05-29T00:00:00","formatted_content":"Finding your next favorite podcast just got a whole lot easier thanks to new Recommendations, available in the Pocket Casts mobile apps from version 7.89!\n\nYou’ll now find Recommendations on each podcast’s page – just head to the You Might Like tab (next to Bookmarks) to explore shows similar to the one you’re currently viewing.\n\nWhere available, this tab also features creator-curated recommendations – podcasts handpicked by the podcast creator using Podroll, a Podcasting 2.0 RSS tag that lets creators share the shows they love directly with their followers. If a podcast has Podroll set up, their picks will appear right at the top of the You Might Like tab.\n\nWant to see it in action? Here’s a selection of shows using Podroll – just open one in Pocket Casts and head to You Might Like to view the creator’s picks.\n\nWhen you’re logged into your Pocket Casts account, you’ll also see new Recommendation lists in Discover:\n\n- You Might Like – Personalized podcast suggestions based on your playback history.\n- Loved by listeners of [Podcast] – Discover what fellow listeners enjoy based on podcasts frequently listened to together across the Pocket Casts community.\n- Because you like [Podcast] – Personalized suggestions based on your unique playback history compared with similar listeners.\n\nNot seeing all of these yet? That just means we need a bit more playback history to generate your results. Keep exploring and they’ll start appearing soon!\n\nAnd don’t worry – human-curated picks aren’t going anywhere. Our team still handpicks standout shows for featured collections in Discover, so you can have the best of both worlds: thoughtful editorial selections and smart personalized recommendations.\n\nIt’s time to discover something great!","product":{"id":4280,"slug":"pocket-casts","vendor":{"id":3191,"slug":"pocket-casts","display_name":"Pocket Casts"},"vendor_id":3191,"display_name":"Pocket Casts"},"source":{"id":120030,"source_url":"https://blog.pocketcasts.com/2025/05/29/recommendations/"}},{"id":26756,"slug":"supporting-your-favorite-podcasts-with-funding-16658","release_details":{"is_release":true,"release_name":"Supporting Your Favorite Podcasts with Funding","release_number":null,"release_summary":"Pocket Casts now supports the Podcasting 2.0 Funding tag, adding a Funding button for shows that include it in their RSS feed so listeners can support creators through Patreon or other platforms.","release_deep_source":null},"product_id":4280,"created_at":"2026-04-23T07:35:10.480463+00:00","release_date":"2025-06-03T00:00:00","formatted_content":"Pocket Casts now supports the Podcasting 2.0 Funding tag! This means that if a show includes this tag in their RSS feed, we’ll display a Funding button ($) in Pocket Casts that links to a way you can financially support them – such as through Patreon or other funding platforms.\n\nSupporting podcasts financially helps creators keep making the shows you know and love ❤️\n\nClick here to check out a selection of shows with Funding enabled – just open the show in Pocket Casts on mobile or web, and look for the $ button.\n\n“The mission of Podcasting 2.0 and the Podcast Index is to preserve, protect, and extend the open, independent podcasting ecosystem.\nWe do this by providing podcasters with new features for their shows, equipping developers with new tools for their apps and services, and—most importantly—improving the podcast experience for audiences.”\n\n— podcasting2.org\n\nDid you know that Pocket Casts also supports other Podcasting 2.0 tags? Learn more:\n\n- Podroll\n- Transcripts\n- Podping\n- Chapters","product":{"id":4280,"slug":"pocket-casts","vendor":{"id":3191,"slug":"pocket-casts","display_name":"Pocket Casts"},"vendor_id":3191,"display_name":"Pocket Casts"},"source":{"id":120029,"source_url":"https://blog.pocketcasts.com/2025/06/03/funding/"}},{"id":26755,"slug":"introducing-notifications-that-work-for-you-47493","release_details":{"is_release":true,"release_name":"Introducing Notifications That Work for You","release_number":null,"release_summary":"Pocket Casts adds smarter personalized notifications with show recommendations, download reminders, feature tips, and curated discoveries to help listeners get more value from the app.","release_deep_source":null},"product_id":4280,"created_at":"2026-04-23T07:34:54.040022+00:00","release_date":"2025-07-19T00:00:00","formatted_content":"Pocket Casts is now even more helpful with smarter notifications made just for you.\n\n### What’s New?\n\nWe’ve added new notifications to help you get the most out of Pocket Casts:\n\n- Discover your next favorite show with personalized recommendations, trending shows, and curated collections.\n- Stay on track with reminders when downloaded episodes are ready to go.\n- Discover new features, like Smart Folders, Transcripts, and more.\n- Get tips and insights to unlock everything Pocket Casts has to offer.\n\nWhether you’re new or a longtime listener, these updates are designed to bring more value, right when you need it.\n\n### You’re in Control\n\nGo to Settings > Notifications to customize what you receive, from show recommendations to feature tips. Change your preferences anytime.\n\nUpdate to the latest version of Pocket Casts to try them out!","product":{"id":4280,"slug":"pocket-casts","vendor":{"id":3191,"slug":"pocket-casts","display_name":"Pocket Casts"},"vendor_id":3191,"display_name":"Pocket Casts"},"source":{"id":120028,"source_url":"https://blog.pocketcasts.com/2025/07/19/notifications/"}},{"id":26754,"slug":"say-hello-to-your-new-search-experience-64558","release_details":{"is_release":true,"release_name":"Say Hello to Your New Search Experience","release_number":null,"release_summary":"Pocket Casts improves search with a faster, smarter experience that adds type-ahead suggestions, a redesigned results page, and the ability to play episodes directly from search. It also handles non-English searches better for easier discovery across languages.","release_deep_source":null},"product_id":4280,"created_at":"2026-04-23T07:34:37.543802+00:00","release_date":"2025-11-18T00:00:00","formatted_content":"We’ve got some pretty exciting news — search just got a major glow-up! Whether you’re trying to find your next favorite podcast or exploring new episodes, the whole experience is now faster, smarter, and way more fun to use.\n\n### What’s new?\n\nFirst off, say hello to type-ahead predictive search. As soon as you start typing in the search bar (in Podcasts or Discover), you’ll see suggestions popping up instantly — both search terms and matching podcasts. This is all powered by a new super-fast backend to make sure results come back lightning-quick.\n\nWe’ve also launched a brand-new search results algorithm. What does that mean for you? Now podcasts and episodes are shown together on the same list — no more switching tabs or bouncing around. Everything’s in one place, ranked smartly so the most relevant stuff comes up first.\n\nAnd the cherry on top: a sleek new UI. The search results page has been totally redesigned to make browsing smoother. You can even play episodes directly from the results list — so when you see something interesting, you can dive right in without extra taps.\n\nOh, and for everyone searching in other languages — we heard you! Search is now much better at handling non-English terms, so finding content across languages is easier than ever.\n\n### How it works\n\nWhen you tap on the Search bar on the Podcasts or Discover tabs, you’ll automatically get access to the new search. Start typing, and predictive suggestions will appear as you go. Pick one of the suggestions, or just hit Enter, and you’ll be taken to the new results layout where you can explore and start listening right away.\n\nBasically, less time searching, more time listening.\n\nWe can’t wait for you to try it out — go ahead and give the new search a spin today!","product":{"id":4280,"slug":"pocket-casts","vendor":{"id":3191,"slug":"pocket-casts","display_name":"Pocket Casts"},"vendor_id":3191,"display_name":"Pocket Casts"},"source":{"id":120027,"source_url":"https://blog.pocketcasts.com/2025/11/18/search/"}},{"id":26753,"slug":"playlists:-a-new-way-to-organize-your-listening-91268","release_details":{"is_release":true,"release_name":"Playlists: A New Way to Organize Your Listening","release_number":null,"release_summary":"Pocket Casts introduces Playlists across mobile, web, and desktop, giving listeners a flexible new way to organize episodes. The update adds manual playlists and Smart Playlists, making it easier to curate, combine, and manage listening around any topic or mood.","release_deep_source":null},"product_id":4280,"created_at":"2026-04-23T07:34:20.812191+00:00","release_date":"2025-11-24T00:00:00","formatted_content":"Your listening, your way.\n\nWith version 8.0 of the mobile apps and 6.0 of the web and desktop apps, Pocket Casts introduces Playlists, a flexible and personal way to organize your listening experience. Playlists let you curate, combine, and manage episodes across your favorite podcasts, helping you build exactly the listening flow you want.\n\nPlaylists are available now on Web and in our Desktop apps! App version 8.0 with Playlists is currently rolling out to users on iOS and Android – keep an eye out for app updates 👀\n\n### What’s new\n\n#### Playlists\n\nCreate and customize playlists by hand. Use your own order, save episodes for later, or build collections around trips, themes, or guests you love.\n\n- Available on iOS, Android, Web, and Desktop.\n- Add episodes even from podcasts you do not follow.\n- Perfect for keeping your must-listen queue organized.\n\n#### Smart Playlists\n\nLet the app organize your podcasts for you. Smart Playlists automatically gather episodes from the podcasts you follow based on the rules you set. For example, you can make a “Quick Listen” Smart Playlist that gathers episodes from your favorite shows that are less than 25 minutes long.\n\n- Available on iOS and Android.\n- Create custom rules, such as showing only unplayed or downloaded episodes, or filtering by length or date.\n- Episodes that fit those rules will automatically appear in your playlist.\n\n#### How Manual Playlists work\n\nGetting started takes only a few clicks:\n\n1. From the main screen, open the Playlists tab.\n2. Tap “+” on mobile or click “New playlist” on the web.\n3. Give it a name and tap “Create playlist.”\n\nNow you can start adding episodes:\n\nOn Mobile:\n\n- Open a playlist, tap “Add episodes,” and browse your podcasts.\n- Swipe left on an episode and tap “+.”\n- In the player, use the bottom toolbar and tap “Add to playlist.”\n\nOn Web:\n\n- Open a playlist, click “Add episodes,” and browse your podcasts.\n- On any show or episode page, click “+.”\n\n#### Thanks to Our Community\n\nThank you for helping shape Playlists with your feedback and ideas. We’re excited for you to start exploring, creating, and organizing your listening in a whole new way.","product":{"id":4280,"slug":"pocket-casts","vendor":{"id":3191,"slug":"pocket-casts","display_name":"Pocket Casts"},"vendor_id":3191,"display_name":"Pocket Casts"},"source":{"id":120026,"source_url":"https://blog.pocketcasts.com/2025/11/24/playlists-a-new-way-to-organize-your-listening/"}},{"id":26752,"slug":"pocket-casts-playback-2025-is-here-86300","release_details":{"is_release":true,"release_name":"Pocket Casts Playback 2025 is here","release_number":null,"release_summary":"Pocket Casts introduces Playback, a year-in-audio experience that turns listening habits into personal stats, top shows, total time, longest episode, ratings and reviews, with Plus-only comparisons and completion insights, plus a new website for global 2025 audio trends.","release_deep_source":null},"product_id":4280,"created_at":"2026-04-23T07:33:59.617265+00:00","release_date":"2025-12-10T00:00:00","formatted_content":"Your listening choices tell a unique story about your year. Ready to see what you’ve been up to?\n\n### Your year in audio\n\nDiscover the details behind your year in audio:\n\n- Your total podcast and episode count\n- The show that claimed your top spot\n- Your accumulated listening time\n- The longest episode you completed\n- Your podcast ratings and reviews\n\nFor Pocket Casts Plus members only:\n\n- Year-over-year comparison with your 2024 habits\n- Your episode completion rate and listening patterns\n\nTime to see what your year sounded like.\n\n### The bigger picture\n\nVisit our new Playback website to explore beyond your personal stats. See which podcasts dominated globally, which genres surged in popularity, and which episodes became cultural moments. It’s a fascinating snapshot of how we listened collectively in 2025.\n\n### Share your stats\n\nAfter exploring your Playback, join the conversation. Share your results on Instagram or X using #PocketCasts2025. We’re curious to see what makes our community unique.","product":{"id":4280,"slug":"pocket-casts","vendor":{"id":3191,"slug":"pocket-casts","display_name":"Pocket Casts"},"vendor_id":3191,"display_name":"Pocket Casts"},"source":{"id":120025,"source_url":"https://blog.pocketcasts.com/2025/12/10/pocket-casts-playback-2025-is-here/"}},{"id":26751,"slug":"radioactive-decay-61236","release_details":{"is_release":true,"release_name":"Radioactive Decay","release_number":null,"release_summary":"Pocket Casts removes the Radioactivity theme in mobile apps to simplify the experience and reduce UI issues.","release_deep_source":null},"product_id":4280,"created_at":"2026-04-23T07:33:39.821347+00:00","release_date":"2026-01-20T00:00:00","formatted_content":"With Pocket Casts version 8.4, we will be sunsetting the Radioactivity theme in our mobile apps.\n\nThis theme has not seen much use for a while, and it has also been responsible for a disproportionate number of UI glitches and edge case issues. In short, it has been keeping our engineers a little too busy and not in a good way. Removing Radioactivity helps us simplify the app, reduce bugs, and spend more time improving features that more listeners use and love.\n\nIf Radioactivity was your theme of choice, thank you for giving it a home. We hope you will find another theme that feels just right.","product":{"id":4280,"slug":"pocket-casts","vendor":{"id":3191,"slug":"pocket-casts","display_name":"Pocket Casts"},"vendor_id":3191,"display_name":"Pocket Casts"},"source":{"id":120024,"source_url":"https://blog.pocketcasts.com/2026/01/20/radioactive-decay/"}}],"nextOffset":20}