scripts.radconf.values
RadConf value conversions
Text and booleans become Lua strings and booleans. Integer values in the signed 64-bit range become native Luau integers. Floating-point values become Lua numbers. Binary data becomes a Lua string containing the same bytes, including zero bytes. Between filter steps, values keep their meaning: passwords remain masked and timestamps remain dates and times.
Native 64-bit integers
radconf.get() and filter results preserve every integer from
-9223372036854775808 to 9223372036854775807. Lua's type(value) reports
"integer" for these values. Unsigned RadConf integers within this range also
become native integers.
Write integer literals with an i suffix. Use the integer library for
arithmetic, comparisons, and conversions:
radconf.set("vars.record_id", 9007199254740993i)
local record_id = radconf.get("vars.record_id")[1]
local next_id = integer.add(record_id, 1i)
radconf.set("vars.next_record_id", next_id)
print(tostring(next_id)) -- 9007199254740994
Use integer.minsigned and integer.maxsigned for the range limits. Arithmetic
overflow wraps within 64 bits. Native integers use integer.add(), integer.sub(),
and similar functions instead of ordinary Lua arithmetic operators. Compare
native integers with native literals, such as record_id == 9007199254740993i.
Ordinary Lua numbers remain floating-point values. Use integer.create(number)
to convert an integral number, or integer.fromstring(text) to parse an exact
integer from text. Use integer.tonumber(value) when calling a Lua function
that requires a number. Converting a large integer to a number can round it.
Existing context fields and methods keep their numeric behavior for script
compatibility. They return ordinary numbers, which cannot represent every
integer beyond 9007199254740992. Use radconf for variable access that needs
full signed integer precision.
JSON values
Ordinary Lua tables represent one JSON value, including JSON arrays. Use
radconf.null for JSON null inside a table. Multivalue sequences are distinct
from JSON arrays.
Very large integers inside JSON objects and arrays keep every digit. You can
display them with tostring() and pass the containing table back without
rounding them:
local document = radconf.filter('{"id":9007199254740993}'):json():value()
document.id = integer.add(document.id, 1i)
print(tostring(document.id)) -- 9007199254740994
document.name = "example"
radconf.set("http.request", document)
Values kept in their original form
Radiator Server keeps some values in their original form when returning them to
Lua. These include masked passwords, timestamps, regular expressions, and unsigned
integers above the signed 64-bit range. Your script can hold these values in a
variable and pass them to radconf.set() or radconf.filter().
Use tostring(value) to display a value. Use a filter to convert it into the
text or other result your script needs. Lua's type(value) reports "userdata"
for these values. This is Lua's name for a value supplied by the application;
you do not need to unpack it yourself.
Passwords
Reading a password keeps it masked. Displaying or copying the returned value does not reveal the password:
local password = radconf.get("user.password")
print(tostring(password)) -- Masked display text
radconf.set("vars.saved_password", password) -- Keeps the password masked
Use the reveal filter to obtain the password as a Lua string:
local password = radconf.filter.variable("user.password")
:reveal()
:value()
Dates and times
A timestamp keeps its date and time information when returned to Lua. You can
save it in another variable or choose its display format with timestamp_format:
local login_time = radconf.filter("2026-10-14T12:00:00Z")
:timestamp()
:value()
radconf.set("vars.login_time", login_time)
local date = radconf.filter(login_time)
:timestamp_format("[year]-[month]-[day]")
:value()
print(date) -- 2026-10-14
Regular expressions
The regex filter returns a regular expression that you can reuse in other
filter calls. This example splits text at commas or semicolons:
local separator = radconf.filter("/[,;]+/"):regex():value()
local groups = radconf.filter("admin;reader,operator")
:split(separator)
:values()
print(groups[2]) -- reader
Unsigned integers above the signed range
Unsigned RadConf integers above 9223372036854775807 cannot be represented as
positive native Luau integers. Radiator Server keeps them in their original form
to preserve every digit. Display them with tostring() and pass the original
value to set() to copy it exactly.
For example, after a RadConf pipeline sets vars.record_id to 18446744073709551615:
local record_id = radconf.get("vars.record_id")[1]
print(tostring(record_id)) -- 18446744073709551615
radconf.set("vars.saved_record_id", record_id)
These values do not support ordinary Lua arithmetic. Converting their display
text with tonumber() can round the number.
Multivalue sequences
Tables returned by radconf.get() for several values, or by :values(),
represent a list of values when passed to radconf.set() or radconf.filter().
You can edit their entries and pass the same table back. Use consecutive indices
starting at 1. A table you construct yourself represents one JSON value.
When a result list contains a missing value, Radiator Server keeps a placeholder
at that position. Lua would remove the entry if it were stored as nil.
Passing the list back to set() or filter() preserves the missing entry.
To check an individual entry, extract it with :value():
local entries = radconf.filter(nil):values()
print(#entries) -- 1: the missing value still occupies a position
print(radconf.filter(entries[1]):value() == nil) -- true
See variable access and filter chains for usage examples.