Tables · Lookup Tables · Edge

Spreadsheets that are real tables.

Veldje gives you an Airtable-style grid where every table you create is a real SQL table you own, served from bunny.net's edge and stored in libsql.

Tasks u3_t7
TitletextStatusselect → StatusDuedateDonecheckbox
Plant the fieldDone2026-03-12
Water the seedlingsIn progress2026-09-08
Build the fenceTodo2026-09-21
c9 INTEGER REFERENCES u3_t8(id) · Status is a table too. Add a color column to it whenever you like.
01

Every table is yours

Each table you create becomes a physical table in the database, scoped to your account. No EAV, no JSON blobs, just rows and columns.

02

Lookup Tables are tables with a foreign key

A select column points at a lookup table through a real foreign key. Extend a lookup table with extra columns, and the constraint keeps your data honest.

03

Runs where your users are

The API is a single bunny.net Edge Script talking to libsql over HTTP. Nothing to host, nothing to scale.

Two requests, one foreign key.

Create a lookup table, then a table with a select column that references it. Veldje generates the identifiers, so user-typed names never touch SQL.

Sign in with a magic link: post your email, click the link within 20 minutes, and every call after that carries the session cookie or its value as a bearer token.

# the Status lookup table (gets a required "label" column)
curl -X POST /api/tables \
  -H 'authorization: Bearer …' \
  -H 'content-type: application/json' \
  -d '{"name":"Status","isLookup":true}'

# a Tasks table with a select column pointing at it
curl -X POST /api/tables/1/columns \
  -H 'authorization: Bearer …' \
  -H 'content-type: application/json' \
  -d '{"name":"Status","type":"select","refTableId":1}'