diff --git a/.icons/rdp.svg b/.icons/rdp.svg
new file mode 100644
index 00000000..a6722326
--- /dev/null
+++ b/.icons/rdp.svg
@@ -0,0 +1,35 @@
+
diff --git a/MAINTAINER.md b/MAINTAINER.md
index 69d1a657..2011b5aa 100644
--- a/MAINTAINER.md
+++ b/MAINTAINER.md
@@ -14,9 +14,7 @@ brew install go
sudo apt install golang-go
```
-## Daily Tasks
-
-### Review PRs
+## Reviewing a PR
Check that PRs have:
@@ -26,7 +24,7 @@ Check that PRs have:
- [ ] Formatted code (`bun run fmt`)
- [ ] Avatar image for new namespaces (`avatar.png` or `avatar.svg` in `.images/`)
-#### Version Guidelines
+### Version Guidelines
When reviewing PRs, ensure the version change follows semantic versioning:
@@ -42,7 +40,7 @@ PRs should clearly indicate the version change (e.g., `v1.2.3 → v1.2.4`).
go build ./cmd/readmevalidation && ./readmevalidation
```
-## Releases
+## Making a Release
### Create Release Tags
@@ -99,5 +97,3 @@ status: "community" # or "partner", "official"
- **Tests fail**: Ensure Docker with `--network=host`, check Terraform syntax
- **Wrong file structure**: Use `./scripts/new_module.sh` for new modules
- **Missing namespace avatar**: Must be `avatar.png` or `avatar.svg` in `.images/` directory
-
-That's it. Keep it simple.
diff --git a/bun.lockb b/bun.lockb
index 7f379c9d..2fde7ba2 100755
Binary files a/bun.lockb and b/bun.lockb differ
diff --git a/package.json b/package.json
index 733230db..1f34a2d2 100644
--- a/package.json
+++ b/package.json
@@ -8,16 +8,16 @@
"update-version": "./update-version.sh"
},
"devDependencies": {
- "@types/bun": "^1.2.9",
- "bun-types": "^1.1.23",
+ "@types/bun": "^1.2.18",
+ "bun-types": "^1.2.18",
"gray-matter": "^4.0.3",
- "marked": "^12.0.2",
- "prettier": "^3.3.3",
- "prettier-plugin-sh": "^0.13.1",
+ "marked": "^16.0.0",
+ "prettier": "^3.6.2",
+ "prettier-plugin-sh": "^0.18.0",
"prettier-plugin-terraform-formatter": "^1.2.1"
},
"peerDependencies": {
- "typescript": "^5.5.4"
+ "typescript": "^5.8.3"
},
"prettier": {
"plugins": [
@@ -25,4 +25,4 @@
"prettier-plugin-terraform-formatter"
]
}
-}
\ No newline at end of file
+}
diff --git a/registry/coder/modules/local-windows-rdp/README.md b/registry/coder/modules/local-windows-rdp/README.md
index 4b447967..4ff726a1 100644
--- a/registry/coder/modules/local-windows-rdp/README.md
+++ b/registry/coder/modules/local-windows-rdp/README.md
@@ -1,24 +1,25 @@
---
-display_name: Windows RDP Desktop
+display_name: RDP Desktop
description: Enable RDP on Windows and add a one-click Coder Desktop button for seamless access
-icon: ../../../../.icons/desktop.svg
+icon: ../../../../.icons/rdp.svg
maintainer_github: coder
verified: true
supported_os: [windows]
-tags: [rdp, windows, desktop, remote]
+tags: [rdp, windows, desktop, local]
---
# Windows RDP Desktop
This module enables Remote Desktop Protocol (RDP) on Windows workspaces and adds a one-click button to launch RDP sessions directly through [Coder Desktop](https://coder.com/docs/user-guides/desktop). It provides a complete, standalone solution for RDP access, eliminating the need for manual configuration or port forwarding through the Coder CLI.
-> **Note**: [Coder Desktop](https://coder.com/docs/user-guides/desktop) is required on client devices to use the Local Windows RDP access feature.
+> [!NOTE]
+> [Coder Desktop](https://coder.com/docs/user-guides/desktop) is required on client devices to use the Local Windows RDP access feature.
```tf
module "rdp_desktop" {
count = data.coder_workspace.me.start_count
source = "registry.coder.com/coder/local-windows-rdp/coder"
- version = "1.0.0"
+ version = "1.0.1"
agent_id = coder_agent.main.id
agent_name = coder_agent.main.name
}
@@ -51,7 +52,7 @@ Uses default credentials (Username: `Administrator`, Password: `coderRDP!`):
module "rdp_desktop" {
count = data.coder_workspace.me.start_count
source = "registry.coder.com/coder/local-windows-rdp/coder"
- version = "1.0.0"
+ version = "1.0.1"
agent_id = coder_agent.main.id
agent_name = coder_agent.main.name
}
@@ -65,7 +66,7 @@ Specify a custom display name for the `coder_app` button:
module "rdp_desktop" {
count = data.coder_workspace.me.start_count
source = "registry.coder.com/coder/local-windows-rdp/coder"
- version = "1.0.0"
+ version = "1.0.1"
agent_id = coder_agent.windows.id
agent_name = "windows"
display_name = "Windows Desktop"
diff --git a/registry/coder/modules/local-windows-rdp/main.test.ts b/registry/coder/modules/local-windows-rdp/main.test.ts
index 75b6dde0..9799b481 100644
--- a/registry/coder/modules/local-windows-rdp/main.test.ts
+++ b/registry/coder/modules/local-windows-rdp/main.test.ts
@@ -73,7 +73,7 @@ describe("local-windows-rdp", async () => {
expect(app).not.toBeNull();
expect(app?.slug).toBe("rdp-desktop");
expect(app?.display_name).toBe("RDP Desktop");
- expect(app?.icon).toBe("/icon/desktop.svg");
+ expect(app?.icon).toBe("/icon/rdp.svg");
expect(app?.external).toBe(true);
// Verify the URI format
@@ -95,7 +95,7 @@ describe("local-windows-rdp", async () => {
// Verify the script was created
expect(script).not.toBeNull();
expect(script?.display_name).toBe("Configure RDP");
- expect(script?.icon).toBe("/icon/desktop.svg");
+ expect(script?.icon).toBe("/icon/rdp.svg");
expect(script?.run_on_start).toBe(true);
expect(script?.run_on_stop).toBe(false);
diff --git a/registry/coder/modules/local-windows-rdp/main.tf b/registry/coder/modules/local-windows-rdp/main.tf
index b5f59445..0999c1ff 100644
--- a/registry/coder/modules/local-windows-rdp/main.tf
+++ b/registry/coder/modules/local-windows-rdp/main.tf
@@ -60,7 +60,7 @@ data "coder_workspace" "me" {}
resource "coder_script" "rdp_setup" {
agent_id = var.agent_id
display_name = "Configure RDP"
- icon = "/icon/desktop.svg"
+ icon = "/icon/rdp.svg"
script = templatefile("${path.module}/configure-rdp.ps1", {
username = var.username
password = var.password
@@ -73,9 +73,8 @@ resource "coder_app" "rdp_desktop" {
slug = "rdp-desktop"
display_name = var.display_name
url = "coder://${local.server_name}/v0/open/ws/${data.coder_workspace.me.name}/agent/${var.agent_name}/rdp?username=${var.username}&password=${var.password}"
- icon = "/icon/desktop.svg"
+ icon = "/icon/rdp.svg"
external = true
order = var.order
group = var.group
}
-
diff --git a/registry/coder/modules/windows-rdp/README.md b/registry/coder/modules/windows-rdp/README.md
index 0899a79a..86248692 100644
--- a/registry/coder/modules/windows-rdp/README.md
+++ b/registry/coder/modules/windows-rdp/README.md
@@ -1,5 +1,5 @@
---
-display_name: Windows RDP
+display_name: RDP Web
description: RDP Server and Web Client, powered by Devolutions Gateway
icon: ../../../../.icons/desktop.svg
maintainer_github: coder
@@ -14,11 +14,10 @@ Enable Remote Desktop + a web based client on Windows workspaces, powered by [de
```tf
# AWS example. See below for examples of using this module with other providers
module "windows_rdp" {
- count = data.coder_workspace.me.start_count
- source = "registry.coder.com/coder/windows-rdp/coder"
- version = "1.2.1"
- agent_id = resource.coder_agent.main.id
- resource_id = resource.aws_instance.dev.id
+ count = data.coder_workspace.me.start_count
+ source = "registry.coder.com/coder/windows-rdp/coder"
+ version = "1.2.2"
+ agent_id = resource.coder_agent.main.id
}
```
@@ -32,11 +31,10 @@ module "windows_rdp" {
```tf
module "windows_rdp" {
- count = data.coder_workspace.me.start_count
- source = "registry.coder.com/coder/windows-rdp/coder"
- version = "1.2.1"
- agent_id = resource.coder_agent.main.id
- resource_id = resource.aws_instance.dev.id
+ count = data.coder_workspace.me.start_count
+ source = "registry.coder.com/coder/windows-rdp/coder"
+ version = "1.2.2"
+ agent_id = resource.coder_agent.main.id
}
```
@@ -44,11 +42,10 @@ module "windows_rdp" {
```tf
module "windows_rdp" {
- count = data.coder_workspace.me.start_count
- source = "registry.coder.com/coder/windows-rdp/coder"
- version = "1.2.1"
- agent_id = resource.coder_agent.main.id
- resource_id = resource.google_compute_instance.dev[0].id
+ count = data.coder_workspace.me.start_count
+ source = "registry.coder.com/coder/windows-rdp/coder"
+ version = "1.2.2"
+ agent_id = resource.coder_agent.main.id
}
```
@@ -58,13 +55,8 @@ module "windows_rdp" {
module "windows_rdp" {
count = data.coder_workspace.me.start_count
source = "registry.coder.com/coder/windows-rdp/coder"
- version = "1.2.1"
+ version = "1.2.2"
agent_id = resource.coder_agent.main.id
- resource_id = resource.aws_instance.dev.id
- devolutions_gateway_version = "2025.1.6" # Specify a specific version
+ devolutions_gateway_version = "2025.2.2" # Specify a specific version
}
```
-
-## Roadmap
-
-- [ ] Test on Microsoft Azure.
diff --git a/registry/coder/modules/windows-rdp/main.test.ts b/registry/coder/modules/windows-rdp/main.test.ts
index 01a7e46d..125b3b3b 100644
--- a/registry/coder/modules/windows-rdp/main.test.ts
+++ b/registry/coder/modules/windows-rdp/main.test.ts
@@ -8,7 +8,6 @@ import {
type TestVariables = Readonly<{
agent_id: string;
- resource_id: string;
share?: string;
admin_username?: string;
admin_password?: string;
@@ -45,13 +44,11 @@ describe("Web RDP", async () => {
await runTerraformInit(import.meta.dir);
testRequiredVariables(import.meta.dir, {
agent_id: "foo",
- resource_id: "bar",
});
it("Has the PowerShell script install Devolutions Gateway", async () => {
const state = await runTerraformApply(import.meta.dir, {
agent_id: "foo",
- resource_id: "bar",
});
const lines = findWindowsRdpScript(state)
@@ -96,7 +93,6 @@ describe("Web RDP", async () => {
import.meta.dir,
{
agent_id: "foo",
- resource_id: "bar",
},
);
@@ -116,7 +112,6 @@ describe("Web RDP", async () => {
import.meta.dir,
{
agent_id: "foo",
- resource_id: "bar",
admin_username: customAdminUsername,
admin_password: customAdminPassword,
},
diff --git a/registry/coder/modules/windows-rdp/main.tf b/registry/coder/modules/windows-rdp/main.tf
index b610c52c..c1b996dd 100644
--- a/registry/coder/modules/windows-rdp/main.tf
+++ b/registry/coder/modules/windows-rdp/main.tf
@@ -4,7 +4,7 @@ terraform {
required_providers {
coder = {
source = "coder/coder"
- version = ">= 0.17"
+ version = ">= 2.5"
}
}
}
@@ -35,11 +35,6 @@ variable "agent_id" {
description = "The ID of a Coder agent."
}
-variable "resource_id" {
- type = string
- description = "The ID of the primary Coder resource (e.g. VM)."
-}
-
variable "admin_username" {
type = string
default = "Administrator"
@@ -53,14 +48,14 @@ variable "admin_password" {
variable "devolutions_gateway_version" {
type = string
- default = "2025.2.1"
+ default = "2025.2.2"
description = "Version of Devolutions Gateway to install. Defaults to the latest available version."
}
resource "coder_script" "windows-rdp" {
agent_id = var.agent_id
display_name = "windows-rdp"
- icon = "/icon/desktop.svg"
+ icon = "/icon/rdp.svg"
script = templatefile("${path.module}/powershell-installation-script.tftpl", {
admin_username = var.admin_username
@@ -101,7 +96,7 @@ resource "coder_app" "rdp-docs" {
agent_id = var.agent_id
display_name = "Local RDP Docs"
slug = "rdp-docs"
- icon = "https://raw.githubusercontent.com/matifali/logos/main/windows.svg"
- url = "https://coder.com/docs/ides/remote-desktops#rdp-desktop"
+ icon = "/icon/windows.svg"
+ url = "https://coder.com/docs/user-guides/workspace-access/remote-desktops#rdp"
external = true
}
diff --git a/registry/coder/templates/digitalocean-linux/README.md b/registry/coder/templates/digitalocean-linux/README.md
index 5e72b0bf..b92c29c4 100644
--- a/registry/coder/templates/digitalocean-linux/README.md
+++ b/registry/coder/templates/digitalocean-linux/README.md
@@ -20,16 +20,13 @@ To deploy workspaces as DigitalOcean Droplets, you'll need:
- DigitalOcean [personal access token (PAT)](https://docs.digitalocean.com/reference/api/create-personal-access-token)
- DigitalOcean project ID (you can get your project information via the `doctl` CLI by running `doctl projects list`)
-
- Remove the following sections from the `main.tf` file if you don't want to
associate your workspaces with a project:
-
- `variable "project_uuid"`
- `resource "digitalocean_project_resources" "project"`
- **Optional:** DigitalOcean SSH key ID (obtain via the `doctl` CLI by running
`doctl compute ssh-key list`)
-
- Note that this is only required for Fedora images to work.
### Authentication
diff --git a/registry/coder/templates/gcp-devcontainer/README.md b/registry/coder/templates/gcp-devcontainer/README.md
index 0be4a786..134640a1 100644
--- a/registry/coder/templates/gcp-devcontainer/README.md
+++ b/registry/coder/templates/gcp-devcontainer/README.md
@@ -34,7 +34,6 @@ a service account:
1. Click **Create and continue**, and choose the following IAM roles to grant to
the service account:
-
- Compute Admin
- Service Account User
diff --git a/registry/coder/templates/gcp-linux/README.md b/registry/coder/templates/gcp-linux/README.md
index 60191040..daeda00b 100644
--- a/registry/coder/templates/gcp-linux/README.md
+++ b/registry/coder/templates/gcp-linux/README.md
@@ -32,7 +32,6 @@ a service account:
1. Click **Create and continue**, and choose the following IAM roles to grant to
the service account:
-
- Compute Admin
- Service Account User
diff --git a/registry/coder/templates/gcp-vm-container/README.md b/registry/coder/templates/gcp-vm-container/README.md
index 83704ee2..d8e9c10e 100644
--- a/registry/coder/templates/gcp-vm-container/README.md
+++ b/registry/coder/templates/gcp-vm-container/README.md
@@ -32,7 +32,6 @@ a service account:
1. Click **Create and continue**, and choose the following IAM roles to grant to
the service account:
-
- Compute Admin
- Service Account User
diff --git a/registry/coder/templates/gcp-windows/README.md b/registry/coder/templates/gcp-windows/README.md
index ac717e41..933f2d6f 100644
--- a/registry/coder/templates/gcp-windows/README.md
+++ b/registry/coder/templates/gcp-windows/README.md
@@ -32,7 +32,6 @@ a service account:
1. Click **Create and continue**, and choose the following IAM roles to grant to
the service account:
-
- Compute Admin
- Service Account User
diff --git a/registry/coder/templates/incus/README.md b/registry/coder/templates/incus/README.md
index def594cd..2a6d54e0 100644
--- a/registry/coder/templates/incus/README.md
+++ b/registry/coder/templates/incus/README.md
@@ -15,7 +15,6 @@ Develop in an Incus System Container and run nested Docker containers using Incu
1. Install [Incus](https://linuxcontainers.org/incus/) on the same machine as Coder.
2. Allow Coder to access the Incus socket.
-
- If you're running Coder as system service, run `sudo usermod -aG incus-admin coder` and restart the Coder service.
- If you're running Coder as a Docker Compose service, get the group ID of the `incus-admin` group by running `getent group incus-admin` and add the following to your `compose.yaml` file: