# cmliu/workervless2sub architecture

> Architecture diagram of the GitHub repository cmliu/workervless2sub, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/cmliu/workervless2sub
- Repository: https://github.com/cmliu/workervless2sub

## Overview

WorkerVless2sub is a Cloudflare Worker that builds VMess/VLESS/Trojan subscriptions from configured node details and preferred Cloudflare routes. The main workflow accepts a quick or custom subscription request, gathers eligible address sources, assembles nodes, and returns a client format; the Worker also serves a subscription-generation page. The README documents Clash/Sing-box conversion, dynamic UUIDs, and Telegram notifications. The source excerpt is partial, so links for unsampled routing and conversion details are based only on README documentation.

Main entry points: [`_worker.js`](https://github.com/cmliu/workervless2sub/blob/main/_worker.js) (Worker handler), [`socks5Data`](https://github.com/cmliu/workervless2sub/blob/main/socks5Data) (SOCKS5 data), [`addressesapi.txt`](https://github.com/cmliu/workervless2sub/blob/main/addressesapi.txt) (Address feeds), [`addressesipv6api.txt`](https://github.com/cmliu/workervless2sub/blob/main/addressesipv6api.txt) (IPv6 feeds)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_request["Request and UI"]
  node_worker["Worker handler<br/>[_worker.js]"]
  node_webui["Generator page<br/>[_worker.js]"]
  node_request_options["Subscription options<br/>[_worker.js]"]
end

subgraph group_sources["Route sources"]
  node_static_routes["Static routes<br/>[_worker.js]"]
  node_text_feeds["Address feeds<br/>[addressesapi.txt]"]
  node_ipv6_feeds["IPv6 feeds"]
  node_csv_routes["Speed-test routes<br/>[addressescsv.csv]"]
  node_socks_data["SOCKS5 data"]
end

subgraph group_generation["Subscription generation"]
  node_feed_fetch["Feed collection<br/>[_worker.js]"]
  node_csv_filter["CSV filtering<br/>[_worker.js]"]
  node_node_build["Node assembly<br/>[_worker.js]"]
  node_dynamic_uuid["Dynamic UUIDs<br/>[_worker.js]"]
  node_protocol_output["Protocol output<br/>[_worker.js]"]
  node_subscription["Subscription response<br/>[_worker.js]"]
end

subgraph group_integrations["External services"]
  node_converter["Subscription converter"]
  node_geo_lookup["IP geolocation"]
  node_telegram["Telegram bot"]
  node_remote_feeds["Configured remote feeds"]
end

node_user(("Subscriber"))

node_user -->|"requests subscription"| node_worker
node_user -->|"opens generator"| node_webui
node_webui -->|"submits options"| node_worker
node_worker -->|"reads parameters"| node_request_options
node_worker -->|"collects routes"| node_feed_fetch
node_feed_fetch -->|"uses configured entries"| node_static_routes
node_feed_fetch -->|"fetches feeds"| node_remote_feeds
node_remote_feeds -.->|"may serve"| node_text_feeds
node_remote_feeds -.->|"may serve"| node_ipv6_feeds
node_remote_feeds -.->|"may serve"| node_csv_routes
node_feed_fetch -->|"passes CSV rows"| node_csv_filter
node_csv_filter -->|"returns eligible routes"| node_node_build
node_worker -->|"assembles requested nodes"| node_node_build
node_worker -->|"derives UUIDs"| node_dynamic_uuid
node_worker -->|"formats subscription"| node_protocol_output
node_protocol_output -->|"produces response"| node_subscription
node_worker -.->|"requests conversion"| node_converter
node_worker -.->|"looks up IP details"| node_geo_lookup
node_worker -.->|"sends notifications"| node_telegram
node_socks_data -.->|"input role unclear"| node_node_build

click node_worker "https://github.com/cmliu/workervless2sub/blob/main/_worker.js"
click node_webui "https://github.com/cmliu/workervless2sub/blob/main/_worker.js"
click node_request_options "https://github.com/cmliu/workervless2sub/blob/main/_worker.js"
click node_static_routes "https://github.com/cmliu/workervless2sub/blob/main/_worker.js"
click node_text_feeds "https://github.com/cmliu/workervless2sub/blob/main/addressesapi.txt"
click node_ipv6_feeds "https://github.com/cmliu/workervless2sub/blob/main/addressesipv6api.txt"
click node_csv_routes "https://github.com/cmliu/workervless2sub/blob/main/addressescsv.csv"
click node_socks_data "https://github.com/cmliu/workervless2sub/blob/main/socks5Data"
click node_feed_fetch "https://github.com/cmliu/workervless2sub/blob/main/_worker.js"
click node_csv_filter "https://github.com/cmliu/workervless2sub/blob/main/_worker.js"
click node_node_build "https://github.com/cmliu/workervless2sub/blob/main/_worker.js"
click node_dynamic_uuid "https://github.com/cmliu/workervless2sub/blob/main/_worker.js"
click node_protocol_output "https://github.com/cmliu/workervless2sub/blob/main/_worker.js"
click node_subscription "https://github.com/cmliu/workervless2sub/blob/main/_worker.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_worker,node_webui,node_request_options toneBlue
class node_static_routes,node_text_feeds,node_ipv6_feeds,node_csv_routes,node_socks_data toneAmber
class node_feed_fetch,node_csv_filter,node_node_build,node_dynamic_uuid,node_protocol_output,node_subscription toneMint
class node_converter,node_geo_lookup,node_telegram,node_remote_feeds toneRose
class node_user toneIndigo
```

## Components

### Request and UI

- [Worker handler](https://github.com/cmliu/workervless2sub/blob/main/_worker.js): `_worker.js`
- [Generator page](https://github.com/cmliu/workervless2sub/blob/main/_worker.js): `_worker.js`
- [Subscription options](https://github.com/cmliu/workervless2sub/blob/main/_worker.js): `_worker.js`

### Route sources

- [Static routes](https://github.com/cmliu/workervless2sub/blob/main/_worker.js): `_worker.js`
- [Address feeds](https://github.com/cmliu/workervless2sub/blob/main/addressesapi.txt): `addressesapi.txt`
- [IPv6 feeds](https://github.com/cmliu/workervless2sub/blob/main/addressesipv6api.txt): `addressesipv6api.txt`
- [Speed-test routes](https://github.com/cmliu/workervless2sub/blob/main/addressescsv.csv): `addressescsv.csv`
- [SOCKS5 data](https://github.com/cmliu/workervless2sub/blob/main/socks5Data): `socks5Data`

### Subscription generation

- [Feed collection](https://github.com/cmliu/workervless2sub/blob/main/_worker.js): `_worker.js`
- [CSV filtering](https://github.com/cmliu/workervless2sub/blob/main/_worker.js): `_worker.js`
- [Node assembly](https://github.com/cmliu/workervless2sub/blob/main/_worker.js): `_worker.js`
- [Dynamic UUIDs](https://github.com/cmliu/workervless2sub/blob/main/_worker.js): `_worker.js`
- [Protocol output](https://github.com/cmliu/workervless2sub/blob/main/_worker.js): `_worker.js`
- [Subscription response](https://github.com/cmliu/workervless2sub/blob/main/_worker.js): `_worker.js`

### External services

- **Subscription converter**
- **IP geolocation**
- **Telegram bot**
- **Configured remote feeds**

### Other components

- **Subscriber**

## Connections

- Subscriber → Worker handler: requests subscription
- Subscriber → Generator page: opens generator
- Generator page → Worker handler: submits options
- Worker handler → Subscription options: reads parameters
- Worker handler → Feed collection: collects routes
- Feed collection → Static routes: uses configured entries
- Feed collection → Configured remote feeds: fetches feeds
- Configured remote feeds → Address feeds: may serve
- Configured remote feeds → IPv6 feeds: may serve
- Configured remote feeds → Speed-test routes: may serve
- Feed collection → CSV filtering: passes CSV rows
- CSV filtering → Node assembly: returns eligible routes
- Worker handler → Node assembly: assembles requested nodes
- Worker handler → Dynamic UUIDs: derives UUIDs
- Worker handler → Protocol output: formats subscription
- Protocol output → Subscription response: produces response
- Worker handler → Subscription converter: requests conversion
- Worker handler → IP geolocation: looks up IP details
- Worker handler → Telegram bot: sends notifications
- SOCKS5 data → Node assembly: input role unclear
