This repository has been archived on 2025-09-14 . You can view files and clone it, but cannot push or open issues or pull requests.
8ef88cfe18e3fec40681cedd400573165cee5f7e
libzt
Library version of ZeroTier
libzt makes it easy to securely connect devices, servers, cloud VMs, containers, and apps everywhere and manage them at scale. We provide a socket-like API supporting SOCK_STREAM, SOCK_DGRAM, and SOCK_RAW. There's no need for system-wide virtual interfaces. This connection is exclusive to your app and fully encrypted via the Salsa20 cipher. For a more in-depth discussion on the technical side of ZeroTier, check out our Manual
| Platform | Static | Shared | Package | Example project/code | Library build instructions |
|---|---|---|---|---|---|
| macOS | libzt.a | libzt.dylib | see below | ||
| iOS | libzt.a | zt.framework | examples/swift | packages/iOS | |
| Windows | libzt.lib (x86), libzt.lib (x64) | libzt.dll (x86), libzt.dll (x64) | examples/cpp/ExampleWindowsCppApp, examples/csharp/ExampleWindowsCSharpApp | see below | |
| Android | libzt.aar | examples/android/ExampleAndroidApp | packages/android | ||
| Linux | see below | see below | see below |
C API: libzt.h Java JNI API: ZeroTier.java
C++ Example
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include "libzt.h"
int main()
{
char *str = "welcome to the machine";
char *remoteIp = "10.8.8.42";
int remotePort = 8080;
int fd, err = 0;
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr(remoteIp);
addr.sin_port = htons(remotePort);
zts_startjoin("path", 0xc7cd7c981b0f52a2); // config path, network ID
if ((fd = zts_socket(AF_INET, SOCK_STREAM, 0)) < 0) {
printf("error creating socket\n");
}
if ((err = zts_connect(fd, (const struct sockaddr *)&addr, sizeof(addr))) < 0) {
printf("error connecting to remote host\n");
}
if ((err = zts_write(fd, str, strlen(str))) < 0) {
printf("error writing to socket\n");
}
zts_close(fd);
zts_stop();
return 0;
}
For an example using only the Virtual Layer 2, see examples/layer2
Build
We recommend using CMake and clang.
git submodule init
git submodule update
make patch
cmake -H. -Bbuild -DCMAKE_BUILD_TYPE=Release
or possibly:
cmake -H. -Bbuild --config Release
Then
cmake --build build
Builds are placed in bin\lib
Commercial License
If you want a commercial license to use libzt in your product contact us directly via contact@zerotier.com
Description
Languages
C++
58%
C
21.6%
C#
5.8%
Java
5%
Rust
3.3%
Other
6.3%