# Undulate A package manager for Lua. It's an early work in progress. Undulate is optimized for pure Lua dependencies, like the ones that you'd typically use in a LÖVE game. It will support native dependencies and LuaRocks rocks in the future, too! ## Installation Pre-built binaries will be available for several platforms eventually. For now: * Have the [latest stable Rust](https://www.rust-lang.org) * Run `cargo install undulate` * Undulate is available as `und`! ## Usage Undulate has only a few, single-purpose commands. You can use `und help` if you need a quick reference! ### `und init []` Initializes a new Undulate module (an 'undule') in the given path. By default, this is the current directory. ### `und add [...]` Installs one or more dependencies and saves them to the dependency list. ### `und remove [...]` Removes one or more dependencies. ### `und install` Installs all the dependencies as specified by the current dependency list. ## FAQ ### Why write this in Rust? Writing Undulate in Lua would make it depend on the version of Lua the user is targeting. There's no reason to do that. It would also shackle the project to LuaRocks. Undulate could be written in any portable compiled language. I chose Rust because of strong error modeling, a solid ecosystem, and a distribution method in the form of Cargo and crates.io. ### Why not LuaRocks? LuaRocks: * Installs packages globally by default * Creates a complicated systree when installing packages * Uses Lua as a configuration format, which is hostile to other tools * Has a convoluted package specification * Has poor Windows support, requiring admin elevation by default and awkward batch script installation ## License Undulate is available under the MIT license. See [LICENSE.md](LICENSE.md) for details.