Ecoji encodes data using 1024 emojis. This repository contains the canonical implementation of the Ecoji standard written in Go. Version 2 of the Ecoji standard was released in 2022 with an improved set of emojis. Ecoji version 2 produces output that is much more interesting and visually stimulating than what version 1 produced.
Visit ecoji.io to try Ecoji in your browser.
$ ecoji -h
usage: ecoji [OPTIONS]... [FILE]
Encode or decode data as Unicode emojis. ๐
For compatability, when given no options stdin will be encoded using Ecoji
version 1. When using the new -e option, stdin is encoded using Ecoji
version 2. The -e and -d options are mutually exclusive.
Options:
-e, --encode Encode data using Ecoji version 2. Omitting this
option will encode using Ecoji version 1.
-d, --decode Decodes data encoded using the Ecoji version 1 or 2 standard.
-w, --wrap=COLS wrap encoded lines after COLS character (default 76).
Use 0 to disable line wrapping. This options is
ignored when decoding.
-h, --help Print this message
-v, --version Print version information.
๐ฃ๐๐ฆ๐ฉป๐๐๐คน๐ฅท
$ echo "Base64 is so 1999, isn't there something better?" | ecoji -e
๐ง๐ฉ๐ง๐๐ง
๐๐ฏ๐๐๐ฝโ๐๐ฑ๐ฅ๐๐ฑ๐๐ญ๐ฎโ๐ข๐ช ๐ญ๐ฉด๐๐ฒ๐ฆ๐ถ๐ข๐ช ๐ฎ๐ฉน๐๐ธ๐ฎ๐ผ๐ฆ๐๐ฅด๐
$ echo ๐ง๐ฉ๐ง๐๐ง
๐๐ฏ๐๐๐ฝโ๐๐ฑ๐ฅ๐๐ฑ๐๐ญ๐ฎโ๐ข๐ช ๐ญ๐ฉด๐๐ฒ๐ฆ๐ถ๐ข๐ช ๐ฎ๐ฉน๐๐ธ๐ฎ๐ผ๐ฆ๐๐ฅด๐ | ecoji -d
Base64 is so 1999, isn't there something better?
$ echo -n abc | ecoji -e
๐๐ธ๐โ
$ echo -n 6789 | ecoji -e
๐ฅ๐ค ๐ ๐ผ
$ echo XY | ecoji -e
๐ฒ๐ก๐ชโ
$ echo ๐๐ธ๐โ๐ฅ๐ค ๐ ๐ผ๐ฒ๐ก๐ชโ | ecoji -d
abc6789XY
$ cat encode.go | openssl dgst -binary -sha1 | ecoji -e
๐ง๐บ๐ฅง๐ฝ๐ป๐บ๐จ๐ฅฟ๐๐๐ฑ๐๐ป๐๐ฅ๐พ
$ echo ๐ง๐บ๐ฅง๐ฝ๐ป๐บ๐จ๐ฅฟ๐๐๐ฑ๐๐ป๐๐ฅ๐พ | ecoji -d | openssl base64
Qo7e3rIs0pdfySSfYaWNaoO+ZrM=
$ cat encode.go | openssl dgst -binary -sha1 | openssl base64
Qo7e3rIs0pdfySSfYaWNaoO+ZrM=
(If you want to use Ecoji for hashes, consider the dangers inherent in older systems without utf8 emoji support, different fonts, and similar emojis.)
Four base1024 emojis can represent 1 trillion unique IDs. In the example below af82dd48f7
represents a 5 byte id for a URL in a key value store like Accumulo. When someone enters the URL, the 5 byte id could be used to obtain the actual URL from the database and then redirect.
$ printf "https://ecoji.io/%s\n" $(echo af82dd48f7 | xxd -r -p | ecoji -e)
https://ecoji.io/๐๐ค๐ซข๐
Libraries implementing the Ecoji encoding standard. Submit a PR to add a library to the list. Libraries are given a quick review if time permits and tested before being added. However, libraries are not examined after being added. Adding something to the list is not an endorsement of its correctness or the projects security practices.
Before Ecoji V2 there was not a standard cross language test script, so the testing done for V1 only implementations was inconsistent adhoc manual tests.
Language | Version | Comments |
---|---|---|
D | V1 | Implementation of Ecoji written in the D programming language. |
Go | V1,V2 | This repository offers a Go library package with three functions ecoji.Encode() ecoji.EncodeV2() and ecoji.Decode(). |
Java | V1 | Implementation of Ecoji written in Java, usable in any JVM language. |
JavaScript | V1,V2 | A collection of base converters, which includes an implementation of Ecoji written in JavaScript. |
.NET | V1 | Implementation of Ecoji written in C# targeting .NET Standard 2.0: dotnet add package Ecoji . |
PHP | V1 | PHP 7.x implementation of Ecoji. Available as rayne/ecoji on Packagist. |
Python | V1 | Implementation of Ecoji written in the Python3 programming language. |
Ruby | V1,V2 | Implementation of Ecoji written in the Ruby programming language: gem install ecoji |
Rust | V1 | Implementation of Ecoji written in the Rust programming language. |
Swift | V1 | Implementation of Ecoji written in the Swift programming language. |
To build the command line version of ecoji, run the following commands.
git clone https://github.com/keith-turner/ecoji.git
cd ecoji/cmd
go build ecoji.go
./ecoji --help
For an example of how to use Ecoji as library see library-example.md.