2017-06-14 16:58:48 -07:00
# libzt
2018-07-27 17:28:25 -07:00
Library version of [ZeroTier ](https://github.com/zerotier/ZeroTierOne )
2017-06-14 16:58:48 -07:00
***
2017-05-05 18:51:04 -07:00
2017-08-01 14:25:43 -07:00
< a href = "https://www.zerotier.com/?pk_campaign=github_libzt" > < img src = "https://raw.githubusercontent.com/zerotier/ZeroTierOne/master/artwork/ZeroTierIcon.png" width = "128" height = "128" align = "left" hspace = "20" vspace = "9" > < / a >
2017-05-05 18:51:04 -07:00
2018-07-27 17:29:10 -07:00
**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 ](https://en.wikipedia.org/wiki/Salsa20 ) cipher. For a more in-depth discussion on the technical side of ZeroTier, check out our [Manual ](https://www.zerotier.com/manual.shtml?pk_campaign=github_libzt )
2017-05-05 19:12:46 -07:00
2017-05-05 19:15:30 -07:00
< hr >
2017-05-05 19:05:36 -07:00
2017-05-05 19:15:30 -07:00
[](https://webchat.freenode.net/?channels=zerotier)
2017-04-06 19:16:01 -07:00
2018-08-01 17:59:44 -07:00
| Platform | Static | Shared | Package | Example project/code | Library build instructions
| --------- | --- | --- | --- | --- | --- |
| macOS | [libzt.a ](https://download.zerotier.com/RELEASES/1.2.12/dist/libzt/macos/libzt-1.2.0r1-macOS-10.13.6-x64-release.a ) | [libzt.dylib ](https://download.zerotier.com/RELEASES/1.2.12/dist/libzt/macos/libzt-1.2.0r1-macOS-10.13.6-x64-release.dylib ) | | | see below |
2018-08-13 17:15:07 -07:00
| iOS | [libzt.a ](https://download.zerotier.com/RELEASES/1.2.12/dist/libzt/ios/libzt-1.2.0r1-ios-arm64-static-release.tar.tar.gz ) | | [zt.framework ](https://download.zerotier.com/RELEASES/1.2.12/dist/libzt/ios/libzt-1.2.0r1-ios-arm64-framework.tar.gz ) | [examples/swift ](examples/swift ) | [packages/iOS ](packages/iOS ) |
2018-08-01 17:59:44 -07:00
| Windows | [libzt.lib ](https://download.zerotier.com/RELEASES/1.2.12/dist/libzt/win/libzt-1.2.0r1-win10-x86-release.lib ) (x86), [libzt.lib ](https://download.zerotier.com/RELEASES/1.2.12/dist/libzt/win/libzt-1.2.0r1-win10-x64-release.lib ) (x64) | [libzt.dll ](https://download.zerotier.com/RELEASES/1.2.12/dist/libzt/win/libzt-1.2.0r1-win10-x86-release.dll ) (x86), [libzt.dll ](https://download.zerotier.com/RELEASES/1.2.12/dist/libzt/win/libzt-1.2.0r1-win10-x64-release.dll ) (x64) | | [examples/cpp/ExampleWindowsCppApp ](examples/cpp/ExampleWindowsCppApp ), [examples/csharp/ExampleWindowsCSharpApp ](examples/csharp/ExampleWindowsCSharpApp ) | see below |
| Android | | | [libzt.aar ](https://download.zerotier.com/RELEASES/1.2.12/dist/libzt/android/libzt-1.2.0r1-android-armeabi-v7a.aar ) | [examples/android/ExampleAndroidApp ](examples/android/ExampleAndroidApp ) | [packages/android ](packages/android )|
| Linux | see below | see below | | | see below |
2017-05-30 12:35:18 -07:00
2018-08-22 10:49:21 -07:00
C API: [libzt.h ](include/libzt.h )
Java JNI API: [ZeroTier.java ](packages/android/app/src/main/java/ZeroTier.java )
2017-06-14 17:09:18 -07:00
***
2017-10-20 01:25:01 -07:00
### C++ Example
2017-04-20 13:39:46 -07:00
```
2017-10-20 01:25:01 -07:00
#include <arpa/inet.h>
2017-06-14 17:53:32 -07:00
2017-10-20 01:25:01 -07:00
#include "libzt.h"
2017-09-13 16:26:27 -07:00
2017-10-20 01:25:01 -07:00
int main()
{
char *str = "welcome to the machine";
2018-07-27 16:50:21 -07:00
char *remoteIp = "10.8.8.42";
int remotePort = 8080;
int fd, err = 0;
2019-01-14 12:01:29 -08:00
struct zts_sockaddr_in addr;
addr.sin_family = ZTS_AF_INET;
2018-07-27 16:50:21 -07:00
addr.sin_addr.s_addr = inet_addr(remoteIp);
addr.sin_port = htons(remotePort);
2017-10-20 01:25:01 -07:00
2018-07-27 16:50:21 -07:00
zts_startjoin("path", 0xc7cd7c981b0f52a2); // config path, network ID
2019-01-14 12:01:29 -08:00
printf("nodeId=%llx\n", zts_get_node_id());
2017-10-20 01:25:01 -07:00
2019-01-14 12:01:29 -08:00
if ((fd = zts_socket(ZTS_AF_INET, ZTS_SOCK_STREAM, 0)) < 0 ) {
2017-10-20 01:25:01 -07:00
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");
}
2018-07-27 16:50:21 -07:00
zts_close(fd);
2017-10-20 01:25:01 -07:00
zts_stop();
return 0;
2017-09-13 16:26:27 -07:00
}
2017-04-20 13:39:46 -07:00
```
2018-07-19 17:19:06 -07:00
For an example using only the [Virtual Layer 2 ](https://www.zerotier.com/manual.shtml#2_2?pk_campaign=github_libzt ), see [examples/layer2 ](examples/layer2/layer2.cpp )
2017-08-01 14:18:21 -07:00
2017-05-30 13:50:27 -07:00
***
2017-04-20 13:39:46 -07:00
2017-12-15 17:45:42 -08:00
### Build
2017-12-15 16:26:27 -08:00
2018-07-27 16:50:21 -07:00
We recommend using [CMake ](https://cmake.org/ ) and [clang ](https://en.wikipedia.org/wiki/Clang ).
2017-12-15 16:26:27 -08:00
```
2018-10-12 16:06:10 -07:00
git submodule update --init & & make patch
2018-07-31 17:43:50 -07:00
cmake -H. -Bbuild -DCMAKE_BUILD_TYPE=Release
2017-12-15 16:26:27 -08:00
```
2018-07-31 17:43:50 -07:00
or possibly:
2018-07-31 17:29:43 -07:00
```
2018-07-31 17:43:50 -07:00
cmake -H. -Bbuild --config Release
2018-07-31 17:29:43 -07:00
```
2018-07-31 17:43:50 -07:00
Then
2018-07-31 17:29:43 -07:00
```
2018-07-31 17:43:50 -07:00
cmake --build build
2018-07-31 17:29:43 -07:00
```
2018-07-31 17:43:50 -07:00
2018-07-31 17:29:43 -07:00
Builds are placed in `bin\lib`
2017-05-30 13:50:27 -07:00
2017-05-30 12:35:18 -07:00
***
2017-10-20 12:52:32 -07:00
### Commercial License
2017-11-06 13:50:20 -08:00
2018-07-27 16:50:21 -07:00
If you want a commercial license to use libzt in your product contact us directly via `contact@zerotier.com`
2018-07-19 17:19:06 -07:00