This release is a pre-release and may not be stable for production use.
miniOPs
Lightweight, polars-native MLOps CLI for training, versioning and deploying models locally, in Docker or on Google Cloud.
Status: pre-alpha. The current release contains only the command line skeleton (
miniops --versionandminiops version). The features and commands described below are the planned interface and may change.
Why miniOPs?
Most MLOps tooling is either a heavy platform you have to host, or a set of loosely connected libraries you have to glue together yourself. miniOPs aims for the middle ground:
- One workflow, three targets. The same commands train, register and deploy a model on your machine, in Docker containers, or on GCP.
- Polars-native. Data enters as a ready-made polars DataFrame (or a Parquet file) and predictions come back as polars. No pandas required.
- Zero servers by default. A solo user needs nothing but the CLI. Teams can share state through a cloud backend.
- Opinionated, not magical. You choose the framework and the target explicitly. miniOPs generates the template, installs the dependencies and handles the plumbing. The modelling decisions stay with you.
- Reproducible by design. Every model gets its own locked environment (
uv), and every version records its code, data fingerprint, parameters and dependencies. - Runs where you work. Linux, macOS and Windows, on x86_64 and arm64.
What miniOPs is not
miniOPs starts where data engineering ends. It does not ingest, clean, join or transform raw data, and it is not a feature store. It expects a prepared DataFrame and takes over from there: validating the input contract, splitting, training, evaluating, versioning, serving and monitoring.
Planned features
| Area | Capabilities |
|---|---|
| Projects & models | init, model templates per framework and target, isolated uv environment per model |
| Data contract | schema validation, dataset fingerprinting, split strategies (holdout, k-fold, stratified, time-based) |
| Training | config-driven runs, experiment tracking, hyperparameter tuning (Optuna) |
| Evaluation | task-specific metrics, quality gates, self-contained HTML reports with model cards |
| Model registry | semantic versioning (1.0.0), immutable released versions, aliases (champion, challenger), lineage |
| Portability | export and import of model versions as single files, migrate between targets with lineage preserved |
| Serving | batch prediction (Parquet in/out), generated FastAPI service, Docker images |
| Deployment | deploy, list, stop, delete and roll back deployments on every target |
| Monitoring | input and prediction drift (later) |
| UI | read-only web dashboard (later) |
Frameworks
| Framework | Status |
|---|---|
| scikit-learn | planned (first) |
| LightGBM | planned |
| PyTorch | planned |
Targets
| Target | Training | Serving | State |
|---|---|---|---|
local |
subprocess in the model's venv | local FastAPI (uvicorn) | SQLite + filesystem |
docker |
container | container | SQLite + filesystem (mounted) |
gcp |
Vertex AI custom training | Cloud Run | GCS + miniOPs metadata on GCP |
local and docker share the same state, so a model trained locally can be served in Docker right away. Moving a version to GCP (or back) is a single miniops migrate.
A taste of the planned CLI
pip install miniops-ml # the command is `miniops`
miniops init
miniops new churn --flavor sklearn --target local
miniops train churn --data data/train.parquet
miniops report churn --version 1.0.0 # HTML report
miniops registry release churn --version 1.0.0
miniops deploy churn --version 1.0.0 --target docker
miniops deploy list
miniops registry bump churn --from 1.0.0 --minor # new draft 1.1.0
miniops migrate churn --version 1.0.0 --to gcp # copy to the team's GCP store
Roadmap
| Phase | Content |
|---|---|
| 0 | Foundations: design, architecture decisions, project tooling |
| 1 | Local target + scikit-learn: train, track, evaluate, register, batch predict, export and import |
| 2 | LightGBM |
| 3 | Serving + Docker target |
| 4 | Hyperparameter tuning and quality gates |
| 5 | GCP target and migration between targets |
| 6 | PyTorch |
| 7 | Monitoring |
| 8 | Web UI |
Contributing
The project is at an early stage, so the best way to help right now is to open an issue with ideas, use cases or feedback on the design, or start a thread in Discussions. For the development setup and guidelines, see CONTRIBUTING.md.
License
miniOPs is licensed under the Apache License 2.0.
Metadata
Release files for miniops-ml 0.1.0a1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| miniops_ml-0.1.0a1.tar.gz | 9.5 kB | With provenance | Details for miniops_ml-0.1.0a1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| miniops_ml-0.1.0a1-py3-none-any.whl | Python 3 | none | any | Details for miniops_ml-0.1.0a1-py3-none-any.whl |
Total release size: 19.7 kB
Release files / miniops_ml-0.1.0a1.tar.gz
| Download URL | miniops_ml-0.1.0a1.tar.gz |
|---|---|
| Size | 9.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ba98d7cfa3cc377d9a31d12227e20fa6b1f0eee8fad078decee2e65cc0d0c269
|
|
BLAKE2b-256 checksum How to use checksums |
83738f3c3b2562b0325a692f216191e895dc37fa09e7ef91a686f66a4faa16dc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 11, 2026.
Transparency logRelease files / miniops_ml-0.1.0a1-py3-none-any.whl
| Download URL | miniops_ml-0.1.0a1-py3-none-any.whl |
|---|---|
| Size | 10.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
644e5653345521e77f6574ac160c801a2eb8ff5cc24c0c6a8fe938fe184b21ab
|
|
BLAKE2b-256 checksum How to use checksums |
5ce57c8de368a796cb36e625b56af302e70c9570968e63dde9846af95e1a1a4f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 11, 2026.
Transparency logSecurity for miniops-ml 0.1.0a1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for miniops_ml-0.1.0a1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 11, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.