Unlock the full power of your mobile and edge devices

Ditto's Edge SDK is the only thing your edge devices need to ensure your application is operational in any environment, regardless of network conditions. 

Ditto Rainbow Connection

Automatic Peer-to-Peer Over All Available Transfers

By default, Ditto maintains multiple offline transports and automatically switches to the fastest transport - without duplicating data - based on distance and strength of connection.

a graphical representation of Ditto's rainbow connection sync

The Edge SDK always find a path to sync your data by utilizing Multihop sync

Multihop sync is the process of passing data from one connected peer to another by the way of intermediate “hops”. Multihop allows for fast, long-range data transfer without internet reliance.

tARGET
Access Point
Server
Source
Run operations even offline

Operational efficiency when disconnected

Equipped with an embedded database, the Edge SDK enables devices to read and write data when disconnected from the internet, ensuring local data sharing and access at all times.

Sync cross-platform, conflict-free

Sync cross-platform, conflict-free

The Edge SDK is platform agnostic across iOS, Android, Windows, and Linux. Automatically resolve online and offline conflicts between these peers and with the cloud when available.

Harness the full power of your existing mobile and edge infrastructure

More WiFi isn’t the answer. Your mobile and edge devices are more powerful than you realize, capable of advanced networking without the need for new devices, hardware, or networking setups.

Bridge connectivity gaps without added hardware or complexity.

Once Ditto is installed in your applications, write a few simple queries, and watch your mobile and edge devices automatically form mesh networks and share data directly without the need for servers or access points.

// initialize Ditto with your account credentials
    let ditto = Ditto(...)
    try ditto.startSync()
    
    // insert data into your local data store
    try await ditto.store.execute(
        query: "INSERT INTO cars DOCUMENTS ({ 'color': 'blue' })")
    
    // listen for change to your local data store
    try ditto.store.registerObserver(
        query: "SELECT * FROM cars"){ result in
            /* Update UI */
    };
    
    // sync only the data your device cares about
    try ditto.sync.registerSubscription(query: "SELECT * FROM cars")
// initialize Ditto with your account credentials
    val ditto = Ditto(DefaultAndroidDittoDependencies(context))
    ditto.startSync()
    
    // insert data into your local data store
    ditto.store.execute(
        "INSERT INTO cars DOCUMENTS ({ 'color': 'blue' })")
    
    
    // listen for change to your local data store
    ditto.store.registerObserver("SELECT * FROM cars") { result ->
        /* Update UI */
    }
    
    // sync only the data your device cares about
    ditto.sync.registerSubscription("SELECT * FROM cars")
// initialize Ditto with your account credentials
    const ditto = new Ditto(...)
    ditto.startSync()
    
    // insert data into your local data store
    await ditto.store.execute(
      "INSERT INTO cars DOCUMENTS ({ 'color': 'blue' })"
    );
    
    // listen for change to your local data store
    ditto.store.registerObserver("SELECT * FROM cars", (result) => {
      /* Update UI */
    })
    
    // sync only the data your device cares about
    ditto.sync.registerSubscription("SELECT * FROM cars")
// initialize Ditto with your account credentials
    var ditto = new Ditto(...);
    ditto.StartSync();
    
    // insert data into your local data store
    await ditto.Store.ExecuteAsync("INSERT INTO cars DOCUMENTS ({ 'color': 'blue' })");
    
    // listen for change to your local data store
    var observer = ditto.Store.RegisterObserver(
        "SELECT * FROM cars",
        (result) => {
            // handle change
        });
    
    // sync only the data your device cares about
    ditto.Sync.RegisterSubscription("SELECT * FROM cars");
// initialize Ditto with your account credentials
    Ditto ditto = Ditto(...);
    ditto.start_sync();
    
    ditto.get_store().execute("INSERT INTO cars DOCUMENTS ({ 'color': 'blue' })");
    
    // listen for change to your local data store
    auto observer = ditto.get_store().register_observer("SELECT * FROM cars",
      [&](QueryResult result) {
        /* handle change */
      });
    
    // sync only the data your device cares about
    auto subscription = ditto.sync().register_subscription("SELECT * FROM cars");
// initialize Ditto with your account credentials
    let ditto = Ditto::new(config);
    ditto.start_sync()?;
    
    ditto
        .store()
        .execute("INSERT INTO cars DOCUMENTS ({ 'color': 'blue' })", None);
    
    // listen for change to your local data store
    let observer =
        ditto
            .store()
            .register_observer("SELECT * from cars", None, move |result: QueryResult| {
                // handle change
            });
    
    // sync only the data your device cares about
    let subscription = ditto
        .sync()
        .register_subscription("SELECT * FROM cars", None);
Develop in your preferred language or framework.

Our APIs embrace reactive principles with excellent support for Flutter, React, SwiftUI, Jetpack Compose, and more.

Flutter development language logo
Peer-to-Peer sync across all your platforms.

Ditto's all-in-one platform has everything you need to build reliable systems that can maintain interoperability across diverse device types and platforms.