v0.2.1 · Rust 2024 · macOS · Linux · Windows

The universal
file converter.

One desktop app. 40+ file formats. Drop a file in, pick an output format, get a converted file out. Fully offline. No accounts. No uploads.

40+formats
26inputs
34outputs
0uploads
Screenshot of the Univert desktop app
PNG → AVIF
CSV → JSON
SVG → PDF
EPUB → MD
Why Univert

Built for the way you actually convert files.

No web upload spinners. No SaaS sign-ups. No 12 different tools, each for one format. Just a small native app that does the job.

Pure-Rust core

Conversions happen inside a single Rust binary. External tools only get involved when there is no Rust equivalent.

100% offline

Your files never leave your machine. No telemetry, no analytics, no third-party servers in the loop.

Drop, convert, done

The desktop app gets out of your way: pick a file, pick a target format, click convert. Three controls, zero ceremony.

CLI included

Same library powers a univert CLI — script batch jobs, drop it in CI, pipe it into Make.

One tool for all docs

Documents, spreadsheets, images, 3D meshes, audio, music notation, PDFs — the same workflow handles every format.

AGPL, no lock-in

Source on GitHub, AGPL-3.0 licensed. Inspect it, fork it, audit it, embed it in your own pipeline.

Supported formats

Most conversions are pure Rust. Some shell out to best-in-class tools.

If a Rust crate can do it well, Univert does it directly. For LilyPond engraving, OpenSCAD modeling, FFmpeg audio, or FluidSynth synthesis, Univert invokes the binary you already trust.

Pure Rust

no dependencies
  • Structured datajson ⇄ yaml ⇄ toml ⇄ json5 ⇄ xml ⇄ ini ⇄ jsonl ⇄ cbor ⇄ plist
  • Tabularcsv ⇄ tsv → html, json, jsonl, json5, yaml, toml, xml
  • Spreadsheetsxlsx, ods → csv, tsv, json, json5, yaml
  • Big dataparquet → csv, tsv, json, jsonl, json5, yaml
  • Contacts & calendarvcf, ics → json, csv, yaml, …
  • Documentsmd ⇄ html ⇄ txt, rtf → html / md / txt
  • E-booksepub → html, md, txt
  • PDFpdf → txt, md · html → pdf (via Typst)
  • Imagespng, jpeg, webp, gif, bmp, tif, tga, ico, qoi, exr, hdr, dds, ff, pnm, jp2, psd → each other & avif
  • Vector / typesettingsvg → png, pdf · typ → pdf, png, svg, html
  • 3D meshesstl ⇄ obj
  • Audioflac, ogg, mp3 ⇄ wav

Shell-out

when installed
  • Music notationabc, ly → midi, pdf, png, ps, svgvia lilypond + abc2ly
  • 3D / CADscad → csg, off, png, stlvia openscad
  • Audio encodingwav → aac, mp3, flac, oggvia ffmpeg
  • MIDI rendermidi → wavvia fluidsynth + a SoundFont
  • JPEG 2000any image → jp2via opj_compress
  • HEIC photosheic → any imageheif-convert / magick / sips
  • PDF rasterpdf → pngvia pdftoppm or magick

Run univert --list in your shell for the complete, up-to-date registry.

Get it

Install in one command.

Univert ships as two crates on crates.io. Pick the GUI for the desktop app (which includes the library) or the CLI on its own.

Desktop app

recommended

Drag-and-drop GUI. Pulls in the conversion library automatically.

$ cargo install univert-gui

Launch with univert-gui.

CLI only

scriptable

For batch jobs, CI pipelines and shell scripts.

$ cargo install univert

Then: univert input.csv output.json

A few real conversions

$ 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

Stop hunting for a converter every time.

One app, every common format, your files stay on your machine.