State of Magisk: 2020

John Wu
4 min readJan 24, 2020

Back in 2016, I was the typical Android enthusiast: rooting, flashing ROMs, custom kernels, messing with Xposed and such. I just learned C++and know very little in programming other than writing some algorithm assignments. I taught myself scripting (yay, noob upgraded to script kiddo) from snippets of shell scripts throughout XDA: SuperSU and Xposed installation scripts being the most prominent ones I referred to.

I first released Systemless Xposed, the first sort-of impactful release to the community, and immediately start working on a general solution. August 2016, I released Magisk to the public, and the rest is history.

The Struggle

The first few versions of Magisk was me scrambling tools from SuperSU (which caused me issues down the road with CF, but things were sorted out and we’re chill now), an unnecessarily complicated shell script doing my actual “magic”, and a shit app called Magisk Manager that only contained a few switches. I knew nothing about Android app development, heck I couldn’t even write Java! Thankfully, DVDAndroid (dev of Material Xposed Installer) and DigitalHigh (veteran RD at XDA) stepped in and help me lay the foundation of Magisk Manager in early stages. I learned along with them and soon is comfortable with Android app development myself.

Magisk Manager 1.0. It’s super fancy, right?

Fast forward a few years, Magisk grew astronomically and has a substantial user base. I attribute a large portion of the huge success of Magisk to the in-app Magisk upgrade and boot image patch feature of Magisk Manager, both are proud creations of my own. These features made Magisk more accessible to users, and coincidentally became essential as Android evolved throughout the years.

Apart from the very early days, Magisk was mostly a one man job, maintaining both the app and native Magisk alongside of schoolwork (which was a lot!). For Magisk Manager, I enjoyed developing things like libsu, in-app Magisk installation, APK repackaging, dynamic APK loading etc.; basically things that are more “hack-ish” compared to normal Android app development. Most of the time however, other aspects of Magisk Manager development felt like a chore: I would rather spend time and effort on improving Magisk’s compatibility, more hiding capabilities, and more features, but not on struggling to create even the simplest UI element in the app that took me way too much time.

A lot of people have proposed possible new design concepts for Magisk Manager, but the thing is: I’m literally incapable of crafting such UI. Unless someone is willing to get their hands directly on the source code, any substantial UI change is basically impossible. This is when diareuse approached me, willing to help redesigning the app, but most importantly, with source code!

New Magisk Manager Maintainer

Diareuse works as a full time Android app developer, and his skill really shows: I learned tons of new stuffs ever since his involvement in development back in last April. The first thing we agreed on doing is first rewrite and modernize the mess of code that was Magisk Manager. However this initial refactoring didn’t really turn out well as planned. The huge gap of competence with regard to Android development between diareuse and me makes it difficult to collaborate, and huge chunks of non-typical code that powers almost all core Magisk Manager features certainly didn’t help. His rewrite basically broke almost all functionality of the app, and I ended up forced to learn a new language (that is Kotlin) and a bunch of state-of-art Android development know-hows to get my hands directly on fixing things.

Despite the initial skirmishes, diareuse is surprisingly determined and passionate to continue. We stroke a balance to collaborate, and his familiarity with the unusual nature of Magisk Manager made further development much smoother, so together we agreed on letting him do what he initially wanted: a full redesign, starting late September last year.

This redesign branch is now officially merged into master and pushed to canary for beta testing. Mixed feedback was received, but no worries for those critical of the new UI, we’ll definitely continue to work on improvements as this design is nowhere near final yet! However, a full revert will never happen. Diareuse and I do this by volunteer in our free time, and we do not have the capacity of maintaining 2 completely different UI design.

Diareuse is officially the main maintainer of Magisk Manager. I will continue to work on the core functionality code, but everything you can visually see in the app is and will be written by him in the foreseeable future.

Moving Forward

I’m going to be a full time software engineer at Apple starting this March.

Yes, you hear it right, the “iPhone” Apple. Full time. That noob script kiddie grew up and landed a job in Silicon Valley. Fortunately, Magisk has no conflict of interests 😏 with my new job, so I am allowed to continue maintaining this open source project which I created. But as you can imagine and expect, I won’t be able to do crazy late-night hacking anymore; the time I could spent on Magisk will be significantly reduced. This is why it is critical for me to delegate some work to trusted others. Diareuse is a huge help to the project and takes off a significant burden off my shoulders.

I will still be the lead developer and the owner of the Magisk project. All future releases will still be built and published by me. All changes to Magisk Manager by diareuse will still be foreseen and pre-approved by me.

I don’t see myself stepping down from Magisk in the near future. Magisk is too important for me to abandon it. I’ll continue to enjoy the fun of hacking things around while it lasts 😇.

--

--