New
- Frontend rewrite: React + TypeScript with AntD v6 (#4498)
- Feat/multi inbound clients (#4469)
- feat(bash): prompt for PostgreSQL
- Bulk extend client expiry / traffic + clients page polish (#4499)
- Add SockOpt.Mark and SockOpt.Interface parameters for Outbound stream (#4480) @githacs2022
- Make HSTS policy configurable if https is enabled (#4462) @kayukin
- feat(panel): copy connection strings for
mixedinbound (#4450) @BlackRockSoul - feat(tgbot): add Flow picker when creating a VLESS client
- feat: click QR to copy/save image instead of link text
- feat(clients): add inbound filter + mobile page-size control
Update & improvement
- perf(frontend): lazy-load modals + split heavy vendor chunks (#4501)
- Reduce list-page payloads with slim/paged endpoints (#4500)
- i18n: translate hardcoded inbound action + security warning strings (#4502)
- fix(translation): correct typos and improve phrasing in English localization (#4430) @g3ntrix
- fix: add i18n translations for Allow private address node option across all locales (#4386) @abdalrahmanx9
- docs(readme): add Community Tools section (#4114) @batonogov
- refactor(inbounds): tighten advanced JSON helpers and fix dark-mode subtitles
- refactor: remove legacy advancedJson state
- Bump frontend deps: vue and vite
Bug fixed
- fix(frontend): override browser default background color on autofilled login inputs (#4478) @eric15342335
- ix(clients): drop tombstone gate that blocked re-import after delete
- fix(frontend): resolve lazy chunk URLs against runtime base path
- fix: parse XHTTP extra fields from V2Ray links and v2rayN JSON imports (#4426) @abdalrahmanx9
- fix: prevent online clients from randomly disappearing from panel UI (#4387) @abdalrahmanx9
- fix: correct Hysteria2 Obfs password label to Auth password (#4388) @abdalrahmanx9
- fix: protocol filter placeholder not showing on initial load (#4372) @abdalrahmanx9
- fix(xray): resolve relative log paths under panel log folder
- fix(frontend): stack form fields on mobile in client/inbound/node modals
- fix(sub): use standard sub://BASE64#REMARK scheme for Shadowrocket
- fix(clients): honor global pageSize and widen size-changer dropdown
- fix(migrate): include hysteria, hysteria2, shadowsocks in client sync
- fix(clients): seed all clients when settings.clients has string tgId
- fix(xray): allow private-IP destinations via freedom finalRules
- fix(security): redact at source and cap marshal sizes for CodeQL
- fix(client): guard against int overflow in ClientWithAttachments marshal
- fix(db): redact credentials in client-merge conflict logs
- fix(websocket): order register/unregister via single ops channel
- fix(inbounds): don't delete remote inbound when toggling enable
- fix(outbound): probe UDP-based outbounds over UDP instead of TCP
- fix: disable balancer fallbackTag for random / roundRobin strategies
- fix: split locale chunks by removing eager i18n glob
- fix: Add base-path meta tag for Cloudflare Rocket Loader compatibility
- Remove streamSettings for protocols that don't support it
- fix: remove Auth password
- fix: guard certificate and key against undefined before join
- fix(outbound): restore TLS, QUIC params and TCP masks when importing share links
- fix: preserve TLS cert file paths when deploying inbound to remote node
- fix: also hide QR code for ML-KEM-768 links (too long for QR generation)
- fix(clients): match by email when client identifier is stale
- fix: hide QR code for mldsa65 links (too long for QR generation)
Reports
Full Changelog: v3.0.2...v3.1.0