# varint

> protobuf-style varint bytes - use msb to create integer values of varying sizes

Latest version **6.0.0** (published 2020-09-28) · MIT license · 0 weekly downloads

## Install

```sh
npm install varint
pnpm add varint
yarn add varint
bun add varint
```

## Health

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

Positive: has types package; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned.

## Facts

| | |
|---|---|
| Version | 6.0.0 |
| Published | 2020-09-28 |
| First published | 2013-02-14 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | separate (@types/varint) |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 9.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 95 |
| Author | Chris Dickinson |
| Maintainers | mafintosh, chrisdickinson |
| Keywords | varint, protobuf, encode, decode |

## Links

- npm: https://www.npmjs.com/package/varint
- Repository: https://github.com/chrisdickinson/varint
- Homepage: https://github.com/chrisdickinson/varint#readme
- Issues: https://github.com/chrisdickinson/varint/issues
- npm.io page: https://npm.io/package/varint

## Alternatives

- [flatbuffers](https://npm.io/package/flatbuffers.md) — 6.0M weekly downloads
- [jwt-simple](https://npm.io/package/jwt-simple.md) — 259.5K 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

## Recent versions

- 6.0.0 (latest) — 2020-09-28
- 5.0.2 — 2020-09-28
- 5.0.1 — 2020-09-28
- 5.0.0 — 2016-11-04
- 4.0.1 — 2016-06-18
- 4.0.0 — 2015-01-06
- 3.0.1 — 2014-08-08
- 3.0.0 — 2014-06-21
- 2.0.0 — 2014-05-29
- 1.2.0 — 2014-05-12
- 1.1.0 — 2014-05-03
- 1.0.0 — 2013-10-10
- 0.0.3 — 2013-05-27
- 0.0.2 — 2013-02-14
- 0.0.1 — 2013-02-14

## README

# varint

encode whole numbers to an array of [protobuf-style varint bytes](https://developers.google.com/protocol-buffers/docs/encoding#varints) and also decode them.

```javascript
var varint = require('varint')

var bytes = varint.encode(300) // === [0xAC, 0x02]
varint.decode(bytes) // 300
varint.decode.bytes // 2 (the last decode() call required 2 bytes)
```

## api

### varint = require('varint')

### varint.encode(num[, buffer=[], offset=0]) -> buffer

Encodes `num` into `buffer` starting at `offset`. returns `buffer`, with the encoded varint written into it. If `buffer` is not provided, it will default to a new array.

`varint.encode.bytes` will now be set to the number of bytes
modified.

### varint.decode(data[, offset=0]) -> number

decodes `data`, which can be either a buffer or array of integers, from position `offset` or default 0 and returns the decoded original integer.

Throws a `RangeError` when `data` does not represent a valid encoding.

### varint.decode.bytes

if you also require the length (number of bytes) that were required to decode the integer you can access it via `varint.decode.bytes`. this is an integer property that will tell you the number of bytes that the last .decode() call had to use to decode.

### varint.encode.bytes

similar to `decode.bytes` when encoding a number it can be useful to know how many bytes where written (especially if you pass an output array). you can access this via `varint.encode.bytes` which holds the number of bytes written in the last encode.


### varint.encodingLength(num)

returns the number of bytes this number will be encoded as, up to a maximum of 8.

## usage notes

If varint is passed a buffer that does not contain a valid end
byte, then `decode` will throw `RangeError`, and `decode.bytes` 
will be set to 0. If you are reading from a streaming source,
it's okay to pass an incomplete buffer into `decode`, detect this
case, and then concatenate the next buffer.

# License

MIT

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