Client-side encryption, made approachable.

Your data,
encrypted.
Your applications,
connected.

You work with JSON. ULDA handles client-side encryption and synchronization — on infrastructure you control.

JavaScript & TypeScript · Self-hosted

Your keys stay on your devices.
How it works

Write here.
Read there.

One note, from your app to another device.
Follow what happens in between.

Step 1: Start with your data.

On your device

Start with your data.

Create or update ordinary JSON through the SDK.

Tomorrow’s plan
  • Pick up coffee.
  • Review the draft.
  • Share it with the team.
1 / 4

A local illustration. The server sees resource IDs, sizes and traffic — your content stays encrypted.

The toolkit

Three components.
Clear responsibilities.

Start here · v1.1.0

ULDA Auth

Your application SDK. Work with JSON, encrypt it on the client and synchronize it across connected devices.

ULDA Core

v1.0.1

The protocol engine. Creates public witnesses and checks that one state can follow another.

Core reference

ULDA Server

v1.0.0

Your storage endpoint. Checks updates, stores encrypted resources and delivers changes to subscribers.

Deployment guide
Inside the ULDA chain

Five blocks.
One continuous chain.

Build a witness. Move the window. Check the overlap.

Step 1: Start with five random blocks.

On your device

Start with five random blocks.

Together, they form an origin — the client’s private window.

0
1
2
3
4
1 / 4

This checks state continuity. The SDK separately encrypts and authenticates the content.

A familiar API

Less plumbing.
More building.

Connect. Create a note. Update it on the client.

Complete setup guide
npm install ulda-auth@1.1.0
create-note.js
import { Ulda } from 'ulda-auth';

export async function createNote(endpoint, password) {
  const ulda = new Ulda(endpoint);
  try {
    await ulda.ready;
    const masterId = await ulda.register(password);
    await ulda.add('notes', { text: 'Hello, ULDA' });
    await ulda.data.notes.text.update('Updated on the client');
    return { masterId, note: ulda.value('notes') };
  } finally {
    await ulda.close();
  }
}

Creates a new master. Keep its ID to reopen it later. Node.js 22+ or a modern browser.

Self-hosted

Your data layer.
Your infrastructure.

Run one ULDA Server application with PostgreSQL and an HTTPS/WSS endpoint you operate.

Set up your server
HTTPS / WSSULDA ServerPostgreSQL
docker pull uldaio/ulda-server:1.0.0

Linux amd64 image. Database provisioned separately; one writer per dataset.

Good to know

A few answers.
Then, start building.

Can the server read my data?

Application content is encrypted on the client. The server sees resource IDs, public witnesses, sizes and traffic patterns, but does not hold the content decryption keys.

Is this a login service?

ULDA Auth manages encrypted data. Your application still provides its accounts, access policies and password experience.

What about conflicting or offline edits?

The server rejects conflicting updates. Your app handles conflict resolution; the SDK does not provide a persistent offline write queue.

Is ULDA open source?

ULDA is source-available under separate Community Source licenses. These are not OSI-approved open-source licenses. Terms vary by component; commercial licensing is available by agreement.

Read the security model

Make room for
something private.