Rift Hex
Project description
HexRift
Config generator for the Conglomerate distributed proxy network. Takes a topology definition and produces Xray JSON configs and HAProxy configs for every node. Hub nodes additionally support WireGuard and XDNS inbounds.
[!WARNING] HexRift is in active development. Until the
v1.0.0release, the CLI, topology schema, and generated config output may change at any time — breaking changes can land in any release, including patch versions. Pin an exact version (e.g.hexrift==0.8.0) and check the release notes before upgrading.
Installation
uv sync
Usage
All commands require a topology YAML file:
hexrift --yaml conglomerate.yaml <command>
Commands
| Command | Description |
|---|---|
validate |
Validate the topology YAML against the schema |
show |
Visualize the network topology (regions, nodes, users, guests, portals) |
derive [users|groups|nodes|all] |
Show derived identifiers (UUIDs, shortIds, emails) |
nodes [--names|--domains] [--type exit|hub] |
List nodes with hostnames; machine-friendly output for automation |
gen-keys [NODE_ID|--all] [--force] [--keys-dir PATH] |
Generate x25519 + ML-KEM 768 keypairs for nodes |
build [NODE_ID|--all] --xray|--haproxy [--keys-dir PATH] [--out-dir PATH] |
Build Xray config.json and/or HAProxy .cfg |
gen-portal USERNAME [--label LABEL] [--group ID] [--fp FINGERPRINT] [--out-dir PATH] [--keys-dir PATH] |
Build Xray portal client config.json (all portals, or one --label) |
diff NODE_ID [--current-dir PATH] [--keys-dir PATH] |
Diff generated config against deployed config |
share USERNAME [--hub NODE_ID] [--fp FINGERPRINT] [--cdn] [--wg] [--server] [--guest LABEL] [--all-guests] [--bare] [--keys-dir PATH] |
Generate VLESS share URLs or WireGuard client configs (--wg) |
Examples
# Validate topology
hexrift validate
# Visualize topology
hexrift show
# Show all derived identifiers
hexrift derive all
# List all exit node IDs (for scripts)
hexrift nodes --names --type exit
# Generate keys for all nodes
hexrift gen-keys --all
# Build Xray config for a specific node
hexrift build nlA00 --xray --out-dir ./out
# Build all configs (Xray + HAProxy)
hexrift build --all --xray --haproxy --out-dir ./out
# Diff against deployed config
hexrift diff nlA00 --current-dir /etc/xray
# Generate a share link (CDN URL)
hexrift share alice --cdn
# Generate share links for all guests of a user
hexrift share alice --all-guests --bare | clip
# Generate a WireGuard client config
hexrift share alice --wg
Architecture
hexrift/
components/
schema/ # Pydantic models for yaml
derive/ # Identity derivation (UUIDs, shortIds, emails), defaults resolution,
# topology->Xray-fragment construction, and WireGuard derivation/configs
keys/ # x25519 + ML-KEM 768 keypair generation and storage
render/ # Xray config builder + HAProxy Jinja2 templates
core/ # BaseApplication / Component / Controller framework
shared/ # Cross-component helpers (crypto encoding, Xray/xhttp constants)
templates/
haproxy/ # haproxy.cfg.j2
wireguard/ # client.conf.j2
Derivation
All identifiers are deterministically derived from the topology:
NAMESPACE UUID= UUID5(UUID(0), namespace)User UUID= UUID5(NAMESPACE_UUID, username)Server UUID= UUID5(USER_UUID,{username}-server)Portal UUID= UUID5(USER_UUID,{label}-portal)Guest UUID= UUID5(USER_UUID,{label})Hub-exit UUID= UUID5(NAMESPACE_UUID,{hubId}-{exitId})Warp UUID= Hub-exit UUID with 3rd segment replaced byffffGroup shortId= SHA256{groupId}.{namespace}Hub shortId= SHA256{nodeId}.hub.{namespace}Exit shortId= SHA256{nodeId}.exit.{namespace}WireGuard keypair= x25519(HMAC-SHA256(reality_private_key,{identity_uuid}.wireguard.{namespace}))
Keys
Keypairs are stored in keys/{nodeId}.yaml. Hub nodes in the same region share the same keypair. Key strings follow the format:
- Decryption (server inbound):
{method}.{mode}.{session_time}[.{padding}].{PRIVATE_KEY_b64} - Encryption (client outbound):
{method}.{mode}.0rtt.{PUBLIC_KEY_b64}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hexrift-0.9.0.tar.gz.
File metadata
- Download URL: hexrift-0.9.0.tar.gz
- Upload date:
- Size: 157.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
33bbb29c6bafb28fb28dcb7297998614a9087888a6d765db485ba139ef91efea
|
|
| MD5 |
5fe299f956ebaa10e1c61db0f4a13d78
|
|
| BLAKE2b-256 |
ea2673b30cd7877f8f0555e489a24593e6b0cd62436ab89d1830965d999b3733
|
File details
Details for the file hexrift-0.9.0-py3-none-any.whl.
File metadata
- Download URL: hexrift-0.9.0-py3-none-any.whl
- Upload date:
- Size: 68.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dd26f5a80e64d1aaf56041762f69c98b49f8238fcb2d0bebe30a872a2aa9cc1f
|
|
| MD5 |
33b27023559ea3b5548fa13daced79b6
|
|
| BLAKE2b-256 |
12e3c11ca6f79a91cdd51ec42e0da464215740f2ecb24cc7fe7fd66818bcf56b
|