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.
Networking Performance Improvements
Since version 2.9.0, we've made several improvements to our networking layer, culminating in remarkable performance gains in 2.12.0. You’ll immediately notice faster file transfers to and from your Coder Workspaces, more stable connections with less initial stutter, and a smoother experience when testing resource-heavy applications.
Read more about this on our blog: How We Improved Performance of Userspace TCP Stack in Go by 5x
Features
- Mask
coder login
token to enhance security (#12948, 060f023) (@michaelbrewer) - Use latest gVisor and go 1.22.3 (#13338, b43344b) (@spikecurtis)
- Add support for multiple banners (#13081, d8e0be6) (@aslilac)
- Measure pubsub latencies and expose metrics (#13126, 4671ebb) (@dannykopping)
- Popover paywall in appearance settings (#13217, 7eb228e) (@aslilac)
- Store
coder_workspace_tags
in the database (#13294, b8b80fe) (@mtojek) - Open most recent directory or workspace when launching VS Code (#13326, 8e78b94) (@code-asher)
- Allow workspaces to select a provisioner tag (#13333, c2837a6) (@mtojek)
- Server: Add
times_used
tocoder_app
s in insights API (#13292, a0fce36) (@mafredri) - Server: Add endpoints for editing and deleting organizations (#13287, 3f1e9c0) (@aslilac)
- Provisioner: Pass owner git ssh key via Terraform (#13366, cca3cb1) (@johnstcn)
- Dashboard: Open README links in new tab (#13264, a5a6494) (@BrunoQuaresma)
- Dashboard: Show number of times
coder_app
is opened (#13335, f27f5c0) (@BrunoQuaresma)
- Dashboard: Show "update and start" button when updates are required by the template (#13334, 78deaba) (@BrunoQuaresma)
Bug fixes
- Install openrc service on alpine (#12294) (#12870, b20c63c) (@recanman)
- Make handleManifest always signal dependents (#13141, d51c691) (@spikecurtis)
- Use a native websocket.NetConn for agent RPC client (#13142, e76b595) (@spikecurtis)
- Prevent extending if template disallows (#13182, 24448e7) (@BrunoQuaresma)
- Skip license review for dependabot (#13239, 82c1562) (@sreya)
- Fix nix flake sed command (#13243, ee817b4) (@sreya)
- Properly convert max port share level for oss (#13261, ebee928) (@f0ssel)
- Update tests for useClipboard to minimize risks of flakes (#13250, 63e0685) (@Parkreiner)
- Wait for PGCoordinator to clean up db state (#13351, a0962ba) (@spikecurtis)
- Respect
--disable-direct-connections
on coder speedtest (#13377, a551aa5) (@spikecurtis) - Stop logging workspace agent unless verbose (#13378, 84b3121) (@spikecurtis)
- Block writes from gVisor to tailscale instead of dropping (#13389, b7edf5b) (@spikecurtis)
- Increses DERP send queue length to 512 for increased throughput (#13406, 5aea803) (@spikecurtis)
- Return error if agent init script fails to download valid binary (#13280, 59ab505) (@dannykopping)
- Update install.sh to remove dead doc link (#13308, bee4ece) (@Kira-Pilot)
- Update
DeleteWorkspaceOptions
to pick properties correctly (#13423, 19530c6) (@Parkreiner) - CLI: Skip optional coder_external_auth (#13368, bc8126f) (@michaelbrewer)
- Installer: Install from github when using
--stable
on macOS (#13216, e14f8fb) (@aslilac) - Dashboard: Fix group badge visual (#13263, f149279) (@BrunoQuaresma)
- Dashboard: Fix floating number on duration fields (#13209, 4af0f09) (@BrunoQuaresma)
- Dashboard: Correct the size and position of the timeline trail in safari (#13348, d748c6d) (@aslilac)
Documentation
- Show the proper Redirect URI for Gitea (#13162, 6f5c183) (@Idleite)
- Bump mainline version to v2.11.0 (#13202, c73d5a2) (@stirby)
- Describe AWS hard NAT (#13205, 1832a75) (@spikecurtis)
- Bump k8s install version (#13302, 92c5dfa) (@coadler)
- Describe workspace tags (#13352, 98fa823) (@mtojek)
- docs(admin/external-auth.md): add JFrog Artifactory guide (#13166, 7c3ec51) (@matifali)
- docs(ides): document connection via JetBrains Fleet (#13179, 6790993) (@matifali)
Code refactoring
- Improve test isolation for Axios API logic (#13125, f13b1c9) (@Parkreiner)
- Dashboard: Refactor the workspace settings form (#13198, 35cb572) (@BrunoQuaresma)
- Dashboard: Hide unavailable usage information (#13341, 390ff9a) (@BrunoQuaresma)
Tests
Continuous integration
- Sync terraform version (#13187, 05facc9) (@matifali)
- Only send docs-check notifications on schedule (#13191, b56c9c4) (@matifali)
- Fix test-migrations target when main branch is not present locally (#13306, f23d480) (@johnstcn)
- Re-pin
actions/dependency-review-action
back to a release (#13309, f176ff5) (@coadler) - Re-enable test migrations in release workflow (#13307, 45b45f1) (@johnstcn)
- Build base image on PRs (#13409, 6730c24) (@matifali)
- Fix syntax issue in docker-base.yaml (#13412, 7a7bef0) (@matifali)
Chores
- Fix build ci (#13164, 886a97b) (@coadler)
- Add EasyNATDERP tailnet integration test (#13138, d956af0) (@deansheather)
- Remove superfluous context.Canceled handling (#13140, 2efb46a) (@spikecurtis)
- Add build targets to nix flake (#13186, 3e31187) (@kylecarbs)
- Add DERP websocket integration tests (#13168, 5e8f97d) (@deansheather)
- Implement easy NAT direct integration test (#13169, 72f2efe) (@deansheather)
- Add tailnet integration test CI job (#13181, 677be9a) (@deansheather)
- Add nginx topology to tailnet tests (#13188, 421c0d1) (@coadler)
- Enable terraform provisioners in e2e by default (#13134, a4bd50c) (@Emyrk)
- Prevent commit signing in tests (#13222, 989575c) (@dannykopping)
- Remove dependabot config for dogfood template (#13230, 6182ee9) (@matifali)
- Add multi-org experiment for UI view toggling (#13260, 9ced001) (@Emyrk)
- Add setting to enable multi-organization ui (#13266, 2b29559) (@aslilac)
- Add workspace activity linter (#13273, 721ab2a) (@f0ssel)
- Expose all organization ids from AuthContext (#13268, a8a0be9) (@aslilac)
- Push rbac actions to policy package (#13274, cb6b5e8) (@Emyrk)
- Remove rbac psuedo resources, add custom verbs (#13276, 1f5788f) (@Emyrk)
- Verify validity of built in rbac roles (#13296, 194be12) (@Emyrk)
- Implement databased backend for custom roles (#13295, cf91eff) (@Emyrk)
- Fix
TestMeasureLatency/MeasureLatencyRecvTimeout
flake (#13301, 85de0e9) (@coadler) - Implement api for creating custom roles (#13298, ad8c314) (@Emyrk)
- Update git -> 2.43.4 (#13299, 80538c0) (@coadler)
- Update Terraform -> 1.8.4 (#13429, b723da9) (@coadler)
- Add unique org name constraint to db (#13311, a63d427) (@aslilac)
- Fix tailnet integration test flake (#13313, 2732094) (@deansheather)
- Expose formatExamples enterprise commands (#13304, 0a86d6d) (@Emyrk)
- Update kubernetes.md, bumping stable from v2.9.4 to v2.10.2 (#13275, 7ea4a89) (@jmshoffs0812)
- Generate terraform testdata with matching terraform version (#13343, 3364abe) (@kylecarbs)
- Update scale docs to include guidelines for wsproxies (#13350, c67eba1) (@johnstcn)
- Include custom roles in list org roles (#13336, 1b4ca00) (@Emyrk)
- Add easy NAT integration tests part 2 (#13312, e5bb0a7) (@deansheather)
- Skip Azure
TestExpiresSoon
(#13385, 79d73f7) (@kylecarbs) - Add refresh token and error to user's external auth page (#13380, 6293c33) (@Emyrk)
- Hard NAT <-> easy NAT integration test (#13314, 9299e9f) (@deansheather)
- Upgrade
go.uber.org/goleak
(#13388, 02c3686) (@coadler) - Move stat reporting into workspacestats package (#13386, 5789ea5) (@f0ssel)
- Update deprecated usage of coder_workspace.owner* fields (#13390, e176867) (@johnstcn)
- Remove git pinning (#13414, 7569ccc) (@dannykopping)
- Move template meta last_used_at update to workspacestats (#13415, de8149f) (@f0ssel)
- Rename notification banners to announcement banners (#13419, b248f12) (@aslilac)
- Documentation: Replace git-auth with external-auth (#13167, 3e77f5b) (@matifali)
- Documentation: Update k8s mainline version (#13346, a40e954) (@coadler)
- Documentation: Update github app permission to read org members (#13362, 47f8f5d) (@matifali)
- Documentation: Add recommendations for dependency management (#13400, 7cc96f5) (@johnstcn)
- chore(dogfood): bump module versions to latest (#13246, 7358c1b) (@matifali)
- chore(README): add hiring link (#13345, ed6ee9a) (@ammario)
- chore(scripts): fix stable release promote script (#13204, f66d044) (@mafredri)
- chore(scripts): remove
gh_auth
fromrelease.sh
(#13347, fa9edc1) (@coadler) - chore(scripts): handle renamed cherry-pick commits in release script (#13395, 374f0a0) (@mafredri)
- chore(scripts): push version bump pr branch in release script (#13397, 9ae825e) (@mafredri)
- chore(scripts): add custom gh auth to release script (#13396, 5fb2317) (@mafredri)
- chore(scripts): add safety check for difference between dry run release notes (#13398, 9eb797e) (@mafredri)
- chore(scripts): fix expression interpreted as exit code on some Bash versions (#13417, 4758952) (@mafredri)
- Dashboard: Fix portforward issue with vite (#13262, 8412450) (@BrunoQuaresma)
- Fix unbound variable in tag_version.sh (#13428, ba0bf43) (@mafredri)
Other changes
- Added documentation for using JetBrains Fleet (#13363, ec78f54) (@stirby)
- Fixed sharable port + coder_app interaction (#13285, 114fb31) (@stirby)
- Update manifest.json (#13391, b69f635) (@mattvollmer)
- Upgrade to git v2.45.1 to fix alpine 3.20 builds (#13411, a1671a6) (@dannykopping)
Compare: v2.11.2...v2.12.0
Container image
docker pull ghcr.io/coder/coder:v2.12.0
Install/upgrade
Refer to our docs to install or upgrade Coder, or use a release asset below.