🍹 emojito
emojis with a hidden agenda.
A Python library and CLI tool that lets you secretly encode text into ordinary emojis using Unicode steganography. Hide messages in plain sight and share them anywhere emojis are supported.
Inspired by Paul Butler's article "Smuggling Arbitrary Data Through an Emoji".
Installation
Install from PyPI:
pip install emojito-py
Or install the latest development version directly from GitHub:
pip install git+https://github.com/matijaoe/emojito.git@main#egg=emojito-py
on a mac?
On macOS, pipx is recommended for CLI tools:
# Install pipx if you don't have it
brew install pipx
pipx ensurepath
# Install from PyPI (recommended)
pipx install emojito-py
# OR install from GitHub (development version)
pipx install git+https://github.com/matijaoe/emojito.git@main#egg=emojito-py
This installs the package in an isolated environment while making the CLI commands globally available.
Usage
CLI
Encode
emojito encode '🍹' 'trust no one'
# 🍹󠅤󠅢󠅥󠅣󠅤󠄐󠅞󠅟󠄐󠅟󠅞󠅕️
Decode
emojito decode '🍹󠅤󠅢󠅥󠅣󠅤󠄐󠅞󠅟󠄐󠅟󠅞󠅕️'
# trust no one
Python
from emojito import encode, decode
secret = encode('🍹', 'trust no one')
print(secret) # 🍹󠅤󠅢󠅥󠅣󠅤󠄐󠅞󠅟󠄐󠅟󠅞󠅕️
decoded = decode(secret)
print(decoded) # trust no one
Limitations
- Some platforms may strip variation selectors from emojis
- Maximum message length is 255 bytes
- Works best with single emojis as carriers
Acknowledgements
- Paul Butler for the original concept
- Unicode Consortium for variation selectors
Release files for emojito-py 0.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 | |
|---|---|---|---|
| emojito_py-0.2.0.tar.gz | 5.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| emojito_py-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 10.0 kB
Release files / emojito_py-0.2.0.tar.gz
| Download URL | emojito_py-0.2.0.tar.gz |
|---|---|
| Size | 5.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
49c2d80017538ff5d5d6e64a691a23ce05a585de3a6d255fc6203b83a3865085
|
|
BLAKE2b-256 checksum How to use checksums |
2795b087fc64c2f36b5e229a2b9f88eed91c4fc98b6d2e4780c3b3bc9f5d6b18
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
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 Mar 6, 2025.
Transparency logRelease files / emojito_py-0.2.0-py3-none-any.whl
| Download URL | emojito_py-0.2.0-py3-none-any.whl |
|---|---|
| Size | 4.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7e3d1db4a7bcd367088b276f3d6d2c64492f4802fb5ac5605cf124103fffb3fb
|
|
BLAKE2b-256 checksum How to use checksums |
f66f3f21f70918285a4cfb775b3d08046385e78c317a3e8a4079d5472eb17fbd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
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 Mar 6, 2025.
Transparency log