You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+39-7Lines changed: 39 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -29,15 +29,18 @@ Use it when your dev server is running on a remote machine and you want to open
29
29
- Supports `--tailscale-port` when you want the MagicDNS URL to include a specific HTTPS port.
30
30
- Detects Laravel + Vite dev output, exposes both servers, rewrites Laravel's `public/hot` file to the Tailscale Vite URL, and proxies Vite assets with CORS headers so module scripts can load cross-origin.
31
31
- Uses a stable alternate Tailscale HTTPS port by default: first free port from `8443` upward.
32
-
- Cleans up the Tailscale Serve mappings it created when the child command exits or you press `Ctrl+C`.
32
+
- Stays private to your tailnet by default.
33
+
- Supports `--public` / `--funnel` for intentional public internet sharing through Tailscale Funnel.
34
+
- Cleans up the Tailscale Serve/Funnel mappings it created when the child command exits or you press `Ctrl+C`.
33
35
34
36
## Requirements
35
37
36
38
- Node.js 20 or newer.
37
39
- Tailscale installed and available as `tailscale` on `PATH`.
38
40
- The device must be logged into Tailscale.
39
41
- Tailscale Serve must be available for the device/tailnet.
40
-
- Your user must be allowed to update Tailscale Serve config. If `tailscale serve` says access is denied, run this once:
42
+
- For `--public`, Tailscale Funnel must be enabled for the device/tailnet.
43
+
- Your user must be allowed to update Tailscale Serve/Funnel config. If `tailscale serve` or `tailscale funnel` says access is denied, run this once:
41
44
42
45
```bash
43
46
sudo tailscale set --operator=$USER
@@ -48,9 +51,11 @@ Check Tailscale before using `lizardtail`:
48
51
```bash
49
52
tailscale status
50
53
tailscale serve --help
54
+
# Optional, only for --public:
55
+
tailscale funnel --help
51
56
```
52
57
53
-
`lizardtail` exposes services to your private tailnet via Tailscale Serve. It does **not** use Tailscale Funnel and does not publish your server to the public internet.
58
+
`lizardtail` exposes services to your private tailnet via Tailscale Serve by default. It only uses Tailscale Funnel, which publishes to the public internet, when you explicitly pass `--public` or `--funnel`.
54
59
55
60
## Installation
56
61
@@ -107,6 +112,7 @@ lizardtail -- npm run dev -- --host 0.0.0.0
107
112
|`--timeout <ms>`|`30000`| How long to wait for a port to appear in command output. |
108
113
|`--tailscale-port <port>`| first free `8443+`| Expose the main app on this Tailscale HTTPS port and print it in the MagicDNS URL. Alias: `--https-port`. |
109
114
|`--vite-tailscale-port <port>`| first free `8443+`| Expose a detected Laravel Vite asset server on this Tailscale HTTPS port. Alias: `--vite-https-port`. |
115
+
|`--public`, `--funnel`| disabled | Use Tailscale Funnel for public internet access instead of private tailnet-only Serve. |
110
116
|`--no-open-check`| enabled | Skip waiting for the local port to accept connections before calling Tailscale. |
111
117
|`-h`, `--help`|| Show help. |
112
118
@@ -183,6 +189,28 @@ If your app server lands on a known port and you only want to expose that server
183
189
lizardtail --port 8001 composer run dev
184
190
```
185
191
192
+
### Public internet sharing
193
+
194
+
By default, URLs are only reachable from devices in your tailnet. To intentionally publish through Tailscale Funnel:
195
+
196
+
```bash
197
+
lizardtail --public pnpm dev
198
+
```
199
+
200
+
or:
201
+
202
+
```bash
203
+
lizardtail --funnel pnpm dev
204
+
```
205
+
206
+
This prints a public HTTPS URL such as:
207
+
208
+
```text
209
+
https://my-host.tailabc.ts.net:8443
210
+
```
211
+
212
+
Use this only for apps you are comfortable exposing publicly. Stop `lizardtail` with `Ctrl+C` to remove the Funnel mapping it created.
213
+
186
214
### Longer startup timeout
187
215
188
216
```bash
@@ -196,18 +224,20 @@ lizardtail --timeout 60000 pnpm dev
196
224
3. It scans recent output for a local port.
197
225
4. Once it finds a port, it waits for `127.0.0.1:<port>` or the configured `--host` to accept connections.
198
226
5. It chooses the first free Tailscale HTTPS port from `8443` upward, unless `--tailscale-port` was provided.
199
-
6. It runs:
227
+
6. It runs Tailscale Serve for private tailnet-only access:
0 commit comments