Skip to main content

Ultraviolet

Ultraviolet is a highly advanced 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, while adhering to the while using libcurl.js or epoxy-tls with Wisp and is a leader in innovative web proxy technologies.

Features

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 send 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.

Supported Sites

Some of the popular websites that Ultraviolet supports include:

Used by

Upgrading

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

Older Bare servers

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're too lazy to do either of the above, you can install an outdated and unsupported version of Ultraviolet.

npm install @titaniumnetwork-dev/ultraviolet@1

Deployment

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

Documentation can be found in the wiki.

Building

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

I don't care about building, where are the scripts for my website?!

You can extract the scripts from the NPM package in the releases section. All the scripts you would typically look for (uv.bundle.js, uv.handler.js, uv.sw.js, and uv.config.js) are found within the dist directory.

Installation

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

Currently, we don't have an NPM package. As a current solution, you can install from a GitHub release. Copy the link to the .tgz and install using NPM.

$ npm install https://github.com/titaniumnetwork-dev/Ultraviolet/releases/download/v1.0.1/ultraviolet-1.0.1.tgz

## Packaging

This is intended for releasing on hosting the package as a file, not on NPM.

```sh
$ npm pack

Package will be named ultraviolet-X.X.X.tgz

Changelogs

3.0.0

v2.0.0

  • This version of Ultraviolet has support for Bare server v3
  • Support for older Bare servers was dropped.

v1.0.10

  • This version of Ultraviolet fixes an NPM versioning error.

v1.0.8

  • This version of Ultraviolet improves error messages.

v1.0.7

  • This version of Ultraviolet correctly sets the cache option when making a request.

v1.0.6

  • This version of Ultraviolet upgrades @tomphttp/bare-client. As a result, refreshing can fix errors with the Bare metadata being fetched.

v1.0.5

  • This version of Ultraviolet fixes a minor bug with blob: URLs.

v1.0.4

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

v1.0.2

This package now targets CommonJS.

v1.0.1

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.

Deployment

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!

Deployment

Deploy to Heroku Run on Replit Deploy on Railway Remix on Glitch 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.