---
title: "Deploy Browserless"
description: "Browserless 2.62 headless Chrome for Puppeteer and Playwright, token-gated."
category: "Automation"
url: https://railway.com/deploy/browserless-2
---

# Deploy Browserless

Browserless 2.62 headless Chrome for Puppeteer and Playwright, token-gated.

**[Deploy Browserless on Railway](https://railway.com/template/browserless-2)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/browserless-2/manifest.json

- **Creator:** Agaz Self-Host
- **Category:** Automation

## Template content

### Browserless https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/browserless.svg

- **Image:** ghcr.io/browserless/chromium:v2.62.0@sha256:0f28bbde20e890463e8d0f253dc2b66860de8ad3aef6cc17bcdbfe8a02ffccf0
- **Start command:** `/bin/bash -c 'export HOST=:: PORT="${PORT:-3000}" STRICT_TOKEN_USE=true CONCURRENT="${CONCURRENT:-5}" QUEUED="${QUEUED:-10}" TIMEOUT="${TIMEOUT:-60000}"; if [ "${#TOKEN}" -lt 16 ]; then echo "Refusing to start: TOKEN must be set to a secret of at least 16 characters, otherwise this would be an open browser for anyone." >&2; exit 1; fi; exec ./scripts/start.sh'`
- **Health check:** /docs/
- **Public domain:** Yes

## Documentation

# Deploy and Host Browserless on Railway

Browserless runs headless Chromium as a service. Puppeteer, Playwright and other CDP clients connect to it over a WebSocket, and REST endpoints return screenshots, PDFs, page content and scraped data. Your code doesn't need a local Chrome install: one shared browser service handles your apps, scripts and agents.

## About Hosting Browserless

This template runs Browserless v2.62.0 (Chromium 158) from the official image, pinned by digest. Every request needs a generated 48-character `TOKEN`. `STRICT_TOKEN_USE` is forced on, so only the static docs page answers without it, and the service refuses to start if the token is missing. Chromium uses a lot of memory, and each open session needs a few hundred MB, so `CONCURRENT` (5), `QUEUED` (10) and `TIMEOUT` (60 s) keep a burst of jobs from exhausting the instance. Sessions are ephemeral, so no volume is attached. Browserless is dual-licensed under SSPL-1.0 or a commercial licence. It is free for open-source and non-commercial use, but closed-source commercial use needs a licence from browserless.io.

## Common Use Cases

* Render screenshots and PDFs (invoices, reports, social cards) from URLs or HTML
* Scrape and test JavaScript-heavy sites with Puppeteer or Playwright, without installing Chrome in every app or CI job
* Give AI agents and automation tools (n8n, Flowise, custom agents) a shared headless browser over the private network

## Dependencies for Browserless Hosting

* The official `ghcr.io/browserless/chromium` image (v2.62.0, Chromium 158, Puppeteer 25.16 and Playwright 1.61 to 1.65 supported)
* No database or volume is needed. Plan on roughly 300 to 500 MB of RAM per concurrent session.

### Deployment Dependencies

* [Browserless on GitHub](https://github.com/browserless/browserless) and [release v2.62.0](https://github.com/browserless/browserless/releases/tag/v2.62.0)
* [Browserless documentation](https://docs.browserless.io/) (Docker configuration, connection URLs, REST API)
* [Licence (SSPL-1.0 or commercial)](https://github.com/browserless/browserless/blob/main/LICENSE)

### Implementation Details

The service variables hold ready-made connection URLs that already include the token:

* `BROWSER_WS_ENDPOINT`: `wss://YOUR-DOMAIN?token=…` for Puppeteer `connect({ browserWSEndpoint })` and Playwright `connectOverCDP()`
* `BROWSER_PLAYWRIGHT_ENDPOINT`: `wss://YOUR-DOMAIN/chromium/playwright?token=…` for Playwright `chromium.connect()`
* `BROWSER_WS_ENDPOINT_PRIVATE`: the same CDP URL over Railway's private network, for other services in the project, for example `${{Browserless.BROWSER_WS_ENDPOINT_PRIVATE}}`

```js
const browser = await puppeteer.connect({ browserWSEndpoint: process.env.BROWSER_WS_ENDPOINT });
```

REST example: `POST https://YOUR-DOMAIN/chromium/screenshot?token=YOUR_TOKEN` with `{"url":"https://example.com"}`. The health check uses `/docs/`. Raise `CONCURRENT` only after you give the service more memory.

## Why Deploy Browserless on Railway?


Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.

By deploying Browserless on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.



## Similar templates

- [N8N Main + Worker](https://railway.com/deploy/n8n-main-worker) — Deploy and Host N8N with Inactive worker.
- [Evolution API with n8n](https://railway.com/deploy/evolution-api-with-n8n) — Automate WhatsApp workflows with Evolution API, n8n, and Postgres.
- [Postgres Backup](https://railway.com/deploy/postgres-s3-backups) — Cron-based PostgreSQL backup to bucket storage

Open this page in a browser: https://railway.com/deploy/browserless-2
