Open-source project
tomakino/lyricon avatar
tomakino/lyricon

Lyricon: status bar lyrics on Android through an Xposed module

为 Android 系统扩展状态栏歌词显示功能的增强工具

808 stars58 forksKotlinApache-2.0

At a glance

What is it?
Lyricon is an Apache 2.0 licensed Kotlin project that puts song lyrics into the Android status bar by hooking System UI through the Xposed framework. The judgement is that the interesting engineering sits in the plugin architecture and the per-player lyric sources, while the hard requirement of root and LSPosed narrows the audience to people who already run a rooted device.
Who is it for?
Lyricon fits an Android user with a rooted device who already runs LSPosed and wants the currently playing line visible without opening the player, because the lyric sources live in separate plugins and the visual layer can be tuned from the app itself. It is the wrong choice for anyone on an unrooted phone, for a device below Android 9.0, and for a player without a plugin, since the app list is a fixed set and unknown players need an issue and a new adapter.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 46 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

Status bar lyrics on Android, with Xposed as the price of admission

Lyricon is a Kotlin project whose README describes it as an Xposed based enhancement tool for the Android status bar, and the repository description gives the same idea, an enhancement tool that extends the status bar with lyric display. The mechanism is the whole point. Rather than shipping a notification or a floating overlay of its own, the module hooks into System UI and puts the lyric line where the clock and the battery sit.

The requirements are spelled out without hedging. The system version must be Android 9.0, API level 28, or newer. The device needs root access, and it needs LSPosed or a compatible Xposed framework installed. The README adds a tip that the latest stable LSPosed release is the sensible choice, since the module runs inside that process.

That combination is the filter on the audience. A rooted phone with a working Xposed framework is a deliberate setup, and Lyricon is a tool for that setup rather than for a stock handset. The payoff is a status bar that reads like a karaoke ticker while music plays, without a notification shade pull or a second app on screen.

The plugin system is where player support actually lives

Lyricon is modular, and the modularity is not cosmetic. The lyric source for a given player comes from a separate plugin, and the plugins live in their own repository, LyricProvider, which the documentation describes as holding adapters for mainstream music platforms. The main application is the shell; the coverage is the plugin set.

The list of natively adapted applications is long enough to be useful. It names ConePlayer, Flamingo, BBPlayer, MobiMusic, Kanade, Sollin Player, QZ Music, PureMusic, Smart Music Next and LunaBeat. The Kanade entry points at a GitHub repository, and the PureMusic entry points at its own project, so these are third party players the project has fitted a plugin for rather than players it ships.

The gap in that list is the obvious failure mode. If your player is not on it, the module has nothing to read, and the documented route is to open an issue on the repository. A new player therefore means an adapter somebody has to write, in a separate project, before the main application becomes useful for that user.

Per-character lyrics, translation and duet mode

The display features are listed in three groups, and the first group is the one that separates this from a simple notification ticker. Lyricon supports per-character lyrics, where the highlight moves through the line word by word or character by character rather than switching between whole lines, and it can show a translation alongside the original lyric.

The third item in that group is duet mode. For a song with two voices, a status bar that shows only one line loses half of what the track is doing, so a mode that alternates or splits the display between the two singers is a real feature for anyone who plays music with two parts rather than a gimmick.

The second group is the plugin design described above, and the third is visual customisation. The README lists the controls there as font style, whether a logo is displayed, coordinate offset and animation effects. Together they cover the three things that make an overlay feel wrong on a particular device: the typography does not match, the content sits in the wrong place, or the transition is too loud for a screen you look at constantly.

Taken together, the feature set is coherent around one idea, which is a status bar that behaves like a karaoke display instead of like a notification.

Installation is six steps and the scope setting is the one that matters

The setup sequence is short and ordered. First, download the main application from the Releases section of the repository and install it. Second, enable the module inside the LSPosed manager and tick the System UI scope, so the module is allowed to hook the process where the status bar lives. Third, restart System UI or reboot the device so the hook is injected.

Fourth, install the plugin that matches the music player you use, taken from the LyricProvider repository. Fifth, open the application and adjust the position anchor, the width and the visual styling for your particular screen. Sixth, start the player and play something, then check whether the status bar shows the line as expected.

Two details deserve attention. The System UI scope selection is what makes the hook work at all, and a module that is enabled without that scope appears to do nothing. And the parameter tuning step is not optional in practice, because an overlay that ignores the anchor and width settings will sit in the wrong place on a device with a cutout or a different system bar layout.

The Gradle tree separates the app, the hook and the lyric pipeline

The repository is a Gradle project with a settings file, a build file at the root and a wrapper, and the modules are named for their role. There is an app module for the user facing application, an xposed module directory for the hook code, a lyric directory, a bridge directory, a common directory shared between them, and a directory named lyricon.

Two of those names hint at the architecture without needing to be guessed at. The bridge module is the seam between the hooked process and the rest of the code, and the common module is where shared types live so that the application and the injected code agree on the data they exchange. There is also a directory called opencc-lite, which sits alongside a lyric module and points at the Chinese conversion piece of the pipeline, which matters for a project whose primary audience reads simplified Chinese lyrics.

Alongside the code there are resources for the artwork and animations, a docs directory that matches the documentation centre published at tomakino.github.io/lyricon, and an .idea directory. The documentation centre is described as holding application documentation and lyric documentation, the second covering the plugin side, which is the split a contributor needs.

Beta releases through April, a push in September, Apache licensing

The release list shows that the project is still shipping beta builds. Version 1.0.30-beta2 was published on 2026-04-06, 1.0.30-beta3 on 2026-04-12 and 1.0.30-beta5 on 2026-04-20. The last push was on 2026-09-07, and the repository is not archived, so the tree is being worked on even though the tagged releases stopped in April.

The licence is Apache 2.0, which is the permissive end of the spectrum for a module of this kind: redistribution is allowed, modifications are allowed, and the obligations are on notices and on marking changes. That matters here more than it often does, because the plugin ecosystem means parts of the user visible behaviour live in code under a different repository, and the licence of the plugin side is separate from the licence of the shell.

Support runs through two channels, a QQ group and a Telegram channel, and the README links both from the badge row at the top. The English documentation exists as a separate file, README-EN.md, next to the Chinese one, which is the entry point for a reader who cannot use the Chinese documentation centre. For an end user the practical checklist is short: Android 9.0 or newer, root, LSPosed, the main application, the plugin for your player, and a System UI restart.

Editorial conclusion

Lyricon fits an Android user with a rooted device who already runs LSPosed and wants the currently playing line visible without opening the player, because the lyric sources live in separate plugins and the visual layer can be tuned from the app itself. It is the wrong choice for anyone on an unrooted phone, for a device below Android 9.0, and for a player without a plugin, since the app list is a fixed set and unknown players need an issue and a new adapter. Before you install, check that the player you use is on the adapted list, install the matching plugin from the LyricProvider repository, and decide whether the beta line, where the recent releases sit, is acceptable for the device you will hook into System UI.

Frequently asked questions

What does Lyricon do on Android?

It displays song lyrics in the Android status bar by hooking System UI through the Xposed framework. The display supports per-character lyrics, a translation line and a duet mode, and the position, width, font, logo and animation can be adjusted from the app.

What do I need to install Lyricon?

Android 9.0, API level 28 or newer, root access, and LSPosed or a compatible Xposed framework. Then install the main application from the Releases page, enable the module with the System UI scope, restart System UI, and add the plugin for your player from the LyricProvider repository.

Does Lyricon support my music player?

The adapted list covers ConePlayer, Flamingo, BBPlayer, MobiMusic, Kanade, Sollin Player, QZ Music, PureMusic, Smart Music Next and LunaBeat. If your player is missing, the project asks you to open an issue, and a plugin has to be written for it.

Is Lyricon still being updated?

The recent releases are beta builds, 1.0.30-beta2 on 2026-04-06, 1.0.30-beta3 on 2026-04-12 and 1.0.30-beta5 on 2026-04-20, and the last push was on 2026-09-07 with the repository not archived.

Official sources

  1. License: Apache-2.0
  2. Project website
  3. README
  4. Releases
  5. tomakino/lyricon on GitHub
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/tomakino-lyricon.svg)](https://hysenlabs.com/projects/tomakino-lyricon)

Was this useful?