<li>Customer Care (<ahref="https://www.reddit.com/r/passepartout">Reddit</a>, App Store)</li>
<li>This website</li>
</ul>
<h3id="how-passepartout-was-born">How Passepartout was born</h3>
<p>Today, Passepartout is a comprehensive networking/privacy tool <ahref="https://apps.apple.com/us/app/passepartout-vpn-client/id1433648537?mt=8">for iPhone, iPad, Mac, and Apple TV</a>.</p>
<p>How did it start?</p>
<p>During my days at PIA, I wondered why there were so many VPN providers doing the same over and over with different skins: an app with a VPN on/off toggle.</p>
<p>I came up with the idea of a <em>single key</em> that would open <em>multiple doors</em>, be it different protocols, providers, or platforms. That’s <ahref="https://dictionary.cambridge.org/dictionary/french-english/passe-partout">what the word <em>Passepartout</em> stands for in French</a>, a <em>master key</em>.</p>
<p>Frustrated by the abandonment of OpenVPN Connect, I first published Passepartout in 2018 as an alternative OpenVPN client for iOS based on <ahref="#the-story-behind-tunnelkit">TunnelKit</a>. Through the years, the app has become multiplatform, and WireGuard support was also added.</p>
<p>Unfortunately, TunnelKit was not designed for the original concept of Passepartout, so <ahref="https://www.reddit.com/r/passepartout/comments/1bw4esv/the_looks_of_tunnelkit_20172024/">the app ended up lagging behind its limitations</a>. Beyond that, the library architecture was in general very primitive, tightly coupled to the underlying implementations, and hard to test.</p>
<p>That’s why I dedicated a relevant part of 2023/2024 to a completely new library, <em>PassepartoutKit</em>, a huge rewrite that was, however, worth the pain. It’s a well-thought architecture that leverages the experience I gained with TunnelKit and WireGuardKit for OpenVPN and WireGuard connectivity.</p>
<p><em>PassepartoutKit</em> is a game changer in that:</p>
<ul>
<li>It is much easier to deploy and use</li>
<li>It is more stable, for using strict <ahref="https://docs.swift.org/swift-book/documentation/the-swift-programming-language/concurrency/">Swift Concurrency</a></li>
<li>It is agnostic of OpenSSL, WireGuard, and even <ahref="https://developer.apple.com/documentation/networkextension">Network Extension</a></li>
<li>It handles multiple protocols in a single <ahref="https://developer.apple.com/documentation/networkextension/nepackettunnelprovider">Packet Tunnel Provider</a></li>
<li>It is not bound to VPN</li>
<li>It opens the doors to other platforms like Windows and Android</li>
<li>Last but not least, it is widely mockable/testable</li>
</ul>
<p>Contrary to TunnelKit, which is available under the GPL, <em>PassepartoutKit</em> is currently closed-source.</p>
<p>Feel free to <ahref="mailto:info@passepartoutvpn.app">contact me</a> for licensing or further information.</p>
<h3id="the-story-behind-tunnelkit">The story behind TunnelKit</h3>
<p><ahref="https://github.com/passepartoutvpn/tunnelkit">TunnelKit</a> is a custom Swift/ObjC implementation of the OpenVPN protocol, written from scratch and now superseded by <em>PassepartoutKit</em>.</p>
<p>It all started in 2017, when a former colleague at <ahref="https://www.privateinternetaccess.com/">Private Internet Access</a> sent me some Ruby snippets that would connect to an OpenVPN server. He would then ask me: “would you port this to the iPhone?”</p>
<p>Well, not only did I, but the guy left the company a few weeks later. I took care of the project alone for the next 7 years.</p>
<p>TunnelKit is the only stable OpenVPN implementation in native Swift/ObjC out there and, believe it or not, it is relied on by <em>millions</em> of users, be it via my apps or providers like <ahref="https://hide.me/">Hide.me</a>, <ahref="https://www.privateinternetaccess.com/">PIA</a>, or <ahref="https://protonvpn.com/">ProtonVPN</a>.</p>
Copyright (c) 2024 <ahref="https://davidederosa.com"title="The author website">Davide De Rosa</a><br/>
The logo is taken from the awesome <ahref="https://www.iconfinder.com/iconsets/circle-icons-1"title="Circle Icons">Circle Icons</a> set by <ahref="https://www.elegantthemes.com/"title="Elegant Themes">Nick Roach</a>