JuliaCon 2026

Giac.jl: Bringing the Giac Computer Algebra System to Julia, from FFI Bindings to Interactive Pluto Notebooks
2026-08-12 , Room 6

I present Giac.jl, a Julia interface to Giac, the open-source computer algebra system behind Xcas, GeoGebra and HP Prime. Giac.jl relies on libgiac-julia-wrapper for FFI (ie foreign function interface) bindings to the C++ library. Around it, companion packages extend Giac into the notebook world:
MathJSON.jl handles the MathJSON interchange format, PlutoMathInput.jl provides a WYSIWYG MathField widget for Pluto, and MathJSONComputeEngineBridge.jl connects them. I demonstrate this
workflow live in a reactive Pluto notebook.


Giac is a mature, open-source C++ computer algebra system developed by Bernard Parisse at Universite Grenoble Alpes. It powers the CAS engine in Xcas, GeoGebra and HP Prime calculators, and provides capabilities in symbolic algebra, calculus, polynomial arithmetic, Groebner bases, and more. Previous Julia interfaces to Giac exist (by Harald Hofstaetter and by Bernard Parisse himself), but they have seen limited maintenance and do not integrate well with the broader Julia ecosystem (notably notebooks and math interchange formats).

Giac.jl is the core package of this work. It's trying to bring the full power of GIAC to Julia, offering a high-level, Julian API for symbolic computation. Under the hood, libgiac-julia-wrapper provides the low-level FFI bindings to the giac C++ library, handling memory management and type conversions between C++ and Julia.

Around this core, I have developed companion packages that extend Giac.jl into the interactive notebook world:

  • MathJSON.jl -- Parse, manipulate, and serialize MathJSON expressions in Julia. MathJSON is a lightweight JSON-based interchange format for mathematical expressions created by the CortexJS project. MathJSON.jl converts between the MathJSON tree format (e.g. ["Add", ["Power", "x", 2], 1]) and Julia symbolic types.

  • PlutoMathInput.jl -- A Pluto notebook widget embedding a MathLive MathField (from Arno Gourdol), a WYSIWYG math editor. Using Pluto's @bind macro, users type expressions in a visual editor (rendered math, not raw LaTeX) that are converted to MathJSON and bound to a Julia variable reactively.

  • MathJSONComputeEngineBridge.jl -- The glue layer that connects the MathJSON representation to Giac.jl, coordinating the flow from visual input through parsing to symbolic evaluation and back.

Professeur agrégé PRAG (Higher Education) of applied physics at Université de Poitiers