Skip to content

theevenstarspace/byteform

Repository files navigation

Byteform

GitHub branch check runs npm package minimized gzipped size (scoped) NPM Version

Byteform is a lightweight and versatile TypeScript library designed for encoding and decoding binary data. It provides an intuitive API to work with binary structures, making it an excellent choice for developers dealing with low-level data operations in both browser and Node.js environments.

Table of contents

  1. Why?
  2. Features
  3. Installation
  4. Quick Start
    1. Create a Binary Structure
    2. Encode data
    3. Decode data
  5. Contributing

Why Byteform?

Byteform simplifies binary data handling by providing an intuitive API without sacrificing performance. Whether you're building network protocols, file parsers, or any other application requiring precise binary data manipulation, Byteform has you covered.

Features

  • Encode and decode binary data with ease.
  • Works seamlessly in both browser and Node.js environments.
  • Built with performance and simplicity in mind.
  • Typescript first.
  • No dependencies.

Installation

Install Byteform via npm:

npm install @evenstar/byteform

Or via yarn:

yarn add @evenstar/byteform

Quick Start

Create a Binary Structure

import { Struct, List, Text, u8, f32 } from '@evenstar/byteform';

const vec3 = new Struct({
  x: f32,
  y: f32,
  z: f32
});

const bullet = new Struct({
  position: vec3,
  velocity: vec3,
  damage: u8
});

const Player = new Struct({
  name: new Text(32),
  level: u8,
  position: vec3,
  bullets: new List(bullet)
});

Encode data

import { BinaryEncoder } from '@evenstar/byteform';

const encoder = BinaryEncoder.create(1024); // 1KB buffer

// Encode a Player instance
encoder.encode(Player, {
  name: 'Alice',
  level: 10,
  position: { x: 1.0, y: 2.0, z: 3.0 },
  bullets: [
    { 
      position: { x: 10.0, y: 20.0, z: 30.0 },
      velocity: { x: 1.0, y: 0.0, z: 0.0 },
      damage: 10
    },
    { 
      position: { x: 20.0, y: 30.0, z: 40.0 },
      velocity: { x: 0.0, y: 1.0, z: 0.0 },
      damage: 20
    }
  ]
});

/** 
 * Get the encoded binary data
 * Send the buffer over the network, save it to a file, etc.
 */
const buffer = encoder.commit();

Decode data

import { BinaryDecoder } from '@evenstar/byteform';

const decoder = BinaryDecoder.fromArrayBuffer(buffer);
const player = decoder.decode(Player);

console.log(player);

Contributing

Contributions are welcome! Please open an issue or submit a pull request to get involved.