-
chevron_right
Laureen Caliman: GSoC 2026 Final Report – Laureen Caliman
news.movim.eu / PlanetGnome • 13 hours ago • 3 minutes
Over the summer of 2026, I worked towards bringing the option of playing Vocab-Style puzzles to GNOME Crosswords as part of Google Summer of Code . This entailed adding support to the puzzle library, and writing the backend of the algorithm responsible for grid generation. Jonathan Blandford provides a thorough rundown on the ins and outs of Crosswords with these slides .
The first few weeks of the start of GSoC were spent by adding a drop-down calendar widget to Crosswords Editor, and storing GDate data as ISO8601. We decided to integrate this into my design despite it not being directly related to the proposed project because it still contributed to the Crosswords app.
For the new puzzle type, I started with adding support to the puzzle library, libipuz , which is responsible for formatting and representing puzzles styled as ‘paper-and-pencil’ crosswords. My primary mentor and I bounced ideas back and forth for some time before we started designing and writing the algorithm. We landed on an idea and I created an initial design document for the plan of action to follow for the summer. We decided that aiming for both the backend and frontend in one summer may be more work than we initially thought, so we concluded on focusing exclusively on getting a working algorithm to build from.
The bulk of this summer consisted of writing and reconfiguring the depth-first search backtracking algorithm.
GitLab Links to Code:
An overview of my GitLab profile can be found here.
-
Implementation of New Vocab Puzzles
- This is the bulk of the algorithm and unit tests. The user inputs a word, the word gets analyzed in a recursive function to check for crossings and constraints, we save the state of the board, backtrack if needed, and present a grid.
-
Vocab Ipuz
- Adding new class for IpuzVocab to support vocab puzzles in the puzzle library (libipuz).
-
Check for Island Words
- There may be a word in a list that may not share any intersection points with any others no matter how many backtracks are done. Consequently, this affects grid creation in a timely manner and may prevent grid generation at all by stating it false. We can compare the bitmask of words in the list before we even activate the algorithm to detect a word that would potentially conflict with the others.
-
Date Validation
- Previously, the Crosswords Editor had a free-for-all AdwEntryRow. However its purpose is to present a legible date to the user, and store the date in ISO8601 format. I used GDateTime, GDate, and a Gtk Calendar widget to add a drop-down calendar in the date box. The chosen date presented in Gregorian style to the user, and stored as ISO8601 to the backend.
-
Added Dispose to Shapebg
- Releases references to GObjects that Shapebg owns and frees Shapebg’s remaining memory.
Design Docs:
Blog Post Links (Most Recent -> Oldest):
- GSoC 2026 Final Report – Laureen Caliman
- Vocab-style Crosswords Update | Final Stretch
- Intern Experience at GUADEC
- Update on Crosswords Backtracking Algorithm
- Pick a Word, Any Word
- Extending Libipuz
- GSoC Project Start
- Introduction Post
I also gave a lightning talk at the 2026 GNOME Users and Developers European Conference here . Thank you to the GNOME Travel Committee for making that opportunity possible.
I still have some work to do for both Libipuz and Crosswords: finish the island-checking function detailed above, open a new MR to choose the most compact/square grid out of 500 options and present that to the user directly rather than them cherry-pick through a large selection, create a new MR to add photos of the puzzle in libipuz using gi-docgen, convert the 500-generated grid code to a PuzzleTask, and incorporate the frontend to make this a fully-functioning part of the game.
I would like to thank my primary mentor, Jonathan Blandford, and my other mentor, Federico Mena Quintero, for their guidance, feedback, patience, and teaching. This program was exactly what I needed to become better at development and serves as my rock to open-source contributions. I learned a lot of valuable skills such as document reading, how much to push in a commit, how to slow down trying to get a lot done at once, but simultaneously how to speed up my progression on the parts that actually matter, code with brevity, and a whole lot of dealing with nasty version control!
I intend to continue contributing to GNOME Crosswords as well as the overall GNOME Foundation. I look forward to collaborating with more people involved in the Foundation!