overmux 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +7 -0
  3. package/dist/auth/.vite/manifest.json +11 -0
  4. package/dist/auth/assets/index-Bx8JhwVi.css +1 -0
  5. package/dist/auth/assets/index-CHIE7qYj.js +72 -0
  6. package/dist/auth/index.html +14 -0
  7. package/dist/bin.js +4504 -7870
  8. package/dist/bin.js.map +1 -0
  9. package/dist/docs/000-index.md +21 -0
  10. package/dist/docs/100-introduction/100-what-is-overmux.md +7 -0
  11. package/dist/docs/100-introduction/200-how-overmux-works.md +7 -0
  12. package/dist/docs/100-introduction/300-why-overmux.md +22 -0
  13. package/dist/docs/200-getting-started/100-install-and-run-overmux.md +51 -0
  14. package/dist/docs/200-getting-started/200-install-overmux-desktop.md +41 -0
  15. package/dist/docs/200-getting-started/300-install-overmux-pwa.mdx +92 -0
  16. package/dist/docs/200-getting-started/400-secure-with-https/100-choose-an-https-setup.md +14 -0
  17. package/dist/docs/200-getting-started/400-secure-with-https/200-tailscale-serve.md +44 -0
  18. package/dist/docs/200-getting-started/400-secure-with-https/300-cloudflare-tunnel.md +59 -0
  19. package/dist/docs/200-getting-started/400-secure-with-https/400-self-hosted-reverse-proxy.md +32 -0
  20. package/dist/docs/300-fundamentals/100-project-structure.md +3 -0
  21. package/dist/docs/300-fundamentals/200-configuration.md +3 -0
  22. package/dist/docs/300-fundamentals/300-theming.md +3 -0
  23. package/dist/docs/300-fundamentals/400-server.md +3 -0
  24. package/dist/docs/300-fundamentals/500-client.md +3 -0
  25. package/dist/docs/300-fundamentals/600-operations.md +3 -0
  26. package/dist/docs/300-fundamentals/700-resources.md +3 -0
  27. package/dist/docs/300-fundamentals/800-streams.md +3 -0
  28. package/dist/docs/300-fundamentals/900-authentication-and-security.md +3 -0
  29. package/dist/docs/400-reference/100-configuration.md +3 -0
  30. package/dist/docs/400-reference/200-server-api.md +3 -0
  31. package/dist/docs/400-reference/300-client-api.md +3 -0
  32. package/dist/docs/400-reference/400-cli/100-serve.md +33 -0
  33. package/dist/docs/400-reference/400-cli/200-auth.md +52 -0
  34. package/dist/docs/400-reference/400-cli/300-call.md +28 -0
  35. package/dist/docs/400-reference/400-cli/400-check.md +20 -0
  36. package/dist/docs/400-reference/400-cli/500-ai-context.md +102 -0
  37. package/dist/docs/400-reference/400-cli/600-docs.md +23 -0
  38. package/dist/docs/400-reference/400-cli/700-desktop.md +35 -0
  39. package/dist/docs/500-hosted-pages.md +31 -0
  40. package/dist/exports/client.d.ts +237 -0
  41. package/dist/exports/client.d.ts.map +1 -0
  42. package/dist/exports/client.js +1643 -0
  43. package/dist/exports/client.js.map +1 -0
  44. package/dist/exports/index-D3_Dpy_T.d.ts +155 -0
  45. package/dist/exports/index-D3_Dpy_T.d.ts.map +1 -0
  46. package/dist/exports/index.d.ts +2 -0
  47. package/dist/exports/index.js +49 -0
  48. package/dist/exports/index.js.map +1 -0
  49. package/dist/exports/notifications-kDp16bU_.js +56 -0
  50. package/dist/exports/notifications-kDp16bU_.js.map +1 -0
  51. package/dist/exports/server.d.ts +63 -0
  52. package/dist/exports/server.d.ts.map +1 -0
  53. package/dist/exports/server.js +1120 -0
  54. package/dist/exports/server.js.map +1 -0
  55. package/dist/exports/style.css +368 -0
  56. package/dist/internal/server/coordinator/server-child.d.ts +1 -0
  57. package/dist/internal/server/coordinator/server-child.js +3299 -0
  58. package/dist/internal/server/coordinator/server-child.js.map +1 -0
  59. package/docs/000-index.md +21 -0
  60. package/docs/100-introduction/100-what-is-overmux.md +7 -0
  61. package/docs/100-introduction/200-how-overmux-works.md +7 -0
  62. package/docs/100-introduction/300-why-overmux.md +22 -0
  63. package/docs/200-getting-started/100-install-and-run-overmux.md +51 -0
  64. package/docs/200-getting-started/200-install-overmux-desktop.md +41 -0
  65. package/docs/200-getting-started/300-install-overmux-pwa.mdx +92 -0
  66. package/docs/200-getting-started/400-secure-with-https/100-choose-an-https-setup.md +14 -0
  67. package/docs/200-getting-started/400-secure-with-https/200-tailscale-serve.md +44 -0
  68. package/docs/200-getting-started/400-secure-with-https/300-cloudflare-tunnel.md +59 -0
  69. package/docs/200-getting-started/400-secure-with-https/400-self-hosted-reverse-proxy.md +32 -0
  70. package/docs/300-fundamentals/100-project-structure.md +3 -0
  71. package/docs/300-fundamentals/200-configuration.md +3 -0
  72. package/docs/300-fundamentals/300-theming.md +3 -0
  73. package/docs/300-fundamentals/400-server.md +3 -0
  74. package/docs/300-fundamentals/500-client.md +3 -0
  75. package/docs/300-fundamentals/600-operations.md +3 -0
  76. package/docs/300-fundamentals/700-resources.md +3 -0
  77. package/docs/300-fundamentals/800-streams.md +3 -0
  78. package/docs/300-fundamentals/900-authentication-and-security.md +3 -0
  79. package/docs/400-reference/100-configuration.md +3 -0
  80. package/docs/400-reference/200-server-api.md +3 -0
  81. package/docs/400-reference/300-client-api.md +3 -0
  82. package/docs/400-reference/400-cli/100-serve.md +33 -0
  83. package/docs/400-reference/400-cli/200-auth.md +52 -0
  84. package/docs/400-reference/400-cli/300-call.md +28 -0
  85. package/docs/400-reference/400-cli/400-check.md +20 -0
  86. package/docs/400-reference/400-cli/500-ai-context.md +102 -0
  87. package/docs/400-reference/400-cli/600-docs.md +23 -0
  88. package/docs/400-reference/400-cli/700-desktop.md +35 -0
  89. package/docs/500-hosted-pages.md +31 -0
  90. package/package.json +59 -18
  91. package/src/internal/cli/app.ts +72 -0
  92. package/src/internal/cli/bin.ts +3 -0
  93. package/src/internal/cli/commands/ai.ts +44 -0
  94. package/src/internal/cli/commands/auth.ts +195 -0
  95. package/src/internal/cli/commands/call.ts +128 -0
  96. package/src/internal/cli/commands/check.ts +48 -0
  97. package/src/internal/cli/commands/desktop-installer.ts +446 -0
  98. package/src/internal/cli/commands/desktop-release.ts +190 -0
  99. package/src/internal/cli/commands/desktop.ts +47 -0
  100. package/src/internal/cli/commands/docs.ts +34 -0
  101. package/src/internal/cli/commands/serve.ts +322 -0
  102. package/src/internal/cli/environment.ts +54 -0
  103. package/src/internal/cli/login.ts +46 -0
  104. package/src/internal/cli/managed-vite.ts +267 -0
  105. package/src/internal/cli/parse-port.ts +8 -0
  106. package/src/internal/client/auth/auth-api.ts +53 -0
  107. package/src/internal/client/auth/auth-shell.css +74 -0
  108. package/src/internal/client/auth/auth-shell.tsx +167 -0
  109. package/src/internal/client/auth/entry.tsx +26 -0
  110. package/src/internal/client/auth/index.html +13 -0
  111. package/src/internal/client/background-notifications.ts +194 -0
  112. package/src/internal/client/browser-api.ts +97 -0
  113. package/src/internal/client/client-definition.ts +184 -0
  114. package/src/internal/client/commands.tsx +260 -0
  115. package/src/internal/client/host/browser-log-forwarding.ts +149 -0
  116. package/src/internal/client/host/hosted-pages/browser-notification-settings.tsx +118 -0
  117. package/src/internal/client/host/hosted-pages/hosted-page.css +87 -0
  118. package/src/internal/client/host/hosted-pages/hosted-page.tsx +9 -0
  119. package/src/internal/client/host/hosted-pages/logout-page.tsx +75 -0
  120. package/src/internal/client/host/hosted-pages/settings-page.tsx +45 -0
  121. package/src/internal/client/host/notification-forwarding.ts +22 -0
  122. package/src/internal/client/host/overmux-host.tsx +200 -0
  123. package/src/internal/client/host/recovery-screen.css +75 -0
  124. package/src/internal/client/host/recovery-screen.tsx +17 -0
  125. package/src/internal/client/host/update-popover.css +82 -0
  126. package/src/internal/client/host/update-popover.tsx +166 -0
  127. package/src/internal/client/index.ts +45 -0
  128. package/src/internal/client/overmux-react.ts +283 -0
  129. package/src/internal/client/shortcuts.tsx +373 -0
  130. package/src/internal/client/theme-scope.css +114 -0
  131. package/src/internal/client/theme-scope.tsx +107 -0
  132. package/src/internal/client/transport.ts +69 -0
  133. package/src/internal/client/websocket.ts +441 -0
  134. package/src/internal/server/auth/auth-http.ts +414 -0
  135. package/src/internal/server/auth/auth-service.ts +627 -0
  136. package/src/internal/server/auth/auth-shell-http.ts +90 -0
  137. package/src/internal/server/auth/instance-control.ts +381 -0
  138. package/src/internal/server/check-overmux.ts +364 -0
  139. package/src/internal/server/coordinator/ipc-protocol.ts +44 -0
  140. package/src/internal/server/coordinator/server-child.ts +108 -0
  141. package/src/internal/server/coordinator/server-coordinator.ts +262 -0
  142. package/src/internal/server/coordinator/update-watcher.ts +54 -0
  143. package/src/internal/server/http/authenticated-http-app-test-helper.ts +45 -0
  144. package/src/internal/server/http/background-notification-handlers.ts +83 -0
  145. package/src/internal/server/http/control-handlers.ts +44 -0
  146. package/src/internal/server/http/create-http-app.ts +53 -0
  147. package/src/internal/server/http/development-web-backend.ts +83 -0
  148. package/src/internal/server/http/operation-handler.ts +93 -0
  149. package/src/internal/server/http/request-logging.ts +34 -0
  150. package/src/internal/server/http/routes.ts +241 -0
  151. package/src/internal/server/http/runtime-manifest-handler.ts +12 -0
  152. package/src/internal/server/index.ts +16 -0
  153. package/src/internal/server/notifications/background-notification-payload.ts +74 -0
  154. package/src/internal/server/notifications/background-notification-service.ts +139 -0
  155. package/src/internal/server/notifications/background-notification-store.ts +162 -0
  156. package/src/internal/server/notifications/notification-service.ts +70 -0
  157. package/src/internal/server/notifications/private-json-file.ts +84 -0
  158. package/src/internal/server/paths.ts +13 -0
  159. package/src/internal/server/rate-limiter.ts +58 -0
  160. package/src/internal/server/runtime/create-runtime.ts +87 -0
  161. package/src/internal/server/runtime/resource-dependency-graph.ts +128 -0
  162. package/src/internal/server/runtime/runtime-lifecycle.ts +95 -0
  163. package/src/internal/server/runtime/runtime-operations.ts +78 -0
  164. package/src/internal/server/runtime/runtime-resources.ts +201 -0
  165. package/src/internal/server/runtime/runtime-streams.ts +130 -0
  166. package/src/internal/server/server-logger.ts +110 -0
  167. package/src/internal/server/server-startup-options.ts +51 -0
  168. package/src/internal/server/start-application-server.ts +412 -0
  169. package/src/internal/server/start-overmux-server.ts +26 -0
  170. package/src/internal/server/test-port.ts +23 -0
  171. package/src/internal/server/vite-websocket-proxy.ts +201 -0
  172. package/src/internal/server/websocket-connection.ts +586 -0
  173. package/src/internal/server/websocket-limits.ts +2 -0
  174. package/src/internal/server/websocket-server.ts +311 -0
  175. package/src/internal/shared/background-notifications.ts +37 -0
  176. package/src/internal/shared/index.ts +2 -0
  177. package/src/internal/shared/protocol.ts +317 -0
  178. package/src/internal/shared/routes.ts +3 -0
  179. package/src/public/ai-context.ts +44 -0
  180. package/src/public/client.ts +53 -0
  181. package/src/public/config.ts +287 -0
  182. package/src/public/contracts.ts +55 -0
  183. package/src/public/index.ts +57 -0
  184. package/src/public/notifications.ts +10 -0
  185. package/src/public/server.ts +16 -0
  186. package/dist/public/core.ts +0 -119
  187. package/dist/public/protocol.ts +0 -51
  188. package/dist/public/terminal.ts +0 -23
  189. package/dist/web/assets/index-DC___IUw.css +0 -2
  190. package/dist/web/assets/index-DF9Cptse.js +0 -74
  191. package/dist/web/assets/terminal-component-BrP-ENHg.css +0 -1
  192. package/dist/web/assets/terminal-component-DyLEbMrx.js +0 -36
  193. package/dist/web/index.html +0 -14
@@ -0,0 +1,21 @@
1
+ ---
2
+ title: Overmux documentation
3
+ description: Build and understand an Overmux application.
4
+ ---
5
+
6
+ # Overmux documentation
7
+
8
+ Overmux is a local or self-hosted web UI for tmux sessions, Pi agents, and Git workspaces.
9
+
10
+ - [What is Overmux?](./100-introduction/100-what-is-overmux.md)
11
+ - [How Overmux Works](./100-introduction/200-how-overmux-works.md)
12
+ - [Why Overmux?](./100-introduction/300-why-overmux.md)
13
+ - [Install and Run Overmux](./200-getting-started/100-install-and-run-overmux.md)
14
+ - [Install Overmux Desktop](./200-getting-started/200-install-overmux-desktop.md)
15
+ - [Install Overmux PWA](./200-getting-started/300-install-overmux-pwa.mdx)
16
+ - [Choose an HTTPS Setup](./200-getting-started/400-secure-with-https/100-choose-an-https-setup.md)
17
+ - [Tailscale Serve](./200-getting-started/400-secure-with-https/200-tailscale-serve.md)
18
+ - [Cloudflare Tunnel](./200-getting-started/400-secure-with-https/300-cloudflare-tunnel.md)
19
+ - [Self-hosted Reverse Proxy](./200-getting-started/400-secure-with-https/400-self-hosted-reverse-proxy.md)
20
+
21
+ Run `overmux docs` to print the absolute path to this installed documentation directory.
@@ -0,0 +1,7 @@
1
+ ---
2
+ title: What is Overmux?
3
+ ---
4
+
5
+ Overmux is a web-based, customizable dev environment. Designed for coding using Agents.
6
+
7
+
@@ -0,0 +1,7 @@
1
+ ---
2
+ title: How Overmux Works
3
+ ---
4
+
5
+ Overmux is a [light-weight web framework](oxymoron definition), designed to be run in an Electron shell, a PWA on your phone, or a mobile app.
6
+
7
+ It's highly customizable
@@ -0,0 +1,22 @@
1
+ ---
2
+ title: Why Overmux?
3
+ ---
4
+
5
+ As AI coding agents have improved my time has shifted from:
6
+
7
+ - Writing code in an IDE
8
+ - Running commands manually
9
+
10
+ To:
11
+
12
+ - Talking to agents
13
+ - Reviewing code produced by agents
14
+ - Trying to "orient" myself in codebases and keep in touch with how things work
15
+ - Spawning and keeping track of agents
16
+ - Coding on my phone
17
+
18
+ I lived in a customized tmux setup. But kept noticing that that the terminal, for all it's glory, might not be the best place to build the experiences needed, especially for code review and mobile.
19
+
20
+ [Herdr](https://github.com/herdrdev/herdr) (a TUI) and [Orca](https://github.com/stablyai/orca) (web based) offer a decent default experience. But they lack the customizability I love with the terminal and neovim. They use their own muxer implementations and dictate workflows.
21
+
22
+ This future filled me with existential dread, so I built Overmux to embed my terminal in a Desktop webapp and build my own experience with a mix of tmux terminals + custom web uis.
@@ -0,0 +1,51 @@
1
+ ---
2
+ title: Install and Run Overmux
3
+ ---
4
+
5
+ First you need to install the `overmux` CLI.
6
+
7
+ ### Recommended: Install with Mise
8
+
9
+ [Mise](https://mise.jdx.dev) installs and manages developer tools and their versions.
10
+
11
+ 1. [Install Mise](https://mise.jdx.dev/getting-started.html).
12
+
13
+ 2. Install Overmux globally:
14
+
15
+ ```bash
16
+ mise use --global npm:overmux
17
+ ```
18
+
19
+ ### Alternatively: Install with pnpm
20
+
21
+ Prerequisites:
22
+
23
+ - [Node.js 22](https://nodejs.org/en/download) or newer
24
+ - [pnpm 10](https://pnpm.io/installation) or newer
25
+
26
+ Install Overmux globally:
27
+
28
+ ```bash
29
+ pnpm add --global overmux
30
+ ```
31
+
32
+ ## Initialize Overmux
33
+
34
+ Once the CLI is installed, create your Overmux setup:
35
+
36
+ ```bash
37
+ overmux init
38
+ ```
39
+
40
+ This creates your setup in `$XDG_CONFIG_HOME/overmux`. Read more about the Overmux [project structure](../300-fundamentals/100-project-structure.md).
41
+
42
+ ## Start the server
43
+
44
+ ```bash
45
+ overmux serve
46
+ ```
47
+
48
+ Open Overmux in your browser to confirm it works.
49
+
50
+ To configure hosts and ports, see [Configuration](../300-fundamentals/200-configuration.md).
51
+
@@ -0,0 +1,41 @@
1
+ ---
2
+ title: Install Overmux Desktop
3
+ ---
4
+
5
+ Overmux Desktop makes your already-running Overmux web server feel like a native app, with notifications.
6
+
7
+ ## macOS
8
+
9
+ ### Install using the CLI
10
+
11
+ After installing the Overmux CLI:
12
+
13
+ ```bash
14
+ overmux desktop install
15
+ ```
16
+
17
+ Overmux Desktop is installed in `~/Applications/Overmux.app`.
18
+
19
+ ### Install from GitHub
20
+
21
+ Download the ZIP for your Mac from the [Overmux releases](https://github.com/richardgill/overmux/releases), extract it, then move `Overmux.app` to `~/Applications`.
22
+
23
+ Overmux is not currently signed or notarized. Follow [Apple's instructions for opening an app from an unidentified developer](https://support.apple.com/en-us/102445) to allow it to run.
24
+
25
+ ## Linux
26
+
27
+ Download the AppImage or Debian package from the [Overmux releases](https://github.com/richardgill/overmux/releases).
28
+
29
+ For the AppImage:
30
+
31
+ ```bash
32
+ chmod +x Overmux-Desktop-<version>-linux-x64.AppImage
33
+ ./Overmux-Desktop-<version>-linux-x64.AppImage
34
+ ```
35
+
36
+ For Debian-based distributions:
37
+
38
+ ```bash
39
+ sudo apt install ./overmux-desktop_<version>_amd64.deb
40
+ overmux-desktop
41
+ ```
@@ -0,0 +1,92 @@
1
+ ---
2
+ title: Install Overmux PWA
3
+ ---
4
+
5
+ Overmux is a [progressive web app (PWA)](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps), so you can install it on a mobile device. The installed app gets its own home screen icon and opens in a standalone window.
6
+
7
+ <Callout type="warning">
8
+ PWAs must be hosted on HTTPS. See [Choose an HTTPS setup](./400-secure-with-https/100-choose-an-https-setup.md).
9
+ </Callout>
10
+
11
+ ## Chrome on Android
12
+
13
+ Open your Overmux URL and either select the **Add to Home Screen** banner or open the browser menu and select **Install app**. Confirm by selecting **Install**. You can then open Overmux from your home screen or app drawer.
14
+
15
+ <div style={{ display: "flex", flexWrap: "wrap", gap: "1rem" }}>
16
+ <ImageZoom
17
+ alt="The Add to Home Screen banner in Chrome on Android"
18
+ height={533}
19
+ src="https://docs.ntfy.sh/static/img/pwa-install-chrome-android.jpg"
20
+ width={240}
21
+ />
22
+ <ImageZoom
23
+ alt="The Install app menu action in Chrome on Android"
24
+ height={533}
25
+ src="https://docs.ntfy.sh/static/img/pwa-install-chrome-android-menu.jpg"
26
+ width={240}
27
+ />
28
+ <ImageZoom
29
+ alt="The PWA installation confirmation on Android"
30
+ height={533}
31
+ src="https://docs.ntfy.sh/static/img/pwa-install-chrome-android-popup.jpg"
32
+ width={240}
33
+ />
34
+ </div>
35
+
36
+ <p style={{ textAlign: "center" }}>
37
+ <em>Imagine it says overmux, not ntfy, thx</em>
38
+ </p>
39
+
40
+ ## Firefox on Android
41
+
42
+ Open your Overmux URL, open the browser menu, and select **Install**. Select **Add** to place Overmux on your home screen.
43
+
44
+ <div style={{ display: "flex", flexWrap: "wrap", gap: "1rem" }}>
45
+ <ImageZoom
46
+ alt="The Install menu action in Firefox on Android"
47
+ height={533}
48
+ src="https://docs.ntfy.sh/static/img/pwa-install-firefox-android-menu.jpg"
49
+ width={240}
50
+ />
51
+ <ImageZoom
52
+ alt="The Add to Home Screen confirmation in Firefox"
53
+ height={533}
54
+ src="https://docs.ntfy.sh/static/img/pwa-install-firefox-android-popup.jpg"
55
+ width={240}
56
+ />
57
+ </div>
58
+
59
+ <p style={{ textAlign: "center" }}>
60
+ <em>Imagine it says overmux, not ntfy, thx</em>
61
+ </p>
62
+
63
+ ## Safari on iOS
64
+
65
+ Open your Overmux URL in Safari, select **Share**, and then select **Add to Home Screen**.
66
+
67
+ <div style={{ display: "flex", flexWrap: "wrap", gap: "1rem" }}>
68
+ <ImageZoom
69
+ alt="The Share button in Safari on iOS"
70
+ height={520}
71
+ src="https://docs.ntfy.sh/static/img/pwa-install-safari-ios-button.jpg"
72
+ width={240}
73
+ />
74
+ <ImageZoom
75
+ alt="The Add to Home Screen action in Safari on iOS"
76
+ height={520}
77
+ src="https://docs.ntfy.sh/static/img/pwa-install-safari-ios-menu.jpg"
78
+ width={240}
79
+ />
80
+ <ImageZoom
81
+ alt="The Add to Home Screen confirmation on iOS"
82
+ height={520}
83
+ src="https://docs.ntfy.sh/static/img/pwa-install-safari-ios-add-icon.jpg"
84
+ width={240}
85
+ />
86
+ </div>
87
+
88
+ <p style={{ textAlign: "center" }}>
89
+ <em>Imagine it says overmux, not ntfy, thx</em>
90
+ </p>
91
+
92
+ Screenshots adapted from the [ntfy PWA installation guide](https://docs.ntfy.sh/subscribe/pwa/).
@@ -0,0 +1,14 @@
1
+ ---
2
+ title: Choose an HTTPS Setup
3
+ ---
4
+
5
+ Your Overmux could expose sensitive information or access to your system. If you're exposing overmux anywhere other than localhost, it's a good idea to configure it with HTTPS. HTTPS protects login credentials and session traffic, and browsers require it to install Overmux as a PWA.
6
+
7
+ Choose a setup that matches how you want to access Overmux:
8
+
9
+ | Setup | How it works |
10
+ | --- | --- |
11
+ | [Tailscale Serve](./200-tailscale-serve.md) | Connect through a private Tailscale VPN so only devices connected to the VPN can access Overmux. |
12
+ | [Cloudflare Tunnel](./300-cloudflare-tunnel.md) | Connect through a public Cloudflare hostname, optionally protected by Cloudflare Access login. |
13
+ | [Self-hosted reverse proxy](./400-self-hosted-reverse-proxy.md) | Run your own reverse proxy and TLS certificates to securely forward requests to Overmux. |
14
+
@@ -0,0 +1,44 @@
1
+ ---
2
+ title: Tailscale Serve
3
+ ---
4
+
5
+ [Tailscale Serve](https://tailscale.com/docs/features/tailscale-serve) gives Overmux a private HTTPS URL available to devices in your tailnet. Tailscale manages the certificate and forwards requests to Overmux over loopback.
6
+
7
+ ## Configure Overmux
8
+
9
+ Set the first authentication origin to your machine's Tailscale HTTPS URL. Keep the server bound to the same loopback address and port that Tailscale Serve will target:
10
+
11
+ ```ts
12
+ export default defineOvermuxConfig({
13
+ auth: {
14
+ mode: "cli-login",
15
+ origins: ["https://your-machine.your-tailnet.ts.net"],
16
+ trustedProxyPeer: "127.0.0.1",
17
+ },
18
+ host: "127.0.0.1",
19
+ port: 4200,
20
+ // ...
21
+ });
22
+ ```
23
+
24
+ Replace the example origin with the hostname Tailscale assigns to your machine.
25
+
26
+ ## Start Overmux and Tailscale Serve
27
+
28
+ Start Overmux:
29
+
30
+ ```bash
31
+ overmux serve
32
+ ```
33
+
34
+ In another terminal, publish its loopback listener through Tailscale Serve:
35
+
36
+ ```bash
37
+ tailscale serve --bg http://127.0.0.1:4200
38
+ ```
39
+
40
+ Open the HTTPS URL printed by Tailscale on another device in your tailnet. Run `overmux auth login` to create a login link if authentication is enabled.
41
+
42
+ Do not expose port 4200 directly or change `trustedProxyPeer` to a non-loopback address. Overmux trusts forwarded HTTPS and host information only from this immediate proxy peer.
43
+
44
+ See Tailscale's [Serve documentation](https://tailscale.com/docs/features/tailscale-serve) for installation, tailnet access controls, and command reference.
@@ -0,0 +1,59 @@
1
+ ---
2
+ title: Cloudflare Tunnel
3
+ ---
4
+
5
+ [Cloudflare Tunnel](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/) publishes Overmux through a Cloudflare-managed hostname without opening an inbound port on your network. You need a domain managed by Cloudflare.
6
+
7
+ ## Create the tunnel
8
+
9
+ [Install `cloudflared`](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/), authenticate it, and create a tunnel:
10
+
11
+ ```bash
12
+ cloudflared tunnel login
13
+ cloudflared tunnel create overmux
14
+ cloudflared tunnel route dns overmux overmux.example.com
15
+ ```
16
+
17
+ Create `~/.cloudflared/config.yml` using the tunnel ID and credentials path printed by `cloudflared tunnel create`:
18
+
19
+ ```yaml
20
+ tunnel: <tunnel-id>
21
+ credentials-file: /home/you/.cloudflared/<tunnel-id>.json
22
+
23
+ ingress:
24
+ - hostname: overmux.example.com
25
+ service: http://127.0.0.1:4200
26
+ - service: http_status:404
27
+ ```
28
+
29
+ ## Configure Overmux
30
+
31
+ Use the public HTTPS hostname as the authentication origin and trust only the local tunnel process:
32
+
33
+ ```ts
34
+ export default defineOvermuxConfig({
35
+ auth: {
36
+ mode: "cli-login",
37
+ origins: ["https://overmux.example.com"],
38
+ trustedProxyPeer: "127.0.0.1",
39
+ },
40
+ host: "127.0.0.1",
41
+ port: 4200,
42
+ // ...
43
+ });
44
+ ```
45
+
46
+ ## Start Overmux and the tunnel
47
+
48
+ Start both processes:
49
+
50
+ ```bash
51
+ overmux serve
52
+ cloudflared tunnel run overmux
53
+ ```
54
+
55
+ Open `https://overmux.example.com`. Run `overmux auth login` to create a login link if authentication is enabled.
56
+
57
+ The hostname is publicly reachable unless you restrict it. Use [Cloudflare Access](https://developers.cloudflare.com/cloudflare-one/access-controls/) when you want an additional identity check before requests reach Overmux.
58
+
59
+ See Cloudflare's [tunnel setup guide](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/) for service installation and production operation.
@@ -0,0 +1,32 @@
1
+ ---
2
+ title: Self-hosted Reverse Proxy
3
+ ---
4
+
5
+ Use this option when you already operate a domain, TLS certificates, and a reverse proxy such as Caddy, Nginx, or HAProxy.
6
+
7
+ Configure the proxy to:
8
+
9
+ - Terminate HTTPS for your public hostname.
10
+ - Forward HTTP and WebSocket requests to an Overmux loopback listener.
11
+ - Preserve the request host and send single-valued `X-Forwarded-Host` and `X-Forwarded-Proto: https` headers.
12
+
13
+ Configure Overmux with the exact public origin, loopback listener, and immediate proxy peer:
14
+
15
+ ```ts
16
+ export default defineOvermuxConfig({
17
+ auth: {
18
+ mode: "cli-login",
19
+ origins: ["https://overmux.example.com"],
20
+ trustedProxyPeer: "127.0.0.1",
21
+ },
22
+ host: "127.0.0.1",
23
+ port: 4200,
24
+ // ...
25
+ });
26
+ ```
27
+
28
+ Do not expose the loopback backend directly or configure a non-loopback address as `trustedProxyPeer`.
29
+
30
+ For complete proxy-specific walkthroughs and example configurations, see Open WebUI's [HTTPS and reverse proxy guide](https://docs.openwebui.com/reference/https/). Adapt the upstream address and port to `http://127.0.0.1:4200`, and retain Overmux's origin and trusted-proxy configuration above.
31
+
32
+ You can also consult the official documentation for [Caddy](https://caddyserver.com/docs/quick-starts/reverse-proxy), [Nginx](https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/), or [HAProxy](https://www.haproxy.com/documentation/haproxy-configuration-tutorials/proxying-essentials/).
@@ -0,0 +1,3 @@
1
+ ---
2
+ title: Project Structure
3
+ ---
@@ -0,0 +1,3 @@
1
+ ---
2
+ title: Configuration
3
+ ---
@@ -0,0 +1,3 @@
1
+ ---
2
+ title: Theming
3
+ ---
@@ -0,0 +1,3 @@
1
+ ---
2
+ title: Server
3
+ ---
@@ -0,0 +1,3 @@
1
+ ---
2
+ title: Client
3
+ ---
@@ -0,0 +1,3 @@
1
+ ---
2
+ title: Operations
3
+ ---
@@ -0,0 +1,3 @@
1
+ ---
2
+ title: Resources
3
+ ---
@@ -0,0 +1,3 @@
1
+ ---
2
+ title: Streams
3
+ ---
@@ -0,0 +1,3 @@
1
+ ---
2
+ title: Authentication and Security
3
+ ---
@@ -0,0 +1,3 @@
1
+ ---
2
+ title: Configuration
3
+ ---
@@ -0,0 +1,3 @@
1
+ ---
2
+ title: Server API
3
+ ---
@@ -0,0 +1,3 @@
1
+ ---
2
+ title: Client API
3
+ ---
@@ -0,0 +1,33 @@
1
+ ---
2
+ title: "overmux serve"
3
+ description: "Serve the Overmux web UI"
4
+ ---
5
+
6
+ # `overmux serve`
7
+
8
+ Serve the authenticated Overmux web UI. Development starts private Vite behind the public Overmux gateway. Production builds with Vite and serves static assets without running Vite.
9
+
10
+ ## Usage
11
+
12
+ ```text
13
+ overmux serve [--config path] [--host host] [--port port] [--login | --no-login]
14
+ overmux serve --production [--no-build] [--config path] [--host host] [--port port] [--login | --no-login]
15
+ ```
16
+
17
+ ## Options
18
+
19
+ | Flag | Description | Default |
20
+ | --- | --- | --- |
21
+ | `--config <path>, -c <path>` | Configuration file | `$XDG_CONFIG_HOME/overmux/overmux.config.ts` |
22
+ | `--host <host>` | Override the public listener host | Configured host |
23
+ | `--port <port>` | Override the public listener port | Configured port |
24
+ | `--login` | Create and print a browser login grant after startup | Human terminal sessions |
25
+ | `--no-login` | Do not create a grant and print the `overmux auth login` command | Agent, CI, and non-interactive sessions |
26
+ | `--production` | Build and serve `productionWebAssetsDir` | |
27
+ | `--no-build` | With `--production`, serve existing assets after checking `index.html` exists | |
28
+
29
+ `--login` and `--no-login` are mutually exclusive. By default, a human terminal session receives a single-use login grant after the server is ready. Agent, CI, and non-interactive sessions receive `overmux auth login --port <resolved-port>` instead. The explicit flags override this environment-based default.
30
+
31
+ A grant prints one server-issued URL for every authenticated browser origin. Redeeming its code or any URL consumes the grant and authenticates only that origin; create another grant for another origin. The output identifies the browser login page, expiry, and command for creating another grant.
32
+
33
+ `--no-build` without `--production` is invalid. Vite's build output cleanup follows its `build.emptyOutDir` setting.
@@ -0,0 +1,52 @@
1
+ ---
2
+ title: "overmux auth"
3
+ description: "Manage CLI-issued browser authentication"
4
+ ---
5
+
6
+ # `overmux auth`
7
+
8
+ Manage browser login grants and sessions for a running local Overmux server.
9
+
10
+ Authentication administration uses the private same-user control socket. When multiple local servers are running, use `--port` to select one.
11
+
12
+ ## Create a login grant
13
+
14
+ ```text
15
+ overmux auth login [--code] [--json] [--port value] [--url]
16
+ ```
17
+
18
+ | Flag | Description |
19
+ | --- | --- |
20
+ | `--code` | Print only the login code |
21
+ | `--json` | Print machine-readable JSON |
22
+ | `--port <value>` | Running local server port |
23
+ | `--url` | Print only the primary origin's login URL |
24
+
25
+ Set at most one of `--code`, `--url`, and `--json`. Default output prints the code, every server-issued URL in order, the exact expiry, and the command for creating another grant. `--url` prints only the primary origin's URL, `--code` prints only the code, and JSON output contains the grant metadata with its ordered `urls` array. Every URL embeds the same secret ticket; the code and ticket belong to one single-use grant. Redeeming any one of them consumes the whole grant and authenticates only that origin, so create another grant to log in at another origin.
26
+
27
+ ## List sessions
28
+
29
+ ```text
30
+ overmux auth list [--json] [--port value]
31
+ ```
32
+
33
+ | Flag | Description |
34
+ | --- | --- |
35
+ | `--json` | Print machine-readable JSON |
36
+ | `--port <value>` | Running local server port |
37
+
38
+ Session output contains non-secret metadata only, including the browser origin that issued each session. Non-expiring sessions report their expiry as `never`.
39
+
40
+ ## Revoke sessions
41
+
42
+ ```text
43
+ overmux auth revoke [--all] [--json] [--port value] [<id>]
44
+ ```
45
+
46
+ | Flag | Description |
47
+ | --- | --- |
48
+ | `--all` | Revoke every active session |
49
+ | `--json` | Print machine-readable JSON |
50
+ | `--port <value>` | Running local server port |
51
+
52
+ Specify exactly one session ID or `--all`. Revocation immediately invalidates the selected browser sessions.
@@ -0,0 +1,28 @@
1
+ ---
2
+ title: "overmux call"
3
+ description: "Invoke an operation on a running Overmux server"
4
+ ---
5
+
6
+ # `overmux call`
7
+
8
+ Invoke an operation on a running local Overmux server.
9
+
10
+ The CLI discovers the local instance and obtains a short-lived bearer credential through its private same-user control socket. Use `--port` to select an instance when multiple local servers are running.
11
+
12
+ ## Usage
13
+
14
+ ```text
15
+ overmux call [--input value] [--port value] <operation-name>
16
+ ```
17
+
18
+ ## Arguments
19
+
20
+ | Argument | Description | Required |
21
+ | --- | --- | --- |
22
+ | `operation-name` | Operation name | Yes |
23
+ ## Options
24
+
25
+ | Flag | Description | Default |
26
+ | --- | --- | --- |
27
+ | `--input <value>, -i <value>` | Operation input as JSON | |
28
+ | `--port <value>, -p <value>` | Running local server port | |
@@ -0,0 +1,20 @@
1
+ ---
2
+ title: "overmux check"
3
+ description: "Validate an Overmux configuration"
4
+ ---
5
+
6
+ # `overmux check`
7
+
8
+ Validate an Overmux configuration.
9
+
10
+ ## Usage
11
+
12
+ ```text
13
+ overmux check [--config path]
14
+ ```
15
+
16
+ ## Options
17
+
18
+ | Flag | Description | Default |
19
+ | --- | --- | --- |
20
+ | `--config <path>, -c <path>` | Configuration file | `$XDG_CONFIG_HOME/overmux/overmux.config.ts` |