mjooln
Environmentally Friendly File Handling
mjooln is a small, dependency-free Python toolbox for file and folder
handling. Two ideas make it more than a pathlib wrapper:
Atom— a identifier that is unique, sortable, human-readable, and can be found inside arbitrary text just by scanning for its shape.AtomFolder— a folder with a persistent identity, so you can find it by name from anywhere on disk without remembering its path.
Install
pip install mjooln
Optional extras:
pip install mjooln[encryption] # AES file encryption
pip install mjooln[hardware-key] # FIDO2 Hardware Key Support
pip install mjooln[yaml] # YAML read/write for File
pip install mjooln[all] # All extras
Quickstart
Atom: identifiers that sort, search, and read like sentences
from mjooln import Atom
a = Atom("sensor")
str(a)
# '20260722T191721u217069Z___sensor___39A238F6_83FE_40DB_BDA5_FABDE915016A'
a.way # 'sensor'
a.time # datetime(2026, 7, 22, 19, 17, 21, ..., tzinfo=timezone.utc)
Atoms sort chronologically as plain strings, and can be found inside arbitrary text -- handy for scanning file names:
Atom.find_one(f"my_file_{a}.json.gz") # == a
AtomFolder: a folder you can find by name, from anywhere
from mjooln import AtomFolder
af = AtomFolder.make("~/projects/my_data")
af.file("readme.txt").write("hello")
# ... later, from anywhere, without knowing the path:
same_af = AtomFolder.get("my_data")
[f.name for f in same_af.list()]
# ['readme.txt']
AtomFolder is a subclass of Folder, so it behaves like one -- list(),
file(), walk(), etc. all work directly on it.
Folder and File: everyday file handling
from mjooln import Folder
fo = Folder("~/projects/my_data")
fi = fo.file("data.json")
fi.write_json({"hello": "world"})
fi.read_json()
# {'hello': 'world'}
fi = fi.compress() # data.json.gz
fi.checksum() # sha256 hex digest
AtomFile: files structurally named after an Atom
from mjooln import AtomFile, Atom
fi = AtomFile.build(fo, Atom("sensor"), data_extension="json")
fi.write_json({"hello": "world"})
fi.atom # the Atom this file's name is built from
fi.extension # 'json' -- the data extension, never gz/mjc
list(fo.atom_files()) # -> [AtomFile(...)]
Modules
core—Atom,Toml, settings, exceptionsfilesystem—Path,Folder,File,AtomFile,AtomFolder,Serializer,Compressorencryption—Cipher,MasterKey,KeyFile(optional,pip install mjooln[encryption])
See docs/PRINCIPLES.md for the design rationale
behind the project.
License
Apache-2.0. See LICENSE.
Metadata
Release files for mjooln 0.17.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 | Actions |
|---|---|---|---|---|
| mjooln-0.17.0.tar.gz | 39.0 kB | Without provenance | Details for mjooln-0.17.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| mjooln-0.17.0-py3-none-any.whl | Python 3 | none | any | Details for mjooln-0.17.0-py3-none-any.whl |
Total release size: 87.3 kB
Release files / mjooln-0.17.0.tar.gz
| Download URL | mjooln-0.17.0.tar.gz |
|---|---|
| Size | 39.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f1a5b8e2aa5f5b64fa779864a69a912fca893a77b6889a81ffe12bf7fad0792c
|
|
BLAKE2b-256 checksum How to use checksums |
5235c3ada909f2d31ec2f4283f055bec7ce785eb536f82a328168ea84dee05bb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / mjooln-0.17.0-py3-none-any.whl
| Download URL | mjooln-0.17.0-py3-none-any.whl |
|---|---|
| Size | 48.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
781c25b07903a2ecb64b5b7ad4644a4a100cd50662d2c54e238e9a185ff62da4
|
|
BLAKE2b-256 checksum How to use checksums |
64cdfbf8c7706116b8a29b479862e4ef481dd2884e87642716830a5d2a7e1d92
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for mjooln 0.17.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.