Repository navigation
2.0.2 - 2026-09-02
A small follow-up to 2.0.1, focused on module resolution: declaration files pairing with hand-written Luau
now actually resolve, folders gain a second index-file convention, and the package manager pipeline is
verified end-to-end for third-party (non-Loom) Luau libraries.
Module resolution
.d.loomdeclaration files are now importable modules in their own right. Anexport declarenames an
ordinary export; a baredeclarestays ambient (visible everywhere in the root, not importable) — the
way it always has been for a global.- A declaration file's hand-written
.luausibling (e.g.jecs.d.loomnext tojecs.luau) is copied into
the output tree in the declaration file's place, so arequireof it resolves to real Luau at runtime. - Folders now fold into a
main.loomindex file, alongside the existing Rojo-nativeinit.loomconvention
— theindex.js/__init__.pystyle, for a package authored without Rojo's own folding in mind.
init.loomwins where a folder somehow has both. - Fixed a require emitted for a
main.loom-folded import falling back to a path Luau's own
require-by-string resolver can't fold on its own; it now names the file outright when no Rojo project
maps the output.
Package manager
- Verified (and covered with a regression test) that publishing and installing a package carries every file
under its source directory — not just.loomones — so a third-party package wrapping a hand-written
.luaulibrary round-trips its runtime sibling throughloom publish/loom addintact.
Full Changelog: v2.0.1...v2.0.2