I want to allow the users of my project be able to write the driving logic, while I provide the tools. What are some embedded scripting languages in Rust that can be sandboxed and are easy for absolute beginners?
edit: Thanks for all of your answers, I decided to go with lua using mlua
Seems like Luau will do. Thanks
You can embed Lua pretty easily using a few different libraries. One I liked in particular was
mlua. Lua is tiny, usually sufficiently fast, and easy to learn.Otherwise, there are some others like Rhai, but there may be fewer resources available for users if you go with a less popular language.
Thanks for this. Seems like I’ll go with Lua. I actually did try Rhai before posting this and it did work pretty easily and had a very nice and convenient plugin system. But it had no LSP and on top of that, it wasn’t as easy as Lua.
Thanks for the suggestion. Though JS itself is a pretty weird language and has some weird behaviours, I’d rather not use it. It’s also a bit too advanced for my use case. (somewhat simple control flow, maybe some math, etc.)
There’s a list of good options on Are We Game Yet, hope one of these crates is useful. https://arewegameyet.rs/ecosystem/scripting/
Would something like Steel work?
The Helix editor is working on adding it as a plugin scripting language. You could take a look at the in-progress fork to see how they’re doing it.
Another meme answer:
nu.I never actually used
nufor anything. But I’ve been thinking (unironically) thatnuwith its built-infrom_jsonandto_jsoncan be interesting.The use-case I had in mind is not games or anything like that, but some system or dev tools that traditionally utilized shell scripts, but are moving towards better languages like python. So I thought a single binary that embeds
nu, but also has a lot of sub-commands that implement a lot of sub-tasks in Rust directly, and with JSON used as an exchange format, the combination can be interesting.Now that I think about it more, this can work in both directions, with main execution being in nu (what I had in mind), or in Rust.
nueven has an lsp server, so the development experience should theoretically be good.One more vote for using WASM. Using WASM has the benefit of allowing the user to use almost whatever language they want, as long as it can compile to WASM. So the user doesn’t have to learn some bespoke scripting-specific language.




