# Output writers Default Markdown/HTML digests stay in core. Named **output writers** attach after the report is built and write additional artifacts beside the same run stem. By default a digest run enables **every discovered writer**. Narrow or disable with `--output`: ```bash rollup digest --lookback-days 7 # md/html + xteink + txt + json + epub rollup digest --output xteink --lookback-days 7 # md/html + xteink only rollup digest --output json --output txt --lookback-days 7 rollup digest --output none --lookback-days 7 # Markdown/HTML only rollup digest --output epub --lookback-days 7 # requires: pip install 'rollup[epub]' ``` Writers are skipped under `--dry-run`. `--xteink` (and compatibility `--x3`) is an alias for `--output xteink` (selecting any `--output` / `--xteink` replaces the default-all set). Sticky TOML: `output = ["json", "txt"]`, `output = "none"`, or `output = "all"`. When writers are auto-enabled (default-all) and an optional dependency is missing (e.g. EPUB without ebooklib), that writer is skipped with a warning. An explicit `--output epub` still fails hard if the dependency is absent. ## Built-in writers | Name | Files | Notes | |------|--------|--------| | `xteink` | `…-newsletter-digest.xteink.md` | E-ink oriented Markdown; short lines; **no external URLs**. See [XTEINK_USAGE.md](XTEINK_USAGE.md). | | `txt` | `…-newsletter-digest.txt` | Plain text; same offline model as XTEINK (no links / URLs stripped). | | `json` | `…-newsletter-digest.json` | Structured full rollup (`schema_version` 1). Includes classified links and metadata; **omits** `body_html` / `body_text`. | | `epub` | `…-newsletter-digest.epub` | Rich ebook (cover, nav, per-folder chapters, summaries); **no external URLs** (same offline model as XTEINK/TXT). Needs `ebooklib` via `pip install 'rollup[epub]'`. | Single-file formats (`txt`, `json`, `epub`) share the core digest stem and only change the extension. XTEINK uses a `.xteink` variant so it does not collide with the core digest `.md`. ## Third-party writers Packages can register additional writers via the `rollup.output_writers` entry point group (see README).