Note
This is a mainline Coder release. We advise enterprise customers without a staging environment to install our latest stable release while we refine this version. Learn more about our Release Schedule.
Changelog
BREAKING CHANGES
- Remove native chat usage limits in favor of AI Gateway budgets (#27329, f0e6ac6) (@ibetitsmike)
- feat!: add admin-controlled dynamic client registration toggle (#27316, fbac602) (@BobbyHo)
- feat!: resolve agent external auth by template, not config order (#27854, 97c4031) (@BobbyHo)
- feat!: org-scope MCP server configs with RBAC (#27942, 443e3b9) (@ibetitsmike)
- feat!: hide Coder Tasks behind the enable-ai-tasks flag (#28008, 8203b2e) (@david-fraley)
- feat!: scope chat model configs to organizations (#27955, f32592e)
- feat!: enforce organization scope for chat models (#27959, aefc761) (@ethanndickson)
- feat!: scope chat model override settings to organizations (#28442, 0ef331f)
- fix!: deprecate
login_type=none, convert existing users to password login (#26851, 0e104f3) (@jakehwll) - refactor!: consolidate chat model availability (#28440, 3809314)
- refactor!: remove default organization model routes (#28632, aa209ae)
Features
- Dashboard: Announce cost controls move to AI Governance (#27543, e83f018) (@ibetitsmike)
- Add group AI spend endpoint (#27568, ed37483) (@ssncferreira)
- Add chat lifecycle hook dispatch backend (#27401, 8ea2586) (@ibetitsmike)
- Add enable/disable support for user secrets (#27537, 85984ff) (@zedkipp)
- Search users by display name (#27398, 09a69e6) (@aqandrew)
- Log tailnet tunnels to the connection log (#27423, 1a6a8be) (@sreya)
- Add coder secret import for bulk secret files (#27534, 0b2a6ca) (@dylanhuff-at-coder)
- Add bulk secret import upload to Add secret dialog (PLAT-240) (#26725, efbf802) (@dylanhuff-at-coder)
- Dashboard: Hide workspace resources when lacking workspace-create permission (#27278, ce76968) (@jscottmiller)
- Dashboard: Confirm before batch stopping workspaces (#27631, d072aa7) (@jakehwll)
- Add agent runtime hour license claims and entitlement feature (#27459, 06ceb42) (@jaaydenh)
- Add chat suffix messages, idle failure, and content update support (#27428, 91c7232) (@ibetitsmike)
- Wire chat lifecycle hooks into chatd (#27429, c17bed2) (@ibetitsmike)
- Dashboard: Surface chat lifecycle hook outcomes in the chats UI (#27430, 4bf9b9d) (@ibetitsmike)
- Dashboard: Modernize OAuth2 applications settings UI (#27562, 6c42309) (@jakehwll)
- Add hourly hb_agent_runtime_v1 usage events for Coder Agent runtime (#27312, 54d5eb7) (@jaaydenh)
- Back the per-chat cost endpoint with AI Gateway data (#27328, 95a2c2b) (@ibetitsmike)
- Add network calls summary to AI session threads API (#27417, 841a176) (@SasSwart)
- Show network request summary on AI session detail card (#27418, 3f3fd1c) (@SasSwart)
- Dashboard: Add generateUUID helper (#27661, cf7f876) (@jeremyruppel)
- Server: Use conditional requests for GitHub JSON reads (#27628, 2acfe7e) (@joshfree)
- Add network calls list to AI session threads API (#27425, 8886a57) (@SasSwart)
- Dashboard: Label AI spend as estimated (#27584, ec9b0f0) (@ssncferreira)
- Expose dynamic client registration in deployment settings (#27480, 4245e4e) (@BobbyHo)
- Show what a chat lifecycle hook changed (#27655, df1c0f9) (@ibetitsmike)
- Helm: Make HTTPS redirect status code configurable (#27360, 24ff135) (@02strich)
- Promote MinimumImplicitMember experiment to GA (#27472, 52423eb) (@Emyrk)
- Scale Testing: Llm-mock tool calls and paced streaming (#26850, a779320) (@ethanndickson)
- Dashboard: Show network calls list on AI session detail (#27426, a60f393) (@SasSwart)
- Add per-model OpenAI Responses API toggle (#27683, c6cee10) (@ibetitsmike)
- Remove native chat cost tracking in favor of AI Gateway cost data (#27330, 6b8f820) (@ibetitsmike)
- Dashboard: Tighten base infra step grid and card typography (#27797, 5f3b875) (@tracyjohnsonux)
- feat(dogfood/coder): add agent-browser live preview app (#27838, d40c4f7) (@ibetitsmike)
- Server: Support public OAuth2 client tokens at the schema layer (#27712, d814dfa) (@BobbyHo)
- Add --chat-hook-allow-insecure to allow plain HTTP chat hook URLs (#27896, 4b9880a) (@ibetitsmike)
- Add per-template Coder Agents access control (#27285, 0ac23e3) (@ethanndickson)
- Dashboard: Add per-template Coder Agents controls (#27514, 01c00ce) (@ethanndickson)
- CLI: Add --agents-allowed to template commands (#27517, 78b5a0f) (@ethanndickson)
- Harden chat generation runtime instrumentation for billing (#27451, 4b7494b) (@jaaydenh)
- Dashboard: Reintroduce chat search cache invalidation (#27892, 632eecc) (@DanielleMaywood)
- Dashboard: Reconcile chats-by-workspace cache across archive and watch paths (#27901, f9047e5)
- Dashboard: Scroll to module when clicking sidebar row (#27351, baed145) (@aqandrew)
- DEVEX-732 premium badging (#27847, 5064006) (@untra)
- Include agent metadata in workspace list responses (#27934, 9a57dfa) (@Emyrk)
- Constrain the OAuth2 client type column (#27931, 16c5877) (@BobbyHo)
- Log rate-limited external auth token validation (#26754, 66b0653) (@jscottmiller)
- Dashboard: Add server-side search and pagination for groups page (#27994, 87fdd2b)
- Add paginated API endpoint for groups (#27603, 6e07e26) (@aqandrew)
- Add built-in Browser tab for agent-browser (#27910, 2e5353b) (@ibetitsmike)
- Make CLI/API doc generators emit front-matter metadata (Phase 2) (#27246, 0a7bb80) (@nickvigilante)
- Invalidate provisioner daemon sessions on key deletion (#26532, 866e676) (@jscottmiller)
- Dashboard: Consolidate git panel tab strip into a view switcher dropdown (#27012, f7f840a) (@tracyjohnsonux)
- Dashboard: Add download and export for personal skills (#28032, 6765731) (@Shelnutt2)
- Wire chat search box to full-text search (#27973, c424a76) (@DanielleMaywood)
- Redesign the advisor tool row (#28069, 5a33b66) (@DanielleMaywood)
- Unhide --oidc-redirect-url server option (#28072, f0c1729) (@Emyrk)
- Migrate coderd MCP server to official MCP Go SDK (#28056, 08a1525) (@ibetitsmike)
- CLI: Migrate exp mcp stdio server to official MCP Go SDK (#28057, 26fe3f3) (@ibetitsmike)
- Server: Migrate external MCP client to official Go SDK (#28058, 1e546ea) (@ibetitsmike)
- Agent: Migrate workspace agent MCP client to official Go SDK (#28059, 7720e28) (@ibetitsmike)
- Migrate aibridge injected-MCP proxy to official MCP Go SDK (#28060, c8e8b21) (@ibetitsmike)
- Dashboard: Render list_subagent_models tool results (#28116, abe9c79) (@DanielleMaywood)
- Add experimental CLI to price unpriced AI models (#27926, 2d9b6ed) (@ssncferreira)
- Add Coder Agents chat tools to the MCP toolsdk (#28025, 8d4d0b3) (@ibetitsmike)
- Add oauth2 scope columns and single-use delete queries (#28007, 990d24d) (@BobbyHo)
- Redirect to the template builder after first time setup (#27670, e1fa247) (@aslilac)
- DEVEX-751 updated premiumpaywall component (#28070, b26f4c0) (@untra)
- Dashboard: Migrate agent chat scrolling (#28130, 57dc47d)
- Add username and email user search filters (#27922, a005e5c) (@wyattfry)
- Dashboard: Gate appearance settings behind Premium paywall (#27948, 41d2ece) (@jakehwll)
- Dashboard: Replace proxy emoji with latency radio icon in trigger (#28128, b4971bc) (@tracyjohnsonux)
- Dashboard: Make sidebar steps navigable (#28153, 039c0da) (@aqandrew)
- Add redirect URL override for external auth (#28082, b5d18bb) (@code-asher)
- Tolerate unusable runtime hours claims and decode -1 allocation as unlimited (#27984, d15800b) (@jaaydenh)
- Report agent runtime hours usage in entitlements (#27985, fa8ffe4) (@jaaydenh)
- Add per-license Products section with Coder Agents price gates (#28051, 995d7fe) (@jaaydenh)
- Limit concurrent chat agents with pooled admission (#27902, 119f2b1) (@ibetitsmike)
- Defer MCP tool schemas behind a find_tools search (#28225, 7724ee2) (@ibetitsmike)
- Extend agent chat MCP tools for remote UAT evidence loops (#28233, affeeaf) (@ibetitsmike)
- Audit chat system instructions changes (#27668, d3f08b1) (@mafredri)
- Dashboard: Surface subagents in the chat sidebar (#28234, b3f05a2) (@tracyjohnsonux)
- Server: Correlate request logs and spans by client_session_id (#27671, 71e95a3) (@aqandrew)
- Dashboard: Add Install Coder Desktop item to UserDropdown (#28244, 4d13bef) (@jakehwll)
- Derive OAuth2 client type from token_endpoint_auth_method (#28043, 663f41f) (@BobbyHo)
- Add yaml config option to standalone AI gateway (#28258, a441b03) (@pawbana)
- Dashboard: Show best-effort model pricing on the model form (#28290, 8405bbb) (@DanielleMaywood)
- Dashboard: Add shared DateTimeRangeFilter component (#28255, da99941) (@johnstcn)
- Automate weekly AI model price book refresh (#28146, 05699c4) (@evgeniy-scherbina)
- Default AI Gateway sessions list to a 24h time range (#28256, 023f616) (@johnstcn)
- Track Junie as an AI Gateway client (#28266, 7ff1278) (@matifali)
- Audit MCP server config changes (#27943, 299e72a) (@ibetitsmike)
- Add group and user ACLs to MCP server configs (#27944, 7ca7c30) (@ibetitsmike)
- Add organization picker to MCP server settings pages (#28150, 24b83dc) (@ibetitsmike)
- Dashboard: Move PR icon to diff line, center unread dot, persist kebab (#28326, 5be2fa7) (@tracyjohnsonux)
- Dashboard: Show total agent hours consumption on the licenses page (#27953, e5deb57) (@jaaydenh)
- Remove task management MCP tools (#28354, 2f996d7) (@ibetitsmike)
- Distinguish default and custom AI model prices (#28204, 9390e51) (@ssncferreira)
- Support custom prices for models in the price book (#28328, 19d1ee9) (@ssncferreira)
- Label process_output rows with the process command (#28300, 4a7a0a3) (@DanielleMaywood)
- Add a source filter to the AI model price list (#28329, 50ecd69) (@ssncferreira)
- Dashboard: Add provider icon to chat model selector (#28330, 015d6a6) (@DanielleMaywood)
- Add CTAs to AI budget admin notifications (#28138, 363d7fc) (@ssncferreira)
- Apply reasoning effort and surface thinking blocks for Google chat models (#28273, 8eb1e43) (@ibetitsmike)
- Server: Compare scopes by permission coverage (#28167, dea3a29) (@BobbyHo)
- Dashboard: Dim unselected sidebar chat titles (#28382, b605446) (@tracyjohnsonux)
- Scale Testing: Add create-users scaletest subcommand (#28287, 8549910) (@cstyan)
- Scale Testing: Add opt-in --reuse-users (#28289, c3cd692) (@cstyan)
- Register public clients without a secret (#28046, 6348c83) (@BobbyHo)
- Update premium paywall copy and link each page to its feature docs (#28339, e7eea0f) (@david-fraley)
- Dashboard: Add date-time range picker with quick picks (#28392, af05849) (@tracyjohnsonux)
- Dashboard: Use DateTimeRangePicker on the AI sessions page (#28426, 1c13940) (@tracyjohnsonux)
- Add workspace agent session count protocol (#28125, 903d7b7) (@EhabY)
- Premium Page CTA updates and form handling (#28226, f44a3b5) (@untra)
- Add premium paywall conversion telemetry (#28425, a2afb45) (@david-fraley)
- Show a premium paywall on the external auth settings page (#28435, cb52f53) (@david-fraley)
- Server: Include chat model organization IDs in telemetry (#27956, ac41b5b) (@ethanndickson)
- Add chat model config RBAC resource (#27957, cbe24a3)
- Use organization-scoped chat models (#27960, 75ad451)
- Audit chat model config changes (#28439, a53c6e6)
- Audit operational agent settings (#28369, c275327)
- Server: Bill completed local tool batches in agent runtime (#28360, ba8030e) (@jaaydenh)
- Server: Record live tool execution stamps in the message part buffer (#28361, bdddb82) (@jaaydenh)
- Server: Bill interrupted tool batches on cancellation rows (#28362, e7f1e08) (@jaaydenh)
- Enable Coder Agents for organization members (#28186, 632cf63) (@ibetitsmike)
- Allow sharing MCP servers with users and groups (#28593, 8f45d55) (@ibetitsmike)
Bug fixes
- Database: Resolve duplicate 000554 migration collision (#27581, bd5d640) (@jakehwll)
- Remove
@mui/materialfromformUtils.stories.tsx(#27503, 448fe10) (@jakehwll) - Delete the unused ChatMessagePart.Signature field (#27588, be22640) (@DanielleMaywood)
- Server: Match sync.Map semantics in the typed wrapper (#27582, eb90570) (@mafredri)
- Remove chatd usage limit enforcement (#27535, 75fd7bc) (@johnstcn)
- Server: Reject workspace proxy hostname prefixes (#27544, 8cc7f2b) (@geokat)
- Server: Give chat message ids an append-order guarantee (#27495, e96d864) (@ibetitsmike)
- Report combined member limit in group AI spend (#27589, 0b40950) (@ssncferreira)
- Server: Extract plain-text provider error bodies (#27597, 5d2a69d) (@johnstcn)
- fix(aibridge): handle sonnet 5 adaptive thinking in bedrock (#27339, b371262) (@johnstcn)
- Database: Order the chat prompt query and its boundary by id (#27619, 1c722ff) (@ibetitsmike)
- Dashboard: Order chat transcript by message id (#27620, fb30674) (@ibetitsmike)
- Ai cost control cap configurable AI spend limit (#27640, e71249a) (@ssncferreira)
- Dashboard: Refresh group member budgets after overrides (#27553, e3a5a69) (@EhabY)
- Dashboard: Reflect submitting state during batch update (#27630, 0b93731) (@jakehwll)
- Demui
<OAuth2AppForm />(#27561, 659fb48) (@jakehwll) - Prefetch outdated Coder CLI in e2e setup instead of in the test (#27629, 4e512f7) (@BobbyHo)
- Add warn log level to unpriced models message (#27678, 3660ffe) (@ssncferreira)
- Helm: Render service nodePort with an explicit if guard (#27682, e819dd4) (@pawbana)
- Hide AI budget override controls without permission (#27654, b4eda32) (@ssncferreira)
- Dashboard: Announce cost controls move in v2.36 (#27688, b3852c7) (@ibetitsmike)
- Dashboard: Point Use template to builder (#27663, a86e67d)
- Add info log level to unpriced models message (#27693, 7b104b6) (@ssncferreira)
- Dashboard: Delete unreachable WaitForExternalAuth tool code (#27684, 4003f00) (@DanielleMaywood)
- Dashboard: Delete dead execute auth_required flow (#27687, 11e03cf)
- Remove nodePort from required service fields of ai-gateway chart (#27696, 6df2463) (@pawbana)
- Dashboard: Delete unreachable switch arms from ToolLabel and ToolIcon (#27697, 9bc681f) (@DanielleMaywood)
- Dashboard: Prevent Add secret dialog overflow (#27649, e30a7bc) (@dylanhuff-at-coder)
- Build actionlint from source to avoid the shellcheck deadlock (#27679, bc9c785) (@ibetitsmike)
- Dashboard: Correct autostop restart prompt on the workspace schedule page (#27632, a76c51d) (@jakehwll)
- Dashboard: Use "Create token" wording in token settings (#27634, 31ac9a4) (@jakehwll)
- Dashboard: Link spend page alert to cost control migration section (#27782, f411012) (@ssncferreira)
- Correct authorization header spelling in api docs (#27721, 7bd9f5e) (@penso)
- Reserve chat hook dispatch capacity for running turns (#27656, fc24c27) (@ibetitsmike)
- Bound golangci-lint memory to stop lint OOM kills (#27637, 6e5f02b) (@ibetitsmike)
- Agent: Detect IPv6-bound listening ports (#27765, 8a4adee) (@bpmct)
- Support adding multiline secrets via the UI (#27253, f44e8c1) (@rowansmithau)
- Server: Preseed AI providers for title tests (#27564, 9bab7a8) (@ibetitsmike)
- Fix port assignment race from aigatewaystart_internal_test (#27801, 0b8b489) (@pawbana)
- Dashboard: Tidy AI model provider configuration layout (#27843, 4aec1ea) (@DanielleMaywood)
- Price AI usage by configured provider type (#27836, db88ec3) (@ssncferreira)
- Remove unbound Client() method from aibridged.Server (#27845, 8f5f15a) (@pawbana)
- Server: Deflake TestPrebuildsAutobuild prebuild waits (#27601, 8a51031) (@BobbyHo)
- Require bedrock model fields for the invoke-model protocol (#27846, 1142706) (@evgeniy-scherbina)
- Dashboard: Allow only template admins/owners to navigate to template version pages by clicking VersionRow (#27550, ca3de3c) (@aqandrew)
- Dashboard: Show error state with retry when chat fetch fails (#27887, 5ed73f0) (@DanielleMaywood)
- Add codersdk JSON response decoder for typed API endpoints (#27804, db68c6c) (@dylanhuff-at-coder)
- Detect out-of-range AI Gateway costs instead of wrapping silently (#27602, dae41eb) (@evgeniy-scherbina)
- Database: Match group name case-insensitively in search (#27894, d458fe4) (@david-fraley)
- Dashboard: Show tooltip in AppLink + WorkspacesTable when coder_app URL is invalid (#27556, 3e2a8bd) (@aqandrew)
- Server: Document HTTP 201 for workspace and build creation (#27903, 0d0c6e5) (@david-fraley)
- Dashboard: Name template versions in promote/archive dialogs and toasts (#27633, 6c8a864) (@jakehwll)
- Server: Classify bedrock credential errors as non-retryable (#27913, 4e2620d) (@johnstcn)
- Dashboard: Defer external app API key generation to on-click (#27907, bab9963) (@jakehwll)
- Dashboard: Fan chat message upserts out to every containing page (#27912, 19fdc23) (@DanielleMaywood)
- Dashboard: Treat chat deleted watch events as archive instead of eviction (#27921, 192842c) (@DanielleMaywood)
- Markdown rendering improvements (07f79af)
- Server: Start test AI bridge after config in automatic title tests (#27971, 95e8b71) (@ibetitsmike)
- Dashboard: Prevent protocol-relative login redirects (#27363, 84f4a8b) (@ThomasK33)
- Only write AI model prices that changed (#27923, 5efa7ab) (@ssncferreira)
- fix(aibridge): use latest streaming chat usage instead of cross-chunk sum (#27967, ad10045) (@ibetitsmike)
- Raise test-go-pg timeout budget, lower macOS parallelism (#27997, bd693ad) (@BobbyHo)
- Server: Render collected_at as UTC RFC3339 in the agent metadata aggregate (#27991, 053b389) (@Emyrk)
- Dashboard: Make delete dialog confirmation text use primary color (#28002, baa1e3a) (@jeremyruppel)
- Improve layout of CLI install page (#27998, b29af7f) (@aslilac)
- Hide the favorite button for workspaces you don't own (#28000, ddb2799) (@aslilac)
- Prevent IP leaks via external chat images (#27362, 496ed75) (@ThomasK33)
- Server: Enforce Force On MCP server policy on the backend (#27990, 91d3027) (@ThomasK33)
- Server: Block SSRF in MCP OAuth2 discovery and client registration (#27989, 37b3f11) (@ThomasK33)
- SDK: Read trial claim instead of misspelled trail (#28014, 5bdabc9) (@jaaydenh)
- Derive diff cache keys from patch content (#27987, df278ec) (@DanielleMaywood)
- Keep chat attachments while a linking chat exists (57f38b5) (@ibetitsmike)
- Server: Deflake TestRunner_StartsRealInterruptTask (#28024, 7f75e62) (@hugodutka)
- Server: Use service account wording in account notifications (#27536, d7953bd) (@matifali)
- fix(.github/workflows): run windows mise install under bash, tolerate missing mtimehash (#28020, 2c35d33) (@ThomasK33)
- Disable keep-alives on mock aibridged to prevent stale-conn EOF (#28016, 5febde0) (@johnstcn)
- Dashboard: Gate TemplateExampleCard Use template link on builder state (#28035, e9ee83a) (@jeremyruppel)
- Dashboard: Improve git panel color contrast (#28038, 5fab238) (@tracyjohnsonux)
- Server: Synchronize aibridgeTestFactory recorded fields (#28031, bde38e9) (@ibetitsmike)
- Dashboard: Stop attachment downloads from trapping iOS PWAs (#27853, ac11ae5) (@ibetitsmike)
- Report per-request Anthropic usage in chat token accounting (#27966, 88e1135) (@ibetitsmike)
- Keep chat token usage for streams ending with usage-less chunks (#28068, b3607f5) (@ibetitsmike)
- fix(aibridge): record token usage without an MCP proxier (#27886, 7a545b3) (@blockgroot)
- Dashboard: Add aria-label to icon-only Back navigation links (#26222, b145142) (@tracyjohnsonux)
- Allow manual chat compaction from the error state (#28022, 1458d27) (@ibetitsmike)
- Server: Deflake TestDispatcherTimeoutNoRetry (#28050, 0acd978) (@ibetitsmike)
- Reject PKCE code_verifier below RFC 7636 length floor (#28003, 209d1ca) (@BobbyHo)
- Dashboard: Include owner context in Agents org picker permission check (#28076, d509e1e) (@ibetitsmike)
- Dashboard: Keep standard avatar border for normal AI spend state (#28037, 49cbd7d) (@tracyjohnsonux)
- Dashboard: Prefer permitted organization for chat creation (#28078, bca5d72) (@ibetitsmike)
- Server: Make edit_files schema and errors actionable for models (#28121, 48e1e28) (@ibetitsmike)
- Server: Deflake TestChatMessageWithFiles/FileCapExceeded (#28091, d5bb35a) (@ibetitsmike)
- Server: Send assigned chat model IDs verbatim (#28144, 93c6faf) (@ibetitsmike)
- Server: Set Cache-Control: no-store on OAuth2 responses (#28143, 1aa3553) (@BobbyHo)
- Agent: Create missing log_path parent directory (#28166, af90d8e) (@35C4n0r)
- Repair stale chat agent bindings after workspace rebuild (#28152, 521c383) (@ibetitsmike)
- Enforce uniqueness and hour alignment for agent runtime usage events (#27983, 20c376a) (@jaaydenh)
- Label unpriced token usage metric by provider name and type (#28210, 95328f1) (@ssncferreira)
- Server: Also retry on 503 (#28218, aa80fa3) (@johnstcn)
- Dashboard: Replace hardcoded text-[13px] with scale tokens outside agents (#28071, 5d746aa) (@tracyjohnsonux)
- Dashboard: Deflake adjust user theme preference (#28219, 46ec620) (@jeremyruppel)
- Dashboard: Allow single-label AI provider endpoints (#28122, 444fb8a) (@johnstcn)
- Dashboard: Persist empty MCP selection (#28238, 30dc7eb) (@ethanndickson)
- Follow-up fixes for conditional VCS requests (#27711, 6079c51) (@johnstcn)
- Dashboard: Treat interrupting chats as busy in the composer (#28209, 14e3ae3) (@DanielleMaywood)
- Dashboard: Stop gating chat stream parts on client status (#28207, 9590e95) (@DanielleMaywood)
- Dashboard: Stop redundant RBAC paywall error toast on Groups page (#28249, a3a0079) (@jakehwll)
- Dashboard: Clean up agents composer borders and normalize dropdown pills (#28230, 16ae996) (@tracyjohnsonux)
- Dashboard: Remove sidebar nav bottom divider (#28239, cb0a9eb) (@tracyjohnsonux)
- Dashboard: Repair the locally-run storybook vitest suite (#28261, 5af08a1) (@ibetitsmike)
- Dashboard: Quote colon-containing values in filter serialization (#28254, 962366f) (@johnstcn)
- Dashboard: Disallow queued message edits (#28265, ba5717d) (@ibetitsmike)
- Bound request body size on JSON API endpoints (#28168, 166d92b) (@BobbyHo)
- Dashboard: Stop the new-turn scroll snap on agent chat (#28213, 72a6c8a) (@DanielleMaywood)
- Log tailnet tunnel authorization decisions (#27819, 821d91f) (@sreya)
- Link workspaces empty state to template builder (#28280, 60722bb) (@aslilac)
- Provisioner: Sync version constants with the shipped binary (#27871, 1fbd029) (@yysu)
- Treat a missing serve endpoint as a fatal dial error (#27864, 63641b9) (@pawbana)
- Show no budget instead of unlimited for empty group AI budget (#27993, 97cb722) (@tracyjohnsonux)
- Server: Remove per-chat system prompt limit (#28294, c2bb624) (@hugodutka)
- Standardize EmptyState typography (#27720, 46c0dba) (@jakehwll)
- Server: Remove AI Governance required banner (#28268, 6107cfe) (@jcjiang)
- Dashboard: Centralize UUID generation and fix non-secure crash (#28285, 1bb0978) (@phorcys420)
- Harden org-scoped MCP config chat gating, updates, and visibility (#28065, f7a0de7) (@ibetitsmike)
- Dashboard: Fix price threshold display and debounce model price lookup (#28298, 29c129e) (@DanielleMaywood)
- Gate MCP user tokens on owner-scoped personal RBAC (#27945, a3eb1ee) (@ibetitsmike)
- Add distributed protection for external auth refresh (#27479, 7ba2e6e) (@code-asher)
- Only create workspace agents for start builds (#28276, 676b9bb) (@aslilac)
- Dashboard: Clear streamed message when a chat errors (#28277, eed420a) (@DanielleMaywood)
- Clarify AI model price configuration (#28372, d58788c) (@ssncferreira)
- Gate group settings page and fix unauthorized group patch (#28314, ab66010) (@ssncferreira)
- Serialize empty MCP tool properties as {} not null for OpenAI (#28380, 5480299) (@DanielleMaywood)
<BuildingTemplateLoader />icon sizes (#27733, 47ffa87) (@jakehwll)- Dashboard: Use RotateCcwIcon for update actions (#28183, 3762174) (@designertyler)
- Dashboard: Scroll per-script logs selector on overflow (#28353, 05b78a0) (@jakehwll)
- Dashboard: Prevent duplicate menu when right-clicking chat kebab (#28391, e58a603) (@tracyjohnsonux)
- Dashboard: Hide kebab while archiving spinner shows (#28393, 93d5f82) (@tracyjohnsonux)
- Dashboard: Fix model selector trigger layout on form-style pages (#28399, b14bce1) (@ibetitsmike)
- Dashboard: Freeze motion animations during Pixel captures (#28396, c940284) (@DanielleMaywood)
- Dashboard: Stop completed process_output rows animating forever (#28414, 7970cd6) (@ibetitsmike)
- Dashboard: Show chat instead of the right panel on small viewports (#28387, bb7f2f2) (@bpmct)
- Dashboard: Improve chat slash menu enter handling, anchoring, and placement (#28411, 6f1d225) (@ibetitsmike)
- Dashboard: Match Input height when empty (#28409, cfc7b82) (@tracyjohnsonux)
- Server: Identify audit rows by content instead of order in diff tests (#27904, 952c0ce) (@dylanhuff-at-coder)
- Dashboard: Align settings header style and paywall spacing (#28418, 3ffb266) (@tracyjohnsonux)
- Dashboard: Right-align DateTimeRangePicker dropdown to match other dropdowns (#28428, fd09112) (@tracyjohnsonux)
- Dashboard: Auto-select MCP server after successful OAuth (#28155, 05fcd06) (@ibetitsmike)
- Dashboard: Repair failing storybook interaction tests and pixel captures (#28417, 58c1248) (@ibetitsmike)
- Dashboard: Sync paywall copy with the latest copy doc (#28436, b8fcdbd) (@david-fraley)
- Dashboard: Use the browser-only bullets from the copy doc (#28434, 9ce4229) (@david-fraley)
- Dashboard: Point queued-capacity trial link to /deployment/premium (#28437, ee87ad6) (@mattvollmer)
- Dashboard: Keep TemplateCard official badge inline under preflight (#28433, 7b72f5d) (@jeremyruppel)
- Dashboard: Disable archive actions for active chats (#28264, 610f321) (@ibetitsmike)
- Dashboard: Update Coder Agents license copy (#28432, c9a1e2b) (@jaaydenh)
- Server: Prevent stale chat model config writes (#27968, cd1362a) (@ethanndickson)
- Require audit capture for chat settings (#28394, 2aba268) (@ethanndickson)
- Move organization model overrides from Models to Coder Agents settings (#28473, d935313) (@ethanndickson)
- Dashboard: Harden organization-scoped model loading (#28495, f5f4032) (@ethanndickson)
- Dashboard: Remove redundant model warning (#28484, 1e509dc) (@ethanndickson)
- Surface duplicate AI provider hostname as warning, not error (#28208, 9b609dc) (@johnstcn)
- Avoid 500 when generating chat title from rename dialog and remove unused endpoint (#28306, 67db41c) (@f0ssel)
- Dashboard: Clarify chat model permission labels (#28579, 3e0fc60) (@ethanndickson)
- Documentation: Document org-scoped admin configuration for agents (#28482, d7fef22) (@ethanndickson)
- Stem chat search terms with the english text search config (#28319, 31e8160) (@f0ssel)
- Prevent markdown injection in notifications (#28340, f24d671) (@BobbyHo)
- Dashboard: Distinguish cross-org budgets (#28596, d99f257) (@ssncferreira)
- Dashboard: Show Manage agents link to organization model admins (#28637, 71cf4d0) (@ethanndickson)
- Server: HTML-escape the email template values (#28397, 29cae5f) (@BobbyHo)
- Server: Reject agent requests from suspended owners (#28513, dbd479b) (@hwang251)
- Dashboard: Gate browser-only paywall on entitlement (#28660, 50bd5fc) (@david-fraley)
- Batch backport tracyjohnsonux UI fixes for Agents and Coder admin area to release/2.37 (#28673, ba7e184)
- Dashboard: Repair failing Storybook stories (#28462, 1cea7ec) (@ethanndickson)
- Dashboard: Point MCP server ACL msw handlers at v2 paths (#28659, cc20e7e) (@ibetitsmike)
- Clarify AI provider collision warnings (#28549, ccaeafd) (@ssncferreira)
- Dashboard: Standardize AI provider badge tooltips (#28624, 38b2a29) (@ssncferreira)
- Update disabled state on AI provider rows (#28558, acc91a1) (@tracyjohnsonux)
- Make chat model sharing work for sharers without directory access (#28703, e1f017e)
- Dashboard: Let organization admins manage agent templates (#28636, ff22804) (@ethanndickson)
- Server: Keep NUL out of jsonb chat content (#28625, a73c8af) (@mafredri)
- Use old_text/new_text vocabulary across edit_files (#28626, e06d165) (@mafredri)
- Enable Copilot HTTP transport fallback (#28494, b7d7be9) (@ssncferreira)
- Add cache write accounting to OpenAI interceptors and service tier to TokenUsage metadata for all interceptors (#28714, 89df1c2)
- Server: Accept RFC 9728 resource metadata with array-valued resource (#28592, 7986365) (@f0ssel)
- Dashboard: Adjust context usage indicator error states so it is readable (#28719, 749e5d4) (@tracyjohnsonux)
- Dashboard: Size chat pill selectors to content with an 8ch truncation floor (mobile and desktop fixes) (#28691, 9ed8ffb) (@tracyjohnsonux)
- Dashboard: Remove member-facing Models nav item (#28772, 152c5b1) (@ethanndickson)
Documentation
- Present AI Governance as included with Premium (#27545, 4987afa) (@mattvollmer)
- Add standalone AI Gateway docs (#27592, 18128b7) (@pawbana)
- Document AI Gateway cost controls (#27643, 3f1973f) (@ssncferreira)
- Update 2.35 latest release to v2.35.3 (#27511, 0707302) (@mtojek)
- Add a glossary to the reference section (#27165, ee7e7ec) (@nickvigilante)
- Lead with env vars in admin docs and add configuration reference (#26824, ba4779f) (@nickvigilante)
- Note user secret target uniqueness and delivery boundary (#27532, fe4a73f) (@dylanhuff-at-coder)
- Bump AI Gateway client modules to latest and remove Coder Tasks refs (#27810, 84cdc17) (@app/blinkagent)
- Correct 2.35 stable version to v2.35.3 (#27842, 866eb97) (@mtojek)
- Documentation: Fix self-violating examples (#27849, 10b366c) (@nickvigilante)
- Replace enterprise-base image references with example-base (#27025, 79723db) (@bpmct)
- Note bulk stop confirmation (#27908, 3e0b943) (@jakehwll)
- Add style-guide rule against "whose" for non-person antecedents (#27866, aa03947) (@nickvigilante)
- Documentation: Adopt STE-derived prose rules (#27852, 2d320de) (@nickvigilante)
- Document per-template agents_allowed (#27518, ee49107) (@ethanndickson)
- Refresh JFrog Artifactory integration guide for SaaS (#28005, b781be0) (@matifali)
- Remove beta references from Coder Agents docs and manifest (#27939, 75e0790) (@mattvollmer)
- Document prebuilds quota group behavior (#28015, e562912) (@johnstcn)
- Remove AI Governance Add-On references (#28073, 52bd05a) (@mattvollmer)
- Use approximate spend and add Everyone group tip for AI Gateway cost controls (#28012, 3426f83) (@ssncferreira)
- Add Coder Desktop stale-tunnel recovery and improve macOS log capture (#26735, 043bebb) (@app/blinkagent)
- Remove invalid
--yesflag fromcoder template version promote(#28084, f3fd4c4) (@nickvigilante) - Fix prometheus metric name and slack webhook backtick (#28085, 3145cc8) (@nickvigilante)
- Fix Helm TLS/ingress value keys in admin/setup (#28087, 5b97d99) (@nickvigilante)
- Fix P2/P3 typos and syntax errors from drift sweep (#28101, 1d189cc) (@nickvigilante)
- Correct nginx X-Forwarded-Proto and certbot instructions flavor (#28086, b0e93b6) (@nickvigilante)
- Correct broken CLI commands and flags from drift sweep (#28098, 58de9ab) (@nickvigilante)
- Rebrand Windsurf doc page to Devin Desktop (#28205, 062c0fd) (@matifali)
- Documentation: Fix self-violations found by audit (#27855, 0db25ca) (@nickvigilante)
- Add Licensing & Usage page and reorder agents manifest (#28263, 5f6eeda) (@mattvollmer)
- Remove inaccurate Agent Firewall filesystem protection claim (#28286, ddcffd8) (@mattvollmer)
- Note JetBrains client attribution in AI Gateway (#28296, 34e95c4) (@matifali)
- Update Tallyman Agent Time reporting (#28275, ddf2d33) (@mattvollmer)
- Fix prebuilt-workspaces example syntax and defaults (#28088, 31e95f7) (@nickvigilante)
- Add markdown_url front matter so the About page links to /docs.md (#28281, fc6d6ba) (@nickvigilante)
- Fix broken callout on the AI Gateway Monitoring page (#28303, 71b5bc3) (@nickvigilante)
- Remove JetBrains Fleet references (#28301, 7268cad) (@matifali)
- Uppercase mixed-case GitHub-style callout markers [DOCS-681] (#28304, 2ee6f45) (@nickvigilante)
- Remove space in GitHub-style callout markers [DOCS-680] (#28305, e003014) (@nickvigilante)
- Complete swagger annotations for organization-scoped MCP routes (#28064, f2bc9ab) (@ibetitsmike)
- Refresh workspace-management screenshots with current UI (#28356, d3b3aea) (@jakehwll)
- Clarify who can set AI model prices and how they are keyed (#28401, d989ae3) (@ssncferreira)
- Streamline agent instructions (#28243, 9d6ef1e) (@ibetitsmike)
- Fix broken .style/ link and lift details block out of list item [DOCS-661] (#28180, c6deadb) (@nickvigilante)
- Address AI Gateway documentation review feedback (#28309, 4ce8e8e) (@pawbana)
- Documentation: Document the chat search: full-text filter (#28474, da9a9ea) (@f0ssel)
- Remove early access label from chats API reference (#28761, e25a7dd)
Code refactoring
- Make user AI budget and spend endpoints consistent (#27611, d6a5c8e) (@ssncferreira)
- Migrate story snapshot params to pixel (#26844, 2b28515) (@aslilac)
- Dashboard: Use uuid package instead of generateUUID helper (#27709, 218829d) (@jeremyruppel)
- Dashboard: Replace label/icon switches with tables and registry invariants (#27706, 46d01fc)
- Dashboard: Demui
Form.stories.tsxstories (#27762, 0a42334) (@jakehwll) - Dashboard: Rename
<404Page />to<NotFoundPage />(#27731, 26bae42) (@jakehwll) - Dashboard: Demui
<NotificationEvents />into dropdown (#27732, ce20ad8) (@jakehwll) - Dashboard: Demui
<ProvisionerTagsField />(#27763, 5e29a87) (@jakehwll) - Dashboard: Migrate VS Code button menus off MUI (#27730, 0028fea) (@jakehwll)
- Dashboard: Remove mui components from
<LicenseSettingsPage />descendants (#27764, c350710) (@jakehwll) - Dashboard: Migrate
<Markdown />and<InlineMarkdown />off MUI (#27724, fba9f0d) (@jakehwll) - Dashboard: Demui workspace build data and outdated tooltip (#27787, fc27714) (@jakehwll)
- Dashboard: Demui workspace topbar, schedule controls, and timings (#27790, 20ff957) (@jakehwll)
- Dashboard: Demui PortForwardButton and popover view (#27786, 497ab9e) (@jakehwll)
- Server: Carry the resolved OpenAI transport on a model wrapper (#27703, b5c9e8e) (@ibetitsmike)
- Server: Read the OpenAI transport from the model (#27704, 0e16e35) (@ibetitsmike)
- Server: Own provider option construction in one function (#27705, 404bb2f) (@ibetitsmike)
- Dashboard: Demui template settings forms (#27636, 209c990) (@jakehwll)
- Dashboard: Replace MUI update-check snackbar with
<UpdateCheckNotice/>(#27728, d23d0d5) (@jakehwll) - Dashboard: Demui create template gallery and form (#27788, df17009) (@jakehwll)
- Dashboard: Demui AgentRow and AgentStatus (#27789, 3640b69) (@jakehwll)
- Remove introductory access banner from /agents page (#27865, 1c993c7) (@mattvollmer)
- Dashboard: Replace MUI Stack, TextField, and Link with shared components (#27817, 7a4ae26) (@jakehwll)
- Server: Optimize chatdebug (#27129, c62079c) (@johnstcn)
- Dashboard: Show TableLoader in loading tables (#27870, 0a79610) (@aqandrew)
- Dashboard: Migrate chats query keys to collections/entities taxonomy (#27841, 0c88c2a) (@DanielleMaywood)
- SDK: Use ReadBodyAsJSON in typed endpoints (#27857, 76ae643) (@dylanhuff-at-coder)
- SDK: Use shared error helpers in chat endpoints (#27858, ed10064) (@dylanhuff-at-coder)
- Dashboard: De-MUI custom role create/edit form (#27820, db4b6dc) (@jakehwll)
- Dashboard: Migrate WorkspacesButton to Combobox (#27723, a79031a) (@jakehwll)
- Dashboard: Migrate shared Pill to Badge (#27638, c98d6bb) (@jakehwll)
- Dashboard: Centralize chat cache operations in semantic cache functions (#27869, f96671d) (@DanielleMaywood)
- Dashboard: Demui
<IconField />(#27719, 7a9b425) (@jakehwll) - Dashboard: Redesign
<AppearanceSettingsPage />(#27722, ad22526) (@jakehwll) - Dashboard: Move
Add usersinto<SettingsHeader />(#27906, b2cfc4e) (@jakehwll) - Dashboard: Migrate organization settings form off MUI (#27718, b3acf7f) (@jakehwll)
- Dashboard: Add
<Drawer />and migrate build logs drawer (#28009, 726e86c) (@jakehwll) - Dashboard: Render live assistant output as a chat timeline row (#28079, 7617b6b) (@DanielleMaywood)
- Remove MUI and Emotion (#27821, ea8ba0c) (@jakehwll)
- Dashboard: Show audit log retention and Premium paywall on observability settings (#27947, 0350bfd) (@jakehwll)
- Dashboard: Tidy secrets list layout (#27917, a749cf5) (@jakehwll)
- Move chat prompt sanitization into codersdk (#28283, 8a7e8d9) (@bpmct)
- Remove AI add-on badge, seat column, and add-on wording leftovers (#28004, dd43574) (@tracyjohnsonux)
- Server: Add related-data selection to workspace queries (#28302, f5d42a8) (@spikecurtis)
- Share the AI Gateway price book contract (#28310, 211f490) (@evgeniy-scherbina)
- refactor(aibridge): extract bedrock mantle SigV4 signing to bedrocksig (#28407, edd8bf8) (@johnstcn)
- Server: Unify LLM model-call construction behind a resolver (#28145, 9168dbf) (@ibetitsmike)
- Normalize workspace agent session metadata (#28124, c767cc5) (@EhabY)
- Upgrade golangci-lint to v2.0.2 (#28416, 5ca0143) (@aslilac)
- Clarify chat model resource names (#27958, 9bd8899)
- Server: Return PersistedStep directly from ExecuteLocalTools (#28359, 759ae83) (@jaaydenh)
- Rename edit_files wire type to old_text/new_text (#28467, 8aad49e) (@mafredri)
Performance improvements
- Server: Collapse org authorization to a set-membership test (#27244, 7e708b2) (@jeremyruppel)
- Server: Build span role attributes only when recording (#27310, d9d6ce9)
- Server: Batch authcheck permissions via rbac.Filter (#27309, 51a9aa1)
- Server: Build the workspace build fan-out maps once per batch (#28074, 62f4afb) (@jscottmiller)
Tests
- Don't use ptytest for client side of SSH session tests (#27681, dc31791) (@spikecurtis)
- Fix tailnet connection teardown flake (#27768, 4dbb3a2) (@ethanndickson)
- Server: Drain dormancy audit log before reset in StartWakesUpDormantWorkspace (#27541, 76eb43a) (@Emyrk)
- Agent: De-flake TestAgent_Session_EnvironmentVariables (#27803, 87494c4) (@dylanhuff-at-coder)
- Dashboard: Isolate httptest server clients (#27769, cb992b3) (@ethanndickson)
- Server: Accept query cancellation in subagent wait (#27818, 1702bbb) (@ethanndickson)
- Dashboard: Fix failing Storybook play functions (#27874, 05baba1) (@jakehwll)
- Fix failing storybook stories (#27674, efd5ce3) (@aslilac)
- Skip racey tasks test (#28033, 0d0f5b4) (@Emyrk)
- CLI: Add standalone AI Gateway connection tests (#27860, 94f487b) (@pawbana)
- Dashboard: Cover version picker stacking (#28154, 6dfba5c) (@david-fraley)
- CLI: Add standalone AI Gateway tests against a live coderd (#27863, 0a34a37) (@pawbana)
- CLI: Wait for OAuth server readiness (#28358, 36bae07) (@hugodutka)
Continuous integration
- Explicitly specify bash in mise tools installation (#27666, dc1d6c3) (@johnstcn)
- ci(.github): retry build-tool downloads in Windows signing jobs (#27664, d210b31) (@BobbyHo)
- Run test-go-pg mise tool install under bash on Windows (#27483, 0e1a9a9) (@nickvigilante)
- Broaden linkspector Stack Overflow ignore for weekly docs check (#27799, 71c7e92) (@nickvigilante)
- ci(.github): retry Go module downloads (#27816, 1f946bb) (@ethanndickson)
- Add scheduled audit-docs-paths workflow (#27245, 2f34e1a) (@nickvigilante)
- Ignore flaky codeium.com and marketplace.visualstudio.com links (#28203, b674d40) (@matifali)
- Skip oversized flake-check selections (#28293, 059546e) (@ethanndickson)
- ci(.github): skip Playwright apt installation (#28292, cbb36e6) (@ethanndickson)
- Use dedicated release App token to publish releases (backport 2.37) (#28591, 10251b2)
Chores
- Dashboard: Demui
<ScheduleForm />component (#27563, 5f72c15) (@jakehwll) - Documentation: Update release docs for v2.34.7 (#27591, 3c61a9a) (@mtojek)
- Remove emyrk from coderowners of commonly touched rbac (#27596, 2069381) (@Emyrk)
- Scale Testing: Reduce workspace poll interval to 5s (#27548, e657d2a) (@cstyan)
- Remove ai-gateway-cost-control experiment flag (#27579, 3deecb4) (@ssncferreira)
- Drop stale cost control experiment params (#27650, 740f5f7) (@ssncferreira)
- Upgrade to @coder/pixel-storybook 0.3 (#27658, 95275d9) (@aslilac)
- Replace
isChromaticwithisPixel(#26832, 6cfefc0) - Dashboard: Migrate all
<Dialog />s off MUI (#27506, 79724ab) (@jakehwll) - Dashboard: Remove unused SelectMenu component (#27800, cce5a21) (@jakehwll)
- Fix port availability check flake from aigatewaystart_internal… (#27784, a2287d6) (@pawbana)
- Documentation: Update release docs for v2.36.0 (#27828, 11b3827) (@mtojek)
- Update model prices to include more providers (#27837, 60161fd) (@johnstcn)
- Add more known model prices to ChatModelAdminPanel (#27839, b169066) (@johnstcn)
- Dashboard: Use
<TableEmpty />for table empty states (#27583, 120ec1f) (@jakehwll) - Add docs inline-HTML linter and backtick generated placeholders (#27399, 9dcb75c) (@nickvigilante)
- Regenerate configuration-reference.md for bedrock placeholder (#27898, 4b61042) (@app/blinkagent)
- Add agents_allowed to templates (#27284, b3485d9) (@ethanndickson)
- Remove legacy chat template allowlist (#27515, d2f9280) (@ethanndickson)
- Forbid direct response body JSON decode in codersdk (#27859, 9b27d12) (@dylanhuff-at-coder)
- Dashboard: Upgrade pierre diffs to 1.3.3 (#27932, e751b28) (@DanielleMaywood)
- Documentation: Update release docs for v2.34.8 (#27970, 0414948) (@mtojek)
- Documentation: Update release docs for v2.35.4 (#27972, cfeae56) (@mtojek)
- Dashboard: Remove Beta tag from agents navigation (#27986, a3a5122) (@mattvollmer)
- Use 'AI spend' and 'approximate' in budget UI (#27977, 2741478) (@ssncferreira)
- Update stale Chromatic comments (#27714, 09b0d8e) (@aslilac)
- Sync fantasy fork with upstream v0.40.0 and openai-go with v3.50.0 (#27981, c97f4da) (@ibetitsmike)
- Server: Bump computer-use models to current frontier releases (#28026, c6e3be5) (@matifali)
- Dashboard: Add generateConnectionSessionId helper function (#27935, b721935) (@aqandrew)
- Add NewUnstartedHTTPServer helper to disable keep-alives on test servers (#28052, e02d9ad) (@johnstcn)
- Add test coverage for chatd compaction (#28053, 3f9e8cc) (@johnstcn)
- Retire mark3labs/mcp-go dependency (#28061, e92fd8e) (@ibetitsmike)
- Update chatd ARCHITECTURE.md guidance in AGENTS.md (#28103, bfa937a) (@hugodutka)
- Dashboard: Allow devin: URI scheme for Devin Desktop deep links (#28214, fb3ed7a) (@matifali)
- Dashboard: Add devin icon (#28206, 753f3d9) (@matifali)
- Correct AI Gateway metric provider label and cardinality notes (#28220, db3566c) (@ssncferreira)
- Add supabase icon (#28327, 64f26ef) (@DevelopmentCats)
- Documentation: Update release docs for v2.36.1 (#28357, 2529a54) (@mtojek)
- Refresh AI model price book (#28365, 5e0710d) (@cdrci)
- Remove retired go report from README (#28385, 54e64c2) (@bpmct)
- Refresh README links and streamline quickstart and support sections (#28386, 4ed03f5) (@bpmct)
- Backport post-2.37 merged PRs to release/2.37 (#28683, f7e068e)
- Refresh AI model price book (#28711, 4fef221) (@cdrci)
- Purge identified terraform modules via dbpurge (#28802, 8a148a9) (@Emyrk)
Reverts
Other changes
- refactor(site): demui template editor dialogs and create-template inputs (#27791, 0a30dc8) (@jakehwll)
- Change all windsurf.com links to devin.ai links (#28270, 27e3d0f) (@nickvigilante)
- Revert "chore: add @coder/docs as a CODEOWNER for docs content and tooling" (#27802, 4e54f31) (@nickvigilante)
- Update contributing link in CONTRIBUTING.md (#28029, 160964f) (@nickvigilante)
Compare: e96e7cfec23ca55d6700b684474b82df97cfd22b...v2.37.0
Container image
docker pull ghcr.io/coder/coder:2.37.0
Install/upgrade
Refer to our docs to install or upgrade Coder, or use a release asset below.