# Why do package.jl depend on package\_jll

**URL:** <https://discourse.julialang.org/t/why-do-package-jl-depend-on-package-jll/134227>\
**Category:** New to Julia\
**Tags:** question, dependencies, jll\
**Created:** [November 29, 2025, 9:16pm UTC](https://discourse.julialang.org/t/why-do-package-jl-depend-on-package-jll/134227 "2025-11-29T21:16:30Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![3point1415](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/3point1415/32/219528_2.png) [@3point1415](https://discourse.julialang.org/u/3point1415)\
**Post date:** [November 29, 2025, 9:16pm UTC](https://discourse.julialang.org/t/why-do-package-jl-depend-on-package-jll/134227/1 "2025-11-29T21:16:30Z")

</div>

Why do package.jl often depend on package\_jll?  
Isn’t the jll just a wrapper around the .jl?

---

<div class="post-metadata">

**Author:** ![ericphanson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ericphanson/32/215186_2.png) [@ericphanson](https://discourse.julialang.org/u/ericphanson)\
**Post date:** [November 29, 2025, 9:33pm UTC](https://discourse.julialang.org/t/why-do-package-jl-depend-on-package-jll/134227/2 "2025-11-29T21:33:40Z")

</div>

No, a jll is a wrapper around a library written in another language like C or rust or Fortran. Often there will be a similarly named .jl package which depends on the jll and provides a nicer API for that library.

---

<div class="post-metadata">

**Author:** ![suavesito](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/suavesito/32/34386_2.png) [@suavesito](https://discourse.julialang.org/u/suavesito)\
**Post date:** [November 29, 2025, 10:35pm UTC](https://discourse.julialang.org/t/why-do-package-jl-depend-on-package-jll/134227/3 "2025-11-29T22:35:58Z")

</div>

You can read more about the JLL’s packages in the `BinaryBuilder.jl`’s [documentation](https://docs.binarybuilder.org/stable/jll/).

---

<div class="post-metadata">

**Author:** ![GunnarFarneback](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gunnarfarneback/32/1827_2.png) [@GunnarFarneback](https://discourse.julialang.org/u/GunnarFarneback)\
**Post date:** [November 30, 2025, 10:29am UTC](https://discourse.julialang.org/t/why-do-package-jl-depend-on-package-jll/134227/4 "2025-11-30T10:29:39Z")

</div>

To expand a little further on this, the typical packaging of a foreign library in Julia follows these steps:

1. Build the library for different platforms (combination of OS and CPU variants) via cross-compilation using BinaryBuilder.jl. This produces platform specific _artifacts_, compressed archives containing the libraries, binaries etc. that came out of the build.
2. Make a JLL package which contains information needed for Julia to download the right artifact for the platform being used, plus a minimal wrapper for the library.
3. Make a normal Julia package, which provides a more user friendly Julia API to the library.

Steps 1 and 2 are in the majority of cases orchestrated by the repository [GitHub - JuliaPackaging/Yggdrasil: Collection of builder repositories for BinaryBuilder.jl](https://github.com/JuliaPackaging/Yggdrasil). Step 1 requires information about sources, what to build and how to build it. Step 2 is fully automated.

Step 3 is optional and usually done for user-facing packages where there is enough value in providing a more Julia-native interface.
