CLI tool
z411/trackma avatar
z411/trackma

Trackma keeps your anime and manga lists in one local file across sites

Open multi-site list manager for Unix-like systems. (ex-wMAL)

890 stars91 forksPythonGPL-3.0

At a glance

What is it?
Trackma is a Python program for Unix-like systems that fetches, updates and uses personal lists from several media tracking sites, storing them locally so they work offline. It suits a Linux user with files on disk and accounts on more than one tracker, and it is a desktop program rather than a library.
Who is it for?
Trackma suits a Unix user who keeps their media on disk, has accounts on more than one tracking site, and wants their own list to be the master copy rather than the remote one. It is the wrong tool for a Windows-only user, since the platform support is POSIX and the Win32 recognition is only for detecting a running player, and it is the wrong tool for someone who wants their list hosted somewhere rather than kept locally.
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 20 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

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

Editorial analysis

Your local list is the master, the sites are mirrors

Trackma aims to be a lightweight and simple but feature-rich program for Unix based systems for fetching, updating and using data from personal lists hosted in several media tracking websites. The description in the repository also notes the history, that it is the open multi-site list manager for Unix-like systems, and the project goes by its former name, ex-wMAL.

The first feature on the list is the one that defines the model: manage a local list and synchronize when necessary, useful when offline. The direction of truth runs from the local file outward, not the other way around. The sites are where your list can be updated from, but the list you can search and act on lives on your machine.

That is a different design from a browser extension that talks to one site and shows its data, and it explains the rest of the feature list. Managing multiple accounts on different media tracking sites is natural here, because the local list is the common denominator. Support for several media types, as supported by the site, follows from the same place. And the ability to launch a media player for a requested media in the list and update the list if necessary means the local list is what the player commands act on.

For a user with a directory of downloaded episodes and a half-finished series on three sites, that is a coherent answer. For a user who wants their list in one place on the web, it is the wrong shape entirely.

Five sites, and the two that are not about anime

The supported sites are Anilist for anime and manga, Kitsu for anime, manga and drama, MyAnimeList for anime and manga, Shikimori for anime and manga, and VNDB for visual novels.

Four of the five are anime and manga trackers with overlapping but non-identical catalogues, which is the situation Trackma is built for, since the same series has different IDs and different progress on each. Kitsu is the one that adds drama, and VNDB is the outlier, being a database of visual novels rather than a general media tracker.

The multi-site part is a reconciliation problem more than a fetching one. The user has a list per site, and the program merges them and keeps them in step, which is where the local storage earns its place. When the sites disagree about whether an episode has been watched, the local list is what a command acts on, and the synchronisation is the part that can be repaired later.

The rest of the platform support is about detection rather than tracking. The topic list names inotify, MPRIS and GTK, and the feature list mentions the detection of a running media player and the ability to launch one. This is a companion program for a local media collection, not a browser-side tracker.

The security note in the feature list is worth repeating in its own terms: secure, uses HTTPS wherever possible. For a program that holds account cookies for several sites, that is a reasonable baseline rather than a strong claim.

Four interfaces over one list

The interfaces are a real differentiator, and the dependency table explains the cost of each.

The CLI needs nothing extra. The curses interface needs Urwid, the GTK 3 interface needs PyGI and pycairo, and the Qt interface needs PyQt6. The screenshots section shows all four, and the feature list describes them as multiple user interfaces covering Qt, GTK, curses and command-line.

The design intent is stated as highly scalable and easy to code new interfaces, and the architecture supports that reading. The four console entry points in the project metadata map to four separate modules, trackma.ui.cli, trackma.ui.curses, trackma.ui.gtk and trackma.ui.qt, each with a main function. The curses interface in particular is the one that fits the Unix desktop use case, since it drops into a terminal and needs no display server.

Only basic features work with the base install, meaning the CLI interface and no tracker. Everything else is optional, and the package exposes extras for it: gtk, qt, curses, ui for all user interfaces, trackers for all tracker libraries, plus discord_rpc to set your watching activity in Discord and twitter to announce it on Twitter. There is also an anitopy extra for the title parser, and optional PIL for preview images in the Qt and GTK interfaces.

Because the interfaces sit above the list rather than beside it, a user can start on the command line, add the curses interface, and move to a graphical one without their data moving anywhere.

Detecting what you are watching, and how

The tracker table is the part of the documentation that most directly affects whether Trackma works on your machine.

There are two automatic mechanisms and four manual ones. Inotify is instant but only supported in Linux, and is used whenever possible, with inotify or pyinotify as the dependency. Polling is slow, supported on every POSIX platform, and is the fallback, using lsof. Both of those watch the filesystem.

The other four are enabled manually. Plex connects to a Plex server. Kodi connects to a Kodi server. Jellyfin connects to a Jellyfin server. MPRIS connects to running MPRIS capable media players, using python-jeepney. Win32 is recognition for Windows platforms.

The manual ones are the interesting case, because they mean Trackma can update your list from a remote media server rather than only from local files. A person running a Plex or Jellyfin server already has one place that knows what is playing, and Trackma can read it.

The dependency set for the automatic trackers is grouped as the trackers extra, with inotify, pyinotify and jeepney. That grouping matters practically, because the base install has neither the inotify nor the polling behaviour available in the same form, and the fallback to polling needs lsof, which is not a Python package and so is a system dependency the pip extra cannot express.

The pypresence extra, with the odd annotation in the dependency list, is for announcing activity on Discord, and the twitter extra does the same for Twitter.

Installing it, and the configuration file you have to edit

The only required dependencies are Python 3.9 or later, and for installation either python-pip to install through pip or python-uv to install through uv.

Packaging is done by the community for several distributions, with an AUR package and a git variant for Arch Linux, a Fedora COPR, a Gentoo overlay, a NixOS package in nixpkgs, a Void Linux template, and a Docker image maintained by a community member. The manual route is pip:

sh
$ pip3 install Trackma

The git version is described as probably unstable but newer, and installs like this:

sh
$ pip3 install -U git+https://github.com/z411/trackma.git

Or from a clone, using uv to build the wheel:

sh
$ git clone --recursive https://github.com/z411/trackma.git
$ cd trackma
$ uv build
$ pip3 install dist/trackma-0.8.5-py3-none-any.whl

Extras are specified at install time, and the README is explicit that pip has no way to install all available extras, so you list them yourself:

sh
# With pip
$ pip3 install Trackma[gtk,trackers,curses]
$ pip3 install Trackma[ui,twitter,discord_rpc]

With uv on a clone the same thing is expressed as extra flags, including --all-extras. The four run commands are trackma, trackma-curses, trackma-gtk and trackma-qt.

The configuration step is the one people miss. A configuration file is created at ~/.config/trackma/config.json, and you need to fill in the directory where you store your video files along with other settings, with the option reference on the project wiki. The GTK and Qt interfaces provide a visual Settings panel instead, which is the easier route if you installed one of them.

What the local list cannot tell you, and who the tool is for

Two limits are worth being clear about.

The first is that a local list manager is only as good as the files it can see. The configuration points at a directory of video files, and the local scanning is what makes the offline use case work. A user whose collection is spread across several drives, or whose episodes are in a format the scanner does not recognise, gets a local list that does not match reality, and the synchronisation will then push that wrong state to the sites. The tool is for a user with a tidy, local, named library.

The second is that reconciliation is not the same as merging intelligently. The local list is the master, but when it syncs to a site that has a different state for an episode, the outcome depends on how the sites model progress, which differs. An entry marked as rewatching on one site and completed on another is not a case any of the documentation describes.

On the project side, the maintenance picture is steady. The repository is not archived, the last push was on 2026-10-03, and the recent releases are v0.10.3, v0.10.2 and v0.10.1, all in January 2026, with the version in the project metadata at 0.10.4. The package is classified as production stable, requires Python 3.9 or newer but below 4, and lists support for 3.9 through 3.14 with the operating system recorded as POSIX.

The licence is GPLv3, with the COPYING file at the repository root and the project metadata recording it as GPL-3.0-or-later. The author is z411, and the README credits other contributors through the AUTHORS file and notes that the GTK icon was designed by shuuichi.

Editorial conclusion

Trackma suits a Unix user who keeps their media on disk, has accounts on more than one tracking site, and wants their own list to be the master copy rather than the remote one. It is the wrong tool for a Windows-only user, since the platform support is POSIX and the Win32 recognition is only for detecting a running player, and it is the wrong tool for someone who wants their list hosted somewhere rather than kept locally. Before you adopt it, read the configuration wiki page and fill in the video directory path in ~/.config/trackma/config.json, because the local file scan is the feature that makes the offline use work, and install the trackers extra if you want the list to update when a player starts.

Frequently asked questions

Which media tracking sites does Trackma support?

Anilist, Kitsu, MyAnimeList and Shikimori for anime and manga, with Kitsu also covering drama, and VNDB for visual novels. The program manages accounts on several of these sites and keeps a local list that works offline.

How do I install Trackma with a graphical interface?

The Qt, GTK and curses interfaces are optional extras, so you name them at install time, for example pip3 install Trackma[gtk,trackers,curses]. With uv on a clone you use uv sync --extra gtk --extra trackers --extra curses, or uv sync --all-extras. The plain CLI interface needs no extra dependencies.

What does Trackma use to detect a playing video?

On Linux it uses inotify for instant detection, with polling via lsof as a fallback that works on every POSIX platform. It can also connect manually to a Plex, Kodi or Jellyfin server, to MPRIS capable media players through jeepney, and it has a Win32 recognition mode.

Where does Trackma keep its configuration?

In a config.json file created at ~/.config/trackma/config.json, where you fill in the directory holding your video files and other settings. The option reference is on the project wiki, and the GTK and Qt interfaces offer a visual Settings panel instead.

Official sources

  1. License: GPL-3.0
  2. Project website
  3. README
  4. Releases
  5. z411/trackma 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/z411-trackma.svg)](https://hysenlabs.com/projects/z411-trackma)

Was this useful?