Skip to content

Deep Links

Nemu-x edited this page Jul 7, 2026 · 2 revisions

Deep Links (URL schemes)

🌐 English · Русский · 中文

ClashFest can import a subscription straight from a link. Tapping such a link (in a browser, chat, or a panel's "Add to app" button) opens ClashFest, shows a consent dialog, and imports the subscription as a named profile.

Primary scheme — clashfest://

clashfest://installconfig?url=<URL-ENCODED subscription URL>&name=<optional name>
  • url (required) — your subscription URL, percent-encoded.
  • name (optional) — a display name for the imported profile.

Example

Subscription URL:

https://panel.example.com/sub/abc123

Deep link (URL-encoded):

clashfest://installconfig?url=https%3A%2F%2Fpanel.example.com%2Fsub%2Fabc123&name=SwiftVPN

Always URL-encode the url value. Un-encoded ?, &, =, / in the subscription URL will break parsing.

Also supported (compatibility)

For interoperability with other Clash clients, ClashFest also accepts:

Scheme Host
clashfest:// (primary) installconfig or install-config
clash:// installconfig or install-config
clashmeta:// installconfig or install-config

So all of these do the same thing:

clashfest://install-config?url=<encoded>&name=<name>
clash://install-config?url=<encoded>&name=<name>
clashmeta://install-config?url=<encoded>&name=<name>

Prefer clashfest://installconfig for your own service; keep the clash:// form only if you need one link that works across multiple Clash-family apps.

Behaviour & safety

  • Opening a link never imports silently — the user sees a consent dialog naming the subscription before anything is added.
  • The imported profile behaves exactly like one added manually (auto-update, quota, branding, etc.).
  • If ClashFest isn't installed, the link does nothing — host the link behind a normal web page with an install fallback.

For panels / operators

Generate a per-user install link with your panel's template variables:

clashfest://installconfig?url={{SUBSCRIPTION_URL_ENCODED}}&name={{USERNAME}}

Make sure the subscription URL is emitted already percent-encoded by your panel. Pair this with the Operator API headers so the freshly-imported profile is branded on its first fetch.

Related

Clone this wiki locally