{
  "version": 1,
  "basis": "The public C++ API declared under include/jaiscript",
  "entries": [
    {
      "owner": "array<T>",
      "name": "size",
      "signature": "size() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.size() -> int",
      "example": {
        "code": "array<int> xs = [4, 5, 6];\nprint(xs.size(), \" \", xs.empty());",
        "output": "3 false"
      }
    },
    {
      "owner": "array<T>",
      "name": "length",
      "signature": "length() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "Alias of size.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.length() -> int"
    },
    {
      "owner": "array<T>",
      "name": "empty",
      "signature": "empty() -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.empty() -> bool"
    },
    {
      "owner": "array<T>",
      "name": "push",
      "signature": "push(value: T) -> void",
      "provider": "core",
      "effect": "mutate",
      "notes": "Converts through the element boundary.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.push(value: T) -> void",
      "example": {
        "code": "array<int> xs = [1, 2];\nxs.push(3);\nprint(to_json(xs));",
        "output": "[1,2,3]"
      }
    },
    {
      "owner": "array<T>",
      "name": "pop",
      "signature": "pop() -> T",
      "provider": "core",
      "effect": "mutate",
      "notes": "Removes the last element; empty array raises.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.pop() -> T",
      "example": {
        "code": "array<int> xs = [1, 2, 3];\nprint(xs.pop(), \" \", to_json(xs));",
        "output": "3 [1,2]"
      }
    },
    {
      "owner": "array<T>",
      "name": "clear",
      "signature": "clear() -> void",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.clear() -> void",
      "example": {
        "code": "array<int> xs = [4, 5, 6];\nxs.clear();\nprint(xs.size());",
        "output": "0"
      }
    },
    {
      "owner": "array<T>",
      "name": "front",
      "signature": "front() -> T",
      "provider": "core",
      "effect": "observe",
      "notes": "Empty array raises. An object, array or map element comes back as a reference to it, like a C++ reference return: binding the result to var, auto or T copies the element, while var&, T& and a member call on the result reach the stored element.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.front() -> T"
    },
    {
      "owner": "array<T>",
      "name": "back",
      "signature": "back() -> T",
      "provider": "core",
      "effect": "observe",
      "notes": "Empty array raises. An object, array or map element comes back as a reference to it, like a C++ reference return: binding the result to var, auto or T copies the element, while var&, T& and a member call on the result reach the stored element.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.back() -> T",
      "example": {
        "code": "array<int> xs = [4, 5, 6];\nprint(xs.front(), \" \", xs.back());",
        "output": "4 6"
      }
    },
    {
      "owner": "array<T>",
      "name": "first",
      "signature": "first() -> T",
      "provider": "core",
      "effect": "observe",
      "notes": "Alias of front. An object, array or map element comes back as a reference to it, like a C++ reference return: binding the result to var, auto or T copies the element, while var&, T& and a member call on the result reach the stored element.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.first() -> T"
    },
    {
      "owner": "array<T>",
      "name": "last",
      "signature": "last() -> T",
      "provider": "core",
      "effect": "observe",
      "notes": "Alias of back. An object, array or map element comes back as a reference to it, like a C++ reference return: binding the result to var, auto or T copies the element, while var&, T& and a member call on the result reach the stored element.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.last() -> T"
    },
    {
      "owner": "array<T>",
      "name": "index_of",
      "signature": "index_of(value: var) -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "Language equality; -1 if absent.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.index_of(value: var) -> int",
      "example": {
        "code": "array<string> xs = [\"a\", \"b\"];\nprint(xs.index_of(\"b\"), \" \", xs.index_of(\"z\"));",
        "output": "1 -1"
      }
    },
    {
      "owner": "array<T>",
      "name": "has",
      "signature": "has(value: var) -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "Language equality.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.has(value: var) -> bool"
    },
    {
      "owner": "array<T>",
      "name": "contains",
      "signature": "contains(value: var) -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "Alias of has.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.contains(value: var) -> bool",
      "example": {
        "code": "array<int> xs = [1, 2, 3];\nprint(xs.contains(2), \" \", xs.contains(9));",
        "output": "true false"
      }
    },
    {
      "owner": "array<T>",
      "name": "slice",
      "signature": "slice(start: int = 0, end: int = size()) -> array<T>",
      "provider": "core",
      "effect": "mutate",
      "notes": "Retains the selected range in place, end exclusive; defaults 0 and size, negative indices relative to end, bounds clamp. Retained elements move without cloning. Returns the receiver; array::slice returns a copy.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.slice(start: int = 0, end: int = size()) -> array<T>",
      "example": {
        "code": "array<int> xs = [0, 1, 2, 3, 4];\narray<int> part = array::slice(xs, 1, 3);   // a copy\nxs.slice(3);                                 // xs itself becomes [3, 4]\nprint(to_json(part), \" \", to_json(xs));",
        "output": "[1,2] [3,4]"
      }
    },
    {
      "owner": "array<T>",
      "name": "filter",
      "signature": "filter(predicate: function(T[, int]) -> bool) -> array<T>",
      "provider": "core",
      "effect": "mutate; callback",
      "notes": "Filters in place, retaining element constraints and selected values without cloning. Reference callback parameters target live elements. Returns the receiver; array::filter returns a copy.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.filter(predicate: function(T[, int]) -> bool) -> array<T>",
      "example": {
        "code": "array<int> hp = [5, 0, 12, 0];\narray<int> alive = array::filter(hp, h => h > 0);   // a copy\nhp.filter(h => h > 10);                            // in place\nprint(to_json(alive), \" \", to_json(hp));",
        "output": "[5,12] [12]"
      }
    },
    {
      "owner": "array<T>",
      "name": "sort",
      "signature": "sort(predicate: function(T, T) -> bool = omitted) -> void",
      "provider": "core",
      "effect": "mutate, callback",
      "notes": "Mutates in place; optional bool predicate, otherwise language <, with <=> fallback for class and builtin orders. Errors stop sorting without committing the order; callback side effects remain. Strict weak ordering required. Typed primitive buffers avoid boxing. Default numeric sorting treats signed zeros as equivalent and groups all NaNs last; an explicit predicate supplies its own order.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.sort(predicate: function(T, T) -> bool = omitted) -> void",
      "example": {
        "code": "array<int> xs = [3, 1, 2];\nxs.sort();\nprint(to_json(xs));\nxs.sort((a, b) => a > b);\nprint(to_json(xs));",
        "output": "[1,2,3]\n[3,2,1]"
      }
    },
    {
      "owner": "array<T>",
      "name": "reverse",
      "signature": "reverse() -> void",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.reverse() -> void",
      "example": {
        "code": "array<int> xs = [1, 2, 3];\nxs.reverse();\nprint(to_json(xs), \" \", to_json(array::reverse(xs)));",
        "output": "[3,2,1] [1,2,3]"
      }
    },
    {
      "owner": "array<T>",
      "name": "remove",
      "signature": "remove(index: int) -> bool",
      "provider": "core",
      "effect": "mutate",
      "notes": "Removes by index; false without change when out of range.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.remove(index: int) -> bool"
    },
    {
      "owner": "array<T>",
      "name": "remove_if",
      "signature": "remove_if(predicate: function(T) -> bool) -> int",
      "provider": "core",
      "effect": "mutate, callback",
      "notes": "Removes matches; returns removed count.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.remove_if(predicate: function(T) -> bool) -> int",
      "example": {
        "code": "array<int> xs = [1, 2, 3, 4, 5];\nprint(xs.remove_if(x => x % 2 == 0), \" \", to_json(xs));",
        "output": "2 [1,3,5]"
      }
    },
    {
      "owner": "array<T>",
      "name": "join",
      "signature": "join(separator: string = \"\") -> string",
      "provider": "core",
      "effect": "observe",
      "notes": "Stringifies values between separators.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.join(separator: string = \"\") -> string",
      "example": {
        "code": "array<int> xs = [1, 2, 3];\nprint(xs.join(\", \"));",
        "output": "1, 2, 3"
      }
    },
    {
      "owner": "array<T>",
      "name": "map",
      "signature": "map(callback: function(T[, int]) -> var) -> array<T>",
      "provider": "core",
      "effect": "mutate; callback",
      "notes": "Maps in place, retaining input element constraints; results convert through the usual typed-element rules. Reference callback parameters target live elements. Returns the receiver; array::map can change result type.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.map(callback: function(T[, int]) -> var) -> array<T>",
      "example": {
        "code": "array<int> xs = [1, 2, 3];\nxs.map(x => x * 10);       // in place, keeps array<int>\nprint(to_json(xs));",
        "output": "[10,20,30]"
      }
    },
    {
      "owner": "array<T>",
      "name": "reduce",
      "signature": "reduce(callback: function(var, T[, int]) -> R, initial: var = first_element) -> R",
      "provider": "core",
      "effect": "callback",
      "notes": "Without initial, empty array raises; callback receives accumulator and element, optionally index. The accumulator starts as a copy of the initial value (or of the first element), as std::accumulate takes its init by value.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.reduce(callback: function(var, T[, int]) -> R, initial: var = first_element) -> R",
      "example": {
        "code": "array<int> xs = [1, 2, 3, 4];\nprint(xs.reduce((sum, x) => sum + x), \" \", xs.reduce((sum, x) => sum + x, 100));",
        "output": "10 110"
      }
    },
    {
      "owner": "array<T>",
      "name": "for_each",
      "signature": "for_each(callback: function(T[, int]) -> var) -> void",
      "provider": "core",
      "effect": "callback",
      "notes": "T& callback parameters bind live elements.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.for_each(callback: function(T[, int]) -> var) -> void",
      "example": {
        "code": "array<string> xs = [\"a\", \"b\"];\nxs.for_each((s, i) => print(i, \": \", s));",
        "output": "0: a\n1: b"
      }
    },
    {
      "owner": "array<T>",
      "name": "find",
      "signature": "find(predicate: function(T[, int]) -> bool) -> T or null",
      "provider": "core",
      "effect": "copy, callback",
      "notes": "First match, copied; null if absent. Value results copy, while shared_ptr/weak_ptr handles retain identity.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.find(predicate: function(T[, int]) -> bool) -> T or null",
      "example": {
        "code": "array<string> names = [\"ann\", \"bob\", \"cy\"];\nprint(names.find(n => n.size() == 3), \" \", names.find(n => n == \"zed\"));",
        "output": "ann null"
      }
    },
    {
      "owner": "array<T>",
      "name": "find_index",
      "signature": "find_index(predicate: function(T[, int]) -> bool) -> int",
      "provider": "core",
      "effect": "callback",
      "notes": "First match index; -1 if absent.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.find_index(predicate: function(T[, int]) -> bool) -> int",
      "example": {
        "code": "array<string> names = [\"ann\", \"bob\", \"cy\"];\nprint(names.find_index(n => n == \"cy\"), \" \", names.find_index(n => n == \"zed\"));",
        "output": "2 -1"
      }
    },
    {
      "owner": "array<T>",
      "name": "some",
      "signature": "some(predicate: function(T[, int]) -> bool) -> bool",
      "provider": "core",
      "effect": "callback",
      "notes": "True if any match; short circuits.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.some(predicate: function(T[, int]) -> bool) -> bool",
      "example": {
        "code": "array<int> xs = [1, 3, 4];\nprint(xs.some(x => x % 2 == 0), \" \", xs.every(x => x > 0));",
        "output": "true true"
      }
    },
    {
      "owner": "array<T>",
      "name": "every",
      "signature": "every(predicate: function(T[, int]) -> bool) -> bool",
      "provider": "core",
      "effect": "callback",
      "notes": "True if all match; empty array is true.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.every(predicate: function(T[, int]) -> bool) -> bool",
      "example": {
        "code": "array<int> xs = [2, 4, 7];\nprint(xs.every(x => x % 2 == 0));",
        "output": "false"
      }
    },
    {
      "owner": "array<T>",
      "name": "concat",
      "signature": "concat(other: array<var> or array<T>) -> array<T>",
      "provider": "core",
      "effect": "mutate",
      "notes": "Appends the other array in place, retaining input element constraints. Same-kind primitive/string/vector buffers avoid per-element boxing. Added values copy; handles share. Returns the receiver; alias of append.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.concat(other: array<var> or array<T>) -> array<T>",
      "example": {
        "code": "array<int> a = [1];\nprint(to_json(array::concat(a, [2, 3])), \" \", to_json(a));",
        "output": "[1,2,3] [1]"
      }
    },
    {
      "owner": "array<T>",
      "name": "insert",
      "signature": "insert(index: int, value: T) -> void",
      "provider": "core",
      "effect": "mutate",
      "notes": "Index from 0 through size inclusive.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.insert(index: int, value: T) -> void",
      "example": {
        "code": "array<string> xs = [\"a\", \"c\"];\nxs.insert(1, \"b\");\nprint(to_json(xs));",
        "output": "[\"a\",\"b\",\"c\"]"
      }
    },
    {
      "owner": "map<K,V>",
      "name": "size",
      "signature": "size() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "map<K,V>.size() -> int"
    },
    {
      "owner": "map<K,V>",
      "name": "length",
      "signature": "length() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "Alias of size.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "map<K,V>.length() -> int"
    },
    {
      "owner": "map<K,V>",
      "name": "empty",
      "signature": "empty() -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "map<K,V>.empty() -> bool"
    },
    {
      "owner": "map<K,V>",
      "name": "clear",
      "signature": "clear() -> void",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "map<K,V>.clear() -> void"
    },
    {
      "owner": "map<K,V>",
      "name": "contains",
      "signature": "contains(key: K) -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "Keys never coerce.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "map<K,V>.contains(key: K) -> bool",
      "example": {
        "code": "map<string, int> stock = {\"axe\": 2};\nprint(stock.contains(\"axe\"), \" \", stock.contains(\"bow\"));",
        "output": "true false"
      }
    },
    {
      "owner": "map<K,V>",
      "name": "has",
      "signature": "has(key: K) -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "Alias of contains.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "map<K,V>.has(key: K) -> bool"
    },
    {
      "owner": "map<K,V>",
      "name": "erase",
      "signature": "erase(key: K) -> bool",
      "provider": "core",
      "effect": "mutate",
      "notes": "Alias of remove(key); true if an entry was removed, false when absent.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "map<K,V>.erase(key: K) -> bool",
      "example": {
        "code": "map<string, int> stock = {\"axe\": 2, \"bow\": 1};\nprint(stock.erase(\"axe\"), \" \", stock.erase(\"axe\"), \" \", to_json(stock));",
        "output": "true false {\"bow\":1}"
      }
    },
    {
      "owner": "map<K,V>",
      "name": "remove",
      "signature": "remove(key: K) -> bool",
      "provider": "core",
      "effect": "mutate",
      "notes": "True if an entry was removed; false when absent.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "map<K,V>.remove(key: K) -> bool"
    },
    {
      "owner": "map<K,V>",
      "name": "keys",
      "signature": "keys() -> array<var>",
      "provider": "core",
      "effect": "copy",
      "notes": "Key order; keys become detached values. Value results copy, while shared_ptr/weak_ptr handles retain identity.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "map<K,V>.keys() -> array<var>",
      "example": {
        "code": "map<string, int> stock = {\"bow\": 1, \"axe\": 2};\nprint(to_json(stock.keys()), \" \", to_json(stock.values()));",
        "output": "[\"axe\",\"bow\"] [2,1]"
      }
    },
    {
      "owner": "map<K,V>",
      "name": "values",
      "signature": "values() -> array<var>",
      "provider": "core",
      "effect": "copy",
      "notes": "Values in key order. Value results copy, while shared_ptr/weak_ptr handles retain identity.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "map<K,V>.values() -> array<var>"
    },
    {
      "owner": "map<K,V>",
      "name": "get",
      "signature": "get(key: K, fallback: var = null) -> V or var",
      "provider": "core",
      "effect": "observe",
      "notes": "Does not insert; returns the stored value or fallback; missing keys default to null. An object, array or map element comes back as a reference to it, like a C++ reference return: binding the result to var, auto or T copies the element, while var&, T& and a member call on the result reach the stored element.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "map<K,V>.get(key: K, fallback: var = null) -> V or var",
      "example": {
        "code": "map<string, int> stock = {\"axe\": 2};\nprint(stock.get(\"axe\"), \" \", stock.get(\"bow\"), \" \", stock.get(\"bow\", 0), \" \", stock.size());",
        "output": "2 null 0 1"
      }
    },
    {
      "owner": "map<K,V>",
      "name": "to_array",
      "signature": "to_array() -> array<array<var>>",
      "provider": "core",
      "effect": "copy",
      "notes": "Ordered [key,value] arrays; not Pair objects. Value results copy, while shared_ptr/weak_ptr handles retain identity.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "map<K,V>.to_array() -> array<array<var>>",
      "example": {
        "code": "map<string, int> stock = {\"axe\": 2};\nprint(to_json(stock.to_array()));",
        "output": "[[\"axe\",2]]"
      }
    },
    {
      "owner": "map<K,V>",
      "name": "filter",
      "signature": "filter(predicate: function(K, V) -> bool) -> map<K,V>",
      "provider": "core",
      "effect": "mutate; callback",
      "notes": "Keeps the entries the predicate accepts in place, retaining key/value constraints, and returns the receiver; map::filter returns a copy. Callback value references target live entries.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "map<K,V>.filter(predicate: function(K, V) -> bool) -> map<K,V>",
      "example": {
        "code": "map<string, int> stock = {\"axe\": 2, \"bow\": 0, \"cup\": 5};\nmap<string, int> big = map::filter(stock, (k, v) => v > 2);   // a copy\nstock.filter((k, v) => v > 0);                                 // in place\nprint(to_json(big), \" \", to_json(stock));",
        "output": "{\"cup\":5} {\"axe\":2,\"cup\":5}"
      }
    },
    {
      "owner": "map",
      "name": "filter",
      "signature": "filter(values: map<K,V>, predicate: function(K, V) -> bool) -> map<K,V>",
      "provider": "core",
      "effect": "copy, callback",
      "notes": "Returns a new map of the entries the predicate accepts, preserving key/value constraints; the input does not mutate. Only selected value elements copy; explicit handles retain identity.",
      "source": "include/jaiscript/detail/array_namespace.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "map::filter(values: map<K,V>, predicate: function(K, V) -> bool) -> map<K,V>"
    },
    {
      "owner": "map<K,V>",
      "name": "remove_if",
      "signature": "remove_if(predicate: function(K, V) -> bool) -> int",
      "provider": "core",
      "effect": "mutate, callback",
      "notes": "Returns removed count; keys remain immutable.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "map<K,V>.remove_if(predicate: function(K, V) -> bool) -> int",
      "example": {
        "code": "map<string, int> stock = {\"axe\": 2, \"bow\": 0, \"cap\": 0};\nprint(stock.remove_if((k, v) => v == 0), \" \", to_json(stock));",
        "output": "2 {\"axe\":2}"
      }
    },
    {
      "owner": "string",
      "name": "size",
      "signature": "size() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "Bytes on string; characters on utf8_string.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.size() -> int"
    },
    {
      "owner": "string",
      "name": "length",
      "signature": "length() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "Alias of size.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.length() -> int"
    },
    {
      "owner": "string",
      "name": "empty",
      "signature": "empty() -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.empty() -> bool"
    },
    {
      "owner": "string",
      "name": "at",
      "signature": "at(index: int) -> char",
      "provider": "core",
      "effect": "observe",
      "notes": "Returns an inline byte char like []; no temporary string allocation. Negative indices count from end; out-of-range raises.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.at(index: int) -> char",
      "example": {
        "code": "string s = \"abc\";\nprint(s.at(1), \" \", s[2], \" \", type_of(s.at(0)));",
        "output": "b c char"
      }
    },
    {
      "owner": "string",
      "name": "front",
      "signature": "front() -> char",
      "provider": "core",
      "effect": "observe",
      "notes": "Returns an inline byte char like []; no temporary string allocation. Empty text raises.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.front() -> char"
    },
    {
      "owner": "string",
      "name": "back",
      "signature": "back() -> char",
      "provider": "core",
      "effect": "observe",
      "notes": "Returns an inline byte char like []; no temporary string allocation. Empty text raises.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.back() -> char"
    },
    {
      "owner": "string",
      "name": "substr",
      "signature": "substr(start: int, count: int = remaining) -> Self",
      "provider": "core",
      "effect": "copy",
      "notes": "Second argument is count, not end index.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.substr(start: int, count: int = remaining) -> Self",
      "example": {
        "code": "print(\"dungeon\".substr(3), \" \", \"dungeon\".substr(0, 3));",
        "output": "geon dun"
      }
    },
    {
      "owner": "string",
      "name": "find",
      "signature": "find(needle: text, start: int = 0) -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "-1 if absent.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.find(needle: text, start: int = 0) -> int",
      "example": {
        "code": "print(\"banana\".find(\"an\"), \" \", \"banana\".find(\"an\", 2), \" \", \"banana\".find(\"x\"));",
        "output": "1 3 -1"
      }
    },
    {
      "owner": "string",
      "name": "rfind",
      "signature": "rfind(needle: text, start: int = end) -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "-1 if absent.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.rfind(needle: text, start: int = end) -> int"
    },
    {
      "owner": "string",
      "name": "find_first_of",
      "signature": "find_first_of(characters: text, start: int = 0) -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "-1 if absent.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.find_first_of(characters: text, start: int = 0) -> int"
    },
    {
      "owner": "string",
      "name": "find_last_of",
      "signature": "find_last_of(characters: text, start: int = end) -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "-1 if absent.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.find_last_of(characters: text, start: int = end) -> int"
    },
    {
      "owner": "string",
      "name": "find_first_not_of",
      "signature": "find_first_not_of(characters: text, start: int = 0) -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "-1 if absent.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.find_first_not_of(characters: text, start: int = 0) -> int"
    },
    {
      "owner": "string",
      "name": "find_last_not_of",
      "signature": "find_last_not_of(characters: text, start: int = end) -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "-1 if absent.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.find_last_not_of(characters: text, start: int = end) -> int"
    },
    {
      "owner": "string",
      "name": "contains",
      "signature": "contains(needle: text) -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.contains(needle: text) -> bool",
      "example": {
        "code": "print(\"hello\".contains(\"ell\"), \" \", \"hello\".count(\"l\"));",
        "output": "true 2"
      }
    },
    {
      "owner": "string",
      "name": "starts_with",
      "signature": "starts_with(prefix: text) -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.starts_with(prefix: text) -> bool",
      "example": {
        "code": "print(\"player_1\".starts_with(\"player\"), \" \", \"a.jai\".ends_with(\".jai\"));",
        "output": "true true"
      }
    },
    {
      "owner": "string",
      "name": "ends_with",
      "signature": "ends_with(suffix: text) -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.ends_with(suffix: text) -> bool"
    },
    {
      "owner": "string",
      "name": "count",
      "signature": "count(needle: text) -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.count(needle: text) -> int"
    },
    {
      "owner": "string",
      "name": "to_int",
      "signature": "to_int(fallback: var = null, base: int = 10) -> int or fallback",
      "provider": "core",
      "effect": "observe",
      "notes": "Whole trimmed parse; base is 0 or 2..36; parse failure returns fallback.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.to_int(fallback: var = null, base: int = 10) -> int or fallback",
      "example": {
        "code": "print(\"42\".to_int(), \" \", \"ff\".to_int(0, 16), \" \", \"x\".to_int(-1), \" \", \"2.5\".to_float());",
        "output": "42 255 -1 2.5"
      }
    },
    {
      "owner": "string",
      "name": "to_float",
      "signature": "to_float(fallback: var = null) -> float or fallback",
      "provider": "core",
      "effect": "observe",
      "notes": "Whole trimmed parse; parse failure returns fallback.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.to_float(fallback: var = null) -> float or fallback"
    },
    {
      "owner": "string",
      "name": "to_lower",
      "signature": "to_lower() -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "ASCII case conversion; returns text for chaining.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.to_lower() -> Self"
    },
    {
      "owner": "string",
      "name": "to_upper",
      "signature": "to_upper() -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "ASCII case conversion; returns text for chaining.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.to_upper() -> Self",
      "example": {
        "code": "string s = \"loud\";\nstring t = s.to_upper();     // changes s and returns it\nprint(s, \" \", t, \" \", string::to_lower(t));",
        "output": "LOUD LOUD loud"
      }
    },
    {
      "owner": "string",
      "name": "trim",
      "signature": "trim(characters: text = string::whitespace) -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "Mutates using the shared whitespace set by default: space, tab, LF, VT, FF and CR. Returns the receiver.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.trim(characters: text = string::whitespace) -> Self",
      "example": {
        "code": "string s = \"  hi  \";\ns.trim();                        // in place\nstring t = \"--x--\";\nt.trim(\"-\");                     // a chosen character set\nprint(\"[\", s, \"] [\", t, \"] [\", string::trim(\"  copy  \"), \"]\");",
        "output": "[hi] [x] [copy]"
      }
    },
    {
      "owner": "string",
      "name": "trim_left",
      "signature": "trim_left(characters: text = string::whitespace) -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "Mutates using the shared whitespace set by default: space, tab, LF, VT, FF and CR. Returns the receiver.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.trim_left(characters: text = string::whitespace) -> Self"
    },
    {
      "owner": "string",
      "name": "trim_right",
      "signature": "trim_right(characters: text = string::whitespace) -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "Mutates using the shared whitespace set by default: space, tab, LF, VT, FF and CR. Returns the receiver.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.trim_right(characters: text = string::whitespace) -> Self"
    },
    {
      "owner": "string",
      "name": "pad_left",
      "signature": "pad_left(width: int, fill: char or text = ' ') -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.pad_left(width: int, fill: char or text = ' ') -> Self",
      "example": {
        "code": "print(\"[\", \"7\".pad_left(3, '0'), \"] [\", \"ab\".pad_right(4), \"]\");",
        "output": "[007] [ab  ]"
      }
    },
    {
      "owner": "string",
      "name": "pad_right",
      "signature": "pad_right(width: int, fill: char or text = ' ') -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.pad_right(width: int, fill: char or text = ' ') -> Self"
    },
    {
      "owner": "string",
      "name": "pad_center",
      "signature": "pad_center(width: int, fill: char or text = ' ') -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.pad_center(width: int, fill: char or text = ' ') -> Self"
    },
    {
      "owner": "string",
      "name": "replace_first",
      "signature": "replace_first(from: text, to: text) -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.replace_first(from: text, to: text) -> Self"
    },
    {
      "owner": "string",
      "name": "replace_last",
      "signature": "replace_last(from: text, to: text) -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.replace_last(from: text, to: text) -> Self"
    },
    {
      "owner": "string",
      "name": "replace",
      "signature": "replace(from: text, to: text) -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "Replaces every occurrence of from, left to right and without overlap.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.replace(from: text, to: text) -> Self",
      "example": {
        "code": "string s = \"a-b-c\";\ns.replace(\"-\", \"+\");\nprint(s);",
        "output": "a+b+c"
      }
    },
    {
      "owner": "string",
      "name": "insert",
      "signature": "insert(position: int, value: text) -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.insert(position: int, value: text) -> Self"
    },
    {
      "owner": "string",
      "name": "erase",
      "signature": "erase(position: int, count: int = remaining) -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.erase(position: int, count: int = remaining) -> Self"
    },
    {
      "owner": "string",
      "name": "remove_prefix",
      "signature": "remove_prefix(count: int) -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.remove_prefix(count: int) -> Self"
    },
    {
      "owner": "string",
      "name": "remove_suffix",
      "signature": "remove_suffix(count: int) -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.remove_suffix(count: int) -> Self"
    },
    {
      "owner": "string",
      "name": "reverse",
      "signature": "reverse() -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.reverse() -> Self"
    },
    {
      "owner": "string",
      "name": "repeat",
      "signature": "repeat(count: int) -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "Repeats receiver and returns text for chaining.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.repeat(count: int) -> Self",
      "example": {
        "code": "print(\"ab\".repeat(3));",
        "output": "ababab"
      }
    },
    {
      "owner": "string",
      "name": "split",
      "signature": "split(separator: text = whitespace, max_splits: int = -1) -> array<string>",
      "provider": "core",
      "effect": "copy",
      "notes": "Whitespace runs by default; empty separator splits characters. Negative limit is unlimited; last piece retains rest. UTF-8 receiver yields UTF-8 text values.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.split(separator: text = whitespace, max_splits: int = -1) -> array<string>",
      "example": {
        "code": "print(to_json(\"a  b\\tc\".split()));\nprint(to_json(\"a,,b\".split(\",\")));\nprint(to_json(\"k=v=w\".split(\"=\", 1)));",
        "output": "[\"a\",\"b\",\"c\"]\n[\"a\",\"\",\"b\"]\n[\"k\",\"v=w\"]"
      }
    },
    {
      "owner": "string",
      "name": "explode",
      "signature": "explode(separator: text = whitespace, max_splits: int = -1) -> array<string>",
      "provider": "core",
      "effect": "copy",
      "notes": "Whitespace runs by default; empty separator splits characters. Negative limit is unlimited; last piece retains rest. UTF-8 receiver yields UTF-8 text values.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.explode(separator: text = whitespace, max_splits: int = -1) -> array<string>"
    },
    {
      "owner": "string",
      "name": "to_utf8",
      "signature": "to_utf8() -> utf8_string",
      "provider": "core",
      "effect": "copy",
      "notes": "Same bytes with character indexing.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.to_utf8() -> utf8_string"
    },
    {
      "owner": "string",
      "name": "byte_size",
      "signature": "byte_size() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "Raw byte count on both text types.",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.byte_size() -> int"
    },
    {
      "owner": "string",
      "name": "utf8_length",
      "signature": "utf8_length() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "Counts decoded UTF-8 characters.",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.utf8_length() -> int"
    },
    {
      "owner": "string",
      "name": "utf8_chars",
      "signature": "utf8_chars() -> array<string>",
      "provider": "core",
      "effect": "copy",
      "notes": "",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.utf8_chars() -> array<string>"
    },
    {
      "owner": "string",
      "name": "lines",
      "signature": "lines() -> array<Self>",
      "provider": "core",
      "effect": "copy",
      "notes": "Splits line endings.",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.lines() -> array<Self>",
      "example": {
        "code": "print(to_json(\"one\\ntwo\".lines()));",
        "output": "[\"one\",\"two\"]"
      }
    },
    {
      "owner": "string",
      "name": "partition",
      "signature": "partition(separator: text) -> array<Self>",
      "provider": "core",
      "effect": "copy",
      "notes": "Three parts: before, separator, after; absent separator gives text and two empty strings.",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.partition(separator: text) -> array<Self>",
      "example": {
        "code": "print(to_json(\"key=value=more\".partition(\"=\")));",
        "output": "[\"key\",\"=\",\"value=more\"]"
      }
    },
    {
      "owner": "string",
      "name": "compare",
      "signature": "compare(other: text) -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "Negative, zero or positive lexical comparison.",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.compare(other: text) -> int"
    },
    {
      "owner": "string",
      "name": "code",
      "signature": "code() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "Requires exactly one valid UTF-8 character; otherwise raises.",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.code() -> int"
    },
    {
      "owner": "string",
      "name": "is_valid_utf8",
      "signature": "is_valid_utf8() -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.is_valid_utf8() -> bool"
    },
    {
      "owner": "string",
      "name": "is_digit",
      "signature": "is_digit() -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.is_digit() -> bool"
    },
    {
      "owner": "string",
      "name": "is_alpha",
      "signature": "is_alpha() -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.is_alpha() -> bool"
    },
    {
      "owner": "string",
      "name": "is_alnum",
      "signature": "is_alnum() -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.is_alnum() -> bool"
    },
    {
      "owner": "string",
      "name": "is_space",
      "signature": "is_space() -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.is_space() -> bool"
    },
    {
      "owner": "string",
      "name": "is_upper",
      "signature": "is_upper() -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.is_upper() -> bool"
    },
    {
      "owner": "string",
      "name": "is_lower",
      "signature": "is_lower() -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.is_lower() -> bool"
    },
    {
      "owner": "string",
      "name": "to_bytes",
      "signature": "to_bytes(offset: int = 0, count: int = remaining) -> array<uint8>",
      "provider": "core",
      "effect": "copy",
      "notes": "Offsets/counts are raw bytes even for utf8_string.",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.to_bytes(offset: int = 0, count: int = remaining) -> array<uint8>",
      "example": {
        "code": "print(to_json(\"AB\".to_bytes()), \" \", string::from_bytes([72, 105]));",
        "output": "[65,66] Hi"
      }
    },
    {
      "owner": "string",
      "name": "reader",
      "signature": "reader() -> binary::reader",
      "provider": "core",
      "effect": "copy",
      "notes": "Creates an independent reader cursor over these bytes.",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.reader() -> binary::reader"
    },
    {
      "owner": "utf8_string",
      "name": "size",
      "signature": "size() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "Bytes on string; characters on utf8_string.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.size() -> int"
    },
    {
      "owner": "utf8_string",
      "name": "length",
      "signature": "length() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "Alias of size.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.length() -> int"
    },
    {
      "owner": "utf8_string",
      "name": "empty",
      "signature": "empty() -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.empty() -> bool"
    },
    {
      "owner": "utf8_string",
      "name": "at",
      "signature": "at(index: int) -> Self",
      "provider": "core",
      "effect": "observe",
      "notes": "One byte of string text or one UTF-8 character; operator [] on string returns char instead.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.at(index: int) -> Self"
    },
    {
      "owner": "utf8_string",
      "name": "front",
      "signature": "front() -> Self",
      "provider": "core",
      "effect": "observe",
      "notes": "One byte of string text or one UTF-8 character; operator [] on string returns char instead.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.front() -> Self"
    },
    {
      "owner": "utf8_string",
      "name": "back",
      "signature": "back() -> Self",
      "provider": "core",
      "effect": "observe",
      "notes": "One byte of string text or one UTF-8 character; operator [] on string returns char instead.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.back() -> Self"
    },
    {
      "owner": "utf8_string",
      "name": "substr",
      "signature": "substr(start: int, count: int = remaining) -> Self",
      "provider": "core",
      "effect": "copy",
      "notes": "Second argument is count, not end index.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.substr(start: int, count: int = remaining) -> Self"
    },
    {
      "owner": "utf8_string",
      "name": "find",
      "signature": "find(needle: text, start: int = 0) -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "-1 if absent.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.find(needle: text, start: int = 0) -> int"
    },
    {
      "owner": "utf8_string",
      "name": "rfind",
      "signature": "rfind(needle: text, start: int = end) -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "-1 if absent.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.rfind(needle: text, start: int = end) -> int"
    },
    {
      "owner": "utf8_string",
      "name": "find_first_of",
      "signature": "find_first_of(characters: text, start: int = 0) -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "-1 if absent.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.find_first_of(characters: text, start: int = 0) -> int"
    },
    {
      "owner": "utf8_string",
      "name": "find_last_of",
      "signature": "find_last_of(characters: text, start: int = end) -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "-1 if absent.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.find_last_of(characters: text, start: int = end) -> int"
    },
    {
      "owner": "utf8_string",
      "name": "find_first_not_of",
      "signature": "find_first_not_of(characters: text, start: int = 0) -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "-1 if absent.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.find_first_not_of(characters: text, start: int = 0) -> int"
    },
    {
      "owner": "utf8_string",
      "name": "find_last_not_of",
      "signature": "find_last_not_of(characters: text, start: int = end) -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "-1 if absent.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.find_last_not_of(characters: text, start: int = end) -> int"
    },
    {
      "owner": "utf8_string",
      "name": "contains",
      "signature": "contains(needle: text) -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.contains(needle: text) -> bool"
    },
    {
      "owner": "utf8_string",
      "name": "starts_with",
      "signature": "starts_with(prefix: text) -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.starts_with(prefix: text) -> bool"
    },
    {
      "owner": "utf8_string",
      "name": "ends_with",
      "signature": "ends_with(suffix: text) -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.ends_with(suffix: text) -> bool"
    },
    {
      "owner": "utf8_string",
      "name": "count",
      "signature": "count(needle: text) -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.count(needle: text) -> int"
    },
    {
      "owner": "utf8_string",
      "name": "to_int",
      "signature": "to_int(fallback: var = null, base: int = 10) -> int or fallback",
      "provider": "core",
      "effect": "observe",
      "notes": "Whole trimmed parse; base is 0 or 2..36; parse failure returns fallback.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.to_int(fallback: var = null, base: int = 10) -> int or fallback"
    },
    {
      "owner": "utf8_string",
      "name": "to_float",
      "signature": "to_float(fallback: var = null) -> float or fallback",
      "provider": "core",
      "effect": "observe",
      "notes": "Whole trimmed parse; parse failure returns fallback.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.to_float(fallback: var = null) -> float or fallback"
    },
    {
      "owner": "utf8_string",
      "name": "to_lower",
      "signature": "to_lower() -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "ASCII case conversion; returns text for chaining.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.to_lower() -> Self"
    },
    {
      "owner": "utf8_string",
      "name": "to_upper",
      "signature": "to_upper() -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "ASCII case conversion; returns text for chaining.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.to_upper() -> Self"
    },
    {
      "owner": "utf8_string",
      "name": "trim",
      "signature": "trim(characters: text = string::whitespace) -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "Mutates using the shared whitespace set by default: space, tab, LF, VT, FF and CR. Returns the receiver.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.trim(characters: text = string::whitespace) -> Self"
    },
    {
      "owner": "utf8_string",
      "name": "trim_left",
      "signature": "trim_left(characters: text = string::whitespace) -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "Mutates using the shared whitespace set by default: space, tab, LF, VT, FF and CR. Returns the receiver.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.trim_left(characters: text = string::whitespace) -> Self"
    },
    {
      "owner": "utf8_string",
      "name": "trim_right",
      "signature": "trim_right(characters: text = string::whitespace) -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "Mutates using the shared whitespace set by default: space, tab, LF, VT, FF and CR. Returns the receiver.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.trim_right(characters: text = string::whitespace) -> Self"
    },
    {
      "owner": "utf8_string",
      "name": "pad_left",
      "signature": "pad_left(width: int, fill: char or text = ' ') -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.pad_left(width: int, fill: char or text = ' ') -> Self"
    },
    {
      "owner": "utf8_string",
      "name": "pad_right",
      "signature": "pad_right(width: int, fill: char or text = ' ') -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.pad_right(width: int, fill: char or text = ' ') -> Self"
    },
    {
      "owner": "utf8_string",
      "name": "pad_center",
      "signature": "pad_center(width: int, fill: char or text = ' ') -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.pad_center(width: int, fill: char or text = ' ') -> Self"
    },
    {
      "owner": "utf8_string",
      "name": "replace_first",
      "signature": "replace_first(from: text, to: text) -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.replace_first(from: text, to: text) -> Self"
    },
    {
      "owner": "utf8_string",
      "name": "replace_last",
      "signature": "replace_last(from: text, to: text) -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.replace_last(from: text, to: text) -> Self"
    },
    {
      "owner": "utf8_string",
      "name": "replace",
      "signature": "replace(from: text, to: text) -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "Replaces every occurrence of from, left to right and without overlap.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.replace(from: text, to: text) -> Self"
    },
    {
      "owner": "utf8_string",
      "name": "insert",
      "signature": "insert(position: int, value: text) -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.insert(position: int, value: text) -> Self"
    },
    {
      "owner": "utf8_string",
      "name": "erase",
      "signature": "erase(position: int, count: int = remaining) -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.erase(position: int, count: int = remaining) -> Self"
    },
    {
      "owner": "utf8_string",
      "name": "remove_prefix",
      "signature": "remove_prefix(count: int) -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.remove_prefix(count: int) -> Self"
    },
    {
      "owner": "utf8_string",
      "name": "remove_suffix",
      "signature": "remove_suffix(count: int) -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.remove_suffix(count: int) -> Self"
    },
    {
      "owner": "utf8_string",
      "name": "reverse",
      "signature": "reverse() -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.reverse() -> Self"
    },
    {
      "owner": "utf8_string",
      "name": "repeat",
      "signature": "repeat(count: int) -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "Repeats receiver and returns text for chaining.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.repeat(count: int) -> Self"
    },
    {
      "owner": "utf8_string",
      "name": "split",
      "signature": "split(separator: text = whitespace, max_splits: int = -1) -> array<var>",
      "provider": "core",
      "effect": "copy",
      "notes": "Whitespace runs by default; empty separator splits characters. Negative limit is unlimited; last piece retains rest. UTF-8 receiver yields UTF-8 text values.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.split(separator: text = whitespace, max_splits: int = -1) -> array<var>"
    },
    {
      "owner": "utf8_string",
      "name": "explode",
      "signature": "explode(separator: text = whitespace, max_splits: int = -1) -> array<var>",
      "provider": "core",
      "effect": "copy",
      "notes": "Whitespace runs by default; empty separator splits characters. Negative limit is unlimited; last piece retains rest. UTF-8 receiver yields UTF-8 text values.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.explode(separator: text = whitespace, max_splits: int = -1) -> array<var>"
    },
    {
      "owner": "utf8_string",
      "name": "byte_size",
      "signature": "byte_size() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "Raw byte count on both text types.",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.byte_size() -> int"
    },
    {
      "owner": "utf8_string",
      "name": "utf8_length",
      "signature": "utf8_length() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "Counts decoded UTF-8 characters.",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.utf8_length() -> int"
    },
    {
      "owner": "utf8_string",
      "name": "utf8_chars",
      "signature": "utf8_chars() -> array<var>",
      "provider": "core",
      "effect": "copy",
      "notes": " Returned text values are utf8_string; array storage remains dynamic.",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.utf8_chars() -> array<var>"
    },
    {
      "owner": "utf8_string",
      "name": "lines",
      "signature": "lines() -> array<var>",
      "provider": "core",
      "effect": "copy",
      "notes": "Splits line endings. Returned text values are utf8_string; array storage remains dynamic.",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.lines() -> array<var>"
    },
    {
      "owner": "utf8_string",
      "name": "partition",
      "signature": "partition(separator: text) -> array<var>",
      "provider": "core",
      "effect": "copy",
      "notes": "Three parts: before, separator, after; absent separator gives text and two empty strings. Returned text values are utf8_string; array storage remains dynamic.",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.partition(separator: text) -> array<var>"
    },
    {
      "owner": "utf8_string",
      "name": "compare",
      "signature": "compare(other: text) -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "Negative, zero or positive lexical comparison.",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.compare(other: text) -> int"
    },
    {
      "owner": "utf8_string",
      "name": "code",
      "signature": "code() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "Requires exactly one valid UTF-8 character; otherwise raises.",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.code() -> int"
    },
    {
      "owner": "utf8_string",
      "name": "is_valid_utf8",
      "signature": "is_valid_utf8() -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.is_valid_utf8() -> bool"
    },
    {
      "owner": "utf8_string",
      "name": "is_digit",
      "signature": "is_digit() -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.is_digit() -> bool"
    },
    {
      "owner": "utf8_string",
      "name": "is_alpha",
      "signature": "is_alpha() -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.is_alpha() -> bool"
    },
    {
      "owner": "utf8_string",
      "name": "is_alnum",
      "signature": "is_alnum() -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.is_alnum() -> bool"
    },
    {
      "owner": "utf8_string",
      "name": "is_space",
      "signature": "is_space() -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.is_space() -> bool"
    },
    {
      "owner": "utf8_string",
      "name": "is_upper",
      "signature": "is_upper() -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.is_upper() -> bool"
    },
    {
      "owner": "utf8_string",
      "name": "is_lower",
      "signature": "is_lower() -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/string_methods_more.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.is_lower() -> bool"
    },
    {
      "owner": "utf8_string",
      "name": "to_bytes",
      "signature": "to_bytes(offset: int = 0, count: int = remaining) -> array<uint8>",
      "provider": "core",
      "effect": "copy",
      "notes": "Offsets/counts are raw bytes even for utf8_string.",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.to_bytes(offset: int = 0, count: int = remaining) -> array<uint8>"
    },
    {
      "owner": "utf8_string",
      "name": "reader",
      "signature": "reader() -> binary::reader",
      "provider": "core",
      "effect": "copy",
      "notes": "Creates an independent reader cursor over these bytes.",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.reader() -> binary::reader"
    },
    {
      "owner": "shared_ptr<T>",
      "name": "reset",
      "signature": "reset() -> void",
      "provider": "core",
      "effect": "mutate",
      "notes": "Empties the handle its receiver names (a variable, field, element or map entry), as C++ p.reset() does; the object stays with its other owners, and a call result is a temporary it leaves alone.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "shared_ptr<T>.reset() -> void"
    },
    {
      "owner": "shared_ptr<T>",
      "name": "reset",
      "signature": "reset(shared_ptr<T> h) -> void",
      "provider": "core",
      "effect": "mutate",
      "notes": "Points the handle its receiver names at h's object, as C++ p.reset(new T()) does: the object it held stays with its other owners, nothing writes through it and no operator= runs. h is a handle (new T(), make_shared<T>() or a shared_ptr; a null one empties the receiver) of a class the receiver admits as a shared_ptr<T> assignment does; a value or a primitive raises.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "shared_ptr<T>.reset(shared_ptr<T> h) -> void"
    },
    {
      "owner": "shared_ptr<T>",
      "name": "use_count",
      "signature": "use_count() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "shared_ptr<T>.use_count() -> int"
    },
    {
      "owner": "shared_ptr<T>",
      "name": "cpp_ref_count",
      "signature": "cpp_ref_count() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "shared_ptr<T>.cpp_ref_count() -> int"
    },
    {
      "owner": "shared_ptr<T>",
      "name": "unique",
      "signature": "unique() -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "shared_ptr<T>.unique() -> bool"
    },
    {
      "owner": "shared_ptr<T>",
      "name": "same_as",
      "signature": "same_as(other: var) -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "True when both handles share one object. same_object(x, y) asks the same question of any two values.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "shared_ptr<T>.same_as(other: var) -> bool"
    },
    {
      "owner": "weak_ptr<T>",
      "name": "lock",
      "signature": "lock() -> shared_ptr<T> or null",
      "provider": "core",
      "effect": "observe",
      "notes": "Pins a surviving target.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "weak_ptr<T>.lock() -> shared_ptr<T> or null"
    },
    {
      "owner": "weak_ptr<T>",
      "name": "expired",
      "signature": "expired() -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "weak_ptr<T>.expired() -> bool"
    },
    {
      "owner": "weak_ptr<T>",
      "name": "reset",
      "signature": "reset() -> void",
      "provider": "core",
      "effect": "mutate",
      "notes": "Empties the weak handle its receiver names, as C++ w.reset() does; the object is untouched.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "weak_ptr<T>.reset() -> void"
    },
    {
      "owner": "weak_ptr<T>",
      "name": "same_as",
      "signature": "same_as(other: var) -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "weak_ptr<T>.same_as(other: var) -> bool"
    },
    {
      "owner": "coroutine",
      "name": "next",
      "signature": "next(count: int = 1) -> var",
      "provider": "core",
      "effect": "advance, callback",
      "notes": "Runs to the next yield and returns its value; next(count) advances count yields and returns the last one's value. The call that finishes the body returns the return value; a step on a completed coroutine raises Cannot resume a completed coroutine. count is an int of at least 1. Nothing in the body runs before the first next().",
      "source": "source/implementation/coroutine.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "coroutine.next(count: int = 1) -> var"
    },
    {
      "owner": "coroutine",
      "name": "advance",
      "signature": "advance(v: var&) -> bool",
      "provider": "core",
      "effect": "advance, callback",
      "notes": "Resumes once: true when the body yielded, with the yielded value stored into v (converted to v's declared type); false when the body ran to its end, or had already ended, leaving v as it was; the return value is then result(). v binds as a T& parameter does: a temporary raises Cannot pass non-lvalue to reference parameter before anything runs.",
      "source": "source/implementation/coroutine.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "coroutine.advance(v: var&) -> bool"
    },
    {
      "owner": "coroutine",
      "name": "result",
      "signature": "result() -> var",
      "provider": "core",
      "effect": "observe",
      "notes": "A copy of the value the body returned, once done() is true, however the body was driven (advance, next() or range-for); null for a body that returns nothing or failed. Before then it raises Coroutine has not finished: result() is available once done() is true. The checker types it as the coroutine's declared type.",
      "source": "source/implementation/coroutine.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "coroutine.result() -> var"
    },
    {
      "owner": "coroutine",
      "name": "done",
      "signature": "done() -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "Whether the body finished (returned or failed); it never starts or advances the coroutine.",
      "source": "source/implementation/coroutine.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "coroutine.done() -> bool"
    },
    {
      "owner": "global",
      "name": "print",
      "signature": "print(values: var...) -> void",
      "provider": "core",
      "effect": "output",
      "notes": "Core concatenates display texts; stdlib replacement supports formatting and print tokens.",
      "source": "source/implementation/engine.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "print(values: var...) -> void"
    },
    {
      "owner": "global",
      "name": "format_value",
      "signature": "format_value(value: var, specification: string) -> string",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/engine.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "format_value(value: var, specification: string) -> string"
    },
    {
      "owner": "global",
      "name": "same_object",
      "signature": "same_object(left: var, right: var) -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "Object/storage identity, not memberwise equality.",
      "source": "source/implementation/engine.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "same_object(left: var, right: var) -> bool",
      "example": {
        "code": "array<int> a = [1];\narray<int> b = a;\nauto& r = a;\nprint(same_object(a, b), \" \", same_object(a, r), \" \", a == b);",
        "output": "false true true"
      }
    },
    {
      "owner": "global",
      "name": "extend",
      "signature": "extend(object: var, class: class) -> var",
      "provider": "core",
      "effect": "mutate",
      "notes": "Attaches/re-derives script behavior to a native or script object.",
      "source": "source/implementation/engine.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "extend(object: var, class: class) -> var"
    },
    {
      "owner": "global",
      "name": "thread_count",
      "signature": "thread_count() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "The threads a parallel region runs on: the count the host set, else the performance cores, at most one fewer than the hardware threads.",
      "source": "source/implementation/engine.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "thread_count() -> int"
    },
    {
      "owner": "global",
      "name": "sleep",
      "signature": "sleep(seconds: number) -> void",
      "provider": "core",
      "effect": "wait",
      "notes": "Waits seconds on the engine's time source: inside a run engine::start began, the run suspends and returns to the host until then; elsewhere it blocks.",
      "source": "source/implementation/script_run.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "sleep(seconds: number) -> void"
    },
    {
      "owner": "global",
      "name": "parallel_transform",
      "signature": "parallel_transform(values: array<T>, callback: function(T) -> R, weight: function(T) -> number = default) -> array<R>",
      "provider": "core",
      "effect": "callback, parallel",
      "notes": "Admission and ordered results follow the parallel contract.",
      "source": "source/implementation/engine.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "parallel_transform(values: array<T>, callback: function(T) -> R, weight: function(T) -> number = default) -> array<R>"
    },
    {
      "owner": "global",
      "name": "parallel_reduce",
      "signature": "parallel_reduce(values: array<T>, init: A, step: function(A, T) -> A, combine: function(A, A) -> A) -> A",
      "provider": "core",
      "effect": "callback, parallel",
      "notes": "Chunks sized by values.size() alone fold in element order from a copy of init each, then combine left to right in chunk order: the same result on every machine.",
      "source": "source/implementation/engine.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "parallel_reduce(values: array<T>, init: A, step: function(A, T) -> A, combine: function(A, A) -> A) -> A"
    },
    {
      "owner": "global",
      "name": "shared_from_this",
      "signature": "shared_from_this() -> shared_ptr<T>",
      "provider": "core",
      "effect": "observe",
      "notes": "Method context only.",
      "source": "source/implementation/engine.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "shared_from_this() -> shared_ptr<T>"
    },
    {
      "owner": "global",
      "name": "weak_from_this",
      "signature": "weak_from_this() -> weak_ptr<T>",
      "provider": "core",
      "effect": "observe",
      "notes": "Method context only.",
      "source": "source/implementation/engine.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "weak_from_this() -> weak_ptr<T>"
    },
    {
      "owner": "language",
      "name": "cast<T>",
      "signature": "cast<T>(value: var) -> T",
      "provider": "core",
      "effect": "convert",
      "notes": "Explicit conversion; cast<T&> binds compatible storage; handle casts check class compatibility.",
      "source": "source/implementation/parser.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "cast<T>(value: var) -> T"
    },
    {
      "owner": "language",
      "name": "include",
      "signature": "include(path: string) -> var",
      "provider": "core",
      "effect": "execute",
      "notes": "Executes included source every reach; literal function-body include is textual.",
      "source": "source/implementation/parser.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "include(path: string) -> var"
    },
    {
      "owner": "language",
      "name": "import",
      "signature": "import(paths: string or array<string>..., force: jai::force = omitted) -> bool",
      "provider": "core",
      "effect": "execute",
      "notes": "True when a module group ran on this reach; import statement has the same loading effect.",
      "source": "source/implementation/parser.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "import(paths: string or array<string>..., force: jai::force = omitted) -> bool"
    },
    {
      "owner": "global",
      "name": "root_script_path",
      "signature": "root_script_path() -> string",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/engine.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "root_script_path() -> string"
    },
    {
      "owner": "global",
      "name": "root_script_dir",
      "signature": "root_script_dir() -> string",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/engine.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "root_script_dir() -> string"
    },
    {
      "owner": "global",
      "name": "current_script_path",
      "signature": "current_script_path() -> string",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/engine.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "current_script_path() -> string"
    },
    {
      "owner": "global",
      "name": "current_script_dir",
      "signature": "current_script_dir() -> string",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/engine.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "current_script_dir() -> string"
    },
    {
      "owner": "global",
      "name": "executable_path",
      "signature": "executable_path() -> string",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/engine.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "executable_path() -> string"
    },
    {
      "owner": "global",
      "name": "executable_dir",
      "signature": "executable_dir() -> string",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/engine.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "executable_dir() -> string"
    },
    {
      "owner": "global",
      "name": "bin_dir",
      "signature": "bin_dir() -> string",
      "provider": "core",
      "effect": "observe",
      "notes": "Alias of executable_dir.",
      "source": "source/implementation/engine.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "bin_dir() -> string"
    },
    {
      "owner": "global",
      "name": "working_dir",
      "signature": "working_dir() -> string",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/engine.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "working_dir() -> string"
    },
    {
      "owner": "global",
      "name": "parent_dir",
      "signature": "parent_dir(path: string) -> string",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/engine.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "parent_dir(path: string) -> string"
    },
    {
      "owner": "global",
      "name": "file_name",
      "signature": "file_name(path: string) -> string",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "source/implementation/engine.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "file_name(path: string) -> string",
      "example": {
        "code": "print(file_name(\"assets/maps/e1m1.jai\"));",
        "output": "e1m1.jai"
      }
    },
    {
      "owner": "global",
      "name": "resolve_path",
      "signature": "resolve_path(path: string) -> string",
      "provider": "core",
      "effect": "filesystem",
      "notes": "Uses import's search ladder.",
      "source": "source/implementation/engine.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "resolve_path(path: string) -> string"
    },
    {
      "owner": "global",
      "name": "app_data_dir",
      "signature": "app_data_dir(application: string) -> string",
      "provider": "core",
      "effect": "filesystem",
      "notes": "Creates application data folder.",
      "source": "source/implementation/engine.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "app_data_dir(application: string) -> string"
    },
    {
      "owner": "global",
      "name": "app_cache_dir",
      "signature": "app_cache_dir(application: string) -> string",
      "provider": "core",
      "effect": "filesystem",
      "notes": "Creates application cache folder.",
      "source": "source/implementation/engine.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "app_cache_dir(application: string) -> string"
    },
    {
      "owner": "global",
      "name": "import_recheck_interval",
      "signature": "import_recheck_interval() -> float",
      "provider": "core",
      "effect": "configure",
      "notes": "Queries import polling window in seconds.",
      "source": "source/implementation/engine.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "import_recheck_interval() -> float"
    },
    {
      "owner": "global",
      "name": "print",
      "signature": "print(format_or_values: var...) -> void",
      "provider": "stdlib",
      "effect": "output, callback",
      "notes": "Format string placeholders when applicable; each value prints its display text (containers their contents, instances their to_string methods or fields); skip_newline/skip_flush are control tokens.",
      "source": "include/jaiscript/stdlib/io.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "print(format_or_values: var...) -> void"
    },
    {
      "owner": "global",
      "name": "format",
      "signature": "format(template: string, values: var...) -> string",
      "provider": "stdlib",
      "effect": "callback",
      "notes": "Creates formatted text.",
      "source": "include/jaiscript/stdlib/io.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "format(template: string, values: var...) -> string",
      "example": {
        "code": "print(format(\"{} has {} hp\", \"orc\", 7));",
        "output": "orc has 7 hp"
      }
    },
    {
      "owner": "global",
      "name": "to_string",
      "signature": "to_string(value: var) -> string",
      "provider": "stdlib",
      "effect": "callback",
      "notes": "The display text print shows: a container's contents, an instance's to_string(), else its class name and fields.",
      "source": "include/jaiscript/stdlib/io.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "to_string(value: var) -> string",
      "example": {
        "code": "print(to_string(3) + \"!\", \" \", to_string(2.5), \" \", to_string([1, \"two\"]));",
        "output": "3! 2.5 [1, \"two\"]"
      }
    },
    {
      "owner": "global",
      "name": "type_of",
      "signature": "type_of(value: var) -> string",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/stdlib/io.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "type_of(value: var) -> string",
      "example": {
        "code": "print(type_of(1), \" \", type_of(1.5), \" \", type_of(\"s\"), \" \", type_of([1]));",
        "output": "int float string array"
      }
    },
    {
      "owner": "global",
      "name": "is_registered_type",
      "signature": "is_registered_type(value: var) -> bool",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/stdlib/io.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "is_registered_type(value: var) -> bool"
    },
    {
      "owner": "global",
      "name": "to_char",
      "signature": "to_char(code: int) -> char",
      "provider": "stdlib",
      "effect": "convert",
      "notes": "Byte code conversion.",
      "source": "include/jaiscript/stdlib/io.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "to_char(code: int) -> char",
      "example": {
        "code": "print(to_char(65), \" \", type_of(to_char(65)));",
        "output": "A char"
      }
    },
    {
      "owner": "global",
      "name": "utf8_string",
      "signature": "utf8_string(value: var) -> utf8_string",
      "provider": "stdlib",
      "effect": "convert",
      "notes": "",
      "source": "include/jaiscript/stdlib/io.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "utf8_string(value: var) -> utf8_string"
    },
    {
      "owner": "global",
      "name": "to_json",
      "signature": "to_json(value: var, indent: int = -1) -> string",
      "provider": "stdlib",
      "effect": "serialize",
      "notes": "",
      "source": "include/jaiscript/stdlib/json.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "to_json(value: var, indent: int = -1) -> string",
      "example": {
        "code": "print(to_json({\"hp\": 3, \"tags\": [\"a\"]}));\nprint(to_json([1, 2], 2));",
        "output": "{\"hp\":3,\"tags\":[\"a\"]}\n[\n  1,\n  2\n]"
      }
    },
    {
      "owner": "global",
      "name": "from_json",
      "signature": "from_json(text: string) -> var",
      "provider": "stdlib",
      "effect": "deserialize",
      "notes": "Reconstructs registered classes when tagged; otherwise values/maps/arrays.",
      "source": "include/jaiscript/stdlib/json.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "from_json(text: string) -> var",
      "example": {
        "code": "var v = from_json(\"{\\\"hp\\\": 3, \\\"tags\\\": [\\\"a\\\"]}\");\nprint(v[\"hp\"], \" \", v[\"tags\"][0]);",
        "output": "3 a"
      }
    },
    {
      "owner": "global",
      "name": "to_binary",
      "signature": "to_binary(value: var) -> string",
      "provider": "stdlib",
      "effect": "serialize",
      "notes": "Binary archive bytes, not a human-readable format.",
      "source": "include/jaiscript/stdlib/json.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "to_binary(value: var) -> string"
    },
    {
      "owner": "global",
      "name": "from_binary",
      "signature": "from_binary(bytes: string) -> var",
      "provider": "stdlib",
      "effect": "deserialize",
      "notes": "",
      "source": "include/jaiscript/stdlib/json.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "from_binary(bytes: string) -> var"
    },
    {
      "owner": "global",
      "name": "to_base64",
      "signature": "to_base64(value: var) -> string",
      "provider": "stdlib",
      "effect": "serialize",
      "notes": "Binary archive encoded as Base64.",
      "source": "include/jaiscript/stdlib/json.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "to_base64(value: var) -> string"
    },
    {
      "owner": "global",
      "name": "from_base64",
      "signature": "from_base64(text: string) -> var",
      "provider": "stdlib",
      "effect": "deserialize",
      "notes": "",
      "source": "include/jaiscript/stdlib/json.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "from_base64(text: string) -> var"
    },
    {
      "owner": "global",
      "name": "base64_encode",
      "signature": "base64_encode(bytes: string) -> string",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "Encodes raw bytes, not an archive.",
      "source": "include/jaiscript/stdlib/json.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "base64_encode(bytes: string) -> string"
    },
    {
      "owner": "global",
      "name": "base64_decode",
      "signature": "base64_decode(text: string) -> string",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "",
      "source": "include/jaiscript/stdlib/json.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "base64_decode(text: string) -> string"
    },
    {
      "owner": "global",
      "name": "merge",
      "signature": "merge(first: map<K,V>, second: map) -> map<K,V>",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "Preserves the first input key/value constraints and converts selected second values through normal map-store rules. Second entries replace colliding keys. Only values retained in the result copy; explicit handles retain identity. Inputs do not mutate.",
      "source": "include/jaiscript/stdlib/containers.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "merge(first: map<K,V>, second: map) -> map<K,V>",
      "example": {
        "code": "print(to_json(merge({\"a\": 1, \"b\": 2}, {\"b\": 3})));",
        "output": "{\"a\":1,\"b\":3}"
      }
    },
    {
      "owner": "string",
      "name": "to_lower",
      "signature": "to_lower(value: text) -> same_text_kind",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "Namespace transform leaves input unchanged.",
      "source": "include/jaiscript/stdlib/strings.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "string::to_lower(value: text) -> same_text_kind"
    },
    {
      "owner": "string",
      "name": "to_upper",
      "signature": "to_upper(value: text) -> same_text_kind",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "",
      "source": "include/jaiscript/stdlib/strings.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "string::to_upper(value: text) -> same_text_kind"
    },
    {
      "owner": "string",
      "name": "from_code",
      "signature": "from_code(codepoint: int) -> string",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "UTF-8 encoding of a Unicode scalar value.",
      "source": "include/jaiscript/stdlib/strings.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "string::from_code(codepoint: int) -> string"
    },
    {
      "owner": "string",
      "name": "is_valid_utf8",
      "signature": "is_valid_utf8(value: text) -> bool",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/stdlib/strings.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "string::is_valid_utf8(value: text) -> bool"
    },
    {
      "owner": "string",
      "name": "join",
      "signature": "join(values: array, separator: text = \"\") -> string",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "",
      "source": "include/jaiscript/stdlib/strings.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "string::join(values: array, separator: text = \"\") -> string",
      "example": {
        "code": "print(string::join([\"a\", \"b\", \"c\"], \"/\"));",
        "output": "a/b/c"
      }
    },
    {
      "owner": "string",
      "name": "trim",
      "signature": "trim(value: text) -> same_text_kind",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "Returns a copy without the whitespace class (space, tab, LF, VT, FF, CR) at both ends; a utf8_string argument returns a utf8_string. The method form takes a character set.",
      "source": "include/jaiscript/stdlib/strings.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "string::trim(value: text) -> same_text_kind"
    },
    {
      "owner": "string",
      "name": "replace",
      "signature": "replace(value: text, from: text, to: text) -> same_text_kind",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "Replaces every occurrence of from, left to right and without overlap.",
      "source": "include/jaiscript/stdlib/strings.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "string::replace(value: text, from: text, to: text) -> same_text_kind"
    },
    {
      "owner": "string",
      "name": "repeat",
      "signature": "repeat(value: text, count: int) -> same_text_kind",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "",
      "source": "include/jaiscript/stdlib/strings.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "string::repeat(value: text, count: int) -> same_text_kind"
    },
    {
      "owner": "string",
      "name": "pad_left",
      "signature": "pad_left(value: text, width: int, fill: char or text = ' ') -> same_text_kind",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "",
      "source": "include/jaiscript/stdlib/strings.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "string::pad_left(value: text, width: int, fill: char or text = ' ') -> same_text_kind"
    },
    {
      "owner": "string",
      "name": "pad_right",
      "signature": "pad_right(value: text, width: int, fill: char or text = ' ') -> same_text_kind",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "",
      "source": "include/jaiscript/stdlib/strings.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "string::pad_right(value: text, width: int, fill: char or text = ' ') -> same_text_kind"
    },
    {
      "owner": "global",
      "name": "file_data",
      "signature": "file_data(path: string) -> map<string,var> or null",
      "provider": "core",
      "effect": "filesystem",
      "notes": "Resolved path metadata: path, filename, extension, created, modified and entry flags.",
      "source": "source/implementation/engine.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "file_data(path: string) -> map<string,var> or null"
    },
    {
      "owner": "math",
      "name": "trunc",
      "signature": "trunc(value: number) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "math::trunc(value: number) -> float"
    },
    {
      "owner": "math",
      "name": "cbrt",
      "signature": "cbrt(value: number) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "math::cbrt(value: number) -> float"
    },
    {
      "owner": "math",
      "name": "exp",
      "signature": "exp(value: number) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "math::exp(value: number) -> float"
    },
    {
      "owner": "math",
      "name": "exp2",
      "signature": "exp2(value: number) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "math::exp2(value: number) -> float"
    },
    {
      "owner": "math",
      "name": "log",
      "signature": "log(value: number) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "math::log(value: number) -> float"
    },
    {
      "owner": "math",
      "name": "log2",
      "signature": "log2(value: number) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "math::log2(value: number) -> float"
    },
    {
      "owner": "math",
      "name": "log10",
      "signature": "log10(value: number) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "math::log10(value: number) -> float"
    },
    {
      "owner": "math",
      "name": "asin",
      "signature": "asin(value: number) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "math::asin(value: number) -> float"
    },
    {
      "owner": "math",
      "name": "acos",
      "signature": "acos(value: number) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "math::acos(value: number) -> float"
    },
    {
      "owner": "math",
      "name": "atan",
      "signature": "atan(value: number) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "math::atan(value: number) -> float"
    },
    {
      "owner": "math",
      "name": "sinh",
      "signature": "sinh(value: number) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "math::sinh(value: number) -> float"
    },
    {
      "owner": "math",
      "name": "cosh",
      "signature": "cosh(value: number) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "math::cosh(value: number) -> float"
    },
    {
      "owner": "math",
      "name": "tanh",
      "signature": "tanh(value: number) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "math::tanh(value: number) -> float"
    },
    {
      "owner": "math",
      "name": "degrees",
      "signature": "degrees(value: number) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "Alias of math::radians_to_degrees.",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "math::degrees(value: number) -> float"
    },
    {
      "owner": "math",
      "name": "radians",
      "signature": "radians(value: number) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "Alias of math::degrees_to_radians.",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "math::radians(value: number) -> float"
    },
    {
      "owner": "math",
      "name": "saturate",
      "signature": "saturate(value: number) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "math::saturate(value: number) -> float"
    },
    {
      "owner": "math",
      "name": "sign",
      "signature": "sign(value: number) -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "math::sign(value: number) -> int"
    },
    {
      "owner": "math",
      "name": "fmod",
      "signature": "fmod(value: number, divisor: number) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "math::fmod(value: number, divisor: number) -> float"
    },
    {
      "owner": "math",
      "name": "hypot",
      "signature": "hypot(x: number, y: number) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "math::hypot(x: number, y: number) -> float"
    },
    {
      "owner": "math",
      "name": "wrap",
      "signature": "wrap(minimum: number, maximum: number, value: number) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "The bounds may come in either order.",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "math::wrap(minimum: number, maximum: number, value: number) -> float"
    },
    {
      "owner": "math",
      "name": "is_nan",
      "signature": "is_nan(value: number) -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "math::is_nan(value: number) -> bool"
    },
    {
      "owner": "math",
      "name": "is_inf",
      "signature": "is_inf(value: number) -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "math::is_inf(value: number) -> bool"
    },
    {
      "owner": "math",
      "name": "floor",
      "signature": "floor(value: number or vector) -> float or vector",
      "provider": "core",
      "effect": "observe",
      "notes": "Component-wise for floating vectors; integers accepted.",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::floor(value: number or vector) -> float or vector"
    },
    {
      "owner": "math",
      "name": "ceil",
      "signature": "ceil(value: number or vector) -> float or vector",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::ceil(value: number or vector) -> float or vector"
    },
    {
      "owner": "math",
      "name": "round",
      "signature": "round(value: number or vector) -> float or vector",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::round(value: number or vector) -> float or vector"
    },
    {
      "owner": "math",
      "name": "itrunc",
      "signature": "itrunc(value: number) -> int",
      "provider": "core",
      "effect": "convert",
      "notes": "Truncates toward zero.",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::itrunc(value: number) -> int"
    },
    {
      "owner": "math",
      "name": "ifloor",
      "signature": "ifloor(value: number) -> int",
      "provider": "core",
      "effect": "convert",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::ifloor(value: number) -> int"
    },
    {
      "owner": "math",
      "name": "sqrt",
      "signature": "sqrt(value: number or vector) -> float or vector",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::sqrt(value: number or vector) -> float or vector"
    },
    {
      "owner": "math",
      "name": "pow",
      "signature": "pow(base: number or vector, exponent: number or vector) -> float or vector",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::pow(base: number or vector, exponent: number or vector) -> float or vector"
    },
    {
      "owner": "math",
      "name": "abs",
      "signature": "abs(value: number or vector) -> number or vector",
      "provider": "core",
      "effect": "observe",
      "notes": "Integral arguments retain exact integral results.",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::abs(value: number or vector) -> number or vector"
    },
    {
      "owner": "math",
      "name": "min",
      "signature": "min(left: number or vector, right: number or vector) -> number or vector",
      "provider": "core",
      "effect": "observe",
      "notes": "Scalar selected operand retains its kind; vectors component-wise.",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::min(left: number or vector, right: number or vector) -> number or vector"
    },
    {
      "owner": "math",
      "name": "max",
      "signature": "max(left: number or vector, right: number or vector) -> number or vector",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::max(left: number or vector, right: number or vector) -> number or vector"
    },
    {
      "owner": "math",
      "name": "clamp",
      "signature": "clamp(value: number or vector, minimum: number or vector, maximum: number or vector) -> number or vector",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::clamp(value: number or vector, minimum: number or vector, maximum: number or vector) -> number or vector"
    },
    {
      "owner": "math",
      "name": "sin",
      "signature": "sin(angle: number or vector) -> float or vector",
      "provider": "core",
      "effect": "observe",
      "notes": "Radians.",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::sin(angle: number or vector) -> float or vector"
    },
    {
      "owner": "math",
      "name": "cos",
      "signature": "cos(angle: number or vector) -> float or vector",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::cos(angle: number or vector) -> float or vector"
    },
    {
      "owner": "math",
      "name": "tan",
      "signature": "tan(angle: number or vector) -> float or vector",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::tan(angle: number or vector) -> float or vector"
    },
    {
      "owner": "math",
      "name": "atan2",
      "signature": "atan2(y: number or vector, x: number or vector) -> float or vector",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::atan2(y: number or vector, x: number or vector) -> float or vector"
    },
    {
      "owner": "math",
      "name": "radians_to_degrees",
      "signature": "radians_to_degrees(angle: number or vector) -> float or vector",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::radians_to_degrees(angle: number or vector) -> float or vector"
    },
    {
      "owner": "math",
      "name": "degrees_to_radians",
      "signature": "degrees_to_radians(angle: number or vector) -> float or vector",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::degrees_to_radians(angle: number or vector) -> float or vector"
    },
    {
      "owner": "math",
      "name": "lerp",
      "signature": "lerp(start: number or vector or color, end: same_shape, percent: number) -> same_shape",
      "provider": "core",
      "effect": "observe",
      "notes": "Color interpolation uses OKLab.",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::lerp(start: number or vector or color, end: same_shape, percent: number) -> same_shape"
    },
    {
      "owner": "math",
      "name": "mix",
      "signature": "mix(start: number or vector or color, end: same_shape, percent: number) -> same_shape",
      "provider": "core",
      "effect": "observe",
      "notes": "Alias of lerp.",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::mix(start: number or vector or color, end: same_shape, percent: number) -> same_shape"
    },
    {
      "owner": "math",
      "name": "unmix",
      "signature": "unmix(start: number or vector, end: same_shape, value: same_shape) -> number or vector",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::unmix(start: number or vector, end: same_shape, value: same_shape) -> number or vector"
    },
    {
      "owner": "math",
      "name": "wrap_add",
      "signature": "wrap_add(left: int, right: int) -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "Modulo 2^64 regardless of overflow build policy.",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::wrap_add(left: int, right: int) -> int"
    },
    {
      "owner": "math",
      "name": "wrap_sub",
      "signature": "wrap_sub(left: int, right: int) -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::wrap_sub(left: int, right: int) -> int"
    },
    {
      "owner": "math",
      "name": "wrap_mul",
      "signature": "wrap_mul(left: int, right: int) -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::wrap_mul(left: int, right: int) -> int"
    },
    {
      "owner": "math",
      "name": "length",
      "signature": "length(vector: vector) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::length(vector: vector) -> float"
    },
    {
      "owner": "math",
      "name": "length_squared",
      "signature": "length_squared(vector: vector) -> number",
      "provider": "core",
      "effect": "observe",
      "notes": "Integral vector result remains exact when representable.",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::length_squared(vector: vector) -> number"
    },
    {
      "owner": "math",
      "name": "normalize",
      "signature": "normalize(vector: vector) -> floating_vector",
      "provider": "core",
      "effect": "observe",
      "notes": "Zero vector gives zero vector.",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::normalize(vector: vector) -> floating_vector"
    },
    {
      "owner": "math",
      "name": "dot",
      "signature": "dot(left: vector, right: matching_vector) -> number",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::dot(left: vector, right: matching_vector) -> number"
    },
    {
      "owner": "math",
      "name": "cross",
      "signature": "cross(left: vector2 or vector3, right: matching_vector) -> number or vector3",
      "provider": "core",
      "effect": "observe",
      "notes": "2D determinant or 3D cross product.",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::cross(left: vector2 or vector3, right: matching_vector) -> number or vector3"
    },
    {
      "owner": "math",
      "name": "distance",
      "signature": "distance(left: vector, right: matching_vector) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "Vector form; scalar-coordinate form has four arguments.",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::distance(left: vector, right: matching_vector) -> float"
    },
    {
      "owner": "math",
      "name": "distance_squared",
      "signature": "distance_squared(left: vector, right: matching_vector) -> number",
      "provider": "core",
      "effect": "observe",
      "notes": "Vector form; scalar-coordinate form has four arguments.",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::distance_squared(left: vector, right: matching_vector) -> number"
    },
    {
      "owner": "math",
      "name": "reflect",
      "signature": "reflect(vector: vector, normal: matching_vector) -> floating_vector",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::reflect(vector: vector, normal: matching_vector) -> floating_vector"
    },
    {
      "owner": "math",
      "name": "project",
      "signature": "project(vector: vector, onto: matching_vector) -> floating_vector",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::project(vector: vector, onto: matching_vector) -> floating_vector"
    },
    {
      "owner": "math",
      "name": "angle_between",
      "signature": "angle_between(left: vector, right: matching_vector) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "Radians.",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::angle_between(left: vector, right: matching_vector) -> float"
    },
    {
      "owner": "math",
      "name": "perpendicular",
      "signature": "perpendicular(vector: vector2) -> vector2",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::perpendicular(vector: vector2) -> vector2"
    },
    {
      "owner": "math",
      "name": "rotate",
      "signature": "rotate(vector: vector2, angle: number) -> vector2",
      "provider": "core",
      "effect": "observe",
      "notes": "Radians.",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::rotate(vector: vector2, angle: number) -> vector2"
    },
    {
      "owner": "math",
      "name": "rotate",
      "signature": "rotate(vector: vector3, axis: vector3, angle: number) -> vector3",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::rotate(vector: vector3, axis: vector3, angle: number) -> vector3"
    },
    {
      "owner": "math",
      "name": "mix_rgb",
      "signature": "mix_rgb(start: color, end: color, percent: number) -> color",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::mix_rgb(start: color, end: color, percent: number) -> color"
    },
    {
      "owner": "math",
      "name": "mix_hsv",
      "signature": "mix_hsv(start: color, end: color, percent: number) -> color",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::mix_hsv(start: color, end: color, percent: number) -> color"
    },
    {
      "owner": "math",
      "name": "remap",
      "signature": "remap(value: number or vector, in_start: same_shape, in_end: same_shape, out_start: same_shape, out_end: same_shape) -> number or vector",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::remap(value: number or vector, in_start: same_shape, in_end: same_shape, out_start: same_shape, out_end: same_shape) -> number or vector"
    },
    {
      "owner": "math",
      "name": "mix_in",
      "signature": "mix_in(start: number or vector or color, end: same_shape, value: number or same_shape, strength: number) -> same_shape",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::mix_in(start: number or vector or color, end: same_shape, value: number or same_shape, strength: number) -> same_shape"
    },
    {
      "owner": "math",
      "name": "mix_out",
      "signature": "mix_out(start: number or vector or color, end: same_shape, value: number or same_shape, strength: number) -> same_shape",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::mix_out(start: number or vector or color, end: same_shape, value: number or same_shape, strength: number) -> same_shape"
    },
    {
      "owner": "math",
      "name": "mix_in_out",
      "signature": "mix_in_out(start: number or vector or color, end: same_shape, value: number or same_shape, strength: number) -> same_shape",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::mix_in_out(start: number or vector or color, end: same_shape, value: number or same_shape, strength: number) -> same_shape"
    },
    {
      "owner": "math",
      "name": "mix_out_in",
      "signature": "mix_out_in(start: number or vector or color, end: same_shape, value: number or same_shape, strength: number) -> same_shape",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::mix_out_in(start: number or vector or color, end: same_shape, value: number or same_shape, strength: number) -> same_shape"
    },
    {
      "owner": "math",
      "name": "unmix_in",
      "signature": "unmix_in(start: number or vector or color, end: same_shape, value: number or same_shape, strength: number) -> same_shape",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::unmix_in(start: number or vector or color, end: same_shape, value: number or same_shape, strength: number) -> same_shape"
    },
    {
      "owner": "math",
      "name": "unmix_out",
      "signature": "unmix_out(start: number or vector or color, end: same_shape, value: number or same_shape, strength: number) -> same_shape",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::unmix_out(start: number or vector or color, end: same_shape, value: number or same_shape, strength: number) -> same_shape"
    },
    {
      "owner": "math",
      "name": "unmix_in_out",
      "signature": "unmix_in_out(start: number or vector or color, end: same_shape, value: number or same_shape, strength: number) -> same_shape",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::unmix_in_out(start: number or vector or color, end: same_shape, value: number or same_shape, strength: number) -> same_shape"
    },
    {
      "owner": "math",
      "name": "unmix_out_in",
      "signature": "unmix_out_in(start: number or vector or color, end: same_shape, value: number or same_shape, strength: number) -> same_shape",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::unmix_out_in(start: number or vector or color, end: same_shape, value: number or same_shape, strength: number) -> same_shape"
    },
    {
      "owner": "math",
      "name": "vec2",
      "signature": "vec2() -> math::vec2",
      "provider": "core",
      "effect": "construct",
      "notes": "Zero initialized.",
      "source": "include/jaiscript/detail/math_values.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::vec2() -> math::vec2"
    },
    {
      "owner": "math",
      "name": "vec2",
      "signature": "vec2(value: same_dimension_vector) -> math::vec2",
      "provider": "core",
      "effect": "construct",
      "notes": "Copies/converts matching dimensions; a lone scalar is rejected.",
      "source": "include/jaiscript/detail/math_values.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::vec2(value: same_dimension_vector) -> math::vec2"
    },
    {
      "owner": "math",
      "name": "vec2",
      "signature": "vec2(x: number, y: number) -> math::vec2",
      "provider": "core",
      "effect": "construct",
      "notes": "",
      "source": "include/jaiscript/detail/math_values.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::vec2(x: number, y: number) -> math::vec2"
    },
    {
      "owner": "math::vec2",
      "name": "length",
      "signature": "length() -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::vec2.length() -> float"
    },
    {
      "owner": "math::vec2",
      "name": "length_squared",
      "signature": "length_squared() -> number",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::vec2.length_squared() -> number"
    },
    {
      "owner": "math::vec2",
      "name": "normalized",
      "signature": "normalized() -> floating_vector",
      "provider": "core",
      "effect": "copy",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::vec2.normalized() -> floating_vector"
    },
    {
      "owner": "math::vec2",
      "name": "dot",
      "signature": "dot(other: matching_vector) -> number",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::vec2.dot(other: matching_vector) -> number"
    },
    {
      "owner": "math::vec2",
      "name": "distance_to",
      "signature": "distance_to(other: matching_vector) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::vec2.distance_to(other: matching_vector) -> float"
    },
    {
      "owner": "math::vec2",
      "name": "cross",
      "signature": "cross(other: matching_vector) -> number or vector3",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::vec2.cross(other: matching_vector) -> number or vector3"
    },
    {
      "owner": "math::vec2",
      "name": "rotated",
      "signature": "rotated(angle: number) -> vector2",
      "provider": "core",
      "effect": "copy",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::vec2.rotated(angle: number) -> vector2"
    },
    {
      "owner": "math",
      "name": "vec3",
      "signature": "vec3() -> math::vec3",
      "provider": "core",
      "effect": "construct",
      "notes": "Zero initialized.",
      "source": "include/jaiscript/detail/math_values.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::vec3() -> math::vec3"
    },
    {
      "owner": "math",
      "name": "vec3",
      "signature": "vec3(value: same_dimension_vector) -> math::vec3",
      "provider": "core",
      "effect": "construct",
      "notes": "Copies/converts matching dimensions; a lone scalar is rejected.",
      "source": "include/jaiscript/detail/math_values.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::vec3(value: same_dimension_vector) -> math::vec3"
    },
    {
      "owner": "math",
      "name": "vec3",
      "signature": "vec3(x: number, y: number, z: number = 0) -> math::vec3",
      "provider": "core",
      "effect": "construct",
      "notes": "",
      "source": "include/jaiscript/detail/math_values.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::vec3(x: number, y: number, z: number = 0) -> math::vec3"
    },
    {
      "owner": "math::vec3",
      "name": "length",
      "signature": "length() -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::vec3.length() -> float"
    },
    {
      "owner": "math::vec3",
      "name": "length_squared",
      "signature": "length_squared() -> number",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::vec3.length_squared() -> number"
    },
    {
      "owner": "math::vec3",
      "name": "normalized",
      "signature": "normalized() -> floating_vector",
      "provider": "core",
      "effect": "copy",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::vec3.normalized() -> floating_vector"
    },
    {
      "owner": "math::vec3",
      "name": "dot",
      "signature": "dot(other: matching_vector) -> number",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::vec3.dot(other: matching_vector) -> number"
    },
    {
      "owner": "math::vec3",
      "name": "distance_to",
      "signature": "distance_to(other: matching_vector) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::vec3.distance_to(other: matching_vector) -> float"
    },
    {
      "owner": "math::vec3",
      "name": "cross",
      "signature": "cross(other: matching_vector) -> number or vector3",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::vec3.cross(other: matching_vector) -> number or vector3"
    },
    {
      "owner": "math::vec3",
      "name": "rotated",
      "signature": "rotated(axis: vector3, angle: number) -> vector3",
      "provider": "core",
      "effect": "copy",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::vec3.rotated(axis: vector3, angle: number) -> vector3"
    },
    {
      "owner": "math",
      "name": "vec4",
      "signature": "vec4() -> math::vec4",
      "provider": "core",
      "effect": "construct",
      "notes": "Zero initialized.",
      "source": "include/jaiscript/detail/math_values.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::vec4() -> math::vec4"
    },
    {
      "owner": "math",
      "name": "vec4",
      "signature": "vec4(value: same_dimension_vector) -> math::vec4",
      "provider": "core",
      "effect": "construct",
      "notes": "Copies/converts matching dimensions; a lone scalar is rejected.",
      "source": "include/jaiscript/detail/math_values.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::vec4(value: same_dimension_vector) -> math::vec4"
    },
    {
      "owner": "math",
      "name": "vec4",
      "signature": "vec4(x: number, y: number, z: number = 0, w: number = 0) -> math::vec4",
      "provider": "core",
      "effect": "construct",
      "notes": "",
      "source": "include/jaiscript/detail/math_values.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::vec4(x: number, y: number, z: number = 0, w: number = 0) -> math::vec4"
    },
    {
      "owner": "math::vec4",
      "name": "length",
      "signature": "length() -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::vec4.length() -> float"
    },
    {
      "owner": "math::vec4",
      "name": "length_squared",
      "signature": "length_squared() -> number",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::vec4.length_squared() -> number"
    },
    {
      "owner": "math::vec4",
      "name": "normalized",
      "signature": "normalized() -> floating_vector",
      "provider": "core",
      "effect": "copy",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::vec4.normalized() -> floating_vector"
    },
    {
      "owner": "math::vec4",
      "name": "dot",
      "signature": "dot(other: matching_vector) -> number",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::vec4.dot(other: matching_vector) -> number"
    },
    {
      "owner": "math::vec4",
      "name": "distance_to",
      "signature": "distance_to(other: matching_vector) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::vec4.distance_to(other: matching_vector) -> float"
    },
    {
      "owner": "math",
      "name": "ivec2",
      "signature": "ivec2() -> math::ivec2",
      "provider": "core",
      "effect": "construct",
      "notes": "Zero initialized.",
      "source": "include/jaiscript/detail/math_values.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::ivec2() -> math::ivec2"
    },
    {
      "owner": "math",
      "name": "ivec2",
      "signature": "ivec2(value: same_dimension_vector) -> math::ivec2",
      "provider": "core",
      "effect": "construct",
      "notes": "Copies/converts matching dimensions; a lone scalar is rejected.",
      "source": "include/jaiscript/detail/math_values.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::ivec2(value: same_dimension_vector) -> math::ivec2"
    },
    {
      "owner": "math",
      "name": "ivec2",
      "signature": "ivec2(x: number, y: number) -> math::ivec2",
      "provider": "core",
      "effect": "construct",
      "notes": "",
      "source": "include/jaiscript/detail/math_values.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::ivec2(x: number, y: number) -> math::ivec2"
    },
    {
      "owner": "math::ivec2",
      "name": "length",
      "signature": "length() -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::ivec2.length() -> float"
    },
    {
      "owner": "math::ivec2",
      "name": "length_squared",
      "signature": "length_squared() -> number",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::ivec2.length_squared() -> number"
    },
    {
      "owner": "math::ivec2",
      "name": "normalized",
      "signature": "normalized() -> floating_vector",
      "provider": "core",
      "effect": "copy",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::ivec2.normalized() -> floating_vector"
    },
    {
      "owner": "math::ivec2",
      "name": "dot",
      "signature": "dot(other: matching_vector) -> number",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::ivec2.dot(other: matching_vector) -> number"
    },
    {
      "owner": "math::ivec2",
      "name": "distance_to",
      "signature": "distance_to(other: matching_vector) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::ivec2.distance_to(other: matching_vector) -> float"
    },
    {
      "owner": "math::ivec2",
      "name": "cross",
      "signature": "cross(other: matching_vector) -> number or vector3",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::ivec2.cross(other: matching_vector) -> number or vector3"
    },
    {
      "owner": "math::ivec2",
      "name": "rotated",
      "signature": "rotated(angle: number) -> vector2",
      "provider": "core",
      "effect": "copy",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::ivec2.rotated(angle: number) -> vector2"
    },
    {
      "owner": "math",
      "name": "ivec3",
      "signature": "ivec3() -> math::ivec3",
      "provider": "core",
      "effect": "construct",
      "notes": "Zero initialized.",
      "source": "include/jaiscript/detail/math_values.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::ivec3() -> math::ivec3"
    },
    {
      "owner": "math",
      "name": "ivec3",
      "signature": "ivec3(value: same_dimension_vector) -> math::ivec3",
      "provider": "core",
      "effect": "construct",
      "notes": "Copies/converts matching dimensions; a lone scalar is rejected.",
      "source": "include/jaiscript/detail/math_values.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::ivec3(value: same_dimension_vector) -> math::ivec3"
    },
    {
      "owner": "math",
      "name": "ivec3",
      "signature": "ivec3(x: number, y: number, z: number = 0) -> math::ivec3",
      "provider": "core",
      "effect": "construct",
      "notes": "",
      "source": "include/jaiscript/detail/math_values.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::ivec3(x: number, y: number, z: number = 0) -> math::ivec3"
    },
    {
      "owner": "math::ivec3",
      "name": "length",
      "signature": "length() -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::ivec3.length() -> float"
    },
    {
      "owner": "math::ivec3",
      "name": "length_squared",
      "signature": "length_squared() -> number",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::ivec3.length_squared() -> number"
    },
    {
      "owner": "math::ivec3",
      "name": "normalized",
      "signature": "normalized() -> floating_vector",
      "provider": "core",
      "effect": "copy",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::ivec3.normalized() -> floating_vector"
    },
    {
      "owner": "math::ivec3",
      "name": "dot",
      "signature": "dot(other: matching_vector) -> number",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::ivec3.dot(other: matching_vector) -> number"
    },
    {
      "owner": "math::ivec3",
      "name": "distance_to",
      "signature": "distance_to(other: matching_vector) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::ivec3.distance_to(other: matching_vector) -> float"
    },
    {
      "owner": "math::ivec3",
      "name": "cross",
      "signature": "cross(other: matching_vector) -> number or vector3",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::ivec3.cross(other: matching_vector) -> number or vector3"
    },
    {
      "owner": "math::ivec3",
      "name": "rotated",
      "signature": "rotated(axis: vector3, angle: number) -> vector3",
      "provider": "core",
      "effect": "copy",
      "notes": "",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "math::ivec3.rotated(axis: vector3, angle: number) -> vector3"
    },
    {
      "owner": "math",
      "name": "color",
      "signature": "color() -> math::color",
      "provider": "core",
      "effect": "construct",
      "notes": "Opaque white.",
      "source": "include/jaiscript/detail/math_values.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::color() -> math::color"
    },
    {
      "owner": "math",
      "name": "color",
      "signature": "color(value: math::color) -> math::color",
      "provider": "core",
      "effect": "construct",
      "notes": "Copies a color; a lone scalar or other vector kind is rejected.",
      "source": "include/jaiscript/detail/math_values.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::color(value: math::color) -> math::color"
    },
    {
      "owner": "math",
      "name": "color",
      "signature": "color(red: number, green: number, blue: number, alpha: number = 1) -> math::color",
      "provider": "core",
      "effect": "construct",
      "notes": "",
      "source": "include/jaiscript/detail/math_values.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::color(red: number, green: number, blue: number, alpha: number = 1) -> math::color"
    },
    {
      "owner": "time",
      "name": "now",
      "signature": "now() -> float",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "Engine elapsed seconds, monotonic.",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "time::now() -> float"
    },
    {
      "owner": "time",
      "name": "engine_elapsed",
      "signature": "engine_elapsed() -> float",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "time::engine_elapsed() -> float"
    },
    {
      "owner": "time",
      "name": "execute_elapsed",
      "signature": "execute_elapsed() -> float",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "Seconds elapsed in the current execute.",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "time::execute_elapsed() -> float"
    },
    {
      "owner": "time",
      "name": "unix_time",
      "signature": "unix_time() -> float",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "Wall-clock Unix seconds.",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "time::unix_time() -> float"
    },
    {
      "owner": "time",
      "name": "unix_ms",
      "signature": "unix_ms() -> int",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "Wall-clock Unix milliseconds.",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "time::unix_ms() -> int"
    },
    {
      "owner": "time",
      "name": "date_now",
      "signature": "date_now(template: string) -> string",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "Formatted local calendar time.",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "time::date_now(template: string) -> string"
    },
    {
      "owner": "time",
      "name": "local_now",
      "signature": "local_now() -> time::date",
      "provider": "stdlib",
      "effect": "construct",
      "notes": "",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "time::local_now() -> time::date"
    },
    {
      "owner": "time",
      "name": "utc_now",
      "signature": "utc_now() -> time::date",
      "provider": "stdlib",
      "effect": "construct",
      "notes": "",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "time::utc_now() -> time::date"
    },
    {
      "owner": "time",
      "name": "date_from_unix",
      "signature": "date_from_unix(seconds: number, utc: bool = false) -> time::date",
      "provider": "stdlib",
      "effect": "construct",
      "notes": "",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "time::date_from_unix(seconds: number, utc: bool = false) -> time::date"
    },
    {
      "owner": "time",
      "name": "stopwatch",
      "signature": "stopwatch() -> time::stopwatch",
      "provider": "stdlib",
      "effect": "construct",
      "notes": "",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "time::stopwatch() -> time::stopwatch"
    },
    {
      "owner": "time::stopwatch",
      "name": "start",
      "signature": "start() -> void",
      "provider": "stdlib",
      "effect": "mutate",
      "notes": "",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "time::stopwatch.start() -> void"
    },
    {
      "owner": "time::stopwatch",
      "name": "stop",
      "signature": "stop() -> float",
      "provider": "stdlib",
      "effect": "mutate",
      "notes": "Elapsed seconds.",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "time::stopwatch.stop() -> float"
    },
    {
      "owner": "time::stopwatch",
      "name": "delta",
      "signature": "delta() -> float",
      "provider": "stdlib",
      "effect": "mutate",
      "notes": "Seconds since last delta.",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "time::stopwatch.delta() -> float"
    },
    {
      "owner": "time::stopwatch",
      "name": "elapsed",
      "signature": "elapsed() -> float",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "time::stopwatch.elapsed() -> float"
    },
    {
      "owner": "time::stopwatch",
      "name": "pause",
      "signature": "pause() -> float",
      "provider": "stdlib",
      "effect": "mutate",
      "notes": "",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "time::stopwatch.pause() -> float"
    },
    {
      "owner": "time::stopwatch",
      "name": "resume",
      "signature": "resume() -> float",
      "provider": "stdlib",
      "effect": "mutate",
      "notes": "Returns accumulated elapsed seconds.",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "time::stopwatch.resume() -> float"
    },
    {
      "owner": "time::stopwatch",
      "name": "is_running",
      "signature": "is_running() -> bool",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "time::stopwatch.is_running() -> bool"
    },
    {
      "owner": "time::stopwatch",
      "name": "is_paused",
      "signature": "is_paused() -> bool",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "time::stopwatch.is_paused() -> bool"
    },
    {
      "owner": "time::date",
      "name": "unix",
      "signature": "unix() -> float",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "time::date.unix() -> float"
    },
    {
      "owner": "time::date",
      "name": "unix_ms",
      "signature": "unix_ms() -> int",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "time::date.unix_ms() -> int"
    },
    {
      "owner": "time::date",
      "name": "format",
      "signature": "format(template: string) -> string",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "time::date.format(template: string) -> string"
    },
    {
      "owner": "time::date",
      "name": "to_string",
      "signature": "to_string() -> string",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "time::date.to_string() -> string"
    },
    {
      "owner": "time::date",
      "name": "to_utc",
      "signature": "to_utc() -> time::date",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "time::date.to_utc() -> time::date"
    },
    {
      "owner": "time::date",
      "name": "to_local",
      "signature": "to_local() -> time::date",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "time::date.to_local() -> time::date"
    },
    {
      "owner": "time::date",
      "name": "add_days",
      "signature": "add_days(days: number) -> time::date",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "Whole days required.",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "time::date.add_days(days: number) -> time::date"
    },
    {
      "owner": "time::date",
      "name": "add_months",
      "signature": "add_months(months: number) -> time::date",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "Whole months required.",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "time::date.add_months(months: number) -> time::date"
    },
    {
      "owner": "time::date",
      "name": "add_years",
      "signature": "add_years(years: number) -> time::date",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "Whole years required.",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "time::date.add_years(years: number) -> time::date"
    },
    {
      "owner": "time::date",
      "name": "add_hours",
      "signature": "add_hours(hours: number) -> time::date",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "time::date.add_hours(hours: number) -> time::date"
    },
    {
      "owner": "time::date",
      "name": "add_minutes",
      "signature": "add_minutes(minutes: number) -> time::date",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "time::date.add_minutes(minutes: number) -> time::date"
    },
    {
      "owner": "time::date",
      "name": "add_seconds",
      "signature": "add_seconds(seconds: number) -> time::date",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "time::date.add_seconds(seconds: number) -> time::date"
    },
    {
      "owner": "time::date",
      "name": "between",
      "signature": "between(start: time::date, end: time::date) -> bool",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "Inclusive membership; reversed endpoints accepted.",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "time::date.between(start: time::date, end: time::date) -> bool"
    },
    {
      "owner": "reflect",
      "name": "type_name",
      "signature": "type_name(value: var) -> string",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/stdlib/reflection.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "reflect::type_name(value: var) -> string"
    },
    {
      "owner": "reflect",
      "name": "is_cpp_bound",
      "signature": "is_cpp_bound(value: var) -> bool",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/stdlib/reflection.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "reflect::is_cpp_bound(value: var) -> bool"
    },
    {
      "owner": "reflect",
      "name": "has_field",
      "signature": "has_field(object_or_class: var, name: string) -> bool",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/stdlib/reflection.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "reflect::has_field(object_or_class: var, name: string) -> bool"
    },
    {
      "owner": "reflect",
      "name": "has_method",
      "signature": "has_method(object_or_class: var, name: string) -> bool",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/stdlib/reflection.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "reflect::has_method(object_or_class: var, name: string) -> bool",
      "example": {
        "code": "class Orc { int hp = 7; void hit() {} }\nprint(reflect::has_field(Orc(), \"hp\"), \" \", reflect::has_method(Orc(), \"hit\"), \" \", reflect::has_method(Orc(), \"fly\"));",
        "output": "true true false"
      }
    },
    {
      "owner": "reflect",
      "name": "classes",
      "signature": "classes() -> array<string>",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/stdlib/reflection.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "reflect::classes() -> array<string>"
    },
    {
      "owner": "reflect",
      "name": "bases",
      "signature": "bases(object_or_class: var) -> array<string>",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/stdlib/reflection.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "reflect::bases(object_or_class: var) -> array<string>"
    },
    {
      "owner": "reflect",
      "name": "generation",
      "signature": "generation(object_or_class: var) -> int",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/stdlib/reflection.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "reflect::generation(object_or_class: var) -> int"
    },
    {
      "owner": "reflect",
      "name": "fields",
      "signature": "fields(object_or_class: var) -> array<map<string,var>>",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/stdlib/reflection.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "reflect::fields(object_or_class: var) -> array<map<string,var>>",
      "example": {
        "code": "class Orc { int hp = 7; string name = \"grok\"; }\nfor (auto f : reflect::fields(Orc())) { print(f[\"name\"], \": \", f[\"type\"]); }",
        "output": "hp: int\nname: string"
      }
    },
    {
      "owner": "reflect",
      "name": "instances",
      "signature": "instances(class: class or string) -> array<var>",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/stdlib/reflection.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "reflect::instances(class: class or string) -> array<var>"
    },
    {
      "owner": "reflect",
      "name": "get",
      "signature": "get(object: var, field: string) -> var",
      "provider": "stdlib",
      "effect": "observe, callback",
      "notes": "Reads through normal field/accessor semantics.",
      "source": "include/jaiscript/stdlib/reflection.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "reflect::get(object: var, field: string) -> var",
      "example": {
        "code": "class Orc { int hp = 7; }\nOrc o;\nreflect::set(o, \"hp\", 9);\nprint(reflect::get(o, \"hp\"));",
        "output": "9"
      }
    },
    {
      "owner": "reflect",
      "name": "set",
      "signature": "set(object: var, field: string, value: var) -> void",
      "provider": "stdlib",
      "effect": "mutate, callback",
      "notes": "",
      "source": "include/jaiscript/stdlib/reflection.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "reflect::set(object: var, field: string, value: var) -> void"
    },
    {
      "owner": "reflect",
      "name": "invoke",
      "signature": "invoke(object: var, method: string, args: var...) -> var",
      "provider": "stdlib",
      "effect": "callback",
      "notes": "",
      "source": "include/jaiscript/stdlib/reflection.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "reflect::invoke(object: var, method: string, args: var...) -> var",
      "example": {
        "code": "class Orc { int add(int a, int b) { return a + b; } }\nprint(reflect::invoke(Orc(), \"add\", 2, 3));",
        "output": "5"
      }
    },
    {
      "owner": "reflect",
      "name": "bind",
      "signature": "bind(object: var, method: string) -> function",
      "provider": "stdlib",
      "effect": "bind",
      "notes": "Pins receiver; later calls follow reloaded methods.",
      "source": "include/jaiscript/stdlib/reflection.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "reflect::bind(object: var, method: string) -> function",
      "example": {
        "code": "class Orc { int hp = 7; void hit() { hp -= 1; } }\nauto o = new Orc();\nauto hit = reflect::bind(o, \"hit\");\nhit();\nhit();\nprint(o.hp);",
        "output": "5"
      }
    },
    {
      "owner": "reflect",
      "name": "call",
      "signature": "call(name: string, args: var...) -> var",
      "provider": "stdlib",
      "effect": "callback",
      "notes": "",
      "source": "include/jaiscript/stdlib/reflection.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "reflect::call(name: string, args: var...) -> var"
    },
    {
      "owner": "reflect",
      "name": "construct",
      "signature": "construct(class_name: string, args: var...) -> var",
      "provider": "stdlib",
      "effect": "construct",
      "notes": "",
      "source": "include/jaiscript/stdlib/reflection.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "reflect::construct(class_name: string, args: var...) -> var",
      "example": {
        "code": "class Orc { int hp = 7; Orc(int h) { hp = h; } }\nvar o = reflect::construct(\"Orc\", 12);\nprint(o.hp);",
        "output": "12"
      }
    },
    {
      "owner": "reflect",
      "name": "construct_shared",
      "signature": "construct_shared(class_name: string, args: var...) -> shared_ptr",
      "provider": "stdlib",
      "effect": "construct",
      "notes": "",
      "source": "include/jaiscript/stdlib/reflection.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "reflect::construct_shared(class_name: string, args: var...) -> shared_ptr"
    },
    {
      "owner": "reflect",
      "name": "methods",
      "signature": "methods(object_or_class: var) -> array<map<string,var>>",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/stdlib/reflection.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "reflect::methods(object_or_class: var) -> array<map<string,var>>"
    },
    {
      "owner": "reflect",
      "name": "method_arguments",
      "signature": "method_arguments(object_or_class: var, name: string) -> array<array<map<string,var>>>",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "One parameter-description array per overload.",
      "source": "include/jaiscript/stdlib/reflection.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "reflect::method_arguments(object_or_class: var, name: string) -> array<array<map<string,var>>>"
    },
    {
      "owner": "reflect",
      "name": "functions",
      "signature": "functions() -> array<map<string,var>>",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/stdlib/reflection.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "reflect::functions() -> array<map<string,var>>"
    },
    {
      "owner": "reflect",
      "name": "globals",
      "signature": "globals() -> array<map<string,var>>",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/stdlib/reflection.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "reflect::globals() -> array<map<string,var>>"
    },
    {
      "owner": "reflect",
      "name": "function_arguments",
      "signature": "function_arguments(name: string) -> array<array<map<string,var>>>",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "One parameter-description array per overload.",
      "source": "include/jaiscript/stdlib/reflection.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "reflect::function_arguments(name: string) -> array<array<map<string,var>>>"
    },
    {
      "owner": "binary",
      "name": "text",
      "signature": "text(count: int) -> binary::width",
      "provider": "core",
      "effect": "construct",
      "notes": "Fixed byte count for a layout text field.",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "binary::text(count: int) -> binary::width"
    },
    {
      "owner": "binary",
      "name": "bytes",
      "signature": "bytes(count: int) -> binary::width",
      "provider": "core",
      "effect": "construct",
      "notes": "Fixed byte count for a layout byte-buffer field.",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "binary::bytes(count: int) -> binary::width"
    },
    {
      "owner": "binary",
      "name": "layout",
      "signature": "layout(field_and_width_pairs: string, binary::width, ...) -> binary::layout",
      "provider": "core",
      "effect": "construct",
      "notes": "Alternating field name and width values; at least one pair.",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "binary::layout(field_and_width_pairs: string, binary::width, ...) -> binary::layout"
    },
    {
      "owner": "binary",
      "name": "reader",
      "signature": "reader(bytes: string) -> binary::reader",
      "provider": "core",
      "effect": "construct",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "binary::reader(bytes: string) -> binary::reader"
    },
    {
      "owner": "binary",
      "name": "writer",
      "signature": "writer() -> binary::writer",
      "provider": "core",
      "effect": "construct",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "binary::writer() -> binary::writer"
    },
    {
      "owner": "binary::width",
      "name": "size",
      "signature": "size() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::width.size() -> int"
    },
    {
      "owner": "binary::width",
      "name": "name",
      "signature": "name() -> string",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::width.name() -> string"
    },
    {
      "owner": "binary::layout",
      "name": "size",
      "signature": "size() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::layout.size() -> int"
    },
    {
      "owner": "binary::layout",
      "name": "count",
      "signature": "count() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::layout.count() -> int"
    },
    {
      "owner": "binary::reader",
      "name": "int8",
      "signature": "int8() -> int",
      "provider": "core",
      "effect": "advance",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::reader.int8() -> int"
    },
    {
      "owner": "binary::reader",
      "name": "int16",
      "signature": "int16() -> int",
      "provider": "core",
      "effect": "advance",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::reader.int16() -> int"
    },
    {
      "owner": "binary::reader",
      "name": "int32",
      "signature": "int32() -> int",
      "provider": "core",
      "effect": "advance",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::reader.int32() -> int"
    },
    {
      "owner": "binary::reader",
      "name": "int64",
      "signature": "int64() -> int",
      "provider": "core",
      "effect": "advance",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::reader.int64() -> int"
    },
    {
      "owner": "binary::reader",
      "name": "uint8",
      "signature": "uint8() -> int",
      "provider": "core",
      "effect": "advance",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::reader.uint8() -> int"
    },
    {
      "owner": "binary::reader",
      "name": "uint16",
      "signature": "uint16() -> int",
      "provider": "core",
      "effect": "advance",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::reader.uint16() -> int",
      "example": {
        "code": "binary::writer w;\nw.uint16(513).int32(-2);\nauto r = w.to_string().reader();\nprint(r.uint16(), \" \", r.int32(), \" \", r.at_end());",
        "output": "513 -2 true"
      }
    },
    {
      "owner": "binary::reader",
      "name": "uint32",
      "signature": "uint32() -> int",
      "provider": "core",
      "effect": "advance",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::reader.uint32() -> int"
    },
    {
      "owner": "binary::reader",
      "name": "float32",
      "signature": "float32() -> float",
      "provider": "core",
      "effect": "advance",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::reader.float32() -> float"
    },
    {
      "owner": "binary::reader",
      "name": "float64",
      "signature": "float64() -> float",
      "provider": "core",
      "effect": "advance",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::reader.float64() -> float"
    },
    {
      "owner": "binary::reader",
      "name": "text",
      "signature": "text(count: int) -> string",
      "provider": "core",
      "effect": "advance",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::reader.text(count: int) -> string"
    },
    {
      "owner": "binary::reader",
      "name": "bytes",
      "signature": "bytes(count: int) -> array<uint8>",
      "provider": "core",
      "effect": "advance",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::reader.bytes(count: int) -> array<uint8>"
    },
    {
      "owner": "binary::reader",
      "name": "seek",
      "signature": "seek(position: int) -> binary::reader",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::reader.seek(position: int) -> binary::reader"
    },
    {
      "owner": "binary::reader",
      "name": "skip",
      "signature": "skip(count: int) -> binary::reader",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::reader.skip(count: int) -> binary::reader"
    },
    {
      "owner": "binary::reader",
      "name": "pos",
      "signature": "pos() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::reader.pos() -> int"
    },
    {
      "owner": "binary::reader",
      "name": "remaining",
      "signature": "remaining() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::reader.remaining() -> int"
    },
    {
      "owner": "binary::reader",
      "name": "at_end",
      "signature": "at_end() -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::reader.at_end() -> bool"
    },
    {
      "owner": "binary::reader",
      "name": "big_endian",
      "signature": "big_endian() -> binary::reader",
      "provider": "core",
      "effect": "configure",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::reader.big_endian() -> binary::reader"
    },
    {
      "owner": "binary::reader",
      "name": "little_endian",
      "signature": "little_endian() -> binary::reader",
      "provider": "core",
      "effect": "configure",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::reader.little_endian() -> binary::reader"
    },
    {
      "owner": "binary::reader",
      "name": "unpack",
      "signature": "unpack(layout: binary::layout) -> map<string,var>",
      "provider": "core",
      "effect": "advance",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::reader.unpack(layout: binary::layout) -> map<string,var>",
      "example": {
        "code": "auto entry = binary::layout(\"id\", binary::uint16, \"hp\", binary::int32);\nbinary::writer w;\nw.pack(entry, {\"id\": 7, \"hp\": 120});\nauto row = w.to_string().reader().unpack(entry);\nprint(row[\"id\"], \" \", row[\"hp\"]);",
        "output": "7 120"
      }
    },
    {
      "owner": "binary::reader",
      "name": "read",
      "signature": "read(class: class, layout: binary::layout) -> class_instance",
      "provider": "core",
      "effect": "advance, construct",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::reader.read(class: class, layout: binary::layout) -> class_instance"
    },
    {
      "owner": "binary::writer",
      "name": "int8",
      "signature": "int8(value: int) -> binary::writer",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::writer.int8(value: int) -> binary::writer"
    },
    {
      "owner": "binary::writer",
      "name": "int16",
      "signature": "int16(value: int) -> binary::writer",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::writer.int16(value: int) -> binary::writer"
    },
    {
      "owner": "binary::writer",
      "name": "int32",
      "signature": "int32(value: int) -> binary::writer",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::writer.int32(value: int) -> binary::writer"
    },
    {
      "owner": "binary::writer",
      "name": "int64",
      "signature": "int64(value: int) -> binary::writer",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::writer.int64(value: int) -> binary::writer"
    },
    {
      "owner": "binary::writer",
      "name": "uint8",
      "signature": "uint8(value: int) -> binary::writer",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::writer.uint8(value: int) -> binary::writer"
    },
    {
      "owner": "binary::writer",
      "name": "uint16",
      "signature": "uint16(value: int) -> binary::writer",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::writer.uint16(value: int) -> binary::writer"
    },
    {
      "owner": "binary::writer",
      "name": "uint32",
      "signature": "uint32(value: int) -> binary::writer",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::writer.uint32(value: int) -> binary::writer"
    },
    {
      "owner": "binary::writer",
      "name": "float32",
      "signature": "float32(value: number) -> binary::writer",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::writer.float32(value: number) -> binary::writer"
    },
    {
      "owner": "binary::writer",
      "name": "float64",
      "signature": "float64(value: number) -> binary::writer",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::writer.float64(value: number) -> binary::writer"
    },
    {
      "owner": "binary::writer",
      "name": "text",
      "signature": "text(value: string, count: int = encoded_length) -> binary::writer",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::writer.text(value: string, count: int = encoded_length) -> binary::writer",
      "example": {
        "code": "binary::writer w;\nw.text(\"ab\", 4).text(\"c\");\nprint(w.size(), \" \", to_json(w.to_string().to_bytes()));",
        "output": "6 [97,98,0,0,99,0]"
      }
    },
    {
      "owner": "binary::writer",
      "name": "bytes",
      "signature": "bytes(value: array<uint8> or string) -> binary::writer",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::writer.bytes(value: array<uint8> or string) -> binary::writer"
    },
    {
      "owner": "binary::writer",
      "name": "pack",
      "signature": "pack(layout: binary::layout, values: map<string,var>) -> binary::writer",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::writer.pack(layout: binary::layout, values: map<string,var>) -> binary::writer"
    },
    {
      "owner": "binary::writer",
      "name": "seek",
      "signature": "seek(position: int) -> binary::writer",
      "provider": "core",
      "effect": "mutate",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::writer.seek(position: int) -> binary::writer"
    },
    {
      "owner": "binary::writer",
      "name": "pos",
      "signature": "pos() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::writer.pos() -> int"
    },
    {
      "owner": "binary::writer",
      "name": "size",
      "signature": "size() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::writer.size() -> int"
    },
    {
      "owner": "binary::writer",
      "name": "big_endian",
      "signature": "big_endian() -> binary::writer",
      "provider": "core",
      "effect": "configure",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::writer.big_endian() -> binary::writer"
    },
    {
      "owner": "binary::writer",
      "name": "little_endian",
      "signature": "little_endian() -> binary::writer",
      "provider": "core",
      "effect": "configure",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::writer.little_endian() -> binary::writer"
    },
    {
      "owner": "binary::writer",
      "name": "to_string",
      "signature": "to_string() -> string",
      "provider": "core",
      "effect": "copy",
      "notes": "Written raw bytes.",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::writer.to_string() -> string"
    },
    {
      "owner": "string",
      "name": "from_bytes",
      "signature": "from_bytes(bytes: array<uint8> or array<int8> or array<int> or array<char> or array<var>) -> string",
      "provider": "core",
      "effect": "copy",
      "notes": "Byte values must fit the accepted byte boundary.",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "string::from_bytes(bytes: array<uint8> or array<int8> or array<int> or array<char> or array<var>) -> string"
    },
    {
      "owner": "global",
      "name": "key_down",
      "signature": "key_down(name: string) -> bool",
      "provider": "runner",
      "effect": "input",
      "notes": "Current held key; arrows and named keys or letters; console/platform dependent.",
      "source": "tools/jaiscript/main.cpp",
      "form": "function",
      "availability": "Standalone jaiscript.exe",
      "display": "key_down(name: string) -> bool"
    },
    {
      "owner": "global",
      "name": "read_key",
      "signature": "read_key() -> string",
      "provider": "runner",
      "effect": "input",
      "notes": "Nonblocking; consumes one queued edge; empty string if idle; named arrows and lowercase letters.",
      "source": "tools/jaiscript/main.cpp",
      "form": "function",
      "availability": "Standalone jaiscript.exe",
      "display": "read_key() -> string"
    },
    {
      "owner": "global",
      "name": "term_cols",
      "signature": "term_cols() -> int",
      "provider": "runner",
      "effect": "observe",
      "notes": "",
      "source": "tools/jaiscript/main.cpp",
      "form": "function",
      "availability": "Standalone jaiscript.exe",
      "display": "term_cols() -> int"
    },
    {
      "owner": "global",
      "name": "term_rows",
      "signature": "term_rows() -> int",
      "provider": "runner",
      "effect": "observe",
      "notes": "",
      "source": "tools/jaiscript/main.cpp",
      "form": "function",
      "availability": "Standalone jaiscript.exe",
      "display": "term_rows() -> int"
    },
    {
      "owner": "global",
      "name": "load_sound",
      "signature": "load_sound(path: string) -> Sound",
      "provider": "runner",
      "effect": "audio",
      "notes": "Opens a WAV, MIDI or MP3 file (the header decides, else the extension) and preloads it in the background; null for a missing file, an unknown format, or off Windows.",
      "source": "tools/jaiscript/sound.hpp",
      "form": "function",
      "availability": "Standalone jaiscript.exe",
      "display": "load_sound(path: string) -> Sound"
    },
    {
      "owner": "global",
      "name": "play_sound",
      "signature": "play_sound(path: string, loop: bool = false) -> Sound",
      "provider": "runner",
      "effect": "audio",
      "notes": "load_sound then play: the Sound keeps playing when the result is dropped, and stops with stop() or stop_sounds(); null as load_sound.",
      "source": "tools/jaiscript/sound.hpp",
      "form": "function",
      "availability": "Standalone jaiscript.exe",
      "display": "play_sound(path: string, loop: bool = false) -> Sound"
    },
    {
      "owner": "global",
      "name": "stop_sounds",
      "signature": "stop_sounds() -> void",
      "provider": "runner",
      "effect": "audio",
      "notes": "Stops every Sound.",
      "source": "tools/jaiscript/sound.hpp",
      "form": "function",
      "availability": "Standalone jaiscript.exe",
      "display": "stop_sounds() -> void"
    },
    {
      "owner": "Sound",
      "name": "play",
      "signature": "play(loop: bool = false) -> bool",
      "provider": "runner",
      "effect": "audio",
      "notes": "Starts from the beginning (a playing Sound restarts), looping when loop is true, and returns at once; false once the file proved unplayable.",
      "source": "tools/jaiscript/sound.hpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "Sound.play(loop: bool = false) -> bool"
    },
    {
      "owner": "Sound",
      "name": "stop",
      "signature": "stop() -> void",
      "provider": "runner",
      "effect": "audio",
      "notes": "",
      "source": "tools/jaiscript/sound.hpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "Sound.stop() -> void"
    },
    {
      "owner": "Sound",
      "name": "playing",
      "signature": "playing() -> bool",
      "provider": "runner",
      "effect": "observe",
      "notes": "True from play() until stop(), stop_sounds() or the end of a sound played once.",
      "source": "tools/jaiscript/sound.hpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "Sound.playing() -> bool"
    },
    {
      "owner": "Sound",
      "name": "volume",
      "signature": "volume(level: float) -> void",
      "provider": "runner",
      "effect": "audio",
      "notes": "Level 0..1, clamped; 1 until set.",
      "source": "tools/jaiscript/sound.hpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "Sound.volume(level: float) -> void"
    },
    {
      "owner": "Sound",
      "name": "format",
      "signature": "format() -> string",
      "provider": "runner",
      "effect": "observe",
      "notes": "\"wav\", \"midi\" or \"mp3\".",
      "source": "tools/jaiscript/sound.hpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "Sound.format() -> string"
    },
    {
      "owner": "global",
      "name": "net_host_name",
      "signature": "net_host_name() -> string",
      "provider": "runner",
      "effect": "observe",
      "notes": "",
      "source": "tools/jaiscript/main.cpp",
      "form": "function",
      "availability": "Standalone jaiscript.exe",
      "display": "net_host_name() -> string"
    },
    {
      "owner": "global",
      "name": "net_local_addresses",
      "signature": "net_local_addresses() -> array<string>",
      "provider": "runner",
      "effect": "observe",
      "notes": "Non-loopback IPv4 addresses.",
      "source": "tools/jaiscript/main.cpp",
      "form": "function",
      "availability": "Standalone jaiscript.exe",
      "display": "net_local_addresses() -> array<string>"
    },
    {
      "owner": "global",
      "name": "read_file",
      "signature": "read_file(path: string) -> string",
      "provider": "runner",
      "effect": "filesystem",
      "notes": "Missing/unreadable file raises; empty file returns empty string.",
      "source": "tools/jaiscript/file_io.hpp",
      "form": "function",
      "availability": "Standalone jaiscript.exe",
      "display": "read_file(path: string) -> string"
    },
    {
      "owner": "global",
      "name": "write_file",
      "signature": "write_file(path: string, content: string) -> bool",
      "provider": "runner",
      "effect": "filesystem",
      "notes": "Creates missing parent folders.",
      "source": "tools/jaiscript/file_io.hpp",
      "form": "function",
      "availability": "Standalone jaiscript.exe",
      "display": "write_file(path: string, content: string) -> bool"
    },
    {
      "owner": "global",
      "name": "file_exists",
      "signature": "file_exists(path: string) -> bool",
      "provider": "runner",
      "effect": "filesystem",
      "notes": "",
      "source": "tools/jaiscript/file_io.hpp",
      "form": "function",
      "availability": "Standalone jaiscript.exe",
      "display": "file_exists(path: string) -> bool"
    },
    {
      "owner": "global",
      "name": "delete_file",
      "signature": "delete_file(path: string) -> bool",
      "provider": "runner",
      "effect": "filesystem",
      "notes": "",
      "source": "tools/jaiscript/file_io.hpp",
      "form": "function",
      "availability": "Standalone jaiscript.exe",
      "display": "delete_file(path: string) -> bool"
    },
    {
      "owner": "global",
      "name": "move_file",
      "signature": "move_file(from: string, to: string) -> bool",
      "provider": "runner",
      "effect": "filesystem",
      "notes": "Replaces destination; may copy across volumes.",
      "source": "tools/jaiscript/file_io.hpp",
      "form": "function",
      "availability": "Standalone jaiscript.exe",
      "display": "move_file(from: string, to: string) -> bool"
    },
    {
      "owner": "global",
      "name": "dir_exists",
      "signature": "dir_exists(path: string) -> bool",
      "provider": "runner",
      "effect": "filesystem",
      "notes": "",
      "source": "tools/jaiscript/file_io.hpp",
      "form": "function",
      "availability": "Standalone jaiscript.exe",
      "display": "dir_exists(path: string) -> bool"
    },
    {
      "owner": "global",
      "name": "make_dirs",
      "signature": "make_dirs(path: string) -> bool",
      "provider": "runner",
      "effect": "filesystem",
      "notes": "",
      "source": "tools/jaiscript/file_io.hpp",
      "form": "function",
      "availability": "Standalone jaiscript.exe",
      "display": "make_dirs(path: string) -> bool"
    },
    {
      "owner": "global",
      "name": "writable_dir",
      "signature": "writable_dir(path: string) -> bool",
      "provider": "runner",
      "effect": "filesystem",
      "notes": "Creates folder and performs a write/remove probe.",
      "source": "tools/jaiscript/file_io.hpp",
      "form": "function",
      "availability": "Standalone jaiscript.exe",
      "display": "writable_dir(path: string) -> bool"
    },
    {
      "owner": "global",
      "name": "list_dir",
      "signature": "list_dir(path: string) -> array<string>",
      "provider": "runner",
      "effect": "filesystem",
      "notes": "",
      "source": "tools/jaiscript/file_io.hpp",
      "form": "function",
      "availability": "Standalone jaiscript.exe",
      "display": "list_dir(path: string) -> array<string>"
    },
    {
      "owner": "global",
      "name": "zip_entries",
      "signature": "zip_entries(path: string) -> array<string>",
      "provider": "runner",
      "effect": "filesystem",
      "notes": "",
      "source": "tools/jaiscript/fetch.hpp",
      "form": "function",
      "availability": "Standalone jaiscript.exe",
      "display": "zip_entries(path: string) -> array<string>"
    },
    {
      "owner": "global",
      "name": "zip_extract",
      "signature": "zip_extract(zip: string, entry: string, destination: string) -> bool",
      "provider": "runner",
      "effect": "filesystem",
      "notes": "Checks CRC-32.",
      "source": "tools/jaiscript/fetch.hpp",
      "form": "function",
      "availability": "Standalone jaiscript.exe",
      "display": "zip_extract(zip: string, entry: string, destination: string) -> bool"
    },
    {
      "owner": "global",
      "name": "Download",
      "signature": "Download() -> Download",
      "provider": "runner",
      "effect": "construct",
      "notes": "",
      "source": "tools/jaiscript/fetch.hpp",
      "form": "function",
      "availability": "Standalone jaiscript.exe",
      "display": "Download() -> Download"
    },
    {
      "owner": "global",
      "name": "NetChannel",
      "signature": "NetChannel() -> NetChannel",
      "provider": "runner",
      "effect": "construct",
      "notes": "",
      "source": "tools/jaiscript/fetch.hpp",
      "form": "function",
      "availability": "Standalone jaiscript.exe",
      "display": "NetChannel() -> NetChannel"
    },
    {
      "owner": "global",
      "name": "NetServer",
      "signature": "NetServer() -> NetServer",
      "provider": "runner",
      "effect": "construct",
      "notes": "",
      "source": "tools/jaiscript/fetch.hpp",
      "form": "function",
      "availability": "Standalone jaiscript.exe",
      "display": "NetServer() -> NetServer"
    },
    {
      "owner": "Download",
      "name": "start",
      "signature": "start(url: string, destination: string) -> bool",
      "provider": "runner",
      "effect": "network, filesystem",
      "notes": "",
      "source": "tools/jaiscript/fetch.hpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "Download.start(url: string, destination: string) -> bool"
    },
    {
      "owner": "Download",
      "name": "pump",
      "signature": "pump() -> bool",
      "provider": "runner",
      "effect": "advance, callback",
      "notes": "Polls completion; returns done state.",
      "source": "tools/jaiscript/fetch.hpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "Download.pump() -> bool"
    },
    {
      "owner": "Download",
      "name": "cancel",
      "signature": "cancel() -> void",
      "provider": "runner",
      "effect": "mutate",
      "notes": "",
      "source": "tools/jaiscript/fetch.hpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "Download.cancel() -> void"
    },
    {
      "owner": "Download",
      "name": "done",
      "signature": "done() -> bool",
      "provider": "runner",
      "effect": "observe",
      "notes": "",
      "source": "tools/jaiscript/fetch.hpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "Download.done() -> bool"
    },
    {
      "owner": "NetChannel",
      "name": "listen",
      "signature": "listen(port: int) -> bool",
      "provider": "runner",
      "effect": "network",
      "notes": "",
      "source": "tools/jaiscript/main.cpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "NetChannel.listen(port: int) -> bool"
    },
    {
      "owner": "NetChannel",
      "name": "connect",
      "signature": "connect(host: string, port: int) -> bool",
      "provider": "runner",
      "effect": "network",
      "notes": "Asynchronous: true while the connection is being made; pump() then fires on_connect(), or on_disconnect(\"connect refused\"). False when the attempt fails at once.",
      "source": "tools/jaiscript/main.cpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "NetChannel.connect(host: string, port: int) -> bool"
    },
    {
      "owner": "NetChannel",
      "name": "send",
      "signature": "send(bytes: string) -> bool",
      "provider": "runner",
      "effect": "network",
      "notes": "Length-prefixed packet, not raw stream writes.",
      "source": "tools/jaiscript/main.cpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "NetChannel.send(bytes: string) -> bool"
    },
    {
      "owner": "NetChannel",
      "name": "pump",
      "signature": "pump() -> int",
      "provider": "runner",
      "effect": "network, callback",
      "notes": "Pumps networking and returns fired event count.",
      "source": "tools/jaiscript/main.cpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "NetChannel.pump() -> int"
    },
    {
      "owner": "NetChannel",
      "name": "close",
      "signature": "close() -> void",
      "provider": "runner",
      "effect": "network",
      "notes": "",
      "source": "tools/jaiscript/main.cpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "NetChannel.close() -> void"
    },
    {
      "owner": "NetChannel",
      "name": "connected",
      "signature": "connected() -> bool",
      "provider": "runner",
      "effect": "observe",
      "notes": "",
      "source": "tools/jaiscript/main.cpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "NetChannel.connected() -> bool"
    },
    {
      "owner": "NetChannel",
      "name": "status",
      "signature": "status() -> string",
      "provider": "runner",
      "effect": "observe",
      "notes": "",
      "source": "tools/jaiscript/main.cpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "NetChannel.status() -> string"
    },
    {
      "owner": "NetServer",
      "name": "listen",
      "signature": "listen(port: int) -> bool",
      "provider": "runner",
      "effect": "network",
      "notes": "",
      "source": "tools/jaiscript/main.cpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "NetServer.listen(port: int) -> bool"
    },
    {
      "owner": "NetServer",
      "name": "send",
      "signature": "send(client: int, bytes: string) -> bool",
      "provider": "runner",
      "effect": "network",
      "notes": "",
      "source": "tools/jaiscript/main.cpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "NetServer.send(client: int, bytes: string) -> bool"
    },
    {
      "owner": "NetServer",
      "name": "broadcast",
      "signature": "broadcast(bytes: string) -> int",
      "provider": "runner",
      "effect": "network",
      "notes": "Returns reached-client count.",
      "source": "tools/jaiscript/main.cpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "NetServer.broadcast(bytes: string) -> int"
    },
    {
      "owner": "NetServer",
      "name": "pump",
      "signature": "pump() -> int",
      "provider": "runner",
      "effect": "network, callback",
      "notes": "Pumps networking and returns fired event count.",
      "source": "tools/jaiscript/main.cpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "NetServer.pump() -> int"
    },
    {
      "owner": "NetServer",
      "name": "kick",
      "signature": "kick(client: int) -> void",
      "provider": "runner",
      "effect": "network",
      "notes": "",
      "source": "tools/jaiscript/main.cpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "NetServer.kick(client: int) -> void"
    },
    {
      "owner": "NetServer",
      "name": "client_count",
      "signature": "client_count() -> int",
      "provider": "runner",
      "effect": "observe",
      "notes": "",
      "source": "tools/jaiscript/main.cpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "NetServer.client_count() -> int"
    },
    {
      "owner": "NetServer",
      "name": "listening",
      "signature": "listening() -> bool",
      "provider": "runner",
      "effect": "observe",
      "notes": "",
      "source": "tools/jaiscript/main.cpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "NetServer.listening() -> bool"
    },
    {
      "owner": "NetServer",
      "name": "close",
      "signature": "close() -> void",
      "provider": "runner",
      "effect": "network",
      "notes": "",
      "source": "tools/jaiscript/main.cpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "NetServer.close() -> void"
    },
    {
      "owner": "Signal",
      "name": "connect",
      "signature": "connect(id: string, callback: function or string) -> void",
      "provider": "host-bound",
      "effect": "mutate",
      "notes": "Callback or script text; named connection remains owned by the signal.",
      "source": "include/jaiscript/signals/signal_binding.hpp",
      "form": "method",
      "availability": "When the host binds this signal type",
      "display": "Signal.connect(id: string, callback: function or string) -> void"
    },
    {
      "owner": "Signal",
      "name": "disconnect",
      "signature": "disconnect(id: string) -> void",
      "provider": "host-bound",
      "effect": "mutate",
      "notes": "",
      "source": "include/jaiscript/signals/signal_binding.hpp",
      "form": "method",
      "availability": "When the host binds this signal type",
      "display": "Signal.disconnect(id: string) -> void"
    },
    {
      "owner": "Signal",
      "name": "connected",
      "signature": "connected(id: string) -> bool",
      "provider": "host-bound",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/signals/signal_binding.hpp",
      "form": "method",
      "availability": "When the host binds this signal type",
      "display": "Signal.connected(id: string) -> bool"
    },
    {
      "owner": "SignalEmitter",
      "name": "connect",
      "signature": "connect(id: string, callback: function or string) -> void",
      "provider": "host-bound",
      "effect": "mutate",
      "notes": "Callback or script text; named connection remains owned by the signal.",
      "source": "include/jaiscript/signals/signal_binding.hpp",
      "form": "method",
      "availability": "When the host binds this signal type",
      "display": "SignalEmitter.connect(id: string, callback: function or string) -> void"
    },
    {
      "owner": "SignalEmitter",
      "name": "disconnect",
      "signature": "disconnect(id: string) -> void",
      "provider": "host-bound",
      "effect": "mutate",
      "notes": "",
      "source": "include/jaiscript/signals/signal_binding.hpp",
      "form": "method",
      "availability": "When the host binds this signal type",
      "display": "SignalEmitter.disconnect(id: string) -> void"
    },
    {
      "owner": "SignalEmitter",
      "name": "connected",
      "signature": "connected(id: string) -> bool",
      "provider": "host-bound",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/signals/signal_binding.hpp",
      "form": "method",
      "availability": "When the host binds this signal type",
      "display": "SignalEmitter.connected(id: string) -> bool"
    },
    {
      "owner": "SignalEmitter",
      "name": "emit",
      "signature": "emit(payload: bound_signal_arguments...) -> void",
      "provider": "host-bound",
      "effect": "callback",
      "notes": "Argument types follow the host-bound signal signature; emit discards receiver return values.",
      "source": "include/jaiscript/signals/signal_binding.hpp",
      "form": "method",
      "availability": "When the host binds this signal type",
      "display": "SignalEmitter.emit(payload: bound_signal_arguments...) -> void"
    },
    {
      "owner": "global",
      "name": "pair",
      "signature": "pair(first: var, second: var) -> pair",
      "provider": "stdlib",
      "effect": "construct",
      "notes": "The element type of a range-for over a map; pair() holds two nulls.",
      "source": "include/jaiscript/stdlib/containers.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "pair(first: var, second: var) -> pair"
    },
    {
      "owner": "time",
      "name": "local_date",
      "signature": "local_date(year: int, month: int, day: int, hour: int = 0, minute: int = 0, second: int = 0, millisecond: int = 0) -> time::date",
      "provider": "stdlib",
      "effect": "construct",
      "notes": "",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "time::local_date(year: int, month: int, day: int, hour: int = 0, minute: int = 0, second: int = 0, millisecond: int = 0) -> time::date"
    },
    {
      "owner": "time",
      "name": "utc_date",
      "signature": "utc_date(year: int, month: int, day: int, hour: int = 0, minute: int = 0, second: int = 0, millisecond: int = 0) -> time::date",
      "provider": "stdlib",
      "effect": "construct",
      "notes": "",
      "source": "include/jaiscript/stdlib/time.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "time::utc_date(year: int, month: int, day: int, hour: int = 0, minute: int = 0, second: int = 0, millisecond: int = 0) -> time::date"
    },
    {
      "owner": "binary::reader",
      "name": "size",
      "signature": "size() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::reader.size() -> int"
    },
    {
      "owner": "binary::reader",
      "name": "text",
      "signature": "text() -> string",
      "provider": "core",
      "effect": "advance",
      "notes": "Reads a NUL-terminated text field.",
      "source": "include/jaiscript/detail/binary_data.hpp",
      "form": "method",
      "availability": "Every engine",
      "display": "binary::reader.text() -> string"
    },
    {
      "owner": "Download",
      "name": "success",
      "signature": "success() -> bool",
      "provider": "runner",
      "effect": "observe",
      "notes": "True only after successful completion.",
      "source": "tools/jaiscript/fetch.hpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "Download.success() -> bool"
    },
    {
      "owner": "Download",
      "name": "error",
      "signature": "error() -> string",
      "provider": "runner",
      "effect": "observe",
      "notes": "Completed failure description; empty before completion.",
      "source": "tools/jaiscript/fetch.hpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "Download.error() -> string"
    },
    {
      "owner": "Download",
      "name": "received",
      "signature": "received() -> int",
      "provider": "runner",
      "effect": "observe",
      "notes": "Bytes received so far.",
      "source": "tools/jaiscript/fetch.hpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "Download.received() -> int"
    },
    {
      "owner": "Download",
      "name": "total",
      "signature": "total() -> int",
      "provider": "runner",
      "effect": "observe",
      "notes": "Expected total bytes when known.",
      "source": "tools/jaiscript/fetch.hpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "Download.total() -> int"
    },
    {
      "owner": "Download",
      "name": "fraction",
      "signature": "fraction() -> float",
      "provider": "runner",
      "effect": "observe",
      "notes": "Progress ratio when total is known.",
      "source": "tools/jaiscript/fetch.hpp",
      "form": "method",
      "availability": "Standalone jaiscript.exe",
      "display": "Download.fraction() -> float"
    },
    {
      "owner": "reflect",
      "name": "is_enabled",
      "signature": "is_enabled(privileges: int or string...) -> bool",
      "provider": "core",
      "effect": "observe",
      "source": "source/implementation/engine.cpp",
      "notes": "At least one privilege; scripts query grants, hosts change them.",
      "form": "function",
      "availability": "Every engine",
      "display": "reflect::is_enabled(privileges: int or string...) -> bool"
    },
    {
      "owner": "global",
      "name": "import_recheck_interval",
      "signature": "import_recheck_interval(seconds: number) -> void",
      "provider": "core",
      "effect": "configure",
      "source": "source/implementation/engine.cpp",
      "notes": "Sets polling window; zero checks every reach.",
      "form": "function",
      "availability": "Every engine",
      "display": "import_recheck_interval(seconds: number) -> void"
    },
    {
      "owner": "math",
      "name": "vec3",
      "signature": "vec3(xy: vector2, z: number) -> math::vec3",
      "provider": "core",
      "effect": "construct",
      "source": "include/jaiscript/detail/math_values.hpp",
      "notes": "",
      "form": "function",
      "availability": "Every engine",
      "display": "math::vec3(xy: vector2, z: number) -> math::vec3"
    },
    {
      "owner": "math",
      "name": "vec4",
      "signature": "vec4(xyz: vector3, w: number) -> math::vec4",
      "provider": "core",
      "effect": "construct",
      "source": "include/jaiscript/detail/math_values.hpp",
      "notes": "",
      "form": "function",
      "availability": "Every engine",
      "display": "math::vec4(xyz: vector3, w: number) -> math::vec4"
    },
    {
      "owner": "math",
      "name": "vec4",
      "signature": "vec4(xy: vector2, z: number, w: number) -> math::vec4",
      "provider": "core",
      "effect": "construct",
      "source": "include/jaiscript/detail/math_values.hpp",
      "notes": "",
      "form": "function",
      "availability": "Every engine",
      "display": "math::vec4(xy: vector2, z: number, w: number) -> math::vec4"
    },
    {
      "owner": "math",
      "name": "ivec3",
      "signature": "ivec3(xy: vector2, z: number) -> math::ivec3",
      "provider": "core",
      "effect": "construct",
      "source": "include/jaiscript/detail/math_values.hpp",
      "notes": "",
      "form": "function",
      "availability": "Every engine",
      "display": "math::ivec3(xy: vector2, z: number) -> math::ivec3"
    },
    {
      "owner": "array<T>",
      "name": "erase",
      "signature": "erase(index: int) -> bool",
      "provider": "core",
      "effect": "mutate",
      "source": "source/implementation/builtin_methods.cpp",
      "notes": "Alias of remove(index); false without change when out of range.",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.erase(index: int) -> bool",
      "example": {
        "code": "array<int> xs = [10, 20, 30];\nprint(xs.erase(1), \" \", to_json(xs), \" \", xs.erase(9));",
        "output": "true [10,30] false"
      }
    },
    {
      "owner": "math",
      "name": "distance",
      "signature": "distance(x1: number, y1: number, x2: number, y2: number) -> float",
      "provider": "core",
      "effect": "observe",
      "notes": "Vector form; scalar-coordinate form has four arguments.",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::distance(x1: number, y1: number, x2: number, y2: number) -> float"
    },
    {
      "owner": "math",
      "name": "distance_squared",
      "signature": "distance_squared(x1: number, y1: number, x2: number, y2: number) -> number",
      "provider": "core",
      "effect": "observe",
      "notes": "Vector form; scalar-coordinate form has four arguments.",
      "source": "include/jaiscript/detail/math_intrinsics.hpp",
      "form": "function",
      "availability": "Every engine",
      "display": "math::distance_squared(x1: number, y1: number, x2: number, y2: number) -> number"
    },
    {
      "owner": "array<T>",
      "name": "append",
      "signature": "append(other: array<var> or array<T>) -> array<T>",
      "provider": "core",
      "effect": "mutate",
      "notes": "Appends the other array in place, retaining input element constraints. Same-kind primitive/string/vector buffers avoid per-element boxing. Added values copy; handles share. Returns the receiver; alias of concat.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "array<T>.append(other: array<var> or array<T>) -> array<T>",
      "example": {
        "code": "array<int> xs = [1, 2];\nxs.append([3, 4]);        // changes xs and returns it\nprint(to_json(xs));",
        "output": "[1,2,3,4]"
      }
    },
    {
      "owner": "array",
      "name": "append",
      "signature": "append(values: array<T>, other: array<T> or array<var>) -> array<T>",
      "provider": "core",
      "effect": "copy",
      "notes": "Returns a new array, preserving the first input constraints; inputs do not mutate. Same-kind typed buffers avoid boxing. Handles retain identity.",
      "source": "include/jaiscript/detail/array_namespace.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "array::append(values: array<T>, other: array<T> or array<var>) -> array<T>"
    },
    {
      "owner": "array",
      "name": "concat",
      "signature": "concat(values: array<T>, other: array<T> or array<var>) -> array<T>",
      "provider": "core",
      "effect": "copy",
      "notes": "Copying alias of array::append; inputs do not mutate.",
      "source": "include/jaiscript/detail/array_namespace.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "array::concat(values: array<T>, other: array<T> or array<var>) -> array<T>"
    },
    {
      "owner": "array",
      "name": "slice",
      "signature": "slice(values: array<T>, start: int = 0, end: int = size()) -> array<T>",
      "provider": "core",
      "effect": "copy",
      "notes": "Copies only the selected range with the input element constraints; handles retain identity.",
      "source": "include/jaiscript/detail/array_namespace.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "array::slice(values: array<T>, start: int = 0, end: int = size()) -> array<T>"
    },
    {
      "owner": "array",
      "name": "filter",
      "signature": "filter(values: array<T>, predicate: function(T[, int]) -> bool) -> array<T>",
      "provider": "core",
      "effect": "copy; callback",
      "notes": "Preserves element constraints and copies selected values only. Reference callback parameters still target live input elements.",
      "source": "include/jaiscript/detail/array_namespace.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "array::filter(values: array<T>, predicate: function(T[, int]) -> bool) -> array<T>",
      "example": {
        "code": "array<int> xs = [1, 2, 3, 4];\nprint(to_json(array::filter(xs, x => x > 2)), \" \", to_json(xs));",
        "output": "[3,4] [1,2,3,4]"
      }
    },
    {
      "owner": "array",
      "name": "map",
      "signature": "map(values: array<T>, callback: function(T[, int]) -> R) -> array<R>",
      "provider": "core",
      "effect": "copy; callback",
      "notes": "A declared callback return type R gives array<R>; an undeclared return gives an array of the results' type when they all share one, and array<var> when they differ. Reference callbacks can mutate input elements.",
      "source": "include/jaiscript/detail/array_namespace.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "array::map(values: array<T>, callback: function(T[, int]) -> R) -> array<R>",
      "example": {
        "code": "array<int> xs = [1, 2, 3];\nauto labels = array::map(xs, [](int x) -> string { return \"#\" + to_string(x); });\nprint(to_json(labels), \" \", to_json(xs));",
        "output": "[\"#1\",\"#2\",\"#3\"] [1,2,3]"
      }
    },
    {
      "owner": "array",
      "name": "sort",
      "signature": "sort(values: array<T>, predicate: function(T, T) -> bool = omitted) -> array<T>",
      "provider": "core",
      "effect": "copy; callback",
      "notes": "Returns a sorted value copy with input constraints; handles retain identity. Default numeric sorting treats signed zeros as equivalent and groups all NaNs last; an explicit predicate supplies its own order.",
      "source": "include/jaiscript/detail/array_namespace.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "array::sort(values: array<T>, predicate: function(T, T) -> bool = omitted) -> array<T>",
      "example": {
        "code": "array<int> xs = [3, 1, 2];\nprint(to_json(array::sort(xs)), \" \", to_json(xs));",
        "output": "[1,2,3] [3,1,2]"
      }
    },
    {
      "owner": "array",
      "name": "reverse",
      "signature": "reverse(values: array<T>) -> array<T>",
      "provider": "core",
      "effect": "copy",
      "notes": "Returns a reversed value copy with input constraints; handles retain identity.",
      "source": "include/jaiscript/detail/array_namespace.hpp",
      "form": "namespace",
      "availability": "Every engine",
      "display": "array::reverse(values: array<T>) -> array<T>"
    },
    {
      "owner": "string",
      "name": "append",
      "signature": "append(part: text, parts: text...) -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "Appends text in place and returns the receiver; retains receiver text kind.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "string.append(part: text, parts: text...) -> Self"
    },
    {
      "owner": "utf8_string",
      "name": "append",
      "signature": "append(part: text, parts: text...) -> Self",
      "provider": "core",
      "effect": "mutate",
      "notes": "Appends text in place and returns the receiver; retains receiver text kind.",
      "source": "source/implementation/builtin_methods.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "utf8_string.append(part: text, parts: text...) -> Self"
    },
    {
      "owner": "string",
      "name": "append",
      "signature": "append(value: text, part: text, parts: text...) -> Self",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "Returns new text; preserves first input text kind. Inputs do not mutate.",
      "source": "include/jaiscript/stdlib/strings.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "string::append(value: text, part: text, parts: text...) -> Self"
    },
    {
      "owner": "web",
      "name": "html_escape",
      "signature": "html_escape(value: text) -> same_text_kind",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "Writes & < > \" ' as &amp; &lt; &gt; &quot; &#39; (htmlspecialchars with ENT_QUOTES); every other byte, UTF-8 included, is kept.",
      "source": "include/jaiscript/stdlib/web_text.hpp",
      "form": "function",
      "availability": "register_web()",
      "display": "web::html_escape(value: text) -> same_text_kind",
      "example": {
        "code": "print(web::html_escape(\"<a title=\\\"Tom & Jerry's\\\">\"));",
        "output": "&lt;a title=&quot;Tom &amp; Jerry&#39;s&quot;&gt;"
      }
    },
    {
      "owner": "web",
      "name": "html_unescape",
      "signature": "html_unescape(value: text) -> same_text_kind",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "Reads the HTML5 named references (legacy names without the ;, longest match) and numeric ones as a browser does in text; 0, surrogates and values past U+10FFFF become U+FFFD; anything else is kept.",
      "source": "include/jaiscript/stdlib/web_text.hpp",
      "form": "function",
      "availability": "register_web()",
      "display": "web::html_unescape(value: text) -> same_text_kind",
      "example": {
        "code": "print(web::html_unescape(\"&lt;b&gt; &copy &#x41;&#66; &bogus;\"));",
        "output": "<b> © AB &bogus;"
      }
    },
    {
      "owner": "web",
      "name": "url_encode",
      "signature": "url_encode(text: text) -> string",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "RFC 3986 percent-encoding (rawurlencode): A-Z a-z 0-9 - . _ ~ stay, every other byte is %XX in upper-case hex.",
      "source": "include/jaiscript/stdlib/web_text.hpp",
      "form": "function",
      "availability": "register_web()",
      "display": "web::url_encode(text: text) -> string",
      "example": {
        "code": "print(web::url_encode(\"Snap Jaw/Social? & more\"));",
        "output": "Snap%20Jaw%2FSocial%3F%20%26%20more"
      }
    },
    {
      "owner": "web",
      "name": "url_decode",
      "signature": "url_decode(text: text) -> string",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "Each %XX becomes its byte; a % without two hex digits stays as written; + stays a +.",
      "source": "include/jaiscript/stdlib/web_text.hpp",
      "form": "function",
      "availability": "register_web()",
      "display": "web::url_decode(text: text) -> string",
      "example": {
        "code": "print(web::url_decode(\"Snap%20Jaw%2FSocial%3F\"));",
        "output": "Snap Jaw/Social?"
      }
    },
    {
      "owner": "web",
      "name": "form_encode",
      "signature": "form_encode(text: text) -> string",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "application/x-www-form-urlencoded (urlencode): A-Z a-z 0-9 * - . _ stay, a space is +, every other byte is %XX.",
      "source": "include/jaiscript/stdlib/web_text.hpp",
      "form": "function",
      "availability": "register_web()",
      "display": "web::form_encode(text: text) -> string",
      "example": {
        "code": "print(web::form_encode(\"two words & more\"));",
        "output": "two+words+%26+more"
      }
    },
    {
      "owner": "web",
      "name": "form_decode",
      "signature": "form_decode(text: text) -> string",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "url_decode that also reads + as a space.",
      "source": "include/jaiscript/stdlib/web_text.hpp",
      "form": "function",
      "availability": "register_web()",
      "display": "web::form_decode(text: text) -> string",
      "example": {
        "code": "print(web::form_decode(\"two+words+%26+more\"));",
        "output": "two words & more"
      }
    },
    {
      "owner": "web",
      "name": "parse_query",
      "signature": "parse_query(query: text) -> map<string, string>",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "Pairs split on &, form-decoded; a leading ? is skipped, a key without = is empty, an empty key is dropped, a repeated key keeps its last value.",
      "source": "include/jaiscript/stdlib/web_text.hpp",
      "form": "function",
      "availability": "register_web()",
      "display": "web::parse_query(query: text) -> map<string, string>",
      "example": {
        "code": "print(to_json(web::parse_query(\"?page=2&tag=a+b&tag=c&empty\")));",
        "output": "{\"empty\":\"\",\"page\":\"2\",\"tag\":\"c\"}"
      }
    },
    {
      "owner": "web",
      "name": "parse_query_all",
      "signature": "parse_query_all(query: text) -> map<string, var>",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "parse_query keeping every value of a key, an array<string> in arrival order.",
      "source": "include/jaiscript/stdlib/web_text.hpp",
      "form": "function",
      "availability": "register_web()",
      "display": "web::parse_query_all(query: text) -> map<string, var>",
      "example": {
        "code": "print(to_json(web::parse_query_all(\"tag=a+b&tag=c\")));",
        "output": "{\"tag\":[\"a b\",\"c\"]}"
      }
    },
    {
      "owner": "web",
      "name": "build_query",
      "signature": "build_query(fields: map) -> string",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "Keys and values form-encoded in the map's key order; a number or bool as to_string writes it, an array repeats its key, a null value is left out; anything else raises.",
      "source": "include/jaiscript/stdlib/web_text.hpp",
      "form": "function",
      "availability": "register_web()",
      "display": "web::build_query(fields: map) -> string",
      "example": {
        "code": "print(web::build_query({\"q\": \"jai script\", \"page\": 2, \"tags\": [\"a\", \"b c\"], \"skip\": null}));",
        "output": "page=2&q=jai+script&tags=a&tags=b+c"
      }
    },
    {
      "owner": "web",
      "name": "parse_url",
      "signature": "parse_url(url: text) -> web::url",
      "provider": "stdlib",
      "effect": "copy",
      "notes": "An RFC 3986 URI reference split as written: scheme, user, password, host, port (0 for none), path, query, fragment; a malformed host or port raises.",
      "source": "include/jaiscript/stdlib/web_text.hpp",
      "form": "function",
      "availability": "register_web()",
      "display": "web::parse_url(url: text) -> web::url",
      "example": {
        "code": "web::url u = web::parse_url(\"https://snapjaw.example:8443/posts/7?sort=new#comments\");\nprint(u.host, \" \", u.port, \" \", u.path, \" \", u.query);",
        "output": "snapjaw.example 8443 /posts/7 sort=new"
      }
    },
    {
      "owner": "spider",
      "name": "catch",
      "signature": "catch(url: string, options: map = {}) -> spider::Response",
      "provider": "stdlib",
      "effect": "network",
      "notes": "A GET (options.method overrides) through the host's transport; options method, headers, timeout (30 s), type, redirects (5). Errors name the call, the URL and the reason.",
      "source": "include/jaiscript/stdlib/spider.hpp",
      "form": "function",
      "availability": "register_spider() + a host transport + the network permission",
      "display": "spider::catch(url: string, options: map = {}) -> spider::Response"
    },
    {
      "owner": "spider",
      "name": "get",
      "signature": "get(url: string, options: map = {}) -> spider::Response",
      "provider": "stdlib",
      "effect": "network",
      "notes": "The plain name of spider::catch.",
      "source": "include/jaiscript/stdlib/spider.hpp",
      "form": "function",
      "availability": "register_spider() + a host transport + the network permission",
      "display": "spider::get(url: string, options: map = {}) -> spider::Response"
    },
    {
      "owner": "spider",
      "name": "sling",
      "signature": "sling(content: var, url: string, options: map = {}) -> spider::Response",
      "provider": "stdlib",
      "effect": "network",
      "notes": "A POST carrying content: text as text/plain, anything else as JSON, a map as a form with type \"form\".",
      "source": "include/jaiscript/stdlib/spider.hpp",
      "form": "function",
      "availability": "register_spider() + a host transport + the network permission",
      "display": "spider::sling(content: var, url: string, options: map = {}) -> spider::Response"
    },
    {
      "owner": "spider",
      "name": "post",
      "signature": "post(url: string, content: var, options: map = {}) -> spider::Response",
      "provider": "stdlib",
      "effect": "network",
      "notes": "The plain name of spider::sling, URL first.",
      "source": "include/jaiscript/stdlib/spider.hpp",
      "form": "function",
      "availability": "register_spider() + a host transport + the network permission",
      "display": "spider::post(url: string, content: var, options: map = {}) -> spider::Response"
    },
    {
      "owner": "spider",
      "name": "Response",
      "signature": "Response(status: int = 200, body: string = \"\") -> spider::Response",
      "provider": "stdlib",
      "effect": "construct",
      "notes": "A new response, as a server handler builds one.",
      "source": "include/jaiscript/stdlib/spider.hpp",
      "form": "function",
      "availability": "register_spider() + a host transport + the network permission",
      "display": "spider::Response(status: int = 200, body: string = \"\") -> spider::Response"
    },
    {
      "owner": "spider::Response",
      "name": "ok",
      "signature": "ok() -> bool",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "True for a 2xx status.",
      "source": "include/jaiscript/stdlib/spider.hpp",
      "form": "method",
      "availability": "register_spider()",
      "display": "spider::Response.ok() -> bool"
    },
    {
      "owner": "spider::Response",
      "name": "json",
      "signature": "json() -> var",
      "provider": "stdlib",
      "effect": "deserialize",
      "notes": "from_json of the body.",
      "source": "include/jaiscript/stdlib/spider.hpp",
      "form": "method",
      "availability": "register_spider()",
      "display": "spider::Response.json() -> var"
    },
    {
      "owner": "spider::Response",
      "name": "header",
      "signature": "header(name: string) -> string",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "The header in any spelling of its name; \"\" when absent.",
      "source": "include/jaiscript/stdlib/spider.hpp",
      "form": "method",
      "availability": "register_spider()",
      "display": "spider::Response.header(name: string) -> string"
    },
    {
      "owner": "spider::Response",
      "name": "header",
      "signature": "header(name: string, value: string) -> spider::Response&",
      "provider": "stdlib",
      "effect": "mutate",
      "notes": "Sets a header, replacing one of the same name in any spelling; chains.",
      "source": "include/jaiscript/stdlib/spider.hpp",
      "form": "method",
      "availability": "register_spider()",
      "display": "spider::Response.header(name: string, value: string) -> spider::Response&"
    },
    {
      "owner": "spider::Response",
      "name": "set_cookie",
      "signature": "set_cookie(name: string, value: string, options: map = {}) -> void",
      "provider": "stdlib",
      "effect": "mutate",
      "notes": "Adds a Set-Cookie line, the value percent-encoded; options max_age, expires, path, domain, secure, http_only (true), same_site (\"Lax\").",
      "source": "include/jaiscript/stdlib/spider.hpp",
      "form": "method",
      "availability": "register_spider()",
      "display": "spider::Response.set_cookie(name: string, value: string, options: map = {}) -> void"
    },
    {
      "owner": "spider::Response",
      "name": "clear_cookie",
      "signature": "clear_cookie(name: string, options: map = {}) -> void",
      "provider": "stdlib",
      "effect": "mutate",
      "notes": "Adds a Set-Cookie line with Max-Age=0.",
      "source": "include/jaiscript/stdlib/spider.hpp",
      "form": "method",
      "availability": "register_spider()",
      "display": "spider::Response.clear_cookie(name: string, options: map = {}) -> void"
    },
    {
      "owner": "web::url",
      "name": "to_string",
      "signature": "to_string() -> string",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "The URL the fields spell: // and the authority when there is a host, a user or a port; ? and # before a non-empty query and fragment.",
      "source": "include/jaiscript/stdlib/web_text.hpp",
      "form": "method",
      "availability": "register_web()",
      "display": "web::url.to_string() -> string",
      "example": {
        "code": "web::url u = web::parse_url(\"http://a.example/x?y=1\");\nu.path = \"/z\";\nprint(u.to_string());",
        "output": "http://a.example/z?y=1"
      }
    },
    {
      "owner": "global",
      "name": "regex",
      "signature": "regex(pattern: string = \"\", flags: string = \"\") -> regex",
      "provider": "core",
      "effect": "construct",
      "notes": "Flags i, m, s, x; literal texts compile once at load and an invalid one fails the load.",
      "source": "source/implementation/regex/regex_library.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "regex(pattern: string = \"\", flags: string = \"\") -> regex",
      "example": {
        "code": "regex r = regex(R\"((\\w+)@(\\w+))\", \"i\");\nprint(r.pattern, \" \", r.search(\"mail BOB@example now\")[2]);",
        "output": "(\\w+)@(\\w+) example"
      }
    },
    {
      "owner": "regex",
      "name": "escape",
      "signature": "escape(text: string) -> string",
      "provider": "core",
      "effect": "copy",
      "notes": "A pattern matching the text literally; keeps a utf8_string's kind.",
      "source": "source/implementation/regex/regex_library.cpp",
      "form": "function",
      "availability": "Every engine",
      "display": "regex::escape(text: string) -> string"
    },
    {
      "owner": "regex",
      "name": "matches",
      "signature": "matches(text: string) -> bool",
      "provider": "core",
      "effect": "observe",
      "notes": "The whole text, any way through the pattern.",
      "source": "source/implementation/regex/regex_library.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "regex.matches(text: string) -> bool"
    },
    {
      "owner": "regex",
      "name": "search",
      "signature": "search(text: string) -> regex::match",
      "provider": "core",
      "effect": "observe",
      "notes": "The leftmost match, or null.",
      "source": "source/implementation/regex/regex_library.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "regex.search(text: string) -> regex::match"
    },
    {
      "owner": "regex",
      "name": "search",
      "signature": "search(text: string, start: int) -> regex::match",
      "provider": "core",
      "effect": "observe",
      "notes": "From a position (bytes, or characters on a utf8_string); the text before it is the assertions' context.",
      "source": "source/implementation/regex/regex_library.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "regex.search(text: string, start: int) -> regex::match"
    },
    {
      "owner": "regex",
      "name": "find_all",
      "signature": "find_all(text: string) -> array<regex::match>",
      "provider": "core",
      "effect": "observe",
      "notes": "Left to right; an empty match moves the next search one character on.",
      "source": "source/implementation/regex/regex_library.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "regex.find_all(text: string) -> array<regex::match>"
    },
    {
      "owner": "regex",
      "name": "replace",
      "signature": "replace(text: string, replacement: string) -> string",
      "provider": "core",
      "effect": "copy",
      "notes": "$1..$99, ${n}, ${name}, $0, $$.",
      "source": "source/implementation/regex/regex_library.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "regex.replace(text: string, replacement: string) -> string",
      "example": {
        "code": "print(regex(R\"((\\w+) (\\w+))\").replace(\"ada lovelace\", \"$2, $1\"));",
        "output": "lovelace, ada"
      }
    },
    {
      "owner": "regex",
      "name": "replace",
      "signature": "replace(text: string, replacement: (regex::match) -> string) -> string",
      "provider": "core",
      "effect": "copy, callback",
      "notes": "Called once per match, in order.",
      "source": "source/implementation/regex/regex_library.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "regex.replace(text: string, replacement: (regex::match) -> string) -> string"
    },
    {
      "owner": "regex",
      "name": "replace_first",
      "signature": "replace_first(text: string, replacement: string) -> string",
      "provider": "core",
      "effect": "copy",
      "notes": "The first match only.",
      "source": "source/implementation/regex/regex_library.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "regex.replace_first(text: string, replacement: string) -> string"
    },
    {
      "owner": "regex",
      "name": "replace_first",
      "signature": "replace_first(text: string, replacement: (regex::match) -> string) -> string",
      "provider": "core",
      "effect": "copy, callback",
      "notes": "",
      "source": "source/implementation/regex/regex_library.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "regex.replace_first(text: string, replacement: (regex::match) -> string) -> string"
    },
    {
      "owner": "regex",
      "name": "split",
      "signature": "split(text: string) -> array<string>",
      "provider": "core",
      "effect": "copy",
      "notes": "ECMAScript's split; each split's groups follow its piece.",
      "source": "source/implementation/regex/regex_library.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "regex.split(text: string) -> array<string>",
      "example": {
        "code": "print(to_json(regex(R\"(\\s*,\\s*)\").split(\"a , b,c\")));",
        "output": "[\"a\",\"b\",\"c\"]"
      }
    },
    {
      "owner": "regex",
      "name": "split",
      "signature": "split(text: string, max_splits: int) -> array<string>",
      "provider": "core",
      "effect": "copy",
      "notes": "The rest stays in the last piece; a negative count is no limit.",
      "source": "source/implementation/regex/regex_library.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "regex.split(text: string, max_splits: int) -> array<string>"
    },
    {
      "owner": "regex::match",
      "name": "text",
      "signature": "text() -> string",
      "provider": "core",
      "effect": "observe",
      "notes": "The whole match (as m[0]).",
      "source": "source/implementation/regex/regex_library.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "regex::match.text() -> string"
    },
    {
      "owner": "regex::match",
      "name": "[]",
      "signature": "[](group: int | string) -> string",
      "provider": "core",
      "effect": "observe",
      "notes": "A group by number or name; null when it took no part.",
      "source": "source/implementation/regex/regex_library.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "regex::match[group: int | string] -> string"
    },
    {
      "owner": "regex::match",
      "name": "start",
      "signature": "start(group: int | string = 0) -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "-1 for a group that took no part.",
      "source": "source/implementation/regex/regex_library.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "regex::match.start(group: int | string = 0) -> int"
    },
    {
      "owner": "regex::match",
      "name": "end",
      "signature": "end(group: int | string = 0) -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "-1 for a group that took no part.",
      "source": "source/implementation/regex/regex_library.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "regex::match.end(group: int | string = 0) -> int"
    },
    {
      "owner": "regex::match",
      "name": "size",
      "signature": "size() -> int",
      "provider": "core",
      "effect": "observe",
      "notes": "The whole match and every group.",
      "source": "source/implementation/regex/regex_library.cpp",
      "form": "method",
      "availability": "Every engine",
      "display": "regex::match.size() -> int"
    },
    {
      "owner": "global",
      "name": "random",
      "signature": "random() -> random",
      "provider": "stdlib",
      "effect": "random",
      "notes": "A generator seeded from the operating system's secure generator: its draws differ every run. `random r;` declares one.",
      "source": "include/jaiscript/stdlib/random.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "random() -> random"
    },
    {
      "owner": "global",
      "name": "random",
      "signature": "random(seed: int) -> random",
      "provider": "stdlib",
      "effect": "construct",
      "notes": "A generator whose draws are fixed by the seed on every platform and backend. `random r(seed);` declares one.",
      "source": "include/jaiscript/stdlib/random.hpp",
      "form": "function",
      "availability": "register_all() or area registration",
      "display": "random(seed: int) -> random",
      "example": {
        "code": "random r(42);\nprint(r.next_int(1, 6), \" \", r.next_int(1, 6), \" \", r.next_int(1, 6));",
        "output": "1 3 5"
      }
    },
    {
      "owner": "random",
      "name": "next_int",
      "signature": "next_int(lo: int, hi: int) -> int",
      "provider": "stdlib",
      "effect": "random",
      "notes": "Uniform over lo..hi, both inclusive, unbiased; an inverted range raises.",
      "source": "include/jaiscript/stdlib/random.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "random.next_int(lo: int, hi: int) -> int"
    },
    {
      "owner": "random",
      "name": "next_float",
      "signature": "next_float() -> float",
      "provider": "stdlib",
      "effect": "random",
      "notes": "Uniform in [0, 1): the top 53 bits of a draw over 2^53.",
      "source": "include/jaiscript/stdlib/random.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "random.next_float() -> float"
    },
    {
      "owner": "random",
      "name": "next_float",
      "signature": "next_float(lo: float, hi: float) -> float",
      "provider": "stdlib",
      "effect": "random",
      "notes": "Uniform in [lo, hi); the bounds must be finite and in order.",
      "source": "include/jaiscript/stdlib/random.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "random.next_float(lo: float, hi: float) -> float"
    },
    {
      "owner": "random",
      "name": "next_bool",
      "signature": "next_bool() -> bool",
      "provider": "stdlib",
      "effect": "random",
      "notes": "The top bit of a draw.",
      "source": "include/jaiscript/stdlib/random.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "random.next_bool() -> bool"
    },
    {
      "owner": "random",
      "name": "pick",
      "signature": "pick(values: array) -> var",
      "provider": "stdlib",
      "effect": "random",
      "notes": "One element, each equally likely; an empty array raises.",
      "source": "include/jaiscript/stdlib/random.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "random.pick(values: array) -> var"
    },
    {
      "owner": "random",
      "name": "shuffle",
      "signature": "shuffle(values: array&) -> void",
      "provider": "stdlib",
      "effect": "random",
      "notes": "Shuffles the array in place (Fisher-Yates from the last element down).",
      "source": "include/jaiscript/stdlib/random.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "random.shuffle(values: array&) -> void"
    },
    {
      "owner": "random",
      "name": "next_bytes",
      "signature": "next_bytes(count: int) -> string",
      "provider": "stdlib",
      "effect": "random",
      "notes": "count bytes, eight per draw, low byte first.",
      "source": "include/jaiscript/stdlib/random.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "random.next_bytes(count: int) -> string"
    },
    {
      "owner": "random",
      "name": "seed",
      "signature": "seed(seed: int) -> void",
      "provider": "stdlib",
      "effect": "configure",
      "notes": "Restarts the generator as random(seed) would.",
      "source": "include/jaiscript/stdlib/random.hpp",
      "form": "method",
      "availability": "register_all() or area registration",
      "display": "random.seed(seed: int) -> void"
    },
    {
      "owner": "crypto",
      "name": "sha256",
      "signature": "sha256(bytes: text) -> string",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "The SHA-256 digest (FIPS 180-4) of the bytes (a utf8_string's UTF-8 bytes), 64 lowercase hex digits.",
      "source": "include/jaiscript/stdlib/crypto.hpp",
      "form": "namespace",
      "availability": "register_all() or area registration",
      "display": "crypto::sha256(bytes: text) -> string",
      "example": {
        "code": "print(crypto::sha256(\"abc\"));",
        "output": "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
      }
    },
    {
      "owner": "crypto",
      "name": "sha256_bytes",
      "signature": "sha256_bytes(bytes: text) -> string",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "The 32 raw digest bytes.",
      "source": "include/jaiscript/stdlib/crypto.hpp",
      "form": "namespace",
      "availability": "register_all() or area registration",
      "display": "crypto::sha256_bytes(bytes: text) -> string"
    },
    {
      "owner": "crypto",
      "name": "sha256_file",
      "signature": "sha256_file(path: string) -> string",
      "provider": "stdlib",
      "effect": "filesystem",
      "notes": "The SHA-256 digest of the file's bytes, streamed in chunks; a file it cannot read raises Cannot read file '<path>': <reason>.",
      "source": "include/jaiscript/stdlib/crypto.hpp",
      "form": "namespace",
      "availability": "register_all() or area registration",
      "display": "crypto::sha256_file(path: string) -> string"
    },
    {
      "owner": "crypto",
      "name": "sha512",
      "signature": "sha512(bytes: text) -> string",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "The SHA-512 digest (FIPS 180-4), 128 lowercase hex digits.",
      "source": "include/jaiscript/stdlib/crypto.hpp",
      "form": "namespace",
      "availability": "register_all() or area registration",
      "display": "crypto::sha512(bytes: text) -> string"
    },
    {
      "owner": "crypto",
      "name": "sha512_bytes",
      "signature": "sha512_bytes(bytes: text) -> string",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "The 64 raw digest bytes.",
      "source": "include/jaiscript/stdlib/crypto.hpp",
      "form": "namespace",
      "availability": "register_all() or area registration",
      "display": "crypto::sha512_bytes(bytes: text) -> string"
    },
    {
      "owner": "crypto",
      "name": "sha1",
      "signature": "sha1(bytes: text) -> string",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "SHA-1, 40 hex digits: for interoperability with formats that name it, never for security.",
      "source": "include/jaiscript/stdlib/crypto.hpp",
      "form": "namespace",
      "availability": "register_all() or area registration",
      "display": "crypto::sha1(bytes: text) -> string"
    },
    {
      "owner": "crypto",
      "name": "sha1_bytes",
      "signature": "sha1_bytes(bytes: text) -> string",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "The 20 raw digest bytes.",
      "source": "include/jaiscript/stdlib/crypto.hpp",
      "form": "namespace",
      "availability": "register_all() or area registration",
      "display": "crypto::sha1_bytes(bytes: text) -> string"
    },
    {
      "owner": "crypto",
      "name": "md5",
      "signature": "md5(bytes: text) -> string",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "MD5 (RFC 1321), 32 hex digits: for interoperability only, never for security.",
      "source": "include/jaiscript/stdlib/crypto.hpp",
      "form": "namespace",
      "availability": "register_all() or area registration",
      "display": "crypto::md5(bytes: text) -> string"
    },
    {
      "owner": "crypto",
      "name": "md5_bytes",
      "signature": "md5_bytes(bytes: text) -> string",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "The 16 raw digest bytes.",
      "source": "include/jaiscript/stdlib/crypto.hpp",
      "form": "namespace",
      "availability": "register_all() or area registration",
      "display": "crypto::md5_bytes(bytes: text) -> string"
    },
    {
      "owner": "crypto",
      "name": "hmac_sha256",
      "signature": "hmac_sha256(key: text, message: text) -> string",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "HMAC-SHA-256 (RFC 2104), hex.",
      "source": "include/jaiscript/stdlib/crypto.hpp",
      "form": "namespace",
      "availability": "register_all() or area registration",
      "display": "crypto::hmac_sha256(key: text, message: text) -> string"
    },
    {
      "owner": "crypto",
      "name": "hmac_sha256_bytes",
      "signature": "hmac_sha256_bytes(key: text, message: text) -> string",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "The 32 raw MAC bytes.",
      "source": "include/jaiscript/stdlib/crypto.hpp",
      "form": "namespace",
      "availability": "register_all() or area registration",
      "display": "crypto::hmac_sha256_bytes(key: text, message: text) -> string"
    },
    {
      "owner": "crypto",
      "name": "hmac_sha512",
      "signature": "hmac_sha512(key: text, message: text) -> string",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "HMAC-SHA-512 (RFC 2104), hex.",
      "source": "include/jaiscript/stdlib/crypto.hpp",
      "form": "namespace",
      "availability": "register_all() or area registration",
      "display": "crypto::hmac_sha512(key: text, message: text) -> string"
    },
    {
      "owner": "crypto",
      "name": "hmac_sha512_bytes",
      "signature": "hmac_sha512_bytes(key: text, message: text) -> string",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "The 64 raw MAC bytes.",
      "source": "include/jaiscript/stdlib/crypto.hpp",
      "form": "namespace",
      "availability": "register_all() or area registration",
      "display": "crypto::hmac_sha512_bytes(key: text, message: text) -> string"
    },
    {
      "owner": "crypto",
      "name": "equals",
      "signature": "equals(a: text, b: text) -> bool",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "Equal bytes, compared in time that depends only on the length.",
      "source": "include/jaiscript/stdlib/crypto.hpp",
      "form": "namespace",
      "availability": "register_all() or area registration",
      "display": "crypto::equals(a: text, b: text) -> bool"
    },
    {
      "owner": "crypto",
      "name": "random_bytes",
      "signature": "random_bytes(count: int) -> string",
      "provider": "stdlib",
      "effect": "random",
      "notes": "count bytes from the operating system's secure generator; never seedable.",
      "source": "include/jaiscript/stdlib/crypto.hpp",
      "form": "namespace",
      "availability": "register_all() or area registration",
      "display": "crypto::random_bytes(count: int) -> string"
    },
    {
      "owner": "crypto",
      "name": "random_hex",
      "signature": "random_hex(count: int) -> string",
      "provider": "stdlib",
      "effect": "random",
      "notes": "count secure random bytes as 2 * count lowercase hex digits.",
      "source": "include/jaiscript/stdlib/crypto.hpp",
      "form": "namespace",
      "availability": "register_all() or area registration",
      "display": "crypto::random_hex(count: int) -> string"
    },
    {
      "owner": "crypto",
      "name": "random_int",
      "signature": "random_int(lo: int, hi: int) -> int",
      "provider": "stdlib",
      "effect": "random",
      "notes": "A secure random int over lo..hi, both inclusive, unbiased.",
      "source": "include/jaiscript/stdlib/crypto.hpp",
      "form": "namespace",
      "availability": "register_all() or area registration",
      "display": "crypto::random_int(lo: int, hi: int) -> int"
    },
    {
      "owner": "crypto",
      "name": "password_hash",
      "signature": "password_hash(password: text, cost: int = 12) -> string",
      "provider": "stdlib",
      "effect": "random",
      "notes": "bcrypt as PHP's password_hash writes it ($2y$, a fresh 16-byte salt, cost 4 to 31); the first 72 bytes count.",
      "source": "include/jaiscript/stdlib/crypto.hpp",
      "form": "namespace",
      "availability": "register_all() or area registration",
      "display": "crypto::password_hash(password: text, cost: int = 12) -> string"
    },
    {
      "owner": "crypto",
      "name": "password_verify",
      "signature": "password_verify(password: text, hash: string) -> bool",
      "provider": "stdlib",
      "effect": "observe",
      "notes": "Checks a $2y$, $2b$, $2a$ or $2x$ bcrypt hash; any other text is false.",
      "source": "include/jaiscript/stdlib/crypto.hpp",
      "form": "namespace",
      "availability": "register_all() or area registration",
      "display": "crypto::password_verify(password: text, hash: string) -> bool"
    }
  ],
  "fields": [
    {
      "owner": "math",
      "name": "PI",
      "type": "float",
      "provider": "core",
      "access": "constant",
      "notes": "Engine-core math constant; use math::PI.",
      "source": "include/jaiscript/detail/math_namespace.hpp"
    },
    {
      "owner": "math",
      "name": "E",
      "type": "float",
      "provider": "core",
      "access": "constant",
      "notes": "Engine-core math constant; use math::E.",
      "source": "include/jaiscript/detail/math_namespace.hpp"
    },
    {
      "owner": "global",
      "name": "skip_newline",
      "type": "print token",
      "provider": "stdlib",
      "access": "constant",
      "notes": ""
    },
    {
      "owner": "global",
      "name": "skip_flush",
      "type": "print token",
      "provider": "stdlib",
      "access": "constant",
      "notes": ""
    },
    {
      "owner": "global",
      "name": "ARGS",
      "type": "array<string>",
      "provider": "runner",
      "access": "read/write",
      "notes": "Arguments following --, not the executable flags."
    },
    {
      "owner": "string",
      "name": "whitespace",
      "type": "string",
      "provider": "stdlib",
      "access": "constant",
      "notes": "Space, tab, LF, VT, FF, CR; split() whitespace sentinel."
    },
    {
      "owner": "jai",
      "name": "filesystem",
      "type": "int privilege flag",
      "provider": "core",
      "access": "constant",
      "notes": ""
    },
    {
      "owner": "jai",
      "name": "force",
      "type": "import directive",
      "provider": "core",
      "access": "constant",
      "notes": "Trailing argument to import(paths, jai::force)."
    },
    {
      "owner": "binary",
      "name": "int8",
      "type": "binary::width",
      "provider": "core",
      "access": "constant",
      "notes": ""
    },
    {
      "owner": "binary",
      "name": "int16",
      "type": "binary::width",
      "provider": "core",
      "access": "constant",
      "notes": ""
    },
    {
      "owner": "binary",
      "name": "int32",
      "type": "binary::width",
      "provider": "core",
      "access": "constant",
      "notes": ""
    },
    {
      "owner": "binary",
      "name": "int64",
      "type": "binary::width",
      "provider": "core",
      "access": "constant",
      "notes": ""
    },
    {
      "owner": "binary",
      "name": "uint8",
      "type": "binary::width",
      "provider": "core",
      "access": "constant",
      "notes": ""
    },
    {
      "owner": "binary",
      "name": "uint16",
      "type": "binary::width",
      "provider": "core",
      "access": "constant",
      "notes": ""
    },
    {
      "owner": "binary",
      "name": "uint32",
      "type": "binary::width",
      "provider": "core",
      "access": "constant",
      "notes": ""
    },
    {
      "owner": "binary",
      "name": "float32",
      "type": "binary::width",
      "provider": "core",
      "access": "constant",
      "notes": ""
    },
    {
      "owner": "binary",
      "name": "float64",
      "type": "binary::width",
      "provider": "core",
      "access": "constant",
      "notes": ""
    },
    {
      "owner": "time::date",
      "name": "year",
      "type": "int",
      "provider": "stdlib",
      "access": "read/write",
      "notes": "Validated calendar field."
    },
    {
      "owner": "time::date",
      "name": "month",
      "type": "int",
      "provider": "stdlib",
      "access": "read/write",
      "notes": "Validated calendar field."
    },
    {
      "owner": "time::date",
      "name": "day",
      "type": "int",
      "provider": "stdlib",
      "access": "read/write",
      "notes": "Validated calendar field."
    },
    {
      "owner": "time::date",
      "name": "hour",
      "type": "int",
      "provider": "stdlib",
      "access": "read/write",
      "notes": "Validated calendar field."
    },
    {
      "owner": "time::date",
      "name": "minute",
      "type": "int",
      "provider": "stdlib",
      "access": "read/write",
      "notes": "Validated calendar field."
    },
    {
      "owner": "time::date",
      "name": "second",
      "type": "int",
      "provider": "stdlib",
      "access": "read/write",
      "notes": "Validated calendar field."
    },
    {
      "owner": "time::date",
      "name": "millisecond",
      "type": "int",
      "provider": "stdlib",
      "access": "read/write",
      "notes": "Validated calendar field."
    },
    {
      "owner": "time::date",
      "name": "weekday",
      "type": "int",
      "provider": "stdlib",
      "access": "read-only",
      "notes": ""
    },
    {
      "owner": "time::date",
      "name": "yearday",
      "type": "int",
      "provider": "stdlib",
      "access": "read-only",
      "notes": ""
    },
    {
      "owner": "time::date",
      "name": "utc",
      "type": "bool",
      "provider": "stdlib",
      "access": "read-only",
      "notes": ""
    },
    {
      "owner": "math::vec2",
      "name": "x",
      "type": "float",
      "provider": "core",
      "access": "read/write",
      "notes": "Component narrows to int32 or float32."
    },
    {
      "owner": "math::vec2",
      "name": "y",
      "type": "float",
      "provider": "core",
      "access": "read/write",
      "notes": "Component narrows to int32 or float32."
    },
    {
      "owner": "math::vec2",
      "name": "width",
      "type": "float",
      "provider": "core",
      "access": "read/write",
      "notes": "Alias of corresponding component."
    },
    {
      "owner": "math::vec2",
      "name": "height",
      "type": "float",
      "provider": "core",
      "access": "read/write",
      "notes": "Alias of corresponding component."
    },
    {
      "owner": "math::vec3",
      "name": "x",
      "type": "float",
      "provider": "core",
      "access": "read/write",
      "notes": "Component narrows to int32 or float32."
    },
    {
      "owner": "math::vec3",
      "name": "y",
      "type": "float",
      "provider": "core",
      "access": "read/write",
      "notes": "Component narrows to int32 or float32."
    },
    {
      "owner": "math::vec3",
      "name": "z",
      "type": "float",
      "provider": "core",
      "access": "read/write",
      "notes": "Component narrows to int32 or float32."
    },
    {
      "owner": "math::vec3",
      "name": "width",
      "type": "float",
      "provider": "core",
      "access": "read/write",
      "notes": "Alias of corresponding component."
    },
    {
      "owner": "math::vec3",
      "name": "height",
      "type": "float",
      "provider": "core",
      "access": "read/write",
      "notes": "Alias of corresponding component."
    },
    {
      "owner": "math::vec3",
      "name": "depth",
      "type": "float",
      "provider": "core",
      "access": "read/write",
      "notes": "Alias of corresponding component."
    },
    {
      "owner": "math::vec4",
      "name": "x",
      "type": "float",
      "provider": "core",
      "access": "read/write",
      "notes": "Component narrows to int32 or float32."
    },
    {
      "owner": "math::vec4",
      "name": "y",
      "type": "float",
      "provider": "core",
      "access": "read/write",
      "notes": "Component narrows to int32 or float32."
    },
    {
      "owner": "math::vec4",
      "name": "z",
      "type": "float",
      "provider": "core",
      "access": "read/write",
      "notes": "Component narrows to int32 or float32."
    },
    {
      "owner": "math::vec4",
      "name": "w",
      "type": "float",
      "provider": "core",
      "access": "read/write",
      "notes": "Component narrows to int32 or float32."
    },
    {
      "owner": "math::vec4",
      "name": "width",
      "type": "float",
      "provider": "core",
      "access": "read/write",
      "notes": "Alias of corresponding component."
    },
    {
      "owner": "math::vec4",
      "name": "height",
      "type": "float",
      "provider": "core",
      "access": "read/write",
      "notes": "Alias of corresponding component."
    },
    {
      "owner": "math::vec4",
      "name": "depth",
      "type": "float",
      "provider": "core",
      "access": "read/write",
      "notes": "Alias of corresponding component."
    },
    {
      "owner": "math::ivec2",
      "name": "x",
      "type": "int",
      "provider": "core",
      "access": "read/write",
      "notes": "Component narrows to int32 or float32."
    },
    {
      "owner": "math::ivec2",
      "name": "y",
      "type": "int",
      "provider": "core",
      "access": "read/write",
      "notes": "Component narrows to int32 or float32."
    },
    {
      "owner": "math::ivec2",
      "name": "width",
      "type": "int",
      "provider": "core",
      "access": "read/write",
      "notes": "Alias of corresponding component."
    },
    {
      "owner": "math::ivec2",
      "name": "height",
      "type": "int",
      "provider": "core",
      "access": "read/write",
      "notes": "Alias of corresponding component."
    },
    {
      "owner": "math::ivec3",
      "name": "x",
      "type": "int",
      "provider": "core",
      "access": "read/write",
      "notes": "Component narrows to int32 or float32."
    },
    {
      "owner": "math::ivec3",
      "name": "y",
      "type": "int",
      "provider": "core",
      "access": "read/write",
      "notes": "Component narrows to int32 or float32."
    },
    {
      "owner": "math::ivec3",
      "name": "z",
      "type": "int",
      "provider": "core",
      "access": "read/write",
      "notes": "Component narrows to int32 or float32."
    },
    {
      "owner": "math::ivec3",
      "name": "width",
      "type": "int",
      "provider": "core",
      "access": "read/write",
      "notes": "Alias of corresponding component."
    },
    {
      "owner": "math::ivec3",
      "name": "height",
      "type": "int",
      "provider": "core",
      "access": "read/write",
      "notes": "Alias of corresponding component."
    },
    {
      "owner": "math::ivec3",
      "name": "depth",
      "type": "int",
      "provider": "core",
      "access": "read/write",
      "notes": "Alias of corresponding component."
    },
    {
      "owner": "math::color",
      "name": "r",
      "type": "float",
      "provider": "core",
      "access": "read/write",
      "notes": "float32 component."
    },
    {
      "owner": "math::color",
      "name": "g",
      "type": "float",
      "provider": "core",
      "access": "read/write",
      "notes": "float32 component."
    },
    {
      "owner": "math::color",
      "name": "b",
      "type": "float",
      "provider": "core",
      "access": "read/write",
      "notes": "float32 component."
    },
    {
      "owner": "math::color",
      "name": "a",
      "type": "float",
      "provider": "core",
      "access": "read/write",
      "notes": "float32 component."
    },
    {
      "owner": "pair",
      "name": "first",
      "type": "var",
      "provider": "stdlib",
      "access": "read/write",
      "notes": "Map iteration keys remain protected from mutation."
    },
    {
      "owner": "pair",
      "name": "second",
      "type": "var",
      "provider": "stdlib",
      "access": "read/write",
      "notes": "Map iteration keys remain protected from mutation."
    },
    {
      "owner": "caught error",
      "name": "message",
      "type": "string",
      "provider": "core",
      "access": "read-only",
      "notes": "Available on the caught error value, not ordinary text."
    },
    {
      "owner": "caught error",
      "name": "file",
      "type": "string",
      "provider": "core",
      "access": "read-only",
      "notes": "Available on the caught error value, not ordinary text."
    },
    {
      "owner": "caught error",
      "name": "line",
      "type": "int",
      "provider": "core",
      "access": "read-only",
      "notes": "Available on the caught error value, not ordinary text."
    },
    {
      "owner": "caught error",
      "name": "column",
      "type": "int",
      "provider": "core",
      "access": "read-only",
      "notes": "Available on the caught error value, not ordinary text."
    },
    {
      "owner": "caught error",
      "name": "stack",
      "type": "array<string>",
      "provider": "core",
      "access": "read-only",
      "notes": "Available on the caught error value, not ordinary text."
    },
    {
      "owner": "caught error",
      "name": "value",
      "type": "var",
      "provider": "core",
      "access": "read-only",
      "notes": "Available on the caught error value, not ordinary text."
    },
    {
      "owner": "NetChannel",
      "name": "on_packet",
      "type": "Signal",
      "provider": "runner",
      "access": "receiver view",
      "notes": "Packets carry bytes; disconnect carries reason; connect has no payload."
    },
    {
      "owner": "NetChannel",
      "name": "on_connect",
      "type": "Signal",
      "provider": "runner",
      "access": "receiver view",
      "notes": "Packets carry bytes; disconnect carries reason; connect has no payload."
    },
    {
      "owner": "NetChannel",
      "name": "on_disconnect",
      "type": "Signal",
      "provider": "runner",
      "access": "receiver view",
      "notes": "Packets carry bytes; disconnect carries reason; connect has no payload."
    },
    {
      "owner": "NetServer",
      "name": "on_client_connect",
      "type": "Signal",
      "provider": "runner",
      "access": "receiver view",
      "notes": "Payload starts with client id, then bytes or reason where applicable."
    },
    {
      "owner": "NetServer",
      "name": "on_client_packet",
      "type": "Signal",
      "provider": "runner",
      "access": "receiver view",
      "notes": "Payload starts with client id, then bytes or reason where applicable."
    },
    {
      "owner": "NetServer",
      "name": "on_client_disconnect",
      "type": "Signal",
      "provider": "runner",
      "access": "receiver view",
      "notes": "Payload starts with client id, then bytes or reason where applicable."
    },
    {
      "owner": "web::url",
      "name": "scheme",
      "type": "string",
      "provider": "stdlib",
      "access": "read/write",
      "notes": "web::parse_url's part, as written",
      "source": "include/jaiscript/stdlib/web_text.hpp"
    },
    {
      "owner": "web::url",
      "name": "user",
      "type": "string",
      "provider": "stdlib",
      "access": "read/write",
      "notes": "web::parse_url's part, as written",
      "source": "include/jaiscript/stdlib/web_text.hpp"
    },
    {
      "owner": "web::url",
      "name": "password",
      "type": "string",
      "provider": "stdlib",
      "access": "read/write",
      "notes": "web::parse_url's part, as written",
      "source": "include/jaiscript/stdlib/web_text.hpp"
    },
    {
      "owner": "web::url",
      "name": "host",
      "type": "string",
      "provider": "stdlib",
      "access": "read/write",
      "notes": "web::parse_url's part, as written",
      "source": "include/jaiscript/stdlib/web_text.hpp"
    },
    {
      "owner": "web::url",
      "name": "port",
      "type": "int",
      "provider": "stdlib",
      "access": "read/write",
      "notes": "0 when the URL names no port",
      "source": "include/jaiscript/stdlib/web_text.hpp"
    },
    {
      "owner": "web::url",
      "name": "path",
      "type": "string",
      "provider": "stdlib",
      "access": "read/write",
      "notes": "web::parse_url's part, as written",
      "source": "include/jaiscript/stdlib/web_text.hpp"
    },
    {
      "owner": "web::url",
      "name": "query",
      "type": "string",
      "provider": "stdlib",
      "access": "read/write",
      "notes": "web::parse_url's part, as written",
      "source": "include/jaiscript/stdlib/web_text.hpp"
    },
    {
      "owner": "web::url",
      "name": "fragment",
      "type": "string",
      "provider": "stdlib",
      "access": "read/write",
      "notes": "web::parse_url's part, as written",
      "source": "include/jaiscript/stdlib/web_text.hpp"
    },
    {
      "owner": "spider::Response",
      "name": "status",
      "type": "int",
      "provider": "stdlib",
      "access": "read/write",
      "notes": "The status code.",
      "source": "include/jaiscript/stdlib/spider.hpp"
    },
    {
      "owner": "spider::Response",
      "name": "headers",
      "type": "map<string, string>",
      "provider": "stdlib",
      "access": "read/write",
      "notes": "A received answer's names lowercased, repeats joined with \", \".",
      "source": "include/jaiscript/stdlib/spider.hpp"
    },
    {
      "owner": "spider::Response",
      "name": "cookies",
      "type": "array<string>",
      "provider": "stdlib",
      "access": "read/write",
      "notes": "The Set-Cookie lines, one per cookie.",
      "source": "include/jaiscript/stdlib/spider.hpp"
    },
    {
      "owner": "spider::Response",
      "name": "body",
      "type": "string",
      "provider": "stdlib",
      "access": "read/write",
      "notes": "",
      "source": "include/jaiscript/stdlib/spider.hpp"
    },
    {
      "owner": "spider::Response",
      "name": "url",
      "type": "string",
      "provider": "stdlib",
      "access": "read/write",
      "notes": "The URL that answered, after redirects.",
      "source": "include/jaiscript/stdlib/spider.hpp"
    },
    {
      "owner": "regex",
      "name": "pattern",
      "type": "string",
      "provider": "core",
      "access": "read-only",
      "notes": "Saved by to_json and from_json.",
      "source": "source/implementation/regex/regex_library.cpp"
    },
    {
      "owner": "regex",
      "name": "flags",
      "type": "string",
      "provider": "core",
      "access": "read-only",
      "notes": "",
      "source": "source/implementation/regex/regex_library.cpp"
    },
    {
      "owner": "random",
      "name": "state",
      "type": "string",
      "provider": "stdlib",
      "access": "read/write",
      "notes": "The generator's state as 64 hex digits; storing it resumes the stream exactly.",
      "source": "include/jaiscript/stdlib/random.hpp"
    }
  ]
}
