Skip to content
/ Radius Public

a simple, sleek, and fast web proxy based on Radius with advanced updates and deployment features

License

Notifications You must be signed in to change notification settings

sriail/Radius

Repository files navigation

Radius

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!).

Tech Stack

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

Setup

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 dev

Radius 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 dev

Deployment

Radius can be easily deployed to various platforms with the bundled backend functionality.

For detailed deployment instructions, see DEPLOYMENT.md

Quick Deployment

Deploy to Heroku

Deploy to Heroku

Heroku fully supports WebSocket connections and is recommended for production deployments of the site.

Manual deployment:

heroku create your-app-name
git push heroku main

Deploy to CodeSandbox

Edit in CodeSandbox

Deploy with Docker

Radius by Defult includes a Dockerfile for containerized deployments:

# Build the Docker image
docker build -t radius .

# Run the container
docker run -p 8080:8080 radius

Or 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-stopped

Environment Variables

All platforms support the following environment variables:

  • PORT - The port number to run the server on (default: 8080)

Bare Server Connection Limiter

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)

Don't Want To Deploy But The Link Is Inexcessable?

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!

Credits

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!