--- layout: page published: true noToc: false noComments: false noDate: false title: Bytecode Format (Overview) subtitle: Reference for the bytecode format (split out from internals for convenience). description: Reference for the bytecode format (split out from internals for convenience). permalink: /documentation/bytecode-format/ lang: en tags: - bytecode - convenience - format - internals - out - reference - split --- This document summarizes the Fun bytecode format. For deep VM details, see [internals](./internals/). ## Goals - Compact representation for fast loading and dispatch - Stable header with room for versioning ## File layout (typical) 1. Header - Magic number / signature - Format version - Flags (endianness, feature bits) - Offsets to sections 2. Constants table - Literals: numbers, strings, compound constants 3. Code section - Functions/procedures with instruction streams - Line/column mapping (optional for debugging) 4. Auxiliary tables - Imports/exports, names, debug info (optional) ## Instructions - Fixed-size or small-variant opcodes grouped by domain (math, logic, stack, call, control flow, etc.). - Operands encoded inline following the opcode (width varies by instruction). ## Versioning and compatibility - The header's version field allows the VM to refuse or translate older/newer formats. - Keep additions backward-compatible when possible by appending sections or flags.