# Keeping track of 'trimming safe' packages

**URL:** <https://discourse.julialang.org/t/keeping-track-of-trimming-safe-packages/138649>\
**Category:** Tooling\
**Tags:** compilation, juliac\
**Created:** [August 6, 2026, 5:00pm UTC](https://discourse.julialang.org/t/keeping-track-of-trimming-safe-packages/138649 "2026-08-06T17:00:57Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![langestefan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/langestefan/32/207923_2.png) [@langestefan](https://discourse.julialang.org/u/langestefan)\
**Post date:** [August 6, 2026, 5:00pm UTC](https://discourse.julialang.org/t/keeping-track-of-trimming-safe-packages/138649/1 "2026-08-06T17:00:57Z")

</div>

The page at [System Image Building · The Julia Language](https://docs.julialang.org/en/v1/devdocs/sysimg/) states:

> Package authors may wish to test that their package is **“trimming safe”** , however this is impossible in general. Trimming is only expected to work given concrete entry points such as `main()` and library entry points meant to be called from outside Julia. For generic packages, existing tests for type stability like `@inferred` and `JET.@report_call` are about as close as you can get to checking trim compatibility.

And:

> We also plan to try to _increase_ the set of programs that can be trimmed over time.

Now I am wondering if anyone is keeping track of packages that are ‘trimmable’. And if not, whether it might be worthwhile to do so.

I understand that this is in general a difficult thing to do, as trimmability depends on the entry point. But at least an attempt can be made by trying out the common entry points and see whether trimming succeeds for all of them, and if not keep track of issues (this is perfect task for AI assistance!). There are also packages that straight up fail to trim, regardless of the entry point, such as TimeZones.jl. I have ran into other packages with this problem, a good indicator seems to be the presence of an `_init_` function which has some form of dynamic artifact resolution.

---

<div class="post-metadata">

**Author:** ![Tortar](https://avatars.discourse-cdn.com/v4/letter/t/6bbea6/32.png) [@Tortar](https://discourse.julialang.org/u/Tortar)\
**Post date:** [August 6, 2026, 7:09pm UTC](https://discourse.julialang.org/t/keeping-track-of-trimming-safe-packages/138649/2 "2026-08-06T19:09:49Z")

</div>

One of the biggest problems for trimmability seems the usage of FunctionWrappers.jl, which is untrimmable. Looking at [https://platform.juliahub.com/ui/Packages/General/FunctionWrappers#dependents](https://platform.juliahub.com/ui/Packages/General/FunctionWrappers#dependents), we know that at least 688 are not safely trimmable. Indeed I’m hopeful that `TypedCallable` lands soon in Base, which would be the trimmable replacement to that. It is being worked out in [Add `TypedCallable` (Part 1/2) - Pull Request #62559 - JuliaLang/julia - GitHub](https://github.com/JuliaLang/julia/pull/62559) 💥

---

<div class="post-metadata">

**Author:** ![tecosaur](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tecosaur/32/23206_2.png) [@tecosaur](https://discourse.julialang.org/u/tecosaur)\
**Post date:** [August 7, 2026, 3:58am UTC](https://discourse.julialang.org/t/keeping-track-of-trimming-safe-packages/138649/3 "2026-08-07T03:58:19Z")

</div>

It terms of test sets, we could probably re-use the tasks in [GitHub - tecosaur/Julia-TTFX-Snippets: A collection of TTFX workloads for Julia packages, for longitudinal performance testing. · GitHub](https://github.com/tecosaur/Julia-TTFX-Snippets)?

---

<div class="post-metadata">

**Author:** ![langestefan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/langestefan/32/207923_2.png) [@langestefan](https://discourse.julialang.org/u/langestefan)\
**Post date:** [August 7, 2026, 9:21am UTC](https://discourse.julialang.org/t/keeping-track-of-trimming-safe-packages/138649/4 "2026-08-07T09:21:06Z")

</div>

That’s a good starting point. And I’m also looking at some of the tests in (Non) LinearSolve.jl since they have also been checking for trimmability. Perhaps this could be somewhat automated in a new package.

---

<div class="post-metadata">

**Author:** ![langestefan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/langestefan/32/207923_2.png) [@langestefan](https://discourse.julialang.org/u/langestefan)\
**Post date:** [August 18, 2026, 12:34pm UTC](https://discourse.julialang.org/t/keeping-track-of-trimming-safe-packages/138649/5 "2026-08-18T12:34:00Z")

</div>

On slack I was pointed to [GitHub - tz-lom/TrimCheck.jl · GitHub](https://github.com/tz-lom/TrimCheck.jl)

I believe this was even discussed at juliacon during the ASML talk!
