A spreadsheet with Excel 2007’s files, tables and functions, written from scratch in C on GTK 4, Pango and Cairo and held to Gnumeric’s standard of correctness. A grid, a formula bar, a name box, two toolbars and sheet tabs along the bottom: Excel without the ribbon.
The sister project of Word42, built on the same principles: a small, honest codebase that does one thing well. Numbers42 is its other name, and means the same program.
Excel 2007 changed the file, the size of the grid and a good deal of what
a formula can say, and it brought the ribbon. Office42 takes the first three and leaves the
ribbon out: a book made in Excel 2007 or any Excel since opens here, and saves back as
.xlsx.
.xlsx file, read and written, and the one a new book is saved as; an .xlsm keeps its Visual Basic for Excel.xlsx comes in whole=SUM(Sales[Qty]), =[@Qty]*[@Price]IFERROR, SUMIFS, COUNTIFS, AVERAGEIF and AVERAGEIFS, and the Analysis ToolPak's functions built in, as Excel 2007 made them.xlsx drawn and kept, and its top-ten, above-average and duplicate rules read as the formulas that say the same.xlsx, tinted as Excel tints themCUBE functions, which ask an OLAP serverLater Excels are drawn on as well: dynamic arrays that spill, XLOOKUP,
LET and LAMBDA, and the text-splitting and regular-expression
functions of Excel 365.
docs/PARITY.md keeps the score, and says what is missing and why.
A working spreadsheet, not a demo. Everything below ships today, and docs/PARITY.md keeps an honest score, area by area, of what is there and what is missing.
#,##0.00;[Red](#,##0.00), [h]:mm, and the Accounting formatA1 and $A$1, whole rows and columns, 3-D references, the union, the intersection and @LET, and LAMBDA kept under a name.INTL datesFOURIER, HPFILTER, INTERPOLATION, PERIODOGRAM, the movable feasts, the Hebrew calendar, and Black and Scholes with its GreeksEUROCONVERT and Tools ▸ Euro Conversion, at the rates the euro's members fixed.gnumeric, which carries everything.xlsx, the Strict form too, and the older .xls, with formulas, styles, charts, shapes, tables, names and notes, opening in Excel, LibreOffice and Gnumeric.xlsm keeps its Visual Basic for Excel.ods and .fods, checked against LibreOffice both waysbook and sheet bound=PY("expression") in a cell; functions defined in Python appear in the Function Wizard=SQLVALUE(...)office42-calc drives the whole engine from standard inputoffice42 --screenshot renders the window to a PNG with nobody at the keyboard; the picture above was taken that wayThe sheet is sparse: cells live in a hash table keyed by a packed row and column, and an empty cell costs nothing. Formulas are parsed once and kept as trees. Each formula cell records the rectangles it reads; when a cell changes the sheet marks stale every formula whose rectangles contain it, and theirs in turn, and nothing is recomputed until something asks.
The evaluator does not know what a sheet is. It reads values through a callback, which is why the engine builds as a library of its own and can be driven from a terminal:
$ ./builddir/src/office42-calc
A1 = 10
A2 = 20
B1 = =SUM(A1:A2)*2
B1
B1 60 (=SUM(A1:A2)*2)
dump
A B
1 10 60
2 20
Six layers, each of which may only see the ones below it. formula/ never
includes model/, and neither includes GTK. Those two rules are the whole
architecture.
src/util/ cell addresses, values, number formats, dates
src/model/ the sheet, the book, charts, shapes, undo
src/formula/ the parser, the evaluator, the function library
src/io/ .gnumeric, .xlsx, .xls, .ods, CSV and the rest, PDF, SQLite
src/script/ Python: the office42 module, the interpreter
src/ui/ the grid, the window, the dialogs
src/main.c the window's entry point
src/calc-main.c the terminal front-end
data/ menus, icons, stylesheet
docs/ the guide, the architecture, the parity review
docs/ARCHITECTURE.md goes into detail.
For what a spreadsheet should hold and which files it should share. Excel 2007
brought the .xlsx file, a grid of a million rows, tables, IFERROR
and the SUMIFS family, and conditional formats of more than three rules, and
every Excel since has built on them. A book from any of them should open here and work.
The window keeps the shape Excel had before the ribbon: a menu bar, two toolbars, a
formula bar, a name box and sheet tabs along the bottom, and the menus and dialogs of
Excel 97, command for command. Later Excels are drawn on where they got something
right: dynamic arrays, XLOOKUP, LET and LAMBDA.
For how to do it right. Gnumeric was built by people who cared about numerical correctness more than about features, and that is the standard the arithmetic is held to. Its grid of 16,777,216 rows is this one's too.
Not planned: the ribbon, Visual Basic, co-authoring, Power Query and the Quattro Pro and Applix formats. docs/ROADMAP.md says why.
Version 1.0.2, released 21 September 2026; the
release notes are on GitHub.
On Windows it is in the Microsoft Store; on Linux, macOS and Windows it builds from source,
and every push to main is built and smoke-tested on all three.
Office42 needs a C11 compiler, Meson, Ninja, and GTK 4.10 or newer with Pango, Cairo and gdk-pixbuf. Python, Hunspell, SQLite and poppler-glib are used if they are there.
git clone https://github.com/office-42/office42.git
cd office42
meson setup builddir
meson compile -C builddir
./builddir/src/office42 # the window
./builddir/src/office42-calc # the engine, from a terminal
sh build-aux/smoke-test.sh
builddir/src/office42-calc puts the engine through its paces afterwards: formulas,
recalculation, undo, the five file formats, Python and the database.
Per-platform dependency lists are the same as
Word42's; see its
docs/BUILD.md.
The toolbar icons are SVG, so gdk-pixbuf wants its SVG loader at run time
(librsvg2-common on Debian and Ubuntu).
Get it from the Microsoft Store
The Store package is made from the same source on every push; docs/WINDOWS-STORE.md has the procedure.
The Linux, macOS and Windows workflows build every push and run the same smoke test, and the Linux and Windows builds treat a warning as an error; Linux builds on the newest Ubuntu GitHub keeps. The Windows job also makes a bundle that runs without MSYS2, smoke-tests it again, and uploads it and the Store package made from it as artifacts of each run.
The repository's samples/
folder holds books that exercise the formats and the function library in
.xlsx, .xls and .fods, and two that office42 writes
itself from office42-calc scripts: an income statement, and the year of
accounts in the picture above. Nothing in the accounts is typed twice, and four of its
sheets end in a line that says in words whether the sums still tie up.
Every menu, every dialog, the number-format codes, the keyboard and the terminal front-end.
A review of the code, module by module, and an honest score, area by area, of what is there and what is missing.
The layers, the sparse sheet, the dependency graph, interned formats and the undo records.
The console, the office42 module, events, the step debugger, the macro recorder and =PY().
A SQLite database beside the book or inside it, and how a cell asks it a question.
What is left, in the order it is being done, and what is not planned and why.
Word42 is a classic word processor, written from scratch in C on GTK 4, Pango and Cairo: a menu bar, two toolbars, a ruler, a status bar and a page. Inspired by classic Microsoft Word and by AbiWord, on a modern text stack. Office42 is built on the same principles, shares its build recipe and its platform lists, and borrows its interned formatting and symmetric undo records.