8 releases

0.3.0 Jan 28, 2023
0.2.0 Aug 14, 2021
0.1.5 Oct 17, 2020
0.1.3 Mar 22, 2020
0.1.1 Feb 8, 2020

#129 in FFI

Download history 154/week @ 2023-06-07 214/week @ 2023-06-14 275/week @ 2023-06-21 305/week @ 2023-06-28 77/week @ 2023-07-05 182/week @ 2023-07-12 124/week @ 2023-07-19 171/week @ 2023-07-26 386/week @ 2023-08-02 131/week @ 2023-08-09 146/week @ 2023-08-16 361/week @ 2023-08-23 396/week @ 2023-08-30 106/week @ 2023-09-06 120/week @ 2023-09-13 181/week @ 2023-09-20

934 downloads per month
Used in 3 crates (via apriltag)


174K SLoC

C 172K SLoC // 0.0% comments Rust 2K SLoC // 0.0% comments C++ 130 SLoC // 0.2% comments Python 26 SLoC Shell 8 SLoC // 0.4% comments


Crates.io Documentation Crate License Dependency status build

This crate provides Rust bindings for AprilTag C library.


Install AprilTag library from official repository.

Import apriltag-sys dependency in your Cargo.toml

apriltag-sys = "0.2"

There are currently four options to specify how apriltag-sys will compile and link the apriltag C library. These are specified by setting the APRILTAG_SYS_METHOD environment variable to one of the following values:

  • pkg-config-then-static (default) - This will try pkg-config first, then will fallback to raw,static.
  • pkg-config - This will use pkg-config. Panic upon failure.
  • raw,static - The environment variable APRILTAG_SRC must be set to a directory with the April Tag C library source code. The .c files will be compiled by directly calling the C compiler and statically linked.
  • cmake,dynamic - The environment variable APRILTAG_SRC must be set to a directory with the April Tag C library source code. The cmake command will be invoked to call the C compiler and the resulting library will be dynamically linked.

The location of the apriltag source is specified by the APRILTAG_SRC environment variable. If this is not set, a local git submodule checkout of the apriltag source will be used.

Building under Windows

Strictly speaking, using apriltag on Microsoft Windows is not officially supported by the developers. In practice, the library works well even on this operating system. The only additional complexity emerges during the building process. The C library requires pthread.h not shipped with Windows by default. Consequently, different shims like pthreads4w and Pthreads-w32 are required. If one of them is installed, setting the environment variables APRILTAG_SYS_WINDOWS_PTHREAD_INCLUDE_DIR to its include directory and APRILTAG_SYS_WINDOWS_PTHREAD_STATIC_LIB to the compiled static library allows a successful build under Windows with APRILTAG_SYS_METHOD=raw,static.

As an example using vcpkg, building under Windows consists of three additional steps:

  1. Install the shim using vcpkg install pthread:x64-windows-static
  2. Specify the include directoy (here in PowerShell): $env:APRILTAG_SYS_WINDOWS_PTHREAD_INCLUDE_DIR="%SPECIFY VCPKG DIRECTORY HERE%\installed\x64-windows-static\include"
  3. Specify the path to the static library (again in PowerShell): $env:APRILTAG_SYS_WINDOWS_PTHREAD_STATIC_LIB="%SPECIFY VCPKG DIRECTORY HERE%\installed\x64-windows-static\lib\pthreadVC3.lib""

Some shims require winmm.dll for high-precision timing shipped by default with all Windows installations. If this linking is not necessary, it can be omitted by setting APRILTAG_SYS_WINDOWS_NO_WINMM=1.


BSD-2-Clause. Please see the license file.

No runtime deps