Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
ISO/IEC 25390:2025 defines the Simple Binary Encoding (SBE) — a binary wire format originally developed by the FIX Trading Community for high-performance financial trading systems. Unlike traditional FIX tag-value encoding which uses human-readable text, SBE uses native binary datatypes to achieve dramatically lower latency and higher throughput. The standard was adopted under the ISO/IEC JTC 1 PAS (Publicly Available Specification) procedure, making it an official international standard for financial messaging.
SBE is designed around several key principles:
| Feature | FIX Tag-Value (Traditional) | FIX SBE (ISO 25390) |
|---|---|---|
| Encoding | ASCII text (e.g., “35=D|55=IBM|54=1|…”) | Binary (field at known byte offset) |
| Parsing model | Sequential scan for tag numbers | Direct memory access by offset |
| Memory allocation | Per-field string allocation | Zero-allocation decode possible |
| Decode latency | Microseconds to milliseconds | Sub-microsecond (typically less than 100 ns) |
| Schema | Implicit (field definitions in comments/docs) | Explicit XML schema (XSD) |
| Wire size | Large (verbose text) | Compact (native binary size + minimal framing) |
| Versioning | New tags added; old tags deprecated | Schema versioning with backward compatibility |
SBE supports a comprehensive set of datatypes mapped to native binary representations:
| FIX Datatype | SBE Encoding | Primitive Type | Notes |
|---|---|---|---|
| int | Integer | int8/int16/int32/int64 | Configurable byte order (little/big endian) |
| Price/Amt | Decimal | Composite (exponent + mantissa) | Fixed-point with configurable precision |
| Qty | Integer or Decimal | As specified | Range attributes constrain valid values |
| String | Variable-length string | Length prefix + char data | Length field precedes data |
| Char | Fixed-length char array | Byte array (no length prefix) | For fixed-width fields |
| Float | Floating point | float/float64 | IEEE 754, null value support |
| UTCTimestamp | Date/time encoding | Epoch-based (configurable unit) | Nanosecond precision available |
| MultipleValueValue | Multi-value choice | Bit set (bitset) | Efficient flag encoding |
| Boolean | Enumeration | uint8 or similar | Mapped to two-value enum |
Each SBE message consists of three parts: a framing header (provided by the session protocol, such as the Simple Open Framing Header), an SBE message encoding header (containing schema ID, template ID, schema version, block length, and counts of repeating groups and variable-length fields), and the message body. The body is a flat sequence of fields, optionally followed by repeating groups and variable-length data.
SBE supports repeating groups with fixed-length entries, where each entry has a known block length. Groups can be nested, enabling hierarchical data structures. The group dimension encoding includes blockLength and numInGroup. Empty groups (numInGroup = 0) are compact — they simply omit the group data entirely.
SBE message schemas are expressed as XML documents conforming to an XSD schema defined in the standard. The schema defines data encodings (simple, composite, enumeration, multi-value choice), message templates with their field attributes, and repeating group structures.
The standard’s versioning and extension mechanism (Clause 8) is particularly elegant. Fields can be added to messages in new schema versions without breaking decoders for the old version. New fields are appended after existing fields, and decoders use the blockLength field in the message header to determine how much of the message they understand. This forward-compatible design is essential for evolving trading protocols without coordination downtime.