[API reference](https://evolu.dev/docs/api-reference) › [@evolu/common](https://evolu.dev/docs/api-reference/common) › Buffer

Binary data handling and byte array utilities.

Buffer-based decoding functions intentionally throw errors instead of
returning [Result](https://evolu.dev/docs/api-reference/common/Result/type-aliases/Result). This is a deliberate micro-optimization for Evolu
Protocol's hot paths: Result is inexpensive, but returning decoded values
directly avoids its success-case allocation, and using `Error` objects
preserves stack traces. In the future, we will try returning `Error` objects
in `Result` values to measure the real-world performance impact.

## Classes

| Class                                                                    | Description                                                                                                                                                                                        |
| ------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [BufferError](https://evolu.dev/docs/api-reference/common/Buffer/classes/BufferError) | Custom error for [Buffer](https://evolu.dev/docs/api-reference/common/Buffer/interfaces/Buffer)-related failures like premature end of data. Provides better stack traces for debugging binary protocol issues. |

## Functions

| Function                                                                           | Description                                                                                                  |
| ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| [bytesToHex](https://evolu.dev/docs/api-reference/common/Buffer/functions/bytesToHex)           | Convert byte array to hex string. Uses built-in function, when available.                                    |
| [bytesToUtf8](https://evolu.dev/docs/api-reference/common/Buffer/functions/bytesToUtf8)         | Converts bytes to string using UTF8 encoding.                                                                |
| [concatBytes](https://evolu.dev/docs/api-reference/common/Buffer/functions/concatBytes)         | Copies several Uint8Arrays into one.                                                                         |
| [createBuffer](https://evolu.dev/docs/api-reference/common/Buffer/functions/createBuffer)       | Creates a [Buffer](https://evolu.dev/docs/api-reference/common/Buffer/interfaces/Buffer) for efficient byte operations.   |
| [decodeJsonValue](https://evolu.dev/docs/api-reference/common/Buffer/functions/decodeJsonValue) | Decodes a [JsonValue](https://evolu.dev/docs/api-reference/common/Type/variables/JsonValue) using the MessagePack format. |
| [encodeJsonValue](https://evolu.dev/docs/api-reference/common/Buffer/functions/encodeJsonValue) | Encodes a [JsonValue](https://evolu.dev/docs/api-reference/common/Type/variables/JsonValue) using the MessagePack format. |
| [hexToBytes](https://evolu.dev/docs/api-reference/common/Buffer/functions/hexToBytes)           | Convert hex string to byte array. Uses built-in function, when available.                                    |
| [utf8ToBytes](https://evolu.dev/docs/api-reference/common/Buffer/functions/utf8ToBytes)         | Converts string to bytes using UTF8 encoding.                                                                |

## Interfaces

| Interface                                                         | Description                                                                                                                                                                                                                                                                                         |
| ----------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [Buffer](https://evolu.dev/docs/api-reference/common/Buffer/interfaces/Buffer) | A Buffer is a dynamic, resizable container for binary data, optimized for scenarios where the final size is unknown. It grows exponentially (doubling its capacity) to minimize memory reallocations and uses `subarray` for efficient, copy-free data access in methods like `unwrap` and `shift`. |