# utf-6i

> Encode text into a always-correct chunks-of-6 binary data format

Latest version **1.2.0** (published 2020-07-08) · MIT license · 0 weekly downloads

## Install

```sh
npm install utf-6i
pnpm add utf-6i
yarn add utf-6i
bun add utf-6i
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.2.0 |
| Published | 2020-07-08 |
| First published | 2020-06-11 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | MatReiner |
| Maintainers | matreiner |
| Keywords | utf, encode, binary, base64, compress, 6-bit, text, unicode |

## Links

- npm: https://www.npmjs.com/package/utf-6i
- Repository: https://github.com/MatReiner/utf-6i
- Homepage: https://github.com/MatReiner/utf-6i#readme
- Issues: https://github.com/MatReiner/utf-6i/issues
- npm.io page: https://npm.io/package/utf-6i

## Alternatives

- [flatbuffers](https://npm.io/package/flatbuffers.md) — 6.0M weekly downloads
- [@exodus/patch-broken-hermes-typed-arrays](https://npm.io/package/@exodus/patch-broken-hermes-typed-arrays.md) — 28.5K weekly downloads
- [@native-to-anchor/buffer-layout](https://npm.io/package/@native-to-anchor/buffer-layout.md) — 12.2K weekly downloads
- [binary-parser-encoder](https://npm.io/package/binary-parser-encoder.md) — 5.3K weekly downloads
- [datasets-fi-postalcodes](https://npm.io/package/datasets-fi-postalcodes.md) — 1.1K weekly downloads

## Recent versions

- 1.2.0 (latest) — 2020-07-08
- 1.1.0 — 2020-06-12
- 1.0.9 — 2020-06-12
- 1.0.8 — 2020-06-11
- 1.0.7 — 2020-06-11
- 1.0.6 — 2020-06-11
- 1.0.5 — 2020-06-11
- 1.0.4 — 2020-06-11
- 1.0.3 — 2020-06-11
- 1.0.2 — 2020-06-11
- 1.0.1 — 2020-06-11

## README

# Utf-6i
encode small!

### Usage
First of all, we'll import `utf-6i`:
```
npm install utf-6i
```
```js
const UTF6I = require("utf-6i")
```
To encode a string of text, use `<UTF6I>.encode(text)`:
```js
const UTF6I = require("utf-6i")
let encoded = UTF6I.encode("Hello, World!")
console.log(encoded) //"ﲁ䰰ￜϵ콈섿翿"
```
To decode a string, simply use `<UTF6I>.decode(encoded)`:
```js
const UTF6I = require("utf-6i")
let encoded = "ﲁ䰰ￜϵ콈섿翿"
console.log( UTF6I.decode(encoded) ) //"Hello, World!"
```
Sometimes the mumble-jumble `"ﲁ䰰ￜϵ콈섿翿"` isn't fitted for what you want to do. That's fine! There are 3 other input/output modes to choose from when encoding / decoding.
#### base64
```js
const UTF6I = require("utf-6i")
UTF6I.mode = "base64" //"BASE", "64", "base", "true", "1", etc... all work also

let encoded = UTF6I.encode("Hello, World!")
console.log(encoded) //"/IFMMP/cA/XPSME/f/=="

let decoded = UTF6I.decode(encoded)
console.log(decoded) //"Hello, World!"
```
#### binary
```js
const UTF6I = require("utf-6i")
UTF6I.mode = "bin" //All invalid modes will fallback to this

let encoded = UTF6I.encode("Hello, World!")
console.log(encoded) //"111111001000000101001100001100001111111111011100000000111111010111001111010010001100000100111111011111"

let decoded = UTF6I.decode(encoded)
console.log(decoded) //"Hello, World!"
```
#### UInt8Array
```js
const UTF6I = require("utf-6i")
UTF6I.mode = "uint" //All invalid modes will fallback to this

let encoded = UTF6I.encode("Hello, World!")
console.log(encoded) //"UInt8Array [252, 129, 76, 48, 255, 220, 3, 245, 207, 72, 193, 63, 127, 255]"

let decoded = UTF6I.decode(encoded)
console.log(decoded) //"Hello, World!"
```

### Compression
```
UTF-16 with regular english:
 [Most Common] [4KB] UTF-16 => [1.58KB] UTF-6i (60.4% compression rate)
UTF-16 JavaScript
[Quite Common] [4KB] UTF-16 => [1.89KB] UTF-6i (52.8% compression rate)
UTF-16 with unicode jumble:
  [Not Common] [4KB] UTF-16 => [5.24KB] UTF-6i (-31% compression rate)
```
### Performance:
(on intel i5 8GB laptop, running on (new) Edge Browser ES11)
```
UTF-16: n/a       UTF-6i: 3.1ms/KB (1,000-1,000,000x slower)
  GZip: ~100ms/KB UTF-6i: 3.1ms/KB (30x faster)
```
 **Note:** this project was not made to have the best compression rate or best performance. The goal was to have an overall low performance overhead while still offering 1. Decent compression and 2. fixed block size (always 6bit)

---
_Source: https://npm.io/package/utf-6i · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
