Deploy your own node in 30 seconds • Use community nodes • Browse freely
Quick Start • Deploy Your Node • Documentation • Contributing
- 👀 Instant Setup - Deploy to Cloudflare Workers in 30 seconds
- 🌍 Decentralized - Community-run nodes across the globe
- ⚡ Edge Performance - Cloudflare Workers for <50ms latency worldwide
- 🔄 Automatic Failover - Client seamlessly switches between nodes
- 📊 Built-in Monitoring - Health checks, metrics, and status dashboard
- 🔒 Production Ready - Rate limiting, security headers, graceful shutdown
- 🤝 UV Compatible - Works with Ultraviolet and other TompHTTP clients
┌─────────────────────────────────────────────────────────────────────────┐
│ YOUR APPLICATION │
│ (SperaxOS, Ultraviolet, etc.) │
└─────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ OPENBARE CLIENT │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Server Pool │──│ Failover │──│ Discovery │ │
│ │ Manager │ │ Logic │ │ Client │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐
│ Node 1 │ │ Node 2 │ │ Node 3 │
│ (US) │ │ (EU) │ │ (Asia) │
│ Vercel │ │ Cloudflare│ │ Railway │
└───────────┘ └───────────┘ └───────────┘
│ │ │
└───────────────┼───────────────┘
▼
┌───────────────────────────────┐
│ OPENBARE REGISTRY │
│ (Optional - Node Discovery) │
└───────────────────────────────┘
The client can auto-discover nodes from a registry. @openbare/client is a workspace
package in this repo and is not published to npm, so import it from a clone (npm install
at the repo root links every workspace).
No public registry is currently hosted:
registry.openbare.devdoes not resolve while hosting is being migrated. Run your own withnpm run start:registry(see/registry) and pointregistryUrlat it, or skip discovery and list nodes explicitly as shown below.
import { OpenBareClient } from '@openbare/client';
// With your own registry (autoDiscover is off by default)
const client = new OpenBareClient({
registryUrl: 'http://localhost:3000',
autoDiscover: true
});
// Or without a registry, using an explicit node list
const direct = new OpenBareClient({
servers: ['https://openbare.xyz/bare/']
});
// Fetch any URL through the proxy network
const response = await direct.fetch('https://example.com');# Clone the repo
git clone https://github.com/nirholas/openbare.git
cd openbare
# Start the server
cd server
npm install
npm start
# Server running at http://localhost:8080
# Bare endpoint at http://localhost:8080/bare/| Platform | Deploy | Best For |
|---|---|---|
| Cloudflare Workers ⭐ | Deploy to Workers → | Global edge, WebSocket support, free tier |
| Render | render.com | Persistent servers, easy setup |
| Fly.io | fly.io | Global, WebSocket support |
| Self-hosted | Docker → | Full control |
⚠️ Note: Vercel and Railway don't work well for proxy servers (serverless limitations / banned dependencies).
Deploy to 300+ edge locations worldwide with WebSocket support:
cd edge
npm install
npx wrangler login
npx wrangler deployYou'll get a URL like: https://openbare-edge.YOUR_SUBDOMAIN.workers.dev
Live Example: https://openbare.xyz
No prebuilt image is published yet, so build it from server/Dockerfile:
docker build -t openbare ./server
docker run -d \
-p 8080:8080 \
-e NODE_ID=my-node \
-e REGION=us-east \
-e NODE_URL=https://your-public-url.example \
openbareNODE_URL is required when NODE_ENV=production (the image default); the server refuses
to start without it.
cd server
npm install
npm startSee Self-Hosting Guide for detailed instructions.
| Package | Description | Location |
|---|---|---|
| @openbare/server | Node.js bare server with metrics | /server |
| @openbare/client | Client library with failover | /client |
| @openbare/edge | Cloudflare Workers server | /edge |
| @openbare/registry | Node discovery service | /registry |
# Node Identification
NODE_ID=my-bare-node # Unique node ID
REGION=us-east # Geographic region
NODE_URL=https://example.com # Public URL
# Rate Limiting
RATE_LIMIT_MAX=100 # Requests per minute
RATE_LIMIT_WINDOW_MS=60000 # Window size
# Registry (Optional)
REGISTRY_URL=http://localhost:3000 # your own registry; no public one is hosted
# Logging
LOG_LEVEL=info # trace/debug/info/warn/errorSee .env.example for all options.
Every OpenBare node exposes these endpoints:
| Endpoint | Method | Description |
|---|---|---|
/ |
GET | Server info and status |
/bare/ |
* | Bare Server protocol |
/health |
GET | Health check (for load balancers) |
/status |
GET | Detailed metrics |
/info |
GET | Node information |
{
"status": "ok",
"name": "OpenBare Server",
"version": "1.0.0",
"node_id": "us-east-abc123",
"region": "us-east",
"uptime_seconds": 86400,
"requests_served": 150000,
"healthy": true,
"bare_endpoint": "/bare/"
}- Architecture - How OpenBare works
- Self-Hosting - Deployment guide
- API Reference - Full API documentation
- Client Usage - Client library guide
We welcome contributions! See CONTRIBUTING.md for guidelines.
# Clone the repo
git clone https://github.com/nirholas/openbare.git
cd openbare
# Install all workspace dependencies
npm install
# Start server in dev mode
npm run dev:server
# Run tests
npm test- 🌍 Run a public node
- 🐛 Report bugs
- 💡 Suggest features
- 📝 Improve documentation
- 🔧 Submit PRs
OpenBare is designed with security in mind:
- Rate limiting prevents abuse
- Helmet.js sets security headers
- No logging of proxied content
- Registry validation prevents malicious nodes
Report security issues to: security@openbare.dev
Proprietary - Copyright 2026 nirholas. All rights reserved. See the LICENSE file for the full terms.
- TompHTTP - Bare Server protocol
- Ultraviolet - Web proxy framework
- Titanium Network - Proxy community
Made with ❤️ by the OpenBare community
Full documentation site: https://nirholas.github.io/openbare/
- Getting started covers install and first run.
- Examples has copy-paste snippets.