The Standard Library

The standard library is the core selling point for Eryx. This section of the documentation contains pages discussing many of the built in libraries. Some libraries, or groups of libraries, are too complex to be aptly described in a single page, and instead have their own sections.

The remainder of this page lists out every available library. Each available library is categorised into one of the following statuses:

Status Meaning
Complete The library is complete and fully usable
Mostly complete The library is mature but not complete, but what is present is usable
Partial The library is partially complete, but what is present is usable
Unusable The library is in an early stage of development, and is not expected to work properly
Planned The library does not exist yet

Core language features

Library Status Description
@eryx/luau Complete Access to luau language features (analysis, compiling)
@eryx/task Complete Concurrency helpers
@eryx/thread Complete Isolated child runtimes backed by OS threads
@eryx/number Complete Arbitrary-precision integers, rationals, and floats
@eryx/exception Complete Exception formatting and helpers
@eryx/_ffi Win32, Partial[1] Low-level foreign function interfaces
Marshall Planned Binary-encoded format of Luau objects

Development utilities

Library Status Description
@eryx/pprint Complete Data pretty-printer
@eryx/schema Complete Runtime type checking, and some more complex checks too
@eryx/test Complete Unit testing framework
@eryx/signal Complete Provides signals that can be subscribed to
@eryx/date Complete Dates and times with timezone support
@eryx/logging Complete Structured logging utilities
@eryx/stream Complete Types for interacting with Streams
@eryx/debugger Complete Breakpoint debugger with stepping and inspection
@eryx/iter Complete Lazy iterator and sequence utilities
@eryx/queue Complete Queue, deque, and priority queue containers
@eryx/semver Complete Semantic version parsing, comparison, and ranges
@eryx/capability Complete Optional-module loading and feature-gating helpers
@eryx/caching Mostly complete[2] In-memory caches (LRU/TTL) and memoization
@eryx/project Mostly complete[3] Project manifest and lockfile parsing
Retry helpers Planned Helpers for retrying failed actions

Text processing

Library Status Description
@eryx/regex Complete Regular expression support (PCRE2)
@eryx/unicode Complete Manipulation of Unicode strings
@eryx/text Complete Text utilities: wrapping, indenting, trimming

Command-line interface

Library Status Description
@eryx/stdio Mostly complete[5] Standard input and output interact
@eryx/argparse Partial[4] Command-line option parser
Curses? Maybe? Or just our own TUI Planned Basic terminal UI functionality

I/O and OS operations

Library Status Description
@eryx/os Mostly complete[6] OS interactions
@eryx/fs Mostly complete[7] Filesystem operations
@eryx/path Mostly complete High level lexical filesystem path parsing and helpers
@eryx/vfs Mostly complete[8] Virtual filesystem operations
@eryx/fs_watch Complete High level filesystem watcher bindings
@eryx/_fs_watch Complete Low level interface consumed by fs_watch
@eryx/glob Complete Filesystem search using globs
@eryx/tempfile Complete Creation and management of temporary files and folders
@eryx/serial Mostly complete[9] Serial port I/O (RS-232, USB CDC)
Windows registry Planned Access to the Windows registry

Networking

Library Status Description
@eryx/http Mostly complete[10] HTTP client and server
@eryx/net Complete Basic TCP client and server
@eryx/websocket Mostly complete[11] Websocket client and server
@eryx/mime Mostly complete[12] MIME type detection
@eryx/_socket Complete Low level BSD-style socket interface
@eryx/ip Complete Parsing and manipulation of IP addresses and network ranges
@eryx/uri Mostly complete[13] RFC 3986 URI/URL parsing and validation
@eryx/uuid Complete RFC 9562 UUID generation, parsing, and formatting
@eryx/_ssl Mostly Complete[14] Low level SSL interface to be used with _socket
RPC Planned RCON, JSON-RPC, XML-RPC
Email Planned
FTP Planned Support for the FTP protocol
IMAP Planned Support for the IMAP protocol
SMTP Planned Support for the SMTP protocol
JWT Planned Creation and manipulation of JWTs

Databases

Library Status Description
@eryx/sqlite3 Complete Bindings for SQLite3 databases

Encoding

Library Status Description
@eryx/encoding/base64 Complete Base64 encoding and decoding
@eryx/encoding/base85 Complete Base85 encoding and decoding
@eryx/encoding/base32 Complete Base32 encoding and decoding
@eryx/encoding/hex Complete HEX encoding and decoding
@eryx/encoding/url Complete URL-escape encoding and decoding

Text-based data formats

Library Status Description
@eryx/data/csv Complete CSV parser and writer
@eryx/data/json Complete JSON parser and writer
@eryx/data/xml Complete XML parser and writer
@eryx/data/yaml Mostly complete[15] YAML parser and writer
@eryx/data/toml Complete TOML parser and writer, with a format-preserving CST

Compression and archives

Library Status Description
@eryx/compression/brotli Complete Brotli compression and decompression
@eryx/compression/bzip2 Complete BZip2 compression and decompression
@eryx/compression/gzip Complete GZip compression and decompression
@eryx/compression/zlib Complete Zlib compression and decompression
@eryx/compression/zstd Complete Zstandard compression and decompression
@eryx/archive/zip Mostly complete[16] Zip file manipulation
@eryx/archive/tar Partial[17] Tar archive reading

Cryptography

Library Status Description
@eryx/crypto/password Complete High level password hashing
@eryx/crypto/secretbox Complete High level authenticated encryption
@eryx/crypto/hmac Complete High level HMACs
@eryx/crypto/hash Complete High level message digests
@eryx/crypto/hazmat/aes Complete AES ciphers
@eryx/crypto/hazmat/camellia Complete Camellia ciphers
@eryx/crypto/hazmat/chacha20 Complete ChaCha20 ciphers
@eryx/crypto/hazmat/des Complete 3DES ciphers
@eryx/crypto/hazmat/rsa Complete RSA ciphers
@eryx/crypto/hazmat/hash Complete Various hashing functions
@eryx/crypto/hazmat/hmac Complete HMAC generation
@eryx/crypto/hazmat/kdf Complete Key derivation functions
@eryx/crypto/hazmat/pem Complete PEM/DER format support
@eryx/crypto/hazmat/pkcs7 Complete PKCS#7 block padding
@eryx/crypto/hazmat/random Complete Secure random number and data generator
@eryx/crypto/hazmat/ecc Partial ECC keys, ECDSA signing, ECDH derivation
@eryx/crypto/hazmat/argon2 Partial Argon2d, Argon2i, and Argon2id hashing
@eryx/crypto/hazmat/asn1 Unusable[18] ASN1 format support

Text file formats

Library Status Description
@eryx/template Complete Templating engine

Multimedia and interfaces

Library Status Description
@eryx/font Complete Font loading, shaping (HarfBuzz), and rasterization (FreeType)
@eryx/image Partial[21] Support for various image formats
@eryx/gui Mostly complete[22] Native GUI toolkit (wxWidgets)
@eryx/webview Win32, Unusable[19] Create and manipulate native WebView browsers
@eryx/webui Unusable[20] Wrapper for webview proving convenient JS<->Eryx communication
Audio Planned Support for various audio formats

First party packages

These are maintained alongside Eryx but ship as standalone packages rather than as part of the core standard library.

Package Status Description
@eryxdoc Complete Documentation generation engine
@markdown Mostly complete[23] Markdown parser
  1. Currently only supports Windows, and likely has GC-related problems. A new replacement is being developed. ↩︎

  2. TTL expiry is pruned by a full scan on each access (O(n) per operation), and the default clock is CPU time rather than wall-clock ↩︎

  3. Read/parse-focused; there are no typed mutation helpers, so edits must be made through the raw CST view ↩︎

  4. Still lacks some advanced CLI ergonomics, but now supports variadic positionals, multi-value options, mutually exclusive groups, and generated shell completion scripts ↩︎

  5. Missing higher-level terminal controls (cursor/screen management, key events), though raw mode and configurable line terminators are supported ↩︎

  6. No OS signals, no users/groups, no resource limits, no forking ↩︎

  7. No access to permissions, potentially other missing features ↩︎

  8. Library not sufficiently tested to be confidently complete ↩︎

  9. No flow-control configuration, POSIX is limited to the standard baud-rate table, and macOS port enumeration lacks VID/PID metadata ↩︎

  10. Lacks proxy support ↩︎

  11. Full RFC 6455 client and server (ws:// and wss://) with fragmentation, ping/pong, the close handshake, and RFC 7692 permessage-deflate. End-to-end behaviour is thinly tested, it is tightly coupled to the HTTP server internals, and 64-bit payload lengths are truncated to 32 bits ↩︎

  12. Extension map (~110 types) plus content sniffing with magic-byte signatures. Some heuristics are loose, there is no reverse (mime->extension) lookup, and content-sniffing test coverage is thin ↩︎

  13. IPv6 host validation is loose, there is no normalization/resolution or serialization back to a string, and the module currently has no test suite ↩︎

  14. No mTLS support, no ALPN, no cipher suite selection, no OCSP ↩︎

  15. Subset of YAML 1.2 ↩︎

  16. In-memory only (no streaming or direct file I/O), each write rebuilds the whole archive (no incremental append/update/delete), and there is no password/encryption support ↩︎

  17. Read-only by design. Supports many variations of tar (ustar, GNU long names, PAX, sparse files, base-256 fields) but not archive creation, and link entries are surfaced as metadata only (no extraction) ↩︎

  18. Very patchy hand-written code, lacking almost all important ASN1 features ↩︎

  19. Bare-bones wrapper for WebView2 on windows, but no support for other platforms ↩︎

  20. Missing most things that make wrapping a webview useful ↩︎

  21. Missing most image manipulation features ↩︎

  22. Data binding is coarse (full-replace, with no incremental update, sorting, or in-place editing) ↩︎

  23. Inline parsing follows CommonMark and is tested against the CommonMark and GFM suites; block extensions (tables, footnotes, admonitions, tabs) are complete, but some inline extensions have rough edges (e.g. inline footnotes don't support spaced labels), and the interface for specifying custom extensions is a little round around the edges. ↩︎