Astra is a web server runtime for Lua (5.1-5.4), Luau and LuaJIT written in Rust. The goal is to get as much performance as possible while writing the web server logic in Lua instead for faster iteration, fault-tolerance and no-build requirements. This project is internally used here at ArkForge and many others.
You can either get the binaries at github releases or using cargo
if you have it installed:
cargo install lua-astra
To install with differet Lua VM, e.g. Lua 5.4:
cargo install lua-astra --no-default-features --features lua54
-- Create a new server
local server = Astra.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()
You can also use the local variables within routes
local counter = 0
server:get("/count", function()
counter = counter + 1
-- and also can return JSON
return { counter = counter }
end)
Requests and Responses and their configuration are provided when needed
server:get("/", function(request, response)
-- set header code
response:set_status_code(300)
-- set headers
response:set_header("header-key", "header-value")
-- consume the request body
print(request:body():text())
return "Responding with Code 300 cuz why not"
end)
There are also utilities provided such as a PostgreSQL/SQLite, http client requests, lua extra utils, and async tasks.
-- spawn an async task that does not block the running thread
spawn_task(function ()
-- HTTP Request to check your IP address
local response = Astra.http.request("https://myip.wtf/json"):execute()
pretty_print(response:status_code())
pretty_print(response:remote_address())
pretty_print(response:body():json())
end)
- Astra Trails - https://github.com/0riginaln0/astra-trails
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!