7 Files and Data I/O
Tactus provides small, sandbox-friendly file and serialization helpers for common workflows.
7.1 File
local text = File.read("README.md")
File.write("out.txt", "hello")
local ok = File.exists("out.txt")7.2 Json
local s = Json.encode({a = 1, b = {"x", "y"}})
local t = Json.decode(s)7.3 Filesystem Helper Module (tactus.io.fs)
Use the stdlib filesystem helper when you need directory listing and globs:
local fs = require("tactus.io.fs")
local entries = fs.list_dir("chapters", {files_only = true, sort = true})
local qmd_files = fs.glob("chapters/*.qmd", {sort = true})7.3.1 Determinism Note
Directory contents can change between runs. For durable workflows, wrap enumeration and reads:
local fs = require("tactus.io.fs")
local files = Step.checkpoint(function()
return fs.glob("docs/*.md", {sort = true})
end)7.4 Quick Patterns
7.4.1 Build a Small Index
local fs = require("tactus.io.fs")
local index = Step.checkpoint(function()
local files = fs.glob("docs/*.md", {sort = true})
local out = {}
for _, path in ipairs(files) do
out[path] = File.read(path)
end
return out
end)7.4.2 Structured Output as JSON
Procedure {
output = {result = field.object{required = true}},
function(input)
local result = {ok = true, message = "done"}
return {result = result}
end
}