Changelog
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.
BREAKING CHANGES
- Use client IP when creating connection logs for workspace proxied app accesses (#19788, 6a9b896) (@ethanndickson)
The presence of the
ip
field oncodersdk.ConnectionLog
cannot be guaranteed, and so the field has been made optional. It may be omitted on API responses. - Server: Only show task status for current build (#19966, eb55f0a) (@johnstcn)
Renames the
TaskStateCompleted
constant toTaskStateComplete
to align with the tense used inWorkspaceAppStatusStateComplete
, requiring any code referencing the constant to be updated. - Rename prompt field to input for task creation (#19982, eb74732) (@DanielleMaywood)
Renames the
CreateTaskRequest.Prompt
toCreateTaskRequest.Input
to align with language used in our CLI and elsewhere in the codebase.
Features
AI Bridge
AI Bridge, the self-hosted LLM proxy for auditing LLM tools and adoption is now in Early access, get started with our setup guide.
- Add
aibridgedserver
pkg (#19902, 615585d) (@dannykopping) - Add aibridged package (#19797, fc9bff7) (@dannykopping)
- Initialize
aibridged
& mount API handler (#19798, 0a79817) (@dannykopping) - Add endpoint to list aibridge interceptions (#19929, 0a6ba5d) (@pawbana)
MCP Server
New tools added to the Coder MCP Server in Beta.
- Add
coder_workspace_read_file
MCP tool (#19562, 4bf63b4) (@code-asher) - Add tooltip field to workspace app that renders as markdown (#19651, e53bc24) (@rafrdz)
- Add
coder_workspace_write_file
MCP tool (#19591, d5a02d5) (@code-asher) - Add configs for external auth MCP usage + tool allow/denylist (#19794, 348a2e0) (@dannykopping)
- Add
coder_workspace_edit_file
MCP tool (#19629, 30330ab) (@code-asher) - Add
coder_workspace_ls
MCP tool (#19652, be7aa58) (@code-asher) - Add coder_workspace_port_forward MCP tool (#19863, 7f56212) (@code-asher)
- Aibridged mcp handling (#19911, 6971f61) (@dannykopping)
Tasks
v2.27.0 introduces the Tasks API (in beta) for integrating background agents into your ecosystem. Read more in our documentation and blog posts.
- Don't redirect to task page when it is created (#19919, 6d0943a) (@BrunoQuaresma)
- Add sidebar to task page (#19944, 2df9c5b) (@BrunoQuaresma)
- Redesign tasks page to match AI tools (#19962, 89339f6) (@BrunoQuaresma)
- Add notification for task status (#19965, fdb0267) (@ssncferreira)
- Delete task from sidebar (#20023, e96d69b) (@BrunoQuaresma)
- Minor prompt redesign (#20045, f009ebd) (@BrunoQuaresma)
- CLI: Add coder exp task delete (#19644, 3470632) (@mafredri)
- CLI: Add quiet flag to task create (#19701, f94abfc) (@DanielleMaywood)
- CLI: Add optional --name arg to 'exp task create' (#19939, 78b1ec9) (@johnstcn)
- CLI: Add exp task send (#19922, 252f430) (@DanielleMaywood)
- CLI: Add formatting options to coder whoami (#19970, 930bbaf) (@johnstcn)
- CLI: Improve exp task status --watch (#19969, 82bebc7) (@johnstcn)
- CLI: Add exp task logs (#19915, b7e0b2a) (@DanielleMaywood)
- CLI: Add more information to
coder whoami
(#19971, 0a840e4) (@johnstcn) - CLI: Add ability to create tasks for other users (#20012, abdea72) (@johnstcn)
- CLI: Add
workspace-updates
scaletest command (#19905, 0be9221) (@ethanndickson)
Workspace sharing
Shared workspaces are in the early stages of development and not ready for public testing; we're looking forward to sharing the work when it's available. If you have requests for shared workspaces, please leave feedback in our Github Discussions.
- Add
sharing add
command to the CLI (#19576, 909acbc) (@brettkolodny) - Add
sharing show
command to the CLI (#19707, 065c7c3) (@brettkolodny) - Add
sharing remove
command to the CLI (#19767, 8d5c566) (@brettkolodny) - Add
--shared-with-me
flag tocoder list
command (#19948, 647101b) (@brettkolodny)
Core
- Add user filter to templates page to filter by template author (#19561, 95dccf3) (@rafrdz)
- Add default workspace name to Template Embed form (#19688, 5c1a708) (@mtojek)
- Add workspaces/acl [delete] endpoint (#19772, 854f3c0) (@brettkolodny)
- Add helm var to support RBAC for deploying workspaces in extra namespaces (#19517, 6238937) (@rowansmithau)
- Add
shared_with_group:
andshared_with_user:
filters to /workspaces endpoint (#19875, 38ca987) (@brettkolodny) - Show warning in AppLink if hostname is long enough to break port forwarding (#19506, 6c01a77) (@aqandrew)
- Add prebuild timing metrics to Prometheus (#19503, 0ab345c) (@ssncferreira)
- Replace the jetbrains-gateway module with the jetbrains toolbox (#19583, b61a5d7) (@app/blink-so)
- Support custom notifications (#19751, eec6c8c) (@ssncferreira)
- Ensure OAuth2 refresh tokens outlive access tokens (#19769, 088d149) (@ThomasK33)
- Scope
allow_list
to includeresource_type
(#19748, 679179f) (@Emyrk) - Add best effort attempt to revoke oauth access token in external auth provider (#19775, 439b041) (@pawbana)
- Implement API key scopes database migration (#19861, fb0ce38) (@ThomasK33)
- Add lint check for API key scope enum completeness (#19862, acc0890) (@ThomasK33)
- Generate RBAC scope name constants (#19896, adb7521) (@ThomasK33)
- Add scaletest Runner for dynamicparameters load gen (#19890, 289f021) (@spikecurtis)
- Add public RBAC scope catalog for user-requestable permissions (#19913, 47c92ad) (@ThomasK33)
- Add external API key scopes (#19916, 4bda395) (@ThomasK33)
- Add multi-scope support to API keys (#19917, d0db9ec) (@ThomasK33)
- Publish RBAC scopes in OAuth2 metadata endpoints (#19942, 05537c1) (@ThomasK33)
- Remove agent name from app URLs (#19750, d29a524) (@rafrdz)
- Implement composite API key scopes for workspaces and templates (#19945, 79126ab) (@ThomasK33)
- Server: Add tasks delete endpoint (#19638, e5ac640) (@mafredri)
- Server: Allow specifying a name for a task (#19745, f3b152b) (@DanielleMaywood)
- Server: Add experimental tasks send endpoint (#19941, 5317d30) (@mafredri)
- Server: Add experimental tasks logs endpoint (#19958, 0bac5a4) (@mafredri)
- Server: Add ability to search org members by user_id, is_system, github_user_id (#20048, ff930ad) (@johnstcn)
- Dashboard: Display warning messages when wildcard is not configured (#19660, 7c8f8f4) (@kacpersaw)
- Dashboard: Display warnings in tasks page when wildcard is not configured (#19780, 0601cc8) (@kacpersaw)
- Dashboard: Allow starting task workspace from task page (#19790, b71d671) (@DanielleMaywood)
- Dashboard: Add custom notification settings (#19938, da467ba) (@ssncferreira)
- Dashboard: Add task notifications to user settings (#20006, 7bddd80) (@ssncferreira)
- Enterprise: Allow system users to be added to groups (#19518, 4e9ee80) (@SasSwart)
Bug fixes
- Don't show prebuild workspaces as tasks (#19572, abc946c) (@BrunoQuaresma)
- Suppress license expiry warning if a new license covers the gap (#19601, 605dad8) (@deansheather)
- Limit the scope of the template average build time query to the last 100 (#19648, 4fab14b) (@cstyan)
- Expire token for prebuilds user when regenerating session token (#19667, 06cbb28) (@johnstcn)
- Show popup on successful template build (#19674, d415964) (@mtojek)
- Change enqueue error to debug log level (#19686, 04dfda8) (@spikecurtis)
- Pin pg_dump version when generating schema (#19696, 1b4ce09) (@ethanndickson)
- Prevent new workspace page from scrolling past the bottom of the screen (#19705, a78d65c) (@brettkolodny)
- Support path parameters in OAuth2 metadata endpoints (#19729, 2701d55) (@ThomasK33)
- Add xmlns attribute to amazon-q.svg for proper rendering (#19738, d7d69d1) (@app/blink-so)
- Add support for spaces in search & enable searching by display name in templates (#19552, 1677a30) (@rafrdz)
- Prevent unruly stacking contexts from breaking scrolling (#19785, 8e79dbb) (@aslilac)
- Trim whitespace from API tokens (#19814, d238480) (@ThomasK33)
- Scroll item list into view when opening
MultiSelectCombobox
(#19806, 8ff4ba0) (@aslilac) - Correct MCP tools' input schemas (#19825, 18b0aca) (@dannykopping)
- Use filepath to construct mcp test write path (#19808, c31768d) (@code-asher)
- Fix TestCloserStack_Timeout to wait for all asyncClosers (#19837, 4fc0093) (@spikecurtis)
- Update bitnami to use legacy image (#19891, 738dbc6) (@david-fraley)
- Update bitnami image (#19892, 40ffb79) (@david-fraley)
- Add retry logic to OAuth2 metadata tests to avoid race conditions (#19813, 6fb4cc6) (@ThomasK33)
- Make app tabs scrollable (#19881, e7d648f) (@BrunoQuaresma)
- Use unique cookies for workspace proxies (#19930, 42dd544) (@deansheather)
- Force task to be created with latest version (#19923, 5ff503b) (@BrunoQuaresma)
- Handle chat app not found for Tasks (#19947, c2d5143) (@BrunoQuaresma)
- Fix for template dormancy hour/day toggle (#19884, aaa5071) (@rowansmithau)
- Add tasks link to sidebar logo (#20038, b8370c2) (@BrunoQuaresma)
- CLI: Enhance error handling for multiple agents in SSH command (#19943, c8742ba) (@kacpersaw)
- CLI: Only implicitly read from stdin if the directory flag is unset (#19681, f867a9d) (@ethanndickson)
- Server: Filter out non-task workspaces in api.tasksList (#19559, dbc6c98) (@johnstcn)
- Server: Ignore sub agents when converting a task to workspace (#19624, 75b38f1) (@DanielleMaywood)
- Server: Fix logic for reporting prebuilt workspace duration metric (#19641, 353f5de) (@ssncferreira)
- Server: Ensure a newly created task can be fetched (#19670, 12bce12) (@DanielleMaywood)
- Server: Add audit log on creating a new session key (#19672, bd6e91e) (@johnstcn)
- Server: Ensure agent WebSocket conn is cleaned up (#19711, e12b621) (@DanielleMaywood)
- Server: Add blocking GetProvisionerJobByIDWithLock for workspace build cancellation (#19737, 776231d) (@kacpersaw)
- Server: Fix parsing of response format in tasks send (#19960, 653101e) (@mafredri)
- Server: Increase task notification dedupe bypass timestamp to 1 minute (#20043, 6e4d903) (@johnstcn)
- Server: Workaround lack of coder_ai_task resource on stop transition (#19560, bd139f3) (@johnstcn)
- Server: Ensure generated name is within 32 byte limit (#19612, 347ab5b) (@DanielleMaywood)
- Documentation: Add missing div to fix formatting (#20047, fe189b9) (@david-fraley)
- Dashboard: Show available logs consistently on template creation page (#19832, f5fac29) (@aslilac)
- Dashboard: Update
useAgentLogs
to make it more testable and add more tests (#19126, 759746c) (@Parkreiner) - Dashboard: Revamp UI for batch-updating workspaces (#18895, 8a6852f) (@Parkreiner)
- Dashboard: Resolve circular dependency between WorkspacesPage components (#19895, d464360) (@BrunoQuaresma)
Documentation
- Replace offline deployments terminology to air-gapped (#19625, 02ecf32) (@app/blink-so)
- Update Tailscale DERP fleet usage phrasing (#19653, 2030907) (@hugodutka)
- Reorganize Coder Desktop docs (#18871, 8f72538) (@matifali)
- Add guidelines about PR size (#19700, d25ff6c) (@spikecurtis)
- Fix typo in Coder Desktop Guide (#19742, f402ec9) (@david-fraley)
- Update Get Started Page to Include Tasks (#19752, 1e2b66f) (@david-fraley)
- Remove beta references from dynamic parameters (#19714, c9a877a) (@app/blink-so)
- Fix formatting issues (#19831, cda8593) (@david-fraley)
- Update Tasks Template Code (#19770, ea71808) (@david-fraley)
- Clarify offline CLI installation instructions (#19914, d2da835) (@matifali)
- Add next steps to coder desktop guide (#19975, 659f237) (@ethanndickson)
- Add Tasks Core Principles Page (#19878, 95aa16d) (@david-fraley)
- Orient install page towards enterprise and community members (#20041, 7481ada) (@david-fraley)
- update Claude Code version in docs (#20049, bf2cfdd) (@david-fraley)
- Document automatic task naming (#19614, 8d6a322) (@johnstcn)
- Add docs for external workspaces (#19437, 33509f2) (@kacpersaw)
- Add wildcard access url documentation page (#19713, f9f0ebb) (@kacpersaw)
Performance improvements
- Reduce impact of GetPrebuildMetrics on database (#19694, 0ec9df3) (@cstyan)
- Database: Optimize GetAPIKeysLastUsedAfter (#19725, 21402c7) (@mafredri)
- Enterprise: Remove expensive GetWorkspaces query from entitlements (#19747, 3074547) (@kacpersaw)
Chores
- Pin dependencies in Dockerfiles (#19587, 252f7d4) (@sreya)
- Pin devcontainer-cli for .devcontainer config (#19594, 0f1fc88) (@sreya)
- Set more explicit guards for serving bin files (#19597, be40b8c) (@sreya)
- Upgrade our tailscale fork to address CVE (#19634, 71ea919) (@spikecurtis)
- Update coder/preview to v1.0.4 (#19640, f571730) (@Emyrk)
- Refactor instance identity to be a SessionTokenProvider (#19566, 1354d84) (@spikecurtis)
- Refactor CLI agent auth tests as unit tests (#19609, 18945a7) (@spikecurtis)
- Update rego policy to respect user and organisation scopes (#19741, d527f91) (@Emyrk)
- Add backed reader, writer and pipe implementation (#19147, 4c98dec) (@ibetitsmike)
- Add aibridge configs & experiment (#19793, 8487216) (@dannykopping)
- Add aibridge database resources & define RBAC policies (#19796, 422bba4) (@dannykopping)
- Upgrade to react 19 (#19829, 8db82d2) (@aslilac)
- Upgrade Node.js from 20.19.4 to 22.19.0 and update dependencies (#19870, 4d8dc22) (@ThomasK33)
- Add tasks sidebar component (#19926, 7baaa16) (@BrunoQuaresma)
- Add CLI command to list aibridge interceptions (#19935, 65f2895) (@pawbana)
- CLI: Re-order CLI create command (#19658, a2a758d) (@DanielleMaywood)
- Dashboard: Add rustdesk icon (#19888, f39cf30) (@BenraouaneSoufiane)
Compare: v2.26.1...v2.27.0
Container image
docker pull ghcr.io/coder/coder:v2.27.0
Install/upgrade
Refer to our docs to install or upgrade Coder, or use a release asset below.