Skip to content

Releases: proofoftrinity/katacomb-vpn

v1.14.1

Choose a tag to compare

@proofoftrinity proofoftrinity released this 06 Oct 03:43
v1.14.1
dfe2ff8

Katacomb VPN 1.14.1

A desktop client for the Sentinel decentralized VPN network. Pick a node, pay for a
session on-chain, and tunnel through WireGuard, AmneziaWG, OpenVPN, V2Ray, XRAY or
Hysteria2.

1.14.1 is a fixes release. The headline is what happens when a two-hop chain loses one
of its hops: the app now sees it coming, tells you which hop ended, and lets you close
the one that is still open. Also new: a tidier Sessions tab and a speed test that no
longer contacts Google.

Highlights

  • A chain no longer dies silently. The exit hop of a chain reports no usage, so the
    blockchain closes it about two hours after you buy it, while the entry carries on. Until
    now the app did not notice: it kept saying Connected while nothing got through, and the
    notice it eventually showed named the entry node and suggested a reconnect that could
    not work. Now:
    • about 10 minutes before the exit closes, a desktop notification says the chain is
      about to stop;
    • once the exit's time is up, the app tests the tunnel, and if nothing gets through it
      disconnects and says the blockchain closed the exit hop, names that node, and says the
      entry hop is still open, with a button to the Sessions tab. If the tunnel still works,
      it stays connected and tests again a minute later;
    • in local-proxy mode you get the warning, but the app does not test or disconnect,
      because there is no tunnel to test.
  • A chain that has lost a hop gets its own card. It used to be drawn as Ended, with no
    buttons, while its other hop was still open. The Sessions tab now marks it Chain
    broken
    , shows which hop ended and when the blockchain will close the other one on its
    own, and offers End for the open hop and New chain. It no longer offers
    Reconnect, and the tray's Connect no longer tries to rebuild such a chain.
  • Ending a chain yourself no longer looks like a failure. End on a chain cancels two
    sessions, one after the other, and between the two the card briefly read as if a hop had
    broken. It now stays as it was until both are cancelled. If the second cancel fails, the
    card says you ended the first hop and offers End for the rest.
  • The Sessions tab hides ended sessions. An ended session stays on chain for up to two
    hours while it settles, and there is nothing to do with it. It is now hidden behind a
    Show ended box, unchecked by default, with a count of what it hides beside it.
    A chain with an open hop is never hidden.
  • An open chain shows when it will stop. Its card used to read "Expires in X unless the
    nodes report usage", which suggested that using the chain would extend it. It now reads
    "Chain stops in about X, when the blockchain closes the exit hop".
  • The speed test no longer contacts Google. Latency is now timed against
    speed.cloudflare.com, the server the download test tries first, and the status bar
    reads "Latency: N ms" instead of "Google: N ms". It also times a request on a connection
    that is already open, so the figure no longer includes connection setup through a fresh
    tunnel.
  • Nothing else changes. The packaging is the same as in 1.14.0.

Fixes in 1.14.1

  • Multihop: a chain the user ended is not a broken chain
  • Multihop: handle a chain that loses one hop
  • Sessions: hide ended cards behind a Show ended box
  • Speed test: time latency against Cloudflare, not Google

Known limitations

  • A chain has a hard life of about two hours. Measured on mainnet: exit hops report
    no usage to the chain, so the exit's idle deadline is pinned at purchase and never
    moves, even while the entry still has quota. This is node-side behaviour, not a client
    bug, but it is yours to plan around. The app warns you about 10 minutes before the
    exit closes.
  • Chains can only be built from V2Ray and XRAY nodes. The other protocols have no
    equivalent of the relay mechanism a chain needs.
  • Expect roughly 2 to 3 MB/s and a large latency increase on a chain. Chains are for
    privacy, not speed.
  • Without systemd-resolved, a missing resolvconf still shows up after you pay. The
    app cannot safely install one on such a system, so a WireGuard or AmneziaWG connection
    there pays first, then offers Retry without VPN DNS on the same session, which sends
    your DNS queries outside the tunnel. To avoid it, set up a resolvconf provider such as
    openresolv the way your distribution documents.
  • Local-proxy mode tunnels only the apps you point at its SOCKS address. Everything else
    leaks, by design, and the kill switch does not apply.
  • A node that does not sign its handshake reply can be impersonated, and today that
    is nearly every node. The TLS and Reality wrapping does not authenticate the node, and
    there is nothing on chain to check its certificate against, so an attacker on your
    local network can answer the handshake in its place. A node reported at dvpnd 9.4 or
    later is required to sign, which closes this for it, but almost no node runs that
    version yet.
  • The wallet link check sees direct transfers only. Two wallets funded from the same
    third account of yours are still linked on chain, and the review cannot tell.

Platform support

Linux x86_64 only. Tested on Debian 11+, Ubuntu 20.04+, and derivatives (Mint,
Pop!_OS, Zorin). The packaging is unchanged since 1.11.2, whose .deb and AppImage were
checked on a clean Ubuntu 24.04 desktop, the .deb in containers on Debian 12 and 13 and
Ubuntu 22.04, 24.04 and 26.04, and the AppImage in containers on those and Fedora 44.

Installation

Recommended: .deb

sudo apt install ./katacomb-vpn_1.14.1_amd64.deb

Installs a root daemon, so connect and disconnect never prompt for a password. It needs
one log out and log back in after the first install before that takes effect.

Alternative: AppImage

chmod +x katacomb-vpn-1.14.1.AppImage
./katacomb-vpn-1.14.1.AppImage

No install needed. The first connection that needs the VPN helper installs it, with one
password prompt. After that each privileged operation prompts for a password, cached for
a few minutes.

Verifying your download

sha256sum -c SHA256SUMS --ignore-missing
gpg --verify SHA256SUMS.asc SHA256SUMS

Signed with key 740A F267 B0D8 162B E477 779D 7315 246A 6E67 F3C6. Import it first if
you have not already:

curl -sS https://github.com/trinitystake.gpg | gpg --import

Important

  • Connecting spends real funds. Sessions are blockchain transactions priced in
    udvpn, and a failed connection is refunded automatically, but an expired one is not.
  • The AppImage needs a fusermount before it starts, which stock desktops already
    have. If command -v fusermount3 fusermount prints nothing, install fuse3; on Arch,
    nss too. AppImageLauncher 2.2.0 cannot start it: upgrade to 3.0 or remove it. The
    APPIMAGE_EXTRACT_AND_RUN=1 workaround avoids needing FUSE. See the README.
  • AppImage on Ubuntu 24.04+ runs with the Chromium sandbox disabled. An AppImage can
    install neither an AppArmor profile nor a SUID sandbox helper, so prefer the .deb there.

Security model

Node operators are treated as adversaries. Everything a node sends is validated before it
reaches a privileged operation, because a VPN config can otherwise run shell commands as
root. See CLAUDE.md
for the full threat model and architecture.

License

GPL-3.0-or-later. Bundled binaries (v2ray, xray, hysteria) and the libraries compiled
into the app and its VPN helper are under their own licenses, whose texts ship in the
packages. See
THIRD-PARTY-LICENSES.md.

v1.14.0

Choose a tag to compare

@proofoftrinity proofoftrinity released this 05 Oct 12:06
v1.14.0
1ed0e10

Katacomb VPN 1.14.0

A desktop client for the Sentinel decentralized VPN network. Pick a node, pay for a
session on-chain, and tunnel through WireGuard, AmneziaWG, OpenVPN, V2Ray, XRAY or
Hysteria2.

1.14.0 makes multi-hop private by default. A chain's two hops must now be in different
countries and on different networks, and the exit is paid from a second wallet, with no
way to override either. The connect windows, the Multi-hop picker and the connection bar
are redesigned.

Highlights

  • A chain's two hops must be apart. The entry and the exit must be in different
    countries, on different networks (ASNs) and in different address blocks, and must not
    share a domain. The old "build it anyway" option is gone: one hosting company, or one
    country's courts, could otherwise see both ends of your chain. A node the node list
    gives no country or network for cannot be used in a chain. When this was measured,
    about one pair in five failed the rule.
  • A chain needs a second wallet. A session records the account that paid for it, and
    that record is public, so with one wallet either node could look up the other hop. The
    exit is now always paid from a second wallet. If you have only one, the review shows
    how to set one up: derive an account or add a wallet in Settings, then fund it from
    somewhere that never touched your main wallet. The app never moves funds between your
    wallets, because that transfer would be public too.
    • A transfer between the two wallets now stops the purchase instead of only warning.
      If your RPC endpoint cannot check (some keep no transaction index), the review says
      so in amber and lets you continue; it never reports that as clean.
    • Each wallet is checked against its own hop: the entry against your active wallet,
      the exit against the second one. The review used to compare the total with your
      active wallet alone.
  • One review window for every connection. Connecting from Nodes, Plans or Multi-hop
    now shows the same layout: the route as a picture (your device, the node or nodes, the
    internet, and what each one sees), the checks with a fix beside each, one line per
    payment naming the wallet that pays it, the limits, and a footer that always names
    what is stopping Pay. The route stays on screen while it connects and if it fails.
    • A single-hop connection now says plainly that the node sees both your IP and the
      sites you visit, with a link to Multi-hop.
    • A chain's review states before you pay that the exit closes about 2 hours after you
      buy it, and warns if you are buying more hours than that.
  • A new Multi-hop picker. The route is one bar at the top: you, the entry, the exit,
    the internet. Every node row has Entry and Exit buttons, so a node goes straight into
    either hop. A row that cannot be used next to your other hop says why ("same country",
    "same network"), Swap exchanges the two hops when both nodes can serve either role,
    and Pick for me fills both in one click. A small map shows where the two hops are; it
    never shows where you are, which the app does not look up. The bar replaces four rows
    of controls, so the table has more room.
  • Nodes too old to check are no longer listed on the Multi-hop tab. Nodes older than
    9.0.0 publish nothing the app can check before you pay, so they could never be picked,
    and they were about a quarter of the list. Searching for one tells you why it is not
    there. They are still on the Nodes tab.
  • Signed Nodes Only is gone; a node that signs must sign. If the node list reports a
    node at dvpnd 9.4 or later, an unsigned handshake reply from it is refused, before you
    pay where the node can be asked first and with a refund otherwise, so nobody can strip
    its signature and pose as it. Other nodes are accepted unsigned, as before. If you had
    the setting on, those nodes are no longer refused; the Signed filter on the Nodes tab
    still lists only the nodes that sign. Today 3 of about 1,800 active nodes report 9.4,
    and none of them is a V2Ray or XRAY node.
  • A connection capsule in the header. While connected, the header shows the node (or
    both hops of a chain), the protocol, a teal key when the node's signature was verified,
    and your exit IP; click it for the details. Disconnect is a labelled button beside it.
    In the node list, a grey key marks nodes whose reported version signs: grey is what the
    node list claims, teal is what this app checked.
  • Sessions cards start with the route, so each one shows where its traffic enters and
    where it leaves.
  • Nothing else changes. The packaging is the same as in 1.13.0.

Fixes in 1.14.0

  • Multi-hop private by default; one review design; a route-bar picker
  • Header: a connection capsule, one owner for the exit IP

Known limitations

  • A chain has a hard life of about two hours. Measured on mainnet: exit hops report
    no usage to the chain, so the exit's idle deadline is pinned at purchase and never
    moves, even while the entry still has quota. This is node-side behaviour, not a client
    bug, but it is yours to plan around.
  • Chains can only be built from V2Ray and XRAY nodes. The other protocols have no
    equivalent of the relay mechanism a chain needs.
  • Expect roughly 2 to 3 MB/s and a large latency increase on a chain. Chains are for
    privacy, not speed.
  • Without systemd-resolved, a missing resolvconf still shows up after you pay. The
    app cannot safely install one on such a system, so a WireGuard or AmneziaWG connection
    there pays first, then offers Retry without VPN DNS on the same session, which sends
    your DNS queries outside the tunnel. To avoid it, set up a resolvconf provider such as
    openresolv the way your distribution documents.
  • Local-proxy mode tunnels only the apps you point at its SOCKS address. Everything else
    leaks, by design, and the kill switch does not apply.
  • A node that does not sign its handshake reply can be impersonated, and today that
    is nearly every node. The TLS and Reality wrapping does not authenticate the node, and
    there is nothing on chain to check its certificate against, so an attacker on your
    local network can answer the handshake in its place. A node reported at dvpnd 9.4 or
    later is required to sign, which closes this for it, but almost no node runs that
    version yet.
  • The wallet link check sees direct transfers only. Two wallets funded from the same
    third account of yours are still linked on chain, and the review cannot tell.

Platform support

Linux x86_64 only. Tested on Debian 11+, Ubuntu 20.04+, and derivatives (Mint,
Pop!_OS, Zorin). The packaging is unchanged since 1.11.2, whose .deb and AppImage were
checked on a clean Ubuntu 24.04 desktop, the .deb in containers on Debian 12 and 13 and
Ubuntu 22.04, 24.04 and 26.04, and the AppImage in containers on those and Fedora 44.

Installation

Recommended: .deb

sudo apt install ./katacomb-vpn_1.14.0_amd64.deb

Installs a root daemon, so connect and disconnect never prompt for a password. It needs
one log out and log back in after the first install before that takes effect.

Alternative: AppImage

chmod +x katacomb-vpn-1.14.0.AppImage
./katacomb-vpn-1.14.0.AppImage

No install needed. The first connection that needs the VPN helper installs it, with one
password prompt. After that each privileged operation prompts for a password, cached for
a few minutes.

Verifying your download

sha256sum -c SHA256SUMS --ignore-missing
gpg --verify SHA256SUMS.asc SHA256SUMS

Signed with key 740A F267 B0D8 162B E477 779D 7315 246A 6E67 F3C6. Import it first if
you have not already:

curl -sS https://github.com/trinitystake.gpg | gpg --import

Important

  • Connecting spends real funds. Sessions are blockchain transactions priced in
    udvpn, and a failed connection is refunded automatically, but an expired one is not.
  • The AppImage needs a fusermount before it starts, which stock desktops already
    have. If command -v fusermount3 fusermount prints nothing, install fuse3; on Arch,
    nss too. AppImageLauncher 2.2.0 cannot start it: upgrade to 3.0 or remove it. The
    APPIMAGE_EXTRACT_AND_RUN=1 workaround avoids needing FUSE. See the README.
  • AppImage on Ubuntu 24.04+ runs with the Chromium sandbox disabled. An AppImage can
    install neither an AppArmor profile nor a SUID sandbox helper, so prefer the .deb there.

Security model

Node operators are treated as adversaries. Everything a node sends is validated before it
reaches a privileged operation, because a VPN config can otherwise run shell commands as
root. See CLAUDE.md
for the full threat model and architecture.

License

GPL-3.0-or-later. Bundled binaries (v2ray, xray, hysteria) and the libraries compiled
into the app and its VPN helper are under their own licenses, whose texts ship in the
packages. See
THIRD-PARTY-LICENSES.md.

v1.13.0

Choose a tag to compare

@proofoftrinity proofoftrinity released this 03 Oct 06:05
v1.13.0
8496948

Katacomb VPN 1.13.0

A desktop client for the Sentinel decentralized VPN network. Pick a node, pay for a
session on-chain, and tunnel through WireGuard, AmneziaWG, OpenVPN, V2Ray, XRAY or
Hysteria2.

1.13.0 is a security release. Newer node software signs its handshake reply, and the
app now checks that signature on every connection. A new setting, Signed Nodes Only,
refuses the nodes that do not sign.

Highlights

  • The handshake reply is checked against the chain. The handshake reply carries the
    keys, certificate pin and addresses your tunnel then uses. Until now nothing could be
    checked against, so anyone on your network path could answer the handshake in a
    node's place. dvpnd from 9.4 signs that reply with the key the chain knows the node
    by, and Katacomb now checks the signature on every connection, for every protocol and
    for both hops of a chain.
  • What happens to each reply:
    • Signed by the node: accepted.
    • Signed by another key: accepted only if the node's account has authorised that key
      on chain (an authz grant, which operators use to run a node on a separate "hot"
      key).
    • A signature that does not check out, or a key the account never authorised:
      refused, and the session is refunded like any other failed handshake.
    • No signature (sentinel-dvpnx, and dvpnd before 9.4): accepted as before, unless you
      turn on Signed Nodes Only.
  • Signed Nodes Only (Settings, VPN Security, off by default) refuses nodes that do
    not sign, before you pay wherever it can. The connect button asks the node first. A
    chain's exit is checked against the node list before the entry is bought. Smart
    connect skips nodes older than 9.4. A node that gets past those checks and then sends
    an unsigned reply is refused after the handshake, with a refund.
  • Almost no node signs yet. On 3 October 2026, one active node out of 1,839 reported
    dvpnd 9.4, and it is a Hysteria2 node. With Signed Nodes Only on you can connect to
    that node and nothing else, and you cannot build a chain, because chains need V2Ray
    or XRAY nodes. Leave the setting off until operators upgrade; the signature is
    checked whenever a node sends one either way.
  • Signed or Unsigned in the connection bar. After a handshake the bar shows whether
    the node signed it; hover over it for what that means. For a chain it shows Signed
    only if both hops signed. A tunnel brought back from a saved config, with no new
    handshake, shows neither.
  • A "Signed" filter on the Nodes tab lists the nodes whose reported version is 9.4
    or later. It goes by the version in the node list, so treat it as a guide: the
    signature itself is what gets checked when you connect.
  • Nothing else changes. The packaging is the same as in 1.12.0.

Fixes in 1.13.0

  • Hot-key reply: a missing grant is "no grant", not a chain fault
  • Handshake: check a dvpnd node's signature; "Signed nodes only"

Known limitations

  • A chain has a hard life of about two hours. Measured on mainnet: exit hops report
    no usage to the chain, so the exit's idle deadline is pinned at purchase and never
    moves, even while the entry still has quota. This is node-side behaviour, not a client
    bug, but it is yours to plan around.
  • Chains can only be built from V2Ray and XRAY nodes. The other protocols have no
    equivalent of the relay mechanism a chain needs.
  • Expect roughly 2 to 3 MB/s and a large latency increase on a chain. Chains are for
    privacy, not speed.
  • Without systemd-resolved, a missing resolvconf still shows up after you pay. The
    app cannot safely install one on such a system, so a WireGuard or AmneziaWG connection
    there pays first, then offers Retry without VPN DNS on the same session, which sends
    your DNS queries outside the tunnel. To avoid it, set up a resolvconf provider such as
    openresolv the way your distribution documents.
  • Local-proxy mode tunnels only the apps you point at its SOCKS address. Everything else
    leaks, by design, and the kill switch does not apply.
  • A node that does not sign its handshake reply can be impersonated, and today that
    is nearly every node. The TLS and Reality wrapping does not authenticate the node, and
    there is nothing on chain to check its certificate against, so an attacker on your
    local network can answer the handshake in its place. Signed Nodes Only refuses such
    nodes, at the cost of leaving almost none to pick from until operators run dvpnd 9.4
    or later.

Platform support

Linux x86_64 only. Tested on Debian 11+, Ubuntu 20.04+, and derivatives (Mint,
Pop!_OS, Zorin). The packaging is unchanged since 1.11.2, whose .deb and AppImage were
checked on a clean Ubuntu 24.04 desktop, the .deb in containers on Debian 12 and 13 and
Ubuntu 22.04, 24.04 and 26.04, and the AppImage in containers on those and Fedora 44.

Installation

Recommended: .deb

sudo apt install ./katacomb-vpn_1.13.0_amd64.deb

Installs a root daemon, so connect and disconnect never prompt for a password. It needs
one log out and log back in after the first install before that takes effect.

Alternative: AppImage

chmod +x katacomb-vpn-1.13.0.AppImage
./katacomb-vpn-1.13.0.AppImage

No install needed. The first connection that needs the VPN helper installs it, with one
password prompt. After that each privileged operation prompts for a password, cached for
a few minutes.

Verifying your download

sha256sum -c SHA256SUMS --ignore-missing
gpg --verify SHA256SUMS.asc SHA256SUMS

Signed with key 740A F267 B0D8 162B E477 779D 7315 246A 6E67 F3C6. Import it first if
you have not already:

curl -sS https://github.com/trinitystake.gpg | gpg --import

Important

  • Connecting spends real funds. Sessions are blockchain transactions priced in
    udvpn, and a failed connection is refunded automatically, but an expired one is not.
  • The AppImage needs a fusermount before it starts, which stock desktops already
    have. If command -v fusermount3 fusermount prints nothing, install fuse3; on Arch,
    nss too. AppImageLauncher 2.2.0 cannot start it: upgrade to 3.0 or remove it. The
    APPIMAGE_EXTRACT_AND_RUN=1 workaround avoids needing FUSE. See the README.
  • AppImage on Ubuntu 24.04+ runs with the Chromium sandbox disabled. An AppImage can
    install neither an AppArmor profile nor a SUID sandbox helper, so prefer the .deb there.

Security model

Node operators are treated as adversaries. Everything a node sends is validated before it
reaches a privileged operation, because a VPN config can otherwise run shell commands as
root. See CLAUDE.md
for the full threat model and architecture.

License

GPL-3.0-or-later. Bundled binaries (v2ray, xray, hysteria) and the libraries compiled
into the app and its VPN helper are under their own licenses, whose texts ship in the
packages. See
THIRD-PARTY-LICENSES.md.

v1.12.0

Choose a tag to compare

@proofoftrinity proofoftrinity released this 02 Oct 02:20
v1.12.0
96e848c

Katacomb VPN 1.12.0

A desktop client for the Sentinel decentralized VPN network. Pick a node, pay for a
session on-chain, and tunnel through WireGuard, AmneziaWG, OpenVPN, V2Ray, XRAY or
Hysteria2.

1.12.0 is a small feature release. You can now find nodes by the version of the node
software they run, and sort the node table by it.

Highlights

  • Search by version. The search box on the Nodes tab now matches a node's version as
    well as its name, address and location. Type 9.2 to list the nodes running 9.2.x,
    8.3.1 for that release, or 9. for every 9.x node. Node addresses never contain a
    dot, so a version query does not also match addresses the way a bare number does. The
    same search works on the Multi-hop tab.
  • Sort by version, with no new column. The Type header now has a ver button next
    to "Type". The first click puts the oldest versions at the top, and a second click the
    newest. Clicking "Type" still sorts by protocol. The version stays where it was, on the
    second line of each Type cell.
  • Nothing else changes. Connecting, sessions and the packaging are the same as in
    1.11.2.

Fixes in 1.12.0

  • Nodes tab: search and sort by node version

Known limitations

  • A chain has a hard life of about two hours. Measured on mainnet: exit hops report
    no usage to the chain, so the exit's idle deadline is pinned at purchase and never
    moves, even while the entry still has quota. This is node-side behaviour, not a client
    bug, but it is yours to plan around.
  • Chains can only be built from V2Ray and XRAY nodes. The other protocols have no
    equivalent of the relay mechanism a chain needs.
  • Expect roughly 2 to 3 MB/s and a large latency increase on a chain. Chains are for
    privacy, not speed.
  • Without systemd-resolved, a missing resolvconf still shows up after you pay. The
    app cannot safely install one on such a system, so a WireGuard or AmneziaWG connection
    there pays first, then offers Retry without VPN DNS on the same session, which sends
    your DNS queries outside the tunnel. To avoid it, set up a resolvconf provider such as
    openresolv the way your distribution documents.
  • Local-proxy mode tunnels only the apps you point at its SOCKS address. Everything else
    leaks, by design, and the kill switch does not apply.
  • The TLS and Reality wrapping does not authenticate the node. There is nothing on chain
    to verify a node's certificate against, so an attacker on your local network can answer
    a handshake in a node's place.

Platform support

Linux x86_64 only. Tested on Debian 11+, Ubuntu 20.04+, and derivatives (Mint,
Pop!_OS, Zorin). The packaging is unchanged since 1.11.2, whose .deb and AppImage were
checked on a clean Ubuntu 24.04 desktop, the .deb in containers on Debian 12 and 13 and
Ubuntu 22.04, 24.04 and 26.04, and the AppImage in containers on those and Fedora 44.

Installation

Recommended: .deb

sudo apt install ./katacomb-vpn_1.12.0_amd64.deb

Installs a root daemon, so connect and disconnect never prompt for a password. It needs
one log out and log back in after the first install before that takes effect.

Alternative: AppImage

chmod +x katacomb-vpn-1.12.0.AppImage
./katacomb-vpn-1.12.0.AppImage

No install needed. The first connection that needs the VPN helper installs it, with one
password prompt. After that each privileged operation prompts for a password, cached for
a few minutes.

Verifying your download

sha256sum -c SHA256SUMS --ignore-missing
gpg --verify SHA256SUMS.asc SHA256SUMS

Signed with key 740A F267 B0D8 162B E477 779D 7315 246A 6E67 F3C6. Import it first if
you have not already:

curl -sS https://github.com/trinitystake.gpg | gpg --import

Important

  • Connecting spends real funds. Sessions are blockchain transactions priced in
    udvpn, and a failed connection is refunded automatically, but an expired one is not.
  • The AppImage needs a fusermount before it starts, which stock desktops already
    have. If command -v fusermount3 fusermount prints nothing, install fuse3; on Arch,
    nss too. AppImageLauncher 2.2.0 cannot start it: upgrade to 3.0 or remove it. The
    APPIMAGE_EXTRACT_AND_RUN=1 workaround avoids needing FUSE. See the README.
  • AppImage on Ubuntu 24.04+ runs with the Chromium sandbox disabled. An AppImage can
    install neither an AppArmor profile nor a SUID sandbox helper, so prefer the .deb there.

Security model

Node operators are treated as adversaries. Everything a node sends is validated before it
reaches a privileged operation, because a VPN config can otherwise run shell commands as
root. See CLAUDE.md
for the full threat model and architecture.

License

GPL-3.0-or-later. Bundled binaries (v2ray, xray, hysteria) and the libraries compiled
into the app and its VPN helper are under their own licenses, whose texts ship in the
packages. See
THIRD-PARTY-LICENSES.md.

v1.11.2

Choose a tag to compare

@proofoftrinity proofoftrinity released this 01 Oct 03:51
v1.11.2
29956cb

Katacomb VPN 1.11.2

A desktop client for the Sentinel decentralized VPN network. Pick a node, pay for a
session on-chain, and tunnel through WireGuard, AmneziaWG, OpenVPN, V2Ray, XRAY or
Hysteria2.

1.11.2 is a licensing fix. The packages now include the licence texts of the
open-source libraries compiled into the app, which earlier releases left out. The app
itself is unchanged from 1.11.1.

Highlights

  • Licence texts for the libraries inside the app. The app compiles more than 80
    open-source npm libraries into its own code, among them CosmJS and the Sentinel JS
    SDK. Their licences require their text, and for CosmJS its NOTICE file, to travel
    with every copy, and up to 1.11.1 the packages carried none of those texts. They are
    now in THIRD-PARTY-NOTICES-npm.md beside the app's other licence files (in
    /opt/Katacomb VPN/ for the .deb).
  • Nothing else changes. The app's code is byte-identical to 1.11.1. The only other
    difference is two TypeScript build-cache files, about 170 KB the app never read, that
    are no longer packaged.

Fixes in 1.11.2

  • Keep the TypeScript build cache out of the asar
  • Check that the npm notices ship
  • Ship the licence texts of the bundled npm packages

Known limitations

  • A chain has a hard life of about two hours. Measured on mainnet: exit hops report
    no usage to the chain, so the exit's idle deadline is pinned at purchase and never
    moves, even while the entry still has quota. This is node-side behaviour, not a client
    bug, but it is yours to plan around.
  • Chains can only be built from V2Ray and XRAY nodes. The other protocols have no
    equivalent of the relay mechanism a chain needs.
  • Expect roughly 2 to 3 MB/s and a large latency increase on a chain. Chains are for
    privacy, not speed.
  • Without systemd-resolved, a missing resolvconf still shows up after you pay. The
    app cannot safely install one on such a system, so a WireGuard or AmneziaWG connection
    there pays first, then offers Retry without VPN DNS on the same session, which sends
    your DNS queries outside the tunnel. To avoid it, set up a resolvconf provider such as
    openresolv the way your distribution documents.
  • Local-proxy mode tunnels only the apps you point at its SOCKS address. Everything else
    leaks, by design, and the kill switch does not apply.
  • The TLS and Reality wrapping does not authenticate the node. There is nothing on chain
    to verify a node's certificate against, so an attacker on your local network can answer
    a handshake in a node's place.

Platform support

Linux x86_64 only. Tested on Debian 11+, Ubuntu 20.04+, and derivatives (Mint,
Pop!_OS, Zorin). For this release the .deb and the AppImage were checked on a clean
Ubuntu 24.04 desktop, the .deb in containers on Debian 12 and 13 and Ubuntu 22.04, 24.04
and 26.04, and the AppImage in containers on those and Fedora 44.

Installation

Recommended: .deb

sudo apt install ./katacomb-vpn_1.11.2_amd64.deb

Installs a root daemon, so connect and disconnect never prompt for a password. It needs
one log out and log back in after the first install before that takes effect.

Alternative: AppImage

chmod +x katacomb-vpn-1.11.2.AppImage
./katacomb-vpn-1.11.2.AppImage

No install needed. The first connection that needs the VPN helper installs it, with one
password prompt. After that each privileged operation prompts for a password, cached for
a few minutes.

Verifying your download

sha256sum -c SHA256SUMS --ignore-missing
gpg --verify SHA256SUMS.asc SHA256SUMS

Signed with key 740A F267 B0D8 162B E477 779D 7315 246A 6E67 F3C6. Import it first if
you have not already:

curl -sS https://github.com/trinitystake.gpg | gpg --import

Important

  • Connecting spends real funds. Sessions are blockchain transactions priced in
    udvpn, and a failed connection is refunded automatically, but an expired one is not.
  • The AppImage needs a fusermount before it starts, which stock desktops already
    have. If command -v fusermount3 fusermount prints nothing, install fuse3; on Arch,
    nss too. AppImageLauncher 2.2.0 cannot start it: upgrade to 3.0 or remove it. The
    APPIMAGE_EXTRACT_AND_RUN=1 workaround avoids needing FUSE. See the README.
  • AppImage on Ubuntu 24.04+ runs with the Chromium sandbox disabled. An AppImage can
    install neither an AppArmor profile nor a SUID sandbox helper, so prefer the .deb there.

Security model

Node operators are treated as adversaries. Everything a node sends is validated before it
reaches a privileged operation, because a VPN config can otherwise run shell commands as
root. See CLAUDE.md
for the full threat model and architecture.

License

GPL-3.0-or-later. Bundled binaries (v2ray, xray, hysteria) and the libraries compiled
into the app and its VPN helper are under their own licenses, whose texts ship in the
packages. See
THIRD-PARTY-LICENSES.md.

v1.11.1

Choose a tag to compare

@proofoftrinity proofoftrinity released this 01 Oct 01:29
v1.11.1
1c48e99

Katacomb VPN 1.11.1

A desktop client for the Sentinel decentralized VPN network. Pick a node, pay for a
session on-chain, and tunnel through WireGuard, AmneziaWG, OpenVPN, V2Ray, XRAY or
Hysteria2.

1.11.1 is a packaging fix for the AppImage. It now starts on a stock Ubuntu 22.04 or
newer desktop without installing anything first, and it is 11 MB smaller. The app itself
and the .deb work exactly as in 1.11.0.

Highlights

  • The AppImage no longer needs libfuse2. Up to 1.11.0 it stopped before opening any
    window on a stock Ubuntu 22.04 or 24.04 desktop, with dlopen(): error loading libfuse.so.2, until you installed libfuse2t64 or libfuse2, and it needed an extra
    FUSE 2 package on Fedora and Arch too. It now carries its own FUSE library and only
    needs the fusermount those desktops already have. Checked on Debian 12 and 13,
    Ubuntu 22.04, 24.04 and 26.04, and Fedora 44, none of them with libfuse2, and on a
    clean Ubuntu 24.04 desktop, including the VPN helper install.
  • A smaller download. The AppImage is 138.6 MB instead of 149.7 MB.
  • Menu entries keep the Chromium sandbox where it works. When AppImageLauncher adds
    the AppImage to your applications menu, the entry used to turn the sandbox off on every
    system. Now it is only turned off where the system cannot run it, such as Ubuntu
    24.04, exactly as when you start the file directly.
  • AppImageLauncher 2.2.0 can no longer start it. If you run AppImages through
    AppImageLauncher and the app fails with fuse: memory allocation failed, upgrade
    AppImageLauncher to 3.0 or remove it. 2.2.0 fails the same way on every AppImage built
    with the current AppImage runtime.

Fixes in 1.11.1

  • Check that the AppImage starts on distros without libfuse2
  • Stop the AppImage needing libfuse2

Known limitations

  • A chain has a hard life of about two hours. Measured on mainnet: exit hops report
    no usage to the chain, so the exit's idle deadline is pinned at purchase and never
    moves, even while the entry still has quota. This is node-side behaviour, not a client
    bug, but it is yours to plan around.
  • Chains can only be built from V2Ray and XRAY nodes. The other protocols have no
    equivalent of the relay mechanism a chain needs.
  • Expect roughly 2 to 3 MB/s and a large latency increase on a chain. Chains are for
    privacy, not speed.
  • Without systemd-resolved, a missing resolvconf still shows up after you pay. The
    app cannot safely install one on such a system, so a WireGuard or AmneziaWG connection
    there pays first, then offers Retry without VPN DNS on the same session, which sends
    your DNS queries outside the tunnel. To avoid it, set up a resolvconf provider such as
    openresolv the way your distribution documents.
  • Local-proxy mode tunnels only the apps you point at its SOCKS address. Everything else
    leaks, by design, and the kill switch does not apply.
  • The TLS and Reality wrapping does not authenticate the node. There is nothing on chain
    to verify a node's certificate against, so an attacker on your local network can answer
    a handshake in a node's place.

Platform support

Linux x86_64 only. Tested on Debian 11+, Ubuntu 20.04+, and derivatives (Mint,
Pop!_OS, Zorin). For this release the AppImage was also checked on a clean Ubuntu 24.04
desktop, and in containers on Debian 12 and 13, Ubuntu 22.04, 24.04 and 26.04, and
Fedora 44.

Installation

Recommended: .deb

sudo apt install ./katacomb-vpn_1.11.1_amd64.deb

Installs a root daemon, so connect and disconnect never prompt for a password. It needs
one log out and log back in after the first install before that takes effect.

Alternative: AppImage

chmod +x katacomb-vpn-1.11.1.AppImage
./katacomb-vpn-1.11.1.AppImage

No install needed. The first connection that needs the VPN helper installs it, with one
password prompt. After that each privileged operation prompts for a password, cached for
a few minutes.

Verifying your download

sha256sum -c SHA256SUMS --ignore-missing
gpg --verify SHA256SUMS.asc SHA256SUMS

Signed with key 740A F267 B0D8 162B E477 779D 7315 246A 6E67 F3C6. Import it first if
you have not already:

curl -sS https://github.com/trinitystake.gpg | gpg --import

Important

  • Connecting spends real funds. Sessions are blockchain transactions priced in
    udvpn, and a failed connection is refunded automatically, but an expired one is not.
  • The AppImage needs a fusermount before it starts, which stock desktops already
    have. If command -v fusermount3 fusermount prints nothing, install fuse3; on Arch,
    nss too. AppImageLauncher 2.2.0 cannot start it: upgrade to 3.0 or remove it. The
    APPIMAGE_EXTRACT_AND_RUN=1 workaround avoids needing FUSE. See the README.
  • AppImage on Ubuntu 24.04+ runs with the Chromium sandbox disabled. An AppImage can
    install neither an AppArmor profile nor a SUID sandbox helper, so prefer the .deb there.

Security model

Node operators are treated as adversaries. Everything a node sends is validated before it
reaches a privileged operation, because a VPN config can otherwise run shell commands as
root. See CLAUDE.md
for the full threat model and architecture.

License

GPL-3.0-or-later. Bundled binaries (v2ray, xray, hysteria) are under their respective
licenses. See
THIRD-PARTY-LICENSES.md.

v1.11.0

Choose a tag to compare

@proofoftrinity proofoftrinity released this 30 Sep 12:46
v1.11.0
eb20a05

Katacomb VPN 1.11.0

A desktop client for the Sentinel decentralized VPN network. Pick a node, pay for a
session on-chain, and tunnel through WireGuard, AmneziaWG, OpenVPN, V2Ray, XRAY or
Hysteria2.

1.11.0 changes the first launch. The window now opens straight away, every time, and
nothing asks for an admin password until a connection needs something this computer is
missing. When one does, the app says so before anything is paid and installs it in one
click. This mostly matters for the AppImage: the .deb still installs the helper, WireGuard
tools and OpenVPN with the package.

Highlights

  • No pop-ups at launch. Up to 1.10.0 the AppImage opened two blocking dialogs before
    its window, one to install wireguard-tools and one to install the VPN helper, each
    asking for an admin password before you could have created a wallet, let alone
    connected. Skipping one left no way back except restarting the app, and the package
    install only worked on apt-based systems. Both dialogs are gone.
  • Missing setup is caught before you pay. Every connection first checks that this
    computer has what it needs: the VPN helper for any full-tunnel connection, WireGuard
    tools for WireGuard nodes, OpenVPN for OpenVPN nodes, and a resolvconf for the VPN's
    DNS on WireGuard and AmneziaWG. If anything is missing it stops with "Can't connect, not
    charged" and lists all of it in one pane, each item with an Install button. Try Again
    stays greyed out until everything reads Ready, then connects with the choices you
    already made. This covers a single node, a plan (smart connect checks once, before it
    tries any node), a two-hop chain, and reconnecting a paid session from the Sessions
    tab. Local proxy mode needs none of it.
  • Two cases that charged you for a connection that could not start are fixed. A
    V2Ray, XRAY or Hysteria2 connection in full-tunnel mode paid first and then failed when
    the helper was missing, because the old check only looked for it on WireGuard,
    AmneziaWG and OpenVPN. And a helper left over from an older version, which can refuse a
    config as root after the session is bought, now reads "Needs update" and is replaced
    before any payment.
  • One-click installs on Debian, Ubuntu, Fedora and Arch. The app uses apt, dnf or
    pacman, chosen from /etc/os-release, so derivatives such as Mint, Pop!_OS, Rocky and
    Manjaro work too. Each install is one password prompt, and the app stays usable while
    the prompt is open. On any other distribution the pane names the package to install
    yourself.
  • New Settings > System tab. The same checks, for setting things up ahead of time.
    Updating the helper is refused while you are connected, because it restarts the
    service that holds the tunnel up.
  • resolvconf is installed only where that is safe. WireGuard and AmneziaWG need it
    to apply the VPN's DNS. Where systemd-resolved manages DNS (the default on Ubuntu, Mint
    and Fedora), the app installs the resolvconf that comes with it: systemd-resolved,
    or systemd-resolvconf on Arch. Anywhere else it installs nothing, because adding one
    there would change how the whole system handles DNS.

Fixes in 1.11.0

  • Settings, System: say what the .deb installs, not "all of it"
  • Sessions tab: hold the card's Reconnect instead of a second Try Again
  • Hold the setup pane's Try Again until ready, then connect with the same choices
  • Check for a resolvconf before a WireGuard or AmneziaWG connect pays
  • Ask for the helper and packages when a connect needs them, not at launch

Known limitations

  • A chain has a hard life of about two hours. Measured on mainnet: exit hops report
    no usage to the chain, so the exit's idle deadline is pinned at purchase and never
    moves, even while the entry still has quota. This is node-side behaviour, not a client
    bug, but it is yours to plan around.
  • Chains can only be built from V2Ray and XRAY nodes. The other protocols have no
    equivalent of the relay mechanism a chain needs.
  • Expect roughly 2 to 3 MB/s and a large latency increase on a chain. Chains are for
    privacy, not speed.
  • Without systemd-resolved, a missing resolvconf still shows up after you pay. The
    app cannot safely install one on such a system, so a WireGuard or AmneziaWG connection
    there pays first, then offers Retry without VPN DNS on the same session, which sends
    your DNS queries outside the tunnel. To avoid it, set up a resolvconf provider such as
    openresolv the way your distribution documents.
  • Local-proxy mode tunnels only the apps you point at its SOCKS address. Everything else
    leaks, by design, and the kill switch does not apply.
  • The TLS and Reality wrapping does not authenticate the node. There is nothing on chain
    to verify a node's certificate against, so an attacker on your local network can answer
    a handshake in a node's place.

Platform support

Linux x86_64 only. Tested on Debian 11+, Ubuntu 20.04+, and derivatives (Mint,
Pop!_OS, Zorin). For this release the AppImage was also checked on clean Ubuntu 24.04,
Fedora 44 and Arch installs.

Installation

Recommended: .deb

sudo apt install ./katacomb-vpn_1.11.0_amd64.deb

Installs a root daemon, so connect and disconnect never prompt for a password. It needs
one log out and log back in after the first install before that takes effect.

Alternative: AppImage

chmod +x katacomb-vpn-1.11.0.AppImage
./katacomb-vpn-1.11.0.AppImage

No install needed. The first connection that needs the VPN helper installs it, with one
password prompt. After that each privileged operation prompts for a password, cached for
a few minutes.

Verifying your download

sha256sum -c SHA256SUMS --ignore-missing
gpg --verify SHA256SUMS.asc SHA256SUMS

Signed with key 740A F267 B0D8 162B E477 779D 7315 246A 6E67 F3C6. Import it first if
you have not already:

curl -sS https://github.com/trinitystake.gpg | gpg --import

Important

  • Connecting spends real funds. Sessions are blockchain transactions priced in
    udvpn, and a failed connection is refunded automatically, but an expired one is not.
  • The AppImage needs a few packages from your system before it starts: libfuse2t64
    on Ubuntu 24.04+, libfuse2 on 22.04, fuse on Fedora, fuse2 and nss on Arch. The
    APPIMAGE_EXTRACT_AND_RUN=1 workaround avoids needing FUSE. See the README.
  • AppImage on Ubuntu 24.04+ runs with the Chromium sandbox disabled. An AppImage can
    install neither an AppArmor profile nor a SUID sandbox helper, so prefer the .deb there.

Security model

Node operators are treated as adversaries. Everything a node sends is validated before it
reaches a privileged operation, because a VPN config can otherwise run shell commands as
root. See CLAUDE.md
for the full threat model and architecture.

License

GPL-3.0-or-later. Bundled binaries (v2ray, xray, hysteria) are under their respective
licenses. See
THIRD-PARTY-LICENSES.md.

v1.10.0

Choose a tag to compare

@proofoftrinity proofoftrinity released this 18 Sep 12:47
v1.10.0
62d3e3a

Katacomb VPN 1.10.0

A desktop client for the Sentinel decentralized VPN network. Pick a node, pay for a
session on-chain, and tunnel through WireGuard, AmneziaWG, OpenVPN, V2Ray, XRAY or
Hysteria2.

1.10.0 is a feature release. AmneziaWG connections now use the AmneziaWG 3.1 protocol
tier when the node offers it, which encrypts the header of every packet and makes the
traffic harder to fingerprint. Nodes that do not offer it are spoken to exactly as before.
It also closes a gap where an updated helper could be left unused by an already-running
daemon.

Highlights

  • AmneziaWG connections use the 3.1 tier where a node offers it. AmneziaWG 3.x
    encrypts the type field and header of every packet with a key the node hands out, adds
    random trailers and padding, and randomises timers, so the traffic carries less for deep
    packet inspection to match on than the 2.0 parameter set. This is a change to the wire
    format that no node can negotiate in-band, so nodes offer it as a second, opt-in tier.
    Today that means nodes running dvpnd with the tier switched on. Before an AmneziaWG
    handshake the app reads the node's public inbound list and asks for the tier if it is
    listed; a node that lists none, or that cannot be read in time, gets the same request
    as before and answers with the default tier. Either way the paid session is not at
    risk. The log line [session] AmneziaWG tier: says which tier a session landed on.
  • Every other node is unaffected. The AmneziaWG device compiled into the privileged
    helper moved from amneziawg-go 0.2.19 to 3.1.20260828. With the 3.x keys unset, the
    3.1 engine's send and receive paths are the 2.0 engine's byte for byte, so the default
    parameter set every node hands out is framed exactly as it was. The container-based
    handshake test now builds its reference server from the same 3.1 commits dvpnd pins,
    with only the default parameters set, and passes.
  • The new parameters are validated like everything else a node sends. The header
    protection key, the trailers flag, the MTU and the padding range are checked in the
    app's config guard and again in the root helper's own guard, and a malformed answer is
    refused before anything reaches root, with the session refunded. On the 3.1 tier the
    tunnel MTU comes from the node's answer instead of the path measurement, because the
    tier's prefixes, trailers and padding take room out of every packet.
  • The helper is checked on every start, daemon or not. The check that compares the
    bundled helper with the installed one used to be skipped whenever the root daemon's
    socket existed. A newer app on a machine with an older daemon then ran with the old
    helper: it accepted the app's operations but validated configs against its old
    allow-lists, and refused a correctly built config as root only after the session was
    paid for. The check now always runs, and when it replaces the helper it also restarts
    the daemon's service. On a packaged install the two helpers are identical and nothing
    is asked. This mostly affects builds from source on a machine that also has the .deb
    installed, which is how it was found.

Fixes in 1.10.0

  • Speak the AmneziaWG 3.1 tier where a dvpnd node offers it

Known limitations

  • A chain has a hard life of about two hours. Measured on mainnet: exit hops report
    no usage to the chain, so the exit's idle deadline is pinned at purchase and never
    moves, even while the entry still has quota. This is node-side behaviour, not a client
    bug, but it is yours to plan around.
  • Chains can only be built from V2Ray and XRAY nodes. The other protocols have no
    equivalent of the relay mechanism a chain needs.
  • Expect roughly 2 to 3 MB/s and a large latency increase on a chain. Chains are for
    privacy, not speed.
  • Local-proxy mode tunnels only the apps you point at its SOCKS address. Everything else
    leaks, by design, and the kill switch does not apply.
  • The TLS and Reality wrapping does not authenticate the node. There is nothing on chain
    to verify a node's certificate against, so an attacker on your local network can answer
    a handshake in a node's place.

Platform support

Linux x86_64 only. Tested on Debian 11+, Ubuntu 20.04+, and derivatives (Mint,
Pop!_OS, Zorin).

Installation

Recommended: .deb

sudo apt install ./katacomb-vpn_1.10.0_amd64.deb

Installs a root daemon, so connect and disconnect never prompt for a password. It needs
one log out and log back in after the first install before that takes effect.

Alternative: AppImage

chmod +x katacomb-vpn-1.10.0.AppImage
./katacomb-vpn-1.10.0.AppImage

No install needed. Every privileged operation prompts for a password instead.

Verifying your download

sha256sum -c SHA256SUMS --ignore-missing
gpg --verify SHA256SUMS.asc SHA256SUMS

Signed with key 740A F267 B0D8 162B E477 779D 7315 246A 6E67 F3C6. Import it first if
you have not already:

curl -sS https://github.com/trinitystake.gpg | gpg --import

Important

  • Connecting spends real funds. Sessions are blockchain transactions priced in
    udvpn, and a failed connection is refunded automatically, but an expired one is not.
  • AppImage on Ubuntu 22.04 and 24.04 needs libfuse2, or the
    APPIMAGE_EXTRACT_AND_RUN=1 workaround. See the README.
  • AppImage on Ubuntu 24.04+ runs with the Chromium sandbox disabled. An AppImage can
    install neither an AppArmor profile nor a SUID sandbox helper, so prefer the .deb there.

Security model

Node operators are treated as adversaries. Everything a node sends is validated before it
reaches a privileged operation, because a VPN config can otherwise run shell commands as
root. See CLAUDE.md
for the full threat model and architecture.

License

GPL-3.0-or-later. Bundled binaries (v2ray, xray, hysteria) are under their respective
licenses. See
THIRD-PARTY-LICENSES.md.

v1.9.3

Choose a tag to compare

@proofoftrinity proofoftrinity released this 16 Sep 10:49
v1.9.3
00725db

Katacomb VPN 1.9.3

A desktop client for the Sentinel decentralized VPN network. Pick a node, pay for a
session on-chain, and tunnel through WireGuard, AmneziaWG, OpenVPN, V2Ray, XRAY or
Hysteria2.

1.9.3 is a maintenance release, and an unusually literal one: nothing about how the app
behaves has changed. It reorganises the source, splits the project's own documentation
apart, and adds tests. If you are running 1.9.2 and it is working, there is nothing here
you need.

Highlights

Everything in this release is under the hood. The bullets below say what moved and why,
because the reason a codebase is rearranged is usually the only interesting part.

  • The main process now has folders. It had grown to seventy files in a single
    directory, holding the wallet, the chain client, every protocol's config builder, the
    tunnel manager and the privileged-helper client side by side with no grouping at all.
    They are now split by what they are for: chain/, vpn/, protocols/, nodes/,
    provider/, plans/ and helper/. The validator that guards node-supplied
    configuration deliberately stays at the top level, because it is the boundary the whole
    threat model rests on and burying it would weaken the signal.
  • The largest file lost a fifth of its bulk, and the largest screen lost half. The IPC
    layer had accumulated the connection state machine, the quota watchdog, the reconnect
    loop and the node feed alongside all 74 of its channels. The provider console and the
    read-only diagnostics channels have moved into their own modules. The Settings screen's
    Wallets tab, with its four dialogs, is now its own file. No behaviour changed in either
    case; the same code runs, from a different place.
  • The project's documentation was split into a short index and a docs/ folder. It
    had reached 1,838 lines in one file. Every word is preserved, and it is verified: of the
    1,728 substantive lines in the original, 1,724 appear verbatim in the new files, and the
    four that differ are file paths corrected for the move above.
  • Thirty-four new tests, covering the module that decides how privileged operations
    reach root, and the checks that validate everything arriving from the interface. Both
    became testable as a result of the reorganisation.

One caution for anyone building from source rather than installing a package: partway
through this work a path was broken that made npm run dev report V2Ray as missing, and
quietly skipped the integrity check on the bundled proxy binaries. It was found and fixed
before this release. Packaged builds were never affected, because they resolve those
binaries by a different route.

Fixes in 1.9.3

  • Release notes for 1.9.3
  • Fix the bundled-binary path broken by the src/main folder move
  • Split the Wallets tab out of Settings.tsx
  • Split CLAUDE.md into a router and docs/, keeping every word
  • Test the two modules the peel made testable
  • Claim the last three renderer component clusters into folders
  • Move the provider console handlers out of ipc-handlers
  • Move the read-only diagnostics handlers out of ipc-handlers
  • Give src/main domain folders instead of 70 flat files
  • Tidy two structural nits found by the structure audit

Known limitations

  • A chain has a hard life of about two hours. Measured on mainnet: exit hops report
    no usage to the chain, so the exit's idle deadline is pinned at purchase and never
    moves, even while the entry still has quota. This is node-side behaviour, not a client
    bug, but it is yours to plan around.
  • Chains can only be built from V2Ray and XRAY nodes. The other protocols have no
    equivalent of the relay mechanism a chain needs.
  • Expect roughly 2 to 3 MB/s and a large latency increase on a chain. Chains are for
    privacy, not speed.
  • Local-proxy mode tunnels only the apps you point at its SOCKS address. Everything else
    leaks, by design, and the kill switch does not apply.
  • The TLS and Reality wrapping does not authenticate the node. There is nothing on chain
    to verify a node's certificate against, so an attacker on your local network can answer
    a handshake in a node's place.

Platform support

Linux x86_64 only. Tested on Debian 11+, Ubuntu 20.04+, and derivatives (Mint,
Pop!_OS, Zorin).

Installation

Recommended: .deb

sudo apt install ./katacomb-vpn_1.9.3_amd64.deb

Installs a root daemon, so connect and disconnect never prompt for a password. It needs
one log out and log back in after the first install before that takes effect.

Alternative: AppImage

chmod +x katacomb-vpn-1.9.3.AppImage
./katacomb-vpn-1.9.3.AppImage

No install needed. Every privileged operation prompts for a password instead.

Verifying your download

sha256sum -c SHA256SUMS --ignore-missing
gpg --verify SHA256SUMS.asc SHA256SUMS

Signed with key 740A F267 B0D8 162B E477 779D 7315 246A 6E67 F3C6. Import it first if
you have not already:

curl -sS https://github.com/trinitystake.gpg | gpg --import

Important

  • Connecting spends real funds. Sessions are blockchain transactions priced in
    udvpn, and a failed connection is refunded automatically, but an expired one is not.
  • AppImage on Ubuntu 22.04 and 24.04 needs libfuse2, or the
    APPIMAGE_EXTRACT_AND_RUN=1 workaround. See the README.
  • AppImage on Ubuntu 24.04+ runs with the Chromium sandbox disabled. An AppImage can
    install neither an AppArmor profile nor a SUID sandbox helper, so prefer the .deb there.

Security model

Node operators are treated as adversaries. Everything a node sends is validated before it
reaches a privileged operation, because a VPN config can otherwise run shell commands as
root. See CLAUDE.md
for the full threat model and architecture.

License

GPL-3.0-or-later. Bundled binaries (v2ray, xray, hysteria) are under their respective
licenses. See
THIRD-PARTY-LICENSES.md.

v1.9.2

Choose a tag to compare

@proofoftrinity proofoftrinity released this 16 Sep 05:29
v1.9.2
4fe5b54

Katacomb VPN 1.9.2

A desktop client for the Sentinel decentralized VPN network. Pick a node, pay for a
session on-chain, and tunnel through WireGuard, AmneziaWG, OpenVPN, V2Ray, XRAY or
Hysteria2.

1.9.2 is a small fixes release. The headline is a paid session that could go on being
spent against a tunnel that had already stopped working, with the app still reporting it
as connected, for as long as you were not actively using the connection.

Highlights

  • A tunnel that has died is now noticed even when you are not using it. Until now the
    app could only tell a tunnel was dead by watching traffic leave with nothing coming
    back. That is solid evidence, but it needs you to be doing something. Leave the
    connection idle and there is nothing to watch, so a node that had quietly dropped your
    peer left the app showing Connected, and your paid session being spent, against a tunnel
    that was carrying nothing. Measured on mainnet, that state lasted hours. The app now
    asks the kernel when the WireGuard peer last completed a handshake instead. A working
    peer refreshes that about every two minutes on its own, whether or not you are doing
    anything, so one that has not refreshed is a fact rather than an inference. The session
    is disconnected and stays open on chain, and the Sessions tab offers a reconnect. This
    covers WireGuard connections and needs the background service that the .deb installs.
    Every other protocol keeps exactly the checks it had before.
  • The usage time recorded for such a session stops where the tunnel did. When a
    connection is ended this way, the time counted against it now runs to the last moment
    the tunnel was demonstrably alive, not to the moment the app worked out that it was not.
    The chain meters what the node reports, so counting the dead stretch would have shown
    you spending time you were never charged for.

Fixes in 1.9.2

  • Release notes for 1.9.2
  • Stop pinning the whole op list in the container verification
  • Catch an idle WireGuard tunnel whose peer has stopped answering

Known limitations

  • A chain has a hard life of about two hours. Measured on mainnet: exit hops report
    no usage to the chain, so the exit's idle deadline is pinned at purchase and never
    moves, even while the entry still has quota. This is node-side behaviour, not a client
    bug, but it is yours to plan around.
  • Chains can only be built from V2Ray and XRAY nodes. The other protocols have no
    equivalent of the relay mechanism a chain needs.
  • Expect roughly 2 to 3 MB/s and a large latency increase on a chain. Chains are for
    privacy, not speed.
  • Local-proxy mode tunnels only the apps you point at its SOCKS address. Everything else
    leaks, by design, and the kill switch does not apply.
  • The TLS and Reality wrapping does not authenticate the node. There is nothing on chain
    to verify a node's certificate against, so an attacker on your local network can answer
    a handshake in a node's place.

Platform support

Linux x86_64 only. Tested on Debian 11+, Ubuntu 20.04+, and derivatives (Mint,
Pop!_OS, Zorin).

Installation

Recommended: .deb

sudo apt install ./katacomb-vpn_1.9.2_amd64.deb

Installs a root daemon, so connect and disconnect never prompt for a password. It needs
one log out and log back in after the first install before that takes effect.

Alternative: AppImage

chmod +x katacomb-vpn-1.9.2.AppImage
./katacomb-vpn-1.9.2.AppImage

No install needed. Every privileged operation prompts for a password instead.

Verifying your download

sha256sum -c SHA256SUMS --ignore-missing
gpg --verify SHA256SUMS.asc SHA256SUMS

Signed with key 740A F267 B0D8 162B E477 779D 7315 246A 6E67 F3C6. Import it first if
you have not already:

curl -sS https://github.com/trinitystake.gpg | gpg --import

Important

  • Connecting spends real funds. Sessions are blockchain transactions priced in
    udvpn, and a failed connection is refunded automatically, but an expired one is not.
  • AppImage on Ubuntu 22.04 and 24.04 needs libfuse2, or the
    APPIMAGE_EXTRACT_AND_RUN=1 workaround. See the README.
  • AppImage on Ubuntu 24.04+ runs with the Chromium sandbox disabled. An AppImage can
    install neither an AppArmor profile nor a SUID sandbox helper, so prefer the .deb there.

Security model

Node operators are treated as adversaries. Everything a node sends is validated before it
reaches a privileged operation, because a VPN config can otherwise run shell commands as
root. See CLAUDE.md
for the full threat model and architecture.

License

GPL-3.0-or-later. Bundled binaries (v2ray, xray, hysteria) are under their respective
licenses. See
THIRD-PARTY-LICENSES.md.