Skip to content

Full Stdlib Index

Every function, method, and operator available in Frankie v1.12. All are available without any import.


Math & Arithmetic

Function Description
abs(x) Absolute value
sqrt(x) Square root — always returns Float
floor(x) Round down to nearest integer
ceil(x) Round up to nearest integer
round(x, n) Round to n decimal places (default 0)
clamp(x, lo, hi) Constrain x between lo and hi
min(a, b) Smaller of two values
min(vec) Smallest element of a vector
max(a, b) Larger of two values
max(vec) Largest element of a vector
sum(vec) Sum of all elements
mean(vec) Arithmetic mean
median(vec) Middle value (average of two middles for even length)
stdev(vec) Sample standard deviation (n-1)
variance(vec) Sample variance
+ - * / Arithmetic operators — / always returns Float
// Integer (floor) division — Fortran heritage
% Modulo
** Exponentiation — Fortran heritage

Sequences & Vectors

Function Description
seq(start, stop, step) Numeric sequence — seq(1,5)[1,2,3,4,5]
linspace(start, stop, n) Exactly n evenly-spaced values
vec(range) Vector from range — vec(1..10)
rep(x, n) Repeat a value n times — rep(0, 3)[0,0,0]
unzip(vec) Split vector of pairs → two vectors
zip(a, b) Pair two vectors → vector of pairs

String Functions

Function Description
sub(str, pat, rep) Replace first regex match
gsub(str, pat, rep) Replace all regex matches
match(str, pat) First match object or nil
match_all(str, pat) All matches as a vector of strings
matches(str, pat) True if pattern matches anywhere
regex(pat, flags) Compile a pattern with flags ("i", "m", "s")
template(str, hash) {{key}} placeholder substitution
sprintf(fmt, ...) C-style format string
paste(..., sep:) Join values with separator
format(fmt, ...) Alias for sprintf

String Methods

Method Description
.upcase Uppercase
.downcase Lowercase
.length Character count
.reverse Reversed string
.strip Remove leading/trailing whitespace
.lstrip Remove leading whitespace
.rstrip Remove trailing whitespace
.chomp Remove trailing newline
.chop Remove last character
.chars Vector of characters
.bytes Vector of byte integers
.lines Vector of lines (newlines stripped)
.ord ASCII/Unicode code point of first character
.encode String → vector of byte integers
.decode Vector of byte integers → string
.split(sep) Split by separator → Vector
.join(sep) Join vector elements with separator
.include?(s) True if s is a substring
.start_with?(s) True if string starts with s
.end_with?(s) True if string ends with s
.count(sub) Count occurrences of sub
.empty? True if length is 0
.nil? Always false for a string
.match(pat) First match object or nil
.match_all(pat) All matches as vector of strings
.matches?(pat) True if pattern matches anywhere
.replace(old, new) Replace first occurrence (alias for sub)
.sub(pat, rep) Replace first regex match
.gsub(pat, rep) Replace all regex matches
.gsub(pat) do \|m\| Replace all matches — block transforms each
.delete(chars) Remove all occurrences of any char in set
.squeeze Collapse consecutive duplicate chars
.tr(from, to) Translate characters position-by-position
.center(w, pad) Center in field of width w
.ljust(w, pad) Left-justify in field of width w
.rjust(w, pad) Right-justify in field of width w
.to_i Parse as integer
.to_f Parse as float
.to_s Return self
.format(hash) {key} placeholder substitution
.each_char do \|c\| Iterate over characters
.each_line do \|l\| Iterate over lines
[i] Character at index (negatives ok)
[a..b] Inclusive slice
[a...b] Exclusive slice
* n Repeat string n times
=~ Position of first match or nil

Vector Methods

Method Description
.length / .size Number of elements
.first First element or nil
.last Last element or nil
.empty? True if no elements
.include?(x) True if x is an element
.count Number of elements
.count do \|x\| Count elements satisfying block
.tally Count occurrences → Hash
.push(x) Append element, return vector
.pop() Remove and return last element
.delete(x) Remove first occurrence of x, return vector
.sort Sorted copy
.sort_by do \|x\| Sort by computed key
.reverse Reversed copy
.uniq Deduplicated copy (first occurrence wins)
.flatten Deep flatten all levels
.flatten(n) Flatten exactly n levels
.compact Remove all nil values
.take(n) First n elements
.drop(n) All but first n elements
.sum Sum of all elements
.min Minimum element
.max Maximum element
.mean Arithmetic mean
.map do \|x\| Transform each element → new vector
.map_with_index do \|x, i\| Map with element and index
.flat_map do \|x\| Map then flatten one level
.select do \|x\| Keep elements where block is true
.reject do \|x\| Keep elements where block is false
.find do \|x\| First element where block is true
.detect do \|x\| Alias for find
.reduce(init) do \|acc, x\| Fold into a single value
.inject(init) do \|acc, x\| Alias for reduce
.each do \|x\| Iterate for side effects
.each_with_index do \|x, i\| Iterate with index
.each_with_object(init) do \|x, obj\| Iterate with shared accumulator
.each_slice(n) do \|s\| Iterate in non-overlapping chunks
.each_cons(n) do \|w\| Iterate with sliding window
.any? do \|x\| True if any element satisfies block
.all? do \|x\| True if all elements satisfy block
.none? do \|x\| True if no elements satisfy block
.min_by do \|x\| Element with smallest key value
.max_by do \|x\| Element with largest key value
.sum_by do \|x\| Sum of block results
.sort_by do \|x\| Sort by computed key
.group_by do \|x\| Bucket into hash of arrays
.chunk(n) Split into sub-vectors of size n
.zip(other) Pair elements with another vector
.zip_with(other) do \|a, b\| Zip and transform each pair
.product(other) Cartesian product
.join(sep) Join elements as string with separator
.encode Vector of byte ints → string
.decode Vector of byte ints → string (explicit)
.dig(i1, i2, ...) Safe nested access — returns nil
[i] Element at index (negatives ok)
[a..b] Inclusive slice
[i] = Index assignment
* n Repeat vector n times

Hash Methods

Method Description
h[key] Get value — nil if missing
h[key] = Set value
.keys Vector of all keys
.values Vector of all values
.size / .count Number of pairs
.has_key?(k) True if key exists
.empty? True if no pairs
.fetch(key, default) Get with explicit default
.dig(k1, k2, ...) Safe nested access — nil at any missing level
.delete(key) Remove key, return modified hash
.merge(other) New merged hash — right wins on conflict
.merge_bang(other) Merge in place
h1 \| h2 Merge operator — right wins on conflict
.store(key, val) Method form of h[key]=
.to_a Convert to vector of [key, value] pairs
.each do \|k, v\| Iterate pairs
.each_pair do \|k, v\| Alias for each
.each_with_object(init) do \|pair, obj\| Iterate with accumulator
.map do \|k, v\| Transform pairs → vector
.map_hash do \|k, v\| Transform pairs → new hash
.select do \|k, v\| Keep pairs where block is true → new hash
.reject do \|k, v\| Keep pairs where block is false → new hash
.find do \|k, v\| First pair where block is true
.any? do \|k, v\| True if any pair satisfies block
.all? do \|k, v\| True if all pairs satisfy block
.none? do \|k, v\| True if no pair satisfies block
.count do \|k, v\| Count pairs satisfying block
.sort_by do \|k, v\| Sort pairs by key → vector
.min_by do \|k, v\| Pair with smallest key value
.max_by do \|k, v\| Pair with largest key value
.group_by do \|k, v\| Bucket pairs by block result

Integer Methods

Method Description
.to_f Convert to Float
.to_s Convert to String
.to_i Return self
.times do \|i\| Repeat block n times, i from 0 to n-1

Float Methods

Method Description
.to_i Truncate to Integer (toward zero)
.to_s Convert to String
.to_f Return self

File I/O

Function Description
file_read(path) Read entire file as string — raises FileNotFoundError
file_lines(path) Read file as vector of lines — raises FileNotFoundError
file_write(path, str) Write string to file (overwrites)
file_append(path, str) Append string to file
file_exists(path) True if file exists
file_delete(path) Delete file — returns false if missing
file_copy(src, dst) Copy file — raises FileNotFoundError if src missing
file_rename(src, dst) Rename/move file — raises FileNotFoundError if src missing
file_open(path, mode) Open file handle ("r", "w", "a")
file_mkdir(path) Create directory and all parents
dir_exists(path) True if directory exists
dir_list(path) Sorted vector of filenames in directory

File Handle Methods

Method Description
.read Read full contents as string
.write(str) Write string
.close Close the handle

JSON & CSV

Function Description
json_read(path) Read and parse JSON file
json_write(path, data) Write data as JSON file
json_write(path, data, true) Write pretty-printed JSON
json_parse(str) Parse JSON string → value
json_dump(data) Serialise value → JSON string
json_dump(data, true) Pretty-printed JSON string
csv_read(path) Read CSV → vector of hashes
csv_read(path, false) Read CSV → vector of vectors
csv_write(path, data) Write vector of hashes to CSV
csv_write(path, data, headers) Write with explicit column order
csv_parse(str) Parse CSV string → vector of hashes
csv_dump(data) Serialise → CSV string

DateTime

Function / Method Description
now() Current date and time
today() Today at midnight
date_parse(str, fmt) Parse string — default fmt "%Y-%m-%d"
date_from(y, m, d, h, min, s) Build from components
.year .month .day Date components
.hour .minute .second Time components
.format(fmt) Format with strftime codes
.add_days(n) Add n days (negative subtracts)
.add_hours(n) Add n hours
.add_minutes(n) Add n minutes
.diff_days(other) Days between two dates
.diff_seconds(other) Seconds between two datetimes
.weekday 0=Monday … 6=Sunday
.is_before(other) True if earlier
.is_after(other) True if later
.timestamp Unix timestamp as Float

HTTP Client

Function Description
http_get(url) GET request
http_get(url, headers) GET with custom headers
http_post(url, data) POST — hash sends as JSON
http_post(url, data, headers) POST with custom headers
http_put(url, data) PUT request
http_put(url, data, headers) PUT with custom headers
http_delete(url) DELETE request
http_delete(url, headers) DELETE with custom headers
url_encode(hash) Hash → URL query string
url_decode(str) Query string → Hash

HTTPResponse Properties

Property / Method Description
.status HTTP status code
.body Raw response body string
.headers Response headers hash
.json() Parse body as JSON
.ok() True if 2xx status

Database (SQLite)

Function / Method Description
db_open(path) Open or create SQLite database
.exec(sql, params) Execute statement — returns row count
.query(sql, params) SELECT → vector of hashes
.query_one(sql, params) SELECT → first row as hash or nil
.insert(table, hash) Insert row from hash — returns last id
.insert_many(table, rows) Insert vector of hashes
.find(table, where) SELECT with where hash → vector of hashes
.find_one(table, where) SELECT first match → hash or nil
.update(table, data, where) UPDATE rows — returns count
.delete(table, where) DELETE rows — returns count
.count(table) COUNT rows in table
.tables Vector of table names
.columns(table) Vector of column names
.last_id Last inserted row id
.begin Begin transaction
.commit Commit transaction
.rollback Rollback transaction
.close Close connection

Web Server

Function / Method Description
web_app() Create a new web application
.get(path) do \|req\| Register GET route
.post(path) do \|req\| Register POST route
.put(path) do \|req\| Register PUT route
.delete(path) do \|req\| Register DELETE route
.patch(path) do \|req\| Register PATCH route
.before do \|req\| Before filter — runs before every route
.after do \|req\| After filter — runs after every route
.not_found do \|req\| Custom 404 handler
.run(port) Start server on port
response(body, status, headers) Build a response
json_response(data, status) JSON response
html_response(body, status) HTML response
redirect(location, status) Redirect response
halt(status, body) Abort with status

FrankieRequest Properties

Property Description
.path URL path
.method HTTP method string
.params Path parameters hash
.query Query string parameters hash
.form Form body parameters hash
.json Parsed JSON body
.body Raw request body string
.headers Request headers hash

Random

Function Description
rand_int(a, b) Random integer a..b inclusive
rand_float(a, b) Random float in [a, b)
rand() Random float in [0.0, 1.0)
rand(n) Random integer in [0, n)
rand_seed(n) Fix seed for reproducibility
shuffle(vec) Randomly reordered copy of vector
sample(vec, n) n randomly chosen elements (no repeats)

Testing

Function Description
assert_eq(actual, expected, msg) Pass if actual == expected
assert_neq(actual, expected, msg) Pass if actual != expected
assert_true(value, msg) Pass if value is truthy
assert_nil(value, msg) Pass if value is nil
assert_match(value, pattern, msg) Pass if pattern matches anywhere in value
assert_raises(fn, msg) Pass if fn raises any error
assert_raises_typed(fn, type, msg) Pass if fn raises that specific error type

Type Checking & Conversion

Function Description
is_integer(x) True if x is an Integer
is_float(x) True if x is a Float
is_string(x) True if x is a String
is_vector(x) True if x is a Vector
is_nil(x) True if x is nil
is_bool(x) True if x is Boolean
to_int(x) Convert to Integer
to_float(x) Convert to Float
to_str(x) Convert to String

Input & Output

Function Description
puts(val) Print with newline
print(val) Print without newline
pp(val) Pretty-print with type annotation
input(prompt) Read line from stdin as string
input_int(prompt) Read line from stdin as integer
input_float(prompt) Read line from stdin as float

System

Function Description
exit(code) Exit with given code (default 0)
argv() Command-line arguments as vector
env(key, default) Read environment variable
sleep(seconds) Pause execution
times(n) do \|i\| Repeat block n times — standalone form
require(path) Load another .fk file (once only)

Operators Reference

Operator Description
+ - * / Arithmetic
// Integer (floor) division
% Modulo
** Exponentiation
== != < <= > >= Comparison
and or not Logical
=~ Regex match — returns position or nil
\|> Pipe — pass left as argument to right
&. Nil-safe navigation — returns nil instead of crashing
\| Hash merge — right wins on conflict
.. Inclusive range
... Exclusive range
+= -= *= /= //= **= %= Compound assignment
#{} String interpolation