How to decode Duktape bytecode

The term "bytecode" can refer to either the function dump/load format, or more narrowly just the bytecode opcode format.

Decoding bytecode opcodes

Duktape opcode format does not have versioning guarantees and is simply an internal format shared by the run-time compiler and executor components. The opcode format has changed several times in minor releases to e.g. extend bytecode limits and improve performance. There's no specification for the opcode format other than the source code at present; such a specification would easily fall out-of-date.

With that caveat, here are some resources to decode the bytecode opcode format if you want to do so e.g. in a debug client:

Note that bytecode format has changed between versions. There was a large bytecode rework between Duktape 1.x and 2.x, but there are also significant changes between minor versions.

Decoding dump/load bytecode format

The dump/load format includes both the actual bytecode (opcode list) of a function, but also constants, inner functions, and function metadata. Like the opcode format, the dump/load format is version specific and documented only in source code. See: