No description
Find a file
Shriram Balaji 72eebbfd15 refactor(tui): modularize AppState
* use enums for sort direction
2025-10-04 17:27:58 +05:30
.github update readme 2025-10-03 13:41:34 +05:30
crates refactor(tui): modularize AppState 2025-10-04 17:27:58 +05:30
docs docs: update readme; add demo 2025-10-03 03:07:43 +05:30
src chore: add doc comments; remove all unwrap 2025-10-04 16:12:29 +05:30
.gitignore docs: add logo 2024-08-22 01:20:50 +05:30
Cargo.lock chore: release 0.1.1 2025-10-03 12:18:42 +05:30
Cargo.toml add metrics crate; integrate tui to cli 2025-10-02 02:18:49 +05:30
Readme.md docs: update description 2025-10-03 13:50:08 +05:30
release.toml chore: update release config 2025-10-03 12:21:21 +05:30



a tiny workbench for parsing, visualizing & analyzing linker map files.

🗺️🔍 Analyze .map files interactively with a TUI, export metrics to JSON/CSV for CI pipelines, and quickly identify bloated sections and symbols.

Demo

Quickstart

Install linkerland with cargo:

cargo install linkerland

After the installation, you're all set! Let's dive into your linker map:

linkerland path/to/app.map

# or explicitly:
linkerland viz path/to/app.map

Note

Currently supports macOS (Mach-O) linker map files only. Linux (ELF) support is coming soon.

Features

Interactive TUI (viz)

Explore your linker map file with a terminal user interface featuring:

  • Object table: Browse all object files with their TEXT, DATA, BSS, and TOTAL sizes.
  • Symbol table: Drill down into symbols for the selected object, categorized by bucket (TEXT/DATA/BSS/OTHER).
  • Filtering: Press / to search/filter objects or symbols by name.
  • Sorting: Press s to cycle through sort keys (Total, Text, Data, Bss, Path for objects; Size, Address, Name for symbols).
  • Units toggle: Press u to switch between human-readable (KiB, MiB) and hex (0x...) formats.
  • Navigation: Arrow keys to move, Tab to switch panes, r to reverse sort order.

See Keybindings for full reference.

Export Metrics

Export your linker map analysis to structured formats for scripting, CI, or further processing:

linkerland export path/to/app.map --format json --out analysis.json
linkerland export path/to/app.map --format csv --out analysis.csv

Ideal for tracking binary size growth over time, alerting on regressions, or integrating into build dashboards.

Installation

From crates.io

cargo install linkerland

From source

git clone https://github.com/shrirambalaji/linkerland.git
cd linkerland
cargo install --path .

Usage

Commands

# Launch interactive TUI (default if .map provided)
linkerland <path-to-map>
linkerland viz <path-to-map>

# Export to JSON
linkerland export <path-to-map> --format json --out output.json

# Export to CSV
linkerland export <path-to-map> --format csv --out output.csv

Keybindings

Key Action
/ Navigate up/down in active pane
Tab Switch between Objects and Symbols panes
/ Start filter (type to filter, Backspace to edit)
s Cycle sort key (Total → Text → Data → Bss → Path or Size → Address → Name)
r Reverse sort order
u Toggle display units (human ↔ hex)
? Show help overlay
q Quit
Esc Close help overlay

Architecture

linkerland has the following crates:

  • parser: Winnow-based parser for .map files; handles sections, symbols, addresses, sizes.
  • metrics: Aggregates parsed data into per-object and per-symbol metrics; classifies sections into buckets (TEXT/DATA/BSS/OTHER).
  • cli: Clap-based CLI with viz and export subcommands.
  • tui: Ratatui-based interactive terminal interface with filtering, sorting, scrolling, and unit toggling.

License

Licensed under either of Apache License Version 2.0 or The MIT License at your option.

Copyright © 2025, Shriram Balaji