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.
- Downloads
- 126
- Dependents
- Not applicable
- Stars
- 1,208
- Forks
- 34
- Contributors
- 23
- Commits
- 7,166
- Latest release
- 0.67.0 ·
About
🐂 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
| Component | Linux | macOS | Windows |
|---|---|---|---|
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:
bacon: run the server with reload-on-changescargo-machete: identify and remove unused dependenciescargo-llvm-cov: calculate test code coveragecargo-sort: ensureCargo.tomlfiles are organized
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_sdor static target at the log directory; Loki handles newline-delimited JSON natively. - Filebeat / Elasticsearch -- configure a
filebeat.inputsentry withtype: filestreamandparsers: [{ ndjson: {} }]. - Vector -- use a
filesource withdecoding.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.
Compatibility
- 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.
| Project | Downloads | Dependents | Stars | Latest release | Runs on (GPU) | Native code | License |
|---|---|---|---|---|---|---|---|
|
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 |
|
A Package Manager for Machine Learning Datasets and Models. |
Not measured | Not applicable | 85 | Not measured | Not measured | Not measured | BSD-3-Clause |
|
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 daysdormancy: last activity 2026-11-06, 3 days ago, E = 365: activefeatured: not featured: unknown homebrew_on_request_365d, repology_families, docker_pull_growth_90dlisted: listed: no archive, new or featured rule applies
Crates3 crates
- oxen-server Primary
- liboxen
- oxen-cli
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
- Description: the crates.io description
- crates.io database dump, fetched
- GitHub releases, fetched
- GitHub repository, fetched
- crates.io package, fetched
- GitHub contributors, fetched
Adoption126 binary downloads per release4 not measured
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| Active dependents | Not measured | Yes | ||
| New dependents (365 days) | Not measured | Yes | ||
| Peak active dependents | Not measured | Yes | ||
| Active dependents as a share of the peak | Not measured | Yes | ||
| Binary downloads per release | 126 | GitHub releases | Yes |
MaintenanceLatest human commit: 3 days ago4 not measured
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| Latest human commit | 2026-11-06 | GitHub repository | Yes | |
| Latest release | 2026-11-06 | GitHub releases | Yes | |
| First release | 2023-04-24 | crates.io database dump | Yes | |
| Latest version | 0.67.0 | crates.io database dump | No | |
| Days the oldest outside issue waits for a reply | 539 | GitHub repository | Yes | |
| Maintainer replies over 365 days | 16 | GitHub repository | Yes | |
| Repository archived | false | GitHub repository | Yes | |
| Repository gone | false | GitHub repository | Yes | |
| Release commit or manifest in the repo | true | crates.io package | No | |
| Published docs | Not measured | Yes | ||
| Latest release fails cargo check | Not measured | Yes | ||
| Build check date | Not measured | Yes | ||
| Build check toolchain | Not measured | Yes |
SecurityNot measured
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| Unpatched vulnerabilities past the grace window | Not measured | Yes | ||
| RustSec unmaintained advisory | Not measured | Yes | ||
| Deprecation notice | Not measured | Yes | ||
| Deprecated requirement | Not measured | Yes |
Distribution41 releases, 94 downloads over 30 days6 not measured
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| Releases | 41 | crates.io database dump | No | |
| Downloads over 30 days | 94 | crates.io database dump | No | |
| Binary downloads over the last 3 releases | 380 | GitHub releases | Yes | |
| Homebrew installs on request over 365 days | Not measured | Yes | ||
| Repology repository families | Not measured | Yes | ||
| Docker pull growth over 90 days | Not measured | Yes | ||
| Docker pulls at the growth baseline | Not measured | Yes | ||
| Every version a prerelease | false | crates.io database dump | Yes | |
| Every version 0.0.x | false | crates.io database dump | Yes | |
| Every version yanked | Not measured | Yes | ||
| Crate deleted from crates.io | Not measured | Yes |
Repository1,208 stars, 34 forks, 23 contributors, 7,166 commits. Stars alone never qualify a project.
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| GitHub stars | 1208 | GitHub repository | Yes — one part of the repository route | |
| GitHub forks | 34 | GitHub repository | Yes — one part of the repository route | |
| Contributors with a GitHub account | 23 | GitHub contributors | Yes — one part of the repository route | |
| Commits on the default branch | 7166 | GitHub repository | No | |
| Repository's main crate left out of the entry | none | crates.io database dump | Yes |
Facts that never count
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| License | Apache-2.0 | GitHub repository | No | |
| Runs on, from listed crates and their direct dependencies | GPU support unknown | crates.io database dump | No | |
| What shows each backend | no dependency or feature matches a backend row | crates.io database dump | No | |
| Native code, from listed crates and their dependencies | Binds native code: librocksdb-sys, lmdb-master-sys, ffmpeg-sys-next (feature ffmpeg), libduckdb-sys (feature docs) | crates.io database dump | No | |
| Python bindings, from direct dependencies of listed crates | No Python binding crate found | crates.io database dump | No | |
| Crates that depend on a listed crate directly | Not measured | No |
Corrections and review history
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.