Skip to content

Self-Hosting Steel Browser

Fresh

Run Steel Browser on your own infrastructure for full control, data privacy, and no usage limits.

Deployment Options

PlatformComplexityBest For
DockerLowLocal development, CI/CD
RailwayLowQuick cloud deployment
RenderLowManaged containers
ClusteringHighHigh-volume production

Steel Local vs Steel Cloud

FeatureSteel LocalSteel Cloud
Concurrency1 session100+ sessions
StealthLimitedAdvanced stealth
CAPTCHA SolvingNot availableSupported
ProxiesBYOP onlyBYOP + Steel managed
Multi-RegionHost it yourselfBuilt-in (lax, ord, iad)
Credentials APINot supportedFull support
ExtensionsLocal folder loadingExtensions API
Files APINot supportedFull support

Key Difference

The defining factor is concurrency. Steel Local is limited to 1 concurrent session. Steel Cloud supports 100+ concurrent sessions with advanced stealth and anti-detection.

Extensions in Steel Local

Place extension folders in api/src/extensions/ and Steel Local will automatically build and inject them into sessions:

steel-browser/
└── api/
    └── src/
        └── extensions/
            ├── my-extension/
            │   ├── manifest.json
            │   └── content.js
            └── another-extension/
                ├── manifest.json
                └── background.js

Railway

Deploy Steel Browser to Railway with one click.

Deploy Link: railway.com/deploy/steelbrowser

Post-Deployment

  1. Navigate to the Railway-provided public domain
  2. Verify health: curl https://your-domain.railway.app/v1/health
  3. Connect your application:
typescript
import { chromium } from "playwright";
import Steel from "steel-sdk";

const client = new Steel({
  baseUrl: `https://${process.env.RAILWAY_PUBLIC_DOMAIN}`,
});

const session = await client.sessions.create();
const browser = await chromium.connectOverCDP(session.websocketUrl);

Railway Benefits

  • Automatic HTTPS/SSL
  • Built-in health monitoring
  • Easy scaling
  • Simple environment variable management

Security Considerations

  • Add authentication if exposing publicly
  • Monitor for unusual traffic patterns
  • Set up rate limiting for production use

Render

Deploy using Render's Blueprint mechanism with the Steel Docker image (steeldev/steel).

  1. Sign into Render
  2. Use Blueprint deployment with image steeldev/steel
  3. Configure environment variables
  4. Deploy

Clustering

Coming Soon

Clustering documentation for running multiple Steel Browser instances is being developed. Check back for updates on load balancing and high-availability configurations.

WebRTC Configuration

Steel's headful sessions use WebRTC for real-time browser streaming:

  • 25 fps video at H.264
  • Low-latency OS-level capture
  • Full visual fidelity

For self-hosted deployments, ensure your infrastructure supports WebRTC traffic (UDP ports, TURN/STUN configuration).

Profiles in Self-Hosted

Coming Soon

Self-hosted profile management documentation is being developed. For now, use Steel Cloud for persistent browser profiles.

See Also

SOP Documentation Hub - Built from Steel.dev Official Docs