A modern Electronic Flight Bag (EFB) style chart viewer for aviation charts.
- ๐ Chart Management: Browse charts by airport and category
- ๐ซ Multi-Airport Support: Easy switching between different airports
- ๐ Smart Categorization: Charts organized by type (STAR, APP, TAXI, SID, OTHER, ็ปๅ)
- ๐ PDF Viewer: Built-in PDF viewer with zoom and navigation controls
- โ๏ธ Configurable Directories: Web-based interface to select charts and CSV directories
- ๐จ Modern UI: Clean, professional EFB-style interface
- ๐ Fast Performance: Next.js powered for optimal speed
- STAR: Standard Terminal Arrival Routes (ๆ ๅไปช่กจ่ฟๅบๅพ)
- APP: Approach Procedures (ไปช่กจ่ฟ่ฟๅพ)
- TAXI: Airport Taxi Charts (ๆบๅบๅพ_ๅๆบไฝ็ฝฎๅพ)
- SID: Standard Instrument Departures (ๆ ๅไปช่กจ็ฆปๅบๅพ)
- OTHER: Other charts (ๅ ถไป, ๆบๅบ้็ข็ฉๅพ็ญ)
- ็ปๅ: Airport Regulations (ๆบๅบ็ปๅ)
- Node.js 18+
- npm or yarn
# Install dependencies
npm install
# Generate application icons
npm run generate-icons
npm run dev
Open http://localhost:3000 in your browser.
npm run electron:dev
This will start the Next.js dev server and launch the desktop application with native system dialogs for directory selection.
The application uses charts/
and csv/
directories by default. To use different directories:
- Click the Settings icon (โ๏ธ) in the sidebar
- Use the Browse button to:
- Desktop Mode: Opens native system file picker (Finder on macOS)
- Web Mode: Use web-based directory browser
- Enter paths (relative to project root or absolute paths):
- Charts Directory: Directory containing PDF chart files
- CSV Directory: Directory containing
Charts.csv
file
- Click Save Changes
Configuration is saved to config.json
in the project root.
npm run build
npm start
# Build for macOS
npm run electron:build:mac
# Build for Windows
npm run electron:build:win
# Build for Linux
npm run electron:build:linux
Built applications will be in the dist/
directory.
The project includes GitHub Actions workflows for automated cross-platform builds:
Creating a Release:
# Interactive release tool
npm run release
# Or manually create a tag
npm version patch # or minor, major
git push --tags
Build Triggers:
- Stable releases: Push tags like
v1.0.0
โ Creates GitHub Release with installers - Pre-releases: Push tags like
v1.0.0-beta.1
โ Creates pre-release - Manual: Trigger builds from GitHub Actions tab
- Pull Requests: Automatic build verification (no release)
Supported Platforms:
- macOS: DMG installer + ZIP archive
- Windows: NSIS installer + Portable executable
- Linux: AppImage + DEB package
Download Options:
- Artifacts available in GitHub Actions (7-14 days)
- Releases published at:
https://github.com/6639835/chart-viewer/releases
For detailed release documentation, see .github/workflows/README.md
.
Since the application is not code-signed with an Apple Developer certificate, macOS Gatekeeper may block it from running. After installing the DMG, run this command in Terminal to remove the quarantine attribute:
xattr -cr "/Applications/Chart Viewer.app"
Alternative methods:
- Right-click method: Right-click the app โ Open โ Click "Open" in the security dialog
- System Settings: Go to System Settings โ Privacy & Security โ Allow the app to run
Note: This is only required for the first launch. The command removes the quarantine flag that macOS applies to downloaded applications.
chart-viewer/
โโโ app/ # Next.js app directory
โ โโโ api/ # API routes
โ โ โโโ charts/ # Chart data API
โ โ โโโ pdf/ # PDF serving API
โ โ โโโ config/ # Configuration API
โ โ โโโ browse/ # Directory browsing API
โ โโโ globals.css # Global styles
โ โโโ layout.tsx # Root layout
โ โโโ page.tsx # Home page
โโโ components/ # React components
โ โโโ Sidebar.tsx # Airport & category navigation
โ โโโ ChartList.tsx # Chart list display
โ โโโ PDFViewer.tsx # PDF viewer component
โ โโโ SettingsModal.tsx # Settings configuration
โโโ electron/ # Electron application
โ โโโ main.js # Main process (app lifecycle)
โ โโโ preload.js # Preload script (IPC bridge)
โโโ lib/ # Utility functions
โ โโโ chartParser.ts # CSV parsing logic
โ โโโ configManager.ts # Configuration management
โโโ types/ # TypeScript types
โ โโโ chart.ts # Chart data types
โ โโโ config.ts # Configuration types
โ โโโ electron.d.ts # Electron API types
โโโ csv/ # CSV data files
โ โโโ Charts.csv # Chart metadata
โโโ charts/ # PDF files
โ โโโ *.pdf # Chart PDFs
โโโ config.json # User configuration (generated)
The application reads chart metadata from csv/Charts.csv
with the following structure:
AirportIcao
: Airport ICAO code (e.g., ZBAA)ChartTypeEx_CH
: Chart type in ChinesePAGE_NUMBER
: Page identifier used in PDF filename- Other metadata fields
The application automatically detects and supports two directory formats for chart PDFs:
charts/
โโโ ZBAA-AD2-ZBAA-1-1.pdf
โโโ ZBAA-AD2-ZBAA-1-2.pdf
โโโ ZSSS-AD2-ZSSS-1-1.pdf
โโโ ๆบๅบ็ปๅ.pdf
charts/
โโโ ZBAA/
โ โโโ ZBAA-AD2-ZBAA-1-1.pdf
โ โโโ ZBAA-AD2-ZBAA-1-2.pdf
โ โโโ ZBAA-AD2-ZBAA-1-3.pdf
โโโ ZSSS/
โ โโโ ZSSS-AD2-ZSSS-1-1.pdf
โ โโโ ZSSS-AD2-ZSSS-1-2.pdf
โโโ ๆบๅบ็ปๅ.pdf
Note: The system will automatically try the nested format first (checking {ICAO}/filename
), then fall back to the flat format if the file is not found. No configuration needed!
- Next.js 14: React framework with App Router
- TypeScript: Type-safe development
- Tailwind CSS: Utility-first styling
- React-PDF: PDF rendering
- PapaParse: CSV parsing
- Lucide React: Icon library
Contributions are welcome! Please feel free to submit a Pull Request.
MIT License - see LICENSE file for details
Copyright (c) 2025 Justin
Made with โค๏ธ for aviation enthusiasts