# \[ANN\] ChipFiring.jl: fast (and easy!) computations on chip-firing graphs

**URL:** <https://discourse.julialang.org/t/ann-chipfiring-jl-fast-and-easy-computations-on-chip-firing-graphs/139767>\
**Category:** Package Announcements\
**Tags:** algebra, combinatorics\
**Created:** [September 30, 2026, 11:13pm UTC](https://discourse.julialang.org/t/ann-chipfiring-jl-fast-and-easy-computations-on-chip-firing-graphs/139767 "2026-09-30T23:13:06Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![vincentxwang](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vincentxwang/32/210262_2.png) [@vincentxwang](https://discourse.julialang.org/u/vincentxwang)\
**Post date:** [September 30, 2026, 11:13pm UTC](https://discourse.julialang.org/t/ann-chipfiring-jl-fast-and-easy-computations-on-chip-firing-graphs/139767/1 "2026-09-30T23:13:06Z")

</div>

I’m happy to announce [ChipFiring.jl](https://github.com/vincentxwang/ChipFiring.jl), a package for computations on chip-firing graphs that I worked on last summer!

The main purpose of this package is computing gonalities on discrete graphs (in the sense of Baker–Norine), though we also support related operations. We’ve designed this to be simple to use, but also optimized for intensive uses like searching over families of graphs.

More specifically, we support the following:

1. Basic operations on chip-firing graphs (e.g. firing, lending)
2. Computations of r-th graph gonality
3. Uniform subdivisions of graphs
4. Rank computations
5. q-reduction, Dhar’s burning algorithm, and equivalence testing
6. Conversion from graph6 format

# Example

```julia-auto
julia> multiplicity_matrix = [
    0 2 0 1;
    2 0 1 0;
    0 1 0 1;
    1 0 1 0   
]
[output omitted]

julia> g = ChipFiringGraph(multiplicity_matrix)
Graph(V=4, E=5, Edges=[(1, 2), (1, 2), (1, 4), (2, 3), (3, 4)])

julia> compute_gonality(g)
2

julia> d = Divisor([1, 1, 1, 1])
Divisor([1, 1, 1, 1])

julia> q_reduced(g, d, 1)
Divisor([-4, 1, 1, 0])
```
