Misty DOI
Muh Mitha Kijiye!™
Browser-first, CLI-first, automation-first DOI minting and research/artifact publication packaging. No backend, no subscription, no vendor lock-in.
Project ILM · Copyright © 1993–2026 Abhishek Choudhary · GPL-3.0-or-later
Misty turns a single canonical metadata file into a complete, reproducible
publication package — Zenodo deposit, DataCite record, codemeta.json,
CITATION.cff, SHA-256 checksums, OpenTimestamps proofs — and mints a DOI on
Zenodo. The same logic runs in your terminal, your CI pipeline, or fully in the
browser with no server.
General-purpose
Misty mints DOIs and builds publication packages for any artifact (software, dataset, publication, poster, presentation, image, video, lesson, workflow) and any author. Start with misty init or copy an examples/ template.
The one idea
Separate metadata from mechanism. Any workflow that wants a DOI only has to:
- produce a canonical metadata file (
misty.json), - export
ZENODO_TOKEN, - call one command.
Everything vendor-specific (Zenodo's API shape, DataCite's schema, CFF's YAML)
is derived by Misty. Upstream never learns a vendor format. See
docs/AUTOMATION.md for the full integration contract.
export ZENODO_TOKEN=… # the only secret, only from the environment
misty publish -m misty.json -f artifact.zip --output result.json
DOI=$(jq -r .doi result.json) # done
Install
pip install misty-doi # core (requests only)
pip install "misty-doi[all]" # + YAML, JSON-Schema, OpenTimestamps
No-install path (CI / air-gapped): scripts/zenodo-publish.sh needs only
bash, curl, and python3.
CLI in 60 seconds
misty init # write a metadata template
misty validate -m misty.json # check it
misty transform -m misty.json -o build/ # -> zenodo/datacite/codemeta/CFF
misty package -m misty.json -f a.zip -o doi-package/ # offline package + checksums
misty publish -m misty.json -f a.zip # deposit + upload + publish -> DOI
misty publish -m misty.json -f a.zip --sandbox # rehearse on sandbox.zenodo.org
misty publish -m misty.json -f a.zip --dry-run # package only, no network
misty ots stamp doi-package/a.zip # OpenTimestamps proof
Full reference: docs/CLI.md.
What gets produced
doi-package/
├── <artifact> artifact file(s), copied in
├── <artifact>.sha256 checksum per file
├── metadata.json canonical Misty record
├── zenodo.json Zenodo deposit body {"metadata": {…}}
├── datacite.json DataCite 4.x
├── codemeta.json schema.org SoftwareSourceCode
├── CITATION.cff CFF 1.2.0 (valid YAML)
├── manifest.json release + reproducibility manifest
└── README.md human-readable summary
The package contains no secrets and is safe to commit, attach to a GitHub release, or hand to an air-gapped reviewer.
Browser mode
Open web/index.html (or the GitHub Pages deployment). Build metadata in a
form, download every target file, generate copy-paste AI prompts for
metadata drafting, and — optionally — publish directly to Zenodo with a token
that never leaves your browser. Project ILM receives nothing.
Security model
- The token is read only from the environment (CLI) or held only in the browser tab (web). Misty never writes it to disk and never transmits it anywhere except Zenodo.
- No telemetry. No backend. No accounts.
- Offline packages are deterministic and checksummed for independent verification.
See SECURITY.md.
Documentation
| Doc | Contents |
|---|---|
docs/AUTOMATION.md |
Integration contract, env vars, exit codes, CI recipes |
docs/METADATA.md |
Canonical schema field-by-field, mapping to every target |
docs/CLI.md |
Every command, flag, and example |
License
GPL-3.0-or-later. The tool is free software; the artifacts you publish carry whatever license you declare in your metadata.
Metadata
Release files for misty-doi 1.2.0
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 | |
|---|---|---|---|---|
| misty_doi-1.2.0.tar.gz | 67.9 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| misty_doi-1.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 131.3 kB
Release files / misty_doi-1.2.0.tar.gz
| Download URL | misty_doi-1.2.0.tar.gz |
|---|---|
| Size | 67.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ce4f2a072b0e0ca0c960a003e696ea69ce83c41ac2f2fa3dfb41aca4d04bed75
|
|
BLAKE2b-256 checksum How to use checksums |
2e1c7a1fdb964356ee396da253120ccd884de022cfe58dc0d19b6bce631fc7c9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|
Release files / misty_doi-1.2.0-py3-none-any.whl
| Download URL | misty_doi-1.2.0-py3-none-any.whl |
|---|---|
| Size | 63.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
69446536f15a83fb8b3a1927bfb82a2c5a46af265a736d239c979abaa3ca47d6
|
|
BLAKE2b-256 checksum How to use checksums |
67b88a68a79c232e05a40a24cb7e5b1e65fdd84e315737fcf4a4c3783873732c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|
Security for misty-doi 1.2.0
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A 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.