Skip to content

Releases: conversiontools/ctio

v0.1.1 - preserve original filename on uploads

26 May 01:20

Choose a tag to compare

Fixes

  • Preserve original filename on file uploads. Previously every file uploaded by ctio landed in the api with name="file", which propagated downstream:

    • Worker derived result filenames as file.xml instead of <input-basename>.<ext>
    • Task records and webhook payloads showed "file" for the source name
    • curl -OJ downloads landed as file.xml

    The fix: pass the path string to client.files.upload() when we have one. The SDK already extracts basename(path) correctly for path inputs - we were handing it a stream instead and losing the filename. Only stdin uploads still upload as "file" (no source filename available by design).

Other

  • 5 new unit tests for the upload-input picker (file with path, Windows-style path, stdin, plus defensive cases)
  • 28 tests passing (was 23)

Install

Windows (scoop):

scoop update ctio

If you don't have ctio installed yet, see v0.1.0 install instructions.

macOS / Linux: download the matching binary from this release and replace your existing ctio.

Full Changelog: v0.1.0...v0.1.1

v0.1.0 - first public release

21 May 22:21

Choose a tag to compare

ctio v0.1.0 - first public release

Composable, single-binary CLI for the Conversion Tools API. No Node/Bun runtime required.

What's in this release

  • ctio auth login - paste a token from https://conversiontools.io/profile; supports multiple profiles, multi-region
  • ctio convert -t <type> <input> <output> - run a conversion. Streams stdin/stdout via -, supports --option key=value, --url, --sandbox, --region
  • ctio task <id> - inspect task status, --wait for completion, --download to a file or - (stdout)
  • ctio list - browse 205 converters; filters: --from, --to, --ai, --custom
  • Token resolution: --token > CT_API_TOKEN env > --profile > active profile

Install

Windows

Option 1: scoop (recommended)

scoop bucket add conversiontools https://github.com/conversiontools/scoop-bucket
scoop install ctio

If scoop isn't installed yet, run this first (one time only):

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression

Option 2: manual download

Invoke-WebRequest -Uri https://github.com/conversiontools/ctio/releases/download/v0.1.0/ctio-windows-x64.exe -OutFile ctio.exe

Move ctio.exe to a directory on your PATH, or add the current directory to PATH.

macOS (Apple Silicon)

curl -fL https://github.com/conversiontools/ctio/releases/download/v0.1.0/ctio-darwin-arm64 -o ctio
chmod +x ctio
xattr -d com.apple.quarantine ctio 2>/dev/null || true
sudo mv ctio /usr/local/bin/

macOS (Intel)

curl -fL https://github.com/conversiontools/ctio/releases/download/v0.1.0/ctio-darwin-x64 -o ctio
chmod +x ctio
xattr -d com.apple.quarantine ctio 2>/dev/null || true
sudo mv ctio /usr/local/bin/

Linux

curl -fL https://github.com/conversiontools/ctio/releases/download/v0.1.0/ctio-linux-x64 -o ctio
chmod +x ctio
sudo mv ctio /usr/local/bin/

Quick start

ctio auth login
ctio convert -t json_to_excel data.json out.xlsx
cat data.json | ctio convert -t json_to_excel - out.xlsx
ctio task list --status ERROR --limit 10

Known limits

  • macOS binaries are unsigned - first launch will trigger Gatekeeper. The xattr -d com.apple.quarantine line in the install command above clears that. If you skip it, right-click → Open the first time.
  • Homebrew tap (brew install conversiontools/tap/ctio) coming in v0.2
  • parse and detect verbs coming in v0.2