# Xranklin.jl compatibility with Julia 1.12

**URL:** <https://discourse.julialang.org/t/xranklin-jl-compatibility-with-julia-1-12/133364>\
**Category:** General Usage\
**Tags:** website, franklin\
**Created:** [October 22, 2025, 4:11pm UTC](https://discourse.julialang.org/t/xranklin-jl-compatibility-with-julia-1-12/133364 "2025-10-22T16:11:54Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![kevbonham](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kevbonham/32/216165_2.png) [@kevbonham](https://discourse.julialang.org/u/kevbonham)\
**Post date:** [October 22, 2025, 4:11pm UTC](https://discourse.julialang.org/t/xranklin-jl-compatibility-with-julia-1-12/133364/1 "2025-10-22T16:11:54Z")

</div>

I’ve been using Xranklin.jl, the intended successor to Franklin.jl for building static sites. I know @tlienart has been busy / unable to devote much time to his open source development, but it’s been mostly working fine.

On upgrading to Julia 1.12 though, I’m getting world age issues when I try to to build

```julia-auto
julia> Xranklin.serve()
  Activating project at `~/Repos/LabWebsite`
[2025-10-22 11:49:51] Info: ⌛ processing config file	
[2025-10-22 11:49:51] Info: 🗑️ cleaning up all objects...
[2025-10-22 11:49:51] Info: 🏁 ... done (δt = 0ms)	

ERROR: UndefVarError: `website_title` not defined in `Main.__FRANKLIN_1585204`
The binding may be too new: running in world age 39053, while current world is 39057.
Stacktrace:

```

> **Rest of stacktrace**
>
> ```julia-auto
> [1] getproperty
> @ ./Base_compiler.jl:47 [inlined]
> [2] #_eval_vars_cell##0
> @ ./none:-1 [inlined]
> [3] iterate
> @ ./generator.jl:48 [inlined]
> [4] grow_to!(dest::Vector{@NamedTuple{…}}, itr::Base.Generator{Base.Iterators.Filter{…}, Xranklin.var"#_eval_vars_cell##0#_eval_vars_cell##1"{…}})
> @ Base ./array.jl:863
> [5] collect
> @ ./array.jl:787 [inlined]
> [6] _eval_vars_cell(mdl::Module, code::String)
> @ Xranklin ~/.julia/packages/Xranklin/6wt1L/src/context/code/notebook_vars.jl:148
> [7] eval_vars_cell!(ctx::Xranklin.GlobalContext{Xranklin.LocalContext}, cell_code::SubString{String})
> @ Xranklin ~/.julia/packages/Xranklin/6wt1L/src/context/code/notebook_vars.jl:81
> [8] html_md_def(b::FranklinParser.Block, c::Xranklin.GlobalContext{Xranklin.LocalContext})
> @ Xranklin ~/.julia/packages/Xranklin/6wt1L/src/convert/markdown/rules/text.jl:71
> [9] top-level scope
> @ none:1
> [10] eval(m::Module, e::Any)
> @ Core ./boot.jl:489
> [11] EvalInto
> @ ./boot.jl:494 [inlined]
> [12] convert_block(b::FranklinParser.Block, c::Xranklin.GlobalContext{Xranklin.LocalContext}; tohtml::Bool)
> @ Xranklin ~/.julia/packages/Xranklin/6wt1L/src/convert/markdown/md_core.jl:201
> [13] convert_block
> @ ~/.julia/packages/Xranklin/6wt1L/src/convert/markdown/md_core.jl:189 [inlined]
> [14] html
> @ ~/.julia/packages/Xranklin/6wt1L/src/convert/markdown/md_core.jl:203 [inlined]
> [15] convert_md(md::SubString{String}, c::Xranklin.GlobalContext{Xranklin.LocalContext}; tohtml::Bool, nop::Bool, error_backtracking_iteration::Int64, kw::@Kwargs{})
> @ Xranklin ~/.julia/packages/Xranklin/6wt1L/src/convert/markdown/md_core.jl:145
> [16] convert_md
> @ ~/.julia/packages/Xranklin/6wt1L/src/convert/markdown/md_core.jl:20 [inlined]
> [17] #html#120
> @ ~/.julia/packages/Xranklin/6wt1L/src/convert/markdown/md_core.jl:167 [inlined]
> [18] html
> @ ~/.julia/packages/Xranklin/6wt1L/src/convert/markdown/md_core.jl:166 [inlined]
> [19] html(md::String, c::Xranklin.GlobalContext{Xranklin.LocalContext}; kw::@Kwargs{})
> @ Xranklin ~/.julia/packages/Xranklin/6wt1L/src/convert/markdown/md_core.jl:172
> [20] html
> @ ~/.julia/packages/Xranklin/6wt1L/src/convert/markdown/md_core.jl:172 [inlined]
> [21] process_config(gc::Xranklin.GlobalContext{Xranklin.LocalContext}, config::String)
> @ Xranklin ~/.julia/packages/Xranklin/6wt1L/src/process/config_utils.jl:68
> [22] process_config(gc::Xranklin.GlobalContext{Xranklin.LocalContext})
> @ Xranklin ~/.julia/packages/Xranklin/6wt1L/src/process/config_utils.jl:19
> [23] serve(d::String; dir::String, folder::String, clear::Bool, final::Bool, single::Bool, eval::Bool, nocode::Bool, threads::Bool, use_threads::Bool, prepath::String, prefix::String, base_url_prefix::String, allow_no_index::Bool, debug::Bool, cleanup::Bool, skip::Vector{…}, port::Int64, host::String, launch::Bool)
> @ Xranklin ~/.julia/packages/Xranklin/6wt1L/src/build/serve.jl:196
> [24] serve
> @ ~/.julia/packages/Xranklin/6wt1L/src/build/serve.jl:58 [inlined]
> [25] serve()
> @ Xranklin ~/.julia/packages/Xranklin/6wt1L/src/build/serve.jl:58
> [26] top-level scope
> 
> ```

The exact same thing on Julia 1.11 builds ok, though possibly relevant, there are some different packages installed when resolving the project. When I switched to 1.11 and did `] up`, the main difference appears to be removing the JuliaSyntaxHighlighting.jl indirect dependency, the other changes seem to be minor or patch version changes.

> **Pkg outputs**
>
> When running Julia 1.11
> 
> ```julia-auto
> (LabWebsite) pkg> up
> Updating registry at `~/.julia/registries/General.toml`
> Installed OpenSSL_jll ─ v3.5.4+0
> Downloaded artifact: OpenSSL
> No Changes to `~/Repos/LabWebsite/Project.toml`
> Updating `~/Repos/LabWebsite/Manifest.toml`
> [ac6e5ff7] - JuliaSyntaxHighlighting v1.12.0
> ⌅ [aea7be01] ↓ PrecompileTools v1.3.3 ⇒ v1.2.1
> [458c3c95] ↑ OpenSSL_jll v3.5.1+0 ⇒ v3.5.4+0
> [ca575930] ↓ NetworkOptions v1.3.0 ⇒ v1.2.0
> [44cfe95a] ↓ Pkg v1.12.0 ⇒ v1.11.0
> [deac9b47] ↓ LibCURL_jll v8.11.1+1 ⇒ v8.6.0+0
> [e37daf67] ↓ LibGit2_jll v1.9.0+0 ⇒ v1.7.2+0
> [29816b5a] ↓ LibSSH2_jll v1.11.3+1 ⇒ v1.11.0+1
> [c8ffd9c3] ↓ MbedTLS_jll v2.28.10+0 ⇒ v2.28.6+0
> [14a3606d] ↓ MozillaCACerts_jll v2025.5.20 ⇒ v2023.12.12
> [efcefdf7] ↓ PCRE2_jll v10.44.0+1 ⇒ v10.42.0+1
> [83775a58] ↓ Zlib_jll v1.3.1+2 ⇒ v1.2.13+1
> [8e850ede] ↓ nghttp2_jll v1.64.0+1 ⇒ v1.59.0+0
> [3f19e933] ↓ p7zip_jll v17.5.0+2 ⇒ v17.4.0+2
> 
> ```
> 
> And when going back to 1.12:
> 
> ```julia-auto
> (LabWebsite) pkg> up
> Updating registry at `~/.julia/registries/General.toml`
> Project No packages added to or removed from `~/Repos/LabWebsite/Project.toml`
> Updating `~/Repos/LabWebsite/Manifest.toml`
> [aea7be01] ↑ PrecompileTools v1.2.1 ⇒ v1.3.3
> [c8ffd9c3] ↑ MbedTLS_jll v2.28.6+0 ⇒ v2.28.10+0
> [ac6e5ff7] + JuliaSyntaxHighlighting v1.12.0
> [ca575930] ↑ NetworkOptions v1.2.0 ⇒ v1.3.0
> [44cfe95a] ↑ Pkg v1.11.0 ⇒ v1.12.0
> [deac9b47] ↑ LibCURL_jll v8.6.0+0 ⇒ v8.11.1+1
> [e37daf67] ↑ LibGit2_jll v1.7.2+0 ⇒ v1.9.0+0
> [29816b5a] ↑ LibSSH2_jll v1.11.0+1 ⇒ v1.11.3+1
> [14a3606d] ↑ MozillaCACerts_jll v2023.12.12 ⇒ v2025.5.20
> [458c3c95] ↓ OpenSSL_jll v3.5.4+0 ⇒ v3.5.1+0
> [efcefdf7] ↑ PCRE2_jll v10.42.0+1 ⇒ v10.44.0+1
> [83775a58] ↑ Zlib_jll v1.2.13+1 ⇒ v1.3.1+2
> [8e850ede] ↑ nghttp2_jll v1.59.0+0 ⇒ v1.64.0+1
> [3f19e933] ↑ p7zip_jll v17.4.0+2 ⇒ v17.5.0+2
> 
> ```

I tried loading Xranklin in 1.12 without updating, but get a bunch of precompile errors. The Project.toml is

```julia-auto
[deps]
Dates = "ade2ca70-3891-5945-98fb-dc099432e06a"
Git = "d7ba0133-e1db-5d97-8f8c-041e4b3a1eb2"
Hyperscript = "47d2ed2b-36de-50cf-bf87-49c2cf4b8b91"
Literate = "98b081ad-f1c9-55d3-8b20-4c87d4299306"
NodeJS = "2bd173c7-0d6d-553b-b6af-13a54713934c"
TimeZones = "f269a46b-ccf7-5d73-abea-4c690281aa53"
Xranklin = "558449b0-171e-4e1f-900f-d076a5ddf486"

```

If anyone has any ideas on how to resolve this, or can point me in a good direction, I’d be happy to try to debug / make a PR to fix it.

---

<div class="post-metadata">

**Author:** ![mbauman](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mbauman/32/31082_2.png) [@mbauman](https://discourse.julialang.org/u/mbauman)\
**Post date:** [October 22, 2025, 4:22pm UTC](https://discourse.julialang.org/t/xranklin-jl-compatibility-with-julia-1-12/133364/2 "2025-10-22T16:22:12Z")

</div>

You may find some inspiration from

> <https://github.com/JuliaDocs/Franklin.jl/pull/1101>
>
> fixes the tests on 1.12
> 
> Ref https://github.com/JuliaLang/www.julialang.org/is…sues/2374

---

<div class="post-metadata">

**Author:** ![kevbonham](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kevbonham/32/216165_2.png) [@kevbonham](https://discourse.julialang.org/u/kevbonham)\
**Post date:** [October 22, 2025, 4:44pm UTC](https://discourse.julialang.org/t/xranklin-jl-compatibility-with-julia-1-12/133364/3 "2025-10-22T16:44:44Z")

</div>

Ah, indeed that looks relevant! Will give that a shot.

---

<div class="post-metadata">

**Author:** ![kevbonham](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kevbonham/32/216165_2.png) [@kevbonham](https://discourse.julialang.org/u/kevbonham)\
**Post date:** [October 22, 2025, 7:38pm UTC](https://discourse.julialang.org/t/xranklin-jl-compatibility-with-julia-1-12/133364/4 "2025-10-22T19:38:25Z")

</div>

Seems to work [Use invoke latest by kescobo · Pull Request #284 · tlienart/Xranklin.jl · GitHub](https://github.com/tlienart/Xranklin.jl/pull/284)
