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
- Clone the repository
$ git clone https://github.com/titaniumnetwork-dev/Ultraviolet.git
> Cloning into Ultraviolet...
$ cd Ultraviolet
- Install dependencies
$ npm install
- 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
- This version of Ultraviolet has support for using bare-mux transports, allowing for use for other implementations like EpoxyTransport, CurlTransport, and the existing implementation Bare-Client.
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
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.