univert-gui 0.2.0

Desktop GUI for the Univert universal file converter
univert-gui-0.2.0 is not a library.

Univert

The universal file converter — a single CLI that converts between 27 file formats, preferring pure-Rust libraries and shelling out only for tools with no Rust equivalent (LilyPond, OpenSCAD, FFmpeg, FluidSynth).

Screenshot of Univert desktop app

Install

Univert ships as two crates:

  • univert — library and univert CLI
  • univert-gui — desktop app, depends on the univert library

Install either from crates.io:

cargo install univert          # CLI only
cargo install univert-gui      # desktop app (pulls in the CLI's library)

Or from a local checkout:

cargo install --path crates/univert
cargo install --path crates/univert-gui

Usage

univert <input-file> <output-file> [OPTIONS]

Flags:

  • -f, --force — overwrite existing output
  • -l, --list — print every supported conversion and exit
  • -s, --split — split source file into several target files (csv/tsv → json)
  • -h, --help, -V, --version

Examples:

univert notes.json notes.yaml
univert contacts.vcf contacts.json
univert logo.svg logo.png
univert song.abc song.midi          # requires lilypond + abc2ly
univert part.scad part.stl          # requires openscad
univert track.wav track.aac         # requires ffmpeg

Supported conversions

Pure-Rust (no external tool required):

From To
json, yaml, json5 each other (round-trip)
csv, tsv html, json, json5, yaml, and each other
vcf json, json5, yaml
html md
bmp, gif, ico, jpeg, png, tga, tif each other
psd, jp2 bmp, gif, ico, jpeg, png, tga, tif
svg png, pdf
stl obj

Shell-out to external tools when available:

From To Required binary
abc, ly midi, pdf, png, ps, svg lilypond, abc2ly
scad csg, off, png, stl openscad
wav aac, mp3 ffmpeg
midi wav fluidsynth + a SoundFont

Stubs (registered but not yet implemented):

  • coffeejs, stylcss, htmljade
  • jpeg2000 encoding, svgeps/ps, mp3png, stlgcode/png

Run univert --list for the complete registry.

Development

With Nix flakes:

nix develop

Without Nix, you'll need cargo, pkg-config, and openjpeg development headers (for the jpeg2k crate). Optional runtime tools — lilypond, openscad, inkscape, ffmpeg, fluidsynth — are only needed for conversions that use them.

make test       # runs cargo tests with SOURCE_DATE_EPOCH=0
make format     # clippy + rustfmt
make run        # run the CLI (cargo run -p univert)
make gui        # run the desktop app (cargo run -p univert-gui)

History

Univert was originally written in JavaScript. The legacy implementation lives under ./javascript/.