diff --git a/.icons/positron.svg b/.icons/positron.svg
new file mode 100644
index 000000000..590372e49
--- /dev/null
+++ b/.icons/positron.svg
@@ -0,0 +1,12 @@
+
+
diff --git a/registry/coder/.images/positron.svg b/registry/coder/.images/positron.svg
new file mode 100644
index 000000000..590372e49
--- /dev/null
+++ b/registry/coder/.images/positron.svg
@@ -0,0 +1,12 @@
+
+
diff --git a/registry/cytoshahar/.images/avatar.jpeg b/registry/cytoshahar/.images/avatar.jpeg
new file mode 100644
index 000000000..3e82d7637
Binary files /dev/null and b/registry/cytoshahar/.images/avatar.jpeg differ
diff --git a/registry/cytoshahar/README.md b/registry/cytoshahar/README.md
new file mode 100644
index 000000000..14d45ea63
--- /dev/null
+++ b/registry/cytoshahar/README.md
@@ -0,0 +1,12 @@
+---
+display_name: "CytoShahar"
+bio: "Data engineer by day, maker by night"
+avatar: "./.images/avatar.jpeg"
+github: "https://github.com/CytoShahar"
+linkedin: "https://www.linkedin.com/in/shaharzrihen" # Optional
+status: "community"
+---
+
+# Shahar Zrihen
+
+Data engineer by day, maker by night
diff --git a/registry/cytoshahar/modules/positron/README.md b/registry/cytoshahar/modules/positron/README.md
new file mode 100644
index 000000000..507dcf166
--- /dev/null
+++ b/registry/cytoshahar/modules/positron/README.md
@@ -0,0 +1,38 @@
+---
+display_name: Positron Desktop
+description: Add a one-click button to launch Positron Desktop
+icon: ../../../../.icons/positron.svg
+verified: true
+tags: [ide, positron]
+---
+
+# Positron Desktop
+
+Add a button to open any workspace with a single click.
+
+Uses the [Coder Remote VS Code Extension](https://github.com/coder/vscode-coder).
+
+```tf
+module "positron" {
+ count = data.coder_workspace.me.start_count
+ source = "registry.coder.com/cytoshahar/positron/coder"
+ version = "1.0.0"
+ agent_id = coder_agent.example.id
+}
+```
+
+## Examples
+
+### Open in a specific directory
+
+```tf
+module "positron" {
+ count = data.coder_workspace.me.start_count
+ source = "registry.coder.com/cytoshahar/positron/coder"
+ version = "1.0.0"
+ agent_id = coder_agent.example.id
+ folder = "/home/coder/project"
+}
+```
+
+Based on the [Coder VS Code Desktop Module](https://github.com/coder/registry/tree/main/registry/coder/modules/vscode-desktop)
diff --git a/registry/cytoshahar/modules/positron/main.test.ts b/registry/cytoshahar/modules/positron/main.test.ts
new file mode 100644
index 000000000..8017b5951
--- /dev/null
+++ b/registry/cytoshahar/modules/positron/main.test.ts
@@ -0,0 +1,88 @@
+import { describe, expect, it } from "bun:test";
+import {
+ runTerraformApply,
+ runTerraformInit,
+ testRequiredVariables,
+} from "~test";
+
+describe("positron-desktop", async () => {
+ await runTerraformInit(import.meta.dir);
+
+ testRequiredVariables(import.meta.dir, {
+ agent_id: "foo",
+ });
+
+ it("default output", async () => {
+ const state = await runTerraformApply(import.meta.dir, {
+ agent_id: "foo",
+ });
+ expect(state.outputs.positron_url.value).toBe(
+ "positron://coder.coder-remote/open?owner=default&workspace=default&url=https://mydeployment.coder.com&token=$SESSION_TOKEN",
+ );
+
+ const coder_app = state.resources.find(
+ (res) => res.type === "coder_app" && res.name === "positron",
+ );
+
+ expect(coder_app).not.toBeNull();
+ expect(coder_app?.instances.length).toBe(1);
+ expect(coder_app?.instances[0].attributes.order).toBeNull();
+ });
+
+ it("adds folder", async () => {
+ const state = await runTerraformApply(import.meta.dir, {
+ agent_id: "foo",
+ folder: "/foo/bar",
+ });
+ expect(state.outputs.positron_url.value).toBe(
+ "positron://coder.coder-remote/open?owner=default&workspace=default&folder=/foo/bar&url=https://mydeployment.coder.com&token=$SESSION_TOKEN",
+ );
+ });
+
+ it("adds folder and open_recent", async () => {
+ const state = await runTerraformApply(import.meta.dir, {
+ agent_id: "foo",
+ folder: "/foo/bar",
+ open_recent: "true",
+ });
+ expect(state.outputs.positron_url.value).toBe(
+ "positron://coder.coder-remote/open?owner=default&workspace=default&folder=/foo/bar&openRecent&url=https://mydeployment.coder.com&token=$SESSION_TOKEN",
+ );
+ });
+
+ it("adds folder but not open_recent", async () => {
+ const state = await runTerraformApply(import.meta.dir, {
+ agent_id: "foo",
+ folder: "/foo/bar",
+ openRecent: "false",
+ });
+ expect(state.outputs.positron_url.value).toBe(
+ "positron://coder.coder-remote/open?owner=default&workspace=default&folder=/foo/bar&url=https://mydeployment.coder.com&token=$SESSION_TOKEN",
+ );
+ });
+
+ it("adds open_recent", async () => {
+ const state = await runTerraformApply(import.meta.dir, {
+ agent_id: "foo",
+ open_recent: "true",
+ });
+ expect(state.outputs.positron_url.value).toBe(
+ "positron://coder.coder-remote/open?owner=default&workspace=default&openRecent&url=https://mydeployment.coder.com&token=$SESSION_TOKEN",
+ );
+ });
+
+ it("expect order to be set", async () => {
+ const state = await runTerraformApply(import.meta.dir, {
+ agent_id: "foo",
+ order: "22",
+ });
+
+ const coder_app = state.resources.find(
+ (res) => res.type === "coder_app" && res.name === "positron",
+ );
+
+ expect(coder_app).not.toBeNull();
+ expect(coder_app?.instances.length).toBe(1);
+ expect(coder_app?.instances[0].attributes.order).toBe(22);
+ });
+});
diff --git a/registry/cytoshahar/modules/positron/main.tf b/registry/cytoshahar/modules/positron/main.tf
new file mode 100644
index 000000000..c78265500
--- /dev/null
+++ b/registry/cytoshahar/modules/positron/main.tf
@@ -0,0 +1,74 @@
+terraform {
+ required_version = ">= 1.0"
+
+ required_providers {
+ coder = {
+ source = "coder/coder"
+ version = ">= 2.5"
+ }
+ }
+}
+
+locals {
+ icon_url = "/icon/positron.svg"
+}
+
+variable "agent_id" {
+ type = string
+ description = "The ID of a Coder agent."
+}
+
+variable "folder" {
+ type = string
+ description = "The folder to open in Positron."
+ default = ""
+}
+
+variable "open_recent" {
+ type = bool
+ description = "Open the most recent workspace or folder. Falls back to the folder if there is no recent workspace or folder to open."
+ default = false
+}
+
+variable "order" {
+ type = number
+ description = "The order determines the position of app in the UI presentation. The lowest order is shown first and apps with equal order are sorted by name (ascending order)."
+ default = null
+}
+
+variable "group" {
+ type = string
+ description = "The name of a group that this app belongs to."
+ default = null
+}
+
+data "coder_workspace" "me" {}
+data "coder_workspace_owner" "me" {}
+
+resource "coder_app" "positron" {
+ agent_id = var.agent_id
+ external = true
+ icon = local.icon_url
+ slug = "positron"
+ display_name = "Positron Desktop"
+ order = var.order
+ group = var.group
+
+ url = join("", [
+ "positron://coder.coder-remote/open",
+ "?owner=",
+ data.coder_workspace_owner.me.name,
+ "&workspace=",
+ data.coder_workspace.me.name,
+ var.folder != "" ? join("", ["&folder=", var.folder]) : "",
+ var.open_recent ? "&openRecent" : "",
+ "&url=",
+ data.coder_workspace.me.access_url,
+ "&token=$SESSION_TOKEN",
+ ])
+}
+
+output "positron_url" {
+ value = coder_app.positron.url
+ description = "Positron Desktop URL."
+}