Skip to content
JUICE is a UDP Interactive Connectivity Establishment library
C CMake Makefile
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
cmake/Modules Added CMakeLists Jan 16, 2020
include/juice Implemented for trickled and non-trickled candidates Jan 18, 2020
src Prefixed CRC32 function Feb 6, 2020
test Prefixed CRC32 function Feb 6, 2020
.editorconfig Added .clang-format and .editorconfig Jan 3, 2020
.gitignore Cleaned up .gitignore Jan 3, 2020
CMakeLists.txt Changed version to 0.2.2 Feb 6, 2020
LICENSE Initial commit Jan 1, 2020
Makefile Changed make defaults to release Feb 6, 2020

libjuice - UDP Interactive Connectivity Establishment

libjuice 🍋💦 (JUICE is a UDP Interactive Connectivity Establishment library) allows to open bidirectionnal User Datagram Protocol (UDP) streams with Network Address Translator (NAT) traversal.

The library is a simplified implementation of the Interactive Connectivity Establishment (ICE) in C99 for POSIX platforms. It supports only a single component over UDP per session in a standard single-gateway network topology, as this should be sufficient for the majority of use cases nowadays.

Licensed under LGPLv2, see LICENSE.


The library aims at implementing a simplified but fully compatible ICE agent (RFC8445, and RFC5389 for STUN) with an interface based on SDP (RFC4566). It supports both IPv4 and IPv6.

The limitations compared to a fully-featured ICE agent are:

  • Only UDP is supported as transport protocol. Other protocols are ignored.
  • Only one component is supported. This is sufficient for WebRTC Data Channels or multiplexed RTP/RTCP (RFC5731).
  • Only the default gateway is used when gathering candidates. This should behave identically to the full implementation on most client systems and allows to greatly reduce complexity.



Building with CMake (preferred)

$ mkdir build
$ cd build
$ cmake -DUSE_NETTLE=1 ..
$ make

Building directly with Make

$ make USE_NETTLE=1


See test/main.c for a complete local connection example.

You can’t perform that action at this time.