Open-source project
MALSync/MALSync avatar
MALSync/MALSync

MAL-Sync: Automatic Episode Tracking Across Streaming Sites and Media Servers

Integrates MyAnimeList/AniList/Kitsu/Simkl into various sites, with auto episode tracking.

2,992 stars370 forksTypeScriptGPL-3.0

At a glance

What is it?
MAL-Sync is a browser extension and userscript that watches the page you are on and marks the episode on MyAnimeList, AniList, Kitsu, Simkl, Shikimori or MangaBaka. Here is what it actually does, how to install it, and where it stops working.
Who is it for?
Adopt MAL-Sync if you already keep a list on MyAnimeList, AniList, Kitsu, Simkl, Shikimori or MangaBaka and you watch across several streaming sites or a Plex, Emby, Jellyfin, Komga, Kavita or Suwayomi server, because the extension turns that list into a central bookmark set.
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 1 day ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

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

Editorial analysis

The problem MAL-Sync solves for multi-site watchers

If you watch anime on one service and read manga on one site, your list stays current by hand. That breaks the moment you spread across several sites, because each one keeps its own history and none of them talks to MyAnimeList. The repository description states the goal plainly: it integrates MyAnimeList, AniList, Kitsu, Simkl, Shikimori and MangaBaka into various sites, with auto episode tracking. The README frames the result as a centralized bookmark system, so the list you already maintain becomes the thing that tells you where you left off, regardless of which page you open next.

The audience is narrower than "everyone who watches anime". It is people who already maintain a list on one of those six trackers and who watch or read on more than one of the supported pages. If you only use one streaming service that already syncs to your tracker, MAL-Sync adds a layer you do not need. The value shows up in the long tail: the smaller regional sites, the manga readers, and the self-hosted media servers that would otherwise each need manual entry.

How the extension maps a page to a list entry

MAL-Sync is a client-side extension and userscript, not a server that proxies your traffic. The repository is a TypeScript project built with webpack, and the codebase keeps per-site logic separate from the shared sync layer, which is what makes the supported pages table in the README so long. Each supported domain needs its own adapter that recognizes the page, extracts the series identity and the episode or chapter number, and hands that to the tracker API.

That design explains both strengths and failures. When an adapter matches, the extension can mark progress, and the README describes the result as automatic episode tracking. When a site changes its page structure, the adapter can stop matching, and the extension has nothing to fall back on. The same applies to a site that is simply absent from the table: there is no generic scraping path that will guess the episode number for you.

The media server support follows the same shape. Plex, Emby, Jellyfin, Komga, Kavita and Suwayomi each link to a wiki page in the README, which is where the configuration for those integrations lives. The README itself only lists the names, so treat the wiki as the actual documentation for server setups.

Installing MAL-Sync and tracking your first episode

The README does not print an install command. It points at the project homepage, https://malsync.moe, and the extension is distributed as a browser extension and a userscript, so installation happens through your browser rather than a package manager. The steps below describe the shape of the process; the exact store links come from the homepage.

First, open the homepage and pick the build for your browser. If your browser is not covered by a packaged extension, the userscript route is the fallback, and it requires a userscript manager in the browser.

bash
# no install command is documented; get the extension or userscript from
# https://malsync.moe

Second, log in to your tracker inside the extension settings. MAL-Sync needs an authenticated session with MyAnimeList, AniList, Kitsu, Simkl, Shikimori or MangaBaka before it can write progress. The README does not document which authentication flow each tracker uses, so expect a redirect or a token step depending on the service.

Third, open an episode page on one of the supported sites listed in the README, for example a Crunchyroll episode or a chapter on a supported manga reader. The extension injects its interface into the page; when it recognizes the series it shows the mapping and the current progress for that title.

Fourth, confirm the write. Watch or advance the episode, then check the tracker itself rather than only the injected panel, because the panel reflects what the extension believes it sent. If the series is misidentified, the injected interface is also where you correct the match, and the README does not describe an automatic disambiguation step for ambiguous titles.

For a self-hosted setup, the README links separate wiki pages for Plex, Emby, Jellyfin, Komga, Kavita and Suwayomi rather than describing them inline. Read the matching wiki page before you touch server settings, because the README gives no configuration keys for those integrations.

Where MAL-Sync breaks, and when it is the wrong tool

The most common failure is a supported site that stops being recognized. The README's supported pages table is a list of hand-written adapters, and a redesign on the streaming side can invalidate one. The extension has no generic fallback, so the symptom is a page where nothing is detected and no progress is written. The search phrase "malsync not working" is what that looks like from the user side.

A second boundary is authentication. The extension writes to your tracker account, which means it holds a session or token for that account. If your tracker session expires, tracking stops silently until you log in again. The README does not document a retry queue, so treat a long gap in your list as a signal to check the extension rather than assuming the episodes were recorded.

A third case is simply the wrong tool. If you watch everything through one service that already syncs to your tracker, MAL-Sync duplicates that work and adds a moving part. If you want tracking that survives a browser change, a userscript manager setup or a different machine, understand that the state lives in the extension configuration, not in a service account you can log into anywhere. And if the site you use is not in the README table, the extension will not invent support for it.

How MAL-Sync differs from a tracker's own scrobbling

The obvious alternative is the tracker's own integration or a service-level scrobbler that talks directly to the streaming provider. That approach works without a browser extension and keeps working when you switch browsers, but it only covers providers that have signed up for it. MAL-Sync takes the opposite position: it runs in the page, so it can cover sites that will never build an official integration, and it covers manga readers and self-hosted media servers in the same mechanism.

The trade-off is maintenance. A service-level integration is the provider's problem when it breaks. A page-level adapter is MAL-Sync's problem, and the project carries one per site. That is why the supported pages table is both the feature list and the risk list. If your usage is one big streaming service, the official route is less fragile. If your usage is spread across smaller sites, regional services, manga readers and a home server, the extension is doing work nothing else does for you.

The project is GPL-3.0-only, which matters if you plan to fork it or ship a modified build. Under that licence, a distributed modified version has to carry the same licence and source availability. The README does not discuss commercial use or redistribution terms beyond the licence file, so read LICENSE and the GPL-3.0 text rather than relying on a summary.

Upgrade cost and what a new release means for you

The package manifest reports version 0.12.5, matching the most recent release listed for 2026-09-02. The two prior releases, 0.12.4 and 0.12.3, are dated 2026-07-15 and 2026-03-02. That cadence is uneven, with a few months between releases, which is consistent with a project whose work is mostly adapter maintenance against sites it does not control.

For a user, the practical upgrade path is the browser's extension update mechanism or a userscript manager's update check. There is no documented self-hosted server component to upgrade, and no migration notes are given in the README. The repository requires Node 24 or newer and npm 11 or newer in engines, which only matters if you build from source rather than install the packaged extension.

Building from source is a real option because the repository is public and the licence permits it, but it is not the path the README walks you through. The top-level entries show a webpackConfig directory and a test directory, so a build and test setup exists, but the README does not document the build commands. If you only want tracking, installing the packaged extension is the shorter route.

Editorial conclusion

Adopt MAL-Sync if you already keep a list on MyAnimeList, AniList, Kitsu, Simkl, Shikimori or MangaBaka and you watch across several streaming sites or a Plex, Emby, Jellyfin, Komga, Kavita or Suwayomi server, because the extension turns that list into a central bookmark set. Do not adopt it if you expect it to work on a site nobody has written an adapter for, or if you want a browser-independent tracker: it is a browser extension and userscript, and the README does not document a native mobile app. Before installing, check the supported pages table in the README for the domain you actually use, confirm your browser can install the extension or run the userscript, and read the permission list your browser shows at install time.

Frequently asked questions

What is MAL-Sync?

It is a browser extension and userscript that integrates MyAnimeList, AniList, Kitsu, Simkl, Shikimori and MangaBaka into various streaming and reading sites, with automatic episode tracking. The README describes the effect as using your anime or manga list as a centralized bookmarks system.

Is MAL-Sync safe?

The source is public under GPL-3.0-only, so the code can be inspected, but the README does not document a security or permission model. The extension writes to your tracker account, which means it holds a session or token for that account; your browser shows the requested permissions at install time.

Why isn't MALSync working?

The most likely cause is a supported site whose page structure changed so the adapter no longer matches, since the extension has no generic fallback for unrecognized pages. A logged-out tracker session is the other common cause, because tracking stops until you authenticate again.

Which websites support MAL-Sync?

The README keeps a supported pages table split into anime sites, manga sites and media servers. The media server column lists Plex, Emby, Jellyfin, Komga, Kavita and Suwayomi, each with its own wiki page for configuration.

How do I use MAL-Sync?

Install the extension or userscript from the project homepage, log in to your tracker inside the extension settings, then open an episode or chapter page on a supported site and let the injected interface map the series. Confirm the write on the tracker itself, because the extension panel only shows what it believes it sent.

Does MAL-Sync track rewatches?

The README does not document rewatch handling, and the repository description only states that it performs auto episode tracking. Treat rewatch behavior as unverified until you check the injected interface on a title you are rewatching.

Official sources

  1. License: GPL-3.0
  2. MALSync/MALSync on GitHub
  3. Project website
  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/malsync-malsync.svg)](https://hysenlabs.com/projects/malsync-malsync)