A modern, cross-platform desktop GUI for the Maxima computer algebra system. Aximar provides a notebook-style interface with beautifully rendered math output via KaTeX.
Built with Tauri v2 (Rust backend) and React + TypeScript (frontend).
See the vector calculus example for a Stokes' theorem verification notebook.
- Notebook interface — code and markdown cells with drag-to-reorder
- LaTeX math rendering — Maxima output rendered with KaTeX
- Inline plots — 2D, 3D, and parametric plots displayed as SVGs
- Function discovery — searchable catalog of 2500+ functions, docs panel, hover tooltips
- Command palette — quick access to functions and categories (Ctrl+K / Cmd+K)
- Smart editor — syntax highlighting, autocomplete, signature hints
- Find & replace — search across cells with regex support
- Error enhancement — friendly explanations, "did you mean?" suggestions, correct signatures
- Variables panel — inspect and manage bound variables
- Templates — starter notebooks for calculus, linear algebra, plotting, and more
- Dark/light/auto theme — follows your system preference or set manually
- MCP server — AI integration via Model Context Protocol, with built-in setup for Claude Code, Codex, and Gemini CLI
- Multiple backends — run Maxima locally, in Docker/Podman, or via WSL
- Save & load — persist notebooks in Jupyter-compatible format
- Print support — configurable margins and font sizes for printing
Aximar requires a working Maxima installation.
| Platform | Install |
|---|---|
| macOS (Homebrew) | brew install maxima |
| Ubuntu/Debian | sudo apt install maxima |
| Fedora | sudo dnf install maxima |
| Windows | See Windows setup below |
On Windows you have three options for running Maxima:
Option 1: Native Windows install (Local backend)
Download and install Maxima from sourceforge.net/projects/maxima. Aximar will automatically detect installations at C:\maxima-*\bin\maxima.bat. You can also set a custom path in Settings.
Option 2: WSL backend
If you use Windows Subsystem for Linux, you can run Maxima inside a WSL distribution:
- Install Maxima in your WSL distro (e.g.
sudo apt install maxima) - In Aximar, open Settings and set the backend to WSL
- Select your distro from the dropdown — Aximar will show whether Maxima was found
Plotting works automatically — Aximar copies rendered SVGs from the WSL filesystem to a local temp directory.
Option 3: Docker/Podman backend
Run Maxima in a container for full isolation:
- Install Docker Desktop or Podman
- Pull a Maxima image (e.g.
docker pull maxima/maxima) - In Aximar, set the backend to Docker, choose your engine, and enter the image name
Aximar looks for the maxima binary in these locations (local backend):
AXIMAR_MAXIMA_PATHenvironment variable/opt/homebrew/bin/maxima,/usr/local/bin/maxima,/usr/bin/maxima- Windows:
C:\maxima-*\bin\maxima.bat - Falls back to
maximaonPATH
- Type a Maxima expression in a cell (e.g.
integrate(x^2, x);) - Shift+Enter — evaluate the cell and create a new cell below
- Ctrl/Cmd+Enter — evaluate in place
- + Cell / + Markdown — add code or markdown cells
- Run All — evaluate all cells in order
- Restart — restart the Maxima session (clears Maxima state, not your cells)
Hold Ctrl (or Cmd on Mac) to see all shortcuts. Key bindings include:
| Shortcut | Action |
|---|---|
| Shift+Enter | Evaluate and advance |
| Ctrl/Cmd+Enter | Evaluate in place |
| Ctrl/Cmd+K | Command palette |
| Ctrl/Cmd+Z | Undo |
| Ctrl/Cmd+Shift+Z | Redo |
| Ctrl/Cmd+F | Find |
| Ctrl/Cmd+Shift+F | Find & replace |
| Ctrl/Cmd+D | Delete cell |
| Ctrl/Cmd+Shift+Up/Down | Move cell |
| \ | Symbol entry — type a LaTeX name (e.g. \alpha, \leq, \nabla) to insert Unicode |
Open Settings from the toolbar to configure:
- Theme — auto, light, or dark
- Cell style — card or bracket
- Backend — local, Docker, or WSL
- Font sizes — editor and print
- Markdown font — sans-serif, serif, Computer Modern, or mono
- Evaluation timeout — 10s to 120s
- Print margins — top, bottom, left, right (mm)
The status bar at the bottom of the app shows the most recent event. Click it to open the log window with two tabs:
- App Log — session events, evaluation results, warnings, and errors
- Maxima Output — raw stdin/stdout/stderr from the Maxima process (useful for debugging)
integrate(x^2, x);
diff(sin(x)*cos(x), x);
solve(x^2 - 5*x + 6 = 0, x);
expand((a + b)^4);
factor(x^4 - 1);
taylor(exp(x), x, 0, 5);
plot2d(sin(x), [x, -%pi, %pi]);
Aximar exposes its capabilities via the Model Context Protocol, letting AI assistants search function docs, manage notebook cells, run Maxima expressions, and inspect session state. There are 21 tools available — see docs/mcp-server.md for the full list.
When the Aximar app is running, enable the MCP server in Settings. It listens on localhost:19542 with bearer token authentication.
One-click setup — Settings shows Configure buttons for Claude Code and Codex that automatically register the MCP server with the correct URL and auth token. No manual config needed.
You can also configure manually:
# Claude Code
claude mcp add --transport http \
--header "Authorization: Bearer <token>" \
-- aximar http://localhost:19542/mcp
# Codex — add to ~/.codex/config.toml:
# [mcp_servers.aximar]
# url = "http://localhost:19542/mcp"
# http_headers = { "Authorization" = "Bearer <token>" }The standalone aximar-mcp binary runs its own Maxima session over stdio, without the GUI.
# Build it
cargo build -p aximar-mcp --release
# Register with Claude Code
claude mcp add aximar -- ./target/release/aximar-mcpVerify either mode is working:
claude mcp list- Node.js >= 18
- Rust (stable toolchain)
- Tauri v2 system dependencies — see the Tauri prerequisites guide
npm install
npm run tauri devThis starts both the Vite dev server (frontend hot-reload) and the Tauri Rust backend.
npm run tauri buildBuild artifacts are placed in src-tauri/target/release/bundle/:
- macOS:
.appbundle and.dmg - Linux:
.AppImageand.deb - Windows:
.msiinstaller
# Rust unit tests (all workspace crates)
cargo test --workspace
# TypeScript type checking
npx tsc --noEmitThe app communicates with Maxima through a long-lived subprocess. The Rust backend manages this process, sending expressions via stdin and reading results from stdout using a sentinel-based protocol. See docs/maxima-protocol.md for details.
React Frontend <-> Tauri IPC <-> Rust Backend <-> Maxima subprocess
(stdin/stdout)
| Layer | Technology |
|---|---|
| Desktop shell | Tauri v2 |
| Frontend | React 19, TypeScript, Vite |
| Code editor | CodeMirror 6 |
| Math rendering | KaTeX |
| State management | Zustand |
| Subprocess I/O | tokio::process |
- wxMaxima — the long-established GUI for Maxima, built with wxWidgets. wxMaxima offers a mature feature set including interactive animations with slider controls,
table_form()for tabular data display, and notebook export to HTML/LaTeX. Aximar aims to provide a more modern interface and cross-platform experience via Tauri, but wxMaxima remains an excellent choice — especially if you need animation support or.wxm/.wxmxfile compatibility.
GPL-3.0-or-later
