File size: 4,930 Bytes
6a7089a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 | # Headless vs Headed
PinchTab instances can run Chrome in two modes:
- **Headless**: no visible browser window
- **Headed**: visible browser window
You usually run one server with `pinchtab`, then start instances in either mode through the API or CLI.
---
## Headless mode
Headless is the default mode for managed instances.
```bash
curl -X POST http://localhost:9867/instances/start \
-H "Content-Type: application/json" \
-d '{"mode":"headless"}'
# CLI Alternative
pinchtab instance start
# Response
{
"id": "inst_0a89a5bb",
"profileId": "prof_278be873",
"profileName": "instance-1741400000000000000",
"port": "9868",
"headless": true,
"status": "starting"
}
```
### Good fit for
- agents and automation
- CI and batch jobs
- containers and remote servers
- higher-throughput workloads
### Tradeoffs
- no visible browser window
- debugging usually happens through snapshots, screenshots, text extraction, and logs
---
## Headed mode
Headed mode launches a visible Chrome window.
```bash
curl -X POST http://localhost:9867/instances/start \
-H "Content-Type: application/json" \
-d '{"mode":"headed"}'
# CLI Alternative
pinchtab instance start --mode headed
# Response
{
"id": "inst_1b9a5dcc",
"profileId": "prof_278be873",
"profileName": "instance-1741400000000000001",
"port": "9869",
"headless": false,
"status": "starting"
}
```
### Good fit for
- development
- debugging
- local testing
- visual verification
- human-in-the-loop workflows
### Tradeoffs
- requires a display environment
- usually uses more CPU and memory than headless mode
---
## Side-by-side comparison
| Aspect | Headless | Headed |
|---|---|---|
| Visibility | No window | Visible window |
| Debugging | Snapshot- and log-based | Direct visual feedback |
| Display required | No | Yes |
| CI use | Strong fit | Usually poor fit |
| Local development | Fine | Usually easier |
| Resource usage | Lower | Higher |
---
## Recommended workflows
## Development workflow
Use a visible browser while you are building and validating the flow:
```bash
curl -X POST http://localhost:9867/instances/start \
-H "Content-Type: application/json" \
-d '{"mode":"headed"}'
# CLI Alternative
pinchtab instance start --mode headed
```
When you need persistence, create a profile first:
```bash
curl -X POST http://localhost:9867/profiles \
-H "Content-Type: application/json" \
-d '{"name":"dev"}'
# Response
{
"status": "created",
"id": "prof_278be873",
"name": "dev"
}
```
Then launch the profile in headed mode:
```bash
curl -X POST http://localhost:9867/instances/start \
-H "Content-Type: application/json" \
-d '{"profileId":"prof_278be873","mode":"headed"}'
# CLI Alternative
pinchtab instance start --profileId prof_278be873 --mode headed
# Response
{
"id": "inst_ea2e747f",
"profileId": "prof_278be873",
"profileName": "dev",
"port": "9868",
"headless": false,
"status": "starting"
}
```
## Production workflow
Use headless mode for repeatable unattended work:
```bash
for i in 1 2 3; do
curl -s -X POST http://localhost:9867/instances/start \
-H "Content-Type: application/json" \
-d '{"mode":"headless"}' | jq .
done
# CLI Alternative
for i in 1 2 3; do
pinchtab instance start
done
```
---
## Inspecting a headless instance
You can debug a headless instance through tab APIs.
List the instance tabs:
```bash
curl http://localhost:9867/instances/inst_0a89a5bb/tabs | jq .
# Response
[
{
"id": "CDP_TARGET_ID",
"instanceId": "inst_0a89a5bb",
"url": "https://pinchtab.com",
"title": "PinchTab"
}
]
```
Then inspect the tab:
```bash
curl http://localhost:9867/tabs/CDP_TARGET_ID/snapshot | jq .
```
```bash
curl http://localhost:9867/tabs/CDP_TARGET_ID/text | jq .
```
```bash
curl http://localhost:9867/tabs/CDP_TARGET_ID/screenshot > page.jpg
```
---
## Display requirements
Headed instances need a display environment.
### macOS
Headed mode works with the native desktop session.
### Linux
Headless works anywhere.
Headed mode needs X11 or Wayland.
```bash
ssh -X user@server 'pinchtab instance start --mode headed'
```
### Windows
Headed mode works with the native desktop session.
### Docker
Headless is the normal choice in containers:
```bash
docker run -d -p 9867:9867 pinchtab/pinchtab
curl -X POST http://localhost:9867/instances/start \
-H "Content-Type: application/json" \
-d '{"mode":"headless"}'
```
---
## Dashboard
The dashboard lets you monitor running instances and profiles while you use either mode.
Useful views:
- Monitoring: running instances, status, tabs, and optional memory metrics
- Profiles: saved profiles, launch actions, and live details
- Settings: runtime and dashboard preferences
---
## Summary
- Use **headless** for unattended automation and scale.
- Use **headed** for local debugging and human-visible workflows.
- Choose the mode per instance, not per server.
|