Open-source project
premnirmal/StockTicker avatar
premnirmal/StockTicker

StockTicker: one Kotlin codebase behind a home screen widget on Android and iOS

A resizable widget that shows your financial portfolio on your iOS or Android home screen

581 stars146 forksKotlinGPL-3.0

At a glance

What is it?
StockTicker is a Kotlin app that shows a portfolio in a resizable home screen widget, and its recent migration to Kotlin Multiplatform with Compose Multiplatform moved the in-app screens, networking, persistence and background refresh into a shared module so the iOS build is a thin SwiftUI shell.
Who is it for?
Adopt StockTicker if you want a portfolio widget for your phone rather than a full trading app, and if you want to follow a codebase that has already done the Kotlin Multiplatform migration. Do not expect it to place trades, since the README describes a display widget and nothing more, and note that the iOS side is a recent shell around shared Compose code, so it is the part most likely to lag.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 15 days ago.
What is it written in?
Mainly Kotlin, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A widget, not a trading app

The repository describes itself as a resizable widget that shows your financial portfolio on your iOS or Android home screen, and the feature list is short enough to state in full. There is a home screen widget that shows your stock portfolio in a resizable grid, so the widget can be sized to fit the space you give it on the home screen rather than being locked to one shape. Stocks can be sorted by dragging and dropping the list, which means the order is a personal preference rather than a fixed alphabetical one. The app only performs automatic fetching of stocks during trading hours, which is a design decision about when to spend a network request and a battery charge, and it displays price change along with summary alerts. The audience is a person who wants a glanceable read on their holdings from the home screen and does not want a full brokerage application in the way.

The Kotlin Multiplatform migration is the structural story

The README explains that the project has been migrated to Kotlin Multiplatform with shared Compose Multiplatform UI, so Android and iOS run from one shared codebase. The detail that matters is where the boundary sits. Platform-agnostic code and the shared in-app screens live in the :shared module, which has an androidTarget plus the iOS targets, while thin platform shells live in :app for Android and iosApp for iOS. MULTIPLATFORM.md is referenced for the module layout and the history of the migration, which tells you this was a substantial refactor rather than a wrapper. The iOS app is described as a thin SwiftUI shell hosting the same shared Compose Multiplatform UI as Android, plus a native WidgetKit home screen widget. The business logic it shares is spelled out: networking, persistence, preferences and background refresh, along with the in-app screens for the watchlist, trending, search, quote detail and settings. So the practical shape is one implementation of the app logic with two renderings, and two separate implementations of the home screen widget, one per platform.

Two widget implementations, one shared app

That last point is the one an evaluator should not skip. On Android the home screen widget is the original product, and on iOS it is a native WidgetKit widget that sits alongside the SwiftUI shell. The in-app screens are shared through Compose Multiplatform, but the widget itself is not the shared code path, which means the thing most users see on their home screen is implemented twice. The trade-off is that a native WidgetKit widget behaves the way iOS users expect, including following the system conventions for the lock screen and the home screen, and the cost is duplicated work and a place for the two platforms to drift. The README points to iosApp/README.md for the build instructions on the iOS side, and the repository layout confirms the shape with app/, iosApp/, shared/ and buildSrc/ at the top level, plus a settings.gradle.kts and a build.gradle.kts at the root.

Build and quality tooling, from the repository layout

The top level entries describe a conventional but complete Android build with the multiplatform addition. There is a gradlew and gradlew.bat wrapper, a build.gradle.kts and settings.gradle.kts, a buildSrc/ directory for build logic, a gradle/ directory for the wrapper properties, gradle.properties and a config/ directory for build configuration such as code style, along with graphics/ for the artwork. The .github/ directory holds the workflows, and the badges at the top of the README name them, an Android workflow, a unit tests workflow, a Detekt workflow and an iOS workflow. Detekt is the static analysis tool for Kotlin, and having it wired as its own workflow rather than folded into the build is a signal that code style is enforced continuously. The recent release tags, 4.1.003 in August 2026, 4.1.004 in the same month and 4.1.005 in October, show the versioning moving as the multiplatform work progressed.

Where the app is distributed

The project ships through the usual channels for each platform, and the README links all of them. The Android build has a Google Play badge pointing at the package com.github.premnirmal.tickerwidget, an F-Droid badge pointing at the same package identifier, and the app is on the App Store under the name TodayStocks. The presence of an F-Droid listing is the detail worth noting, because F-Droid builds from source and its presence implies the build works from a clean checkout with no proprietary dependencies and no closed tooling. That is a good signal for anyone who cares about what goes into a build of an app that displays financial data. The application identifier uses the com.github namespace rather than a company domain, which is common for a hobby project that has outgrown its original packaging and is worth remembering if you fork it, since the application id is baked into the store listings and into any update path.

Where StockTicker is the wrong choice

The limits are clear enough. First, the scope is a display widget. The README describes showing prices, price change and alerts, and says nothing about placing orders, connecting to a brokerage account, or portfolio accounting, so if you want to act on what you see rather than just observe it, this is the wrong project. Second, the shared-code claim does not extend to the widget, so a feature you want on the home screen may need writing twice, and the iOS side is the newer and therefore less settled half of the codebase. Third, the automatic fetching is restricted to trading hours, so a portfolio in markets that trade while you are asleep will show stale numbers outside those hours, which is a deliberate choice but one that changes what the widget is for. The alternative worth naming is a dedicated portfolio app that does the same job with a more complete feature set and, in exchange, asks for far more permissions and account access than a home screen widget does. For a quick glance with minimal data exposure, the widget is the better shape, and for anything more, it is not.

Maintenance, licensing and the privacy file worth reading

The repository is GPL-3.0 licensed, with a LICENSE.txt at the root and a Code of Conduct and CONTRIBUTING file alongside it. That is an unusual licence for a mobile app, because GPL terms reach the distributed binary, and it reflects the author's preference rather than a commercial constraint. The last push to the repository was on 2026-10-08 and the project publishes GitHub releases, unlike many of the other repositories in this space, so there is a version trail to follow. The file that deserves attention is PRIVACY_POLICY.md at the top level, which is present but not described in the README, and for an app that displays financial holdings that is the document to read before installing it on a device that also holds your payment cards. There is a demo of the app linked from the README through the Play Store listing, and the in-app screenshots in the README show the watchlist and quote detail views that the shared module produces on both platforms.

Editorial conclusion

Adopt StockTicker if you want a portfolio widget for your phone rather than a full trading app, and if you want to follow a codebase that has already done the Kotlin Multiplatform migration. Do not expect it to place trades, since the README describes a display widget and nothing more, and note that the iOS side is a recent shell around shared Compose code, so it is the part most likely to lag. Verify first which app store build you would install, since the Android and iOS versions are separate artefacts, and read PRIVACY_POLICY.md before you put real portfolio data on a device.

Frequently asked questions

What does the StockTicker app do?

It provides a resizable home screen widget showing your stock portfolio in a grid, with drag and drop sorting, price change and summary alerts. Automatic fetching of stock data only happens during trading hours.

How is the Kotlin Multiplatform migration structured?

Platform-agnostic code and the shared in-app screens live in the :shared module with an androidTarget plus iOS targets, while thin platform shells live in :app for Android and iosApp for iOS. The iOS app is a SwiftUI shell hosting the shared Compose Multiplatform UI, plus a native WidgetKit home screen widget.

Where can I install StockTicker?

The README links a Google Play listing for the package com.github.premnirmal.tickerwidget, an F-Droid listing for the same package, and an App Store entry under the name TodayStocks. The presence of an F-Droid build means the app can be compiled from source without proprietary tooling.

Does StockTicker support placing trades?

The README describes only display features, namely a portfolio widget, sorting, price change and summary alerts, with no mention of order placement or brokerage account connection. It is a read-only view of your holdings rather than a trading client.

Official sources

  1. Issues
  2. License: GPL-3.0
  3. premnirmal/StockTicker on GitHub
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/premnirmal-stockticker.svg)](https://hysenlabs.com/projects/premnirmal-stockticker)

Was this useful?