The Official Ultraviolet Proxy GitHub Repository

The canonical source for all ultraviolet proxy code lives on GitHub under the Titanium Network organization. The project is split across several repositories, each handling a distinct part of the stack:

  • Ultraviolet — The core client-side package. Contains the service worker (uv.sw.js), the URL encoder/decoder, and the request rewriting logic that makes the proxy work inside a browser.
  • Ultraviolet-App — A ready-to-deploy Node.js application that wires the core package to a bare/wisp server and an Express frontend. This is the ultraviolet proxy github repository most users clone first.
  • bare-server-node — The HTTP bare server implementation in Node.js. It handles the server-side portion of the proxy tunnel, relaying requests from the service worker to the target site.
  • wisp-server-node — A newer WebSocket-based transport that replaces bare in recent Ultraviolet versions. Faster and more reliable for streaming content.

Starred by thousands of developers, the Ultraviolet ultraviolet proxy github repositories are actively maintained and accept community pull requests. Reading the commit history gives valuable context on why certain design decisions were made — particularly the shift from bare to wisp as the primary transport protocol.

Understanding the Core Ultraviolet Proxy Code

Before forking or modifying anything, understand what each file in the ultraviolet proxy code does:

uv.sw.js — The Service Worker

This is the heart of Ultraviolet. When a user visits your proxy site and enters a URL, the service worker intercepts the fetch event for all requests made by that page. It rewrites each URL through the /service/ prefix, encodes the destination URL using the configured codec (xor or plain), and forwards the modified request to the bare/wisp server. The server fetches the real resource and returns it through the tunnel. From the browser's perspective, all traffic appears to originate from your proxy domain — exactly what bypasses content filters.

uv.bundle.js

This is the compiled, minified version of Ultraviolet's client utilities. It handles URL encoding/decoding, cookie management, and DOM rewriting (injecting the service worker scope into proxied pages). You do not edit this file directly — it is built from the source in the Ultraviolet npm package by running the bundler.

uv.config.js

The single configuration file you do edit. Key options: prefix sets the proxy URL path, bare sets the bare server path, and encodeUrl/decodeUrl let you swap in a custom URL codec if you want to obfuscate proxy URLs differently from the defaults.

Ultraviolet Proxy HTML — Minimal Setup

A pure ultraviolet proxy html approach without a backend Node.js server is technically possible but limited in scope. The HTML and JavaScript assets (uv.bundle.js, uv.sw.js, uv.config.js) can be served as static files from any host — GitHub Pages, Netlify, Cloudflare Pages. However, without a bare or wisp server to relay requests, the service worker has nowhere to send traffic.

The workaround is to point the bare field in uv.config.js to an externally hosted bare server. Several community members host public bare server endpoints, though these can go offline unexpectedly. A minimal ultraviolet proxy html code setup looks like this:

<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Ultraviolet Proxy</title>
  <script src="/uv/uv.bundle.js"></script>
  <script src="/uv/uv.config.js"></script>
</head>
<body>
  <input id="url" type="text" placeholder="Enter URL...">
  <button onclick="go()">Go</button>
  <script>
    if ('serviceWorker' in navigator) {
      navigator.serviceWorker.register('/uv/uv.sw.js', { scope: __uv$config.prefix });
    }
    function go() {
      const url = document.getElementById('url').value;
      location.href = __uv$config.prefix + __uv$config.encodeUrl(url);
    }
  </script>
</body>
</html>

This is the bare-minimum ultraviolet proxy html code. It registers the service worker and redirects the user into the proxied URL space. Without the accompanying static files (uv.bundle.js, uv.sw.js, uv.config.js) it will not function — those files must be present at the paths the config specifies.

Testing with Ultraviolet Proxy CodeSandbox

CodeSandbox supports Node.js projects with a built-in terminal, making it a viable environment for quickly testing ultraviolet proxy codesandbox deployments. Import the Ultraviolet-App repo directly from GitHub using CodeSandbox's GitHub import feature. The sandbox spins up the Node.js server and gives you a preview URL.

Keep in mind that CodeSandbox preview URLs change on each session restart on the free tier, which makes them less suitable for persistent deployment but excellent for development and debugging. If you want to test a specific code change — say, modifying the bare server path or swapping the URL codec — CodeSandbox is faster than deploying to Replit because it reflects file changes instantly without a redeploy step.

Ultraviolet Proxy Generator Tools

Several community-built ultraviolet proxy generator tools exist to scaffold new proxy instances without manually cloning repos and editing config files. These generators typically ask a few questions — your preferred hosting platform, port, bare server URL, and prefix path — and output a ready-to-deploy project folder or a GitHub template link.

The most reliable generators are distributed through the Titanium Network Discord and its affiliated GitHub repositories. Be cautious with third-party generators found on random websites — inspect any generated code before deploying, since bad actors occasionally inject telemetry or traffic-stealing scripts into modified ultraviolet proxy code.

Forking and Contributing to the GitHub Repository

If you want to run a modified version of Ultraviolet or contribute improvements upstream, fork the Ultraviolet-App and core Ultraviolet repositories on GitHub. The contribution process follows standard open-source conventions: fork, branch, commit, pull request. The maintainers review PRs regularly and merge improvements related to performance, compatibility, and new transport protocols.

Areas where community contributions have the most impact: adding support for new content types that the DOM rewriter currently mishandles, improving WebAssembly compatibility inside proxied pages, and extending the URL codec options for stronger obfuscation.

Staying Updated with New Releases

The ultraviolet proxy github repositories use semantic versioning. Watch the releases page of both Ultraviolet and Ultraviolet-App to get notified of major changes. Breaking changes are documented in the release notes — particularly important when the bare-to-wisp migration happened, which required updating both the server component and the client uv.config.js simultaneously.

Update your local installation by running npm update @titaniumnetwork-dev/ultraviolet inside your project directory. After updating, rebuild the UV bundle (npm run build if defined in the scripts) and redeploy. Outdated clients connecting to updated servers — or vice versa — are a frequent cause of a broken ultraviolet proxy setup.

Want to See the Code in Action?

Try the live Ultraviolet Proxy right now — built on the exact open-source code described above.

Launch Live Demo →