# Joovy - Tiered Compilation for Julia

Joovy is Groovy for Julia: a dynamic compilation engine with three optimization tiers, lazy modules, hot-swapping and incremental reload. Apache 2.0.

Joovy is out - Apache 2.0, on GitHub.
The name is Julia + Groovy. Groovy gave Java a dynamic layer without leaving the JVM. Joovy does the same for Julia.
Here’s the itch. Julia’s compiler is brilliant, and it is also the reason you sit there waiting. Everything gets specialized and optimized whether you needed that or not, so the first call to anything is slow. Fine in production. Painful while you’re iterating.
So Joovy sits between you and the compiler and controls how hard it tries. Three tiers: tier 0 is interpreted (2ms to compile, slow to run), tier 1 is reduced optimization with @nospecialize (5-9ms, moderate), tier 2 is full native Julia (18ms, full speed). Functions start at tier 1 and get promoted automatically once they turn out to be hot.
Lazy modules do the same trick at file level. joovy_use parses the file, runs the preamble, builds a dependency graph - and compiles nothing else until you actually call something.
You can set all of it in a LocalPreferences.toml next to your Project.toml, no API calls needed:
[Joovy] default = "tier_1" Makie = "tier_0" speculate = true The 0.3.0 release added two things I like. Incremental reload hashes each definition on save and re-evaluates only the ones that changed - on a 50-definition file with a one-line edit that’s 1 re-evaluation instead of 50, and the reload runs 5.5x faster. And speculative compilation, which compiles likely-next functions in the background while the REPL stays responsive. On a 40-definition module that cut the first-call burst from 518ms to 62ms.
Honest caveat: a single first call only improves about 1.6x, because native codegen still happens on demand. The win is the burst across many first calls, not one of them.
It’s also the backend for Flexible Julia, so if you use the plugin you already have it - the IDE handles the tiering and hot-reload and you just write normal Julia.
And no, it’s not a Revise.jl replacement, before anyone asks. Revise reloads code. Joovy controls how it compiles. They get along fine.
Get it here: github.com/ilscipio/joovy
