#magic #file #ffi #bindings

sys no-std magic-sys

Declarations for the libmagic C library

15 releases

Uses old Rust 2015

0.3.0 Aug 18, 2022
0.3.0-alpha.3 Nov 7, 2021
0.3.0-alpha.1 Oct 22, 2021
0.2.1 Sep 7, 2020
0.0.6 Dec 21, 2014

#163 in No standard library

Download history 2891/week @ 2023-05-31 3556/week @ 2023-06-07 2562/week @ 2023-06-14 3508/week @ 2023-06-21 3421/week @ 2023-06-28 4679/week @ 2023-07-05 3559/week @ 2023-07-12 5556/week @ 2023-07-19 4580/week @ 2023-07-26 6227/week @ 2023-08-02 5518/week @ 2023-08-09 5832/week @ 2023-08-16 4738/week @ 2023-08-23 4619/week @ 2023-08-30 4166/week @ 2023-09-06 3751/week @ 2023-09-13

18,388 downloads per month
Used in 5 crates (2 directly)


336 lines

rust-magic-sys linux build status windows build status mac build status

Rust declarations for libmagic.

This cargo -sys package provides libmagic declarations for e.g. the magic binding.


magic-sys is available on crates.io so you can use it like this (in your Cargo.toml):

magic-sys = "0.3"

The rustdoc is available on docs.rs.


This crate requires the libmagic C library in version 5.

You need to specify your libmagic version by activating the matching magic-sys feature.
Each API version has a crate feature like "v5-38" (v5.38 is also the default), see Cargo.toml
If you use a different version of libmagic, adjust your configuration:

version = "0.3"
default-features = false
features = ["v5-41"]

Note that those version features are additive, so "v5-41" implies "v5-40" and other previous versions.

libmagic needs to be installed in a standard location (also see issue #1).

On a Debian based Linux system this can be achieved like this:

sudo apt-get install libmagic1 libmagic-dev

On RHEL/Cent OS, Gentoo and others you will need to install the file package.

On Mac OS X you can use Homebrew:

brew install libmagic

Feedback for Windows (issue #2) support is appreciated!

You can use Microsoft's vcpkg via vcpkg-rs and cargo-vcpkg. If you choose the latter, that means you'll have to:

cargo install cargo-vcpkg
cargo vcpkg build

Afterwards, you can cargo build etc. your crate as usual.


The Minimum Supported Rust Version (MSRV) is Rust 1.38 or higher.

This version might be changed in the future, but it will be done with a crate version bump.


By default libmagic will be searched in the system library paths. If you need to use a different library or are cross-compiling, you can set the MAGIC_DIR and MAGIC_STATIC environment variables.


Tells rustc where to find libmagic.so / libmagic.a. Can have a target-specific prefix like X86_64_UNKNOWN_LINUX_MUSL_MAGIC_DIR


Controls static linking with libmagic. Enabled automatically if there's only a libmagic.a in the (provided) search path or if explicitly enabled like MAGIC_STATIC=true. Can have a target-specific prefix like X86_64_UNKNOWN_LINUX_MUSL_MAGIC_STATIC

Similarly MAGIC_STATIC=false can be used to choose to link libmagic dynamically. If unset but both libraries are available, the build will bail out with an error and you have to set one option explicitly.


The optional vcpkg integration has its own set of environment variables, see vcpkg crate docs. If you do not use cargo vcpkg build, you will have to either

  • vcpkg install libmagic and set the environment variables for your vcpkg root directory
  • vcpkg integrate install your vcpkg root user-wide


Licensed under either of

at your option.


Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.