Pure JavaScript implementation of the Avro specification.
- Blazingly fast and compact serialization! Typically faster than JSON with much smaller encodings.
- All the Avro goodness and more: type inference, schema evolution...
- Support for serializing arbitrary JavaScript objects.
- Unopinionated 64-bit integer compatibility.
$ npm install avsc
const avro = require('avsc');
-
Encode and decode values from a known schema:
const type = avro.Type.forSchema({ type: 'record', name: 'Pet', fields: [ { name: 'kind', type: {type: 'enum', name: 'PetKind', symbols: ['CAT', 'DOG']} }, {name: 'name', type: 'string'} ] }); const buf = type.toBuffer({kind: 'CAT', name: 'Albert'}); // Encoded buffer. const val = type.fromBuffer(buf); // = {kind: 'CAT', name: 'Albert'}
-
Infer a value's schema and encode similar values:
const type = avro.Type.forValue({ city: 'Cambridge', zipCodes: ['02138', '02139'], visits: 2 }); // We can use `type` to encode any values with the same structure: const bufs = [ type.toBuffer({city: 'Seattle', zipCodes: ['98101'], visits: 3}), type.toBuffer({city: 'NYC', zipCodes: [], visits: 0}) ];
-
Get a readable stream of decoded values from an Avro container file (see the
BlockDecoder
API for an example compressed using Snappy):avro.createFileDecoder('./values.avro') .on('metadata', function (type) { /* `type` is the writer's type. */ }) .on('data', function (val) { /* Do something with the decoded value. */ });