Why I regret using Ionic for app development

Mohammad Hossein Amri
11 min readJan 22, 2023

To be frank, I regret choosing Ionic as my framework of choice and wish I had gone with Flutter instead. The documentation and community of Ionic is severely lacking, leaving me feeling lost and unsure of what to do next.

If I have to categorize the issues I’ve faced with Ionic, they would fall into three main categories: the website, the ecosystem and guides, and the limitations of the framework itself.

Website

Spaghetti Documentation

A good documentation can help anyone new to a concept to quickly pick it up and start running (or dancing) with it. As a software developer with 10 years of experience, I am no stranger to documentation, but I have to say, the Ionic documentation takes it to another level.

Ionic markets itself as a single framework for writing and running mobile applications, but that’s not the truth. To be able to work with Ionic, you also need to read the Capacitor documentation. When I first wanted to publish my Android app, I suddenly realized that the information provided by Ionic documentation was incomplete. After digging around, I found that the missing information was located on the Capacitor page. This fragmentation of information bothered me on multiple occasions, and I will elaborate more on this later when I talk about the difference between using Google search vs the built-in website search.

Missing and Broken Links

I spent months on the Ionic website, and to be honest, it’s a pile of broken links. I miss the good old days when companies ran broken link checkers on their websites and checked their Google admin console to see which links were returning 404 errors. But the Ionic website doesn’t seem to use any of these tools, leaving you to rely on Google as your companion.

If you’re not familiar with Ionic, you should know that it previously ran on Cordova. A couple of years ago, the Ionic team introduced a competitor to Cordova called Capacitor. Cordova is well-known for its vast support of plugins, but after the introduction of Capacitor, the Ionic team tried to keep some level of compatibility. They introduced @awesome-cordova-plugin, a namespace that helps you type the Cordova plugin. The list of these Cordova plugins was on the Capacitor website, so as an Ionic developer, you had to switch to the Capacitor website to find a plugin that works with Ionic.

It’s quite a bizarre experience when you’re trying to write an Ionic app and, for example, you’re looking for how to use the camera. You find zero results on the domain ionicframework.com and your desired result is supposed to be on capacitorjs.com (they made it a little better so far, but still it’s lacking). This clearly shows that the Ionic documentation is not your friend and you need to rely on Medium articles for your day-to-day development until you become familiar with where to find the documentation related to the framework that you’re looking for on other domains.

Another recent development in this jungle of documentation happened when the Ionic team moved all the @awesome-cordova-plugin plugins to a Gitbook(like it aint my business anymore). This is not strange, but now you’re looking at something on another level. Amazingly, you find very limited wording about Ionic in that Gitbook (meaning Google has a hard time giving you the right result) and more strange, when it was hosted in capacitor website you could see guides on how to use it with Capacitor, but now that they moved it to Gitbook the code samples are removed. For example, you could see the plugin Social Sharing has a starter guide but that is no longer the case

plugins had supporting and starter document
that’s not the case anymore

Another issue with this transition is that Ionic leaves you with your Google skills and says “avi vederci” for the rest of your adventure. For example, this is the social sharing plugin’s documentation on the Gitbook, but try searching it with some keyword like “ionic social sharing” and good luck finding it.

another issue that recently has rised is to find these cordova plugins that has capacitor support.

part of ionic documentation that link to cordova plugins
screenshot of ionic document about Cordova plugins

As you can see in the above picture, the link with the amazing title “hundreds of existing Cordova plugins”? Yes, that’s a list of every Cordova plugin available on the internet, but that doesn’t mean it supports and works with Capacitor. It’s up to you to figure out if it works with Capacitor or not. There is no portal where Ionic developers can report support or see the telemetry that Capacitor could collects about compatibility of those plugins. They could even rate the plugins, but nah, that would make Ionic too simple to use. If not, why would you pay for enterprise support? At the end of the day, it’s all up to you to spend your time figuring it out. Compare just this flaw and the long hours you need to spend reading Github and trying plugin after plugin to see if something works or not in Ionic with its competitor, Flutter. The Dart package manager is your best source of truth and it even lists down top plugins, even rating them by quality and update rate. How much time could I save just on plugin selection if I chose Flutter?

There is another worthy thing to mention in this picture. Another link to “@awesome-cordova-plugins Community”, yea that’s another 404. Probably they forgot to update it to the brand new Gitbook that has less information, but who cares, I already learned that you should Google instead of clicking on any link in the Ionic website and use Google to find where the content is.

Bad SEO, Even Google Has a Hard Time With It

Since a lot of content leads to 404 pages, Google also has a hard time showing you the right content. You Google it, click it, the content isn’t there anymore, or even if you get some link, it’s from ionicframework.com/doc/v3 links. Let’s do an example search.

Search for Admob Plugin

The first link is from v5 that the content is wrong and obsolete and the second is from v3 which also is obsolete. The third link is an article from 2020 when there wasn’t @awesome-cordova-plugin and it goes on and on. Even watching videos doesn’t help and you need to watch and read and read, and none is showing the correct one. All those search results are about different third-party old plugins that may or may not have Capacitor support. Terribly, none of the results are about the recommended plugin that is maintained by the Capacitor community should show. Literally, the first page of Google is useless in this case and you need to keep reading and reading until you figure it out by the mercy of God.

Inadequate Website Search

Since Google results also aren’t reliable (because of 404 and bad SEO and old results), I learned to use the internal search that is powered by Algolia mixed with Google search results. It’s good to some degree, but not enough when the content that you want is part of Capacitor. The way that content is arranged (though we are working with the Ionic framework), Capacitor has its own search and documentation and if you’re stuck with something, there is no way to find it when you’re on ionicframework.com website and amazingly ionic.io has no search (starter guides and enterprise plugins documentations are hosted in here, though they are not accessible directly and you need to find them only through Google). It’s quite a domain game when you’re on a need to find something.

Another example I can give you is about the Native HTTP plugin. I was searching for the Native HTTP plugin and found nothing!? But clearly, there was some referene to it but since that link also leads to a 404, and because Ionic plugins are spread between the Capacitor and Ionic website, and Ionic search doesn’t lead you to the Capacitor plugin or vice versa, you need to rely on your experience with their documentation to know where to look.

http plugin was mentioned somewhere in the document but like always the link is broken

I looked into the capacitor.com plugins section and found that they missed the link, as you can see some plugins are missing from Ionic. Good luck finding them when you’re on ionicframework.com

missing plugins and inconsistency between the websites

ecosystem & guides

After I published my app, I was wondering, so what’s next?

  • Should I integrate with Firebase to get better analytics?
  • Should I integrate with Google Analytics?
  • Should I work toward enabling AdMob mediation?
  • Can I use Google AdSense with Ionic since the Admob Capacitor plugin doesn’t support native advanced ads?

These questions are not technical, they’re functional. It’s comparing and planning. What is the next tool that can help me and is in my disposal? Sadly, if you check articles about Ionic or search Google about these things, most of the Ionic community is busy finding the Cordova plugin and sharing how they wrestled for a couple of days to make a plugin work with Capacitor. That alone is a bad sign that when you start writing an Ionic app, your focus isn’t to extend your app, but to solve technical issues. But that’s not the case for Flutter developers. The documentation for Flutter and guides for different aspects and tools and how to grow and integrate with different tools is infinite, and it’s up to you as a developer what to digest next.

Even if you want to embark on a journey like using Admob mediation, there are 0 articles about it, or even if you want to try it yourself, you need to figure out if it works with the community plugins or not. In my experience, the community plugins are not really maintained or any new features are added, just their package is bumped to the next version, and minimal changes happen if a package bump needs some API change. Recently, Admob introduced a new permission for Android v13, and I raised a question on the plugin repo and had zero answer from the maintaining team. Considering this permission could endanger the Admob usage on Android 13 and above, the reply from the maintainer was zero, and just another bad sign that you are on your own when you develop an app using Ionic.

Ionic limitation

Ionic and all other multi-platform frameworks are confused about UI and still promoting themselves with Android/iOS-specific component look and feel, blatantly missing the point. They’re missing that the market has moved from this kind of mindset. If you look at Dribbble, you can’t find mobile design dedicated for iOS and another set dedicated to Android. Probably maybe a handful of 10 components that should look like native (like confirm button, modal, …) nothing else needs to be similar to native, but the Ionic team instead of focusing on where it’s lacking (plugins) is still focusing on creating components that look native to iOS and Android platforms.

Ionic is a black sheep

Companies don’t like Cordova, more than that they don’t like Capacitor. When I first wanted to integrate with an advertising platform, other than Admob, I couldn’t find any other platform that provides an SDK for capacitor. you could find one that provide SDK for cordova but even them recently stopped supporting Cordova, just another sign that Cordova is a dying platform.

Good plugins are behind a paywall

SQL is a big thing in mobile, and whether you want it or not, you will need a database in your application. Then your question becomes SQL or NoSQL. For SQL, you have SQLite, like any other plugin, but if you want to avoid issues with table creation and migration, your choice should be NoSQL. But for NoSQL, you have very limited choices. You can’t choose options that store data in the IndexedDB or LocalStorage because on mobile devices, the phone can claim back those storage and you lose your data. You need a proper SQL option. From the available options, The ‘@capacitor/preferences’ provides a simple key/value API with no advanced query support. But the whole point of SQL is to be able to do some query, but guess how much it costs to have a NoSQL library that is able to query? Yes, $1000 a month even if you want to use couchbase-lite community version! That’s nuts.

couchbase capacitor plugin cost you 1000 usd, even if you want to use community edition

But compare something simple like this to Flutter. A fountain of options is available, and you can even go with some reliable options like MongoDB Realm.

Summary

At the start, Ionic seemed like a promising option for mobile app development, as it allows for the use of web technologies. However, I soon realized that it was not the right solution for me. While I didn’t experience any performance issues (as everyone think it’s the only downside with ionic) or difficulty building the first version, problems arose when I wanted to take my app to the next level. It’s like a trap — you spend your time and energy navigating through their documentation, dealing with their quirks and bugs, only to find that the limits are set too low and the costs too high to move forward with it.

Unless you have an existing website that you want to convert into a mobile app, or you need to create a prototype and launch it as quickly as possible, Ionic may be a viable option for you. But, if it’s a greenfield project or you’re an indie developer, Ionic is not the best choice. In my opinion, React Native is not any better than Ionic and has similar issues. The only viable option today, in my opinion, is Flutter. I don’t know if things gonna change since OutSystems acquired Ionic, but the recent move of Cordova plugins to a Gitbook and worsen their documentation doesn’t seem promising and indicate OutSystem has no plan to make things better for Ionic developers but focus on their own low-code platform.

Overall, the plugin selection process for Ionic is a headache and a huge waste of time compared to the simplicity and ease of use of Flutter’s Dart package manager. The lack of reliable and updated documentation, broken and missing links on the website, and poor SEO make it even harder to find the information and resources needed for development. The internal website search and Google search are also inadequate, leaving developers to rely on their own experience and guesswork to find what they need. The transition to Gitbook for Cordova plugins also made it more difficult to find the correct information and resources.

It’s clear that the Ionic framework has a long way to go in terms of improving their documentation, community, and ecosystem. The Cordova plugins conundrum, bad SEO, and inadequate website search are just a few examples of how frustrating and time-consuming it can be to work with Ionic. It’s a shame, because Ionic markets itself as a one-stop solution for mobile app development, but in reality, it leaves developers feeling lost and unsure of what to do next.

And in case you missed it, it appears that most of the developers dislike Cordova too.

In conclusion, if you’re considering using Ionic, I would advise you to think twice and consider other options such as Flutter. The simplicity, performance, flexibility, and ease of customization of Flutter make it a much more attractive option for mobile app development. The time and energy saved on plugin selection, documentation, and community support alone make it worth the switch. Don’t waste your time and energy on Ionic, choose Flutter instead.

--

--

Mohammad Hossein is a seasoned programmer sharing insights on C#, JavaScript, and new technologies. Keep up with his latest musings and knowledge