Steel
Cloud browser sessions
git clone https://github.com/bijectionhq/steel.git
cd steel
git checkout e36afeb17503b3f82f561bd197e7ed398f03f28dBijection repository access is required. Request access.
Description
Cloud browser sessions
Explore the package README for API concepts, configuration, and examples. Check the Bijection source for adaptation-specific setup.
Review the source and its dependencies before adopting this package. Source availability does not establish npm publication or runtime qualification.
Getting started
- Get the source at the revision above and read its package documentation.
- Check the required Bijection SDK version, dependencies, and external service credentials.
- Follow the package setup instructions and the guide to using components.
- Exercise the component in your deployment according to your project’s verification rules.
Open source
Maintained source: bijectionhq/steel. Based on steel-dev/steel-convex. License: MIT. Consult the repository for license terms, notices, and contributor attribution.
From the upstream publisher
Convex component wrapper for Steel
Explore the demo ↗Upstream overview
From the upstream package documentation.
Steel Browser provides cloud browser automation for Convex applications with built-in multi-tenant session management. Run browser sessions in the cloud for web scraping, taking screenshots, solving captchas, and handling file operations directly from Convex actions. Sessions persist state in your Convex database with real-time queries and automatic tenant isolation by ownerId.
Use cases
From the upstream package documentation.
- E-commerce monitoring — Create persistent browser sessions to monitor competitor prices, track inventory changes, or scrape product data with session state stored in Convex for real-time frontend updates
- Multi-tenant web automation — Build SaaS applications where each customer gets isolated browser sessions for automated workflows, form submissions, or data collection without cross-tenant data leaks
- Captcha-protected scraping — Access websites that require captcha solving or complex authentication flows using persistent browser profiles and credential management
- Document generation workflows — Generate PDFs or screenshots of web pages as part of automated reporting pipelines with file management integrated into your Convex backend
- Session-based testing — Run browser-based integration tests or user journey validation with persistent sessions that maintain login state and browser profiles
How it works
From the upstream package documentation.
The component bridges Steel's cloud browser API with Convex's database and action system. You mount the component in convex.config.ts, then create a SteelComponent instance in your Convex actions with your API key. The component provides modules like sessions, steel, captchas, and files that wrap Steel API calls while persisting state in your Convex database.
Every operation accepts an ownerId parameter that provides automatic multi-tenant isolation at the database level. When you call steel.sessions.create() or steel.steel.scrape(), the component makes the Steel API request and stores session metadata in Convex tables. Your frontend can then query session state in real-time using standard Convex queries without polling.
The sessions module manages full browser lifecycle with methods like create(), refresh(), and release(). The steel module provides one-shot operations for scraping, screenshots, and PDF generation without session management. Additional modules handle captcha solving, browser profiles, credentials, extensions, and file operations, all scoped by tenant and queryable from your Convex functions.
Upstream package FAQ
How does the Steel Browser Convex Component handle multi-tenancy?
The Steel Browser Convex Component automatically scopes all operations by ownerId, providing built-in multi-tenant isolation at the data layer. Each tenant's browser sessions, profiles, credentials, and files are completely separated in your Convex database. You can set a default ownerId in the constructor or override it per method call.
What's the difference between the steel and sessions modules?
The steel module provides one-shot operations like scraping, screenshots, or PDF generation without session management. The sessions module creates persistent browser sessions that you can reuse, refresh, and manage over time with saved profiles and credentials.
Can I query browser session data from my frontend in real-time?
Yes, the Steel Browser Convex Component persists all session state in your Convex database, making it queryable in real-time from your frontend. This eliminates the need for polling or webhooks since Convex provides reactive data synchronization.
How do I handle browser extensions and file uploads?
The Steel Browser Convex Component provides separate modules for extensions and files. The extensions module handles uploading, updating, and managing browser extensions, while the files module manages global files and the sessionFiles module attaches files to specific browser sessions.
Use with agents and CLI
Give your coding agent the component’s source identity and setup guidance.
Help me integrate Steel with Bijection.
Read: https://bijection.com/components/steel/SKILL.md
Check SDK compatibility and dependency availability.
Follow this project's execution and verification rules.Upstream README.md
View repository ↗Documentation from steel-dev/steel-convex, recorded October 23, 2026. APIs and setup may differ in the Bijection adaptation.
Steel Convex Component
A Convex component for Steel cloud browser sessions. Manage browser sessions, scrape pages, solve captchas, and handle files — all from your Convex actions, with built-in multi-tenant isolation.
Features:
- Multi-tenant sessions — Every operation is scoped by
ownerId. Tenant A never sees Tenant B's sessions. - Full session lifecycle — Create, refresh, release, bulk-refresh, and bulk-release browser sessions.
- Scraping & screenshots — Scrape a page, take a screenshot, or generate a PDF in a single call.
- Captcha solving — Check captcha status, solve text captchas, or solve image captchas on any session.
- Profiles & credentials — Persist browser profiles and saved logins across sessions.
- Extensions & files — Upload browser extensions, attach files to sessions, or manage global files.
- Convex-native state — Session state is persisted in your Convex database, queryable in real time from your frontend.
Quick Start
1. Install
npm install @steel-dev/convex convex
2. Mount the component
In your convex/convex.config.ts:
import { defineApp } from "convex/server";
import steel from "@steel-dev/convex/convex.config";
const app = defineApp();
app.use(steel);
export default app;
3. Set your API key
npx convex env set STEEL_API_KEY <your_steel_key>
4. Create your first session
In a Convex action file, e.g. convex/steelActions.ts:
import { action } from "./_generated/server";
import { components } from "./_generated/api";
import { SteelComponent } from "@steel-dev/convex";
const steel = new SteelComponent(components.steel, {
STEEL_API_KEY: process.env.STEEL_API_KEY,
});
export const createSession = action({
args: {},
handler: async (ctx) =>
steel.sessions.create(
ctx,
{ sessionArgs: { timeout: 120000 } },
{ ownerId: "tenant-a" },
),
});
5. Run it
npx convex dev
npx convex run steelActions:createSession
Modules
| Module | What it does |
|---|---|
sessions | Create, refresh, release, list, and inspect browser sessions |
steel | One-shot scrape, screenshot, or PDF — no session management needed |
captchas | Check status, solve text captchas, solve image captchas |
profiles | Create, update, list, and retrieve browser profiles |
credentials | Store and manage saved login credentials |
extensions | Upload, update, delete, and download browser extensions |
files | Upload, download, and delete global files |
sessionFiles | Attach, list, and delete files on individual sessions |
How it works
Steel handles the cloud browser. Convex handles the state. This component bridges both:
- Your Convex action calls the Steel API to create or manage a browser session.
- The component persists session state in your Convex database.
- Your frontend can query session data in real time — no polling, no webhooks.
All operations are scoped by ownerId, so multi-tenant isolation is built in at the data layer.
Constructor options
const steel = new SteelComponent(components.steel, {
STEEL_API_KEY: process.env.STEEL_API_KEY, // API key (or set via env var)
ownerId: "default-tenant", // Default ownerId for all calls
});
STEEL_API_KEY— Your Steel API key. If omitted, falls back toprocess.env.STEEL_API_KEY.ownerId— Default owner for all method calls. Can be overridden per call via the options argument.
Troubleshooting
Missing STEEL_API_KEY — The Convex runtime does not inherit your shell environment. Set it explicitly:
npx convex env set STEEL_API_KEY <your_key>
Schema file missing default export — Make sure convex/schema.ts uses export default defineSchema({...}), not a named export.
No matching export ... components — Import components from ./_generated/api, not ./_generated/server.
paginate() is only supported in the app — This is a known Convex limitation. The component uses take() internally instead of paginate().
Guides & Reference
- Getting Started Guide — step-by-step walkthrough with a real-world price monitor example
- API Reference — full method signatures for every module
- Demo project — working example app
Development
npm run codegen:verify
npm run typecheck
npm run test
npm run build
npm run codegen:verify and npm test start a local anonymous Convex backend automatically, so they do not require a cloud CONVEX_DEPLOYMENT or deploy key in CI.
Live integration smoke test (requires a Steel API key):
STEEL_API_KEY=... STEEL_LIVE_TEST=1 npm test
License
MIT