{"id":51845731,"url":"https://github.com/mkb79/audible-rs","last_synced_at":"2026-07-23T12:01:40.020Z","repository":{"id":370179726,"uuid":"1293503937","full_name":"mkb79/audible-rs","owner":"mkb79","description":"Command-line tool and Rust library for your own Audible account — a Rust reimplementation of mkb79/Audible and audible-cli.","archived":false,"fork":false,"pushed_at":"2026-07-15T20:12:34.000Z","size":788,"stargazers_count":7,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-07-15T20:18:24.523Z","etag":null,"topics":["audible","audible-api","audiobooks","cli","command-line","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mkb79.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-07-08T11:23:26.000Z","updated_at":"2026-07-15T19:22:16.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mkb79/audible-rs","commit_stats":null,"previous_names":["mkb79/audible-rs"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mkb79/audible-rs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkb79%2Faudible-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkb79%2Faudible-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkb79%2Faudible-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkb79%2Faudible-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mkb79","download_url":"https://codeload.github.com/mkb79/audible-rs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkb79%2Faudible-rs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35801473,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-23T02:00:06.683Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audible","audible-api","audiobooks","cli","command-line","rust"],"created_at":"2026-07-23T12:01:39.043Z","updated_at":"2026-07-23T12:01:40.013Z","avatar_url":"https://github.com/mkb79.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# audible-rs\n\n[![Project status: WIP](https://www.repostatus.org/badges/latest/wip.svg)](https://www.repostatus.org/#wip)\n[![Version](https://img.shields.io/github/v/release/mkb79/audible-rs?include_prereleases\u0026label=version)](https://github.com/mkb79/audible-rs/releases)\n[![CI](https://github.com/mkb79/audible-rs/actions/workflows/ci.yml/badge.svg)](https://github.com/mkb79/audible-rs/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n\nA command-line tool and Rust library for your own Audible account — a\nground-up reimplementation of [`mkb79/Audible`](https://github.com/mkb79/Audible)\nand [`mkb79/audible-cli`](https://github.com/mkb79/audible-cli) as a single\nRust crate. It installs one binary, `audible`.\n\n\u003e [!WARNING]\n\u003e **Alpha — no stability guarantee.** Alpha releases are tagged (see\n\u003e [Releases](https://github.com/mkb79/audible-rs/releases)), but commands,\n\u003e flags, the config file and the on-disk database format may change at any\n\u003e time **without a migration path** (before the first stable release the\n\u003e database is recreated rather than migrated). Use it on a throwaway config\n\u003e first, and expect breakage.\n\n## What it does\n\n- **Accounts** — sign in (scripted, external-browser, or a local\n  browser-proxy with QR for headless boxes), import a legacy\n  `audible`/`audible-cli` auth file, manage the auth-file password and\n  its source, deregister.\n- **Library** — sync your library into a local SQLite database (full and\n  delta), list, full-text search, export (JSON/CSV), review the change\n  log, browse series, podcasts and episodes.\n- **Download** — owned titles as `aaxc` with resume, plus chapters,\n  cover and PDF; optional lossless decrypt to a playable `m4b`.\n- **Collections** — wishlist and archive (list, add, remove).\n- **Raw API** — send authenticated requests to the Audible API for\n  anything the higher-level commands don't cover.\n- **Plugins \u0026 agent** — a capability-scoped plugin system and a resident\n  session agent for backend/web-frontend use *(plugins run everywhere; the\n  agent is Unix-only for now)*.\n\n## Install\n\nLinux, macOS (x86-64 and arm64) and Windows (x86-64) are supported. On\nWindows the core commands and the plugin system work natively; only the\nresident session agent stays Unix-only — if you need it on Windows, run\naudible-rs under\n[WSL2](https://learn.microsoft.com/windows/wsl/install) (see the\n[step-by-step guide](https://github.com/mkb79/audible-rs/discussions/49)).\n\n### Prebuilt binary (recommended)\n\nPick your platform below. The installer downloads the release binary, verifies\nit against the published checksums, and puts `audible` on your `PATH`. By\ndefault it installs the newest **stable** release; while the project is in alpha\n(no stable release yet) it installs the newest pre-release, and once a stable\nrelease exists you can pass `--pre` / `-Pre` to keep tracking pre-releases.\n\n#### Linux / macOS\n\n```sh\ncurl -fsSL https://raw.githubusercontent.com/mkb79/audible-rs/main/install.sh | sh\n```\n\nInstalls into `~/.local/bin` (override with `--bin-dir \u003cdir\u003e`). Options:\n`--pre`, `--version \u003ctag\u003e`, `--force`, `--completions`.\n\n#### Windows\n\nPowerShell:\n\n```powershell\nirm https://raw.githubusercontent.com/mkb79/audible-rs/main/install.ps1 | iex\n```\n\nCommand Prompt (cmd) — run it through PowerShell:\n\n```bat\npowershell -c \"irm https://raw.githubusercontent.com/mkb79/audible-rs/main/install.ps1 | iex\"\n```\n\nInstalls into `%LOCALAPPDATA%\\Programs\\audible-rs` (override with `-BinDir`) and\nadds that folder to your user `PATH`. Options: `-Pre`, `-Version \u003ctag\u003e`,\n`-Force`, `-NoModifyPath`, `-Completions`. No script? See\n[Manual download](#manual-download).\n\n---\n\naudible-rs is the successor to `audible-cli` and shares the command name\n`audible`. If you already have `audible-cli` installed, the installer asks\nbefore replacing its command (pass `--force`/`-Force` to skip, or the bin-dir\noverride to install elsewhere); the config directories are separate, so\n`audible-cli`'s data is left untouched. Replacing an older audible-rs is a\nsilent upgrade.\n\n### Homebrew\n\nOn macOS, or on Linux with Homebrew:\n\n```sh\nbrew install mkb79/tap/audible-rs\n```\n\nThe formula installs the same prebuilt binary and verifies it against the\nrelease checksums; `brew upgrade` follows new releases. While the project is\nin alpha the tap tracks pre-releases; once a stable release exists it serves\nstable releases only.\n\nPick **one** installation method. If you install with both Homebrew and\n`install.sh`, you end up with two `audible` binaries and your `PATH` order —\nnot you — decides which one runs.\n\n### Manual download\n\nGrab the archive for your target from the\n[Releases](https://github.com/mkb79/audible-rs/releases) page, verify it,\nand place the binary on your `PATH`:\n\n| Platform | Asset |\n| --- | --- |\n| Linux x86-64 | `audible-\u003cversion\u003e-x86_64-unknown-linux-musl.tar.gz` |\n| Linux arm64 | `audible-\u003cversion\u003e-aarch64-unknown-linux-musl.tar.gz` |\n| macOS Intel | `audible-\u003cversion\u003e-x86_64-apple-darwin.tar.gz` |\n| macOS Apple Silicon | `audible-\u003cversion\u003e-aarch64-apple-darwin.tar.gz` |\n| Windows x86-64 | `audible-\u003cversion\u003e-x86_64-pc-windows-msvc.zip` |\n\nThe Linux binaries are statically linked (musl) and run on any distribution.\nOn **Windows**, unzip the archive and run `audible.exe` (keep its folder on\n`PATH`, or run it in place). Verify the download against `SHA256SUMS` from the\nsame release:\n\n```sh\nsha256sum -c SHA256SUMS --ignore-missing   # Linux\nshasum -a 256 -c SHA256SUMS --ignore-missing  # macOS\n```\n\n```powershell\n# Windows (PowerShell): the printed hash must match the .zip's line in SHA256SUMS\n(Get-FileHash audible-\u003cversion\u003e-x86_64-pc-windows-msvc.zip -Algorithm SHA256).Hash.ToLower()\n```\n\n### From source\n\nRequires a **Rust toolchain** and a **C compiler** (the bundled SQLite and\nthe TLS backend build from source):\n\n```sh\ncargo install --git https://github.com/mkb79/audible-rs\n# or, from a clone:\ncargo build --release   # binary at target/release/audible\n```\n\n### Optional tools for `download --decrypt`\n\n`audible download --decrypt` needs one of these on `PATH` (or pointed at via\n`AUDIBLE_FFMPEG` / `AUDIBLE_AAXCLEAN_CLI`):\n\n- **ffmpeg** (≥ 4.4), or\n- **[aaxclean-cli](https://github.com/Mbucari/aaxclean-cli) by Mbucari** —\n  purpose-built and noticeably faster.\n\n## Getting started\n\n```sh\naudible setup                 # 1. one-time interactive defaults\naudible account login -m de   # 2. register an account (pick your marketplace)\naudible library sync          # 3. pull your library into the local database\naudible library list          # 4. browse, search and export it\naudible download --missing    # 5. download owned titles (add --decrypt for m4b)\n```\n\n1. **`audible setup`** — run once after installing; it configures\n   installation-wide defaults interactively.\n2. **Add an account** — either register a fresh one with\n   `audible account login` (pick the marketplace with `-m`, e.g. `-m de`,\n   `-m us`, `-m uk`), or bring one over from the Python tools with\n   `audible account import \u003cfile\u003e`.\n3. **`audible library sync` first** — every library command reads from a\n   **local database**, so you must sync at least once before `list`,\n   `search`, `download --missing`, `series`, `library episodes` etc. return\n   anything. Run it again whenever your library changes (new purchases,\n   returns); it does an incremental delta sync when it can.\n4. **Work with it** — `library list`/`search`/`export` read from the\n   database, and **`audible download`** fetches owned titles (`--missing`\n   for everything you don't have yet, or a specific ASIN); add `--decrypt`\n   for a playable `m4b` (needs ffmpeg or aaxclean-cli — see [Optional\n   tools](#optional-tools-for-download---decrypt)).\n\nMost commands accept `-o table|json|plain` to choose the output format,\nand global selectors `-a/--account`, `-m/--marketplace`,\n`-s/--settings`. Run `audible --help` for the full command tree, or\n`audible \u003ccommand\u003e --help` for any subcommand.\n\nWith `-o json`, every command prints exactly one envelope\n`{\"error\", \"warnings\", \"result\"}`: the payload sits under `result`\n(for `api`, the server's response verbatim — on an HTTP error together\nwith `error`), `warnings` lists machine-readable `{code, message}`\nnotes (e.g. titles a sweep skipped) and `error` is set when the run\nfails — exit codes are unchanged. Commands whose stdout is a raw\nartifact stay unwrapped: `completions`, `library export --csv`, the\n`api` wire-debug flags (`--dry-run`, `--include`, `--output-file`),\n`account cookies refresh --show-response`, and external plugins.\n\n## Shell completions\n\nQuickest — `audible completions --install` writes the script to the right\ndirectory for your shell (bash, zsh or fish; detected from `$SHELL`), then\nopen a new shell:\n\n```sh\naudible completions --install          # current shell\naudible completions bash --install     # or name a shell\n```\n\n(zsh: the target dir must be on your `$fpath`.) To place it yourself\ninstead, print the script and redirect it where your shell looks:\n\n```sh\naudible completions bash \u003e ~/.local/share/bash-completion/completions/audible\naudible completions zsh  \u003e ~/.local/share/zsh/site-functions/_audible\naudible completions fish \u003e ~/.config/fish/completions/audible.fish\n```\n\n`audible completions \u003cshell\u003e` also covers `powershell` and `elvish`. Or let the\ninstaller set it up in one step: `install.sh --completions` runs `--install` for\nthe shells it finds.\n\n**Windows (PowerShell).** PowerShell has no auto-loaded completions directory,\nso `--install` does not apply there — completion is registered from your profile\ninstead. The installer sets it up for you: run it with `-Completions` (or\n`$env:AUDIBLE_COMPLETIONS=1` for the piped one-liner). That adds a line to your\n`$PROFILE` which loads completion from the current `audible` on every new shell,\nso upgrades need nothing further. To turn it on after the fact, re-run the\ninstaller with `-Completions`, or add that line to your profile yourself:\n\n```powershell\naudible completions powershell | Out-String | Invoke-Expression\n```\n\n## Commands\n\nCommands are grouped by noun; each has subcommands (`audible \u003cnoun\u003e\n--help`):\n\n| Command | What it covers |\n| --- | --- |\n| `setup` | One-time interactive defaults. |\n| `account` | Sign in / import / logout, marketplaces, password, cookies, token, activation bytes, Widevine CDM, export. |\n| `settings` | Reusable settings bundles (download options, filename scheme, …). |\n| `config` | Get/set/unset raw configuration values. |\n| `library` | `sync`, `list` (with `--kind book,podcast,episode`), `search`, `episodes`, `export`, `changes`, `add`, `remove`. |\n| `series` | Series volumes, including the ones you are missing. |\n| `download` | Download owned titles (audio/chapter/cover/pdf), decrypt, reorganize, orphans, info. |\n| `collections` | Wishlist and archive (`list`, `add`, `remove`). |\n| `annotations` | Bookmarks, notes, clips and last-position. |\n| `api` | Send raw authenticated requests to the Audible API. |\n| `db` | Maintain the local database (backup/restore, vacuum, integrity, downloads bookkeeping). |\n| `plugin` / `agent` | Plugin discovery and the resident session agent *(the agent is Unix only)*. |\n\n## Where things live\n\n`audible` follows platform conventions (and honours `XDG_*` on Linux).\nSet `AUDIBLE_CONFIG_DIR` to override the config location (useful for\nthrowaway setups). Set `AUDIBLE_PYTHON` to pin the interpreter used for\nTier-B (`cmd_*.py`) plugins when the auto-pick is awkward — e.g. past a\npyenv-win `python3.bat` shim on Windows.\n\n| | Linux / macOS | Windows |\n| --- | --- | --- |\n| Config + auth files (`config.toml`, `*.auth`) | `~/.config/audible` | `%APPDATA%\\audible` |\n| Data — library database, downloads | `~/.local/share/audible` | `%LOCALAPPDATA%\\audible` |\n\nThe library database lives under the data directory in `db/`. There is\none SQLite file **per Audible identity (`user_id`)**, not per config\naccount or per marketplace — so two accounts that resolve to the same\n`user_id`, or the same account across several marketplaces, all share\none database (marketplace is a column, not a separate file). Downloads\ndefault to `downloads/` under the data directory unless you set a\n`download_dir`.\n\n## Security\n\n- Auth material is stored in an encrypted envelope (Argon2id +\n  XChaCha20-Poly1305) by default; an unencrypted mode exists but is not\n  recommended.\n- Credentials never appear in logs, errors or command output at any\n  verbosity level.\n- The tool only ever touches **your own** account and the content you\n  own.\n\n## Documentation\n\nThis README is a starting overview. Fuller documentation will live under\n`docs/` as the project matures; until then, `--help` on any command is\nthe authoritative reference.\n\nChanges between releases are tracked in [CHANGELOG.md](CHANGELOG.md)\n(Keep a Changelog format). The file — like the GitHub release notes — is\ngenerated from the commit history with [git-cliff](https://git-cliff.org),\nso both always match; don't edit it by hand.\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n\n## Disclaimer\n\nThis project is **not affiliated with, endorsed by, or connected to\nAudible or Amazon**. \"Audible\" is a trademark of its respective owner.\nIt is an independent tool for accessing **your own** Audible account and\n**your own** purchased content; use it in accordance with Audible's terms\nof service and the laws that apply to you.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmkb79%2Faudible-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmkb79%2Faudible-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmkb79%2Faudible-rs/lists"}