commonmeta-rs
commonmeta-rs is a Rust library to implement Commonmeta, the common Metadata Model for Scholarly Metadata. Use commonmeta to convert scholarly metadata in a variety of formats, listed below. Commonmeta-rs is work in progress, the first release was on June 17, 2026. Implementations in other languages are also available (Go, Python, Ruby).
Supported Metadata Formats
Commonmeta-rs reads and/or writes these metadata formats:
| Format | Name | Content Type | Read | Write |
|---|---|---|---|---|
| Commonmeta | commonmeta | application/vnd.commonmeta+json | yes | yes |
| CrossRef XML | crossref_xml | application/vnd.crossref.unixref+xml | yes | yes |
| Crossref | crossref | application/vnd.crossref+json | yes | yes |
| DataCite | datacite | application/vnd.datacite.datacite+json | yes | yes |
| DataCite XML | datacite_xml | application/vnd.datacite.datacite+xml | yes | no |
| Schema.org (in JSON-LD) | schema_org | application/vnd.schemaorg.ld+json | yes | yes |
| RDF XML | rdf_xml | application/rdf+xml | no | later |
| RDF Turtle | turtle | text/turtle | no | later |
| CSL-JSON | csl | application/vnd.citationstyles.csl+json | yes | yes |
| Formatted text citation | citation | text/x-bibliography | n/a | yes |
| Codemeta | codemeta | application/vnd.codemeta.ld+json | yes | later |
| Citation File Format (CFF) | cff | application/vnd.cff+yaml | yes | later |
| JATS | jats | application/vnd.jats+xml | later | later |
| CSV | csv | text/csv | no | later |
| BibTex | bibtex | application/x-bibtex | yes | yes |
| RIS | ris | application/x-research-info-systems | yes | yes |
| InvenioRDM | inveniordm | application/vnd.inveniordm.v1+json | yes | yes |
| JSON Feed | jsonfeed | application/feed+json | yes | later |
| OpenAlex | openalex | n/a | yes | no |
commonmeta: the Commonmeta format is the native format for the library and used internally. Later: we plan to implement this format in a later release.
Build & run
The commonmeta binary has seven subcommands: convert, encode, decode, list, push, put, and match.
# Encode/decode a Crockford base32 identifier suffix
# Convert a single record between formats, fetching it by DOI
# Convert a local file and write the result to disk
# Render a formatted citation (CSL style + locale)
# Fetch a batch of records from an API and write them as a commonmeta JSON array
# Read metadata from a local VRAIX SQLite file
# Parquet output (.parquet file extension, --to commonmeta only): records are split into batches of 100,000, written in parallel, and zstd-compressed
# Register records with a live InvenioRDM instance (creates/updates and publishes
# real records — registration is currently only supported with --to inveniordm)
# Same as push, but for a single record (DOI, URL, or file path)
# Match a free-text affiliation string to a ROR organization
Use cargo run -- <subcommand> --help for the full list of options for each subcommand.
Documentation
Documentation (work in progress) for using the library is available at the commonmeta-rs Documentation website.
Meta
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.
License: MIT