Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Nov 12, 2025. It is now read-only.

vurvdev/rglua

Repository files navigation

⚠️ Deprecated

There is a new, nicer to use, slimmer rglua on the horizon.

For the lua api equivalent to rglua, autorun-lua
For access to source sdk bindings for gmod, autorun-interfaces

Don't let their names scare you. They're a part of the new Autorun-ng project, but similar to how rglua was to Autorun-rs, they will be able to be used outside of Autorun-ng.

Here's an example.

/// A basic example of creating a binary module using `autorun-lua`
/// Add this to your deps
/// { git = "https://github.com/thevurv/Autorun-ng", package = "autorun-lua" }
use autorun_lua::*;
// Or return anyhow::Result<f64>
fn lua_adder(lua: &LuaApi, state: *mut LuaState) -> Result<f64, Box<dyn std::error::Error>> {
	let x = lua.check_number(state, 1);
	let y = lua.check_number(state, 2);
	// This pushes it onto lua's stack for you.
	// You can return multiple values via a tuple of values
	// Additionally, Option<T> values work too, where None pushes nil.
	Ok(x + y)
}
#[unsafe(no_mangle)]
pub extern "C-unwind" fn gmod13_open(state: *mut LuaState) -> std::ffi::c_int {
	let lua = autorun_lua::get_api().expect("Failed to get lua api");
	lua.push_globals(state); // Push _G
	lua.push(state, "adder");
	lua.push(state, as_lua_function!(lua_adder));
	lua.set_table(state, -3); // _G["adder"] = lua_adder
	0
}

This is a crate that allows interop with the (g)luajit c api as well as the source sdk through libloading and vtable bindings. You can then use these for binary modules or manually injected code, like with Autorun-rs

More information on binary modules can be found on the garrysmod wiki: Creating Binary Modules and examples can be found here.

Usage

If you are targeting 32 bit make sure to install the toolchain and build to it:

Comparison

There are actually a decent amount of libraries out there for gmod development. Here's a comparison and why you could use this one.

Library rglua rust-glua-sys gmod-rs gmrs
Full Lua C Api Bindings ✔️
On Crates.io ✔️ ✔️
Proc Macros ✔️ ✔️ ✔️
Interfacing w/ Source SDK ✔️
Returning Result<> from functions ✔️ ✔️
Can be used on stable ✔️ ✔️ ✔️
Real world examples ✔️ 〰️ ✔️
Linux / OSX Support ✔️ ✔️ ✔️
Github Stars 😢 👍 👑 🤷‍♂️

You can help with that last one 😉

Acknowledgements

This is heavily based off of garrysmod_common, in how we export the lua_shared functions and trying to replicate everything from the Lua C Api.

AltStyle によって変換されたページ (->オリジナル) /