# Could people suggest a few packages to study?

**URL:** <https://discourse.julialang.org/t/could-people-suggest-a-few-packages-to-study/125852>\
**Category:** General Usage\
**Tags:** packages\
**Created:** [February 13, 2025, 5:44am UTC](https://discourse.julialang.org/t/could-people-suggest-a-few-packages-to-study/125852 "2025-02-13T05:44:36Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![rmfritz](https://avatars.discourse-cdn.com/v4/letter/r/b487fb/32.png) [@rmfritz](https://discourse.julialang.org/u/rmfritz)\
**Post date:** [February 13, 2025, 5:44am UTC](https://discourse.julialang.org/t/could-people-suggest-a-few-packages-to-study/125852/1 "2025-02-13T05:44:36Z")

</div>

I’m trying to assemble the beginnings of one, and I’d like to study a few non-trivial but not too huge examples before getting my code in shape for wider publication. Any suggestions?

---

<div class="post-metadata">

**Author:** ![BdeKoning](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bdekoning/32/214557_2.png) [@BdeKoning](https://discourse.julialang.org/u/BdeKoning)\
**Post date:** [February 13, 2025, 6:51am UTC](https://discourse.julialang.org/t/could-people-suggest-a-few-packages-to-study/125852/2 "2025-02-13T06:51:13Z")

</div>

DataInterpolations.jl

Shameless self-plug:  
SplineGrids.jl

---

<div class="post-metadata">

**Author:** ![odow](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/odow/32/28685_2.png) [@odow](https://discourse.julialang.org/u/odow)\
**Post date:** [February 13, 2025, 8:07am UTC](https://discourse.julialang.org/t/could-people-suggest-a-few-packages-to-study/125852/3 "2025-02-13T08:07:32Z")

</div>

Another shameless plug: [GitHub - lanl-ansi/MathOptAI.jl: Embed trained machine learning predictors in JuMP](https://github.com/lanl-ansi/MathOptAI.jl)

It’s got tests, it’s got docs, it’s got extensions in `ext`. It has CI stuff like JuliaFormatter. It’s a nice design for a plug-in type architecture that leverages Julia’s multiple dispatch.

---

<div class="post-metadata">

**Author:** ![simsurace](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/simsurace/32/30216_2.png) [@simsurace](https://discourse.julialang.org/u/simsurace)\
**Post date:** [February 13, 2025, 8:27am UTC](https://discourse.julialang.org/t/could-people-suggest-a-few-packages-to-study/125852/4 "2025-02-13T08:27:56Z")

</div>

OhMyThreads.jl  
DifferentiationInterface.jl  
Mooncake.jl

Ranging from fairly small but non-trivial to fairly complex. All of them were written from scratch fairly recently in a fairly short timeframe and with a lot of experience from previous projects, so I believe they are almost as clean as any codebase can be given their respective scopes.

---

<div class="post-metadata">

**Author:** ![gdalle](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdalle/32/27854_2.png) [@gdalle](https://discourse.julialang.org/u/gdalle)\
**Post date:** [February 13, 2025, 9:02am UTC](https://discourse.julialang.org/t/could-people-suggest-a-few-packages-to-study/125852/5 "2025-02-13T09:02:31Z")

</div>

You may also want to check out [https://modernjuliaworkflows.org/sharing/](https://modernjuliaworkflows.org/sharing/)

---

<div class="post-metadata">

**Author:** ![cdawg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cdawg/32/9811_2.png) [@cdawg](https://discourse.julialang.org/u/cdawg)\
**Post date:** [February 13, 2025, 10:20am UTC](https://discourse.julialang.org/t/could-people-suggest-a-few-packages-to-study/125852/6 "2025-02-13T10:20:15Z")

</div>

Just saw the title of the arxiv paper for diffferentiation interface,  
[“Sparser, better, faster stronger”](https://arxiv.org/abs/2501.17737)  
Cyborg-[Marianne](https://en.wikipedia.org/wiki/Marianne) would be proud. 😂

---

<div class="post-metadata">

**Author:** ![rmfritz](https://avatars.discourse-cdn.com/v4/letter/r/b487fb/32.png) [@rmfritz](https://discourse.julialang.org/u/rmfritz)\
**Post date:** [February 13, 2025, 9:36pm UTC](https://discourse.julialang.org/t/could-people-suggest-a-few-packages-to-study/125852/7 "2025-02-13T21:36:31Z")

</div>

These are great!

Thanks, everybody.

---

<div class="post-metadata">

**Author:** ![rmfritz](https://avatars.discourse-cdn.com/v4/letter/r/b487fb/32.png) [@rmfritz](https://discourse.julialang.org/u/rmfritz)\
**Post date:** [February 14, 2025, 5:37am UTC](https://discourse.julialang.org/t/could-people-suggest-a-few-packages-to-study/125852/8 "2025-02-14T05:37:57Z")

</div>

In these examples, using and export keywords always occur at the top level, before and after includes. I can make arguments in why that is preferable to using the keywords inside included files, as I have been doing, but I am not sure I believe them. Is this a widespread practice, or a matter of preference?

---

<div class="post-metadata">

**Author:** ![BdeKoning](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bdekoning/32/214557_2.png) [@BdeKoning](https://discourse.julialang.org/u/BdeKoning)\
**Post date:** [February 14, 2025, 6:19am UTC](https://discourse.julialang.org/t/could-people-suggest-a-few-packages-to-study/125852/9 "2025-02-14T06:19:32Z")

</div>

I’ve seen it quite often, and I think it’s a good practice; have one standard place with an overview of all imported and exported names.

---

<div class="post-metadata">

**Author:** ![heliosdrm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/heliosdrm/32/3851_2.png) [@heliosdrm](https://discourse.julialang.org/u/heliosdrm)\
**Post date:** [February 14, 2025, 7:04am UTC](https://discourse.julialang.org/t/could-people-suggest-a-few-packages-to-study/125852/10 "2025-02-14T07:04:08Z")

</div>

At least for the part of `using`, doing it at the top level (and before includes), that’s also good practice to reduce the risk of increased loading time due to code invalidation. Or at least that is the message that I understood by reading this nice article - highly recommendable for all package authors, I think:

> **[Analyzing sources of compiler latency in Julia: method invalidations](https://julialang.org/blog/2020/08/invalidations/)**
>
> Julia runs fast, but suffers from latency due to compilation. This post analyzes one source of excess compilation, tools for detecting and eliminating its causes, and the impact this effort has had on latency.

Specifically this assertion:

> [@](#):
>
> You can minimize some of the costs of invalidation by loading all packages at the outset–if all invalidations happen before you start compiling very much code, then the first compilation already takes the full suite of methods into account.
