My thoughts are oriented around tabular data and traditional relational database organization. I wanted spreadsheets to organize data and give me good overviews of my game content, but google sheets weren’t enough:
- No type enforcement on columns
- Can’t validate references across tables
- Infeasible support for advanced types
- No support for linking Godot resources
- Easy to write data that “breaks the rules”
There were a few solutions I found out there that each solved some of these, but no good way to stitch it all together.
Librarian is the plugin I’m developing to help me make my games, and maybe it will help you make yours. It’s a spreadsheet plugin for the Godot 4 editor designed to support complex relational data with the needs of rapid prototyping in mind.
The 1.0 Release Goal
Types!
A string is not a texture and no sane code will turn an arbitrary Hello, world! into the path to your item sprite. Unlike many spreadsheet programs, Librarian strictly enforces data types for all columns and ensures they always contain a valid value. This is one of the few things the plugin won’t let you cut corners with.
Supported data formats will include flags, numbers, text, vectors, textures, color palettes, themes, arbitrary resources, and more. Individual data formats will include other options to further define what is expected.
Declarative Data Tests
Need to ensure unique IDs? Not sure if you have every character portrait for your dialogue system? Does every weapon in your item system need a corresponding weapon stats definition? Librarian has you covered. Write tests which describe your data declaratively using GDScript and Librarian will validate every entry for compliance.
Test compliance is not a strict requirement. It can be hard to keep up with all your rules while rapidly prototyping. You can still save non-compliant datasheets and trust your game code to handle missing or inconsistent data as needed. Librarian will not stop you, it will only alert you.
Using this, we can simulate primary key/foreign key systems in databases, but without the need to configure every last piece of data down the relational chain. Maybe we just need to see how a new spell displays in our game menus and we don’t need to sort out just yet all its effects and stats or where you can buy it. Librarian will let this happen and just make note of the missing entries.
Global Tagging System
Every spreadsheet has a Tags column. Tags are defined with a unique name at the project level and can be placed on any row in any spreadsheet. In addition to being available to your game at runtime, tags are primarily useful for writing data tests.
The Current State (Jan 14, 2026)
Much of the foundation is laid. The functionality is spread across the main screen and two docks, emulating existing stock editor docks.
Most CRUD operations are implemented for tables and their data. Tables, rows, and columns can be added or deleted. Columns can have their types modified and make a best effort to preserve data on modification.
Data is stored in CSV files. Game code must read these files to obtain the data at runtime.
Supported types include text, numbers (integers and floating point), and boolean flags.
Tags and data tests are currently unimplemented ![]()
What Now?
Development continues on. I work on my games in my free time and this is part of that work. I hope to get to a stable release with the features I need to work on my games, but if my needs for this tool end up resonating with others I’d love to continue maintenance on it.
Please feel free to download the project from GitHub and play around with it. I’m open to comment.
