Управление приложением¶
Полная спецификация управления приложением IMSEL VPN через подписку — по схеме, совместимой с большинством известных клиентов. Клиент читает HTTP-заголовки ответа подписки и fallback-строки #param в теле и применяет их к настройкам и поведению.
Параметры действуют при ручном и автоматическом обновлении подписки. Этот справочник — единственный источник описания команд для администраторов подписок.
Как отправляет запросы клиент¶
| Заголовок запроса | Значение |
|---|---|
User-Agent |
IMSEL/<версия>/<ОС>/<hwid> — например, IMSEL/1.0.0/Android/17839452147361875676 (может быть подменён командой change-user-agent; до инициализации используется стандартное fallback-значение для совместимости с панелями) |
X-HWID |
идентификатор устройства — отправляется всегда, отключения нет |
Cookie |
тот же идентификатор устройства (HWID), что и в X-HWID — дублирование, как в других популярных клиентах (cookie: <hwid>) |
x-device-locale |
язык устройства (ru, en, …) |
x-device-os |
платформа (Android, Windows) |
x-ver-os |
версия ОС (14, 10.0.22631, …) |
x-device-model |
модель устройства (23117RA68G, имя ПК на Windows; пустая — заголовок не отправляется) |
Accept / Connection |
*/* / close |
change-user-agent заменяет только User-Agent — заголовки x-device-* и X-HWID продолжают отправляться. Domain Fronting подписочных URL — см. Подписка через домен-фронтинг.
Способы передачи параметров¶
1. HTTP-заголовок ответа (приоритетный):
2. Строка в теле подписки (fallback):
Правила:
- Приоритет: заголовок >
#param-строка. Немаркированные строки не считаются командами; ссылка профиля маршрутизации в первой непустой строке тела обрабатывается отдельно, как описано ниже. - Boolean (тринарная семантика):
true/1→ включить; любое другое непустое значение (0,false) → выключить; отсутствие параметра → сервер не управляет, локальное значение не трогается. - Кодирование: текстовые значения поддерживают префикс
base64:(UTF-8). - Имена телесных строк принимаются в вариантах
with-dashиwithoutdash(#profile-title:и#profiletitle:). - Применение команд — без подтверждения пользователя, при каждом успешном обновлении подписки. Предложение профиля маршрутизации требует отдельного подтверждения пользователя.
- URL-значения для веб-адресов принимаются только со схемой
http:///https://(включая фронтинг-URL); невалидные значения молча отбрасываются. Ссылка профиля вroutingимеет отдельный формат, описанный ниже.
Данные подписки¶
Имя подписки¶
До 25 символов (обрезается). В base64-варианте первая строка — имя, остальные — описание. Альтернативные заголовки: subscription-name, content-disposition (также распознаётся из заголовка-строки).
Описание подписки¶
profile-description: Премиум сервера IMSEL
profile-description: base64:0J/RgNC10LzQuNGF0Lwg0YHQtdGA0LLQtdGA0LAgSU1TRUw=
Показывается мелким текстом в шапке карточки. Имеет приоритет над описанием из base64-profile-title.
Статус (трафик и срок)¶
Трафик в байтах. expire — unix-время в секундах; значения больше 32 000 000 000 трактуются как миллисекунды и конвертируются. total=0 — безлимит (∞). Прогресс-бар: зелёный → оранжевый (≥70%) → красный (≥90%).
Интервал автообновления¶
Часы. > 0 — включить автообновление с этим интервалом (ограничивается диапазоном 1–168 ч); 0 — выключить; отсутствие — не управлять. Интервал применяется и к фоновым задачам автообновления.
Ссылки¶
support-url: https://t.me/imsel_support
profile-web-page-url: https://imsel.dev
premium-url: https://imsel.dev/premium
Кнопки в карточке подписки: поддержка (✈), веб-страница (ℹ), «Премиум» (★, только при наличии premium-url).
Объявление¶
Текст объявления (до 200 символов, обрезается с «…») в рамке в карточке. announce (текст напрямую) имеет приоритет над announce-url: клиент скачивает текст по ссылке (тело — plain или base64:..., тот же таймаут и User-Agent, ошибки молча игнорируются). Устаревший sub-info (текст) работает как alias announce.
Сортировка серверов¶
Собственное расширение IMSEL: сортировка серверов внутри подписки.
Зеркала подписки¶
Первый URL — без метки, каждый следующий — с меткой url:N=, в конце может стоять fallback-url=:
https://cdn.imsel.dev/sub/token#m1?resolve-address=cdn.imsel.dev&host=backend.imsel-api.com
|url:1=https://fallback.imsel.dev/sub/token#m2?resolve-address=fallback.imsel.dev&host=backend.imsel-api.com
|url:2=https://route.imsel.dev/sub/token#m3?resolve-address=route.imsel.dev&host=backend.imsel-api.com
|fallback-url=https://backup.imsel.dev/token
- Позиции: первый URL = позиция
0,url:1= второй URL (позиция1),url:N= позицияN. Диапазон меток: 0–99. - Разделители:
|или перевод строки. - Каждый URL — обычный или фронтинг-URL.
- Немаркированный список (просто URL через
|/\n) тоже принимается — зеркала по порядку. - Зеркала пробуются по порядку до первого успешного ответа; во время загрузки top-баннер показывает позицию (
2/4) и секунды до таймаута. - Если CDN вернул пустое тело с
HTTP 200без данных о подписке и команд, приложение пробует следующий адрес. Непустой ответ неправильного формата не запускает такой переход.
Управление подпиской¶
Смена URL (new-url)¶
Три режима работы по значению:
Одиночный URL — замена только первого зеркала (позиция 0), остальные не трогаются.
Несколько plain URL без меток — полная замена списка (легаси-режим).
new-url: https://primary.imsel.dev/t|url:1=https://secondary.imsel.dev/t|fallback-url=https://reserve.imsel.dev/t
Помеченная структура — точечно по позициям: упомянутые позиции заменяются, fallback-url= записывается в поле запасного адреса, неупомянутые зеркала не меняются. Все URL проходят валидацию схемы; невалидные части отбрасываются.
Применяется начиная со следующего обновления.
Точечные операции с зеркалами (new-url-N)¶
Заголовок new-url-N (N — позиция: 0 — первый URL, 1 — url:1, …) или телесная строка #new-url:N=значение (колон-форма; при нескольких командах используйте каноническую форму с дефисом — одноимённые #new-url: строки перекрывают друг друга):
| Команда | Действие |
|---|---|
new-url-1: https://mirror.imsel.dev/tok#m?resolve-address=mirror.imsel.dev&host=backend.imsel-api.com |
заменить зеркало url:1 целиком |
new-url-3: https://append.imsel.dev/token |
N = количество зеркал → добавить в конец |
new-url-1: 0 (или false) |
удалить зеркало url:1 |
new-url-1: resolve-address=198.51.100.15 |
точечно заменить только resolve-address — домен или IP-адрес |
new-url-0: host=backend.imsel-api.com |
точечно заменить только host (Host-заголовок фронтинга) |
Правила:
- Патч параметра: существующее значение заменяется, отсутствующее — дописывается в фрагмент URL.
- N > количества зеркал («дыра») игнорируется.
- Операция, после которой список опустел бы полностью, отклоняется целиком.
- Порядок применения в одном ответе:
new-url→ точечные замены/удаления → патчи параметров → домены.
Смена домена (new-domain)¶
new-domain — заменяет основной домен (authority) в URL во всех зеркалах. new-domain-N / колон-форма — меняет домен только у зеркала на позиции N. Путь, параметры и метки (query/fragment) сохраняются.
Как работает new-domain с домен-фронтингом (умная синхронизация):
Команда new-domain предназначена только для смены домена-фронта и работает так, чтобы не сломать ваше подключение:
-
Сценарий 1 (Стандартный фронтинг): Допустим, URL был
https://old.com/tok#m?resolve-address=old.com&host=backend.com. Приходит командаnew-domain: new.com. Приложение видит, чтоresolve-addressсовпадал со старым доменом (old.com), и меняет их синхронно. Результат:https://new.com/tok#m?resolve-address=new.com&host=backend.com. (Фронт изменён, настоящийhostне тронут). -
Сценарий 2 (Указан IP): Допустим, URL был
https://old.com/tok#m?resolve-address=1.1.1.1&host=backend.com. Приходит командаnew-domain: new.com. Приложение видит, чтоresolve-address— это IP, а неold.com, поэтому оставляет его как есть. Результат:https://new.com/tok#m?resolve-address=1.1.1.1&host=backend.com.
Как поменять ТОЛЬКО параметр host=?
Команда new-domain никогда не меняет параметр host= (настоящий сервер назначения для CDN). Если провайдеру нужно изменить именно host, используется точечная команда new-url-N (см. пункт выше):
Запасные адреса (fallback-url)¶
fallback-url: https://standby.imsel.dev/token
fallback-url: https://f1.imsel.dev/token#m?resolve-address=f1.imsel.dev&host=backend.imsel-api.com|https://f2.imsel.dev/token
Пробуются по очереди после отказа всех зеркал, включая таймауты и пустые CDN-ответы без данных о подписке. Таймаут задаётся в настройках подписки или приложения. Несколько URL через |/\n; фронтинг-URL разрешены. Встроенный fallback-url= в конце помеченного списка имеет тот же эффект и пробуется первым. Fallback не заменяет список зеркал.
User-Agent (change-user-agent)¶
Подменяет User-Agent для всех запросов этой подписки: зеркала, fallback и скачивание announce-url. Применяется начиная со следующего обновления.
Блокировка настроек и режим защиты (hide-settings)¶
hide-settings: 1 включает режим защиты подписки (снимается только hide-settings: 0, пользователь не может разблокировать вручную):
- Блокировка настроек — всё только для чтения; кнопка блокировки в окне управления неактивна («Заблокировано провайдером»).
- Запрет раздачи — кнопка «Поделиться» и пункт меню скрыты: нельзя создать offline-раздачу (snapshot раздаёт конфиги, URL-режим — сам URL).
- Защита адреса подписки — подписка автоматически помечается «зашифрованной»; выключить этот режим при замке нельзя.
- Ограничение подробности журнала — при замке используется уровень
warning, чтобы не показывать адреса в подробной диагностике. - Конфиги серверов скрыты (кнопки ℹ и «Поделиться QR») — двойная проверка (см. ниже) при замке не проходит никогда.
hide-settings: 0 снимает замок: настройки снова доступны, раздача разрешена, уровень логов возвращается к пользовательскому; шифрование остаётся включённым (выбор пользователя).
Ручная блокировка пользователем — отдельное состояние: влияет только на редактирование настроек, раздачу не запрещает.
Видимость конфигураций серверов (кнопки «Конфиг сервера» ℹ и «Поделиться QR» на строках серверов). По умолчанию для панельных подписок (с URL) кнопки скрыты — строгая двойная проверка открывает их только при одновременном выполнении:
- Проверка 1 (серверная): панель явно прислала hide-settings: 0 в последнем успешном обновлении — активное разрешение, которое истекает, если панель перестала присылать команду;
- Проверка 2 (локальная): подписка не заблокирована и раздача, из которой она создана, не включала «скрыть конфиги».
Всегда видимы (проверки не требуются): ручные серверы, импорт из буфера, подписки из раздачи без «скрыть конфиги».
Per-server исключение — маркер в имени сервера. Для отладки/удобства настройки панели можно открыть конфиг конкретного сервера, добавив маркер в его имя (remark):
Сервер с маркером [server-setting-hide-false] (регистронезависим, положение в имени любое) показывает кнопки ℹ/«Поделиться QR» независимо от запрета на уровне подписки. Маркер автоматически вырезается из отображаемого имени (пользователь видит просто user1). Работает для share-ссылок и JSON-подписок (remarks); снимается удалением маркера из имени при следующем обновлении.
Безопасность скачивания¶
При недоверенном HTTPS-сертификате приложение предлагает отменить загрузку, разрешить одну попытку или разрешить этот сервер. Постоянное разрешение относится к конкретному TLS-адресу, порту и сертификату; новый адрес или другой недоверенный сертификат требует нового подтверждения. В фоне неизвестный сертификат не разрешается автоматически.
Параметр insecure=1 в ссылке — явное исключение проверки для этой ссылки, не для остальных зеркал. Заголовок ответа insecure: 1 не предоставляет такое разрешение. Используйте исключение только если доверяете владельцу сервера: данные могут быть перехвачены или подменены. Разрешение сертификата не отменяет запрет обращения к локальным и служебным адресам.
Уведомления о загрузке¶
Клиент детально сообщает о попытках:
- Всё упало — красное уведомление с полной сводкой:
Ошибка: не удалось загрузить подписку. Попытки: зеркало 1 (cdn.imsel.dev): HTTP 502; зеркало 2 (fallback.imsel.dev): таймаут 15 с; запасной URL (backup.imsel.dev): HTTP 404.Для тотального таймаута добавляется подсказка увеличить таймаут. - Успех через отказоустойчивость — предупреждение:
Подписка обновлена через запасной URL. Недоступны: зеркало 1 (cdn.imsel.dev): таймаут 15 силиПодписка обновлена (не все зеркала доступны: …). - Чистый успех — без уведомлений (только top-баннер прогресса).
Расширенные объявления¶
Инфо-блок sub-info¶
sub-info-color: red
sub-info-text: Продлите подписку со скидкой
sub-info-button-text: Купить
sub-info-button-link: https://imsel.dev/buy
Цветной баннер в карточке. Цвет: red / blue / green (default blue; неизвестные значения → blue). Текст — до 200 символов (обрезается с «…»), кнопка — до 25. Кнопка не показывается без ссылки. Отключение: sub-info-text: 0. Блок скрывается, пока активен баннер истечения (см. ниже).
Баннер истечения sub-expire¶
Системный баннер по параметру expire из subscription-userinfo: за ≤ 3 дней — «Ваша подписка заканчивается через N д.» (или «…сегодня»), после истечения — «Подписка закончилась!». Кнопка «Продлить» открывает ссылку. Имеет приоритет над sub-info-блоком.
Локальные уведомления об истечении (notification-subs-expire)¶
Локальное уведомление раз в день в течение 3 дней до истечения: «У вашей подписки [имя] скоро истечёт срок действия (через N д.), не забудьте продлить её».
Настройки подключения (серверные)¶
Перезаписывают соответствующие настройки карточки подписки и действуют только на её серверы.
Фрагментация TLS¶
fragmentation-enable: 1
fragmentation-packets: tlshello
fragmentation-length: 10-30
fragmentation-interval: 10-30
packets: tlshello / 1 / 1-3 / all; length/interval: диапазон min-max (положительные целые, min ≤ max). Некорректные значения молча отбрасываются (параметр не применяется).
Шумовые пакеты¶
Тип шума: rand / str / hex / base64. Принимаются оба написания — noises-type и noises-packet-type; значение array трактуется как rand. delay — диапазон min-max мс.
DoH-резолв адреса сервера¶
server-address-resolve-enable: 1
server-address-resolve-dns-domain: https://cloudflare-dns.com/dns-query
server-address-resolve-dns-ip: 1.1.1.1
Перед подключением домен сервера резолвится через DNS-over-HTTPS (JSON API, A-записи):
- при нескольких A-записях выбирается IP с минимальным временем TCP-подключения (до 5 кандидатов);
- определение IP не меняет имя сервера, указанное для проверки защищённого соединения;
dns-ip— bootstrap: прямое подключение к IP DoH-сервера с подменённым Host, если домен DoH не резолвится;- по умолчанию (без
dns-domain) используетсяhttps://common.dot.dns.yandex.net/dns-query; - работает для share-ссылок (включая vmess-base64); готовые JSON-конфиги не переписываются;
- ошибка резолва не блокирует подключение — используется исходный домен.
Область действия команд¶
Настройки подключения, зеркала, объявления и поведение относятся к той подписке, которая прислала команды. Серверы других подписок не меняются.
Исключение — глобальная команда subscriptions-collapse: она управляет общим переключателем «Сворачивание списка серверов». Остальные параметры задаются отдельно для каждой подписки. Предложение внешнего профиля маршрутизации не является настройкой подписки: пользователь отдельно подтверждает его импорт, как описано ниже.
Для серверов, добавленных вручную, используются настройки приложения. Для готовых JSON-конфигураций действуют ограничения из отдельного справочника.
Поведение приложения¶
Предложение профиля маршрутизации¶
Провайдер может предложить пользователю внешний профиль маршрутизации при обновлении подписки. Передайте ссылку профиля в HTTP-заголовке ответа:
Либо поместите ту же ссылку в первую непустую строку тела подписки, перед списком серверов:
Если заголовок routing содержит ссылку профиля, он имеет приоритет над ссылкой в теле. Это отдельный формат передачи ссылки, не команда #routing: и не переключатель routing: 1/0.
Приложение предлагает импортировать профиль и применяет его только после подтверждения пользователя. Без подтверждения правила маршрутизации и DNS не меняются. Ссылку можно получить через «Поделиться» на экране «Профили маршрутизации»; подробнее — в руководстве по профилям.
Для ссылки imsel://routing/... поддерживаются формы без команды и с add или onadd перед данными профиля:
<base64> — профиль маршрутизации в Base64. Все три формы предназначены для импорта профиля, а не для выключения маршрутизации или очистки правил.
При вставке, импорте из буфера обмена или сканировании QR-кода также принимаются ссылки <scheme>://routing/<base64>, <scheme>://routing/add/<base64> и <scheme>://routing/onadd/<base64> с любой схемой, кроме http и https. Адресная часть должна быть routing. Это совместимость формата импорта, а не автоматическое открытие приложения: система открывает IMSEL VPN только по imsel://.
Сторонние ссылки копируйте и импортируйте через меню → Импорт из буфера.
Автоподключение¶
Автоматическое подключение при запуске приложения (один раз за холодный старт, если VPN не активен). Критерий выбора сервера: lastused (по умолчанию; ранее выбранный сервер), lowestdelay (после завершения автопинга — минимальная задержка), random.
Скрытие и сворачивание подписки¶
Карточка подписки по умолчанию всегда раскрыта (список серверов виден, тап по шапке не сворачивает). Порядок приоритетов:
- Локальный тумблер «Сворачивание списка серверов» (экран «Настройки подключения», раздел «Соединение») — включён: сворачивание/раскрытие по тапу работает для всех подписок, включая панельные (приоритетнее заголовка);
- Заголовок
subscriptions-hide-enable: 1(per-sub, тринарно): разрешает сворачивание этой подписки по тапу; - Всегда: сворачивание/раскрытие работает для ручных серверов и импорта из буфера — независимо от тумблера и заголовка.
Тумблер «Скрыт с главного» в окне управления доступен всегда, кроме случая, когда подписка в приложении всего одна (главный экран опустел бы); с заголовком subscriptions-hide-enable он не связан. Действие команды — только эта подписка.
Удалённое управление тумблером сворачивания (глобальная команда)¶
Единственная глобальная команда: удалённо выключает (false/0) или включает (true/1) локальный тумблер «Сворачивание списка серверов» (экран «Настройки подключения», раздел «Соединение»). Отсутствующий заголовок не трогает текущий выбор пользователя.
Время применения: при ручном обновлении подписки — мгновенно; после фонового автообновления изменение видно при возврате в приложение или открытии экрана настроек. Принимается и из #param-строки тела: #subscriptions-collapse: false.
Автопинг серверов подписки¶
Значение 1 или true включает автоматическую проверку задержки всех серверов только этой подписки после её успешного обновления. Значение 0 или false выключает её. Проверка выполняется как delay-пинг («реальная задержка»). Само открытие приложения не запускает проверку всей подписки.
В карточке подписки доступен один тумблер «Автопинг серверов». Тумблер и заголовок управляют одной настройкой: последнее действие пользователя или полученный заголовок задаёт собственное включение/выключение этой подписки. Оба значения приоритетнее глобального переключателя приложения; настройки других подписок не влияют на решение.
Глобальный переключатель «Автопинг после обновления подписок» применяется только к подпискам, для которых собственное значение ещё не задано. До первого собственного выбора тумблер отображает действующее значение. Отсутствие заголовка при обновлении не сбрасывает сохранённую настройку.
При открытии приложения с уже работающим VPN проверяется только выбранный активный сервер. После подключения и переключения на другой сервер его задержка проверяется заново, даже если прежний результат уже есть. Эти одиночные проверки не зависят от тумблера подписки, заголовка или глобального переключателя. При выключенном VPN само открытие приложения не запускает пинг выбранного сервера.
Совместимое имя subscription-ping-onopen-enabled поддерживается с тем же смыслом. HTTP-заголовки имеют приоритет над командами #param тела подписки; если один источник содержит оба имени, используется subscription-auto-ping-enable.
Например, при включённом глобальном автопинге явное subscription-auto-ping-enable: 0 выключит проверку подписки A, но не изменит подписку B. При выключенном глобальном автопинге явное 1 включит проверку только подписки A.
Для ручной проверки выбирайте «реальная задержка» кнопкой на карточке подписки или TCP-пинг в её меню; команды управления способом пинга нет (ping-type / check-url-via-proxy не поддерживаются).
В боковом меню приложения откройте «Пинг» для выбора URL проверки и количества одновременных проверок: delay от 1 до 6 (по умолчанию 6), TCP от 1 до 25 (по умолчанию 15). Для каждого типа доступны ползунок и синхронное ручное поле целого числа; некорректное значение или выход за диапазон нужно исправить перед сохранением. «Сохранить» (Save) сохраняет URL и оба числа, «Отмена» (Cancel) закрывает окно без сохранения изменений. Предупреждение: высокая параллельность повышает риск ложных ошибок при проверке доступных серверов.
Sniffing (per-subscription)¶
Анализ трафика (sniffing) задаётся отдельно для серверов этой подписки. В панели управления подпиской рядом с «Настройками подключения» есть кнопка «Sniffing»: окно с тремя переключателями — Sniffing / routeOnly / metadataOnly. Команда sniffing-enable управляет включением Sniffing: 1 — включить, 0 — выключить, отсутствие — не менять.
JSON-подписки: для подписок, где все серверы — готовые JSON-конфиги, кнопка «Sniffing» неактивна (как «Настройки подключения»): JSON-конфиги не модифицируются, sniffing применяется только к share-ссылкам; нажатие показывает уведомление. Команда sniffing-enable для JSON-подписок сохраняется, но на конфиг не влияет.
Автообновление (per-subscription)¶
Управляют тумблерами карточки этой подписки (эко-система):
subscription-auto-update-enable— «Автообновление» (интервальное, 1–168 ч; интервал сохраняется,profile-update-intervalможет задать свой).0— выключить,1— включить. Отложенное фоновое обновление: Если по какой-то причине фоновое обновление не смогло выполниться (например, на устройстве был отключён интернет или ОС заблокировала фоновую задачу), обновление откладывается. При следующем заходе (открытии) в приложение пропущенное обновление будет запущено автоматически. Важно: подписка, скрытая с главного экрана, при открытии приложения автоматически не обновляется — отложенное обновление дождётся следующего фонового окна расписания (фоновое расписание скрытые подписки не исключает) либо ручного обновления.subscription-auto-update-open-enable— «Обновление при открытии»: принудительно обновлять эту подписку при каждом открытии приложения, независимо от интервала. Что считается открытием: запуск приложения и возврат в него после длительного сворачивания; кратковременные прерывания (шторка уведомлений, системный диалог, переключение на другое приложение на пару секунд) новым открытием не считаются. Подписка, скрытая с главного экрана, при открытии не обновляется (ручное обновление из меню подписки остаётся доступным); фоновое интервальное обновление скрытой подписки продолжается по расписанию.
Оба тумблера доступны пользователю в окне управления подпиской («Ещё»); команда и UI пишут одни и те же поля.
Неотключаемый HWID¶
Принимается и сохраняется. В IMSEL X-HWID отправляется всегда (выключателя в приложении нет), поэтому команда фактически закрепляет существующее поведение.
Лимиты памяти ядра¶
Команда пока не меняет работу приложения. Не следует рассчитывать на неё как на способ устранения нехватки памяти.
Описание сервера (serverDescription)¶
Подпись под именем сервера (вместо технического тега «VLESS / WS / TLS»). Добавляется в фрагмент share-ссылки после имени:
Значение — base64 (при невозможности декодирования принимается как plain text). Рекомендуемая длина — до 30 символов. Поддерживается во всех форматах ссылок (vless/vmess/trojan/ss/socks/wireguard/hysteria2) и в JSON-подписках через поле meta.serverDescription.
Время действия параметров¶
Заголовки имеют приоритет над #param-строками. Отсутствующие команды не меняют выбор пользователя.
Данные подписки, баннеры и настройки обновляются при получении ответа. Изменённые URL и User-Agent используются со следующего обновления. Для глобальной subscriptions-collapse время применения указано в её разделе выше.
Сводная таблица параметров¶
| Параметр | Тип | Валидация/лимит |
|---|---|---|
profile-title |
текст / base64: |
≤ 25 симв. (обрезается) |
profile-description |
текст / base64: |
— |
profile-web-page-url, support-url, premium-url |
URL | http/https |
subscription-userinfo |
k=v;… |
байты; expire сек (или мс > 32e9) |
profile-update-interval |
int | часы; clamped 1–168; 0 = выкл |
announce |
текст / base64: |
≤ 200 симв. |
announce-url |
URL | тело ответа ≤ 200 симв. |
subscriptions-sort-type |
enum | without / ping / alphabet |
new-url |
URL / список / структура | http/https; метки url:0–99 |
new-url-N |
URL / 0 / патч |
N = 0–99; патч: resolve-address=<домен\|IP>, host=<домен> |
new-domain, new-domain-N |
домен | N = 0–99 |
fallback-url |
URL / список | http/https |
change-user-agent |
текст | — |
hide-settings |
tri-bool | блокировка + активное разрешение на I/QR (двойная проверка) |
[server-setting-hide-false] |
маркер имени | per-server открытие ℹ/QR конкретного сервера |
sub-info-color |
enum | red / blue / green |
sub-info-text |
текст | ≤ 200 симв.; 0 = отключить |
sub-info-button-text |
текст | ≤ 25 симв. |
sub-info-button-link, sub-expire-button-link |
URL | http/https |
sub-expire |
tri-bool | — |
notification-subs-expire |
tri-bool | — |
subscription-always-hwid-enable |
tri-bool | — |
no-limit-enabled |
tri-bool | сохраняется, не применяется |
fragmentation-enable |
tri-bool | — |
fragmentation-packets |
enum/диапазон | tlshello / 1 / min-max / all |
fragmentation-length, fragmentation-interval |
диапазон | min-max, min ≥ 1 |
noises-enable |
tri-bool | — |
noises-type / noises-packet-type |
enum | rand / str / hex / base64 (array→rand) |
noises-packet |
текст/диапазон | — |
noises-delay |
диапазон | min-max |
server-address-resolve-enable |
tri-bool | — |
server-address-resolve-dns-domain |
URL | http/https |
server-address-resolve-dns-ip |
IPv4 | 4 октета 0–255 |
subscription-autoconnect |
tri-bool | — |
subscription-autoconnect-type |
enum | lastused / lowestdelay / random |
subscription-auto-ping-enable |
tri-bool | собственный автопинг всех серверов подписки; включение и выключение приоритетнее глобального переключателя |
subscription-ping-onopen-enabled |
tri-bool | совместимое имя автопинга подписки |
subscriptions-hide-enable |
tri-bool | сворачивание этой подписки (локальный тумблер приоритетнее) |
subscriptions-collapse |
tri-bool | глобальная: удалённое включение/выключение тумблера «Сворачивание списка серверов» |
sniffing-enable |
tri-bool | per-sub; см. также кнопку Sniffing в окне управления |
subscription-auto-update-enable, subscription-auto-update-open-enable |
tri-bool | per-sub (тумблеры карточки) |
routing |
ссылка imsel://routing/<base64>, imsel://routing/add/<base64> или imsel://routing/onadd/<base64> |
предложение импорта профиля; только с подтверждением пользователя |
Не поддерживается¶
ping-type,check-url-via-proxy— способ пинга управляется только кнопками UI (пинг через ядро / TCP-пинг), URL проверки — пользовательской настройкой;routing: 1/0,autorouting,routing-enable— автоматическое включение/выключение маршрутизации из подписки не поддерживается; ссылка профиля в заголовкеroutingили первой непустой строке тела поддерживается как предложение импорта с подтверждением пользователя;per-app-proxy-enable/-mode/-list,app-auto-start— платформо-зависимые (Android) параметры;socks-auth-*,http-auth-*,tun-type,custom-tunnel-config— desktop-параметры;no-limit-enabled— сохраняется, но не меняет работу приложения;- Provider ID / Premium API (Lite Mode, кастомные темы, баннеры, push) — не реализовано.