v0.20.3

sleep3r/mtproto.zigv0.20.3May 2, 2026by sleep3r

Upgrading?

AI Summary

v0.20.3 makes Amnezia `vpn://` links first-class inputs for tunnel setup, allowing users to paste links directly into the CLI or interactive wizard without needing a wrapper file.

Key Highlights

  • `vpn://` links are now accepted directly as tunnel config sources.
  • Removed unconditional `fileExists` check that rejected raw links.
  • Increased TUI input buffer to 16 KiB for long share links.
  • Added regression tests for direct `vpn://` installation.

New Features

  • Accept Amnezia vpn links for tunnel setup

Full Release Notes

<details open>
<summary>🇷🇺 Что нового (RU)</summary>

## Что решает этот релиз

Этот релиз закрывает UX-пробел после `v0.20.2`. Tunnel setup уже умел распаковывать Amnezia `vpn://` links, но входной параметр всё ещё воспринимался как путь к файлу: интерактивный мастер просил `.conf`, help показывал `<conf>`, а выполнение проверяло `fileExists` до конвертации. Поэтому прямой вызов вроде `sudo mtbuddy setup tunnel 'vpn://...'` падал с `Config file not found`.

Теперь `vpn://...` — полноценный источник конфигурации для tunnel setup. Ссылку можно вставить напрямую в интерактивном мастере или передать через CLI; обычные WireGuard/AmneziaWG `.conf` файлы продолжают работать как раньше.

> [!NOTE]
> Изменений в пользовательской конфигурации не требуется. Если у вас уже был файл, внутри которого лежит `vpn://...`, он продолжит работать; в `v0.20.3` файл-обёртка больше не обязателен.

## Что изменено

### Tunnel setup: прямой ввод Amnezia `vpn://` ([#222](https://github.com/sleep3r/mtproto.zig/pull/222))

- Источник туннельной конфигурации теперь может быть либо путём к `.conf`, либо самой Amnezia `vpn://` ссылкой.
- Убрана безусловная проверка `fileExists` до нормализации, из-за которой прямые `vpn://` ссылки отбрасывались как несуществующие файлы.
- Для `vpn://` ссылка записывается в целевой `awg0.conf` и проходит существующий pipeline нормализации: декодирование Amnezia link, извлечение AWG/WG конфига, очистка DNS/пустых параметров, `Table = off` и preflight через `awg-quick strip`.
- Для обычных `.conf` файлов сохранено прежнее поведение, но установка теперь идёт через общий путь `installAwgConfigSource` с правами `0600`.
- Сообщения об ошибках разделяют отсутствующий файл, невалидный `vpn://` link и ссылку без AWG-конфига.

### CLI / TUI / документация

- Интерактивный prompt больше не говорит только про путь: теперь это “Конфигурация VPN или ссылка”.
- CLI usage обновлён до `mtbuddy setup tunnel <conf-path-or-vpn-link>`, help — до `<conf|vpn://>`.
- Буфер ввода TUI увеличен до 16 KiB, чтобы длинные Amnezia share links не обрезались при вставке.
- README показывает оба варианта запуска: `/path/to/awg0.conf` и прямой `'vpn://...'`.

### Тесты

- Добавлен regression test на прямую установку из `vpn://`: на выходе в `awg0.conf` лежит уже сконвертированный `[Interface]` / `[Peer]`, а не сырая ссылка.

</details>

---

<details>
<summary>🇬🇧 Release notes (EN)</summary>

## What this release addresses

This release closes a UX gap left after `v0.20.2`. Tunnel setup could already unpack Amnezia `vpn://` links, but the input was still treated as a file path: the interactive wizard asked for a `.conf`, help showed `<conf>`, and execution checked `fileExists` before conversion. As a result, direct usage such as `sudo mtbuddy setup tunnel 'vpn://...'` failed with `Config file not found`.

`vpn://...` is now a first-class tunnel config source. You can paste the link directly in the interactive wizard or pass it through CLI; native WireGuard/AmneziaWG `.conf` files continue to work as before.

> [!NOTE]
> No user configuration changes are required. If you already used a file containing `vpn://...`, that still works; in `v0.20.3`, the wrapper file is no longer required.

## What changed

### Tunnel setup: direct Amnezia `vpn://` input ([#222](https://github.com/sleep3r/mtproto.zig/pull/222))

- The tunnel config source can now be either a `.conf` path or the Amnezia `vpn://` link itself.
- Removed the unconditional `fileExists` check before normalization, which rejected direct `vpn://` links as missing files.
- For `vpn://`, the link is written into the target `awg0.conf` and passed through the existing normalization pipeline: Amnezia link decoding, AWG/WG config extraction, DNS/empty-parameter cleanup, `Table = off`, and `awg-quick strip` preflight.
- Native `.conf` files keep the previous behavior, now through the shared `installAwgConfigSource` path with `0600` permissions.
- Error handling now distinguishes missing files, invalid `vpn://` links, and links that do not contain an AWG config.

### CLI / TUI / docs

- The interactive prompt no longer asks only for a path: it now accepts a VPN config or share link.
- CLI usage is updated to `mtbuddy setup tunnel <conf-path-or-vpn-link>`, and help shows `<conf|vpn://>`.
- The TUI input buffer is increased to 16 KiB so long Amnezia share links are not truncated when pasted.
- README now documents both invocation styles: `/path/to/awg0.conf` and direct `'vpn://...'`.

### Tests

- Added regression coverage for installing directly from `vpn://`: the resulting `awg0.conf` contains the converted `[Interface]` / `[Peer]` config, not the raw link.

</details>

## Changelog

* fix: Accept Amnezia vpn links for tunnel setup ([#222](https://github.com/sleep3r/mtproto.zig/pull/222)) ([4568c6a](https://github.com/sleep3r/mtproto.zig/commit/4568c6a924a42856ee259667f5756c9aa624182f))

Related Repositories