Radius is a simple and clean web proxy designed for speed and ease-of-use, made in Astro (basead on the origonal Radius Proxy with updated, modernized fetures!).
Astro - Server-side rendering and static site generation
Fastify - HTTP server
Vite - Build system
TailwindCSS - CSS framework
Ultraviolet - Web proxy
Scramjet - Web proxy
Wisp-js - Wisp server and client in JavaScript
Bare-mux - Modular implementation of the Bare client interface
EpoxyTransport Bare-mux transport using epoxy-tls
CurlTransport Bare-mux transport using libcurl.js
Tip
Deploy localy on localhost to have a adress only you can acess, all of the functionaly will remain the same and the site will work properley! To do this, set up with (pnpm) using the staps below and visit http://localhost:8080 for a full conpleate site localy!
Setting Up Raduius is simple and convinent, for (pnpm), run
git clone https://github.com/sriail/Radius
cd Radius
pnpm i
pnpm bstart
# Run pnpm dev instead of pnpm bstart to test in a dev enviroment, The Bare server may have limited functionality
#pnpm devRadius will run on port 8080 by default, or 4321 for a dev environment (pnpm dev).
Caution
The Bare Server WILL NOT WORK using (npm run dev) which will lead to lack of functionality, however the wisp server and basic proxy system will still be functional
And for (npm), run
git clone https://github.com/sriail/Radius
cd Radius
npm install
npm run start
# Run npm run dev instead of npm run start to test in a dev enviroment, The Bare server may have limited functionality
#npm run devRadius can be easily deployed to various platforms with the bundled backend functionality.
For detailed deployment instructions, see DEPLOYMENT.md
Heroku fully supports WebSocket connections and is recommended for production deployments of the site.
Manual deployment:
heroku create your-app-name
git push heroku mainRadius by Defult includes a Dockerfile for containerized deployments:
# Build the Docker image
docker build -t radius .
# Run the container
docker run -p 8080:8080 radiusOr using the Docker Compose below:
version: '3.8'
services:
radius:
build: .
ports:
- "8080:8080"
environment:
- NODE_ENV=production
- PORT=8080
# Optional: Bare server connection limiter settings
# - BARE_MAX_CONNECTIONS_PER_IP=100
# - BARE_WINDOW_DURATION=60
# - BARE_BLOCK_DURATION=30
restart: unless-stoppedAll platforms support the following environment variables:
PORT- The port number to run the server on (default: 8080)
These variables control the rate limiting for the Bare server to prevent abuse while allowing normal browsing (optional but recomended) can be ajusted based on security prefrences and expected usage:
BARE_MAX_CONNECTIONS_PER_IP- Maximum number of concurrent keep-alive connections per IP address (default: 1000)BARE_WINDOW_DURATION- Time window in seconds for counting connections (default: 60)BARE_BLOCK_DURATION- Duration in seconds to block an IP after exceeding the limit (default: 30)
Add this html script into any basic Website builder, it uses QuickDeploy to instantley open in about:blank and will work with ANY WEBSITE BUILDER or STATIC GENERATER/DEPLOYMENT!
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Loading…</title>
<style>
body {
font-family: system-ui, sans-serif;
margin: 2rem;
}
#msg {
max-width: 600px;
line-height: 1.6;
}
:root { color-scheme: light dark; }
</style>
</head>
<body>
<div id="msg">Attempting to open site…</div>
<script>
const targetUrl = "https://studyworkandmore.uk";
let retryTimer = null;
function tryOpen() {
const msg = document.getElementById("msg");
msg.textContent = "Opening Popup, this should only take a few seconds…";
const popup = window.open("about:blank", "_blank");
// If blocked
if (!popup) {
msg.innerHTML = `
<strong>⚠ Pop-up Blocked</strong><br><br>
Your browser blocked the new tab.<br><br>
<strong>Fix:</strong><br>
• Chrome: Click the pop-up blocked icon → “Always allow”, and then confirm<br>
• Firefox: Click “Allow pop-ups” in the yellow bar<br>
• Edge: Same as Chrome<br><br>
Retrying every 3 seconds…
`;
return;
}
// Build contents of the about:blank tab
popup.opener = null;
const html = `
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="referrer" content="no-referrer">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>about:blank</title>
<style>
:root { color-scheme: light dark; }
html, body { height: 100%; margin: 0; }
iframe {
width: 100%;
height: 100%;
border: 0;
}
</style>
</head>
<body>
<iframe
src="${targetUrl}"
allow="camera; microphone; fullscreen; clipboard-read; clipboard-write; geolocation; autoplay; encrypted-media; web-share; *"
allowfullscreen
allowpaymentrequest
loading="eager"
referrerpolicy="no-referrer"
></iframe>
</body>
</html>
`;
// Write to popup
popup.document.open();
popup.document.write(html);
popup.document.close();
// Success → close parent immediately
window.close();
}
// Try immediately
tryOpen();
// Retry every 3 seconds if blocked
retryTimer = setInterval(() => {
tryOpen();
}, 3000);
</script>
</body>
</html>Or vist the official repo (works on any website hosting service or builder, no backend needed!) QuickDeploy
If you can not deploy, visit a example deployment with Radius using QuickDeploy Hear!
sriail - Owner and current dev of this repo
Owski - Owner of the Origonal Radius Proxy
proudparrot2 - Founder and original dev of Radius
MotorTruck1221 - Astro rewrite and lead dev of Radius
All of the contributors!