Is there anything specific you’re looking for besides the offline sync solution?
Ditto has a .NET SDK with Maui support - at the moment for Android and iOS, in case that could work for you?
Disclaimer: I work at Ditto and happy to answer any questions.
In this project, I didn’t worry much about performance for the MVP, but with Realm it worked without any problems. However, in some migration tests with my biggest client, I didn’t have any performance problems with Ditto. In my use case, I have the impression that it’s even faster. I currently have an average of 10 collections simultaneously. And I was able to optimize some of them with LIMIT and ORDER BY. Overall, my app is even better than it was. I didn’t pay attention to these SDK details. In fact, this seems crucial for some types of projects and this situation may require unexpected optimization in some scenarios. But I encourage you to test Ditto. You might be surprised. It’s not the best scenario, but it’s a light. The migration wasn’t very complicated. I just worked on the code for about 40 hours and the tests are still ongoing.
While I’m still disappointed about the end of MongoDB Device Sync, my recommendation to fellow developers is to transition to Google Firebase for now and use local Realm for data caching. Although Firebase isn’t offline-first, you can develop solid offline strategies, and it integrates well with local Realm, which is available for both iOS and Android.
Ditto looks promising, but if they can’t even provide pricing at this point, it’s clearly not ready for widespread use, so it’s not a practical option yet. I’ve used Firebase with Realm in the past—it’s a mature product with the bugs worked out and likely to be supported for years. Its pricing is competitive with what MongoDB Device Sync offered, and switching to Firebase also eliminates the need for MongoDB Atlas altogether.
Unfortunately, this is how technology and standards wars go—eventually, one wins. Six years ago, there were three main players in this space: Parse, Firebase, and Realm. I was a big fan of Realm and assumed that, since they controlled the local database caching game, they’d come out on top. But as we all know, the best technology doesn’t always win. As of two weeks ago, Firebase is the last one standing. Ditto might rise as a competitor, but I suspect they’re aiming to be a niche player in the P2P space with premium pricing. I don’t see it as a viable option for most people on this message board.
@Andy_Dent perhaps the term “early stage” is incorrect, it just does not feel like a viable replacement for Device Sync at this time, so I think that it is misleading to suggest that it is.
I’m aware that Realm Sync had some significant stability issues in the past. Things improved after the 2020 integration with MongoDB Atlas and the launch of MongoDB Realm. There were still some challenges with permissions, and the partition sync felt a bit buggy, but that was mostly resolved with the introduction of Flexible Sync in 2022. Personally, I felt the product was becoming more reliable and robust. However, it’s clear there were underlying business or revenue problems that weren’t being addressed. There also seemed to be several key technical staff departures over the past year, which raised some concerns. Unfortunately, these things happen.
@Richard_Krueger I agree with your assessment. Firebase is solid - my only concern would be the longevity of Realm, local, as it ‘feels’ like the entire platform is being depreciated and there may not be any further development on it. (no revenue = no resources = no people to write code). Not starting a rumor - it just makes business sense.
Parse is still a thing - seems to be supported and we are exploring Parse SDK for device coupled with Back4App for cloud/sync storage. The quick ToDo app we just wrote seems to be working well with a minimal amount of effort to get sync’ing working. We were also impressed (so far) with Back4App’s web dashboard for project management.
Anyone have thoughts on that? The good, bad or even the ugly?
@Richard_Krueger Firebase may still be here, but Google kills products with extreme prejudice on a regular basis. It would not be at all surprising for them to drop Firebase (or at least the parts of it that we care about) with little warning.
Everyone thought MongoDB was a big, reliable company. Everyone thinks Google is a big, reliable company. “Fool me once” and so forth.
@Bryan_Jones Yes, Google has a bad habit of shutting down products with zero warning. I recently got burned when they suddenly turned off Google Pay, leaving me unable to pay the janitorial staff. To make matters worse, I had about $2K in my Google Pay account, but they capped withdrawals at $200 a week. And finding the withdrawal option buried ten layers deep in some dusty, forgotten menu felt like a scavenger hunt. It was like dealing with a Greek bank, minus the protests and riot police.
That said, I think Google will keep Firebase alive for a while since it’s key to their cloud strategy. As MongoDB Device Sync developers, we have to accept the reality that MongoDB isn’t bringing this product back and clearly doesn’t see us as a priority. So, we need to move on. Firebase is the closest alternative that works. As for Realm Local, honestly, you’re probably better off with iOS CoreData or SQLite. For Android, I’d go with Rooms. The issue with Realm Local, even though it’s open source, is that without a corporate sponsor like MongoDB, it likely won’t get the attention it needs. Unfortunately, this is what happens to great tech when larger companies buy them and lose interest. At least we can count on Apple and Google to keep improving their local client databases.
Has anyone found an alternative to Realm/AppService available for Flutter that have most of the functionnalities : offline first, live objects, lazy loading, user permissions, authentification … ?
If there isn’t any drop-in alternative yet, we might try going with SQlite and Powersync. Has anyone any pro/cons to share about that option?
@Tanguy_1 The main alternative to Flutter is React Native. But if you’re considering that path, you might want to book an appointment with a psychiatrist first to talk you out of it. And if that doesn’t work, call an exorcist as a backup. My experience with React Native was basically a masterclass in frustration, with every upgrade cycle pushing my blood pressure through the roof. Whatever you write in React Native today is practically guaranteed to be broken in two years.
this. I will never use a development platform if I don’t know what it will cost in production. To spend time and effort on a tool without knowing if I’ll be able to afford using it is irresponsible business practice on my part.
What is it about Firebase that makes this so? If it syncs data, caches locally when offline, etc., I’m curious why it doesn’t work for the same type of online/offline use case that Realm does (or, uh, did)?
@Phil_Seeman Firebase is online first so the cache is short term so it may be updated, altered or destroyed at any time. In other words, with Realm, being an offline first database, data that was just mutated will be available a week from now. With Firebase being an online first database, that same data may not be available a week from now.
Also, the Realm offline first database is a file you can grab at any time which will be your data. The Firebase cache is not a file that can be accessed (so to speak)
Lastly, from Firebase
It will store data from recent queries, and it will evict data that hasn’t been used. You can’t choose which data will or will not be cached - it work with everything or nothing at all.
I’m strongly considering Kotlin Compose Multiplatform as an alternative to Flutter, for a new app. The recent high-profile Panels app has validated the platform somewhat.
From a database perspective, being in Kotlin seems less likely to run into problems with various mobile local-first solutions. (Remembering how long Realm took to get their Flutter SDK over some of the foreign function hurdles.)
I’ve been working with MongoDB Realm (or Device Sync, as it’s now called) for the past two years, but we’ve decided to switch to Firebase and use Swift Data for local caching. Don’t get me wrong—I love Local Realm, but if MongoDB isn’t going to support it, it’s only a matter of time before it falls behind other commercial options, which is why I would recommend Swift Data. As for Ditto, it’s not even worth considering until they sort out their pricing. Frankly, the whole world would be better served if MongoDB management tried to spin Realm back out as a separate company to serve its current customers. If that happened, I would be all over it like white on rice.