Self-hosted service
ModelEngine-Group/DataMate avatar
ModelEngine-Group/DataMate

DataMate: a self-hosted data workbench for fine-tuning and RAG corpora

DataMate is an enterprise-level data processing platform designed for model fine-tuning and RAG retrieval.

368 stars46 forksTypeScriptMIT

At a glance

What is it?
DataMate bundles collection, cleaning, synthesis, annotation, evaluation and knowledge generation into one Docker or Helm deployment. The interesting part is the operator model and the Python execution runtime; the cost is a multi-service install with a hard dependency on Sealed Secrets in Kubernetes.
Who is it for?
Adopt DataMate if you already run Kubernetes or Docker Compose and need a shared place where annotation, synthesis and evaluation steps live next to each other rather than in separate scripts. Do not adopt it if you only need one cleaning pass over a static file: the install pulls in Milvus, Label Studio and a Ray-based executor, and the README does not document operator authoring or evaluation metrics in enough detail to plan around.
Can I use it commercially?
Yes. MIT 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 20 days ago.
What is it written in?
Mainly TypeScript, 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

The gap DataMate is aimed at: pipeline sprawl around model data

Teams preparing data for fine-tuning or retrieval usually end up with a folder of notebooks, a shell script that calls an LLM for synthesis, a separate Label Studio instance for human review, and a spreadsheet tracking which evaluation run used which dataset version. The README frames DataMate as an answer to that: an enterprise-level data processing platform for model fine-tuning and RAG retrieval, with data collection, data management, operator marketplace, data cleaning, data synthesis, data annotation, data evaluation and knowledge generation listed as core modules. The intended user is not a solo researcher with one CSV. It is a team that needs the same cleaning and synthesis steps to be repeatable across several datasets, and that wants the annotation tool and the vector store inside the same deployment rather than wired together by hand. The visual orchestration claim, drag-and-drop workflow design, is what makes that plausible: the pipeline definition becomes an artifact instead of a script someone edits in place. Who it is not for is equally clear from the module list. If your work is a one-off scrape plus a prompt, the eight modules are surface area you will not use.

How the pieces fit: a TypeScript control plane over a Python execution runtime

The repository layout is the most informative part of the material. The primary language is TypeScript, and the backend directory splits into an api-gateway, a services/main-application, and shared libraries named domain-common and security-common. That is a conventional service split: routing at the edge, business modules behind it, and two shared packages carrying domain types and security concerns. The part that actually does data work sits under runtime/. There is runtime/datamate-python, described as a FastAPI backend service, and runtime/python-executor, described as a Ray executor framework. Ray is the detail worth pausing on. It implies operator execution is distributed across workers rather than run inline in the API process, which is the right shape for cleaning and synthesis jobs that fan out over many records. runtime/ops is described as the operator ecosystem, and the README separately advertises an operator marketplace with built-in operators and support for custom ones. So the data flow reads as: a workflow defined in the front end is dispatched through the gateway to the main application, which hands operator invocations to the Python executor, which distributes them over Ray. runtime/datax is listed as a DataX data frame, which suggests an existing frame abstraction is reused for tabular movement rather than invented here. I cannot confirm from the supplied material how a workflow definition is serialized, how operator versions are pinned, or how intermediate results are stored between steps. Those are the questions to answer from runtime/ops/README.md before designing around it.

Getting it running: make targets, profiles and the localhost:30000 entry point

There are two paths in the README. The fastest is a single compose file pulled over the network: wget the docker-compose.yml from deployment/docker/datamate/, then run it with REGISTRY=ghcr.io/modelengine-group/ docker compose up -d. The documented alternative from a clone is make install, which prompts for a deployment method and accepts 1 for Docker/Docker-Compose or 2 for Kubernetes/Helm. The README also gives the compose invocation directly for machines without make, adding a milvus profile: REGISTRY=ghcr.io/modelengine-group/ docker compose -f deployment/docker/datamate/docker-compose.yml --profile milvus up -d. The front end is then reachable at http://localhost:30000. Optional components are separate targets: make install-label-studio for the annotation tool, make build-mineru and make install-mineru for enhanced PDF processing, and make install-deer-flow for the DeerFlow service. For local changes the documented loop is make build followed by make install dev=true, which builds the image and deploys from it. Offline installs use make download to fetch dependent images first. make help is documented as listing all targets and flags, and given how many targets exist that is the command to run first rather than the README. Uninstall is make uninstall, which prompts once about deleting volumes and applies that single answer to every component, removing milvus, then label-studio, then datamate so the shared network goes last.

Kubernetes deployment forces a Sealed Secrets dependency

This is the sharpest constraint in the material. The Kubernetes path requires the Bitnami Sealed Secrets Controller. Database passwords and JWT secrets are stored encrypted in Git under deployment/kubernetes/sealed-secrets/ and decrypted by the controller in-cluster at deploy time. The README's install is a Helm chart from the bitnami-labs repository into kube-system, verified with kubectl get pods -n kube-system | grep sealed-secrets. Rotating a password means re-encrypting with kubeseal, and the README gives the exact form: echo -n "new-password" | kubeseal --raw --name datamate-conf --namespace datamate --scope namespace-wide. Two consequences follow. First, the cluster needs the controller running before DataMate will start, which rules out clusters where you cannot install cluster-scoped components. Second, the sealed-secrets directory in Git is tied to the controller's private key. Lose or rotate that key and the committed ciphertext is worthless, so backup of the controller key is part of operating DataMate, not an optional extra. Air-gapped installs are documented but manual: pull bitnami/sealed-secrets-controller:latest, docker save it to a tar, move it to your registry, then install the chart with a custom image reference, and fetch the kubeseal CLI separately. Docker Compose sidesteps all of this; the README states plainly that it does not require Sealed Secrets and uses a .env file kept out of Git by .gitignore. That is a weaker secret story, but it is the honest trade for a single-machine deployment.

What the documentation does not tell you about operators and evaluation

The README lists eight core modules and promises a rich set of built-in operators plus support for custom ones. It never shows an operator definition, a registration step, or a manifest format. The pointer is runtime/ops/README.md, and until that file is read, the central extensibility claim cannot be sized. The same applies to data evaluation. It appears in the module list and in the repository topics as data-evaluation, but no metric, scoring method or report format is described in the supplied material. Knowledge generation is named and not explained; the reasonable inference is that it produces retrieval-ready artifacts, but the README does not say so. There is also a versioning question the material does not answer: releases v1.0.0, v1.0.1 and v1.0.2 landed within about four weeks of each other in April 2026, on a repository whose last push is dated 2026-08-27. Three patch releases in a month on a 1.0 line usually means early-adopter bug fixing, and nothing in the README describes a migration path between versions or a schema-stability guarantee for stored pipelines. If you plan to keep workflow definitions in version control and upgrade the platform underneath them, that gap is the thing to close before you commit, not after.

Where DataMate is the wrong choice, and what to use instead

The clearest failure mode is scope mismatch. DataMate is a platform with a web UI, a gateway, a main application, a Ray executor, Milvus for vectors, and optional Label Studio and Mineru services. Someone who needs to strip boilerplate from 50,000 documents and write Parquet has a job that a single Python script finishes in an afternoon, with no cluster, no Sealed Secrets Controller, and no upgrade surface. The honest alternative for that job is plain pandas or Polars plus your own script: same transformation, no orchestration layer, no service mesh of containers to keep alive. The difference in approach is real rather than cosmetic. DataMate's value comes from the operator being a first-class, reusable, UI-orchestrated unit that a non-author can re-run on a new dataset, and from annotation and evaluation living in the same system as cleaning. A script gives you none of that and all of the control. The middle option is a workflow orchestrator you already run, such as Airflow or Dagster, with your cleaning code as tasks: you keep scheduling, retries and lineage, you give up the drag-and-drop editor and the bundled annotation UI. Choose DataMate when the reusable-operator model is the point. Choose the orchestrator when scheduling and lineage are the point and the transformations are yours anyway. Choose the script when there is exactly one dataset and exactly one pass.

Licence, upgrade cost and what to verify before you install

The repository is MIT licensed, which permits commercial use, modification and redistribution provided the copyright notice and permission notice are retained. The README's own licence badge points at a separate datamate-docs repository, so confirm which LICENSE file governs the code you actually deploy rather than trusting the badge. This is not legal advice; if you are shipping DataMate inside a product, have counsel read the file at the repository root. Upgrade cost is dominated by the deployment topology rather than the code. Docker Compose upgrades are a compose pull and up, plus whatever the .env file needs. Kubernetes upgrades mean re-applying charts and, if secrets changed shape, re-sealing them with kubeseal against the same controller key. The optional components add their own upgrade cadence: Label Studio, Mineru and DeerFlow are installed by separate make targets, so they version independently of the core platform and of each other. Before installing, run make help to see the full target list, then read runtime/ops/README.md for the operator interface and runtime/python-executor/README.md for how Ray workers are configured and scaled. Those two files decide whether DataMate fits your workload. The README alone does not contain enough to answer that.

Editorial conclusion

Adopt DataMate if you already run Kubernetes or Docker Compose and need a shared place where annotation, synthesis and evaluation steps live next to each other rather than in separate scripts. Do not adopt it if you only need one cleaning pass over a static file: the install pulls in Milvus, Label Studio and a Ray-based executor, and the README does not document operator authoring or evaluation metrics in enough detail to plan around. Before committing, run make help and read runtime/ops/README.md and runtime/python-executor/README.md to confirm the operator interface matches the transformations you actually need, and check whether your cluster can host the Sealed Secrets Controller.

Official sources

  1. License: MIT
  2. ModelEngine-Group/DataMate on GitHub
  3. Project website
  4. README
  5. Releases
Community notes

Community notes