Astra is a Rust based runtime environment for Lua (5.1-5.4), Luau and LuaJIT with native support for Teal. The goal is to get as much performance as possible while writing the logic in Lua instead for faster iteration, fault-tolerance and no-build requirements. This project is internally used here at ArkForge and many others.
For enterprise and business inquiries, send us an email at [email protected]
MSRV: 1.88+
You can install using an installer script:
sh -c "$(curl -fsSL https://astra.arkforge.net/install.sh)"powershell -c "irm https://astra.arkforge.net/install.ps1 | iex"Alternatively you can also install through cargo tool, if you have it installed:
cargo install lua-astra-- Create a new server
local server = require("http").server.new()
-- Register a route
server:get("/", function()
return "hello from default Astra instance!"
end)
-- Configure the server
server.port = 3000
-- Run the server
server:run()Or fancy some multi threaded async code
-- spawn an async task that does not block the running thread
spawn_task(function ()
-- HTTP Request to check your IP address
local response = require("http").request("https://myip.wtf/json"):execute()
pprint(response:status_code())
pprint(response:remote_address())
pprint(response:body():json())
end)What about some databases and serialization?
local my_data = require("serde").json.decode('{"name": "John Astra", "age": 21}')
local db = require("database").new("sqlite", ":memory:")
db:execute([[
CREATE TABLE IF NOT EXISTS data (id INTEGER PRIMARY KEY, name TEXT, age INTEGER) strict;
INSERT INTO data (name, age) VALUES ($1, $2);
]], { my_data.name, my_data.age })
pprint(db:query_all("SELECT * FROM data"))There is also support for cryptography, datetime, jinja2, pubsub/observers, structure validation, async filesystem, and many more, check them at at the docs
- Astra Trails - https://github.com/0riginaln0/astra-trails
- Hack Club Clubs API - https://github.com/hackclub/clubapi
If you have a project that uses or extends Astra, let us know about it by extending the list above or opening a new issue
This project may have breaking changes in minor versions until v1.0. Afterwhich semver will be followed. Contributions are always welcome!
