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.
2fde6158ed5877ebdadaa3c3f44dc219f4361dde
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 <arpa/inet.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 zts_sockaddr_in addr;
addr.sin_family = ZTS_AF_INET;
addr.sin_addr.s_addr = inet_addr(remoteIp);
addr.sin_port = htons(remotePort);
zts_startjoin("path", 0xc7cd7c981b0f52a2); // config path, network ID
printf("nodeId=%llx\n", zts_get_node_id());
if ((fd = zts_socket(ZTS_AF_INET, ZTS_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 update --init && 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%