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.
- package/CHANGELOG.md +16 -0
- package/README.md +7 -0
- package/dist/auth/.vite/manifest.json +11 -0
- package/dist/auth/assets/index-Bx8JhwVi.css +1 -0
- package/dist/auth/assets/index-CHIE7qYj.js +72 -0
- package/dist/auth/index.html +14 -0
- package/dist/bin.js +4504 -7870
- package/dist/bin.js.map +1 -0
- package/dist/docs/000-index.md +21 -0
- package/dist/docs/100-introduction/100-what-is-overmux.md +7 -0
- package/dist/docs/100-introduction/200-how-overmux-works.md +7 -0
- package/dist/docs/100-introduction/300-why-overmux.md +22 -0
- package/dist/docs/200-getting-started/100-install-and-run-overmux.md +51 -0
- package/dist/docs/200-getting-started/200-install-overmux-desktop.md +41 -0
- package/dist/docs/200-getting-started/300-install-overmux-pwa.mdx +92 -0
- package/dist/docs/200-getting-started/400-secure-with-https/100-choose-an-https-setup.md +14 -0
- package/dist/docs/200-getting-started/400-secure-with-https/200-tailscale-serve.md +44 -0
- package/dist/docs/200-getting-started/400-secure-with-https/300-cloudflare-tunnel.md +59 -0
- package/dist/docs/200-getting-started/400-secure-with-https/400-self-hosted-reverse-proxy.md +32 -0
- package/dist/docs/300-fundamentals/100-project-structure.md +3 -0
- package/dist/docs/300-fundamentals/200-configuration.md +3 -0
- package/dist/docs/300-fundamentals/300-theming.md +3 -0
- package/dist/docs/300-fundamentals/400-server.md +3 -0
- package/dist/docs/300-fundamentals/500-client.md +3 -0
- package/dist/docs/300-fundamentals/600-operations.md +3 -0
- package/dist/docs/300-fundamentals/700-resources.md +3 -0
- package/dist/docs/300-fundamentals/800-streams.md +3 -0
- package/dist/docs/300-fundamentals/900-authentication-and-security.md +3 -0
- package/dist/docs/400-reference/100-configuration.md +3 -0
- package/dist/docs/400-reference/200-server-api.md +3 -0
- package/dist/docs/400-reference/300-client-api.md +3 -0
- package/dist/docs/400-reference/400-cli/100-serve.md +33 -0
- package/dist/docs/400-reference/400-cli/200-auth.md +52 -0
- package/dist/docs/400-reference/400-cli/300-call.md +28 -0
- package/dist/docs/400-reference/400-cli/400-check.md +20 -0
- package/dist/docs/400-reference/400-cli/500-ai-context.md +102 -0
- package/dist/docs/400-reference/400-cli/600-docs.md +23 -0
- package/dist/docs/400-reference/400-cli/700-desktop.md +35 -0
- package/dist/docs/500-hosted-pages.md +31 -0
- package/dist/exports/client.d.ts +237 -0
- package/dist/exports/client.d.ts.map +1 -0
- package/dist/exports/client.js +1643 -0
- package/dist/exports/client.js.map +1 -0
- package/dist/exports/index-D3_Dpy_T.d.ts +155 -0
- package/dist/exports/index-D3_Dpy_T.d.ts.map +1 -0
- package/dist/exports/index.d.ts +2 -0
- package/dist/exports/index.js +49 -0
- package/dist/exports/index.js.map +1 -0
- package/dist/exports/notifications-kDp16bU_.js +56 -0
- package/dist/exports/notifications-kDp16bU_.js.map +1 -0
- package/dist/exports/server.d.ts +63 -0
- package/dist/exports/server.d.ts.map +1 -0
- package/dist/exports/server.js +1120 -0
- package/dist/exports/server.js.map +1 -0
- package/dist/exports/style.css +368 -0
- package/dist/internal/server/coordinator/server-child.d.ts +1 -0
- package/dist/internal/server/coordinator/server-child.js +3299 -0
- package/dist/internal/server/coordinator/server-child.js.map +1 -0
- package/docs/000-index.md +21 -0
- package/docs/100-introduction/100-what-is-overmux.md +7 -0
- package/docs/100-introduction/200-how-overmux-works.md +7 -0
- package/docs/100-introduction/300-why-overmux.md +22 -0
- package/docs/200-getting-started/100-install-and-run-overmux.md +51 -0
- package/docs/200-getting-started/200-install-overmux-desktop.md +41 -0
- package/docs/200-getting-started/300-install-overmux-pwa.mdx +92 -0
- package/docs/200-getting-started/400-secure-with-https/100-choose-an-https-setup.md +14 -0
- package/docs/200-getting-started/400-secure-with-https/200-tailscale-serve.md +44 -0
- package/docs/200-getting-started/400-secure-with-https/300-cloudflare-tunnel.md +59 -0
- package/docs/200-getting-started/400-secure-with-https/400-self-hosted-reverse-proxy.md +32 -0
- package/docs/300-fundamentals/100-project-structure.md +3 -0
- package/docs/300-fundamentals/200-configuration.md +3 -0
- package/docs/300-fundamentals/300-theming.md +3 -0
- package/docs/300-fundamentals/400-server.md +3 -0
- package/docs/300-fundamentals/500-client.md +3 -0
- package/docs/300-fundamentals/600-operations.md +3 -0
- package/docs/300-fundamentals/700-resources.md +3 -0
- package/docs/300-fundamentals/800-streams.md +3 -0
- package/docs/300-fundamentals/900-authentication-and-security.md +3 -0
- package/docs/400-reference/100-configuration.md +3 -0
- package/docs/400-reference/200-server-api.md +3 -0
- package/docs/400-reference/300-client-api.md +3 -0
- package/docs/400-reference/400-cli/100-serve.md +33 -0
- package/docs/400-reference/400-cli/200-auth.md +52 -0
- package/docs/400-reference/400-cli/300-call.md +28 -0
- package/docs/400-reference/400-cli/400-check.md +20 -0
- package/docs/400-reference/400-cli/500-ai-context.md +102 -0
- package/docs/400-reference/400-cli/600-docs.md +23 -0
- package/docs/400-reference/400-cli/700-desktop.md +35 -0
- package/docs/500-hosted-pages.md +31 -0
- package/package.json +59 -18
- package/src/internal/cli/app.ts +72 -0
- package/src/internal/cli/bin.ts +3 -0
- package/src/internal/cli/commands/ai.ts +44 -0
- package/src/internal/cli/commands/auth.ts +195 -0
- package/src/internal/cli/commands/call.ts +128 -0
- package/src/internal/cli/commands/check.ts +48 -0
- package/src/internal/cli/commands/desktop-installer.ts +446 -0
- package/src/internal/cli/commands/desktop-release.ts +190 -0
- package/src/internal/cli/commands/desktop.ts +47 -0
- package/src/internal/cli/commands/docs.ts +34 -0
- package/src/internal/cli/commands/serve.ts +322 -0
- package/src/internal/cli/environment.ts +54 -0
- package/src/internal/cli/login.ts +46 -0
- package/src/internal/cli/managed-vite.ts +267 -0
- package/src/internal/cli/parse-port.ts +8 -0
- package/src/internal/client/auth/auth-api.ts +53 -0
- package/src/internal/client/auth/auth-shell.css +74 -0
- package/src/internal/client/auth/auth-shell.tsx +167 -0
- package/src/internal/client/auth/entry.tsx +26 -0
- package/src/internal/client/auth/index.html +13 -0
- package/src/internal/client/background-notifications.ts +194 -0
- package/src/internal/client/browser-api.ts +97 -0
- package/src/internal/client/client-definition.ts +184 -0
- package/src/internal/client/commands.tsx +260 -0
- package/src/internal/client/host/browser-log-forwarding.ts +149 -0
- package/src/internal/client/host/hosted-pages/browser-notification-settings.tsx +118 -0
- package/src/internal/client/host/hosted-pages/hosted-page.css +87 -0
- package/src/internal/client/host/hosted-pages/hosted-page.tsx +9 -0
- package/src/internal/client/host/hosted-pages/logout-page.tsx +75 -0
- package/src/internal/client/host/hosted-pages/settings-page.tsx +45 -0
- package/src/internal/client/host/notification-forwarding.ts +22 -0
- package/src/internal/client/host/overmux-host.tsx +200 -0
- package/src/internal/client/host/recovery-screen.css +75 -0
- package/src/internal/client/host/recovery-screen.tsx +17 -0
- package/src/internal/client/host/update-popover.css +82 -0
- package/src/internal/client/host/update-popover.tsx +166 -0
- package/src/internal/client/index.ts +45 -0
- package/src/internal/client/overmux-react.ts +283 -0
- package/src/internal/client/shortcuts.tsx +373 -0
- package/src/internal/client/theme-scope.css +114 -0
- package/src/internal/client/theme-scope.tsx +107 -0
- package/src/internal/client/transport.ts +69 -0
- package/src/internal/client/websocket.ts +441 -0
- package/src/internal/server/auth/auth-http.ts +414 -0
- package/src/internal/server/auth/auth-service.ts +627 -0
- package/src/internal/server/auth/auth-shell-http.ts +90 -0
- package/src/internal/server/auth/instance-control.ts +381 -0
- package/src/internal/server/check-overmux.ts +364 -0
- package/src/internal/server/coordinator/ipc-protocol.ts +44 -0
- package/src/internal/server/coordinator/server-child.ts +108 -0
- package/src/internal/server/coordinator/server-coordinator.ts +262 -0
- package/src/internal/server/coordinator/update-watcher.ts +54 -0
- package/src/internal/server/http/authenticated-http-app-test-helper.ts +45 -0
- package/src/internal/server/http/background-notification-handlers.ts +83 -0
- package/src/internal/server/http/control-handlers.ts +44 -0
- package/src/internal/server/http/create-http-app.ts +53 -0
- package/src/internal/server/http/development-web-backend.ts +83 -0
- package/src/internal/server/http/operation-handler.ts +93 -0
- package/src/internal/server/http/request-logging.ts +34 -0
- package/src/internal/server/http/routes.ts +241 -0
- package/src/internal/server/http/runtime-manifest-handler.ts +12 -0
- package/src/internal/server/index.ts +16 -0
- package/src/internal/server/notifications/background-notification-payload.ts +74 -0
- package/src/internal/server/notifications/background-notification-service.ts +139 -0
- package/src/internal/server/notifications/background-notification-store.ts +162 -0
- package/src/internal/server/notifications/notification-service.ts +70 -0
- package/src/internal/server/notifications/private-json-file.ts +84 -0
- package/src/internal/server/paths.ts +13 -0
- package/src/internal/server/rate-limiter.ts +58 -0
- package/src/internal/server/runtime/create-runtime.ts +87 -0
- package/src/internal/server/runtime/resource-dependency-graph.ts +128 -0
- package/src/internal/server/runtime/runtime-lifecycle.ts +95 -0
- package/src/internal/server/runtime/runtime-operations.ts +78 -0
- package/src/internal/server/runtime/runtime-resources.ts +201 -0
- package/src/internal/server/runtime/runtime-streams.ts +130 -0
- package/src/internal/server/server-logger.ts +110 -0
- package/src/internal/server/server-startup-options.ts +51 -0
- package/src/internal/server/start-application-server.ts +412 -0
- package/src/internal/server/start-overmux-server.ts +26 -0
- package/src/internal/server/test-port.ts +23 -0
- package/src/internal/server/vite-websocket-proxy.ts +201 -0
- package/src/internal/server/websocket-connection.ts +586 -0
- package/src/internal/server/websocket-limits.ts +2 -0
- package/src/internal/server/websocket-server.ts +311 -0
- package/src/internal/shared/background-notifications.ts +37 -0
- package/src/internal/shared/index.ts +2 -0
- package/src/internal/shared/protocol.ts +317 -0
- package/src/internal/shared/routes.ts +3 -0
- package/src/public/ai-context.ts +44 -0
- package/src/public/client.ts +53 -0
- package/src/public/config.ts +287 -0
- package/src/public/contracts.ts +55 -0
- package/src/public/index.ts +57 -0
- package/src/public/notifications.ts +10 -0
- package/src/public/server.ts +16 -0
- package/dist/public/core.ts +0 -119
- package/dist/public/protocol.ts +0 -51
- package/dist/public/terminal.ts +0 -23
- package/dist/web/assets/index-DC___IUw.css +0 -2
- package/dist/web/assets/index-DF9Cptse.js +0 -74
- package/dist/web/assets/terminal-component-BrP-ENHg.css +0 -1
- package/dist/web/assets/terminal-component-DyLEbMrx.js +0 -36
- 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,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,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` |
|