Show HN: Write SaaS apps where users control where their data is stored

WolfOliver1 pts0 comments

Introduction

Help us grow — star us on GitHub<br>LinkedRecords

IntroductionGetting StartedCore Concepts<br>Facts and TriplesQuery LanguageTermsAuthorization ModelAccountabilityQuotasAttribute Types<br>Key-Value AttributesLong Text AttributesBlob AttributesPatterns<br>Blueprint PatternTeam PatternsQuery PatternsSharing PatternsReference<br>Configuration

Introduction<br>LinkedRecords - A Backend-as-a-Service for collaborative SaaS applications

What if writing a production-ready SaaS application is as easy as a React.js hello world tutorial?

What if you operate a SaaS on your infrastructure and your users could choose where their data lives - on their own infrastructure, in their own jurisdiction?

What if AI coding assistants couldn't accidentally create security holes because authorization is baked into every operation?

What if multiple apps could work with the same data without any integration work?

LinkedRecords makes all of this possible. It's not just another BaaS - it's a fundamentally different architecture for building collaborative applications.

LinkedRecords

LinkedRecords is a Backend-as-a-Service that you can connect to directly from your single-page application - no backend code required. Think of it as a database you can call directly from your React app, with authorization built in and real-time collaboration out of the box.

// Query data with facts - updates automatically when anything changes<br>const todos = useKeyValueAttributes([['$it', 'isA', 'Todo']]);

You can use any OpenID Connect provider (Auth0, Keycloak, etc.) for authentication, so you don't need to implement login flows. Authorization is built into the data model itself - when you create data, you specify who can access it. And real-time collaboration uses CRDT and Operational Transform, so concurrent edits merge instead of overwriting each other.

Not Local-First, But Server-Sovereign

If you've heard of local-first tools like Automerge, Yjs, or Replicache - LinkedRecords is different. The key distinction is where data lives and who enforces authorization.

AspectLocal-FirstLinkedRecordsData lives On the clientOn the serverWorks offline YesNoAuthorization Client-side or sync-layerServer-enforced

Choose local-first when users need to work offline or instant local response is critical.

Choose LinkedRecords when you need server-enforced authorization, central governance over data, the BYOB model where customers control their backend, or audit trails that require server-side logging.

The difference is conceptual: local-first optimizes for offline capability, while LinkedRecords optimizes for a server-authoritative state with built-in authorization - making it well suited for enterprise SaaS.

Cloud Sovereignty

Traditional SaaS has a problem: the vendor controls your data .

When you use a typical SaaS application, the vendor operates the complete stack - the frontend, the backend, and the database where your data lives. Your business data sits on infrastructure you don't control, in a jurisdiction you might not have chosen.

LinkedRecords enables a different model: Bring Your Own Backend (BYOB) .

┌─────────────────────────────────────────────────────────────┐<br>│ Traditional SaaS │<br>│ ┌─────────────────────────────────────────────────────┐ │<br>│ │ SaaS Vendor Infrastructure │ │<br>│ │ ┌─────────────┐ ┌─────────────────────────┐ │ │<br>│ │ │ Frontend │ + │ Backend + Your Data │ │ │<br>│ │ └─────────────┘ └─────────────────────────┘ │ │<br>│ └─────────────────────────────────────────────────────┘ │<br>└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐<br>│ LinkedRecords BYOB Model │<br>│ ┌──────────────────────┐ ┌──────────────────────────┐ │<br>│ │ SaaS Vendor │ │ Customer-Controlled │ │<br>│ │ ┌────────────────┐ │ │ ┌────────────────────┐ │ │<br>│ │ │ SPA via CDN │ │───▶│ │ LinkedRecords │ │ │<br>│ │ │ (frontend only)│ │ │ │ Backend + Data │ │ │<br>│ │ └────────────────┘ │ │ └────────────────────┘ │ │<br>│ └──────────────────────┘ └──────────────────────────┘ │<br>└─────────────────────────────────────────────────────────────┘

How it works:

SaaS vendors build their application as a single-page application

The frontend is distributed via CDN - just static files

When users open the application, the app can ask the user which LinkedRecords backend to use

All data is stored on the endpoint the user chose - data never leaves the customer's infrastructure

The SaaS vendor and the LinkedRecords provider never need to communicate - the API is intentionally minimalistic, providing just a few primitives (facts and attributes) that applications build upon. This minimal surface area is also the foundation for backwards compatibility: different versions of a SaaS application can work with different versions of LinkedRecords without coordination

Why this matters:

Data residency compliance - Keep data in your jurisdiction (GDPR, industry regulations)

No vendor lock-in - Your data is in a database you...

data linkedrecords saas backend application authorization

Related Articles