Library / SDK
AravisProject/aravis avatar
AravisProject/aravis

Aravis: GenICam cameras over GigE Vision and USB3, built on glib

A vision library for genicam based cameras

1,298 stars440 forksCLGPL-2.1

At a glance

What is it?
Aravis is a glib and gobject library for acquiring video from GenICam industrial cameras, implementing gigabit ethernet and USB3, and it ships with an ethernet camera simulator so you can develop without hardware. Its README also contains one of the more unusual contribution rules in open source: protocol code may not be based on the A3 specification documents.
Who is it for?
Aravis fits a machine vision application on Linux that talks to industrial cameras and would rather own a glib based stack than a vendor SDK, since the GigE Vision and USB3 protocol implementations, the simulator and the GStreamer plugin cover the path from device to pipeline without proprietary components.
Can I use it commercially?
Yes, with conditions. LGPL-2.1 is a weak copyleft licence: you can use it inside commercial and closed-source software, but if you distribute changes to its own files, you must publish those changes under the same licence.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly C, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

glib and gobject is the decision everything else inherits

Aravis is described as a glib and gobject based library for video acquisition using GenICam cameras. That choice is not cosmetic. It means the library's types are gobjects, so the introspection data in the module/ directory exists to expose them to other languages, and it means the toolchain is meson plus pkg-config style discovery rather than a bespoke build. Repository topics confirm the stack: c, glib, gobject, gobject-introspection, gstreamer, gtk3, genicam, gige and usb3. For a machine vision application on Linux that already lives in a GTK and GStreamer pipeline, this is a library that fits the desktop rather than one that needs glib dragged in for its own sake, which is the strongest argument for it and the reason it would be a poor fit for an embedded target without glib.

Two protocols, two file prefixes

The protocol implementations are separated in the source tree by prefix rather than by module boundary you have to guess at: the GigE Vision code lives in files matching src/arvgv*.[ch] and the USB3 code in src/arvuv*.[ch]. That naming is the project telling you which files implement which wire protocol, and it is the same pair named in the contribution section, so it is also the part of the codebase with a special rule attached. The project currently implements the gigabit ethernet and USB3 protocols used by industrial cameras, which is the whole scope statement: if your camera is on a different transport, this library does not speak it.

The A3 clause is the most unusual paragraph in the README

Contributions to both the Gigabit Ethernet and USB3 protocol code must not be based on the corresponding specification documents published by A3, because that organisation forbids the use of their documents for developing an open source implementation of the specifications. Contributors are told not to use those documents and to state clearly in the pull request that the work is not based on them. That is a legal and ethical constraint sitting inside a technical repository, and it has a practical consequence: a new protocol feature may be implementable from the published behaviour of existing devices rather than from the specification text. It is also why the GenICam standard site is linked separately in the Links section, alongside the project's own forum, releases and NEWS.md release notes. Read it before you write a patch, not after.

Dependencies scale with how much of the project you build

The dependency section is layered by component, which tells you what you are signing up for at each level. The core library depends on zlib, libxml2 and glib2, with optional USB support depending on libusb1. The GStreamer plugin depends on GStreamer1 in addition to the library dependencies, and the simple viewer depends on GStreamer1 and Gtk+3 as well as the library dependencies. The required versions are specified in meson.build in the sources rather than restated in the README, so that file is where you check compatibility. And the library notes that it is perfectly possible to build only the library, reducing the dependencies to the bare minimum. For a server doing acquisition with no display, that distinction is the difference between a small dependency set and a desktop stack.

The simulator is why you can start without a camera

Aravis provides a basic ethernet camera simulator along with a simple video viewer. The simulator is the feature that changes the development experience. Without a simulator, development may otherwise depend on arriving hardware and its device-specific behaviour. With a simulator in the same library, you can write the acquisition path, the feature reading and the frame handling against something deterministic, then point the same code at a camera. The viewer, being described as simple and built on GStreamer1 and Gtk+3, plays the complementary role: it is the thing that tells you whether you are receiving frames at all.

Five build configurations, two release lines

The badges at the top of the README describe the test matrix: Linux, macOS, MinGW, MSVC and MSVC with Conan2, each with its own workflow. That is a wider platform matrix than most C libraries of this kind claim, and it is the practical argument for using Aravis rather than a vendor SDK when your build has to work on more than one developer machine. The release history shows the other half of the picture: 0.9.2 and 0.8.36 were both published on 2026-04-26, minutes apart in the listing, with 0.9.1 from 2025-05-08 before them. Two maintained lines shipping together is how a project signals that 0.8 is the conservative choice and 0.9 is the current one, and you should pick deliberately rather than discovering it during an upgrade. The last push was on 2026-10-12, so both lines are being worked on.

Against a vendor SDK, and against writing your own transport

Two alternatives. The first is the camera manufacturer's SDK, which usually ships with a viewer, sample code and a feature browser for exactly your model, and works on the vendor's own terms; choose it when it works and when being tied to one vendor is acceptable. The trade with Aravis is independence across vendors at the cost of a smaller, less model specific feature set. The second alternative is writing the transport implementation yourself; Aravis saves that work at the cost of dependencies on glib and a project you do not control. The middle case, where the camera vendor SDK is Windows only and your pipeline is Linux and GStreamer, is where this library is hardest to argue against.

Editorial conclusion

Aravis fits a machine vision application on Linux that talks to industrial cameras and would rather own a glib based stack than a vendor SDK, since the GigE Vision and USB3 protocol implementations, the simulator and the GStreamer plugin cover the path from device to pipeline without proprietary components. Skip it if your camera vendor's SDK already works and you have no reason to leave it, and read the contribution rules before you send a patch, because work in src/arvuv*.[ch] and src/arvgv*.[ch] must not be based on the A3 documents and the pull request has to state that. Before building, decide which pieces you need, since building only the library reduces the dependencies to zlib, libxml2 and glib2 while the plugin and the viewer add GStreamer1 and Gtk+3 on top. Releases 0.9.2 and 0.8.36 both landed on 2026-04-26 and the licence is LGPL-2.1-or-later.

Frequently asked questions

What protocols does Aravis support?

It currently implements the gigabit ethernet and USB3 protocols used by industrial cameras, which are GenICam based. The gigabit ethernet code lives in files matching src/arvgv*.[ch] and the USB3 code in src/arvuv*.[ch].

What does Aravis depend on?

The library depends on zlib, libxml2 and glib2, with optional USB support depending on libusb1. The GStreamer plugin adds GStreamer1, and the simple viewer adds GStreamer1 and Gtk+3. Required versions are specified in meson.build, and you can build only the library to keep dependencies minimal.

Can I test Aravis code without a camera?

Yes. Aravis provides a basic ethernet camera simulator as part of the library, alongside a simple video viewer built on GStreamer1 and Gtk+3, so acquisition code can be written and exercised before hardware is available.

Official sources

  1. AravisProject/aravis on GitHub
  2. Issues
  3. License: LGPL-2.1
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/aravisproject-aravis.svg)](https://hysenlabs.com/projects/aravisproject-aravis)

Was this useful?