Skip to content

Ultraviolet

Ultraviolet is a web proxy used for evading internet censorship or accessing websites in a controlled sandbox. It is designed with security and performance in mind. Ultraviolet intercepts HTTP requests with a service worker, using a BareMux transport.

Ultraviolet offers several features that set it apart from its predecessors, including CAPTCHA and hCAPTCHA support, URL encoding settings for added security, full end-to-end encryption, client-side configuration via service workers, high speed compared to other web proxies, blacklist settings and more for easy hosting, leak prevention, regular updates, and improved resource usage and speed for better setups with a dedicated server instance.

Some of the popular websites that Ultraviolet supports include:

A guide for updating from v2 to v3 can be found here.

Starting from v2, Ultraviolet only supports Bare servers v3+.

If you operate an outdated Bare server, we encourage you to update. If you’re using an outdated Bare server, we encourage you to find an updated Bare server or host your own.

If you can’t do either of the above, you can install an outdated and unsupported version of Ultraviolet.

npm install @titaniumnetwork-dev/ultraviolet@1

This repository can be built, but it can’t be deployed to any services. See Ultraviolet-App for a complete and customizable Ultraviolet setup that you can deploy.

Documentation can be found in the wiki.

  1. Clone the repository
git clone https://github.com/titaniumnetwork-dev/Ultraviolet
cd Ultraviolet
  1. Install dependencies
npm install
  1. Produce the dist/ directory and compile scripts
npm run build

This will provide built files and the JS API to access the path of dist files.

npm install @titaniumnetwork-dev/ultraviolet
  • This version of Ultraviolet has support for Bare server v3
  • Support for older Bare servers was dropped.
  • This version of Ultraviolet fixes an NPM versioning error.
  • This version of Ultraviolet improves error messages.
  • This version of Ultraviolet correctly sets the cache option when making a request.
  • This version of Ultraviolet upgrades @tomphttp/bare-client. As a result, refreshing can fix errors with the Bare metadata being fetched.
  • This version of Ultraviolet fixes a minor bug with blob: URLs.

Massive rework for Ultraviolet! Improvements to resource usage, performance and overall site support. TODO!

This package now targets CommonJS.

In your sw.js script, you MUST import uv.bundle.js then uv.config.js in order. This is because we can no longer hard-code the paths. Ideally, we would import uv.config.js then use the config.bundle path in the serviceworker, however the config is dependant on uv.bundle.js, which we don’t know the location to.

Old:

importScripts("./uv/uv.sw.js");

const sw = new UVServiceWorker();

self.addEventListener("fetch", (event) => event.respondWith(sw.fetch(event)));

New:

+ importScripts('./uv/uv.bundle.js');
+ importScripts('./uv/uv.config.js');
importScripts('./uv/uv.sw.js');

const sw = new UVServiceWorker();

self.addEventListener('fetch', event =>
    event.respondWith(
        sw.fetch(event)
    )
);

You are still required to specify all paths in uv.config.js.

Ultraviolet-Node

The deployable all-in-one bundle for Ultraviolet, a highly sophisticated proxy used for evading internet censorship or accessing websites in a controlled sandbox using the power of service-workers and more!

Deploy to Heroku Run on Replit Deploy on Railway Deploy to Koyeb

If you are deploying to an alternative service or to a server, refer to Deploy via terminal.

Additional information such as customizing your frontend can be found on the wiki.