---
title: "mangadex-to-anilist"
description: "Push your MangaDex library into private AniList list entries."
---

> Documentation Index
> Fetch the complete documentation index at: https://manifold.jfa.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# mangadex-to-anilist

```sh
manifold migrate mangadex-to-anilist [flags]
```

Exports your MangaDex library, matches each title to AniList (external links, title search, Vectorize embeddings), then creates **private** AniList list entries. Optional chapter progress comes from MangaDex read markers.

## Flags

### `--anilist-token <token>`

AniList access token override. Resolve order: flag → `MANIFOLD_ANILIST_TOKEN` → `login anilist` keychain.

Example:

```sh
manifold login anilist
manifold migrate mangadex-to-anilist
```

### `--mangadex-token <token>`

MangaDex personal token with the `manga.read` scope, used to export the
library. Falls back to `MANIFOLD_MANGADEX_TOKEN`. If omitted, the command uses the
password-grant flags below.

Example:

```sh
manifold migrate mangadex-to-anilist --mangadex-token "$MANIFOLD_MANGADEX_TOKEN"
```

### `--apply`

Create or update AniList entries. Without this flag, the command runs through
export and matching but does not write to AniList.

- Default: `false`

Example:

```sh
manifold migrate mangadex-to-anilist --apply
```

### `--skip-progress`

Create list entries without copying chapter progress from MangaDex read
markers.

- Default: `false`

Example:

```sh
manifold migrate mangadex-to-anilist --skip-progress --apply
```

### `--use-cache`

Reuse the snapshot, match results (including unmatched titles), and read-marker
progress stored in `.tmp` instead of fetching them again.

- Default: `false`

Example:

```sh
manifold migrate mangadex-to-anilist --phase match --use-cache
```

### `--limit <n>`

Process only the first `n` entries after the MangaDex export. Use this for a
small canary run before processing the full library.

- Default: no limit

Example:

```sh
manifold migrate mangadex-to-anilist --limit 25
```

### `--phase <phase>`

Run one stage instead of the complete migration. Accepted values are `all`,
`export`, `match`, and `push`.

- Default: `all`

Example:

```sh
manifold migrate mangadex-to-anilist --phase export
```

### `--mangadex-client-id <id>`

OAuth client ID for the password-grant fallback. Falls back to
`MANIFOLD_MANGADEX_CLIENT_ID`.

Example:

```sh
manifold migrate mangadex-to-anilist --mangadex-client-id "$MANIFOLD_MANGADEX_CLIENT_ID"
```

### `--mangadex-client-secret <secret>`

OAuth client secret for the password-grant fallback. Falls back to
`MANIFOLD_MANGADEX_CLIENT_SECRET`.

Example:

```sh
manifold migrate mangadex-to-anilist --mangadex-client-secret "$MANIFOLD_MANGADEX_CLIENT_SECRET"
```

### `--mangadex-username <username>`

MangaDex account username for the password-grant fallback. Falls back to
`MANIFOLD_MANGADEX_USERNAME`.

Example:

```sh
manifold migrate mangadex-to-anilist --mangadex-username "$MANIFOLD_MANGADEX_USERNAME"
```

### `--mangadex-password <password>`

MangaDex account password for the password-grant fallback. Falls back to
`MANIFOLD_MANGADEX_PASSWORD`.

Example:

```sh
manifold migrate mangadex-to-anilist --mangadex-password "$MANIFOLD_MANGADEX_PASSWORD"
```

## Matching

Per title, matching prefers:

1. AniList external link (`links.al`)
2. MAL external link (`links.mal`)
3. Title search
4. Vectorize embeddings (Workers AI) when candidates remain ambiguous

Exact title matches can bypass the embedding acceptance bar. AniList writes are
spaced (~1.2–2.5 s) with 429 backoff on library-wide passes.

## Workflow

1. **Export** — MangaDex library + read markers into `.tmp`
2. **Match** — cascade above into AniList candidates
3. **Push** — `SaveMediaListEntry` as private (+ optional progress)

Phases are resumable. Delete the CLI `.tmp` directory to force a fresh pass. Long MangaDex runs refresh the token about every 15 minutes.

```sh
manifold migrate mangadex-to-anilist              # dry-run
manifold migrate mangadex-to-anilist --apply
bun run manifold migrate mangadex-to-anilist --skip-progress --apply
bun run manifold migrate mangadex-to-anilist --phase match --use-cache
```

MangaDex auth falls back to password-grant credentials in `cli/.env`, or pass
`--mangadex-token` with a personal token that has `manga.read` scope.

> **Local AniList writes**
>
> AniList blocks Cloudflare Worker IPs. This command always runs on your machine.

Source: https://manifold.jfa.dev/cli/migrate/mangadex-to-anilist/index.mdx
