{"id":17297032,"url":"https://github.com/adamniederer/base100","last_synced_at":"2025-05-15T13:05:30.326Z","repository":{"id":57502721,"uuid":"98356947","full_name":"AdamNiederer/base100","owner":"AdamNiederer","description":"base💯 - Encode your data into emoji","archived":false,"fork":false,"pushed_at":"2025-01-09T07:51:21.000Z","size":52,"stargazers_count":279,"open_issues_count":3,"forks_count":15,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-05-15T13:05:28.858Z","etag":null,"topics":["base64","codec","emoji","memescale"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AdamNiederer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-07-25T23:00:43.000Z","updated_at":"2025-05-14T07:42:43.000Z","dependencies_parsed_at":"2025-01-18T02:11:53.265Z","dependency_job_id":"1b2fbcc1-4531-432c-87e0-edf07e5be7b3","html_url":"https://github.com/AdamNiederer/base100","commit_stats":{"total_commits":43,"total_committers":3,"mean_commits":"14.333333333333334","dds":"0.046511627906976716","last_synced_commit":"4d1650f5edffcec935f5cfd5a79859373d3bcdc1"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AdamNiederer%2Fbase100","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AdamNiederer%2Fbase100/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AdamNiederer%2Fbase100/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AdamNiederer%2Fbase100/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AdamNiederer","download_url":"https://codeload.github.com/AdamNiederer/base100/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254346624,"owners_count":22055808,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["base64","codec","emoji","memescale"],"created_at":"2024-10-15T11:14:30.678Z","updated_at":"2025-05-15T13:05:30.302Z","avatar_url":"https://github.com/AdamNiederer.png","language":"Rust","readme":"[![crates.io](https://img.shields.io/crates/v/base100.svg)](https://crates.io/crates/base100)\n[![Build Status](https://travis-ci.org/AdamNiederer/base100.svg?branch=master)](https://travis-ci.org/AdamNiederer/base100)\n\n# Base💯\n\nEncode things into Emoji.\n\nBase💯 can represent any byte with a unique emoji symbol, therefore it can\nrepresent binary data with zero printable overhead (see caveats for more info).\n\n## Usage\n\n```\n$ echo \"the quick brown fox jumped over the lazy dog\" | base100\n👫👟👜🐗👨👬👠👚👢🐗👙👩👦👮👥🐗👝👦👯🐗👡👬👤👧👜👛🐗👦👭👜👩🐗👫👟👜🐗👣👘👱👰🐗👛👦👞🐁\n```\n\nBase💯 will read from stdin unless a file is specified, will write UTF-8 to\nstdout, and has a similar API to GNU's base64. Data is encoded by default,\nunless `--decode` is specified; the `--encode` flag does nothing and exists\nsolely to accommodate lazy people who don't want to read the docs (like me).\n\n```\nUSAGE:\n    base100 [FLAGS] [input]\n\nFLAGS:\n    -d, --decode     Tells base💯 to decode this data\n    -e, --encode     Tells base💯 to encode this data\n    -h, --help       Prints help information\n    -V, --version    Prints version information\n\nARGS:\n    \u003cinput\u003e    The input file to use\n```\n\n## Installation\n\nTo install base💯, use cargo:\n\n```shell\n$ cargo install base100\n```\n\nbase💯 also has an AVX-accelerated implementation, delivering up to 4x faster\nperformance. If you have a capable CPU and nightly rust, install it as such:\n\n```shell\n$ RUSTFLAGS=\"-C target-cpu=native\" cargo install base100 --features simd\n```\n\n## Performance\n\nbase💯's performance is very competitive with other encoding algorithms.\n\n### Scalar Performance\n\n```\n$ base100 --version\nbase💯 0.4.1\n\n$ base64 --version\nbase64 (GNU coreutils) 8.28\n\n$ cat /dev/urandom | pv | base100 \u003e /dev/null\n [ 247MiB/s]\n\n$ cat /dev/urandom | pv | base64 \u003e /dev/null\n [ 232MiB/s]\n\n$ cat /dev/urandom | pv | base100 | base100 -d \u003e /dev/null\n [ 233MiB/s]\n\n$ cat /dev/urandom | pv | base64 | base64 -d \u003e /dev/null\n [ 176MiB/s]\n```\n\nIn both scenarios, base💯 compares favorably to GNU base64.\n\n### SIMD Performance\n\nOn a machine supporting AVX2, base💯 gains a 4x performance boost via some\nhand-tuned x86-64 assembly. Support for SSE2 will come soon, and I will happily\nsupport AVX-512 if some compatible hardware finds its way into my hands.\n\nTo receive this speedup: you must use:\n- An AVX2-capable processor (Newer than Broadwell, or Zen)\n- Nightly Rust\n\nTo build the SIMD-accelerated version, simply go to your project directory and\ntype\n\n```shell\n$ RUSTFLAGS=\"-C target-cpu=native\" cargo +nightly build --release --features simd\n```\n\nPlease note that the below benchmarks were taken on a significantly weaker\nmachine than the above benchmarks, and cannot be directly compared.\n\n```\n$ base100 --version\nbase💯 0.4.1\n\n$ base64 --version\nbase64 (GNU coreutils) 8.28\n\n$ cat /dev/zero | pv | ./base100 \u003e /dev/null\n [1.14GiB/s]\n\n$ cat /dev/zero | pv | base64 \u003e /dev/null\n [ 479MiB/s]\n\n$ cat /dev/zero | pv | ./base100 | ./base100 -d \u003e /dev/null\n [ 412MiB/s]\n\n$ cat /dev/zero | pv | base64 | base64 -d \u003e /dev/null\n [ 110MiB/s]\n```\n\nIn this scenario, base💯 compares very favorably to GNU base64.\n\n## Caveats\n\nBase💯 is *very* space inefficient. It bloats the size of your data by around 3x,\nand should only be used if you have to display encoded binary data in as few\n__printable__ characters as possible. It is, however, very suitable for human\ninteraction. Encoded hashes and checksums become very easy to verify at a glance,\nand take up much less space on a terminal.\n\n## Future plans\n\n- Allow data to be encoded with the full 1024-element emoji set\n- Add further optimizations and ensure we're abusing SIMD as much as possible\n- Add multiprocessor support\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadamniederer%2Fbase100","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadamniederer%2Fbase100","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadamniederer%2Fbase100/lists"}