Skip to content
singularity://database — how it works

One database. Every backend job.

Postgres for rows, S3 for files, Redis for cache, a search index, an auth service: that stack is five products doing one database's job. Here it is one namespace, one query language, one permission model. This page shows how.

The Singularity Database combines relational, object, BLOB, graph, file system, key/value, XML repository, identity and stream data
how we deliver: launch in weeks, not quarters

One data model does the work of five services.

A container is a table or a folder, an object is a row, key/values are columns, streams are files. One namespace, one query language, one permission model — so there is nothing to integrate.

Relational

Container as table, object as row, key/values as columns. Every row can carry its own ACL.

Graph

Containers inside containers, as deep as you need, or groups and sub-groups with their own databases.

Key/value

Indexed metadata on any object: an invoice number, a due date, a mail subject — anything you want back fast.

Files & streams

Binary payloads attached to objects, up to 2 GB each. Mount the whole database as a drive over WebDAV.

XML repository

Native XML objects with XPath and XSLT. Results come back as XML, so the database is navigable as XML.

Identity & stream

Users, devices and backend APIs are identities with their own databases. Containers can notify listeners like a queue.

the vocabulary

Fourteen words. That is the whole model.

A tenant is one SaaS business. An identity is a member of it — a user, a sensor or an API — with its own private database. Groups carry their own database; a role is a granted right.

TermWhat it is
DatabaseA collection of containers and/or objects.
ContainerA collection of containers and/or objects. Behaves like a table or a folder.
ObjectSimilar to a row in a table; keeps key/value data and streams.
StreamA binary or document payload attached to an object. Max 2 GB each.
Key/ValueIndexed metadata on objects or containers.
DatatypeControls object behaviour, or defines the schema a container will accept.
ACLThe access control list that governs permissions on any item.
SharingGrant named identities or groups access to an item.
Publish / SubscribeExpose a view of an item without revealing its ID; others subscribe to it.
WebhookAn inbound HTTPS endpoint that writes external data straight into a container.

Concepts in the documentation

how we deliver: your users' privacy is built in

The tenant cannot read what it cannot reach.

The tenant — the SaaS business — has no access into an identity's private database. It cannot harvest what it cannot reach. That is a fact of the schema, not a promise.

tenant://

The shared database: common data, settings, the app itself, published price plans.

home://

Every identity's private database. The tenant cannot read into it; the identity shares out of it with an ACL.

local://

A browser-local database for scratch data that never crosses the network.

  • Per-user privacy you never implement, test or audit in code
  • Sharing is explicit and recorded in the ACL
  • Group databases for team and organisation data
  • Right to erasure as a button in the account panel
how we deliver: permissions without security code

Authorization is a number on the data, not a policy you write.

Every container and object carries an access control list, inherited from its parent unless it has its own. Sixteen combinations, one line in the CLI. No authorization layer to write, and none to test.

3read + write
CLI
how we deliver: one query language, no search service

Query, search, join and export — from the same line.

The equivalent of SQL, with full-text indexing built in. Joins chain across containers, so the "you can't join a document store" objection does not apply.

web CLI
tenant://> query . -s "name(40), updated" -w "+name:invoice +pubyear:2024 +pubmonth:7" -l 500

tenant://> query recipes -s updated,title
+----------+-------+
| Updated  | Title |
+----------+-------+
| 10:55:37 | Miso  |
| 11:05:25 | Sushi |
+----------+-------+

tenant://> query . -s "Container,**" -l 500 -e home://exports/july.csv
+ and - and not : string match, * wildcard > < numeric ranges pubyear pubmonth computed dates -e export CSV

Seventy-plus CLI commands, in the browser and on Linux. CLI reference

Hierarchical XML data browsed inside the CloudBackend console
how we deliver: collaboration without a sync layer

The app and the data speak the same language.

Applications and data are both XML. So one transaction manager syncs both, and the XPath that queries your data also drives your UI bindings.

  • XPath 1.0, XSLT 1.0, XLink and XPointer
  • Schema per container when you want one, none when you don't
  • Metadata extracted automatically from photos, audio and office files

That is the database. Here is how you build on it.