Skip to content

Releases

mapterm 0.1.2

Choose a tag to compare

@github-actions github-actions released this 01 Nov 20:50
v0.1.2
5c93a3f

Cleaner rivers in the built-in style, and label-free snapshots.

Added

  • --no-labels starts the viewer with labels and symbols hidden, as if n had been
    pressed (n shows them). With --snapshot it prints a frame of map lines and fills
    only, e.g. for images: labels otherwise take cells where the map would be drawn.

Changed

  • The built-in style draws rivers in the water color from zoom 11, as MapLibre styles do,
    so a river's centerline disappears into its water polygon instead of showing as a
    stray line down the river, or as a stub where a creek flows into a wider river.
    Streams, canals and ditches stay bright, and rivers stay bright below zoom 11.

Binaries

platform file
Linux, x86-64 (glibc) mapterm-0.1.2-x86_64-unknown-linux-gnu.tar.gz

SHA256SUMS lists every archive's checksum, and SHA256SUMS.sig is the maintainer's SSH
signature of it. The trusted key comes from the signing keys on the maintainer's GitHub
account, not from this repository (fingerprint
SHA256:LiOY0+3e/eOQFeUsG7iMovOBJui3yCAXXHlWz48c4uk). To download and check with
gh:

gh release download v0.1.2 --repo tlpinney/mapterm
gh api users/tlpinney/ssh_signing_keys --jq '.[].key | "tlpinney namespaces=\"mapterm-release\" " + .' > allowed_signers
ssh-keygen -Y verify -f allowed_signers -I tlpinney -n mapterm-release -s SHA256SUMS.sig < SHA256SUMS
shasum -a 256 -c SHA256SUMS --ignore-missing
tar xzf mapterm-0.1.2-*.tar.gz

Or build it with Cargo (Rust 1.89 or newer):

cargo install --git https://github.com/tlpinney/mapterm --tag v0.1.2

macOS: install with Cargo (above) until there are notarized macOS binaries.

mapterm 0.1.1

Choose a tag to compare

@github-actions github-actions released this 01 Nov 09:39
v0.1.1
4d518e5

Security fixes for memory use and API keys.

Security

  • A small vector tile can no longer decode to gigabytes: each feature gets its own copy of
    the dictionary strings it references, so one long string shared by many features (a
    1 MiB tile, 5 KiB gzipped) took 2 GiB. A tile's feature properties are now limited to
    64 MB decoded (mvt::MAX_PROP_BYTES); real tiles stay far below it.
  • API keys no longer follow redirects to other hosts. Requests that carry a key (in a
    header such as maxar-api-key, or in the URL) follow a redirect only to the same scheme,
    host and port; reqwest dropped Authorization on a cross-origin redirect but kept custom
    key headers. No request sends a Referer any more, which carried the previous URL,
    including a key in its query, to the next host.
  • The raster tile store is limited to 512 MB (raster::RASTER_STORE_BUDGET) as well as 256
    tiles: 4096 px tiles that compress to a few hundred KB each could fill about 16 GB.
    Decoding also moves the pixels instead of copying them, halving the peak per tile.

Binaries

platform file
Linux, x86-64 (glibc) mapterm-0.1.1-x86_64-unknown-linux-gnu.tar.gz

SHA256SUMS lists every archive's checksum, and SHA256SUMS.sig is the maintainer's SSH
signature of it. The trusted key comes from the signing keys on the maintainer's GitHub
account, not from this repository (fingerprint
SHA256:LiOY0+3e/eOQFeUsG7iMovOBJui3yCAXXHlWz48c4uk). To download and check with
gh:

gh release download v0.1.1 --repo tlpinney/mapterm
gh api users/tlpinney/ssh_signing_keys --jq '.[].key | "tlpinney namespaces=\"mapterm-release\" " + .' > allowed_signers
ssh-keygen -Y verify -f allowed_signers -I tlpinney -n mapterm-release -s SHA256SUMS.sig < SHA256SUMS
shasum -a 256 -c SHA256SUMS --ignore-missing
tar xzf mapterm-0.1.1-*.tar.gz

Or build it with Cargo (Rust 1.89 or newer):

cargo install --git https://github.com/tlpinney/mapterm --tag v0.1.1

macOS: install with Cargo (above) until there are notarized macOS binaries.

mapterm 0.1.0

Choose a tag to compare

@github-actions github-actions released this 01 Nov 09:50
v0.1.0
a84b405

The first stable-numbered release, so plain Cargo commands find it (they skip
pre-releases):

cargo install mapterm   # the viewer
cargo add mapterm       # the library

Pre-1.0, a minor version (0.2.0) may still change the API. No code changes since
0.1.0-alpha.3; this is also the first version published by the release workflow with
crates.io trusted publishing.

Binaries

platform file
macOS, Apple silicon mapterm-0.1.0-aarch64-apple-darwin.tar.gz
Linux, x86-64 (glibc) mapterm-0.1.0-x86_64-unknown-linux-gnu.tar.gz

SHA256SUMS lists every archive's checksum, and SHA256SUMS.sig is the maintainer's SSH
signature of it. The trusted key comes from the signing keys on the maintainer's GitHub
account, not from this repository (fingerprint
SHA256:LiOY0+3e/eOQFeUsG7iMovOBJui3yCAXXHlWz48c4uk). To download and check with
gh:

gh release download v0.1.0 --repo tlpinney/mapterm
gh api users/tlpinney/ssh_signing_keys --jq '.[].key | "tlpinney namespaces=\"mapterm-release\" " + .' > allowed_signers
ssh-keygen -Y verify -f allowed_signers -I tlpinney -n mapterm-release -s SHA256SUMS.sig < SHA256SUMS
shasum -a 256 -c SHA256SUMS --ignore-missing
tar xzf mapterm-0.1.0-*.tar.gz

Or build it with Cargo (Rust 1.89 or newer):

cargo install --git https://github.com/tlpinney/mapterm --tag v0.1.0

The macOS binary isn't notarized: files downloaded with a browser need
xattr -d com.apple.quarantine mapterm once (gh and curl downloads don't).

mapterm 0.1.0-alpha.3

mapterm 0.1.0-alpha.3 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 01 Nov 09:42
v0.1.0-alpha.3
1104d5c

The first release on crates.io:

cargo install mapterm --version 0.1.0-alpha.3   # the viewer
cargo add mapterm@0.1.0-alpha.3                 # the library

Releases

  • Each version tag also publishes the crate to crates.io once the maintainer approves the
    release workflow's crates-io environment, with crates.io trusted publishing (no
    stored token).

Binaries

platform file
macOS, Apple silicon mapterm-0.1.0-alpha.3-aarch64-apple-darwin.tar.gz
Linux, x86-64 (glibc) mapterm-0.1.0-alpha.3-x86_64-unknown-linux-gnu.tar.gz

SHA256SUMS lists every archive's checksum, and SHA256SUMS.sig is the maintainer's SSH
signature of it. The trusted key comes from the signing keys on the maintainer's GitHub
account, not from this repository (fingerprint
SHA256:LiOY0+3e/eOQFeUsG7iMovOBJui3yCAXXHlWz48c4uk). To download and check with
gh:

gh release download v0.1.0-alpha.3 --repo tlpinney/mapterm
gh api users/tlpinney/ssh_signing_keys --jq '.[].key | "tlpinney namespaces=\"mapterm-release\" " + .' > allowed_signers
ssh-keygen -Y verify -f allowed_signers -I tlpinney -n mapterm-release -s SHA256SUMS.sig < SHA256SUMS
shasum -a 256 -c SHA256SUMS --ignore-missing
tar xzf mapterm-0.1.0-alpha.3-*.tar.gz

Or build it with Cargo (Rust 1.89 or newer):

cargo install --git https://github.com/tlpinney/mapterm --tag v0.1.0-alpha.3

The macOS binary isn't notarized: files downloaded with a browser need
xattr -d com.apple.quarantine mapterm once (gh and curl downloads don't).

mapterm 0.1.0-alpha.2

mapterm 0.1.0-alpha.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 01 Nov 09:31
v0.1.0-alpha.2
d4db223

Hardening from a security review and fuzzing, plus signed release binaries.

Security

  • Control characters in map text (tile labels, style text and glyphs, search results,
    data file properties) no longer reach the terminal, where they could set the clipboard
    or window title; --snapshot exports drop them too.
  • Deeply nested KML, WKT and FlatGeobuf geometry is rejected instead of overflowing the
    stack.
  • A source with a bad zoom range (min above max, or past zoom 30) in a PMTiles header,
    TileJSON or style no longer panics.
  • Raster tiles larger than 4096 pixels a side are refused before decoding, so a small
    image declaring huge dimensions can't take hundreds of megabytes.
  • The docs show header-based API keys as --raster-header 'Name: {key}', keeping the key
    itself out of ps and shell history.
  • A style loaded from a URL can only use web sources: a pmtiles:///path, file path or
    local GeoJSON in it is an error, so a remote style can't make mapterm read local files.
  • A FlatGeobuf file with part ends out of order no longer crashes mapterm, and huge
    feature counts or offsets in FlatGeobuf and PMTiles no longer overflow (found by the new
    fuzz targets in fuzz/).
  • --raster-list-mosaics only follows Planet's next-page links back to
    https://api.planet.com/, since each request carries the key; place search and the
    mosaic list read at most 4 and 16 MB per response.
  • PMTiles directory entries must lie inside their section of the archive, and zero-length
    or wrapping byte ranges are refused before any request.

Releases

  • Signed binaries: each version tag builds mapterm for macOS (Apple silicon) and Linux
    (x86-64) in CI, attached to the GitHub release with SHA256SUMS, which the maintainer
    signs with an SSH key (SHA256SUMS.sig, namespace mapterm-release; trusted keys in
    signing/allowed_signers). The release notes say how to verify, taking the key from
    the signing keys on the maintainer's GitHub account rather than from the repository.

  • Commits and tags are signed with the same key (shown as Verified on GitHub).

  • Install with Cargo from git (not published to crates.io):

    cargo install --git https://github.com/tlpinney/mapterm --tag v0.1.0-alpha.2

Binaries

platform file
macOS, Apple silicon mapterm-0.1.0-alpha.2-aarch64-apple-darwin.tar.gz
Linux, x86-64 (glibc) mapterm-0.1.0-alpha.2-x86_64-unknown-linux-gnu.tar.gz

SHA256SUMS lists every archive's checksum, and SHA256SUMS.sig is the maintainer's SSH
signature of it. The trusted key comes from the signing keys on the maintainer's GitHub
account, not from this repository (fingerprint
SHA256:LiOY0+3e/eOQFeUsG7iMovOBJui3yCAXXHlWz48c4uk). To download and check with
gh:

gh release download v0.1.0-alpha.2 --repo tlpinney/mapterm
gh api users/tlpinney/ssh_signing_keys --jq '.[].key | "tlpinney namespaces=\"mapterm-release\" " + .' > allowed_signers
ssh-keygen -Y verify -f allowed_signers -I tlpinney -n mapterm-release -s SHA256SUMS.sig < SHA256SUMS
shasum -a 256 -c SHA256SUMS --ignore-missing
tar xzf mapterm-0.1.0-alpha.2-*.tar.gz

Or build it with Cargo (Rust 1.89 or newer):

cargo install --git https://github.com/tlpinney/mapterm --tag v0.1.0-alpha.2

The macOS binary isn't notarized: files downloaded with a browser need
xattr -d com.apple.quarantine mapterm once (gh and curl downloads don't).

mapterm 0.1.0-alpha.1

mapterm 0.1.0-alpha.1 Pre-release
Pre-release

Choose a tag to compare

@tlpinney tlpinney released this 01 Nov 06:48

The first alpha, for private testing. Not published to crates.io; install from git:

cargo install --git https://github.com/tlpinney/mapterm --tag v0.1.0-alpha.1

The viewer (mapterm)

  • OpenStreetMap vector tiles in the terminal: braille lines, cell-color fills, labels that
    don't overlap, and MapLibre-style pan and zoom (wheel at the cursor, drag with inertia,
    double-click and box zoom, eased keys).
  • Sources: PMTiles (local or over HTTP range requests), XYZ URLs and TileJSON; OpenFreeMap
    by default, no key needed.
  • A built-in terminal style for the OpenMapTiles and Protomaps schemas (dark and light),
    or any MapLibre style with --style (OpenFreeMap's liberty, positron, bright, dark,
    fiord, a URL or a file); m switches styles, t the theme.
  • Imagery under the map with --raster (OSM, Esri, USGS, EOX, NASA GIBS, and keyed
    providers such as Vantor, Planet, Mapbox and MapTiler), as kitty graphics or cell colors.
  • Your data over the map with --geojson: GeoJSON, CSV with lat/lon or WKT columns, GPX,
    KML and FlatGeobuf, by file or URL; large point sets cluster.
  • Place search with / (Photon or Nominatim), with a flyTo-style flight.
  • Inspect mode (i): every feature under a spot, drawn or not, with its properties,
    size and location; y copies it as JSON.
  • --snapshot prints a frame as text, ANSI color or HTML; --pick prints features as JSON.
  • Experimental pixel-smooth scrolling on the Ghostty smooth-scroll fork (MAPTERM_SMOOTH).

The library

  • Map: named sources (vector tiles, GeoJSON, raster) and ordered style layers
    (background, fill, line, circle, symbol, raster) with MapLibre expressions and filters,
    plus custom layers; drawn as a ratatui widget.
  • MapLibre style JSON loading, and the style properties a terminal can show: colors and
    opacity, line widths and dashes, text fields and fonts, anchors and offsets, labels
    repeated along roads, sort keys, icons as one-cell symbols.
  • query_rendered_features and query_features (drawn or not), layer events and hover
    state (events::Events, feature state), Controller with fly_to and fit_bounds.
  • GeoJSON sources with a spatial index and point clustering; tiles loaded in the
    background with retries; kitty image memory kept within a budget; source attribution.

Binaries

platform file
macOS, Apple silicon mapterm-0.1.0-alpha.1-aarch64-apple-darwin.tar.gz
Linux, x86-64 (glibc) mapterm-0.1.0-alpha.1-x86_64-unknown-linux-gnu.tar.gz

SHA256SUMS lists every archive's checksum, and SHA256SUMS.sig is the maintainer's SSH
signature of it. To download and check (the repository is private, so use gh):

gh release download v0.1.0-alpha.1 --repo tlpinney/mapterm
gh api repos/tlpinney/mapterm/contents/signing/allowed_signers --jq .content | base64 -d > allowed_signers
ssh-keygen -Y verify -f allowed_signers -I tlpinney -n mapterm-release -s SHA256SUMS.sig < SHA256SUMS
shasum -a 256 -c SHA256SUMS --ignore-missing
tar xzf mapterm-0.1.0-alpha.1-*.tar.gz

Or build it with Cargo (CARGO_NET_GIT_FETCH_WITH_CLI lets Cargo use git's credentials for
the private repository; Rust 1.89 or newer):

CARGO_NET_GIT_FETCH_WITH_CLI=true cargo install --git https://github.com/tlpinney/mapterm --tag v0.1.0-alpha.1

The macOS binary isn't notarized: files downloaded with a browser need
xattr -d com.apple.quarantine mapterm once (gh and curl downloads don't).