Relationsheet

The deep dive

Every part of it, in detail.

The landing page shows you each capability working. This one explains it — what it is, what it can do, and where it stops. The last section is the list of things it does not do, because a product page that only lists strengths is not describing a product.

01 · The relational core

Links are stored, not typed twice.

A relation column holds a reference to a row in another sheet. Not a copy of its name — a reference. Rename the account and every row pointing at it says the new name, because none of them ever held the old one. This is the difference the rest of the product rests on: everything below is only possible once the link is a stored fact.

Cardinality

One-to-one, one-to-many and many-to-many. A many-to-many is a real junction, so a booking can carry its own fields rather than being an implied pair.

Lookups

Pull a field through a link and read it in place. The tier lives on the account; the project row can show it without storing it.

Rollups

Aggregate across a link — sum, count, min, max, average, and a filtered variant. The invoice total on an account is computed, never maintained.

ER view

The whole base as a diagram of tables and the links between them, so the model is legible before it is large.

Sub-tables

A column that owns a child sheet of its own, created from a template — line items on an order, inspections on an asset.

Referential integrity

Links are constrained in Postgres. A row cannot point at something that is not there, and deleting a parent is a decision you are asked to make.

02 · Typed data

26 column types, and one of them is deliberately untyped.

A spreadsheet lets any cell hold anything, which is why spreadsheets rot. Relationsheet types the column instead — but keeps a free type for the cases where you genuinely do not know yet, so nothing forces you to design the schema before you have the data. Changing a column’s type shows you what will happen to every value in it before it happens.

Scalar

Free (untyped) · Text · Number · Currency · Percent · Date · Boolean · Duration · Rating

Constrained

Select · Multi-select · URL · Email · Phone · User

Relational

Relation · Lookup · Rollup · Sub-table

Computed

Formula · Script

System

Attachment · Created at · Updated at · Created by · Updated by

03 · One record set

9 readings of the same rows.

A view is a way of looking, not a copy. Switching from a grid to a timeline moves nothing and duplicates nothing; the analyst and the delivery lead are working the same records at the same moment. Each view keeps its own filters, sorts, grouping and visible columns, and a view can be shared or published without exposing the sheet behind it.

Grid

The spreadsheet. Frozen columns, grouping, filters, sorts, conditional formatting, and inline editing with keyboard navigation.

Board

Kanban grouped by any select or relation column, with swimlanes, WIP limits and a per-column sum.

Timeline

A Gantt with real dependencies, critical path, and drag-to-reschedule that writes back to the rows.

Calendar

Month, week and day, driven by any date column — including a computed one.

Gallery

Cards with an attachment as the face, for anything that is easier recognised than read.

Form

A view published as an intake surface. See §06.

Pivot

Cross-tabulation with sub-totals over any two dimensions, computed live from the rows.

Dashboard

A canvas of charts, figures and filtered tables over one or several sheets.

Report

A paginated, print-oriented reading of a view with headers, groups and totals.

04 · Bring your formulas

211 functions, and they cross sheets.

Math, statistics, text, logic, date, financial and the lookup family — VLOOKUP, XLOOKUP, INDEX/MATCH, IFS, SWITCH, TEXTJOIN and the rest — with Excel-compatible semantics including the error values. References reach another sheet by name, so =SUM(Projects!E1:E12) resolves across the base rather than inside one tab.

  • Financial — PMT, FV, PV, NPER, RATE, NPV, IRR and the depreciation family, verified against Excel’s own results.
  • A formula column computes for every row and recalculates when its inputs change, including through a lookup.
  • Errors are values — #DIV/0!, #VALUE!, #REF! and friends propagate the way you expect, so a broken cell does not silently become zero.
  • A reference is built in — every function with its signature, description and a worked example.

Browse the full function reference →

05 · Where a formula runs out

A sandboxed language, with a step budget.

Some logic is not an expression. Scripting is a small language with 71 documented builtins that runs in a sandbox with no network, no DOM and no eval, under a step budget so a runaway loop ends rather than hangs.

As a column

Computes a value per row, like a formula but with statements, branching and loops.

From the console

Run against the sheet you are looking at, with the result and any writes shown before they are applied.

Inside an automation

A step in a workflow, receiving the triggering row and the run's variables.

What it may write

Enforced on the server, not by the editor. A script cannot reach past the permissions of whoever runs it.

Browse the scripting reference →

06 · Data from outside

A form is a view somebody else can write to.

Publish a view as a public form and a submission becomes a typed, correctly linked row. The person filling it in has no account, never sees the base, and cannot read a single row of it — the form is a constrained surface over the same policies that govern everything else.

Conditional logic

Show, hide or require a field based on an answer already given, so one form serves several paths.

File uploads

Attachments land on the row, scoped to the submission.

Calculated fields

A value derived from other answers as they are typed — a total, a duration, an eligibility flag.

Save and resume

A long form can be left and returned to from a private link.

Parent and children together

One submission can write a parent row and its child rows in a single transaction — an order and its line items, a claim and its documents.

Confirmation and follow-up

A confirmation screen or message, and an automation can take it from there.

07 · When a form is not enough

An app is a published surface with its own users.

An app is built on the same base but has its own users, its own roles and a canvas you lay out yourself. Contractors see their jobs, clients see their tickets, a field team sees today’s list — and none of them see a spreadsheet. What each role may read and write is decided by the same row-level policies described in §12, so the app is not a privileged client; it is a constrained one.

08 · The work nobody wants

It reacts to how a value changed, not just that it did.

A won deal creates the invoice. A delivered project bills itself. An overdue task tells one person, once. Automations are built on a canvas rather than in a list, because real operational rules branch.

Triggers

13 kinds — row created, updated, deleted, a field changing in a specific way, entering or leaving a value, a schedule, a form submission, a webhook, an approval decision, and more.

Transition conditions

Fire on how a value changed rather than that it changed: crossed a threshold, became empty, moved from one status to another.

Nodes

38 kinds on one canvas — set values, create and link rows, branch, loop over a relation, wait, request an approval, run a script, generate a document, call a webhook, send a notification.

Control

Per-node retries with backoff, a run log with each step's input and output, and a manual re-run from any point.

09 · Paperwork, from the records

The document is the data, laid out.

Write a template once with tokens, conditionals and a repeat block over a relation, and every record produces its own statement, quote, work order or contract with the linked rows already in it.

  • Tokens pull any field, including through a lookup or a rollup.
  • Conditionals include a paragraph only when the record warrants it.
  • Repeat blocks iterate a relation — every invoice line, every inspection, every attendee.
  • Approvals route a generated document sequentially or in parallel, with quorum and drawn signatures captured on the record.
  • Automated generation — a document produced the moment a row reaches a state, attached to that row.
  • Export is Word (.docx), written directly rather than through a converter. There is no PDF renderer.

10 · Reading the numbers

13 chart styles, over the live rows.

Charts read the same records as everything else, so nothing is exported to be visualised and nothing goes stale. Column, bar, line, area, stacked and grouped variants, pie and donut, scatter, and a set of single-figure readouts. Put several on a dashboard view with their own filters, or drop one beside the grid it describes.

11 · Getting in and out

It is your data, in both directions.

CSV

Import with type inference you can correct before it commits; export any view.

Excel

Import .xlsx sheets, and export any view back to .xlsx with formatting.

JSON

Import nested JSON, with the importer proposing tables and relations for the nesting.

SQL DDL

Point the importer at existing CREATE TABLE statements and it plans the sheets, column types and relations from the schema — foreign keys become relation columns.

Word

Documents out as real .docx from the document builder.

REST API

Read and write rows with an API key, subject to the same row-level policies as a person.

Webhooks

Outbound calls from an automation, with a per-automation secret in the URL and a rate limit at the door.

12 · Below the interface

Hiding a column is not what protects it.

Where it is enforced

Postgres row-level security, below the interface. A published form, an app, the REST API and the grid all pass through the same policies — a client is never trusted to hide anything.

Grain

A whole sheet, specific rows, or specific columns; for a person or a group.

Conditional rules

A grant can depend on a cell's value, so somebody sees exactly the rows for their own region, team or account and nothing else.

Columns

Hidden outright, or returned redacted so the row still makes sense without the number in it.

Audit

Every change recorded with a per-cell before/after diff in a tamper-evident log.

13 · Or start from a wired base

45 templates, already linked.

Each arrives with its tables related, its lookups and rollups computing and enough seed rows to see how it is meant to work — so the first thing you meet is a working model rather than an empty grid. You can capture one of your own bases as a template too.

OperationsProject managementFinance & accountingSales & CRMHR & recruitingSoftware developmentMarketingNonprofitCustomer supportEducationInsuranceMembershipMediaPlanningProductCustomer successFinance

Open the template gallery →

14 · Straight answers

What it does not do.

Every product page has this list. Most of them do not print it. These are the things people ask for that are genuinely not built — if one of them is a requirement, tell us rather than finding out three weeks in.

  • Documents export to Word (.docx). There is no PDF renderer.
  • There are no live third-party connectors — no Slack, Salesforce, QuickBooks or Google Sheets sync. Integration is the REST API and outbound webhooks.
  • There is no offline mode. The app needs a connection.
  • There is no mobile app and no Microsoft Teams app. The web app is responsive; that is the whole mobile story today.
  • Sign-in is email or Google. Enterprise SSO and SAML are not built.
  • Paid plans are not open yet, so everything currently runs in the free workspace.

Read enough. Go and link two tables.