iOS system-wide VPN based Tor client


Travis CI

iCepa is an iOS system-wide VPN Tor client. It uses Tor.framework to manage its Tor instance, and tun2tor to bridge VPN traffic to Tor.

The project is in progress, and currently alpha-quality.


  • iOS 10 or later
  • Xcode 8 or later


  1. Because the network extension depends on tun2tor, you will need Rust installed. You can install it using rustup:

    curl -sSf | sh
    rustup install stable
    rustup target add aarch64-apple-ios
    rustup target add armv7-apple-ios
  2. iCepa also depends on Tor.framework, which you can build using Carthage:

    git submodule update --init --recursive
    brew install automake autoconf libtool gettext carthage
    carthage build
  3. iCepa should now build normally from Xcode. If it does not, please file an issue! iCepa does not work in the iOS Simulator.


Installing this application on your own iOS device requires some manual set up in Apple’s developer portal:

  1. Pick a unique bundle identifier ( and generate an App ID for it.
  2. Append a new component to that bundle identifier to form the extension’s bundle identifier (, and generate an App ID for that new bundle identifier.
  3. Create an App Group (, and enable that App Group on both of the App IDs that you just created.
  4. Check the Network Extensions checkbox on both of the App IDs.
  5. Create two new development Provisioning Profiles, one for each App ID
  6. Place the App Group and both App IDs in iCepa-iOS.xcconfig


iCepa is separated into a two components:

  • The UI is written in Swift, and provides a basic interface to start, stop and configure the Tor network extension.
  • The network extension itself is also written in Swift, and bridges traffic to Tor using an NEPacketTunnelProvider and tun2tor. An NEPacketTunnelProvider is analogous to a utun (userspace network tunnel) interface.

Tor.framework is used to communicate with and start the tor instance from both the app and the extension.

Things that need work: - tun2tor. - The UI. The main focus is the control screen which will have controls to start/stop and information about the connection. Taking mockups/pull requests for either! Create Github issues for now. - There is no icon or any branding (the name is not even final).

Related Repositories



iOS system-wide VPN based Tor client ...



Tor framework for the iCepa project ...



Documentation scratchpad for iOS Tor VPN implementation ...

Top Contributors

conradev chrisballinger FredericJacobs