Kite by Zerodha
Cross platform - Flutter
☆ 4.3

Playstore   Appstore

Kite is Zerodha's flagship trading platform. It has web & mobile versions. I'm part of the mobile team which is just me and one more person. I mostly work on architecture and UI/UX and my collegue handles most of the business logic aspects. This is the the biggest work I have ever done in terms of time and impact.

Kite has more than 5 million active users. It handles millions of transactions a day. In terms of trading volume it is first in the list. And it is one of the most used finance apps in India.

Kite has gone through number of rewrites. It was written in native Android first, then after I joined the team we rewrote that in React Native. We shipped it to only iOS because the performance in Android was so bad. Then we rewrote that in Flutter and it is in production since 2019.

A lot of care is put into making the app snappy, user friendly, small and accessible. Most of the credit for the overall speed of the app goes to the API. It is so fast, if you are on a good internet connection you will not even realize a request even happened. We have also tweaked the animations and transitions to improve the perceived speed of the app.

Lion share of my work went into making the best use of Flutter framework. It is great in all the cross platform aspects but lacks a lot in the quality when compared to platform native apps. Some of my works related to this:

dartgen: The code generator suggested by Flutter is difficult to operate and produces lot of boiler plate code and pollutes the project. Dartgen is similar to how dartfmt formats the code except it also generates code inline as per the meta data.

store_keeper: A simple state management lib for Flutter. It is event based, simple and reduces boiler plate code. It has a single big store instead of multiple small immutable observables. You will write mutations that mutates the data directly and it will notify the listening widgets.

overlay_webview: The webview plugin from Flutter is really bad in terms of the performance and the UX. To fix it I made overlay_webview which as its name suggests simply overlays on top of Flutter view and updates its locations when needed.

flutter_displaymode: Flutter apps runs at 60Hz by default on devices where higher refresh rate is available. This lib allows you to switch the display mode to a higher rate.

autopilot: Testing infra provided by Flutter need knowledge in Dart to write tests and sometimes need access to app's code. Sometimes the test engineers won't have both these. Autopilot lets to black box test app with any language and test lib. It exposes an HTTP api to collect info from app and manipulate the UI.

flutter_fgbg: This lib accurately provides notification when apps go to background or foreground.

flutter_local_auth: Biometric auth from Flutter works with most devices. But Android ecosystem is big enough to have devices with quirks in these APIs. This is a fork of official lib to support them.

flutter_curl: Dart's built in HTTP client has only HTTP/1.1 support. There are libs for HTTP2 support but without auto upgrade. This lib is a wrapper for libcurl written with FFI with HTTP2 and experimental HTTP3 support.