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]
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.
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.
>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).
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
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.
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.
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.
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!
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!
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.
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.
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.
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.
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.
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!
For a split second I was wondering about the lesser known ditto command on macOS, and whether it had some new superpower features I did not know about...
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?
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.
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.
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.
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.
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.
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.
How do they get peer-to-peer discovery in a browser working without server in an intranet ? As far as I know websockets do not support IP finding (though there where some leaks once)
PS: They don't. Was wondering whether I missed something
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?
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.
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.
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.
Animats|3 years ago
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
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
spyremeown|3 years ago
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
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
michaelmior|3 years ago
[0] https://spaceteam.ca/
nicksaroha|3 years ago
How would this compare to https://briarproject.org/ ? Have you generalized their protocol for many other applications?
spaceywilly|3 years ago
mbalex99|3 years ago
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
null0pointer|3 years ago
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
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
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
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
Syncthing is open and uses the Mozilla Public License: https://syncthing.net/
WJW|3 years ago
mbalex99|3 years ago
techdragon|3 years ago
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
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...
lloeki|3 years ago
https://www.unix.com/man-page/OSX/1/ditto/
Somehow I always found it to be an odd tool, but I could never exactly pinpoint why.
nix0n|3 years ago
https://ditto-cp.sourceforge.io/
shireboy|3 years ago
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
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
slau|3 years ago
mbalex99|3 years ago
zyklonix|3 years ago
mbalex99|3 years ago
Rygian|3 years ago
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
unknown|3 years ago
[deleted]
danielvaughn|3 years ago
mbalex99|3 years ago
solarkraft|3 years ago
mbalex99|3 years ago
I think this is our biggest differentiator compared to other sync systems.
unknown|3 years ago
[deleted]
mgoetzke|3 years ago
PS: They don't. Was wondering whether I missed something
snthd|3 years ago
https://docs.ditto.live/javascript/common/mesh-network/suppo...
gamedna|3 years ago
phatblat|3 years ago
EGreg|3 years ago
mbalex99|3 years ago
Weryj|3 years ago
This project was so close
mbalex99|3 years ago
fire|3 years ago
[deleted]
wahnfrieden|3 years ago
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
ouid|3 years ago