E5 SingBox Client Form Matrix (UI-first, VLESS baseline)
Дата: 2026-03-09
Статус: active
Владелец: Engineering
1) Что берём из твоего примера
- Берём структуру "блоками", как на скрине:
- базовый блок,
- transport,
- security,
- sniffing,
- advanced toggles.
- Не копируем серверные поля биллинга/лимитов/истечения, потому что это не клиентский outbound.
2) Что исключаем (server-only)
Email, Subscription, Total used, Traffic reset, Expire date, Fallbacks (как серверный inbound list), и прочие учёт/статистика-поля.
3) Клиентская форма (VLESS + Reality) — целевая MVP
3.1 Block A: Profile
| UI field |
JSON path |
Required |
Notes |
| Profile name |
profile.name |
yes |
имя карточки |
| Enabled |
profile.enabled |
yes |
локальный toggle |
| Protocol |
outbound.type |
yes |
для этого шаблона фикс vless |
3.2 Block B: Server/Auth
| UI field |
JSON path |
Required |
Notes |
| Address |
outbound.server |
yes |
домен/IP |
| Port |
outbound.server_port |
yes |
1..65535 |
| UUID |
outbound.uuid |
yes |
vless user id |
| Flow |
outbound.flow |
no |
напр. xtls-rprx-vision |
| Packet encoding |
outbound.packet_encoding |
no |
default none |
3.3 Block C: Transport
| UI field |
JSON path |
Required |
Notes |
| Transport type |
outbound.transport.type |
no |
`tcp |
| Path |
outbound.transport.path |
depends |
для ws/http/httpupgrade |
| Host/Headers |
outbound.transport.headers |
no |
advanced |
| Service name |
outbound.transport.service_name |
depends |
для grpc |
3.4 Block D: Security
| UI field |
JSON path |
Required |
Notes |
| Security mode |
outbound.tls.enabled + outbound.tls.reality.enabled |
yes |
`none |
| SNI |
outbound.tls.server_name |
depends |
для tls/reality |
| uTLS fingerprint |
outbound.tls.utls.fingerprint |
no |
`chrome |
| Reality public key |
outbound.tls.reality.public_key |
depends |
must для reality |
| Reality short id |
outbound.tls.reality.short_id |
no |
обычно короткий hex |
| Insecure |
outbound.tls.insecure |
no |
advanced toggle |
3.5 Block E: Sniffing/Local inbound (опционально)
| UI field |
JSON path |
Required |
Notes |
| Sniffing enabled |
inbounds[*].sniff |
no |
если используем локальный socks inbound в generated config |
| Sniff override destination |
inbounds[*].sniff_override_destination |
no |
advanced |
3.6 Block F: Advanced Dial
| UI field |
JSON path |
Required |
Notes |
| Network |
outbound.network |
no |
`tcp |
| Connect timeout |
outbound.connect_timeout |
no |
duration |
| Bind interface |
outbound.bind_interface |
no |
advanced |
| Routing mark |
outbound.routing_mark |
no |
advanced |
| Multiplex |
outbound.multiplex |
no |
advanced group |
| UDP over TCP |
outbound.udp_over_tcp |
no |
advanced group |
4) Guardrails (обязательные)
CV-001: при security=reality автоматически tls.enabled=true, tls.reality.enabled=true.
CV-002: при security=reality поле reality.public_key обязательно.
CV-003: при transport=grpc поле service_name обязательно.
CV-004: при transport=ws|http|httpupgrade поле path обязательно.
CV-005: address/port/uuid обязательны всегда.
5) UI-компоновка (desktop)
- Compact panel:
Profile,
Server/Auth,
Transport,
Security,
- collapsed
Advanced.
- Actions:
Preview render,
Validate profile,
Apply profile,
History,
Rollback profile.
6) Расширение на другие протоколы
- Сохраняем те же блоки UI, меняются только поля блока
Server/Auth + часть Security/Transport.
- То есть форма будет модульной, а не отдельное "окно под каждый протокол".