[GH-ISSUE #2498] Feature request: URL scheme for standalone AmneziaWG iOS app (one-tap .conf import) #1125

Open
opened 2026-10-13 20:34:52 +00:00 by bsakaguchi · 1 comment
Owner

Originally created by @PanCrucian on GitHub (Apr 19, 2026).
Original GitHub issue: https://github.com/amnezia-vpn/amnezia-client/issues/2498

Summary

The standalone AmneziaWG iOS app (built from
amnezia-vpn/amneziawg-apple)
currently has no registered URL scheme. Info.plist declares
CFBundleDocumentTypes for .conf (UTI com.wireguard.config.quick,
LSHandlerRank = Owner) and AppDelegate.application(_:open:) handles
incoming file URLs — but with no CFBundleURLTypes entry, iOS will only
route files via the document / share-sheet path, not a custom scheme.

I would like to request a URL scheme (e.g. amneziawg:// or awg://)
that accepts an AmneziaWG config payload and imports it directly,
analogous to the vpn:// handling already used by the main Amnezia VPN
client on Android (see also #1067, which covers vpn:// for the main
client and is a different code path).

Why

Importing a fresh config on iOS today requires either:

  1. Receive the .conf as a file → open it → Share sheet → AmneziaWG
  2. Scan a QR code from inside AmneziaWG

Both work, but both require at least two taps and context switching
out of wherever the config arrived. Android users of the main Amnezia
client get a one-tap vpn:// experience today; iOS users of the
standalone AWG app do not.

Proposed behavior

  1. Register e.g. amneziawg:// in CFBundleURLTypes of
    Sources/WireGuardApp/UI/iOS/Info.plist.
  2. Extend AppDelegate.application(_:open:) (it already accepts any URL)
    to recognize scheme-based payloads and route to the existing import
    path mainVC.importFromDisposableFile(url:) or its inline equivalent.
  3. Payload encoding — either of these would be acceptable:
    • amneziawg://import?config=<base64url-encoded-.conf> (self-contained)
    • amneziawg://import?url=https://.../peer.conf (fetch then import, with
      user confirmation)

Happy to open a draft PR against `amneziawg-apple` if that repo accepts
external contributions (issues are disabled there, so I'm filing here).

Out of scope

  • Universal Links / associated domains (would need `apple-app-site-association`
    hosting, separate discussion).
  • macOS app (same codebase, but starting with iOS where the friction
    is highest).

Platform

  • App: standalone AmneziaWG iOS (not the main Amnezia VPN client)
  • Repo: amnezia-vpn/amneziawg-apple
  • Related: #1067 (different app, different scheme, same spirit)
Originally created by @PanCrucian on GitHub (Apr 19, 2026). Original GitHub issue: https://github.com/amnezia-vpn/amnezia-client/issues/2498 ### Summary The standalone **AmneziaWG** iOS app (built from [amnezia-vpn/amneziawg-apple](https://github.com/amnezia-vpn/amneziawg-apple)) currently has no registered URL scheme. `Info.plist` declares `CFBundleDocumentTypes` for `.conf` (UTI `com.wireguard.config.quick`, `LSHandlerRank = Owner`) and `AppDelegate.application(_:open:)` handles incoming file URLs — but with no `CFBundleURLTypes` entry, iOS will only route files via the document / share-sheet path, not a custom scheme. I would like to request a URL scheme (e.g. `amneziawg://` or `awg://`) that accepts an AmneziaWG config payload and imports it directly, analogous to the `vpn://` handling already used by the main Amnezia VPN client on Android (see also #1067, which covers `vpn://` for the main client and is a different code path). ### Why Importing a fresh config on iOS today requires either: 1. Receive the `.conf` as a file → open it → Share sheet → AmneziaWG 2. Scan a QR code from inside AmneziaWG Both work, but both require at least two taps and context switching out of wherever the config arrived. Android users of the main Amnezia client get a one-tap `vpn://` experience today; iOS users of the standalone AWG app do not. ### Proposed behavior 1. Register e.g. `amneziawg://` in `CFBundleURLTypes` of `Sources/WireGuardApp/UI/iOS/Info.plist`. 2. Extend `AppDelegate.application(_:open:)` (it already accepts any URL) to recognize scheme-based payloads and route to the existing import path `mainVC.importFromDisposableFile(url:)` or its inline equivalent. 3. Payload encoding — either of these would be acceptable: - `amneziawg://import?config=<base64url-encoded-.conf>` (self-contained) - `amneziawg://import?url=https://.../peer.conf` (fetch then import, with user confirmation) Happy to open a draft PR against \`amneziawg-apple\` if that repo accepts external contributions (issues are disabled there, so I'm filing here). ### Out of scope - Universal Links / associated domains (would need \`apple-app-site-association\` hosting, separate discussion). - macOS app (same codebase, but starting with iOS where the friction is highest). ### Platform - App: standalone AmneziaWG iOS (not the main Amnezia VPN client) - Repo: amnezia-vpn/amneziawg-apple - Related: #1067 (different app, different scheme, same spirit)
Author
Owner

@LiqidatoRX commented on GitHub (Oct 2, 2026):

Fully support this idea! 👍
One-tap import via amneziawg:// would be extremely useful, especially for VPN services that automatically generate configurations for users.

It would allow a simple flow: website → “Add to AmneziaWG” → app opens → configuration imported.

This would significantly improve the user experience on iOS. Hope to see this implemented! 🚀

<!-- gh-comment-id:5963340018 --> @LiqidatoRX commented on GitHub (Oct 2, 2026): Fully support this idea! 👍 One-tap import via amneziawg:// would be extremely useful, especially for VPN services that automatically generate configurations for users. It would allow a simple flow: website → “Add to AmneziaWG” → app opens → configuration imported. This would significantly improve the user experience on iOS. Hope to see this implemented! 🚀
Sign in to join this conversation.
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
amnezia-vpn/amnezia-client#1125
No description provided.