# jrjModelRegistry
**jrjModelRegistry** is a lightweight and flexible Python library for saving, versioning, and serving machine learning models.
- 📦 Store models in **S3-compatible storage** with **ZIP encryption**
- 🗃️ Track metadata in **MongoDB**
- ⚡ Dynamically serve models using built-in **FastAPI routes and dashboard**
- ✅ Works with any Python object (models, transformers, even DataFrames)
> Simple enough for small projects, powerful enough for production.
---
📖 [Read the Docs](https://jrjmodelregistry.super.site)
📦 [View on PyPI](https://pypi.org/project/jrjModelRegistry/)
⭐ [Star on GitHub](https://github.com/JRJSolutions/jrjModelRegistry)
[](https://jrjmodelregistry.super.site)
## 📚 Documentation
Looking for usage examples, API details, and setup guides?
👉 **Full documentation is available here**:
[https://jrjmodelregistry.super.site](https://jrjmodelregistry.super.site)
Raw data
{
"_id": null,
"home_page": null,
"name": "jrjModelRegistry",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "machine learning, model, saving, serving",
"author": null,
"author_email": "Jason Jafari <me@jasonjafari.com>",
"download_url": "https://files.pythonhosted.org/packages/54/7b/62ee1e30655023072850b8c4c16580174232a3a633a6e32c152dfafffe24/jrjmodelregistry-1.0.9.tar.gz",
"platform": null,
"description": "# jrjModelRegistry\n\n**jrjModelRegistry** is a lightweight and flexible Python library for saving, versioning, and serving machine learning models.\n\n- \ud83d\udce6 Store models in **S3-compatible storage** with **ZIP encryption**\n- \ud83d\uddc3\ufe0f Track metadata in **MongoDB**\n- \u26a1 Dynamically serve models using built-in **FastAPI routes and dashboard**\n- \u2705 Works with any Python object (models, transformers, even DataFrames)\n\n> Simple enough for small projects, powerful enough for production.\n\n---\n\n\ud83d\udcd6 [Read the Docs](https://jrjmodelregistry.super.site)\n\ud83d\udce6 [View on PyPI](https://pypi.org/project/jrjModelRegistry/)\n\u2b50 [Star on GitHub](https://github.com/JRJSolutions/jrjModelRegistry)\n\n\n[](https://jrjmodelregistry.super.site)\n\n## \ud83d\udcda Documentation\n\nLooking for usage examples, API details, and setup guides?\n\n\ud83d\udc49 **Full documentation is available here**:\n[https://jrjmodelregistry.super.site](https://jrjmodelregistry.super.site)\n\n\n\n\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "True way to save and serve python models",
"version": "1.0.9",
"project_urls": {
"Documentation": "https://github.com/JRJSolutions/jrjModelRegistry/blob/main/README.md",
"Source": "https://github.com/JRJSolutions/jrjModelRegistry",
"Tracker": "https://github.com/JRJSolutions/jrjModelRegistry/issues"
},
"split_keywords": [
"machine learning",
" model",
" saving",
" serving"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "953d983cc6c9964cf8166b40691f38beb7a39c54cc96c698651d05e6564e1c14",
"md5": "62fb18c6ade13cc1ea58f99c59b2a80a",
"sha256": "1b8c78bf1dff00d30411c39898eb51f253f934bae14d9b404f21b6d235c59087"
},
"downloads": -1,
"filename": "jrjmodelregistry-1.0.9-py3-none-any.whl",
"has_sig": false,
"md5_digest": "62fb18c6ade13cc1ea58f99c59b2a80a",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 420332,
"upload_time": "2025-07-26T04:48:47",
"upload_time_iso_8601": "2025-07-26T04:48:47.619822Z",
"url": "https://files.pythonhosted.org/packages/95/3d/983cc6c9964cf8166b40691f38beb7a39c54cc96c698651d05e6564e1c14/jrjmodelregistry-1.0.9-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "547b62ee1e30655023072850b8c4c16580174232a3a633a6e32c152dfafffe24",
"md5": "4c1135ca875c88100f78cfaac58fd228",
"sha256": "b1125b096750d6a8d41a928abf3a718a6b1bd1ba2c9f5d08768cad0c1150f606"
},
"downloads": -1,
"filename": "jrjmodelregistry-1.0.9.tar.gz",
"has_sig": false,
"md5_digest": "4c1135ca875c88100f78cfaac58fd228",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 419734,
"upload_time": "2025-07-26T04:48:51",
"upload_time_iso_8601": "2025-07-26T04:48:51.131661Z",
"url": "https://files.pythonhosted.org/packages/54/7b/62ee1e30655023072850b8c4c16580174232a3a633a6e32c152dfafffe24/jrjmodelregistry-1.0.9.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-26 04:48:51",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "JRJSolutions",
"github_project": "jrjModelRegistry",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "annotated-types",
"specs": [
[
"==",
"0.7.0"
]
]
},
{
"name": "anyio",
"specs": [
[
"==",
"4.9.0"
]
]
},
{
"name": "appnope",
"specs": [
[
"==",
"0.1.4"
]
]
},
{
"name": "argon2-cffi",
"specs": [
[
"==",
"23.1.0"
]
]
},
{
"name": "argon2-cffi-bindings",
"specs": [
[
"==",
"21.2.0"
]
]
},
{
"name": "arrow",
"specs": [
[
"==",
"1.3.0"
]
]
},
{
"name": "asttokens",
"specs": [
[
"==",
"3.0.0"
]
]
},
{
"name": "async-lru",
"specs": [
[
"==",
"2.0.5"
]
]
},
{
"name": "attrs",
"specs": [
[
"==",
"25.3.0"
]
]
},
{
"name": "babel",
"specs": [
[
"==",
"2.17.0"
]
]
},
{
"name": "beautifulsoup4",
"specs": [
[
"==",
"4.13.4"
]
]
},
{
"name": "bleach",
"specs": [
[
"==",
"6.2.0"
]
]
},
{
"name": "boto3",
"specs": [
[
"==",
"1.38.11"
]
]
},
{
"name": "botocore",
"specs": [
[
"==",
"1.38.11"
]
]
},
{
"name": "build",
"specs": [
[
"==",
"1.2.2.post1"
]
]
},
{
"name": "certifi",
"specs": [
[
"==",
"2025.4.26"
]
]
},
{
"name": "cffi",
"specs": [
[
"==",
"1.17.1"
]
]
},
{
"name": "charset-normalizer",
"specs": [
[
"==",
"3.4.2"
]
]
},
{
"name": "click",
"specs": [
[
"==",
"8.1.8"
]
]
},
{
"name": "comm",
"specs": [
[
"==",
"0.2.2"
]
]
},
{
"name": "contourpy",
"specs": [
[
"==",
"1.3.2"
]
]
},
{
"name": "coverage",
"specs": [
[
"==",
"7.8.0"
]
]
},
{
"name": "cycler",
"specs": [
[
"==",
"0.12.1"
]
]
},
{
"name": "debugpy",
"specs": [
[
"==",
"1.8.14"
]
]
},
{
"name": "decorator",
"specs": [
[
"==",
"5.2.1"
]
]
},
{
"name": "defusedxml",
"specs": [
[
"==",
"0.7.1"
]
]
},
{
"name": "dill",
"specs": [
[
"==",
"0.4.0"
]
]
},
{
"name": "dnspython",
"specs": [
[
"==",
"2.7.0"
]
]
},
{
"name": "docutils",
"specs": [
[
"==",
"0.21.2"
]
]
},
{
"name": "email_validator",
"specs": [
[
"==",
"2.2.0"
]
]
},
{
"name": "et_xmlfile",
"specs": [
[
"==",
"2.0.0"
]
]
},
{
"name": "executing",
"specs": [
[
"==",
"2.2.0"
]
]
},
{
"name": "fastapi",
"specs": [
[
"==",
"0.115.12"
]
]
},
{
"name": "fastapi-cli",
"specs": [
[
"==",
"0.0.7"
]
]
},
{
"name": "fastjsonschema",
"specs": [
[
"==",
"2.21.1"
]
]
},
{
"name": "fonttools",
"specs": [
[
"==",
"4.58.0"
]
]
},
{
"name": "fqdn",
"specs": [
[
"==",
"1.5.1"
]
]
},
{
"name": "h11",
"specs": [
[
"==",
"0.16.0"
]
]
},
{
"name": "httpcore",
"specs": [
[
"==",
"1.0.9"
]
]
},
{
"name": "httptools",
"specs": [
[
"==",
"0.6.4"
]
]
},
{
"name": "httpx",
"specs": [
[
"==",
"0.28.1"
]
]
},
{
"name": "id",
"specs": [
[
"==",
"1.5.0"
]
]
},
{
"name": "idna",
"specs": [
[
"==",
"3.10"
]
]
},
{
"name": "iniconfig",
"specs": [
[
"==",
"2.1.0"
]
]
},
{
"name": "ipykernel",
"specs": [
[
"==",
"6.29.5"
]
]
},
{
"name": "ipython",
"specs": [
[
"==",
"9.2.0"
]
]
},
{
"name": "ipython_pygments_lexers",
"specs": [
[
"==",
"1.1.1"
]
]
},
{
"name": "ipywidgets",
"specs": [
[
"==",
"8.1.7"
]
]
},
{
"name": "isoduration",
"specs": [
[
"==",
"20.11.0"
]
]
},
{
"name": "jaraco.classes",
"specs": [
[
"==",
"3.4.0"
]
]
},
{
"name": "jaraco.context",
"specs": [
[
"==",
"6.0.1"
]
]
},
{
"name": "jaraco.functools",
"specs": [
[
"==",
"4.1.0"
]
]
},
{
"name": "jedi",
"specs": [
[
"==",
"0.19.2"
]
]
},
{
"name": "Jinja2",
"specs": [
[
"==",
"3.1.6"
]
]
},
{
"name": "jmespath",
"specs": [
[
"==",
"1.0.1"
]
]
},
{
"name": "joblib",
"specs": [
[
"==",
"1.5.1"
]
]
},
{
"name": "jrjModelRegistry",
"specs": [
[
"==",
"0.0.36"
]
]
},
{
"name": "json5",
"specs": [
[
"==",
"0.12.0"
]
]
},
{
"name": "jsonpointer",
"specs": [
[
"==",
"3.0.0"
]
]
},
{
"name": "jsonschema",
"specs": [
[
"==",
"4.23.0"
]
]
},
{
"name": "jsonschema-specifications",
"specs": [
[
"==",
"2025.4.1"
]
]
},
{
"name": "jupyter",
"specs": [
[
"==",
"1.1.1"
]
]
},
{
"name": "jupyter-console",
"specs": [
[
"==",
"6.6.3"
]
]
},
{
"name": "jupyter-events",
"specs": [
[
"==",
"0.12.0"
]
]
},
{
"name": "jupyter-lsp",
"specs": [
[
"==",
"2.2.5"
]
]
},
{
"name": "jupyter_client",
"specs": [
[
"==",
"8.6.3"
]
]
},
{
"name": "jupyter_core",
"specs": [
[
"==",
"5.7.2"
]
]
},
{
"name": "jupyter_server",
"specs": [
[
"==",
"2.15.0"
]
]
},
{
"name": "jupyter_server_terminals",
"specs": [
[
"==",
"0.5.3"
]
]
},
{
"name": "jupyterlab",
"specs": [
[
"==",
"4.4.2"
]
]
},
{
"name": "jupyterlab_pygments",
"specs": [
[
"==",
"0.3.0"
]
]
},
{
"name": "jupyterlab_server",
"specs": [
[
"==",
"2.27.3"
]
]
},
{
"name": "jupyterlab_widgets",
"specs": [
[
"==",
"3.0.15"
]
]
},
{
"name": "keyring",
"specs": [
[
"==",
"25.6.0"
]
]
},
{
"name": "kiwisolver",
"specs": [
[
"==",
"1.4.8"
]
]
},
{
"name": "markdown-it-py",
"specs": [
[
"==",
"3.0.0"
]
]
},
{
"name": "MarkupSafe",
"specs": [
[
"==",
"3.0.2"
]
]
},
{
"name": "matplotlib",
"specs": [
[
"==",
"3.10.3"
]
]
},
{
"name": "matplotlib-inline",
"specs": [
[
"==",
"0.1.7"
]
]
},
{
"name": "mdurl",
"specs": [
[
"==",
"0.1.2"
]
]
},
{
"name": "mistune",
"specs": [
[
"==",
"3.1.3"
]
]
},
{
"name": "more-itertools",
"specs": [
[
"==",
"10.7.0"
]
]
},
{
"name": "nbclient",
"specs": [
[
"==",
"0.10.2"
]
]
},
{
"name": "nbconvert",
"specs": [
[
"==",
"7.16.6"
]
]
},
{
"name": "nbformat",
"specs": [
[
"==",
"5.10.4"
]
]
},
{
"name": "nest-asyncio",
"specs": [
[
"==",
"1.6.0"
]
]
},
{
"name": "nh3",
"specs": [
[
"==",
"0.2.21"
]
]
},
{
"name": "notebook",
"specs": [
[
"==",
"7.4.2"
]
]
},
{
"name": "notebook_shim",
"specs": [
[
"==",
"0.2.4"
]
]
},
{
"name": "numpy",
"specs": [
[
"==",
"2.2.5"
]
]
},
{
"name": "openpyxl",
"specs": [
[
"==",
"3.1.5"
]
]
},
{
"name": "overrides",
"specs": [
[
"==",
"7.7.0"
]
]
},
{
"name": "packaging",
"specs": [
[
"==",
"25.0"
]
]
},
{
"name": "pandas",
"specs": [
[
"==",
"2.2.3"
]
]
},
{
"name": "pandocfilters",
"specs": [
[
"==",
"1.5.1"
]
]
},
{
"name": "parso",
"specs": [
[
"==",
"0.8.4"
]
]
},
{
"name": "patsy",
"specs": [
[
"==",
"1.0.1"
]
]
},
{
"name": "pexpect",
"specs": [
[
"==",
"4.9.0"
]
]
},
{
"name": "pillow",
"specs": [
[
"==",
"11.2.1"
]
]
},
{
"name": "platformdirs",
"specs": [
[
"==",
"4.3.7"
]
]
},
{
"name": "pluggy",
"specs": [
[
"==",
"1.5.0"
]
]
},
{
"name": "prometheus_client",
"specs": [
[
"==",
"0.21.1"
]
]
},
{
"name": "prompt_toolkit",
"specs": [
[
"==",
"3.0.51"
]
]
},
{
"name": "psutil",
"specs": [
[
"==",
"7.0.0"
]
]
},
{
"name": "ptyprocess",
"specs": [
[
"==",
"0.7.0"
]
]
},
{
"name": "pure_eval",
"specs": [
[
"==",
"0.2.3"
]
]
},
{
"name": "pycparser",
"specs": [
[
"==",
"2.22"
]
]
},
{
"name": "pycryptodomex",
"specs": [
[
"==",
"3.22.0"
]
]
},
{
"name": "pydantic",
"specs": [
[
"==",
"2.11.4"
]
]
},
{
"name": "pydantic_core",
"specs": [
[
"==",
"2.33.2"
]
]
},
{
"name": "Pygments",
"specs": [
[
"==",
"2.19.1"
]
]
},
{
"name": "pymongo",
"specs": [
[
"==",
"4.12.1"
]
]
},
{
"name": "pyparsing",
"specs": [
[
"==",
"3.2.3"
]
]
},
{
"name": "pyproject_hooks",
"specs": [
[
"==",
"1.2.0"
]
]
},
{
"name": "pytest",
"specs": [
[
"==",
"8.3.5"
]
]
},
{
"name": "pytest-cov",
"specs": [
[
"==",
"6.1.1"
]
]
},
{
"name": "python-dateutil",
"specs": [
[
"==",
"2.9.0.post0"
]
]
},
{
"name": "python-dotenv",
"specs": [
[
"==",
"1.1.0"
]
]
},
{
"name": "python-json-logger",
"specs": [
[
"==",
"3.3.0"
]
]
},
{
"name": "python-multipart",
"specs": [
[
"==",
"0.0.20"
]
]
},
{
"name": "pytz",
"specs": [
[
"==",
"2025.2"
]
]
},
{
"name": "PyYAML",
"specs": [
[
"==",
"6.0.2"
]
]
},
{
"name": "pyzipper",
"specs": [
[
"==",
"0.3.6"
]
]
},
{
"name": "pyzmq",
"specs": [
[
"==",
"26.4.0"
]
]
},
{
"name": "readme_renderer",
"specs": [
[
"==",
"44.0"
]
]
},
{
"name": "referencing",
"specs": [
[
"==",
"0.36.2"
]
]
},
{
"name": "requests",
"specs": [
[
"==",
"2.32.3"
]
]
},
{
"name": "requests-toolbelt",
"specs": [
[
"==",
"1.0.0"
]
]
},
{
"name": "rfc3339-validator",
"specs": [
[
"==",
"0.1.4"
]
]
},
{
"name": "rfc3986",
"specs": [
[
"==",
"2.0.0"
]
]
},
{
"name": "rfc3986-validator",
"specs": [
[
"==",
"0.1.1"
]
]
},
{
"name": "rich",
"specs": [
[
"==",
"14.0.0"
]
]
},
{
"name": "rich-toolkit",
"specs": [
[
"==",
"0.14.5"
]
]
},
{
"name": "rpds-py",
"specs": [
[
"==",
"0.24.0"
]
]
},
{
"name": "s3transfer",
"specs": [
[
"==",
"0.12.0"
]
]
},
{
"name": "scikit-learn",
"specs": [
[
"==",
"1.6.1"
]
]
},
{
"name": "scipy",
"specs": [
[
"==",
"1.15.3"
]
]
},
{
"name": "Send2Trash",
"specs": [
[
"==",
"1.8.3"
]
]
},
{
"name": "setuptools",
"specs": [
[
"==",
"80.3.1"
]
]
},
{
"name": "shellingham",
"specs": [
[
"==",
"1.5.4"
]
]
},
{
"name": "six",
"specs": [
[
"==",
"1.17.0"
]
]
},
{
"name": "sniffio",
"specs": [
[
"==",
"1.3.1"
]
]
},
{
"name": "soupsieve",
"specs": [
[
"==",
"2.7"
]
]
},
{
"name": "stack-data",
"specs": [
[
"==",
"0.6.3"
]
]
},
{
"name": "starlette",
"specs": [
[
"==",
"0.46.2"
]
]
},
{
"name": "statsmodels",
"specs": [
[
"==",
"0.14.4"
]
]
},
{
"name": "terminado",
"specs": [
[
"==",
"0.18.1"
]
]
},
{
"name": "threadpoolctl",
"specs": [
[
"==",
"3.6.0"
]
]
},
{
"name": "tinycss2",
"specs": [
[
"==",
"1.4.0"
]
]
},
{
"name": "tornado",
"specs": [
[
">=",
"6.5"
]
]
},
{
"name": "traitlets",
"specs": [
[
"==",
"5.14.3"
]
]
},
{
"name": "twine",
"specs": [
[
"==",
"6.1.0"
]
]
},
{
"name": "typer",
"specs": [
[
"==",
"0.15.3"
]
]
},
{
"name": "types-python-dateutil",
"specs": [
[
"==",
"2.9.0.20241206"
]
]
},
{
"name": "typing-inspection",
"specs": [
[
"==",
"0.4.0"
]
]
},
{
"name": "typing_extensions",
"specs": [
[
"==",
"4.13.2"
]
]
},
{
"name": "tzdata",
"specs": [
[
"==",
"2025.2"
]
]
},
{
"name": "uri-template",
"specs": [
[
"==",
"1.3.0"
]
]
},
{
"name": "urllib3",
"specs": [
[
"==",
"2.4.0"
]
]
},
{
"name": "uvicorn",
"specs": [
[
"==",
"0.34.2"
]
]
},
{
"name": "uvloop",
"specs": [
[
"==",
"0.21.0"
]
]
},
{
"name": "watchfiles",
"specs": [
[
"==",
"1.0.5"
]
]
},
{
"name": "wcwidth",
"specs": [
[
"==",
"0.2.13"
]
]
},
{
"name": "webcolors",
"specs": [
[
"==",
"24.11.1"
]
]
},
{
"name": "webencodings",
"specs": [
[
"==",
"0.5.1"
]
]
},
{
"name": "websocket-client",
"specs": [
[
"==",
"1.8.0"
]
]
},
{
"name": "websockets",
"specs": [
[
"==",
"15.0.1"
]
]
},
{
"name": "widgetsnbextension",
"specs": [
[
"==",
"4.0.14"
]
]
}
],
"lcname": "jrjmodelregistry"
}