tightrelay

Offline arbeiten, später abgleichen.

tightrelay ist der Sync-Dienst für native Apps. Ihre App behält ihre lokale Datenbank, tightrelay bringt die Änderungen auf alle Geräte und löst Konflikte auf dem Server.

  • macOS
  • iOS
  • Windows
  • Android

Ein Dokument, drei Geräte

Windows offline nehmen, dort ändern, dann auf dem Mac ändern und Windows wieder verbinden. Die spätere Änderung gewinnt, überall.

api.tightrelay.comserver_seq 1

    Was tightrelay Ihnen abnimmt

    Der Dienst kennt keine Fachtabellen. Er speichert JSON-Dokumente, versioniert sie und verteilt Änderungen. Das Schema Ihrer App ist Konfiguration, kein Servercode.

    Ein Gerät aus Glas, dessen Verbindung unterbrochen ist; ausstehende Änderungen warten als goldene Punkte.

    Offline zuerst

    Die App schreibt in ihre eigene Datenbank, ob SwiftData, SQLite oder Room. Das SDK merkt sich jede Änderung und gleicht ab, sobald wieder Netz da ist.

    Ein gläserner Sicherheitschip mit einem Schlüsselsymbol.

    Geräte statt Passwörter

    Der Schlüssel liegt in Secure Enclave, TPM oder Android Keystore. Neue Geräte finden ihr Konto über iCloud-Schlüsselbund oder Block Store, andere koppeln Sie per QR.

    Mehrere gläserne Kugeln, über Lichtfäden mit einer gemeinsamen Scheibe verbunden.

    Gemeinsame Daten

    Geteilte Spaces für Teams oder Betriebe, mit Einladung per QR-Code und Rollen zum Verwalten, Bearbeiten oder Lesen.

    Konflikte entscheidet der Server

    Jede Änderung trägt einen Zeitstempel einer hybriden logischen Uhr. Pro Dokument gewinnt die spätere Änderung, und alle Geräte landen beim selben Stand.

    Abos aus App Store und Google Play

    Auf Wunsch synchronisiert tightrelay nur mit gültigem Abo. Der Server prüft Käufe, Verlängerung, Ablauf und Rückerstattung selbst. Läuft ein Abo aus, ruht der Sync, die Daten bleiben.

    Schemas ohne Deploy

    Collections und JSON Schemas pflegen Sie in der Konsole. Jede neue Version wird geprüft, erlaubt ist nur, was ältere App-Versionen nicht bricht. Unbekannte Felder bleiben erhalten.

    Ein SDK pro Plattform

    Swift, C# und Kotlin, ohne Fremdabhängigkeiten. Alle drei spielen dieselben Testvektoren ab und verhalten sich gleich.

    • Ihre Datenbank bleibt. Sie schreiben einen kleinen Adapter um eine Transaktion, das SDK erledigt den Rest.
    • Push, Pull, Wiederholen mit Backoff und Zeitversatz der Geräteuhr sind eingebaut.
    • Sync-Auslöser bestimmen Sie: App-Start, kurz nach Änderungen, im Hintergrund.
    let client = TightRelayClient(
        configuration: .init(baseURL: api, appId: "stundennachweis",
                             clientSchema: 1, deviceName: "Mac"),
        store: MySwiftDataStore(),
        identities: KeychainIdentityStore(appId: "stundennachweis"),
        recovery: ICloudKeychainRecoveryStore(appId: "stundennachweis"))
    
    try await client.create(collection: "clients", data: ["name": "Müller AG"])
    try await client.update(id, set: ["archived": true])  // Merge
    try await client.delete(id)                           // Tombstone
    let report = try await client.sync()                  // Push, dann Pull

    So läuft ein Sync

    Ein Durchgang besteht aus Push und Pull über HTTPS. Jeder Request ist mit dem Geräteschlüssel signiert.

    1. Lokal ändern

      Die App speichert wie gewohnt. Das SDK stempelt die Änderung mit der Uhr des Geräts und merkt sie zum Hochladen vor.

    2. Hochladen

      Der Server prüft das Schema, vergleicht die Zeitstempel und übernimmt nur Neueres. Ist die Änderung älter, bekommt das Gerät den aktuellen Stand zurück.

    3. Nummerieren

      Jede übernommene Änderung erhält die nächste Nummer ihres Space, lückenlos, auch bei gleichzeitigen Uploads.

    4. Abholen

      Das Gerät holt alles ab seiner letzten Nummer, seitenweise und in je einer Transaktion. Bricht die Verbindung ab, geht nichts verloren.

    Was tightrelay bewusst nicht macht

    Ein kleiner Umfang hält den Dienst verständlich und berechenbar. Wenn Ihre App eines davon braucht, ist tightrelay heute nicht das Richtige.

    Kein Echtzeit-PushGeräte gleichen nach Änderungen, beim Start und alle paar Minuten ab. Für einen Chat zu langsam, für Arbeitsdaten genug.

    Keine Feld-ZusammenführungÄndern zwei Geräte dasselbe Dokument, gewinnt die spätere Änderung als Ganzes.

    Keine DateienFotos und PDFs gehören nicht in den Sync. Ein Dokument ist höchstens 64 KB gross.

    Kein Web-ClientGebaut für native Apps mit eigener Datenbank, nicht für Browser.

    Im Einsatz: Stundennachweis

    Die Zeiterfassung für Freelancer synchronisiert Auftraggeber, Projekte und Einträge über tightrelay. Ein laufender Timer erscheint sofort auf den anderen Geräten.

    Startet man auf zwei Geräten gleichzeitig einen Timer, beendet eine Regel auf dem Server den älteren. Solche Regeln laufen in derselben Transaktion wie der Upload.

    Mac und iPhoneSwiftUI, SwiftData, Secure Enclave
    WindowsWinUI 3, SQLite, TPM
    AndroidJetpack Compose, Room, Keystore
    ServerRust, PostgreSQL 16, Hetzner

    Ihre App, synchron auf allen Geräten

    Registrieren Sie sich in der Konsole. Nach der Freischaltung legen Sie Ihre App an, definieren die Collections und binden das SDK ein.