Model or dataset
datajuicer/data-juicer avatar
datajuicer/data-juicer

Data-Juicer: A Modular Data Processing System for Foundation Model Pipelines

Data processing for and with foundation models! 🍎 🍋 🌽 ➡️ ➡️🍸 🍹 🍷

7,047 stars425 forksPythonApache-2.0

At a glance

What is it?
Data-Juicer is an Apache-2.0 Python framework that turns raw text, image, audio, and video into training-ready datasets through 200+ composable operators and YAML recipes. It targets engineers building pre-training, fine-tuning, agent, or RAG data pipelines, and it scales from a laptop to Ray clusters.
Who is it for?
Adopt Data-Juicer if you need a reproducible, operator-based pipeline for curating large-scale text or multimodal data for LLM pre-training, fine-tuning, or RAG, and if you already use or can adopt Ray for distributed runs. Skip it if your data needs are trivial enough for a few pandas calls, or if you require a tightly integrated commercial platform with managed execution.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

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

DEEP OPEN-SOURCE ANALYSIS

What Data-Juicer Actually Does

Data-Juicer is a data processing framework for foundation model workflows. It does not train models. It prepares data: cleaning, filtering, deduplicating, and synthesizing samples that go into pre-training, fine-tuning, reinforcement learning, or retrieval-augmented generation. The README positions it as "composable infrastructure" with modular building blocks. The target user is an engineer or researcher who needs to turn messy, heterogeneous data into a structured dataset that a model can consume. The repository lists 200+ operators spanning text, image, audio, video, and multimodal data. That breadth is the core selling point. Without it, you would write bespoke scripts for each modality and each transformation. Data-Juicer tries to make those transformations reusable and shareable through a recipe format.

How the Operator and Recipe Model Works

The architecture is operator-centric. Operators are Python classes that apply a single transformation to a dataset. The README shows two types in the quick example: TextLengthFilter and WhitespaceNormalizationMapper. Filters remove samples that fail a condition; mappers transform samples in place. You compose them into a pipeline. The Python API is direct: you create a NestedDataset from a dictionary, call process with a list of operators, and get a new dataset. The recipe-first approach is the bigger deal. Pipelines are defined in YAML files, and the README claims you can version, share, and fork them like code. That makes experiments reproducible. Instead of a script that mutates data in an ad hoc way, you have a declarative config that names operators and their parameters. The release notes mention config validation in v1.6.0, which catches invalid operator settings and executor/schema mismatches before processing. That is a practical safeguard for long-running jobs.

Getting It Running: Commands and Configuration

Installation is via uv or pip. The README shows `uv pip install py-data-juicer`. Then you run a config file with the command `dj-process --config demos/process_simple/process.yaml`. That is the CLI path. The Python path is equally direct. You import from data_juicer.core.data and data_juicer.ops.filter and data_juicer.ops.mapper. The example creates a dataset with three text samples, applies a filter for minimum length 10, then a whitespace normalization mapper. The result is printed. For API-based model calls, v1.6.0 adds a LiteLLM backend. You select it with `api_backend="litellm"` in `prepare_api_model`, which routes chat, embedding, and Responses requests through provider-specific model routing. The default remains the OpenAI-compatible backend. The configuration system appears to be YAML-driven, but the README does not show a full config file structure. You would need the documentation site to get exact keys for your operators.

Scaling and Performance Claims to Scrutinize

The README makes strong performance claims: processing 70B samples in 2 hours on 50 Ray nodes (6400 cores), and deduplicating 5TB in 2.8 hours using 1280 cores. These numbers come from the project's own materials. I cannot verify them, and you should treat them as vendor-reported benchmarks, not independent measurements. The mechanism behind them is Ray. Data-Juicer runs on Ray for distributed execution. The v1.6.0 release adds cluster-aware partitioning, which automatically sets partition counts based on live Ray cluster resources. That is a meaningful improvement for users who do not want to hand-tune partition sizes. The v1.5.5 release mentions Ray Data optimizations and elastic multi-node sharding. So the architecture is clearly built for Ray clusters. If you are running on a single machine, the framework still works, but the scale claims are irrelevant to you. The automatic operator fusion, described as a 2-10x speedup, is another internal optimization. Again, the number is from the project. Fusion likely reduces overhead by combining adjacent operators, but the actual gain depends on your data and operator mix.

Limitations and Cases Where It Is the Wrong Tool

Data-Juicer is not a lightweight utility. It brings a dependency on Ray, a large operator ecosystem, and a learning curve around its config and dataset abstractions. For a one-off cleaning of a CSV file, writing a short pandas script is simpler. The framework's complexity only pays off when you have many samples, multiple modalities, or a need for reproducible pipelines. A second limitation is the operator coverage. The README claims 200+ operators, but it also admits that documentation was only recently refreshed and that 28 operators got new docs in v1.6.0. That suggests some operators may be under-documented. You cannot assume every operator you need exists. For example, the release notes mention an image OHEM selector that selects high-loss samples using a user-supplied scoring function. That is niche. If you need a specific transformation, you may have to write a custom operator, which requires understanding the operator interface. A third limitation is the external model dependency. Some operations, like semantic tagging or API-based filtering, rely on calling a model. The LiteLLM backend helps, but that still requires network access and API keys. Offline or air-gapped environments cannot use those operators.

Alternatives and How They Differ

The closest alternative is a general-purpose data processing framework like Apache Spark or Ray Data itself. Ray Data is the underlying execution engine, but it does not provide domain-specific operators for text quality filtering or multimodal deduplication. You would write those yourself. Data-Juicer gives you those operators out of the box. Another alternative is a commercial platform like Alibaba Cloud PAI, which the README says has deeply integrated Data-Juicer. That is a managed service, so the difference is operational: you do not manage Ray clusters or install packages yourself, but you also do not have the same control or portability. For open-source, you might also consider Hugging Face datasets, which provides some cleaning utilities but nothing close to 200+ operators. The key difference is that Data-Juicer treats data processing as a first-class, composable system with a recipe format, whereas these alternatives are either lower-level or more generic.

Maintenance, Upgrades, and Licensing

The project is under Apache-2.0, which is permissive for commercial use. The repository is active, with releases every few weeks over the past months. The last push was 2026-09-09, and v1.6.0 came out the same day. That cadence means you get bug fixes and new features regularly, but it also means you should track releases. The release notes show multiple robustness fixes, such as fused-filter cache isolation and MinHash state reuse. Those are the kind of issues that only surface in production. Upgrading is not free. The v1.6.0 release notes mention config validation and unified remote export, which could change behavior. If you rely on a specific export format or operator setting, you need to test after upgrade. The documentation refresh is a positive sign for maintainability, as it covers installation, processing, analysis, configuration, and export. The project also has a paper (NeurIPS'25 Spotlight) and a Hugging Face model called Juicer, which is a data refinement model. That model is separate from the core framework. For maintenance planning, you should budget time to read release notes and re-run a small validation pipeline after each update.

Editorial conclusion

Adopt Data-Juicer if you need a reproducible, operator-based pipeline for curating large-scale text or multimodal data for LLM pre-training, fine-tuning, or RAG, and if you already use or can adopt Ray for distributed runs. Skip it if your data needs are trivial enough for a few pandas calls, or if you require a tightly integrated commercial platform with managed execution. Before committing, verify that your required operators exist in the 200+ set, check the operator documentation for multimodal coverage, and test the config validation preflight on a small sample. The project's active release cadence and Alibaba Cloud PAI integration suggest real production use, but you must confirm your specific data formats and export targets are supported by the current operator list.

Official sources

  1. datajuicer/data-juicer on GitHub
  2. License: Apache-2.0
  3. Project website
  4. README
  5. Releases
Community notes

Community notes