![]() |
libghostty
|
Convenience functions for working with the low-level C ABI in WebAssembly builds. These are only available the libghostty-vt wasm module.
Ghostty relies on pointers to various types for ABI compatibility, and creating those pointers in Wasm can be tedious. These functions provide a purely additive set of utilities that simplify memory management in Wasm environments without changing the core C library API.
Use ghostty_wasm_alloc() and ghostty_wasm_free() for host-owned scratch buffers and ABI values. Dynamic-language hosts can use ghostty_type_json() to discover pointer and size_t widths, maximum alignment, byte order, and the size and alignment of public C structs. Do not mix allocation families: buffers returned by libghostty-vt allocating APIs must still be released with ghostty_free(), and opaque handles must be released with their type-specific destructor.
An exported function may grow Wasm linear memory when it allocates. Numeric pointers and handles remain valid, but JavaScript ArrayBuffer, DataView, and typed-array objects created before the growth may no longer cover the live memory. Reacquire exports.memory.buffer immediately before every host-side memory access. A host that caches views should recreate them whenever either the buffer identity or its byte length changes.
Here's a simple example that creates a terminal, writes bytes, and safely handles memory growth:
Functions | |
| GHOSTTY_API void * | ghostty_wasm_alloc (size_t len) |
| GHOSTTY_API void | ghostty_wasm_free (void *ptr, size_t len) |
| GHOSTTY_API void ** | ghostty_wasm_alloc_opaque (void) |
| GHOSTTY_API void | ghostty_wasm_free_opaque (void **ptr) |
| GHOSTTY_API void * | ghostty_wasm_take_opaque (void **slot) |
| GHOSTTY_API void * ghostty_wasm_alloc | ( | size_t | len | ) |
Allocate caller-owned storage for a Wasm ABI value or scratch buffer.
The returned address is aligned to the target's maximum C ABI alignment, reported as abi.max_alignment by ghostty_type_json(). The memory is uninitialized. A zero-length request returns NULL.
The returned pointer must be released with ghostty_wasm_free() using the exact same length.
| len | Number of bytes to allocate |
References ghostty_wasm_alloc().
Referenced by ghostty_wasm_alloc().
| GHOSTTY_API void ** ghostty_wasm_alloc_opaque | ( | void | ) |
Allocate an opaque pointer. This can be used for any opaque pointer types such as GhosttyKeyEncoder, GhosttyKeyEvent, etc. The allocated slot is initialized to NULL and may be reused across constructors.
References ghostty_wasm_alloc_opaque().
Referenced by ghostty_wasm_alloc_opaque().
| GHOSTTY_API void ghostty_wasm_free | ( | void * | ptr, |
| size_t | len ) |
Free storage allocated by ghostty_wasm_alloc().
| ptr | Pointer to free, or NULL (NULL is safely ignored) |
| len | Original allocation length passed to ghostty_wasm_alloc() |
References ghostty_wasm_free().
Referenced by ghostty_wasm_free().
| GHOSTTY_API void ghostty_wasm_free_opaque | ( | void ** | ptr | ) |
Free an opaque pointer allocated by ghostty_wasm_alloc_opaque().
| ptr | Pointer to free, or NULL (NULL is safely ignored) |
References ghostty_wasm_free_opaque().
Referenced by ghostty_wasm_free_opaque().
| GHOSTTY_API void * ghostty_wasm_take_opaque | ( | void ** | slot | ) |
Take an opaque handle from an out-parameter slot.
Returns the handle currently stored in slot and resets the slot to NULL. This function does not allocate, free the returned handle, or free the slot. Always check the GhosttyResult returned by the function that populated the slot before calling this function.
| slot | Pointer to an opaque out-parameter slot, or NULL |
References ghostty_wasm_take_opaque().
Referenced by ghostty_wasm_take_opaque().