elm-wrap logo elm-wrap

Dependable Elm dependencies

Publish Elm packages with fewer "works on my machine" moments. Repeatable builds, private registries, and sane policies — without inventing a new ecosystem.

🔒

Private code, cleanly

Use internal registries for company packages without duct-taping folders into repos.

📋

Policy you can enforce

Allowlists, denylists, pinning rules, and "no surprises" upgrades that actually work.

Faster installs

Caching and shared artifacts so CI isn't downloading the world every run.

🤝

Works with Elm

No compiler forks, no Haskell hooks, no new language features. Just better dependency handling.

How it works

elm-wrap runs the Elm compiler as a subprocess and intercepts package-related operations (like install/solve) to apply your registries and rules.

When dependency work is done, it hands control back to elm. It's not trying to replace Elm. It's trying to make dependency handling predictable in the places where Elm is intentionally minimal.

Use it today

wrap package install me/mypackage --local-dev --from-path ../../mypackage-src

Local-dev mode: the compiler believes it's in the cache, but it's really in your dev folder. No more editing source-directories and forgetting to clean up.

The Vision

elm-wrap aims to serve as a comprehensive solution for all code and tooling distribution around Elm — without reinventing the ecosystem.