Skip to content

SDKs

Embed ForestVPN, from source.

Source SDKs for Apple and Android, a stable C ABI for everything else, and generated API clients for TypeScript, Rust and Swift. Add a package, build it from source, and ship mesh and tunnel inside your own app.

// Apple — source Swift package (UniFFI). Add the package, import the kit.
// Package.swift → dependencies:
//   .package(url: "https://github.com/forestvpn/forestvpn-apple", from: "1.0.0")

import ForestVPNKit

// ForestVPNKit + ForestVPNFFI compile into your app target.
// Nothing prebuilt to vendor — iOS 18 / macOS 14 / tvOS 17.

Apple ships as a source Swift package built with UniFFI; Android as JNI compiled from source. Nothing prebuilt to vendor — you build the engine alongside your app.

The SDK family

One engine, wrapped for every platform.

Apple — ForestVPNKit

source SwiftPM

A Swift package built with UniFFI. Add the package URL, import ForestVPNKit, and the mesh and tunnel engine compiles straight into your app target — nothing prebuilt to vendor.

  • ForestVPNKit + ForestVPNFFI product family
  • UniFFI-generated Swift bindings (UniFFI 0.31)
  • iOS 18 · macOS 14 · tvOS 17
  • Consumer, Console and Admin API clients included

Read the Apple quickstart

Apple platform minimums — the ForestVPNKit family builds against these floors.
PlatformMinimum OSProduct
iOSiOS 18ForestVPNKit
macOSmacOS 14ForestVPNKit
tvOStvOS 17ForestVPNKit

Android — JNI bindings

JNI · from source

JNI bindings compiled from source alongside your Gradle build. The platform-agnostic client-core engine runs under the hood — there is no prebuilt package to drop in.

  • forestvpn-android-jni bindings crate
  • Built from source in your own build
  • client-core engine under the hood
  • Kotlin-facing surface

Read the Android quickstart

C ABI + Dart — forestvpn_client.h

C ABI · shipped header

A stable C ABI with a shipped header, forestvpn_client.h. Bind it from Dart, Go, or any language that speaks C: open a client, read status as JSON, drive the tunnel, subscribe to events.

  • forestvpn-client-ffi — the C ABI
  • Shipped header: forestvpn_client.h
  • fvpn_client_open · fvpn_client_status_json · fvpn_client_close
  • Dart FFI bindings via fvpn_init_dart_api

Read the C ABI quickstart

Generated API clients

generated from OpenAPI

One typed client per role plane, regenerated from the committed OpenAPI specs. Point it at the API origin and authenticate with a project-scoped key.

  • TypeScript — @forestvpn/consumer, console and admin-api
  • Rust — consumer, console and admin api-client crates
  • Swift — ForestVPN Consumer, Console and Admin API clients
  • Regenerated with task gen:api-clients

Browse the API clients

client-core — the engine

platform-agnostic

The platform-agnostic Rust engine every SDK wraps — the socket layer, the userspace network stack, MagicDNS, and the transport ladder that adapts to the network it is on.

  • forestvpn-client-core
  • magicsock socket layer + userspace netstack
  • MagicDNS resolver
  • Adaptive transports (direct UDP, DERP, QUIC-DERP)

Read the client-core guide

Pick a language and start building.

Every SDK wraps the same engine and talks to the same Infrastructure API. Read the docs, add a package, and make your first call.