oxen

App Listed

Oxen server is a fast data version control backend, supporting local disk and S3. Self host your repositories on your own storage, or use the hosted platform on Oxen.ai. Stores, syncs, and serves versioned datasets, model checkpoints, game assets, studio media, and any large data.

Checked · Sources

Downloads
126
Dependents
Not applicable
Stars
1,208
Forks
34
Contributors
23
Commits
7,166
Latest release
0.67.0 ·

About

From the project README ·

Oxen.ai Logo Oxen.ai Logo

🐂 What is Oxen?

Oxen is a lightning fast data version control system for large datasets. We aim to make versioning data as easy as versioning code.

The interface mirrors git, but shines where git and git-lfs fall short. Oxen is built from the ground up for any data type, from machine learning training data and model weights to game assets and studio media, and is optimized to handle repositories with millions of files and terabytes of data.

oxen init
oxen add images/
oxen add annotations/*.parquet
oxen commit "Adding 200k images and their corresponding annotations"
oxen push origin main

Use Oxen through the oxen CLI, the oxenai Python package 🐍, or the HTTP API, and host your repositories on Oxen.ai or self host the oxen-server on your own storage. You can also embed the same liboxen crate 🦀 that powers all of it.

🌾 What kind of data?

Oxen is designed to efficiently manage large data in any format - including images, audio, video, text or tabular data like parquet files with millions of rows. Behind the scenes Oxen can store any blob type, but has specialized metadata extractors for certain filetypes and caches this information in the merkle tree for fast access later.

Read the full README

🚀 Built for speed

One of the main reasons datasets are hard to maintain is the pure performance of indexing the data and transferring the data over the network. We wanted to be able to index hundreds of thousands of images, videos, audio files, and text files in seconds.

Watch below as we version hundreds of thousands of images in seconds 🔥

But speed is only the beginning.

✅ Features

Oxen is built around ergonomics, ease of use, and it is easy to learn. If you know how to use git, you know how to use Oxen.

  • 🔥 Fast (efficient indexing and syncing of data)
  • 🧠 Easy to learn (same commands as git)
  • 💪 Handles large files (images, videos, audio, text, parquet, json, model weights, csv, etc)
  • 🗄️ Index lots of files (millions of images? no problem)
  • 📊 Native tabular data handling (index and query csv, parquet, jsonl files)
  • 📈 Tracks changes over time (never worry about losing the state of your data)
  • 🤝 Collaborate with your team (sync to an oxen-server)
  • 🌎 Workspaces to interact with the data on the centralized server
  • 👀 Better data visualization on OxenHub

🐮 Learn The Basics

To learn what everything Oxen can do, the full documentation can be found at https://docs.oxen.ai.

🧑‍💻 Getting Started

You can install through homebrew or pip or from our releases page. When upgrading the CLI or a self-hosted oxen-server, check the migrations for any step the new release asks you to run.

🖥️ Platform Support
ComponentLinuxmacOSWindows
oxen CLI✅✅✅
oxenai Python package✅✅✅
oxen-server✅✅❌

oxen-server is not supported on Windows — run it on Linux, macOS, or in Docker. The oxen CLI and Python client are supported on Windows and connect to a server hosted on a supported platform.

🐂 Install Command Line Tool

Install via Homebrew:

brew install oxen
🐍 Install Python Library
pip install oxenai
⬇️ Clone Dataset

Clone your first Oxen repository from the OxenHub.

oxen clone https://hub.oxen.ai/ox/CatDogBBox

🤝 Support

If you have any questions, comments, suggestions, or just want to get in contact with the team, feel free to email us at hello@oxen.ai

👥 Contributing

This repository contains the Python library that wraps the core Rust codebase. We would love help extending out the python interfaces, the documentation, or the core rust library.

Code bases to contribute to:

See the CONTRIBUTING.md document for guidelines on external contributions.

All contributors are required to follow the CODE_OF_CONDUCT.md. The tl;dr is be nice and respectful during all engagements :)

If you are building anything with Oxen.ai or have any questions we would love to hear from you in our discord.

Build 🔨

Each codebase has its own build instructions, please refer to the Rust build instructions and oxen-python's build instructions for specifics.

However, each codebase shares the same pre-requisites and pre-commit hooks.

Prerequisites
Automatic Install

You should use bin/install-prereqs to automatically install the required development tools and toolchains for Rust and Python. Execute that as:

bin/install-prereqs

It supports MacOS and Debian-based Linux distributions. If you have a different OS or distribution, or if you have some error with the install script, you can follow the manual installation steps below.

Manual Installation

Oxen is purely written in Rust 🦀. You should install the Rust toolchain with rustup.

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Once you have rust, install the following developer tools:

You can install all of these at once with the following command:

cargo install bacon cargo-machete cargo-llvm-cov cargo-sort

Make sure cmake is installed. cmake can be installed on macOS with:

brew install cmake

The Python interface uses liboxen bindings provided by PyO3.

The oxen-python codebase requires installing uv. Use the version pinned in tool-versions.env:

source ./tool-versions.env && curl -LsSf "https://astral.sh/uv/${UV_VERSION}/install.sh" | sh

If you use mise to manage your Python installs, you may run into an error where the oxen-py crate can't find the Python dynamic library to link with, e.g., dyld[31558]: Library not loaded: @rpath/libpython3.13.dylib

You can fix it by adding this to your mise config (~/.config/mise/config.toml)

[env]
DYLD_LIBRARY_PATH = "{{ exec(command='mise where python') }}/lib"
Pre-Commit Hooks

We use pre-commit-hooks to check for commit consistency.

Install with uv as a tool:

uv tool install pre-commit

Install Oxen's pre-commit hooks locally using:

pre-commit install
Production Release Build

For deployment, build with the production feature flag and --release:

cargo build --workspace --release --features production

This enables:

  • OpenTelemetry tracing (otel) -- export spans to any OTLP-compatible collector (Jaeger, Tempo, Datadog, etc.). See OpenTelemetry Tracing for runtime configuration.
  • FFmpeg thumbnails (ffmpeg) -- generate video/image thumbnails via FFmpeg (requires FFmpeg libraries installed on the host).
  • Performance logging (perf-logging) -- additional timing instrumentation for internal operations.

Without --features production, the default build excludes OTel dependencies and FFmpeg support, keeping the binary smaller for local development.

The published Docker image names liboxen/ffmpeg,oxen-server/otel rather than production, so it ships thumbnails and tracing without the extra timing instrumentation perf-logging adds. Tracing is inert there until an OTLP endpoint is configured at runtime.

Logging

Oxen uses structured logging via the tracing crate. All log output goes to stderr by default in a human-readable format. This applies to the CLI (oxen), the server (oxen-server), and any code using liboxen (including the Python bindings).

Controlling Log Level

Set the RUST_LOG environment variable to control verbosity.

# Show debug logs from the oxen library
RUST_LOG=debug oxen push origin main

# Show only warnings and errors
RUST_LOG=warn oxen-server start

# Fine-grained: debug for liboxen, warn for everything else
RUST_LOG=warn,liboxen=debug oxen-server start

RUST_LOG gates the log destinations — stderr, the JSON file, and error reporting. It does not gate OpenTelemetry span export, which has its own filter (OXEN_OTEL_FILTER); raising log verbosity for a debugging session leaves the exported traces unchanged.

File Logging with OXEN_LOG_DIR

Set OXEN_LOG_DIR to enable file-based logging in addition to stderr. This env var is a directory where rotating log files are written. Log files are written as newline-delimited JSON (one JSON object per line), rotated daily. Each line includes the timestamp, level, target, thread ID, source file, and line number.

OXEN_LOG_DIR=./logs/ RUST_LOG=warn oxen clone https://hub.oxen.ai/ox/CatDogBBox
OXEN_LOG_DIR=/var/log/oxen oxen-server start

Log files are named {app_name}.{date} (e.g. oxen-server.2026-04-06) inside the configured directory.

To ingest these logs with standard tooling:

  • Promtail / Grafana Loki -- point a file_sd or static target at the log directory; Loki handles newline-delimited JSON natively.
  • Filebeat / Elasticsearch -- configure a filebeat.inputs entry with type: filestream and parsers: [{ ndjson: {} }].
  • Vector -- use a file source with decoding.codec = "json".
  • jq -- for ad-hoc inspection:
# Stream logs, filter for errors
tail -f ~/.oxen/logs/oxen-server.2026-04-06 | jq 'select(.level == "ERROR")'

Prometheus Metrics

oxen-server can expose a Prometheus-compatible metrics endpoint. Requires the metrics compile-time feature (included in production) and OXEN_METRICS_PORT at runtime. See Prometheus Metrics for details.

OpenTelemetry Tracing

oxen-server can export tracing spans to any OTLP-compatible collector (Jaeger, Tempo, etc.), continuing a trace begun by whoever called it. The release image is built with the otel feature; a local build needs it named explicitly. Export stays off until the standard OTEL_EXPORTER_OTLP_ENDPOINT is set. The CLI and the Python bindings can export too. See OpenTelemetry Tracing for the full env-var reference.

FmtSpan Events

Span lifecycle events can be emitted as log lines on stderr for lightweight tracing. See FmtSpan Events for details.

Why build Oxen?

Oxen was built by a team of machine learning engineers, who have spent countless hours in their careers managing datasets. We have used many different tools, but none of them were as easy to use and as ergonomic as we would like.

If you have ever tried Git LFS to version large datasets and became frustrated, we feel your pain. Solutions like Git LFS are unwieldy and painfully slow in practice. We needed a faster alternative designed for large datasets.

If you have ever uploaded a large dataset of images, audio, video, or text to a cloud storage bucket with the name:

s3://data/images_july_2022_final_2_no_really_final.tar.gz

We built Oxen to be the tool we wish we had.

Why the name Oxen?

"Oxen" 🐂 comes from the fact that the tooling will plow, maintain, and version your data like a good farmer tends to their fields 🌾. Let Oxen take care of the grunt work of your infrastructure so you can focus on the higher-level problems that matter to your product.

License

Oxen is licensed under the Apache License 2.0.

Runs on
GPU support unknown
What shows it
  • no dependency or feature matches a backend row
Native code
Required
  • Binds native code: librocksdb-sys, lmdb-master-sys, ffmpeg-sys-next (feature ffmpeg), libduckdb-sys (feature docs)
Python bindings
No Python binding crate found
License
Apache-2.0

Compare with similar projects

Order: strongest tier first, then most downloads, then name, with unmeasured values last. A library counts downloads over 30 days. An app counts binary downloads per release. An app with none counts its crate downloads over 30 days. ML Rust runs this catalogue, so its closest project always gets a row.

oxen beside the projects that share a topic with it
ProjectDownloadsDependentsStarsLatest releaseRuns on (GPU)Native codeLicense
oxen This page App Listed

Oxen server is a fast data version control backend, supporting local disk and S3. Self host your repositories on your own storage, or use the hosted platform on Oxen.ai. Stores, syncs, and serves versioned datasets, model checkpoints, game assets, studio media, and any large data.

126 binary downloads per release Not applicable 1,208 0.67.0 GPU support unknown Binds native code: librocksdb-sys, lmdb-master-sys, ffmpeg-sys-next (feature ffmpeg), libduckdb-sys (feature docs) Apache-2.0
hf-hub Featured

Rust client for the Hugging Face Hub API

3,442,405 downloads over 30 days 578 343 1.0.0 GPU support unknown No native code found Apache-2.0
zarrs Featured

A library for the Zarr storage format for multidimensional arrays and metadata

75,052 downloads over 30 days 51 285 0.23.14 GPU support unknown Binds native code: blosc-src (feature blosc), gdeflate-sys (feature gdeflate), zfp-sys (feature zfp), zstd-sys (feature zstd) Apache-2.0 OR MIT
xet-core Listed

Async runtime, configuration, logging, and utility infrastructure for the Hugging Face Xet client tools.

Python bindings

467,103 downloads over 30 days 9 625 1.8.0 GPU support unknown No native code found Apache-2.0
vortex Listed

An extensible, state-of-the-art framework for columnar compression, and the fastest FOSS columnar file format. Formerly at @spiraldb, now an Incubation Stage project at LFAI&Data, part of the Linux Foundation.

98,129 downloads over 30 days 32 3,310 0.93.0 GPU support unknown Binds native code: zstd-sys Apache-2.0
nebula App Listed Dormant

A Package Manager for Machine Learning Datasets and Models.

Not measured Not applicable 85 Not measured Not measured Not measured BSD-3-Clause
compressr App New

Model conversion and quantization with no Python: reads SafeTensors, GGUF, TCF and PyTorch state dicts, writes SafeTensors, GGUF and TCF, and quantizes to Q2_K through Q8_0 and IQ4 formats, including Q4_K_M mixes. GPTQ, AWQ, NF4, FP8, EXL2 and ONNX input are not implemented.

Python bindings

23 downloads over 30 days Not applicable 0 0.2.1 GPU support unknown No native code found Apache-2.0
Why ListedNo archive, New or Featured rule places it, so it is Listed.

What it lacks for Featured

  • The check holds no value for Homebrew installs on request over 365 days, Repology repository families, Docker pull growth over 90 days. A gate that lacks its signal does not pass.

What else the check found

  • The last activity is on 6 Nov 2026, 3 days ago. The rules expect an update within 365 days. Dormancy rule

Not measured: Homebrew installs on request over 365 days, Repology repository families, Docker pull growth over 90 days.

Exact rules: Listed, Featured app. The check on applied thresholds version 9.

Every rule outcome, as the check records it
  • expected-interval: app: E = 365 days
  • dormancy: last activity 2026-11-06, 3 days ago, E = 365: active
  • featured: not featured: unknown homebrew_on_request_365d, repology_families, docker_pull_growth_90d
  • listed: listed: no archive, new or featured rule applies
Crates3 crates

Measurements and sources

Each signal row shows the raw value, its source and the fetch date. The Sources list gathers every distinct source on this page. Movement needs more history.

Sources6 sources
Adoption126 binary downloads per release4 not measured
Adoption measurements
SignalValueSourceFetchedCounts
Active dependentsNot measuredYes
New dependents (365 days)Not measuredYes
Peak active dependentsNot measuredYes
Active dependents as a share of the peakNot measuredYes
Binary downloads per release126GitHub releasesYes
MaintenanceLatest human commit: 3 days ago4 not measured
Maintenance measurements
SignalValueSourceFetchedCounts
Latest human commit2026-11-06GitHub repositoryYes
Latest release2026-11-06GitHub releasesYes
First release2023-04-24crates.io database dumpYes
Latest version0.67.0crates.io database dumpNo
Days the oldest outside issue waits for a reply539GitHub repositoryYes
Maintainer replies over 365 days16GitHub repositoryYes
Repository archivedfalseGitHub repositoryYes
Repository gonefalseGitHub repositoryYes
Release commit or manifest in the repotruecrates.io packageNo
Published docsNot measuredYes
Latest release fails cargo checkNot measuredYes
Build check dateNot measuredYes
Build check toolchainNot measuredYes
SecurityNot measured
Security measurements
SignalValueSourceFetchedCounts
Unpatched vulnerabilities past the grace windowNot measuredYes
RustSec unmaintained advisoryNot measuredYes
Deprecation noticeNot measuredYes
Deprecated requirementNot measuredYes
Distribution41 releases, 94 downloads over 30 days6 not measured
Distribution measurements
SignalValueSourceFetchedCounts
Releases41crates.io database dumpNo
Downloads over 30 days94crates.io database dumpNo
Binary downloads over the last 3 releases380GitHub releasesYes
Homebrew installs on request over 365 daysNot measuredYes
Repology repository familiesNot measuredYes
Docker pull growth over 90 daysNot measuredYes
Docker pulls at the growth baselineNot measuredYes
Every version a prereleasefalsecrates.io database dumpYes
Every version 0.0.xfalsecrates.io database dumpYes
Every version yankedNot measuredYes
Crate deleted from crates.ioNot measuredYes
Repository1,208 stars, 34 forks, 23 contributors, 7,166 commits. Stars alone never qualify a project.
Repository measurements
SignalValueSourceFetchedCounts
GitHub stars1208GitHub repositoryYes — one part of the repository route
GitHub forks34GitHub repositoryYes — one part of the repository route
Contributors with a GitHub account23GitHub contributorsYes — one part of the repository route
Commits on the default branch7166GitHub repositoryNo
Repository's main crate left out of the entrynonecrates.io database dumpYes
Facts that never count
Facts that never count measurements
SignalValueSourceFetchedCounts
LicenseApache-2.0GitHub repositoryNo
Runs on, from listed crates and their direct dependenciesGPU support unknowncrates.io database dumpNo
What shows each backendno dependency or feature matches a backend rowcrates.io database dumpNo
Native code, from listed crates and their dependenciesBinds native code: librocksdb-sys, lmdb-master-sys, ffmpeg-sys-next (feature ffmpeg), libduckdb-sys (feature docs)crates.io database dumpNo
Python bindings, from direct dependencies of listed cratesNo Python binding crate foundcrates.io database dumpNo
Crates that depend on a listed crate directlyNot measuredNo

Corrections and review history

Report a correction

No correction applies to this entry.

Judgments

A judgment enters only through an approved issue and a merged pull request.

No judgment applies to this entry.