← Blog

Release v0.8.0

David Cruz · March 26, 2026

NOTE: This article was made before the rebrand to lde. Just replace lpm with lde.

Upgrade to the latest version with lpm upgrade!

LuaRocks support

This is the big one. lpm can now install packages from the LuaRocks registry using the luarocks field in your lpm.json:

{
  "dependencies": {
    "luafilesystem": { "luarocks": "luafilesystem" },
    "busted": { "luarocks": "busted" }
  }
}

You can also add them from the CLI:

lpm add rocks:luafilesystem

lpx and lpm install support it too:

lpx rocks:luacheck
lpm install rocks:busted
busted

vid

If a package has a rockspec in a git repo, you can point to it manually with the rockspec field:

{
  "dependencies": {
    "middleclass": {
      "git": "https://github.com/kikito/middleclass",
      "rockspec": "./rockspecs/middleclass-4.1.1-0.rockspec"
    }
  }
}

LuaRocks support includes C module compilation — lpm will download LuaJIT headers and compile native modules automatically. Platform-specific modules are handled too.

This is an initial implementation. Things may not work perfectly across all packages — if you run into issues, please report them.

Archive dependencies

You can now install dependencies directly from a .zip or tarball URL:

{
  "dependencies": {
    "foo": { "archive": "https://example.com/foo.zip" }
  }
}

Flat lockfile for transitive dependencies

Previously, transitive dependencies weren’t always tracked reliably. Now lpm stores all dependencies - direct and transitive - flat in a single lockfile. This is how it was always intended to work, and it makes installs more deterministic and conflict-free.

Basic REPL

Running lpm repl drops you into an interactive Lua session with your project’s dependencies available:

lpm repl

vid

New lpm-test utilities

A few more additions to the test framework:

test.skip()           -- unconditionally skip a test
test.skipIf(cond)     -- skip if condition is true
test.deepEqual(a, b)  -- deep equality check
test.match(str, pat)  -- pattern match assertion

Skipped tests are now printed separately in the output.