usque review: WARP MASQUE with SOCKS5, HTTP proxy, and TUN modes
Open-source reimplementation of the Cloudflare WARP client's MASQUE protocol.
At a glance
- What is it?
- usque is an unofficial Go client for Cloudflare WARP that implements MASQUE and Connect-IP, then exposes the tunnel through SOCKS5, HTTP proxy, native TUN, port forwarding, or TCP-only variants. It fits users seeking WARP over MASQUE, but platform testing and some configuration details remain incomplete.
- Who is it for?
- Users who specifically need an unofficial WARP implementation over MASQUE should consider usque after confirming that their platform has a usable binary or that they can build with Go 1.26.3. Users who need a conventional VPN client, broad platform validation, or complete configuration reference should not treat it as a drop-in replacement.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 95 days ago.
- What is it written in?
- Mainly Go, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Star history
- Diniboy1123/usque1,495 ★ · +20
| Repository | 2026-10-16 | 2026-10-23 |
|---|---|---|
| Diniboy1123/usque | 1.5k | 1.5k |
20 Stars in the last 7 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
Why usque exists alongside an official WARP client
usque addresses a specific interface and protocol gap: using Cloudflare WARP through an unofficial client built around MASQUE and Connect-IP rather than through the official client. Its intended users include developers and technically experienced network users who need WARP traffic exposed through a local proxy, a native tunnel device, or forwarded ports. It is also relevant to ZeroTrust users who can provide a team token and need a particular local access mode.
The README describes a broad set of outputs from one tunnel implementation. Applications can connect through SOCKS5 or an HTTP proxy, traffic can enter a native TUN device, ports can be forwarded, and separate TCP-only variants are available for SOCKS5 and HTTP proxying. That selection matters more than the product label. Some applications accept proxy environment variables, while others require routing traffic through a system interface. Usque accommodates both models without making them interchangeable.
The README also discusses censorship circumvention. It does not guarantee that a particular WARP connection will restore access to a blocked service, however. Connectivity still depends on the local network, Cloudflare account state, enrollment status, and the ability to reach Cloudflare endpoints. Usque implements a client path, not a universal availability guarantee.
Its unofficial status is also relevant. The repository is not presented as an official Cloudflare distribution, and Cloudflare protocol or account changes may affect behavior independently of the project's release schedule. The tool is most convincing as an open client implementation with inspectable Go source, explicit modes, and Docker packaging. It is less suitable as a service that promises vendor-supported compatibility across every supported platform.
Connect-IP, MASQUE, and usque's networking components
Usque's central mechanism is Connect-IP carried through Cloudflare WARP's MASQUE mode. The README identifies RFC 9484 as the protocol basis. The module path is `github.com/Diniboy1123/usque`, and `go.mod` declares Go 1.26.3 plus a direct dependency on `github.com/Diniboy1123/connect-ip-go`. The repository also depends on `github.com/quic-go/quic-go`, which aligns with the project's QUIC-oriented design.
The exact repository layout includes separate directories for `api/`, `cmd/`, `config/`, `internal/`, and `models/`, alongside `main.go`. That structure suggests separation among the command interface, API handling, configuration, internal implementation, and data models. The README does not document a packet-level processing sequence, so it would be misleading to claim exactly where registration data, QUIC sessions, IP packets, or proxy requests are transformed. What is documented is the functional flow: registration creates configuration, a command selects how the tunnel is exposed, and local traffic is carried through the MASQUE connection.
Networking dependencies include `gvisor.dev/gvisor`, `github.com/vishvananda/netlink`, `golang.zx2c4.com/wireguard`, and several SOCKS-related packages. Their presence confirms that the project combines user-space networking, platform route management, and proxy implementations. It does not prove that every dependency is used in every mode. For example, a native TUN mode has different platform requirements from a local TCP-only SOCKS listener.
The TCP-only commands are described as faster variants. Since the README gives no benchmark data, the defensible distinction is architectural rather than numerical: they restrict the service to TCP forwarding instead of presenting the broader tunnel behavior. Users requiring UDP should not choose these commands merely because they are described as faster without checking the protocol requirements of their applications.
Installing usque and running a first SOCKS5 proxy
The GitHub releases page provides usque archives for Android `arm64`, Linux `armv5`, `armv6`, `armv7`, `arm64`, and `amd64`, Windows `arm64`, `amd64`, and `386`, and Darwin `arm64` and `amd64`. The README states that only the Linux `amd64` binary was tested. Users of another target should treat binary availability as distribution coverage, not as confirmed platform support.
After extracting an archive, the executable is named `usque`. It can be moved into a directory on `PATH`, although the README does not provide shell-specific commands for editing `PATH`. Building from source requires Go 1.26.3. The repository root contains the main package, so this documented command compiles the client:
CGO_ENABLED=0 go build -ldflags="-s -w" .The build should leave a `usque` executable in the current directory. A fresh setup requires registration because the other commands use the resulting configuration. Run the registration command from the built project:
./usque registerAccording to the README, registration creates a WARP account, registers a device, enrolls a MASQUE private key, and writes a working configuration. Unless Cloudflare returns a rate limit or another error, the command should display `Successful registration`. A default device name can be replaced with `-n`, while ZeroTrust registration uses `--jwt <team-token>`.
After registration, start the straightforward cross-platform SOCKS5 mode:
./usque socksThe command list identifies `socks` as the general SOCKS5 mode and `l4-socks` as the TCP-only alternative. The available command help excerpt does not state the native binary's default listening address, so users should consult `socks --help` rather than assume that it matches the Docker port mapping.
Building and persisting the Docker image
The repository contains a multi-stage `Dockerfile`. Its builder uses `golang:1.26.3-alpine`, downloads the Go modules, copies the project, and creates the executable with linker flags that remove symbols and reduce file size. The runtime stage uses `alpine:latest`, copies the executable to `/bin/usque`, and sets that binary as the entry point. The Dockerfile uses Alpine rather than `scratch` because the build needs a certificate store for Cloudflare connections.
Build the local image with:
docker build -t usque:latest .The README then gives this SOCKS5 example:
docker run -it --rm -p 1080:1080 usque:latest socksThe `-p 1080:1080` mapping exposes container port `1080` on the host at port `1080`, and the final `socks` argument reaches the image's `/bin/usque` entry point. This is a documented starting example, not proof that the container has persistent configuration. Since the CLI uses `config.json` by default, a long-running container needs configuration supplied through the workflow expected by the command, but the README does not show a volume mount or a container-specific registration command. The example also uses `--rm`, which removes the container when it exits.
Docker therefore simplifies packaging but leaves a concrete adoption question unresolved: where does configuration live after registration, and how is it restored when the image is recreated? Users should confirm that workflow before relying on Docker for unattended operation.
TUN, HTTP proxy, port forwarding, and enrollment trade-offs
The `nativetun` command exposes WARP through a native tunnel device and is documented for advanced Linux and Windows users. This mode is appropriate when applications require transparent routing or a system interface rather than SOCKS5 settings. It is also the least portable part of the command set. Native device creation, route changes, and operating-system privileges can fail independently of the MASQUE session, so a successful registration does not prove that TUN setup will work.
The `http-proxy` command supports HTTP proxying with CONNECT, which suits clients that can use an HTTP proxy. `l4-http-proxy` is the TCP-only counterpart, and `l4-socks` provides the same restriction for SOCKS5. The README calls both layer-four variants faster, but it supplies no measurements and does not quantify the trade-off. Their practical advantage is limited scope. That can simplify forwarding, while removing UDP and other protocols required by some applications.
`portfw` forwards selected ports through the MASQUE tunnel rather than acting as a general local proxy. It suits services for which port-specific exposure is preferable. The available command list does not show its flags, so the README's full port-forwarding section or `portfw --help` is the correct place to determine required arguments.
Registration and enrollment serve different purposes. `register` creates a fresh client and enrolls a key. `enroll` re-enrolls an existing key and refreshes configuration from Cloudflare. The README warns that this refresh can overwrite the configuration and advises making backups. It also says ZeroTrust enrollment may update assigned IPv4 and IPv6 addresses, which matters when an outdated IPv6 configuration prevents IPv6 from working.
Limits, maintenance, and the WireGuard alternative
The largest limitation is uneven validation. Usque publishes binaries for several operating systems and architectures, yet the README says only Linux `amd64` was tested. A second limitation is documentation coverage: command names and major modes are clear, but the shown sections do not provide the complete `config.json` schema, native binary proxy defaults, container persistence procedure, or all port-forwarding flags. Automation should not fill those gaps with guesses.
The repository is not archived, and its last push was on 2026-07-20. Releases include `v4.2.1` on 2026-07-20, `v4.2.0` on 2026-06-21, and `v4.1.0` on 2026-06-17. This is recent activity, but it does not amount to a Cloudflare compatibility guarantee. Upgrades can affect Go dependencies, QUIC behavior, configuration, proxy handling, and native networking. Release notes should be reviewed before replacing a working binary.
The README's clearest alternative is WireGuard. The README includes a section comparing usque with WireGuard. Usque instead implements WARP through MASQUE and Connect-IP, then adapts that tunnel to SOCKS5, HTTP proxy, TUN, layer-four proxy, or port-forwarding modes. Choose WireGuard when the standard tunnel model is the requirement. Choose usque when MASQUE is specifically required or when one of its local exposure modes fits an application better.
Usque is licensed under MIT. That permits broad modification and redistribution subject to the license terms, although operators remain responsible for reviewing those terms and the unofficial nature of the client. It is a reasonable open-source client for MASQUE experimentation and selective proxy use, but not a complete substitute for the official WARP client's platform guarantees.
Editorial conclusion
Users who specifically need an unofficial WARP implementation over MASQUE should consider usque after confirming that their platform has a usable binary or that they can build with Go 1.26.3. Users who need a conventional VPN client, broad platform validation, or complete configuration reference should not treat it as a drop-in replacement. The first checks should be registration success in `config.json`, whether the intended proxy mode starts on the chosen platform, and whether the required TUN privileges or route support are available.
Frequently asked questions
Does usque support Linux, Windows, macOS, and Android?
Release archives are provided for Android `arm64`, several Linux architectures, Windows architectures, and Darwin `arm64` and `amd64`. The README says only the Linux `amd64` binary was tested, and users on other platforms are directed to build from source.
How do I register and start a SOCKS5 proxy with usque?
Run `./usque register` to create and enroll a client configuration, then run `./usque socks` to expose the tunnel through SOCKS5. Registration should print `Successful registration` unless Cloudflare returns an error.
Does usque replace WireGuard for tunneled access?
Not in the same protocol sense. usque implements WARP through MASQUE and Connect-IP, and its README explains that an account with WireGuard enabled can migrate to MASQUE through enrollment.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/diniboy1123-usque)Star history chart for your README
[](https://hysenlabs.com/projects/diniboy1123-usque)Was this useful?