Repository navigation
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-corecrate. The engine modules keep their familiar paths —
what wassubx_cli::core::matcher::MatchEngineis 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 awith_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_timingapplies 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-supportfeature 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/servicesmodules are now re-exports of the
subx-corecrate; existinguse subx_cli::...imports keep compiling
unchanged, and the twelve configuration test macros andsubx_cli::Result
survive as re-exports. Thesubx-clibinary's command-line behaviour,
flags, configuration keys and JSON envelopes are identical to 1.9.1. SubXError::exit_codeandSubXError::user_friendly_messageare now
methods of aSubXErrorExtpresentation trait
(use subx_cli::cli::error_ext::SubXErrorExt;); the machine-readable
category(),machine_code()andhint()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 --recursiveafterwards. - 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 ismaster(renamed frommainbefore
this release)..gitmodulesrecordsbranch = 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 jsonno 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
notifysubtree,
seven packages in all), shrinking the resolved dependency graph that the
security audit and every consumer's build carry.houndmoved to
test-only: it no longer links into the release binary.
Migration
- Users of the binary: none.
subx-cli2.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-coredirectly (published to crates.io as 1.0.0); thesubx-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.