Releases: deposist/s-ui-x
s-ui v1.5.10-beta7
Release Notes: v1.5.10-beta7
Release date: 2026-06-25
This beta fixes the Traffic statistics KPI added in v1.5.10-beta6. The dashboard now uses a dedicated traffic summary endpoint that returns exact bucket sums for all inbound traffic in the selected period.
No manual migration is required. The new endpoint reads the existing stats table. Traffic history still depends on Traffic Maximum Age: values above 0 save stats, and 0 disables historical stats.
Traffic statistics KPI
The first Nexus Dashboard KPI now reads from /api/stats/traffic instead of combining per-inbound /api/stats responses in the browser.
The backend groups the selected period into fixed buckets and sums bytes inside each bucket. Download and upload totals are calculated from SUM(traffic), so long ranges no longer inherit the old average-downsampling behaviour from /api/stats.
The summary covers all historical resource = inbound rows for the selected period. This keeps traffic that was already consumed by an inbound even if that inbound was later disabled or removed.
The timeline selector is unchanged: 1 hour, 6 hours, 12 hours, 24 hours, 7 days, and 30 days.
Backend and database
Added GET /api/stats/traffic for dashboard traffic summaries. The existing /api/stats endpoint is unchanged for the older stats modal and other callers.
Added an index on stats(resource, date_time) so the new all-inbound time-range query can use the resource and time filters efficiently on larger databases.
Примечания к релизу: v1.5.10-beta7
Дата релиза: 2026-06-25
Эта beta исправляет KPI Traffic statistics, добавленный в v1.5.10-beta6. Dashboard теперь использует отдельный endpoint статистики трафика, который возвращает точные суммы по bucket'ам для всего inbound-трафика за выбранный период.
Ручная миграция не требуется. Новый endpoint читает существующую таблицу stats. История трафика по-прежнему зависит от Traffic Maximum Age: значения больше 0 включают сохранение stats, а 0 отключает историческую статистику.
KPI статистики трафика
Первый KPI в Nexus Dashboard теперь читает /api/stats/traffic, а не объединяет в браузере ответы /api/stats по отдельным inbound'ам.
Backend делит выбранный период на фиксированные bucket'ы и суммирует байты внутри каждого bucket. Totals для download и upload считаются через SUM(traffic), поэтому длинные периоды больше не наследуют старое average-downsampling поведение /api/stats.
Сводка учитывает все исторические строки resource = inbound за выбранный период. Уже потраченный трафик остаётся в статистике, даже если inbound позже отключили или удалили.
Переключатель периода не изменился: 1 час, 6 часов, 12 часов, 24 часа, 7 дней и 30 дней.
Backend и база данных
Добавлен GET /api/stats/traffic для сводной статистики трафика на Dashboard. Существующий /api/stats endpoint не изменён и остаётся доступен для старого stats modal и других вызовов.
Добавлен индекс stats(resource, date_time), чтобы новый запрос по всем inbound'ам за период мог использовать фильтры resource и date_time на больших базах.
s-ui v1.5.10-beta6
Release Notes: v1.5.10-beta6
Release date: 2026-06-24
This beta continues the Nexus dashboard work from v1.5.10-beta5. It makes the main dashboard cards more even and replaces the local live-traffic sparkline with traffic history from the existing stats API.
No database, API, or sing-box configuration migration is required. Traffic history still uses the existing Traffic Maximum Age setting: values above 0 save stats, and 0 disables historical stats.
Nexus dashboard cards
Top clients now shows up to 10 clients instead of 5. Its height matches System status, and the client table scrolls inside the card, so a longer list no longer stretches the dashboard row.
Recent events now uses the same height as System status. The event list scrolls inside the card when there are more rows than fit in the visible area.
System status is shorter and sized around the 8 values it currently shows: S-UI-X, sing-box, host uptime, sing-box uptime, CPU, memory, disk, and realtime status.
Traffic statistics KPI
The first KPI now shows Traffic statistics instead of Live traffic. The chart uses the existing /api/stats endpoint and aggregates enabled inbound tags for the selected timeline.
The timeline selector covers 1 hour, 6 hours, 12 hours, 24 hours, 7 days, and 30 days. The chart plots download and upload as separate curves and shows selected-period totals in the KPI.
No mock data was added. If Traffic Maximum Age is 0, the backend does not save historical stats, so the chart has no history to show.
Примечания к релизу: v1.5.10-beta6
Дата релиза: 2026-06-24
Эта beta продолжает работу над Nexus Dashboard из v1.5.10-beta5. Основные карточки Dashboard стали ровнее по высоте, а локальная live-traffic кривая заменена историей трафика из существующего stats API.
Миграция базы данных, API или конфигурации sing-box не требуется. История трафика по-прежнему использует существующую настройку Traffic Maximum Age: значения больше 0 включают сохранение stats, а 0 отключает историческую статистику.
Карточки Nexus Dashboard
Top clients теперь показывает до 10 клиентов вместо 5. Высота карточки совпадает с System status, а таблица клиентов прокручивается внутри карточки, поэтому длинный список не растягивает строку Dashboard.
Recent events теперь использует ту же высоту, что и System status. Список событий прокручивается внутри карточки, если строк больше, чем помещается в видимую область.
System status стал ниже и рассчитан под 8 текущих значений: S-UI-X, sing-box, host uptime, sing-box uptime, CPU, memory, disk и realtime status.
KPI статистики трафика
Первый KPI теперь показывает Traffic statistics вместо Live traffic. График использует существующий /api/stats endpoint и агрегирует включённые inbound tags для выбранного периода.
Переключатель периода поддерживает 1 час, 6 часов, 12 часов, 24 часа, 7 дней и 30 дней. График показывает download и upload отдельными кривыми, а KPI выводит totals за выбранный период.
Mock-данные не добавлялись. Если Traffic Maximum Age равен 0, backend не сохраняет исторические stats, поэтому графику нечего показывать.
s-ui v1.5.10-beta5
Release Notes: v1.5.10-beta5
Release date: 2026-06-24
This beta is a frontend release for the Nexus interface. It tightens the dashboard layout, adds two palette families, and moves sing-box Basics into Settings.
No database, API, or sing-box configuration migration is required.
Nexus dashboard
The dashboard layout is denser and more even across the main cards. KPI cards, overview panels, protocol summaries, recent events, system status, and dense tables now use tighter spacing and more consistent alignment.
Top clients no longer looks empty when there are only a few rows. It now shows real summary totals, online count, total client count, compact traffic columns, and a link to the Clients page.
The live traffic KPI now has a local time-window selector for 1 minute, 5 minutes, 30 minutes, 60 minutes, 5 hours, 12 hours, and 24 hours. It uses the existing realtime samples; no mock data was added.
Sidebar status
The Nexus sidebar now uses the S-UI-X name consistently, with a shorter collapsed mark.
The lower-left server status block now shows CPU and RAM percentages when /api/status?r=cpu,mem returns them. If those values are not available, the connection status remains visible without showing stale metrics.
Palettes and light theme
Two Nexus palette families were added: Emerald and Dracula. Both have dark and light variants.
Light Nexus palettes now use darker text and lighter surfaces for better contrast. Dracula Light warning and info colors were adjusted so warning text does not sit on a matching yellow background.
Settings and Basics
Nexus Settings now use card-based sections with more predictable spacing. The Maintenance tab has a two-column layout, and the Config Doctor and panel update cards have more even headers, dividers, and empty states.
The sing-box Basics page is now available as a Settings tab: Basics (Singbox). The old /basics route redirects to /settings?tab=basics, and the Basics menu item was removed from both Nexus and Classic navigation to avoid two entry points for the same settings.
The migrated Basics tab keeps the original Log, NTP, Certificate Trust, Cache File, Debug, Clash API, and V2Ray API controls. The Save button is enabled only when the sing-box config has changed, and the loading state is cleared even if a save fails.
Примечания к релизу: v1.5.10-beta5
Дата релиза: 2026-06-24
Эта бета относится к фронтенду Nexus. В ней уплотнён Dashboard, добавлены две группы палитр, а sing-box Basics перенесён в Settings.
Миграция базы данных, API или конфигурации sing-box не требуется.
Nexus Dashboard
Dashboard стал плотнее и ровнее по основным карточкам. KPI cards, overview panels, protocol summaries, recent events, system status и dense tables теперь используют более аккуратные отступы и одинаковое выравнивание.
Карточка Top clients больше не выглядит пустой при малом числе строк. В ней появились реальные сводные значения, число online-клиентов, общее число клиентов, компактные traffic-колонки и ссылка на страницу Clients.
В KPI live traffic добавлен выбор локального окна: 1 минута, 5 минут, 30 минут, 60 минут, 5 часов, 12 часов и 24 часа. Используются уже доступные realtime samples; mock-данные не добавлялись.
Статус в sidebar
В Nexus sidebar теперь везде используется имя S-UI-X, а collapsed-состояние показывает короткую метку.
Нижний блок server status показывает CPU и RAM в процентах, когда /api/status?r=cpu,mem возвращает эти значения. Если метрики недоступны, статус соединения остаётся видимым без устаревших цифр.
Палитры и светлая тема
Добавлены две группы палитр Nexus: Emerald и Dracula. У каждой есть тёмный и светлый вариант.
Светлые палитры Nexus получили более тёмный текст и более светлые поверхности для лучшей читаемости. В Dracula Light исправлены warning и info цвета, чтобы warning-текст не попадал на похожий жёлтый фон.
Settings и Basics
Nexus Settings теперь разбиты на карточки с более предсказуемыми отступами. Вкладка Maintenance получила двухколоночную раскладку, а карточки Config Doctor и Panel updates получили ровные заголовки, разделители и empty states.
sing-box Basics теперь доступен как вкладка Settings: Basics (Singbox). Старый маршрут /basics ведёт на /settings?tab=basics, а пункт Basics удалён из Nexus и Classic navigation, чтобы у одной страницы не было двух разных входов.
Перенесённая вкладка Basics сохраняет исходные группы Log, NTP, Certificate Trust, Cache File, Debug, Clash API и V2Ray API. Кнопка Save включается только при изменении sing-box config, а loading state сбрасывается даже при неудачном сохранении.
s-ui v1.5.10-beta4
Release Notes: v1.5.10-beta4
Release date: 2026-06-24
This beta fixes session-expiry handling in the frontend and tightens several backend security checks found during release review. It also keeps the small cleanup work from the previous beta branch.
No manual database or configuration migration is required.
Session expiry handling
When a session expired or disappeared, the frontend could show Invalid login and then replace it with Error: CSRF token was not returned. It could also try to call the CSRF-protected logout endpoint while already logged out.
The panel now treats Invalid login as a local logout: it clears local CSRF/auth state and returns to the login page without making a logout request. Repeated invalid-session responses from background polling are collapsed into one notification until the next successful login.
CSRF token loading also preserves backend messages such as Invalid login instead of replacing them with a missing-token error.
API scope fixes
Scoped API tokens now match the documented route matrix:
observabilitytokens can read observability history and core history.telegramtokens can run manual Telegram database backups.- Telegram test remains admin-only.
This fixes 403 responses on routes that already had tests and scope-matrix entries for those narrowed token scopes.
Self-update hardening
The panel self-update path now uses owner-only permissions for the pending-update marker and downloaded staging file. Invalid pending markers are handled explicitly and logged before being reset.
Cleanup after failed update steps now logs unexpected remove errors instead of ignoring them. Security scanner exceptions around controlled self-update file paths now include comments explaining why the paths are safe in this flow.
New regression tests cover:
- tar entries with traversal-looking names being written only to the fixed destination path
- symlink entries being ignored during binary extraction
- owner-only pending marker permissions
- invalid pending marker recovery
Certificate file permissions
Managed IP certificate files are now written as owner-readable only. The private key was already 0600; the certificate chain now uses the same mode because both files live together in the managed certificate directory.
Cleanup
The release also includes small code cleanup from the beta branch:
- removed unnecessary
elseinmain.go - removed obsolete loop variable capture in
api/apiHandler.go - removed a commented-out settings helper
- simplified tautological map allocations in
api/apiService.go
Verification
The following checks pass on the release tree:
go test ./... -count=1golangci-lint run ./...gosec -quiet ./...cd frontend && npm run lintcd frontend && npm testcd frontend && npm run build
This is a beta release. Publish it as a GitHub pre-release and keep it out of the Latest stable slot.
Примечания к релизу: v1.5.10-beta4
Дата релиза: 2026-06-24
Эта бета исправляет обработку истёкшей сессии во фронтенде и закрывает несколько замечаний по безопасности, найденных во время релизной проверки. Также в релиз вошла небольшая очистка кода из текущей beta-ветки.
Ручная миграция базы данных или конфигурации не требуется.
Обработка истёкшей сессии
После истечения или потери сессии фронтенд мог показать Invalid login, а затем заменить это сообщение на Error: CSRF token was not returned. Также он мог попытаться вызвать CSRF-защищённый logout endpoint уже после потери сессии.
Теперь панель обрабатывает Invalid login как локальный выход: очищает локальное CSRF/auth-состояние и возвращает пользователя на страницу входа без запроса logout. Повторные invalid-session ответы от фонового polling сворачиваются в одно уведомление до следующего успешного входа.
Загрузка CSRF-токена теперь сохраняет backend-сообщения вроде Invalid login, а не заменяет их ошибкой об отсутствующем токене.
Исправления API scopes
Scoped API tokens теперь соответствуют зафиксированной матрице маршрутов:
- токены
observabilityмогут читать observability history и core history - токены
telegramмогут запускать ручной Telegram backup базы данных - Telegram test остаётся доступен только admin-токенам
Это исправляет 403 на маршрутах, для которых уже были тесты и записи в scope matrix.
Усиление self-update
Путь self-update теперь использует owner-only права для pending-update marker и staging-файла загрузки. Некорректный pending marker обрабатывается явно: ошибка логируется, счётчик попыток сбрасывается.
Очистка после неудачных шагов обновления теперь логирует неожиданные ошибки удаления, а не игнорирует их. Исключения security scanner для контролируемых путей self-update теперь снабжены пояснениями.
Добавлены regression tests для следующих случаев:
- tar entry с traversal-похожим именем записывается только в фиксированный destination path
- symlink entry игнорируется при извлечении бинаря
- pending marker создаётся с owner-only правами
- некорректный pending marker восстанавливается безопасно
Права файлов сертификатов
Файлы managed IP certificate теперь записываются только для владельца. Private key уже был 0600; certificate chain теперь использует тот же режим, потому что оба файла лежат рядом в managed certificate directory.
Очистка кода
В релиз также вошли небольшие упрощения из beta-ветки:
- убран лишний
elseвmain.go - убран устаревший захват переменной цикла в
api/apiHandler.go - удалён закомментированный settings helper
- упрощены тавтологические map allocation в
api/apiService.go
Проверка
На релизном дереве проходят:
go test ./... -count=1golangci-lint run ./...gosec -quiet ./...cd frontend && npm run lintcd frontend && npm testcd frontend && npm run build
Это beta-релиз. Публикуйте его как GitHub pre-release и не помечайте как Latest stable.
s-ui v1.5.10-beta3
release: v1.5.10-beta3
s-ui v1.5.10-beta2
Release Notes: v1.5.10-beta2
Release date: 2026-06-23
This beta replaces the old RU/ZH preset gallery with a side drawer. The presets now cover both routing and DNS in one place, with a preview step and security warnings before you apply anything.
You do not need a database migration or configuration change. The backend save path is unchanged.
New preset drawer
The previous preset UI was a flat section embedded on the Rules and DNS pages. You picked a preset from a dropdown, chose two outbounds, and applied. It worked, but the three presets overlapped and there was no preview of what would change.
The new drawer opens from a button in both the Rules and DNS pages. RU and ZH are separate cards. Each card has a direction switch: Direct sends regional domains through your direct outbound, Through proxy sends them through your proxy outbound. You pick proxy and direct outbounds once, and both regions share them.
When you click Preview changes, the drawer shows what will be added, what will change, and what custom rules will be kept. If a direction is Through proxy, the preview warns about possible DNS leak and route exposure risk. You can cancel from the preview without saving.
Exceptions
Each region card has an Advanced options section. You can add domain exceptions: domains listed there will not follow the preset direction. Exceptions route to the opposite direction. For example, if RU is set to Through proxy and you add example.ru as an exception, that domain goes direct.
Preset-managed item labels
After applying a preset, the rules tables in both nexus and classic interfaces show which items were created by a preset and which are custom. In nexus mode, a Source column shows a badge. In classic mode, preset-managed items get a chip in the card subtitle.
What changed under the hood
The preset catalog went from three overlapping presets to four: ru-direct, ru-proxy, zh-direct, zh-proxy. Each preset-managed rule set and DNS server uses a deterministic tag name (for example preset-ru-proxy-blocked). The panel does not write custom metadata fields into the sing-box config; it detects and cleans up preset-managed items by tag name only.
RU private ranges always route direct, regardless of the direction you pick. This is a safety constraint: private IP ranges should never go through a proxy.
The old RoutingDnsPresetGallery component is removed.
Upgrade
Upgrade normally. You do not need a manual database migration or configuration change.
This is a beta release. Publish it as a GitHub pre-release and keep it out of the Latest stable slot.
Примечания к релизу: v1.5.10-beta2
Дата релиза: 2026-06-23
Эта бета заменяет старую галерею RU/ZH-пресетов на боковую панель. Пресеты теперь покрывают маршрутизацию и DNS в одном месте, с предпросмотром и предупреждениями о безопасности перед применением.
Миграция базы или изменение конфигурации не требуются. Путь сохранения на бэкенде не изменился.
Новая панель пресетов
Прежний UI пресетов был плоским блоком на страницах Rules и DNS. Вы выбирали пресет из выпадающего списка, указывали два outbound и применяли. Это работало, но три пресета пересекались по функциональности, а предпросмотра изменений не было.
Новая панель открывается кнопкой на обеих страницах, Rules и DNS. RU и ZH оформлены как отдельные карточки. В каждой карточке есть переключатель направления: Direct отправляет региональные домены через direct outbound, Through proxy через proxy outbound. Proxy и direct outbound выбираются один раз и общие для обоих регионов.
При нажатии Preview changes панель показывает, что будет добавлено, что изменится и какие пользовательские правила останутся. Если направление Through proxy, предпросмотр предупреждает о возможной утечке DNS и риске раскрытия маршрута. Из предпросмотра можно отмениться без сохранения.
Исключения
В каждой карточке региона есть раздел Advanced options. Можно добавить доменные исключения: перечисленные домены не будут следовать направлению пресета. Исключения маршрутизируются в обратном направлении. Например, если RU настроен на Through proxy и вы добавили example.ru как исключение, этот домен пойдёт напрямую.
Метки пресет-управляемых элементов
После применения пресета таблицы правил в обоих интерфейсах, nexus и classic, показывают, какие элементы созданы пресетом, а какие вручную. В nexus-режиме в колонке Source стоит бейдж. В classic-режиме у пресет-элементов в подзаголовке карточки стоит метка.
Что изменилось внутри
Каталог пресетов изменился с трёх пересекающихся на четыре: ru-direct, ru-proxy, zh-direct, zh-proxy. Каждый пресет-управляемый rule set и DNS-сервер использует детерминированное имя тега (например preset-ru-proxy-blocked). Панель не записывает нестандартные metadata-поля в конфиг sing-box; она обнаруживает и удаляет пресет-элементы только по именам тегов.
Приватные диапазоны RU всегда маршрутизируются напрямую, независимо от выбранного направления. Это ограничение безопасности: приватные IP-диапазоны не должны идти через proxy.
Старый компонент RoutingDnsPresetGallery удалён.
Обновление
Обновляйтесь обычным способом. Ручная миграция базы или изменение конфигурации не нужны.
Это бета-релиз. Публикуйте его как GitHub pre-release и не помечайте как стабильный.
s-ui v1.5.10-beta1
Release Notes: v1.5.10-beta1
Release date: 2026-06-23
This is the first beta in the 1.5.10 line. It contains the performance fixes from the 2026-06-23 audit: faster stats chart preparation, fewer database reads during a full panel reload, streamed local DB export, safer stats inserts, a short cache for subscription output, and smaller entry chunks in the frontend build.
You do not need to run a database migration or change configuration. The public API and UI behavior stay the same.
Faster dashboard stats
Stats chart downsampling now sorts the rows once and assigns them to buckets in a single pass. Before this release, the code scanned the full result set for every bucket and traffic direction. Large stats windows should take less CPU when the dashboard or /api/stats requests chart data.
Stats writes now use explicit SQLite-safe batches. This avoids oversized insert statements on installations with many clients, inbounds, outbounds, or endpoints.
Lighter /api/load full reloads
The full reload path now reads the settings needed for load data through one request-local snapshot. It no longer repeats several settings queries for the same response.
The backend also reads clients, TLS records, inbounds, outbounds, endpoints, services, and load settings in parallel. These reads are independent, so the response no longer waits for them one by one.
Streamed unencrypted DB export
Unencrypted local database export now streams the prepared SQLite backup file to the HTTP response. It no longer reads the whole backup into memory before sending it to the browser.
Encrypted backup downloads still use the existing whole-payload envelope. That path still buffers plaintext because the current encrypted envelope seals the complete payload at once.
Subscription output cache
Base, JSON, and Clash subscription outputs now use a short TTL cache. The cache is cleared after a successful config save. This reduces repeated link generation when many clients poll subscriptions at the same time, for example after a restart.
Only successful responses are cached. Missing clients and errors are not cached.
Subscription headers are cached with the response for up to 45 seconds. During that window, traffic and userinfo headers can lag behind the latest counters on repeated requests.
Frontend chunks
The frontend build now separates stable vendor chunks for Vue, Vuetify, and HTTP dependencies. The main app entry is smaller, and browsers can reuse vendor chunks more often between releases.
The DateTime picker is lazy-loaded from client modals. Extra Moment locale imports were removed. Moment itself is still present because the current Persian datetime picker depends on moment-jalaali; removing it safely means replacing that picker. Chart.js and YAML were reviewed but left in place because replacing them needs chart and Clash config compatibility checks.
Upgrade
Upgrade normally. No manual database migration or configuration change is needed.
This is a beta release. Publish it as a GitHub pre-release and keep it out of the Latest stable slot.
Примечания к релизу: v1.5.10-beta1
Дата релиза: 2026-06-23
Это первая бета линейки 1.5.10. В ней собраны исправления производительности по аудиту от 2026-06-23: быстрее подготовка графиков статистики, меньше чтений из базы при полном обновлении панели, streaming для локального экспорта БД, безопасные batch-вставки статистики, короткий кеш output подписок и меньший entry chunk во frontend build.
Ручная миграция базы и изменение конфигурации не требуются. Публичное поведение API и UI не менялось.
Быстрее статистика на dashboard
Downsampling для графиков статистики теперь один раз сортирует строки и за один проход раскладывает их по bucket'ам. Раньше код заново сканировал весь результат для каждого bucket и направления трафика. На больших окнах статистики запросы dashboard или /api/stats должны потреблять меньше CPU.
Запись статистики теперь использует явные SQLite-safe batch-вставки. Это защищает крупные установки от слишком больших insert statements при большом числе клиентов, inbounds, outbounds или endpoints.
Легче полный /api/load
Полный reload теперь читает settings, нужные для load data, через один request-local snapshot. Несколько повторных settings-запросов для одного ответа больше не выполняются.
Backend также читает clients, TLS records, inbounds, outbounds, endpoints, services и load settings параллельно. Эти чтения независимы, поэтому ответ больше не ждёт их строго по очереди.
Streaming для незашифрованного экспорта БД
Незашифрованный локальный экспорт базы теперь стримит подготовленный SQLite backup-файл в HTTP-ответ. Он больше не читает весь backup в память перед отправкой в браузер.
Зашифрованные backup downloads пока используют прежний whole-payload envelope. Этот путь всё ещё буферизует plaintext, потому что текущий encrypted envelope шифрует весь payload целиком.
Кеш output подписок
Base, JSON и Clash подписки теперь используют короткий TTL cache. Кеш очищается после успешного сохранения конфигурации. Это уменьшает повторную генерацию ссылок, когда много клиентов одновременно запрашивают подписки, например после рестарта.
Кешируются только успешные ответы. Missing clients и ошибки не кешируются.
Headers подписки кешируются вместе с ответом до 45 секунд. В этом окне traffic и userinfo headers при повторных запросах могут немного отставать от текущих счётчиков.
Frontend chunks
Frontend build теперь отделяет стабильные vendor chunks для Vue, Vuetify и HTTP-зависимостей. Главный app entry стал меньше, а браузеры чаще смогут переиспользовать vendor chunks между релизами.
DateTime picker загружается lazy из client modals. Лишние Moment locale imports удалены. Сам Moment остаётся, потому что текущий Persian datetime picker зависит от moment-jalaali; безопасное удаление требует замены picker. Chart.js и YAML проверены, но оставлены: их замена требует проверки графиков и совместимости Clash config.
Обновление
Обновляйтесь обычным способом. Ручная миграция базы или изменение конфигурации не нужны.
Это beta release. Публикуйте его как GitHub pre-release и не помечайте как Latest stable.
s-ui v1.5.9
Release Notes: v1.5.9
Release date: 2026-06-22
Stable v1.5.9 consolidates v1.5.9-beta1..beta6. No manual database migration
is required.
Changes
- Web self-update from the panel UI. A Panel updates card in
Settings → Maintenance lets administrators check for new releases and
apply updates in one click. Choose between the stable Main and bleeding-edge
Beta channel. Every download is verified against the release SHA-256, and a
failed update is rolled back automatically. All attempts are logged in the
audit trail; the admin password is never logged. - Automatic outbound failover. A new Failover group outbound type tests
its members over HTTPS on an operator-defined interval and switches traffic to
the next healthy backup when the active member stops responding. When the
primary recovers, traffic returns after a short stabilisation delay. If every
member is down, the group falls back to a direct connection. - Security and supply-chain hardening. The TLS builder no longer panics on
mismatched Reality or ECH settings, the installer and self-update verify TLS
certificates,libcronetbinaries and Docker images are pinned by hash and
digest, and GitHub Actions steps are pinned to full commit SHAs. - Reliability fixes. The 1.2→1.3 migration no longer halts on a missing
raw-config row, listen-address fallback is restricted to loopback, auto-logout
is now CSRF-protected POST, and a race between deplete-cron hot-reload and
full core restart was fixed. - Settings UX. Fields show defaults or recommended values as placeholders
with(i)hints for web, subscription, sing-box Basics, and Telegram
settings. Timezone, Clash API mode, and payment currency are proper controls
instead of free-text. Login errors show inline. Routing labels correctly
describe private-IP matching. - Performance. The dashboard stats query uses a matching composite index,
WebSocket broadcasts serialise payloads once per message, and the subscription
server compresses responses. - Nexus interface polish. Failover group editor works in the default
interface, form spacing is consistent across drawers, WireGuard endpoint
editor loads all fields on first open, and(i)hints and field labels are
readable in the dark theme.
Upgrade
Upgrade normally. There is no manual database or configuration migration. The
web self-update is available for installations that run the panel as a systemd
service; other setups update through the terminal menu or s-ui.sh.
Full per-beta history is in CHANGELOG-EN.md, CHANGELOG-RU.md, and
CHANGELOG-ZH.md.
Примечания к релизу: v1.5.9
Дата релиза: 2026-06-22
Стабильная v1.5.9 объединяет v1.5.9-beta1..beta6. Ручная миграция базы
данных не требуется.
Главное
- Веб-обновление из панели. Карточка Обновления панели в разделе
Настройки → Обслуживание позволяет администраторам проверять новые
релизы и применять обновления в один клик. Выбор между стабильным каналом
Main и bleeding-edge Beta. Каждая загрузка сверяется с SHA-256 релиза,
неудачное обновление автоматически откатывается. Все попытки записываются в
журнал аудита; пароль администратора не логируется. - Автоматическое переключение Outbounds. Новый тип Failover group
проверяет участников по HTTPS с заданным интервалом и переключает трафик
на следующий здоровый резерв, когда активный участник перестаёт отвечать.
При восстановлении primary трафик возвращается после короткой задержки
стабилизации. Если недоступны все — группа использует direct-соединение. - Безопасность и цепочка поставок. TLS-сборщик больше не паникует на
несогласованных Reality или ECH настройках, установщик и самообновление
проверяют TLS-сертификаты,libcronetи Docker-образы закреплены по хешу
и digest, шаги GitHub Actions привязаны к полным commit SHA. - Исправления надёжности. Миграция 1.2→1.3 больше не останавливается на
отсутствующей raw-config строке, fallback listen-адресов ограничен loopback,
авто-выход теперь CSRF-защищённый POST, убрана гонка между hot reload из
deplete-cron и полным рестартом ядра. - UX настроек. Поля показывают default/рекомендуемые значения как
placeholder с(i)-подсказками для web, подписок, sing-box Basics и
Telegram. Часовой пояс, режим Clash API и валюта платежей — нормальные
контролы вместо свободного текста. Ошибки входа — inline. Routing labels
корректно описывают матчинг приватных IP. - Производительность. Запрос статистики дашборда использует составной
индекс, WebSocket-рассылки сериализуют payload один раз, сервер подписок
сжимает ответы. - Nexus polish. Редактор failover-групп работает в основном интерфейсе,
межполевые отступы единообразны, редактор WireGuard-эндпойнта загружает
все поля сразу,(i)-подсказки и подписи полей читаемы в тёмной теме.
Обновление
Обновляйтесь обычным образом. Ручной миграции базы или конфигурации нет.
Веб-обновление доступно для установок с systemd-службой; остальные обновляются
через терминальное меню или s-ui.sh.
Полная история beta-релизов остаётся в CHANGELOG-EN.md, CHANGELOG-RU.md и
CHANGELOG-ZH.md.
s-ui v1.5.9-beta6
Release Notes: v1.5.9-beta6
Release date: 2026-06-18
A small follow-up to v1.5.9-beta5.
EN
1. WireGuard endpoint editor now opens reliably
When adding a WireGuard endpoint, the editor could come up showing only the type and tag, with none of the key, address, port, or peer fields — leaving the form unusable until it was closed and reopened. The editor now loads all of its fields reliably every time.
Important: no manual changes to the database, API, or configuration are required to use the new version.
RU
Небольшое дополнение к v1.5.9-beta5.
1. Редактор WireGuard-эндпойнта теперь открывается стабильно
При добавлении WireGuard-эндпойнта редактор иногда открывался, показывая только тип и тег, без полей ключей, адреса, порта и пиров — и форма оставалась нерабочей до повторного открытия. Теперь редактор стабильно загружает все поля при каждом открытии.
Важно: для использования новой версии не требуется вносить ручные изменения в базе данных, API или конфигурации.
s-ui v1.5.9-beta5
Release Notes: v1.5.9-beta5
Release date: 2026-06-17
A small follow-up to v1.5.9-beta4.
EN
1. Cleaner forms in the default interface
The add and edit panels were packed too tightly, so a field's label could touch or overlap the field, heading, or tab above it — most noticeable when adding a client or setting up a failover group. The forms now have proper spacing and read cleanly throughout.
Important: no manual changes to the database, API, or configuration are required to use the new version.
RU
Небольшое дополнение к v1.5.9-beta4.
1. Аккуратные формы в основном интерфейсе
Панели добавления и редактирования были слишком плотными, и подпись поля могла прилегать или перекрывать поле, заголовок или вкладку над ней — заметнее всего при добавлении клиента и при настройке группы отказоустойчивости. Теперь у форм нормальные отступы, и они читаются чисто.
Важно: для использования новой версии не требуется вносить ручные изменения в базе данных, API или конфигурации.