carto is a system package cartographer.
Go to file
Russell be23d887cb Fixed up the readme 2025-07-28 17:07:07 +00:00
src Fixed a bug where the package manager name was hardcoded 2025-07-28 17:05:10 +00:00
.gitignore This works so far 2025-07-28 16:47:52 +00:00
Cargo.lock This works so far 2025-07-28 16:47:52 +00:00
Cargo.toml This works so far 2025-07-28 16:47:52 +00:00
justfile Updated the justfile here 2025-07-28 17:03:01 +00:00
readme.md Fixed up the readme 2025-07-28 17:07:07 +00:00

readme.md

WHERE - Universal System File and Package Mapper

A command-line tool that provides comprehensive observability into your Linux system's package installations and file ownership. Built in Rust for performance and reliability.

Features

  • Universal Package Manager Support - Works with DNF, APT, Flatpak, Snap, and more
  • File Ownership Tracking - Instantly identify which package owns any file
  • Package Tree Visualization - See all files installed by a package in tree format
  • Cross-Distribution Compatibility - Single tool that works across Linux distributions
  • High Performance - Memory-mapped binary format for fast queries

Installation

git clone <repository-url>
cd where
cargo build --release

Usage

Show Package File Tree

Display all files installed by a specific package in a hierarchical tree structure:

# Show files installed by bash package
cargo run -- tree --package bash

# Show files for Flatpak application
cargo run -- tree --package "Signal Desktop (org.signal.Signal)"

# Show trees for first 5 packages (demo mode)
cargo run -- tree

Package Information

Get detailed information about a specific package:

# Show package details and file tree
cargo run -- package bash

File Ownership

Find out which package owns a specific file:

# Check who owns /usr/bin/bash
cargo run -- file /usr/bin/bash

List All Packages

Display all installed packages from all managers:

# List all packages from all managers
cargo run -- packages

# List only DNF packages
cargo run -- packages --source dnf

# List only Flatpak packages  
cargo run -- packages --source flatpak

Find Files

Search for files within packages:

# Find all files in bash package
cargo run -- find --package bash

# Find all files in Flatpak application
cargo run -- find --package "Signal Desktop (org.signal.Signal)"

Example Output

Package Tree

bash 5.2.15-6.fc41
├── usr/
│   ├── bin/
│   │   └── bash
│   └── share/
│       ├── doc/
│       │   └── bash/
│       │       ├── CHANGES
│       │       ├── README
│       │       └── NEWS
│       └── man/
│           └── man1/
│               └── bash.1.gz
└── etc/
    └── skel/
        └── .bashrc

Signal Desktop (org.signal.Signal) 7.63.0
├── /var/lib/flatpak/app/org.signal.Signal/
├── /var/lib/flatpak/exports/share/applications/org.signal.Signal.desktop
└── ~/.var/app/org.signal.Signal/

File Ownership

/usr/bin/bash is owned by package: bash
~/.var/app/org.signal.Signal is owned by package: org.signal.Signal

Package Listing

DNF packages (1,847 total):
  bash 5.2.15-6.fc41
  glibc 2.37-4.fc38
  kernel 6.8.5-301.fc40

Flatpak packages (7 total):
  Zen (app.zen_browser.zen) 1.14.9b
  Signal Desktop (org.signal.Signal) 7.63.0
  GIMP (org.gimp.GIMP) 3.0.4

Architecture

The tool is designed with a modular architecture supporting multiple package managers:

  • Package Manager Abstraction - Common interface for DNF, Flatpak, and future managers
  • Universal File Tracking - Track files across traditional packages and sandboxed applications
  • Source-Aware Filtering - Filter by package manager type (DNF, Flatpak, etc.)
  • Binary Database Format - High-performance storage for file metadata (planned)
  • CLI Interface - Clean command-line interface built with Clap
  • Tree Visualization - Hierarchical display of package contents

Supported Package Managers

  • DNF/RPM (Fedora, RHEL, CentOS) - Full support
  • Flatpak (Universal) - Full support
  • 🚧 APT (Debian, Ubuntu) - Coming Soon
  • 🚧 Snap - Coming Soon
  • 🚧 Pacman (Arch Linux) - Coming Soon

Development Philosophy

This tool is part of the IntentOS project, focused on creating systems where every component has clear provenance and purpose. The core principle is "know where everything is" - eliminating the entropy and "shrapnel" that accumulates in traditional Linux installations.

Contributing

Built with Rust 2021 edition. Key dependencies:

  • clap - Command line argument parsing
  • memmap2 - Memory-mapped file access
  • chrono - Date/time handling

License

[Add your license here]

Roadmap

  • DNF/RPM support with file ownership tracking
  • Flatpak support with sandboxed application tracking
  • Universal package listing with source filtering
  • Package file tree visualization
  • Snap support
  • APT support for Debian/Ubuntu systems
  • Real-time filesystem monitoring
  • Binary database format for fast queries
  • GUI interface
  • Integration with IntentOS package manager
  • Package installation profiles
  • System entropy analysis tools

WHERE gives you complete visibility into your system's package installations - because you should know where everything comes from.