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).

Install
Univert ships as two crates:
univert— library andunivertCLIunivert-gui— desktop app, depends on theunivertlibrary
Install either from crates.io:
Or from a local checkout:
Usage
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:
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):
coffee↔js,styl→css,html→jadejpeg2000encoding,svg→eps/ps,mp3→png,stl→gcode/png
Run univert --list for the complete registry.
Development
With Nix flakes:
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.
History
Univert was originally written in JavaScript.
The legacy implementation lives under ./javascript/.