idio
Classical-language, human-readable identifiers with >32-bit entropy using Latin and Ancient Greek lexemes. Designed for enterprise-grade uniqueness while keeping outputs memorable and ASCII-only.
Why idio?
- Uses cryptographically secure randomness (
secrets.SystemRandom). - Exceeds 32 bits of entropy by composing two grammar-conformant segments.
- Deterministic grammar drawn from AGENT.md: three patterns mixing Latin adjectives/nouns and Greek nouns/modifiers.
- Pure-Python, zero dependencies.
Installation
pip install idio
# or locally
pip install .
Usage
from idio import generate_identifier, generate_segment, entropy_bits
# Default: two segments to exceed 32 bits, domain-safe with hyphens and dots
identifier = generate_identifier()
print(identifier) # e.g., "unicus-nomen-onoma.idion-sema-signum"
# Single segment (useful for display, but ~18.9 bits with bundled lists)
segment = generate_segment()
# Entropy budget for your configuration
bits = entropy_bits(segments=2)
print(f"{bits:.2f} bits")
Subdomain-safe format
By default, words are joined with - and segments with . to produce valid DNS
labels (e.g., normalis-gradus-kosmos.perfectus-signum-onoma). If you prefer the
original underscore format, pass word_separator="_" (and optionally
segment_separator="--").
Patterns (all supported)
- M1:
<latin_adjective>-<latin_noun>-<greek_noun> - M2:
<greek_modifier>-<greek_noun>-<latin_noun> - M3:
<latin_noun>-<latin_adjective>-<greek_noun>
generate_identifier joins segments with . by default to keep each label comfortably
under DNS's 63-character limit and avoid underscores. If you want the original spec's
format, pass word_separator="_" and segment_separator="--".
Entropy math
Current bundled lists are roughly: ~75 Latin adjectives, ~3.5k Latin nouns, ~900 Greek nouns, and 11 Greek modifiers.
- Combinations per pattern set per segment: on the order of
5e8 - Bits per segment: approximately
29 bits - Default identifier (2 segments): approximately
58 bits
Add more words (≤100 per list) or more segments if you need an even larger space.
API surface
generate_identifier(segments=2, patterns=None, bank=DEFAULT_BANK, word_separator="-", segment_separator=".")generate_segment(pattern=None, bank=DEFAULT_BANK, word_separator="-")entropy_bits(segments=2, patterns=Pattern, bank=DEFAULT_BANK)IdioGeneratorclass if you want to own the RNG or word bank.
Wordlists
All lexemes are ASCII transliterations with no diacritics, chosen to stay abstract, technical, and non-mythological per the spec in AGENT.md.
Development
python -m venv .venv && source .venv/bin/activate
pip install -e .[dev]
pytest
License
MIT License © Causum
Metadata
Release files for idio 0.1.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 | |
|---|---|---|---|
| idio-0.1.0.tar.gz | 24.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| idio-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 50.1 kB
Release files / idio-0.1.0.tar.gz
| Download URL | idio-0.1.0.tar.gz |
|---|---|
| Size | 24.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bdae6b3da4556cc2da928314ba03a94b08a263529511648b3fbf7bfbff23f1bf
|
|
BLAKE2b-256 checksum How to use checksums |
2cbf64c0404c3112f7a6883b223b49b15b9525437152ce14721c3c04d10e9337
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.3
|
Release files / idio-0.1.0-py3-none-any.whl
| Download URL | idio-0.1.0-py3-none-any.whl |
|---|---|
| Size | 25.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2ad921a96570777110d72da55e9fb7dbfe2287837ec9ca987af5430faa9cfe20
|
|
BLAKE2b-256 checksum How to use checksums |
d0f0d5ef45a3ae44b0cb7a20ee315bca4959f88292cff01555ce97514d8c7e1a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.3
|