A powerful command-line tool for managing and downloading your Audible audiobooks.
Built with ❤️ in Python.
Note
A ground-up Rust reimplementation of audible-cli (and the
Audible library) is in active
development: one fast, statically-linked binary — no Python required —
with a reworked command set, an encrypted auth format, a local library
database (SQLite/FTS5), and a capability-based plugin system.
It is pre-alpha and I'm looking for experienced users to run it against real accounts and report the rough edges. If you're comfortable on the command line and don't mind occasional breakage, please help kick the tyres → github.com/mkb79/audible-rs (the README there has a one-line installer for prebuilt Linux/macOS binaries). Share feedback, questions and findings in the audible-rs Discussions.
audible-cli stays fully supported — audible-rs is the future direction,
not an immediate replacement, and the two use separate config directories,
so you can run them side by side.
- 🔑 Manage multiple Audible accounts (profiles)
- 📚 Browse and export your library and wishlist
- 🎧 Download audiobooks in AAXC or AAX with metadata & chapters
- ⚡ Fast HTTP requests powered by httpx
- 🛠️ Plugin system for custom commands & extensions
- 💻 Cross-platform: Linux, macOS, Windows
- 🚀 Prebuilt executables (no Python required)
With uv tool (recommended)
uv tool install audible-cliWith uvx
uvx --from audible-cli audibleFrom PyPI
pip install audible-cliFrom GitHub
git clone https://github.com/mkb79/audible-cli.git
cd audible-cli
pip install .Don’t want to install Python?
Prebuilt binaries are available on the releases page.
-
Run the interactive setup:
audible quickstart
→ creates config, profile, and auth file.
-
List your library:
audible library list
-
Download your entire library:
audible download --all --aax
| Goal | Command |
|---|---|
| List all audiobooks | audible library list |
| Export library to JSON | audible library export --output library.json |
| Add to wishlist | audible wishlist add --asin B004V00AEG |
| Download since date | audible download --start-date "2023-01-01" --aaxc --all |
| Switch profile | audible -P germany library list |
audible-cli stores its configuration files in an app directory.
| OS | Path |
|---|---|
| Windows | C:\Users\<user>\AppData\Local\audible |
| Linux | ~/.audible |
| macOS | ~/.audible |
You can override this by setting the environment variable:
export AUDIBLE_CONFIG_DIR=/path/to/dir- Name:
config.toml - Format: TOML
- Structure:
[APP]section → global defaults[profile.<name>]section → settings per Audible account
Example:
[APP]
primary_profile = "default"
filename_mode = "ascii"
chapter_type = "tree"
[profile.default]
auth_file = "auth.json"
country_code = "us"
[profile.germany]
auth_file = "auth_de.json"
country_code = "de"- Each profile corresponds to an Audible account or marketplace
- Contains:
auth_file→ authentication filecountry_code→ Audible marketplace (us,de,uk, …)
- Switch profiles with:
audible -P germany library listThe [APP].primary_profile is used if no profile is specified.
- Stored in the same app directory as the config file
- Can be password-protected:
audible -p "mypassword" download --asin <ASIN>- If no password is passed, you will be prompted with hidden input
🔧 APP section
primary_profile: default profile if none is specifiedfilename_mode: filename handling for downloadsascii(default)- override with
--filename-mode
chapter_type: chapter format for downloadstree(default)- override with
--chapter-type
👤 Profile section
auth_file: authentication file for this profilecountry_code: Audible marketplacefilename_mode: overrides[APP].filename_modechapter_type: overrides[APP].chapter_type
- activation-bytes → Manage DRM activation keys
- api → Call raw Audible API endpoints
- download → Download audiobooks
- library → List, export your library
- wishlist → Manage wishlist (list, add, remove, export)
- manage → Profiles, configs, auth-files
- quickstart → Interactive setup
Show help:
audible <command> -hCreate a file in the plugin folder, e.g. cmd_hello.py:
import click
@click.command(name="hello")
def cli():
click.echo("Hello from plugin!")Important: A custom plugin must start with the prefix
cmd_. The loader scans forcmd_*.pyfiles and attaches each command to the CLI.
Run:
audible helloYou can also distribute plugins as Python packages via entry points.
The entry point group is audible.cli_plugins.
[project]
name = "audible-myplugin"
version = "0.1.0"
dependencies = ["audible-cli", "click"]
[project.entry-points."audible.cli_plugins"]
my_command = "myplugin.cli:my_command"
another = "myplugin.cli:another"After installation, your plugin commands will automatically be available in audible:
audible my-command
audible anotherControl logging output:
audible -v debug library list
audible -v error download --allLevels: debug, info, warning, error, critical
Default: info
- audible-cli-flask → Run
audible-cliin a Flask web server - audible-series → Organize series from your library
Want your add-on listed? → Open a PR or issue 🚀
Contributions welcome!
- File issues
- Open pull requests
- Share plugins and add-ons
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0-only).
See LICENSE for details.
