27 releases (14 breaking)

Uses new Rust 2024

new 0.15.0 Aug 1, 2026
0.14.0 Jul 17, 2026
0.13.0 Apr 13, 2026
0.12.0 Mar 12, 2026
0.5.2 Feb 28, 2019

#289 in Encoding

Download history 828/week @ 2026-04-16 801/week @ 2026-04-23 1087/week @ 2026-04-30 4611/week @ 2026-05-07 5053/week @ 2026-05-14 5729/week @ 2026-05-21 4363/week @ 2026-05-28 3859/week @ 2026-06-04 3249/week @ 2026-06-11 1200/week @ 2026-06-18 1255/week @ 2026-06-25 762/week @ 2026-07-02 1158/week @ 2026-07-09 1405/week @ 2026-07-16 1629/week @ 2026-07-23 1383/week @ 2026-07-30

5,704 downloads per month
Used in 11 crates (6 directly)

MIT/Apache

42KB
927 lines

mvt

A Rust library for encoding mapbox vector tiles. Version 2.1 of the standard is supported. See documentation for details.

wyrmcast is a tile server using this crate.


lib.rs:

A library for encoding mapbox vector tiles.

A tile is composed of one or more layers. Each layer can have any number of features, which contain the geometry to be rendered. They can also have metadata tags, which are key/value pairs.

Example

use mvt::{Error, GeomEncoder, GeomType, Tile};
use pointy::Transform;

fn main() -> Result<(), Error> {
    let mut tile = Tile::new(4096);
    let layer = tile.create_layer("First Layer");
    // NOTE: normally, the `Transform` would come from
    //       `squarepeg::MapGrid::transform_peg`
    let b = GeomEncoder::new(GeomType::Linestring)
        .point(0.0, 0.0)?
        .point(1024.0, 0.0)?
        .point(1024.0, 2048.0)?
        .point(2048.0, 2048.0)?
        .point(2048.0, 4096.0)?
        .encode()?;
    let mut feature = layer.into_feature(b);
    feature.set_id(1);
    feature.add_tag_string("key", "value");
    let layer = feature.into_layer();
    tile.add_layer(layer)?;
    let data = tile.to_bytes()?;
    println!("encoded {} bytes: {:?}", data.len(), data);
    Ok(())
}

Dependencies

~1–6.5MB
~145K SLoC