Skip to content

Release v2.0.0

Latest

Choose a tag to compare

@github-actions github-actions released this 07 Sep 16:51
· 1 commit to master since this release
5294825

SubX is now two crates. subx-cli 2.0.0 is the command-line tool you
already know — its behaviour, flags, configuration keys and JSON output
envelopes are unchanged from 1.9.1. The major version bump is a
library-surface change: the processing engine behind the CLI has been
extracted into subx-core 1.0.0, a standalone library so that programs
— like the SubX GUI — can embed subtitle matching, format conversion,
timeline synchronization and translation directly instead of shelling out.
Each crate is published to crates.io from its own repository's release tag
(subx-core from jim60105/subx-core,
subx-cli from this one), so the library can release on its own cadence for
all of its consumers. subx-core 1.0.0 is already published to crates.io.

Added

  • The subx-core crate. The engine modules keep their familiar paths —
    what was subx_cli::core::matcher::MatchEngine is now
    subx_core::core::matcher::MatchEngine, with only the crate name swapped
    — so adopting the library directly is a crate-name substitution.
    Documentation for the published crate lives on docs.rs.
  • A reporting seam for embedding applications. Every engine, factory,
    file manager, worker pool and AI provider client gained a with_reporter
    builder: an embedding program attaches a reporter and receives status
    messages, warnings, AI token usage and structured progress events
    (started / advanced per item / finished) instead of terminal output.
    Batch operations also honour cooperative cancellation through the
    reporter — an attached UI can stop a running batch cleanly, and a stopped
    batch reports which operations it completed. The CLI's own terminal
    behaviour is unchanged: the same messages on the same streams under the
    same JSON/quiet rules.
  • Thread-safe format handling. The subtitle format types are now safe to
    share across threads, so embedding applications can drive format managers
    and converters from parallel code.
  • A manual-offset timing helper usable without audio analysis.
    subx_core::core::sync::shift_subtitle_timing applies a timing shift to a
    subtitle without constructing the voice-activity-driven sync engine, so a
    caller that only re-offsets timings needs no audio stack.
  • Output-location helpers (the archive-aware default output directory/path
    rules the convert and translate commands use) are public queries on
    collected input, and the component factory exposes the match configuration
    its loaded settings imply plus an engine builder that accepts a
    caller-modified copy of it.
  • A shared test-support feature provides the project's test workspace
    builder and provider-mock helpers to downstream test suites; it is never
    enabled in a shipping dependency.

Changed

  • The 2.0.0 major bump is a library-surface change. subx_cli's
    config / core / error / services modules are now re-exports of the
    subx-core crate; existing use subx_cli::... imports keep compiling
    unchanged, and the twelve configuration test macros and subx_cli::Result
    survive as re-exports. The subx-cli binary's command-line behaviour,
    flags, configuration keys and JSON envelopes are identical to 1.9.1.
  • SubXError::exit_code and SubXError::user_friendly_message are now
    methods of a SubXErrorExt presentation trait
    (use subx_cli::cli::error_ext::SubXErrorExt;); the machine-readable
    category(), machine_code() and hint() stay on the error type itself.
    Error behaviour is unchanged.
  • Building this repository from a git clone now requires the subx-core
    submodule: clone with --recurse-submodules, or run
    git submodule update --init --recursive afterwards.
  • The batch progress bar now shows the parallel job's live status line
    (active / queued / completed counts) that was previously set but never
    rendered.
  • subx-core's default branch is master (renamed from main before
    this release). .gitmodules records branch = master, both repositories'
    CI triggers and submodule-pointer ancestry assertions follow the new name,
    and the Dependabot referent comment and documentation are updated to match.

Fixed

  • --output json no longer writes progress-bar frames to the terminal on
    the parallel match path — JSON mode's stdout stays machine-clean and the
    force-hide rule now covers every progress bar.

Removed

  • Five unused direct dependencies were pruned (led by the notify subtree,
    seven packages in all), shrinking the resolved dependency graph that the
    security audit and every consumer's build carry. hound moved to
    test-only: it no longer links into the release binary.

Migration

  • Users of the binary: none. subx-cli 2.0.0 behaves exactly like
    1.9.1.
  • Library consumers: existing use subx_cli::... imports keep working
    through the compatibility re-exports. New code SHOULD depend on
    subx-core directly (published to crates.io as 1.0.0); the subx-cli
    library facade exists only as re-exports and its removal is a future
    major-version decision.

Documentation

  • The reference documentation — architecture guide, command reference,
    configuration guide, machine-readable-output contract, AI provider guide —
    was refreshed for the two-crate layout, and the specification trees split
    with the crates: openspec/ specifies the CLI, subx-core/openspec/
    specifies the library.