Enterprise-grade VPN management platform powered by Cloudflare Workers and Cloudflare Pages.
BITS VPN is a modern VPN solution that combines Cloudflare Workers for high-performance tunnel backend with a Nuxt 4 web interface for proxy management. Supports multiple protocols (VLESS, Trojan, Shadowsocks, VMess) with features including subscription API, real-time health monitoring, and multiple export formats.
- Multi-Protocol Support - VLESS, Trojan, Shadowsocks, VMess
- Cloudflare Workers Backend - Serverless tunnel with edge performance
- Modern Web Interface - Nuxt 4 + Vue 3 + Tailwind CSS
- Subscription API - Query parameters for filtering by country, protocol, port
- Real-time Monitoring - Proxy health check with latency display
- Export Formats - Clash, Mihomo, sing-box, raw, provider
- Code Quality - ESLint + Prettier configured, TypeScript
- Auto Updates - Dependabot for dependency updates
| Layer | Technology |
|---|---|
| Frontend | Nuxt 4, Vue 3, Tailwind CSS, Pinia |
| Backend | Cloudflare Workers, KV, Cache |
| Deployment | Cloudflare Pages, Cloudflare Workers |
| Code Quality | ESLint, Prettier, TypeScript |
Cloudflare-VPN/
├── Web/ # Frontend application (Nuxt 4)
│ ├── pages/ # Build, Convert, Monitor pages
│ ├── components/ # Reusable Vue components
│ ├── stores/ # Pinia state management
│ ├── utils/ # Configuration parsers
│ └── public/ # Static assets
│
├── Proxy/ # Backend (Cloudflare Workers)
│ ├── _worker.js # Main worker entry point
│ ├── helper/ # Scanner utilities
│ └── wrangler.toml # Worker configuration
│
└── .github/
└── dependabot.yml # Auto dependency updates
- Node.js 18+
- Cloudflare account
- npm or bun
cd Web
npm install
npm run devAccess development server at http://localhost:3000.
cd Web
npm run buildFrontend to Cloudflare Pages:
cd Web
npm run build
npx wrangler pages deploy .output/public --project-name=bits-vpnBackend to Cloudflare Workers:
cd Proxy
npx wrangler deployOr configure custom domain in wrangler.toml:
routes = [
{ pattern = "vpn.bits.co.id", custom_domain = true }
]GET /api/v1/sub
Query Parameters:
| Parameter | Description | Example |
|---|---|---|
cc |
Country code filter | cc=ID,SG |
format |
Output format | format=clash |
limit |
Proxy limit | limit=10 |
vpn |
Protocol filter | vpn=vless,trojan |
port |
Port filter | port=443 |
domain |
Server domain | domain=zoom.us |
Supported Formats: raw, clash, mihomo, provider, v2ray
GET /api/v1/check?ip=<ip:port>
Returns JSON with proxyip (boolean) and delay (ms).
GET /api/v1/myip
Returns client IP information including IP address, country, city, and ISP.
| Route | Description |
|---|---|
/ |
Landing page |
/build |
Build & manage proxy list |
/convert |
Convert URLs to various formats |
/monitor |
Real-time proxy health monitoring |
Edit profile settings in /build page via Settings modal:
- Server: Target server (default:
support.zoom.us) - Host: VPN host (default:
vpn.bits.co.id) - Protocol: VLESS, Trojan, Shadowsocks, VMess
- TLS: Enable/disable TLS
- Wildcard: Enable subdomain wildcard
Create .env file in Web/ directory:
NUXT_PUBLIC_API_BASE=https://vpn.bits.co.id
NUXT_PUBLIC_GITHUB_PROXY_URL=https://raw.githubusercontent.com/bitscoid/Cloudflare-VPN/refs/heads/main/Proxy/proxyList.txt
NUXT_PUBLIC_FLAG_CDN=https://hatscripts.github.io/circle-flags/flags# Lint code
npm run lint
# Auto-fix lint issues
npm run lint:fix
# Format code with Prettier
npm run format
# TypeScript check (Proxy)
cd Proxy && npm run typecheckMIT License - Feel free to use for personal or commercial purposes.
Built with ☁️ Cloudflare