🔥 Blazingly Fast 🔥 runtime environment for Lua http://astra.arkforge.net/
  • Lua 44.1%
  • Rust 41.5%
  • Luau 12.1%
  • PowerShell 1.5%
  • Shell 0.8%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Elham Aryanpur 885586cca0
All checks were successful
Publish the crate / Publish the crate (release) Successful in 4m30s
Merge pull request 'v0.51.2' (#177) from dev into main
Reviewed-on: #177
2026-07-04 12:29:58 +03:00
.forgejo fix: using the correct crates.io tokens 2026-06-28 19:42:00 +03:00
.github/workflows fix: attempt for fixing the upload tag to releases 2026-06-29 00:51:03 +03:00
astra feat: http client can set many files and with names now in requests 2026-07-04 01:14:42 +03:00
examples fix: upstream relative import fixes 2026-06-28 14:53:58 +03:00
resources fix-docs (#170) 2026-06-16 20:53:35 +03:00
src Merge pull request 'v0.51.2' (#177) from dev into main 2026-07-04 12:29:58 +03:00
tests refactor: better tests 2026-07-03 19:28:18 +03:00
.gitignore feat: added tests (#166) 2026-05-07 20:34:04 +03:00
.luarc.json fix: .luarc.json correctly stating the stdlib directory 2026-06-18 22:29:35 +03:00
.luaurc feat: RUNTIME spec added 2026-05-31 20:26:24 +03:00
.stylua.toml fix: update stylua syntax appropriately on export 2026-06-27 21:19:57 +03:00
astra_build.lua updated version and changelog 2026-06-28 19:20:59 +03:00
build.rs feat: RUNTIME spec added 2026-05-31 20:26:24 +03:00
Cargo.lock updated version and changelog 2026-07-04 12:27:40 +03:00
Cargo.toml updated version and changelog 2026-07-04 12:27:40 +03:00
CHANGELOG.md Merge pull request 'v0.51.2' (#177) from dev into main 2026-07-04 12:29:58 +03:00
cliff.toml updated version and changelog 2026-05-18 19:34:44 +03:00
CONTRIBUTING.md chore: Moved back to Apache-2.0 license 2026-05-31 00:29:13 +03:00
Cross.toml fix: use clang instead of gcc for 2026-02-16 11:58:11 +03:00
LICENSE chore: Moved back to Apache-2.0 license 2026-05-31 00:29:13 +03:00
README.md chore: updated MSRV to 1.94 2026-06-02 01:26:10 +03:00

Banner

Release Linux Release Windows Release MacOS Publish the crate Static Badge License: Apache-2.0 Matrix Chat

Note

The code is hosted at git.arkforge.net/ArkForgelabs/Astra. The GitHub repository is a mirror. For opening issues and PRs please visit there instead.

Astra is a Rust based runtime environment for Lua (5.1-5.5), Luau and LuaJIT. The goal is to get as much performance as possible while writing the logic in Lua instead for faster iteration, fault-tolerance, all the batteries included, and complete customization. This project is internally used here at ArkForge, by universities, research labs, and many large organizations.

For enterprise and business inquiries, send us an email at [email protected]

MSRV: 1.94+

installation

You can install using an installer script:

Linux

sh -c "$(curl -fsSL https://astra.arkforge.net/install.sh)"

Windows

powershell -c "irm https://astra.arkforge.net/install.ps1 | iex"

Cargo

Alternatively you can also install through cargo tool, if you have it installed:

cargo install lua-astra

Or a specific Lua version:

cargo install lua-astra --no-default-features --features=luau

Example

-- 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()
    print(response:status_code(), response:remote_address(), 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 })

print(db:query_all("SELECT * FROM data"))

There is also support for cryptography, datetime, jinja2, markdown, pubsub/observers, type system for LSP, runtime type safety, and validation, async filesystem, and many more, check them at at the docs

Community Projects

If you have a project that uses or extends Astra, let us know about it by extending the list above or commenting here.

Where is the community?

In the past, we had a discord server where you could join and talk in, however we moved it to Matrix instead. Please open conversations here from now on.

License

Astra is licensed under the Apache License, Version 2.0.

Note

This project may have breaking changes in minor versions until v1.0. Afterwhich semver will be followed. Contributions are always welcome!