NEWNew in 0.17: your workbook becomes a workspace

Reference data, without the suite.

Lists, codes and mappings every system agrees on. Model-driven, API-first, open source.

One model

One model, many views.

Describe your data once. refiroo shows the same records as a table, a tree, a mapping grid, a matrix or an API response, so nothing is copied and nothing drifts apart. Then it is shown through dimensions: a list, a grid, a cube and time.

  1. 1 / 11

    The model

    A model describes your applications and record types: categories, products, markets, languages, and how they relate. Every view on this page is drawn from it.

  2. 2 / 11

    A table

    Open a record type as a table and edit it like one: a row per product, with its category and its ERP code. Typed fields keep the values clean.

  3. 3 / 11

    A tree

    Categories are a hierarchy, so they are shown as a tree. Move a product to another branch and it follows everywhere that tree is used.

  4. 4 / 11

    A mapping grid

    Line up each product with the code every system uses for it: ERP, webshop and warehouse. Each system keeps its own spelling, and they all point at one product.

  5. 5 / 11

    A relation matrix

    Which products are sold in which markets? Fill a cell and the relation is stored once. Nothing is copied into a spreadsheet on the side.

  6. 6 / 11

    An API

    The same records come out of the API as plain JSON, with codes, markets and translations attached. Every view above is a client of it, and your scripts can be too.

  7. 7 / 11

    1D: a list

    One dimension is a list: values, one after another. Product names in a single row is the simplest thing refiroo holds, and often all a consumer needs.

  8. 8 / 11

    2D: a grid

    Add a second dimension and the codes fall into columns: products down, systems across. Each cell is one fact, and each system finds its own.

  9. 9 / 11

    3D: a cube

    A third dimension turns the grid into a cube: products by markets by languages. How is this product called in French, for Spain? One cell, stored once. Keep scrolling to turn it.

  10. 10 / 11

    4D: a fourth axis

    A fourth axis cannot be drawn, only projected. This shadow of a tesseract turns through it: the same cube, seen from a place where its inside and outside swap.

  11. 11 / 11

    4D: time

    That fourth axis is time. The model is versioned and every change is kept, so there is a copy of the cube for each version. The API can read the data as of any date: ask for 2026-03-01 and you get the cube as it stood. Keep scrolling to move through the dates.

Model

Record types and how they relate.

BeveragesCoffeeArabica 1 kgGermanyArabica-Kaffee

Table

A row per product.

ERPname
100245Arabica 1 kg
100310Green tea

Tree

Categories with products under them.

Beverages
Coffee
Arabica 1 kg

Mapping

One column per system.

ERPWebshopWarehouseArabica100245cof-arabica-1kgWH-CF-01

Matrix

Products against markets.

DEFRESITArabicaGreen tea

API

The same records as JSON.

{ "name": "Arabica 1 kg",
  "erp": "100245",
  "webshop": "cof-arabica-1kg" }

List (1D)

Values in a row.

Arabica 1 kgEspresso 1 kgGreen tea

Grid and cube (2D, 3D)

Products by systems, then by markets and languages.

ERPWebshopWarehouseArabica100245cof-arabica-1kgWH-CF-01

Time (4D)

Every version is kept; read the data as of any date.

v32026-09-01
v22026-03-01
v12025-09-01

Stop 1

Bring the workbook you have.

Drop in the workbook you already keep: refiroo reads every row and makes it a workspace in one go. Rather say it in a few words? The assistant designs the model with you, and you edit what it proposes before anything goes live.

See import in detail
>A product catalogue: categories, products with their ERP, webshop and warehouse codes, and the markets we sell in
catalogue.xlsxbecomes a model
Productproposed
Nametext
Categoryrelation
ERP codecode
Webshop codecode
Warehouse codecode

Stop 2

Shape it your way.

The model is a versioned description of your record types and how they relate. It is activated only after a compatibility check, so a change cannot break the data you already hold. The engine never hardcodes your domain.

See model in detail
Productname · textcategory → Categorysold in → MarketCategoryname · textparent → CategorySystem codesystem · textvalue · textproduct → ProductMarketname · textcurrency · codebelongs torefers tosold inv3 · activated

Stop 3

Map the mess.

The ERP calls it 100245, the webshop cof-arabica-1kg and the warehouse WH-CF-01. Link each system's code to the same product and every system still finds its own value. One product, one meaning, three spellings.

See mapping in detail
ERP100245
Webshopcof-arabica-1kg
WarehouseWH-CF-01
One productArabica 1 kg

Hover a code to follow its line.

Stop 4

Change together, publish once.

Rename a product, move it to another category and change its webshop code as one coordinated change set. Review what it touches, then publish everything in one step. Nobody ever sees half of it.

See change sets in detail
Change set3 edits
~Rename Arabica 1 kg toArabica coffee 1 kg
~Move it from Coffee toCoffee capsules
~Webshop code: cof-arabica-1kg tospc-arabica-1kg

Review

Names and codes are valid
Every system still has a code
Nothing else affected
Published

Stop 5

Every language.

Each product keeps its name in every language you sell in. Complete the translations of the whole list instead of opening one record at a time, and see at a glance which translations are still missing.

See translations in detail
EnglishArabica coffee 1 kg
DeutschArabica-Kaffee 1 kg
EnglishDeutschFrançaisEspañolItaliano

Stop 6

Plug it into everything.

Everything the browser does is also in the API, so scripts and other systems read exactly what you see. A change feed and webhooks tell them when something moves, and business-date reads show what was valid on any day. AI agents get access too, through MCP.

See api in detail
$ curl -G https://refiroo.example.com/api/consumer/catalogue/v1/xref \    -d workspace=shop -d query=100245 -d asOf=2026-11-01
{
  "results": [
    {
      "objectType": "Product",
      "code": "100245",
      "name": "Arabica 1 kg",
      "systemCodes": [
        { "system": "ERP", "code": "100245" },
        { "system": "Webshop", "code": "cof-arabica-1kg" },
        { "system": "Warehouse", "code": "WH-CF-01" }
      ],
      "matchScore": 900
    }
  ],
  "query": ["100245"],
  "workspace": "shop",
  "totalCount": 1
}
Read the API reference
rdm.catalogue-changed.updatedwebhook delivered
MCP · agents welcome

Agents welcome

Bring your assistant along.

Your assistant can read your lists and prepare changes for you to review, through MCP. Copy one line, sign in to the demo, and ask it about the stops and operators of Graubünden.

Paste this in your terminal

claude mcp add --transport http refiroo https://demo.refiroo.com/mcp
  1. Sign in when it asksYour assistant opens refiroo's own sign-in page. On the demo, use the sign-in from the demo page.
  2. Ask it somethingIt sees exactly what you may see, and reads a list to its last page.
  3. Review what it preparedIts changes wait in a change set until a person publishes them.

Connect an assistant, in the guide

Which operators in Graubünden have no Italian name yet?

list_workspacesdescribe_model · graubuendenfind_records · operator · page 1 of 2find_records · page 2 of 2

All 71 operators. Each of them has a German and a French name so far, and nothing in Italian, Romansh or English. Shall I list them, valley by valley?

You stay in charge

It proposes. You publish.

An assistant prepares a change the way a colleague would. You look it over, and nothing goes live until a person publishes it.

  1. assistantPrepares

    Opens a change set, adds and corrects, and checks its work.

  2. assistantSubmits

    Every row it touched is marked Prepared by an assistant.

  3. youReview

    Keep, correct or drop each change, as you would a colleague's.

  4. youPublish

    Only now do the API, the change feed and the webhooks see it.

What is inside

The small pieces, all in one place.

Tables

Typed fields for products, categories and every other list you keep.

ERPname
100245Arabica 1 kg
100310Green tea
100420Shortbread

Mapping grids

One row per product, one column per system.

ERPWebshopWarehouseArabica100245cof-arabica-1kgWH-CF-01Green tea100310tea-green-100gWH-TE-01

Relation matrix

See which products are sold where at a glance.

DEFRESITArabicaGreen teaShortbread

Trees

Parents and children for categories, regions and groups.

Beverages
Coffee
Arabica 1 kg
Tea

History and review

Every change is recorded and reviewed before it goes live.

Arabica 1 kg renamed draft
Reviewed in review
Published live

Roles and sign-in

Decide who may read, edit and publish. People sign in with their e-mail and hear from refiroo when their sign-in changes.

Readerread
Editoredit
Publisherpublish

Your own look

Five themes, each in light and dark, and each with its own way of arranging the screen. Your e-mails can wear your logo too.

Current
Hearth
Studio
Instrument
Website purple

Where it starts

Which spreadsheet would you rather retire?

Most refiroo stories start with one file nobody dares to sort. Pick yours, and see where it goes from there.

Who it is for / not for

Made for the people who keep the lists.

It is for

  • Data stewards who own the lists many systems share, such as categories, products, markets and their translations.
  • Integration developers who need one place to ask which code means what, and an API that answers.
  • Architects who want shared lists kept out of every application and out of a heavy suite.

It is not for

  • Transactional data such as orders, stock levels or invoices. Keep those in the system that runs them.
  • Analytics and reporting. refiroo holds the lists you report by, not the reports.

Ours to host.Free to run.

Hosted by us

The same software, looked after

Backups, upgrades, TLS and monitoring are ours. Your data stays exportable any time.

Request early access
Self-hosted

Run it yourself

  • AGPL-3.0
  • One Compose file
  • Your PostgreSQL
  • Every feature

Built in the open

Built in the open, with AI.

refiroo is delivered by AI coding agents, Claude Code and ChatGPT Codex, under human review. Every change is a small, checked step: the tests pass and the build holds before it lands. It is a one-person project, and every plan, decision and release is in the open.

Every release has a plan, a review and a changelog.

  1. 0.3
  2. 0.5
  3. 0.6
  4. 0.7
  5. 0.8
  6. 0.9
  7. 0.10
  8. 0.11
  9. 0.12
  10. 0.13
  11. 0.16
  12. 0.17

Released versions.

Let us run it for you.

Backups, upgrades, TLS and monitoring are ours. Your data stays exportable any time.