Noble PDF v0.1.0
100% Rust-Native โ€ข Zero GUI Dependencies โ€ข Linux Optimized

High-Performance Terminal & CLI PDF Swiss Army Knife

A lightning-fast, keyboard-driven dual-pane TUI viewer and POSIX-compliant CLI processor for Linux. Merge, split, extract, rotate, OCR, and inspect PDFs in under 10 milliseconds.

Install from GitHub
$ curl -fsSL https://raw.githubusercontent.com/MI-Syafaudin/noble-pdf-reader/master/install.sh | bash
Fast install:
< 10ms
Cold Start Execution
0 MB
X11 / Wayland GUI Bloat
24-bit
TrueColor Half-Block
0 - 7
POSIX Exit Codes
terminal@archlinux: noble-pdf open rust_spec.pdf
Noble PDF Reader | rust_spec.pdf WAL STORED
Page: 3/14 Zoom: 100% Press '?' for help
VISUAL HALF-BLOCK RASTER 24-BIT TRUECOLOR
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ THE RUST PROGRAMMING LANGUAGE โ”‚
โ”‚ Chapter 4: Understanding Ownership โ”‚
โ”‚ โ”‚
โ”‚ โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„โ–„ โ”‚
โ”‚ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ”‚
โ”‚ โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€โ–€ โ”‚
โ”‚ โ”‚
โ”‚ โ€ข Each value in Rust has an owner โ”‚
โ”‚ โ€ข There can only be one owner โ”‚
โ”‚ โ€ข When owner goes out of scope, โ”‚
โ”‚ the value will be dropped. โ”‚
โ”‚ โ”‚
โ”‚ [LRU Cache Hit: 4.2 MB / 128 MB] โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
DPI: 150 Pdfium & lopdf Engine
TEXT STREAM / IN-DOCUMENT SEARCH
/ search: "memory safety"

// Page 3 Content extracted via lopdf text stream:

01| Ownership is Rust's most unique feature and has deep implications.

02| It enables Rust to make memory safety guarantees without

03| needing a garbage collector. Understanding ownership requires

04| taking time to grasp the stack and heap allocation models.

05| In systems programming, memory leaks and double-free bugs are fatal.

06| Noble PDF Reader applies these exact principles to handle huge docs.

07| [Match 1 of 3 found on page 3] <Press 'n' for next>

Interactive Controls:
Status: Ready โ€ข SQLite WAL enabled (~/.local/share/pdfx/pdfx.db) Dual-pane Ratatui + Crossterm 0.28

Architected on premier Rust systems libraries & open-source standards

โ— Ratatui (TUI)
โ— lopdf (Rust PDF)
โ— Google PDFium
โ— SQLite WAL
โ— Tesseract OCR
โ— Clap v4
Engine Capabilities

Everything You Need to Command PDFs

No browser bloat. No electron containers. A standalone native tool crafted with zero compromises in memory safety, throughput, and ergonomics.

๐Ÿ”€

Dual-Mode Architecture

Interactive terminal reader with dual panes when you need to visually read and search documents; scriptable POSIX CLI when automating batch operations.

$ noble-pdf open doc.pdf
$ noble-pdf merge *.pdf -o all.pdf
โšก

Pure-Rust lopdf Engine

Direct object graph navigation, compression, rotation, deletion, and cross-reference table rebuilds with zero external C++ runtime dependencies.

โ€ข Instant execution <10ms
โ€ข Memory-safe parser
๐ŸŽจ

TrueColor Half-Block

High-fidelity vector-to-bitmap rasterization using 24-bit TrueColor upper/lower half-block (โ–€) ANSI characters. Visual rendering right in your console.

โ€ข Dynamic PDFium fallback
โ€ข Works in Kitty, Alacritty, Foot
๐Ÿ‘๏ธ

Async Tesseract OCR

Background workers convert scanned images into searchable sandwich PDFs or raw text streams. Features binarization filters and cancellation tokens.

โ€ข Multi-lang: eng, ind, fra, etc.
โ€ข Lock-free crossbeam channels
๐Ÿ›ก๏ธ

Atomic File Safety

All writes stage to unique hidden temporary files before atomic filesystem rename. Guaranteed zero corrupted PDFs even if interrupted by SIGINT or power loss.

โ€ข tempfile + persist guarantees
โ€ข Zero half-written outputs
๐Ÿ’พ

SQLite WAL Persistence

Embedded transactional SQLite storage saves your bookmarks, reading positions, search histories, and recent files under ~/.local/share/pdfx/.

โ€ข Strict LRU memory bounds
โ€ข Instant bookmark restore
Developer Tool

Interactive CLI Command Builder

Configure operations visually and preview the exact shell command, flags, and simulated POSIX output.

GENERATED COMMAND Ready to execute
noble-pdf merge file1.pdf file2.pdf -o merged.pdf
Live Shell Simulation
Exit Code: 0 (SUCCESS)
$ noble-pdf merge file1.pdf file2.pdf -o merged.pdf
[INFO] Parsed 2 input documents. Total source pages: 48
[INFO] Rebuilding XREF table and streams...
โœ“ Successfully merged 48 pages into 'merged.pdf' (11.4ms)
Process exited with code 0. Staged file committed safely.
Modular Monorepo

Engineered for Clean Separation

Noble PDF Reader is split into 6 focused Rust crates with zero circular dependencies, strict memory caches, and isolated subsystems.

Unified Binary & CLI Alias
noble-pdf / pdfx
crates/pdfx-cli โ€ข Clap v4 โ€ข Dynamic Subcommands โ€ข JSON Dispatch
pdfx-tui UI Crate

Dual-Pane Terminal Viewer

Powered by Ratatui & Crossterm. Renders TrueColor half-blocks, handles asynchronous keyboard loops, fuzzy file pickers, and live search highlight markers.

pdfx-engine Core Crate

Structural & Render Core

Pure-Rust lopdf object graph manipulator. Merges, splits, extracts, rotates, and deletes pages with atomic staging (tempfile) and dynamic PDFium rasterization.

pdfx-ocr Worker Crate

Asynchronous OCR Pipeline

Background Tesseract engine runner with Otsu binarization, multi-language detection (eng+ind), cancellation channels, and sandwich PDF creation.

pdfx-storage Persistence

SQLite & LRU Page Cache

Stores bookmarks, recent files, reading coordinates, and task history in SQLite with WAL mode (~/.local/share/pdfx/pdfx.db) with strict memory bounds.

pdfx-core Foundations

Domain Types & POSIX Rules

Zero-dependency domain models, page range parser ("1-3,5,10-15"), custom Error hierarchies with ThisError, and deterministic POSIX exit codes (0-7).

Ergonomics

Vim-Inspired Keybindings

Navigate huge documents without your hands ever leaving the home row.

/
Keybinding Action Scope Behavior
j or โ†“ Scroll Down Text Pane / List Scrolls active text viewport downward one line
k or โ†‘ Scroll Up Text Pane / List Scrolls active text viewport upward one line
h / l Previous / Next Page Global Reader Navigates to consecutive document pages instantly
Space / Shift+Space Page Jump (PgDn / PgUp) Global Reader Fast scrolling across multi-page chunks
/ In-Document Search Interactive Prompt Opens search prompt; live highlights matches in yellow
n / N Next / Previous Match Search Mode Cycles focus across document search hits
g Jump to Page Dialog Modal Dialog Prompts for page index and jumps with validation
b Toggle Bookmark Persistence Saves/removes current page in SQLite database
f Fuzzy File Picker Navigation Interactive directory browser to select another PDF
i Document Info Modal Metadata Displays encryption, author, version, and page sizes
? Help & Credits Overlay Renders full cheatsheet and project credits modal
Esc / q Dismiss / Quit Application Closes dialog or cleanly exits raw terminal mode
Deterministic Pipeline Integration

POSIX Standard Exit Codes

Never guess whether a PDF operation succeeded, failed due to bad input ranges, encountered an encrypted stream, or timed out.

Noble PDF Reader returns deterministic process exit codes from 0 to 7, matching POSIX standards and making bash conditional pipelines robust.

BASH ERROR-HANDLING PATTERN
noble-pdf merge in1.pdf in2.pdf -o out.pdf
case $? in
  0) echo "Merge succeeded!" ;;
  2) echo "Error: Invalid argument or range" ;;
  3) echo "Error: Input file missing/unreadable" ;;
  5) echo "Error: Encrypted or corrupted PDF" ;;
  *) echo "Error: Other failure occurred" ;;
esac
Code Constant Meaning & Trigger
0 SUCCESS Operation completed successfully without issues
1 GENERAL_ERROR Unclassified runtime or unexpected system failure
2 INVALID_ARGS Malformed page range (e.g. 5-2), missing flag, or bad option
3 INPUT_ERROR File not found, permission denied, or unreadable source file
4 OUTPUT_ERROR Destination unwritable, disk full, or rename collision
5 PDF_ERROR Corrupted, password-protected, or unparseable PDF stream
6 OCR_ERROR Tesseract missing, language pack absent, or OCR timeout
7 CANCELLED Process cleanly aborted by SIGINT (Ctrl+C) signal
GitHub Exclusive Distribution

Install via GitHub

Noble PDF Reader is distributed directly and exclusively through GitHub. Zero external repositories or third-party AUR accounts required. Choose your Linux distribution below:

Universal 1-Liner: Automatically detects your distro, downloads release binaries from GitHub (or compiles with Cargo), sets up shell autocompletion and manpages.

Run the official automated GitHub installer directly in your terminal:

curl -fsSL https://raw.githubusercontent.com/MI-Syafaudin/noble-pdf-reader/master/install.sh | bash

Or using wget:

wget -qO- https://raw.githubusercontent.com/MI-Syafaudin/noble-pdf-reader/master/install.sh | bash

Optional OCR Engine (Tesseract)

To extract text from scanned documents, install Tesseract from your distribution repository:

Arch Linux sudo pacman -S tesseract tesseract-data-eng
Ubuntu / Debian sudo apt install tesseract-ocr tesseract-ocr-eng
Fedora sudo dnf install tesseract tesseract-langpack-eng
Looking for specific version checksums or release tarballs?
View Releases on GitHub โ†—
Crafted with Precision

Created & Maintained by MI_Syafaudin

Noble PDF Reader is built with love for the Linux terminal ecosystem. Designed to give users sovereign, private, and blazingly fast PDF capabilities without bloated Electron software or cloud upload dependencies.

GitHub: @MI-Syafaudin โ†— Repository โ†— Distributed under Apache-2.0 License
Copied to clipboard!