# "Standard Lua Libraries"
_Path: en/lua/core/base_
> "Core Lua libraries automatically available in all Wippy processes. No require() needed."
## Table of Contents
- Standard Lua Libraries
## Content
# Standard Lua Libraries
These core Lua libraries are available in every executable Lua entry without `require()`.
This is an API reference. Signature blocks list available functions, while the longer blocks are isolated examples or partial patterns rather than complete entries. Names such as `check_health` and `process_request` represent application callbacks.
### Type and Conversion
```lua
type(value) -- Returns: "nil", "number", "string", "boolean", "table", "function", "thread", "userdata"
tonumber(s [,base]) -- Convert to number, optional base (2-36)
tostring(value) -- Convert to string, calls __tostring metamethod
```
### Assertions and Errors
```lua
assert(v [,msg]) -- Raises error if v is false/nil, returns v otherwise
error(msg [,level]) -- Raises error at specified stack level (default 1)
pcall(fn, ...) -- Protected call, returns ok, result_or_error
xpcall(fn, errh) -- Protected call with error handler function
```
### Table Iteration
```lua
pairs(t) -- Iterate all key-value pairs
ipairs(t) -- Iterate array portion (1, 2, 3, ...)
next(t [,index]) -- Get next key-value pair after index
```
### Metatables
```lua
getmetatable(obj) -- Get metatable (or __metatable field if protected)
setmetatable(t, mt) -- Set metatable, returns t
```
### Raw Table Access
Bypass metamethods for direct table access:
```lua
rawget(t, k) -- Get t[k] without __index
rawset(t, k, v) -- Set t[k]=v without __newindex
rawequal(a, b) -- Compare without __eq
```
### Utilities
```lua
select(index, ...) -- Return args from index onwards
select("#", ...) -- Return number of args
unpack(t [,i [,j]]) -- Return t[i] through t[j] as multiple values
print(...) -- Print values (uses structured logging in Wippy)
```
### Global Variables
```lua
_G -- The global environment table
_VERSION -- Lua version string
```
## Table Manipulation
The `table` library provides in-place array operations, sorting, concatenation, and unpacking:
```lua
table.insert(t, [pos,] value) -- Insert value at pos (default: end)
table.remove(t [,pos]) -- Remove and return element at pos (default: last)
table.concat(t [,sep [,i [,j]]]) -- Concatenate array elements with separator
table.sort(t [,comp]) -- Sort in place, comp(a,b) returns true if a < b
table.unpack(t [,i [,j]]) -- Unpack table elements as multiple values
table.create(narr, nhash) -- Preallocate table with array and hash capacity
table.freeze(t) -- Make table immutable, returns t
table.isfrozen(t) -- true if table is immutable
```
```lua
local items = {"a", "b", "c"}
table.insert(items, "d") -- {"a", "b", "c", "d"}
table.insert(items, 2, "x") -- {"a", "x", "b", "c", "d"}
table.remove(items, 2) -- {"a", "b", "c", "d"}, returns "x"
local csv = table.concat(items, ",") -- "a,b,c,d"
table.sort(items, function(a, b)
return a > b -- Descending order
end)
```
## String Operations
String functions are also available as methods on string values.
### Pattern Matching
```lua
string.find(s, pattern [,init [,plain]]) -- Find pattern, returns start, end, captures
string.match(s, pattern [,init]) -- Extract matching substring
string.gmatch(s, pattern) -- Iterator over all matches
string.gsub(s, pattern, repl [,n]) -- Replace matches, returns string, count
```
### Case Conversion
```lua
string.upper(s) -- Convert to uppercase
string.lower(s) -- Convert to lowercase
```
### Substrings and Characters
```lua
string.sub(s, i [,j]) -- Substring from i to j (negative indexes from end)
string.len(s) -- String length (or use #s)
string.byte(s [,i [,j]]) -- Numeric codes of characters
string.char(...) -- Create string from character codes
string.rep(s, n) -- Repeat string n times
string.reverse(s) -- Reverse string
```
### Formatting
```lua
string.format(fmt, ...) -- Printf-style formatting
string.pack(fmt, ...) -- Pack values into a binary string
string.unpack(fmt, s [,pos]) -- Unpack binary string, returns values and next position
string.packsize(fmt) -- Size in bytes of a packed format
```
Format specifiers: `%d` (integer), `%f` (float), `%s` (string), `%q` (quoted), `%x` (hex), `%o` (octal), `%e` (scientific), `%%` (literal %)
```lua
local s = "Hello, World!"
-- Pattern matching
local start, stop = string.find(s, "World") -- 8, 12
local word = string.match(s, "%w+") -- "Hello"
-- Substitution
local new = string.gsub(s, "World", "Wippy") -- "Hello, Wippy!"
-- Method syntax
local upper = s:upper() -- "HELLO, WORLD!"
local part = s:sub(1, 5) -- "Hello"
```
### Patterns
| Pattern | Matches |
|---------|---------|
| `.` | Any character |
| `%a` | Letters |
| `%d` | Digits |
| `%w` | Alphanumeric |
| `%s` | Whitespace |
| `%p` | Punctuation |
| `%c` | Control characters |
| `%x` | Hexadecimal digits |
| `%z` | Zero (null) |
| `[set]` | Character class |
| `[^set]` | Negated class |
| `*` | 0 or more (greedy) |
| `+` | 1 or more (greedy) |
| `-` | 0 or more (lazy) |
| `?` | 0 or 1 |
| `^` | Start of string |
| `$` | End of string |
| `%b()` | Balanced pair |
| `(...)` | Capture group |
Uppercase versions (`%A`, `%D`, etc.) match the complement.
## Math Functions
The `math` library provides numeric constants and common mathematical operations.
### Constants {id="math-constants"}
```lua
math.pi -- 3.14159...
math.huge -- Largest representable float
math.mininteger -- Minimum integer
math.maxinteger -- Maximum integer
```
### Basic Operations
```lua
math.abs(x) -- Absolute value
math.min(...) -- Minimum of arguments
math.max(...) -- Maximum of arguments
math.floor(x) -- Round down
math.ceil(x) -- Round up
math.modf(x) -- Integer and fractional parts
math.fmod(x, y) -- Floating-point remainder
```
### Powers and Roots
```lua
math.sqrt(x) -- Square root
math.pow(x, y) -- x^y (or use x^y operator)
math.exp(x) -- e^x
math.log(x) -- Natural log
math.log10(x) -- Base-10 log
math.frexp(x) -- Mantissa and exponent
math.ldexp(m, e) -- m * 2^e
```
### Trigonometry
```lua
math.sin(x) math.cos(x) math.tan(x) -- Radians
math.asin(x) math.acos(x) math.atan(x)
math.atan2(y, x) -- Arc tangent of y/x
math.sinh(x) math.cosh(x) math.tanh(x) -- Hyperbolic
math.deg(r) -- Radians to degrees
math.rad(d) -- Degrees to radians
```
### Random Numbers
```lua
math.random() -- Random float [0,1)
math.random(n) -- Random integer [1,n]
math.random(m, n) -- Random integer [m,n]
math.randomseed(x) -- No effect; the generator is auto-seeded
```
`math.random` is nondeterministic. Do not use it for decisions that must replay identically in a workflow; `math.randomseed` cannot make it deterministic.
### Type Conversion
```lua
math.tointeger(x) -- Convert to integer or nil
math.type(x) -- "integer", "float", or nil
math.ult(m, n) -- Unsigned less-than comparison
```
## Coroutines
The `coroutine` library provides coroutine creation and control. See [Channels and Coroutines](lua/core/channel.md) for channel-based concurrency patterns.
```lua
coroutine.create(fn) -- Create coroutine from function
coroutine.resume(co, ...) -- Start/continue coroutine
coroutine.yield(...) -- Suspend coroutine, return values to resume
coroutine.status(co) -- "running", "suspended", "normal", "dead"
coroutine.running() -- Current coroutine (nil if main thread)
coroutine.wrap(fn) -- Create coroutine as callable function
```
### Spawning Concurrent Coroutines
Wippy adds `coroutine.spawn` for scheduler-managed concurrent work:
```lua
coroutine.spawn(fn) -- Spawn function as concurrent coroutine
```
```lua
local time = require("time")
-- Spawn background task
coroutine.spawn(function()
while true do
check_health()
time.sleep("30s")
end
end)
-- Continue main execution immediately
process_request()
```
This partial pattern assumes the entry lists `time` in `modules:` and provides the `check_health` and `process_request` functions. The spawned coroutine runs concurrently in the same Lua process; `process_request()` is reached immediately, and each health check is followed by a 30-second sleep.
## Error Handling
The global `errors` table creates and classifies structured errors. See [Error Handling](lua/core/errors.md) for the complete API.
### Constants {id="error-constants"}
```lua
errors.UNKNOWN -- Unclassified error
errors.INVALID -- Invalid argument or input
errors.NOT_FOUND -- Resource not found
errors.ALREADY_EXISTS -- Resource already exists
errors.PERMISSION_DENIED -- Permission denied
errors.TIMEOUT -- Operation timed out
errors.CANCELED -- Operation cancelled
errors.UNAVAILABLE -- Service unavailable
errors.INTERNAL -- Internal error
errors.CONFLICT -- Conflict (e.g., concurrent modification)
errors.RATE_LIMITED -- Rate limit exceeded
```
### Functions {id="error-functions"}
```lua
-- Create error from string
local err = errors.new("something went wrong")
-- Create error with metadata
local err = errors.new({
message = "User not found",
kind = errors.NOT_FOUND,
retryable = false,
details = {user_id = 123}
})
-- Wrap existing error with context
local wrapped = errors.wrap(err, "failed to load profile")
-- Check error kind
if errors.is(err, errors.NOT_FOUND) then
-- handle not found
end
-- Get call stack from error
local stack = errors.call_stack(err)
```
### Error Methods
```lua
err:message() -- Get error message string
err:kind() -- Get error kind (e.g., "NOT_FOUND")
err:retryable() -- true, false, or nil (unknown)
err:details() -- Get details table or nil
err:stack() -- Get stack trace as string
```
## Restricted Features
The following standard Lua features are unavailable in Wippy processes:
| Feature | Alternative |
|---------|-------------|
| `load`, `loadstring`, `loadfile`, `dofile` | Use [Dynamic Evaluation](lua/dynamic/eval.md) module |
| `collectgarbage` | Automatic GC |
| `rawlen` | Use `#` operator |
| Standard `io.*` file library | Use [File System](lua/storage/filesystem.md) module; the `io` module in Wippy is [Terminal I/O](lua/system/io.md) |
| `os.execute`, `os.exit`, `os.getenv`, `os.remove`, `os.rename`, `os.tmpname` | Use [Command Execution](lua/dynamic/exec.md), [Environment](lua/system/env.md) modules |
| `string.dump` | Not available |
| `debug.*` | Not available |
| `utf8.*` | Not available |
| `package.loadlib` | Native libraries not supported |
## See Also
- [Channels and Coroutines](lua/core/channel.md) - Go-style channels for concurrency
- [Error Handling](lua/core/errors.md) - Creating and handling structured errors
- [OS Time](lua/system/ostime.md) - System time functions
## Navigation
Previous: "Lua Entry Kinds" (lua/entries)
Next: "Errors" (lua/core/errors)