Librarian: an editor plugin for managing relational data

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 :sob:

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.

4 Likes

Some fearless feedback, could you maybe use some simpler language when describing the plugin.

I know that makes me sound dumb, but I had to google search word definitions multiple times while reading the summary (What the heck is “tabular”?) and my brain just glosses over everything, even with my solid vocabulary.

Also, I really don’t understand what the use-case of this plugin is. I know there definitely is one, but I just couldn’t grasp it fully. Could you provide some more detailed game implementation?

For reference, programming isn’t my strongest skill and I barely use spreadsheets. So I apologise if this feedback sounds unconstructive. Nothing’s really clicking for me.

I’m quite impressed with this plugin. It’s definitely intended for people who understand relational databases. Having said that, I would recommend some use case examples in your ReadMe for people who are not experienced with relational databases.

@Demetrius_Dixon to understand what they wrote, I’d recommend learning about SQL. There’s actually a Godot SQLite plugin. This kind of stuff is useful when you have complex data with lots of inter-relating things. They are most useful for RPG and crafting games.

4 Likes

You’re right. I think I’m just the wrong type of person for this plugin.

I know for a fact there are people who’ll use it though.

1 Like

Things like this are good to know! I work in the software industry and so don’t always have an idea of what game developers without a programming background may or may not know. I’ll say that when giving a blurb about key features, I tend to value conciseness over verbose, plain language, but that’s not to say I won’t refine these descriptions and my documentation over time.

Despite this plugin being oriented towards developers with an intermediary understanding of programming and data structured, I do hope this plugin can still be useful for beginners who just want a spreadsheet with some engine integration. Especially once more advanced column types come around such as textures, scenes, etc.

3 Likes

That’s pretty cool. Maybe I outta learn a spreadsheet or two.