top | item 32934849

Ditto: Real-time sync for apps even without the internet

175 points| haraldooo | 3 years ago |ditto.live

85 comments

order

Animats|3 years ago

From Ditto's "privacy policy":

Ditto uses your personal information in the following instances: ... Deliver direct marketing communications to you regarding our products and services that we may think are of interest to you. ... We share Personal Information with third parties ... Depending on how you use the Site or Services, the following categories of third parties collect data on our behalf or receive Personal Information ... Advertising and marketing partners.[1]

That pretty much says what they're really doing.

[1] https://www.ditto.live/legal/privacy-policy

bigfish24|3 years ago

Adam (Ditto cofounder) - thanks for the feedback! I can see how this can create the wrong impression and will follow up with our counsel to improve the language.

To be clear, we are not in the business of selling personal information. We are in the "picks and shovels" business - building great tools for other developers to use. Both myself and cofounder Max are app developers by background and we got into infrastructure software by wanting to simplify app development for ourselves and others. P2P is highly motivating because it enables use-cases that have greater data control and privacy - both of which are deeply important to us.

ajsnigrutin|3 years ago

This is even worse than google/facebook... with them, you're pretty sure they won't sell your data, but only sell your eyes to advertisers... here, they sell bulk, raw data to possibly many third parties.

spyremeown|3 years ago

>Ditto is designed for "peer-to-peer" synchronization where it can directly communicate with other devices even without an internet connection. In addition, Ditto automatically manages the complexity of using multiple network transports, like Bluetooth, P2P Wi-Fi, and Local Area Network, to find and connect to other devices and then synchronize any changes.[1]

This is cool! I have no idea what's the use-case behind it, but it is really awesome if properly implemented (which seems like a gigantic challenge).

[1] https://docs.ditto.live/

mbalex99|3 years ago

Max, CoFounder of Ditto here.

Super cool to see us on HN! The use cases are for projects, products, enterprises to build collaborative apps that can sync with the internet but fall back to local P2P connections when internet connectivity fails. Furthermore we added offline first as an additional guard for some resiliency.

We help solve a class of apps like:

1. Desk-less worker apps for the enterprise: think people who use mobile apps for the vast majority of their work: pilots, flight attendants, construction, maintenance 2. Retail, inventory warehousing, point of sale systems where being able to communicate between kiosks, service tablets, and display systems quickly even if there are interruptions in service 3. Education: it’s very often parents give their kids phones without a data plan, so their school or learning apps need to be able to collaborate with other students or teachers regardless of connectivity 4. Robotics, agriculture technology, IoT - often these applications have hard requirements to communicate with other local devices without any dependency of the internet

I can keep going!

Again, So happy to see us on HN! Thank you!

Rygian|3 years ago

My vision is that all the current use of IT should work in this mode. Depending on a central server for synchronization should be the exception, not the norm.

michaelmior|3 years ago

I'm not sure about latency since I haven't tried Ditto, but there's a class of in-person multiplayer games that would benefit from something like this. See Spaceteam[0] for an example.

[0] https://spaceteam.ca/

nicksaroha|3 years ago

One use-case comes to mind is messaging for activists and journalists wanting to keep things private.

How would this compare to https://briarproject.org/ ? Have you generalized their protocol for many other applications?

spaceywilly|3 years ago

I’ve thought about building a messaging app the doesn’t depend on cell networks, it could be useful for example if you are on a snowboarding trip or mountain biking and need to communicate with a group of friends, but in a place with spotty cell service. I’ve played around with Apples P2P networking framework but it was pretty clunky, this looks like it would be much easier to use.

mbalex99|3 years ago

Max, CoFounder of Ditto here

So happy to see the support from the Hacker News community.

I should mention Ditto is a massively ambitious company, we are doing fantastic with traction across major industries.

Our entire core code base is written in Rust and I know HN goes crazy for Rust. If you’re really interested in working on very hard problems like CRDTs, partial replication, query based replication, peer to peer adhoc sync, mesh network or distributed security: please definitely take a look at our openings.

www.ditto.live/jobs

You’ll work on problems that are incredibly difficult, unique and rewarding that you won’t find anywhere else!

jrochkind1|3 years ago

I'm always curious in general for people hiring in somewhat less popular languages like Rust: Do you consider people without any Rust experience?

null0pointer|3 years ago

Hi Max, this is a really cool technology and touches a lot of areas I'm personally interested in. If I wasn't happy with my current job I'd even consider applying.

I had a poke around your documentation but didn't find a high level system architecture. Without having to dig into the open source code could you provide a link to somewhere I can read about the underlying data model and how it works? Do you have a paper or patent describing this technology anywhere? Thanks!

BiteCode_dev|3 years ago

I dreamed of this for a long time.

Being always on the road, I often have my emails/contacts/todolist/pictures/whatever scatered accross all my devices, with no easy way to synchronize them without getting access to wifi.

This means in transport, in the country side, or in another country, my system is in shamble. Also, it means everything is slow to sync.

Yesterday I had to send a AI model to my colleague next to me. I was on linux, he was on windows. The fastest way was to get a usb stick. That should be a click in 2022. The closest to something reliable to do this was duckto, but it's not maintained anymore.

Good luck to ditto!

KennyBlanken|3 years ago

Magic Wormhole comes close, I think: https://github.com/magic-wormhole/magic-wormhole

Syncthing is painless, with available local network detection of other clients. If either device has a webcam, the QR codes in the web UI make it quite quick to have a synchronized folder between two systems.

swah|3 years ago

Very cool project - I wonder if they shouldn't go the "Free for open-source/education projects" route though?

With the current offering, I feel at anytime there could be a "takeover" by a well-run open-source initiative and "everyone loses".

kwhitefoot|3 years ago

For a lot of simple use cases that don't need automatic conflict resolution you could just share files using Syncthing. Then the only dependency on external infrastructure is the Syncthing STUN server if one or both peers is behind a NAT.

Syncthing is open and uses the Mozilla Public License: https://syncthing.net/

WJW|3 years ago

Why does "everyone lose" if a well-run open source initiative forks it and runs it better? That seems like like an improvement for everyone except maybe the original maintainer of the project, if they don't want to join up with the rest of the people.

mbalex99|3 years ago

We are working on this! Give us a bit!

techdragon|3 years ago

Might seem like odd questions, but is there a plan to handle the "too much data" case? and how protocol agnostic can this be? This seems really cool, and I can think of some strait forward uses for it ... but working on a satellite project where communications are 75% of the hassle, this sort of thing seems like it could be very useful...

If it can deal with all the "weird" (its very normal for space, just not used anywhere else) batched radio communication standards from the Consultative Committee for Space Data Systems (CCSDS) then intermittent communications aren't as big of a problem.

However it will also need to handle "old data that can be deleted client side". A satellite will generate a lot of data that it doesn't need to keep but will want to transfer to the ground and keep on the ground, telemetry and tracking metrics, system statuses etc. One way is to keep all this buffered on the satellite, and transmit to the ground, then you can throw it away, etc.. But having a synchronised store is a much simpler programming model, you push important data into the store and let it look after itself, and simple code is easier to make more reliable and reliability is key for anything in aerospace. However it can't result in the remote device being "full", it's a 100% non-starter. The client/remote end has to be able to throw away old/expired data while the central store is able to keep that data, without requiring awkward secondary systems polling the latest state on the ground side to save current data into a separate system to store historical data, that would just be shifting the complexity around.

bigfish24|3 years ago

Adam (cofounder) - great question! Yes, this situation is very common for our use-cases. Ditto supports the concept of `eviction` [1]. For example, imagine a restaurant that wants to store all of today's orders in their devices, but then evict the data when they close out at end of day (and data is synced into Cloud backend). Eviction is a core concept because we consider devices using Ditto's SDK a "Small peer" that should only have the data it wants - queries define which data is synced and you can always evict anything unneeded. Conversely, the server version of Ditto is a "Big Peer" that is a cluster designed for scalability and fault tolerance, so it wants to capture everything. Another way to put it is selfish vs. greedy replication.

To help users with eviction, we are adding support for dynamic queries, for example, using "now" for a date in the query to aid in creating TTL logic. In addition, to built-in TTL as well.

Satellite comms are definitely a great fit for another reason, since Ditto's replication is "delta-based" it will only sync differences. Our protocol is designed to overlay on top of custom arbitrary links, including unreliable ones. Not familiar with CCSDS, but we have explored Link16, and even built-in we replicate over BLE GATT.

Hope that helps and perhaps we can get Ditto into space!

[1] https://docs.ditto.live/ios/common/concepts/syncing-data#evi...

shireboy|3 years ago

Looks interesting but a few questions I don’t see answered in the docs: How do permissions work? Ie if I had a notes app, and wanted users to only be able to upset and query _their_ notes, how do I make that happen?

Why no LAN for web browser mode? A pwa with offline support should be able to sync with other resolvable ips on the same pan, no? Hopefully WebBluetooth will be available soon too?

pimterry|3 years ago

Looks like LAN depends on multicast for discovery, which isn't available in browsers as far as I can tell: https://docs.ditto.live/javascript/common/mesh-network/suppo...

Regardless you definitely wouldn't be able to do browser-to-browser discovery and connection via HTTP or WebSockets, since you can't create a web server in browser, but I imagine you could do P2P via WebRTC if you can just find a way to discover the other peer's details in the first place.

epberry|3 years ago

Ditto is showing what is possible with the edge. Very excited for this and all the new emerging architectures.

slau|3 years ago

Ditto will always get an upvote from me. Awesome product, awesome team, awesome tech.

mbalex99|3 years ago

Thank you so much!

zyklonix|3 years ago

Great concept! @mbalex99 any plans to add a GraphQL interface to it? This would enable many existing platforms to "easily" migrate to a platform like this.

mbalex99|3 years ago

No unfortunately not in our core offering. We’d like to stick to what we do best and then leave it up to the community next year to build a graphql implementation.

Rygian|3 years ago

Good thing that it supports any authentication provider. Less good that it still needs a roundtrip to Ditto's servers to enroll each device after authentication.

Alternatively, for "truly" offline sync, a "license" token must still be obtained from Ditto's servers at some initial deployment phase.

Really cool library, but the dependency on Ditto's infrastructure is an itch to scratch.

mbalex99|3 years ago

You hit the nail on the head. We are working on this as a major initiative to solve the problem you detailed. As you can guess the truly decentralized authentication is quite new and we are releasing some features to get us less reliant on online services for connectivity.

danielvaughn|3 years ago

You had me at automatic conflict resolution. Definitely going to be trying this out, this looks amazing.

mbalex99|3 years ago

Thank you! After feedback from a lot of our customers, they want more access to explicit types so you'll see a lot more APIs to control how you want conflict resolution.

solarkraft|3 years ago

This looks cool. Are there comparable open source projects? How do Y.js (https://yjs.dev) and Gun (https://gun.js.org) compare?

mbalex99|3 years ago

We have a mesh network that syncs devices using P2P wifi, BLE and over a LAN as well!

I think this is our biggest differentiator compared to other sync systems.

gamedna|3 years ago

Very Clever. From a compliance perspective - How much back-end infrastructure is required to bootstrap the sync process for the devices? Can this be deployed on customer / private hardware?

phatblat|3 years ago

Ben (product engineer) - Ditto can be used purely P2P with only users' devices or in combination with our managed Ditto Cloud. Alternatively, you could use this with your own infrastructure with as little as one box. It really depends on how much data your application has and creates as to the size of server you would need.

EGreg|3 years ago

How is it different than all the open source peer-to-peer sync tools, such as Dat/Hypercore, or PouchDB?

mbalex99|3 years ago

We use multihop ad hoc network connections! That’s the BIG thing that we add to the mix!

fire|3 years ago

[deleted]

wahnfrieden|3 years ago

What is the proudly-displayed use case from the US Airforce?

Something with its new unguided bombs they’re testing, or the new bomber it’s rolling out this year? The hundreds of Phoenix Ghost “Kamikaze” drone bombs they just revealed?

Are programs like this funding this project? I will pass.

brodouevencode|3 years ago

USAF just happens to be a customer, and I really don't believe Ditto has any strong stance one way or the other on this. This statement falls into the "Charlie Manson openly liked McDonalds so as a McDonalds franchisee you openly support serial killers" bucket.

ouid|3 years ago

i dunno man, the peaceniks need to elaborate on what ukraine should have done if not petition the US military for its weapons.