Hello everyone,
I’m happy to release Bitstream, the successor to the Buffer module. Bitstream is a complete rewrite and a brand new project, rebuilt from the ground up as a full framework rather than a simple library.
While Bitstream builds on the concepts introduced by Buffer, it goes far beyond, offering a complete architecture for binary serialization, custom type handling, and structured data management.
Bitstream Repository
Bitstream Release
Why Bitstream?
Buffer was originally designed as a lightweight utility for binary manipulation. Over time, the need for a more powerful and structured solution became clear, especially for developers working with:
- Networking and remote data compression
- Save systems and data storage optimization
- Custom protocols and low-level data handling
- Performance-critical serialization pipelines
Bitstream is the answer to those needs, providing a robust and extensible framework designed with real production use cases in mind.
Key Features
- 60+ built-in types, covering integers, floats, Roblox datatypes (CFrame, Vector, Color3, UDim, etc.), sequences, curves and more
- Multiple precision variations for most complex types (F16, F24, F32, F64, Quantized, Quaternion…)
- Schemaless serialization for dynamic and flexible data structures
- Structured types with
Array,StructandInstancesupport - Compact binary output for optimized bandwidth and storage
- Extensible architecture designed to grow with your project
Supported Types
Bitstream supports a wide range of built-in types, organized by category. Click each section to expand.
Integers (signed & unsigned)
| Signed | Unsigned |
|---|---|
| I8 | U1 |
| I16 | U8 |
| I24 | U16 |
| I32 | U24 |
| I40 | U32 |
| I48 | U40 |
| I54 | U48 |
| — | U54 |
Note: U1 is a single-bit unsigned integer, useful for compact boolean-like flags.
Floating point numbers
| Type | Description |
|---|---|
| F8 | 8-bit floating point (ultra compact) |
| F16 | 16-bit floating point (half precision) |
| F24 | 24-bit floating point |
| F32 | 32-bit floating point (single precision) |
| F64 | 64-bit floating point (double precision) |
Strings
| Type | Description |
|---|---|
| String | Standard string |
| PrefixedString | String with a length prefix for faster parsing |
Booleans
| Type | Description |
|---|---|
| Bool1 | Single-bit boolean (most compact) |
| Bool8 | Byte-aligned boolean |
Vectors
Vector2
- Vector2float24
- Vector2float32
- Vector2int16
- Vector2uint16
- Vector2
Vector3
- Vector3float24
- Vector3float32
- Vector3int16
- Vector3uint16
- Vector3
CFrame
| Type | Description |
|---|---|
| CFrameQuaternion | Rotation stored as a quaternion |
| CFrameF24 | 24-bit precision |
| CFrameF32 | 32-bit precision |
| CFrameF64 | 64-bit precision |
| CFrameQuantized | Quantized for maximum compression |
Colors
| Type | Description |
|---|---|
| Color3 | Standard Color3 |
| Color3F24 | 24-bit precision |
| Color3F32 | 32-bit precision |
| Color3F64 | 64-bit precision |
UI-related types
| Type | Description |
|---|---|
| UDim | Standard UDim |
| UDim2 | Standard UDim2 |
| RectFloat24 | Rect with 24-bit floats |
| RectFloat32 | Rect with 32-bit floats |
| Rect | Standard Rect |
Regions
| Type | Description |
|---|---|
| Region3 | Standard Region3 |
| Region3Quaternion | Quaternion-based |
| Region3CFrameF24 | With 24-bit CFrame precision |
| Region3CFrameF32 | With 32-bit CFrame precision |
| Region3Quantized | Fully quantized |
Curves & sequences
Rotation curves
- RotationCurveKey
- RotationCurveKeyQuaternion
- RotationCurveKeyCFrameF24
- RotationCurveKeyCFrameF32
- RotationCurveKeyQuantized
Float curves
- FloatCurveKey
- FloatCurveKeyF16
- FloatCurveKeyF24
- FloatCurveKeyF32
Color sequences
- ColorSequence
- ColorSequenceF24
- ColorSequenceF32
- ColorSequenceF64
Number ranges
- NumberRange
- NumberRangeF16
- NumberRangeF24
- NumberRangeF64
Number sequences
- NumberSequence
- NumberSequenceF16
- NumberSequenceF24
- NumberSequenceF64
Enums
| Type | Description |
|---|---|
| Enum | Serialized Roblox Enum |
Composite & structured types
| Type | Description |
|---|---|
| Array | Ordered collection of typed values |
| Struct | Structured object composed of named fields |
| Instance | Reference to a Roblox Instance |
Schemaless Serialization
One of the most notable additions in Bitstream is schemaless serialization. Unlike schema-based approaches where you must predefine the exact structure of your data, schemaless serialization allows you to serialize and deserialize data without knowing its structure in advance.
This is especially useful for:
- Systems where the data shape can vary dynamically
- Debugging tools and inspectors
- Rapid prototyping without locking down a schema
- Cases where different clients may send different payload shapes
Schema-based serialization remains available for performance-critical scenarios where every byte matters, but schemaless is now a first-class option in the framework.
Precision Variations
Many complex types in Bitstream come with multiple precision variations (F16, F24, F32, F64, Quantized, Quaternion). This gives you full control over the trade-off between precision and size, allowing you to fine-tune each field of your data based on your actual needs.
For example, transmitting a player position over the network rarely needs full 64-bit precision. Using CFrameF24 or CFrameQuantized can drastically reduce bandwidth usage while keeping the visual result indistinguishable in most gameplay scenarios.
Documentation
Please note that the full documentation is not yet available on the website. I’m actively working on it and it will be published as soon as possible.
In the meantime, you can refer to the previous Buffer module documentation as a base reference, since most of the core concepts remain similar. That said, this should rarely be necessary — the framework itself is largely self-explanatory, with most types, methods, and behaviors documented directly within the code and its inline comments.
Buffer Documentation : Overview - Evxry Utils
Reference
For those who used the previous version, you can find the original Buffer release post here:
Original post
Bitstream is the direct successor and evolution of that module.
Roadmap
This will likely be the last major update for a while due to personal reasons. I’ll continue to work on Bitstream whenever I have the time and mental energy, but I can’t commit to a regular release schedule for now.
The Roblox-ts version is still in progress and will be released once completed.
Part of a Larger Open-Source Project
Bitstream is part of a broader open-source project I’ve been building over time. The project isn’t fully complete yet, and Bitstream is one of its core building blocks.
Other upcoming libraries will directly rely on Bitstream for their binary handling. One example is BitFluent, a buffer-networking library that will use Bitstream internally to handle all buffer serialization and deserialization. This ensures a consistent, unified, and optimized binary layer across all my libraries and frameworks.
More libraries built around Bitstream will be released progressively as the project evolves.
Feedback
Bitstream has been designed to solve real problems and to grow alongside the projects that use it. If you encounter bugs, have feature requests, or want to suggest improvements, feel free to open an issue or reply to this thread. Contributions and constructive feedback are always welcome.
Thanks to everyone who has been supporting the project through Buffer and now Bitstream ![]()