I left Adalo about 18 months ago after completing a big project, which I decided to put on hold for various reasons, including performance issues on Android. Now, I’m ready to revive this project and am considering my options.
Should I invest the time to migrate everything to Flutterflow, or has Adalo made significant performance improvements in the past year and a half?
In my opinion, as far as the operational side of things on Adalo go, I think they have improved drastically since the 2.0 update, and all of the updates they have done since.
The thing they haven’t improved on, and perhaps have even gotten worse on, is customer support. As long as you don’t think you’ll need too much actual help, I think the Adalo interface and capabilities are doing great.
Well, the easiest approach could be to make new build(s) in the project you already have, run some tests and see if the performance has improved or not . Adalo has definitely made some improvements in the platform, but it’s hard to predict if these improvements are useful for your exact project or not.
Keep in mind that FF could be pretty complex in some cases, and there is a high probability you’ll need to learn how to code, how to structure the database, how to apply security rules, etc etc.
Also there is much more manual work in FF: there are some things which Adalo does for a Maker and which are taken for granted (e.g. accessing values from the linked collections through a relationship). In FF you will have to do the same thing manually - e.g. if you use Supabase, you’ll have to create “views” to get values using SQL joins.
In my opinion, approach depends on your project and there is no single solution here. From my experience with 150+ clients:
I’ve worked on projects which started on Adalo and continue scaling on Adalo (with 5K+ active users and multiple collections with 10K+ records each);
Also I’ve had an experience with projects migrating from Adalo to FlutterFlow (and fullcode) after MVP phase. The initial launch was done in Adalo, after getting a lot of customer/user feedback and applying changes, the project is migrated to FF;
I’ve seen projects being shut down on Adalo because of the pricing policy and platform’s technical limitations;
But I’ve also seen projects which were completed but never took off; they couldn’t attract enough users and eventually went abandoned.
So if there are no “hard” technical limitations which Adalo has for a particular project, and if there is no evidence whether the project will be needed by its potential audience (PMF unknown), I’d launch it on Adalo simply to save time and get user feedback ASAP.
If there are technical requirements which are difficult to overcome in Adalo (e.g. location real-time tracking - yes probably you can do that with a lot of custom coding but why?), I’d go for another platform which is better suited technically.
For me personally I have been using Adalo for 4 years, and I guess in that time we learn work arounds for certain tasks. I have recently taken a hybrid approach and started using Xano since December and I find Xano to be extremely powerful which enhances on Adalo’s simplicity and made me appreciate more how simple Adalo have made things from a DB perspective. I’ve learned database and structure is key.
Xano does require you to reach outside of the simple ways of Adalo for a bit of a learning curve, but it’s worth it.
You will need to build your own API end points, and learn other work arounds. To mention a few:
Adalo tends to send IDs for records with IDs over 999 as 1,000 1,001 etc - with the comma, so you need to remove the comma (I’d hope Adalo change this so custom actions default is “none” for format. Typically I send this as a Custom Formula in the text input area and set format to None.
APIs don’t like special characters (Generally) nor do APIs like spaces, white lines etc as they need to be URL Encoded or they will fail as part of a JSON body in a custom action (API Call). I basically got a custom text component built so that I can decide whether to attach raw text or URL Encoded text to my APIs. This does require you to then set a filter on the Xano side to URL Decode.
When you update a DB record even though the record field you are updating is noted as “no change” if you don’t resend all the data when you make an edit on Adalo side it is wiped on Xano side. So for all “Update” functions on Adalo side you need to make sure plug all existing fields in as well as new/edited fields
Some items I really appreciate in Xano
Cascade Delete (delete related data)
Easily create your own Pagination rules
Add ons and joins. This function completely removes the need for Lists within Lists, and drastically improves List speeds on the front end to receive a record and its relational data.
Cron jobs (background tasks in Xano) Reminders, scheduled actions etc
Functions such as “For Loops” Loop through filtered data to make changes (kind of like countdown timer action for multiple records - without the lag and upper end record limit)
Amazing dynamic filtering, and sorting options
Data table load times I found to be 3x or 4x faster …I done a test with the same 100 records in Adalo vs the exact same 100 Records in Xano linked as External collection and all same parameters to find Adalo took about 9-11s and Xano 2-3s.
The ability to download all your data and data backups, and feel like you “actually own” your data!)
GDPR compliance and HIPPA along with all the rest. This does require you authenticate your end points prior etc.
Advanced math on Data entry
Caching features to further speed up load times
There are tonnes more but that’s a few facts. Certainly with Xano and Adalo I don’t feel too many limitions, but I admit Android needs improvement vs IOS and PWA which work well in my opinion.
Xano also plugs easily into Flutterflow and other low code options. But in truth, I feel Adalo is actually really quite powerful, and usually if there is enough “will” there’s a way. That being said, i’ve bought a lot of third party components to overcome certain things.
Finally I can say, Adalo’s up time has improved massively in the last 6-8 months, it’s virtually never down in my experience (production Apps). I have created gym apps for daily activities/bookings and have not heard a complaint since launched.
Just some info on a hybrid approach that works for me
I second the power of Xano, in terms of flexibility and speed, it also gives you a nice conduit to building another front end elsewhere with relative ease. Make no mistakes, Adalo alone is rapid in terms of development time and publishing, but there are trade offs you have to accept. Building with Xano as backend takes about 4 times as long I would say, but the outcome is better, faster, more robust.
@iAppsNi Xano now has bulk delete, so you don’t even need a loop function for cascade delete.
Adalo has been chipping away at some component releases recently which is on the whole good, but 4 years of roadmap for the date picker to accept magic text? When you start with Adalo you need to understand you can’t expect a timely release of something critical to your project.
Thank you all. I have been using Directus as my backend, and one of the challenges I face is the lack of user collection configuration in Adalo. I use it as a regular Adalo database, trying to sync the user collection and its auth token between Adalo and Directus. This setup is far from ideal, especially since it involves unencrypted access tokens in API calls.
I remember that external login was in beta two years ago, and it’s still in beta. Adalo introduced Xano integration, but in my case, I work with Directus and/or Supabase. The absence of user collection setup in Adalo is a significant drawback for me.
Unfortunately, External Users feature isn’t available anymore for new apps. So the only option to store users elsewhere is Xano on Team and Business plans (Xano can be used on lower plans, but without Users integration).
Maybe it’s possible to create a custom component which “extends” Adalo’s native authentication and somehow syncs data to the external DB, but in my opinion this might be quite complicated, require some hacks and most probably unsupported (so this may break anytime if Adalo decide to change something in their backend).
I wish we had a proper external user auth, but we have what we have :-/.
FF can use external users’ auth and Supabase users’ auth (it’s 2 separate options), but there are quite a lot of caveats and implementation can be sometimes tricky. Although it works . Anyway this is a different topic for another forum.