## Changelog ### BREAKING CHANGES - Remove prometheus-http port declaration from coderd service spec (#12214) (@johnstcn) - Provisioners: only allow untagged provisioners to pick up untagged jobs (#12269) (@johnstcn) ### Features #### Templates - `coder_script` can to add binaries and files to `PATH` with a bin directory (#12205) (@mafredri) - Add support for marking external auth providers as optional (#12021) (#12251) (@aslilac) > This is done via a [Terraform property](https://registry.terraform.io/providers/coder/coder/latest/docs/data-sources/external_auth#optional) in the template. - Support custom order of agent metadata (#12066) (@mtojek) - Support `order` property of `coder_app` resource (#12077) (@mtojek) - Support `order` property of `coder_agent` (#12121) (@mtojek) - Support custom validation errors for number-typed parameters (#12224) (@mtojek) #### CLI - Support `--header` and `--header-command` in config-ssh (#10413) (@JoshVee) - Make URL optional for `coder login` (#10925) (#12466) (@elasticspoon) #### Dashboard - Add activity status and autostop reason to workspace overview (#11987) (@aslilac) ![Autostop Cause Display](https://raw.githubusercontent.com/coder/coder/main/docs/changelogs/images/autostop-visibility.png) - Support any file extension in the template editor (#12000) (@BrunoQuaresma) - Support creating templates from scratch (#12082) (@BrunoQuaresma) - Show previous agent scripts logs (#12233) (@BrunoQuaresma) - Show build logs on template creation (#12271) (@BrunoQuaresma) - Support zip archives for template files (#12323) (@BrunoQuaresma) - Show client errors in DERP Region health page (#12318) (@BrunoQuaresma) - Display error messages on ws and access url health pages (#12430) (@BrunoQuaresma) - Warn users if they leave the template editor without publishing (#12406) (@BrunoQuaresma) - Add Confluence, NET, and MS Teams icons as static files (#12500) (#12512) (#12513) (@michaelbrewer) - Render markdown in template update messages (#12273) (@aslilac) #### Backend - Expose DERP server debug metrics (#12135) (@spikecurtis) - Add logSender for sending logs on agent v2 API (#12046) (@spikecurtis) - Clean up organization handling (#12142) (#12143) (#12146) (@Emyrk) - Change agent to use v2 API for reporting stats (#12024) (@spikecurtis) - Send log limit exceeded in response, not error (#12078) (@spikecurtis) - Add template activity_bump property (#11734) (@deansheather) ![Activity Bump](https://raw.githubusercontent.com/coder/coder/main/docs/changelogs/images/activity-bump.png) - Add WaitUntilEmpty to LogSender (#12159) (@spikecurtis) - Disable directory listings for static files (#12229) (@Emyrk) - Switch agent to use v2 API for sending logs (#12068) (@spikecurtis) - Use v2 API for agent lifecycle updates (#12278) (@spikecurtis) - Use v2 API for agent metadata updates (#12281) (@spikecurtis) - Show tailnet peer diagnostics after coder ping (#12314) (@spikecurtis) - Add derp mesh health checking in workspace proxies (#12222) (@deansheather) - Make agent stats' cardinality configurable (#12468) (@dannykopping) - Server: Set sane default for gitea external auth (#12306) (@Emyrk) - Server: Enable Prometheus endpoint for external provisioner (#12320) (@mtojek) - Implement provisioner auth middleware and proper org params (#12330) (@Emyrk) ### Experimental features The following features are hidden or disabled by default as we don't guarantee stability. Learn more about experiments in [our documentation](https://coder.com/docs/install/releases/feature-stages#early-access-features). - The `coder support` command generates a ZIP with deployment information, agent logs, and server config values for troubleshooting purposes. We will publish documentation on how it works (and un-hide the feature) in a future release (#12328) (@johnstcn) - Port sharing: Allow users to share ports running in their workspace with other Coder users (#11939) (#12119) (#12383) (@deansheather) (@f0ssel) ![Port Sharing](https://raw.githubusercontent.com/coder/coder/main/docs/changelogs/images/sharable-ports.png) ### Bug fixes - SSH: Allow scp to exit with zero status (#12028) (@mafredri) - Web Terminal: Fix screen startup speed by disabling messages (#12190) (@mafredri) - CLI: Avoid panic when external auth name isn't provided (#12177) (@coadler) - CLI: Do not screenshot with `coder scaletest` if verbose=false (#12317) (@johnstcn) - CLI: Generate correctly named file in DumpHandler (#12409) (@mafredri) - CLI: Don't error on required flags with `--help` (#12181) (@coadler) - Server: Do not redirect /healthz (#12080) (@johnstcn) - SSH: Prevent reads/writes to stdin/stdout in stdio mode (#12045) (@mafredri) - Server: Mark provisioner daemon psk as secret (#12322) (@johnstcn) - Server: Use database.IsQueryCanceledError instead of xerrors.Is(err, context.Canceled) (#12325) (@johnstcn) - Server: Pass block endpoints into servertailnet (#12149) (@coadler) - Server: Prevent nil err deref (#12475) (@johnstcn) - Server: Correctly handle tar dir entries with missing path separator (#12479) (@johnstcn) - codersdk: Correctly log coordination error (#12176) (@coadler) - Server: Add ability to synchronize with startup script via done file (#12058) (@mafredri) - Server: Check provisionerd API version on connection (#12191) (@johnstcn) - Dashboard: Print API backend calls for e2e tests (#12051) (@mtojek) - Dashboard: Enable submit when auto start and stop are both disabled (#12055) (@BrunoQuaresma) - Dashboard: Fix infinite loading when template has no previous version (#12059) (@BrunoQuaresma) - Dashboard: Ignore fileInfo if file is missing (#12154) (@mtojek) - Dashboard: Match activity bump text with template settings (#12170) (@BrunoQuaresma) - Dashboard: Fix language detection for Dockerfile (#12188) (@BrunoQuaresma) - Dashboard: Fix parameters field size (#12231) (@BrunoQuaresma) - Dashboard: Fix bottom overflow on web terminal (#12228) (@BrunoQuaresma) - Dashboard: Fix error when typing long number on ttl (#12249) (@BrunoQuaresma) - Dashboard: Fix form layout for tablet viewports (#12369) (@BrunoQuaresma) - Dashboard: Retry and debug passing build parameters options (#12384) (@BrunoQuaresma) - Dashboard: Fix terminal size when displaying alerts (#12444) (@BrunoQuaresma) - Dashboard: TemplateVersionEditor: allow triggering builds on non-dirtied template version (#12547) (@johnstcn) - Dashboard: Warn when user leaves template editor with un-built changes (#12548) (@johnstcn) - Tailnet: Enforce valid agent and client addresses (#12197) (@coadler) - Server: Copy app ID in healthcheck (#12087) (@deansheather) - Dashboard: Allow access to unhealthy/initializing apps (#12086) (@deansheather) - Server: Do not query user_link for deleted accounts (#12112) (@Emyrk) - Tailnet: Set node callback each time we reinit the coordinator in servertailnet (#12140) (@spikecurtis) - Tailnet: Change servertailnet to register the DERP dialer before setting DERP map (#12137) (@spikecurtis) - Server: Fix pgcoord to delete coordinator row last (#12155) (@spikecurtis) - Dashboard: Improve clipboard support on HTTP connections and older browsers (#12178) (@Parkreiner) - Server: Add postgres triggers to remove deleted users from user_links (#12117) (@Emyrk) - Dashboard: Add tests and improve accessibility for useClickable (#12218) (@Parkreiner) - Server: Ignore surrounding whitespace for cli config (#12250) (@Emyrk) - Tailnet: Stop waiting for Agent in a goroutine in ssh test (#12268) (@spikecurtis) - d4d8424ce fix: fix GetOrganizationsByUserID error when multiple organizations exist (#12257) (@Emyrk) - Server: Refresh entitlements after creating first user (#12285) (@mtojek) - Server: Use default org over index [0] for new scim (#12284) (@Emyrk) - Server: Avoid race between replicas on start (#12344) (@deansheather) - Server: Use flag to enable Prometheus (#12345) (@mtojek) - Dashboard: Increase license key rows (#12352) (@kylecarbs) - Server: External auth device flow, check both queries for errors (#12367) (@Emyrk) - Dashboard: Add service banner to workspace page (#12381) (@michaelbrewer) - SDK: Always return count of workspaces (#12407) (@mtojek) - SDK: Improve pagination parser (#12422) (@mtojek) - SDK: Use timestamptz instead of timestamp (#12425) (@mtojek) - Dashboard: Ensure auto-workspace creation waits until all parameters are ready (#12419) (@Parkreiner) - CLI: Ensure ssh cleanup happens on cmd error (@spikecurtis) - Dashboard: Display tooltip when selection is disabled (#12439) (@f0ssel) - Server: Add `--block-direct-connections` to wsproxies (#12182) (@coadler) - Examples: Fix directory for devcontainer-docker template (#12453) (@alv67) - Dashboard: Make public menu item selectable (#12484) (@f0ssel) - Server: Stop holding Pubsub mutex while calling pq.Listener (#12518) (@spikecurtis) ### Documentation - Fix /audit & /insights params (#12043) (@ericpaulsen) - Fix JetBrains gateway reconnect faq (#12073) (@ericpaulsen) - Update modules documentation (#11911) (@matifali) - Add kubevirt coder template in list of community templates (#12113) (@sulo1337) - Describe resource ordering in UI (#12185) (@mtojek) - Simplify docker installation docs (#12187) (@matifali) - Fix header font (#12193) (@mtojek) - Document Terraform variables (#12270) (@mtojek) - Add steps for postgres server verification (#12072) (@ericpaulsen) - Add gitlab self-managed example (#12295) (@michaelbrewer) - Add k8s security reference (#12334) (@ericpaulsen) - Simplify install docs (#11946) (@bpmct) Compare: [`v2.8.5...v2.9.0`](https://github.com/coder/coder/compare/v2.8.5...v2.9.0) ## Container image - `docker pull ghcr.io/coder/coder:v2.9.0` ## Install/upgrade Refer to our docs to [install](https://coder.com/docs/install) or [upgrade](https://coder.com/docs/admin/upgrade) Coder, or use a release asset below.