# \[ANN\] Gremlins.jl - mutation testing for Julia

**URL:** https://discourse.julialang.org/t/ann-gremlins-jl-mutation-testing-for-julia/137506
**Category:** Package Announcements
**Tags:** package
**Created:** [June 8, 2026, 8:18pm UTC](https://discourse.julialang.org/t/ann-gremlins-jl-mutation-testing-for-julia/137506 "2026-06-08T20:18:02Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![JohnCobbler](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/johncobbler/32/222108_2.png) [@JohnCobbler](https://discourse.julialang.org/u/JohnCobbler)
#### Post date: [June 8, 2026, 8:18pm UTC](https://discourse.julialang.org/t/ann-gremlins-jl-mutation-testing-for-julia/137506/1 "2026-06-08T20:18:02Z")

</div>

Hello there, I’ve been putting together Gremlins.jl, a mutation-testing package for Julia, and I’d love for people to try it and tell me where it falls over.

Mutation testing checks whether your tests would actually notice a bug: it makes a small edit to your source — flip a `<` to `<=`, a `+` to `-` — and reports which edits your suite catches and which slip through. Tmk Julia hasn’t really had a maintained tool for this since Vimes.jl, so I wanted to take a run at it.

How Gremlins work:  
parses with JuliaSyntax and splices byte ranges (no regex over source)  
uses coverage to skip mutants on lines your tests never reach  
runs each surviving mutant through a warm worker that evals the changed method into the already-loaded module instead of starting a fresh process — on a 25-site run of one of my own packages that came out roughly 5–6× faster than process-per-mutant  
mutates a throwaway copy of the package; an interrupted run never touches your source

It’s early (v0.1.1) and there are rough edges.

For CI, there’s a `--files` flag to keep runs scoped to changed files.

```julia-auto
using Gremlins
result = mutate_warm(".")
print_warm_summary(result)

```

testing and testing of testing has become my sort-of-passion

very much open to “this is missing X” and other requests in kind

no AI was harmed during the development but it was used, especially for the documentation

---

<div class="post-metadata">

### Author: ![kapple](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kapple/32/218915_2.png) [@kapple](https://discourse.julialang.org/u/kapple)
#### Post date: [June 9, 2026, 12:24am UTC](https://discourse.julialang.org/t/ann-gremlins-jl-mutation-testing-for-julia/137506/2 "2026-06-09T00:24:42Z")

</div>

Excellent package name haha

---

<div class="post-metadata">

### Author: ![ParadaCarleton](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/paradacarleton/32/20005_2.png) [@ParadaCarleton](https://discourse.julialang.org/u/ParadaCarleton)
#### Post date: [July 20, 2026, 2:59am UTC](https://discourse.julialang.org/t/ann-gremlins-jl-mutation-testing-for-julia/137506/3 "2026-07-20T02:59:16Z")

</div>

> [@JohnCobbler](#):
>
> no AI was harmed during the development but it was used,

[Also seems to have breached containment.](https://openai.com/index/where-the-goblins-came-from/)
