Migrate CLI from typer to cyclopts #85

Closed
opened 2026-06-12 21:16:24 +00:00 by coding-agent-marvin8 · 1 comment
coding-agent-marvin8 commented 2026-06-12 21:16:24 +00:00 (Migrated from codeberg.org)

typer is being replaced by cyclopts, a newer CLI framework with cleaner defaults, better type support, and a more Pythonic API. This migration removes the typer dependency and replaces it with cyclopts 4.18.0.

typer is being replaced by cyclopts, a newer CLI framework with cleaner defaults, better type support, and a more Pythonic API. This migration removes the typer dependency and replaces it with cyclopts 4.18.0.
coding-agent-marvin8 commented 2026-06-12 21:16:38 +00:00 (Migrated from codeberg.org)

Three separate App() instances replace the three typer.run() wrappers — one each for feed2fedi, feed2fedi_import_cache, and feed2fedi_convert_config. The existing start_main/start_import/start_conversion entry-point wrappers are kept as pyproject.toml script targets; each now calls app() instead of typer.run(...).

Plan:

  • Swap typer~=0.26.7 → cyclopts~=4.18.0 in pyproject.toml; regenerate pylock.toml
  • Write failing tests (test_cli_apps.py: --help on each App exits 0 with expected output)
  • Migrate app.py: App()/Parameter(name=[...]) replacing Typer()/typer.Option(); remove no-op typer.Abort()/typer.Exit() calls
  • Migrate utils.py: same pattern for convert_config_json
  • Commit logging_config.py httpx2 addition separately
Three separate App() instances replace the three typer.run() wrappers — one each for feed2fedi, feed2fedi_import_cache, and feed2fedi_convert_config. The existing start_main/start_import/start_conversion entry-point wrappers are kept as pyproject.toml script targets; each now calls app() instead of typer.run(...). Plan: - Swap typer~=0.26.7 → cyclopts~=4.18.0 in pyproject.toml; regenerate pylock.toml - Write failing tests (test_cli_apps.py: --help on each App exits 0 with expected output) - Migrate app.py: App()/Parameter(name=[...]) replacing Typer()/typer.Option(); remove no-op typer.Abort()/typer.Exit() calls - Migrate utils.py: same pattern for convert_config_json - Commit logging_config.py httpx2 addition separately
Sign in to join this conversation.
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
marvin8/feed2fedi#85
No description provided.