A comprehensive offline-first FFXIV companion tool with complete item, gathering, crafting, and collectibles databases. Features terminal CLI and mobile web interface.
- 50,000+ Items: Full item database with sources and uses
- 10,000+ Recipes: Complete crafting guide for all Disciples of the Hand
- Gathering System: Mining and Botany node tracking (similar to fishing)
- 400+ Mounts: Track your mount collection with acquisition guides
- 700+ Minions: Complete companion collection tracking
- 400+ Orchestrion Rolls: Music collection with sources
- Comprehensive Search: Find any item by name, level, rarity, or category
- Source Tracking: See where to get items (crafting, gathering, quests, vendors, dungeons)
- Use Tracking: See what items are used for (recipes, quests, etc.)
- Cross-References: Links to recipes, gathering nodes, and quest rewards
- Complete Guides: One command shows everything about an item
- Mining & Botany: Track gathering nodes similar to fishing system
- Timed Nodes: Support for ephemeral/timed gathering points
- Recipe Lookup: Search recipes by craft type, item, or ingredient
- Material Trees: See all materials needed including sub-crafts
- Crafting Guides: Complete breakdown with requirements and costs
- Progress Tracking: Track gathered items and crafted recipes per character
- Mount Collection: Track flying, aquatic, and multi-seat mounts
- Minion Collection: Battle and non-battle companion tracking
- Orchestrion Collection: Music rolls organized by category
- Acquisition Guides: Detailed how-to-obtain for each collectible
- Collection Stats: Visual progress bars and completion percentages
- Quest Tracking: Search quests by name or level with detailed objectives
- Fish Tracking: Track fish availability, time windows, and catch requirements
- Quest Objectives: View fish, NPC, item, and enemy objectives with full details
- Character Lookup: Check character information via Lodestone
- Eorzean Time: Real-time Eorzean time calculation for time-sensitive activities
- 100% Offline: All game data stored locally in SQLite databases
- Character Profiles: Multi-character support with progress tracking
- Quest Completion: Mark quests complete with notes
- Fish Catches: Log fish with location and timestamp
- Progress Stats: Visual progress bars and completion percentages
- Job Tracking: Sync job levels from Lodestone
- Session History: Track your play sessions
- 810 Titles: Search, track, and unlock titles
- 3,751 Achievements: Full achievement database with categories
- Auto-unlock: Achievements automatically unlock their title rewards
- Progress Tracking: Track title and achievement collection
- Achievement Analysis: Sync achievements to infer quest completions
- Confidence Scoring: 95% confidence for MSQ inferences
- Batch Operations: Infer 900+ quests in seconds
- Full Audit Trail: Track how quests were marked (manual vs inferred)
- Metadata: Source, confidence, and achievement linkage for all quests
- Responsive Design: Access your data on your phone
- Dark Theme: Easy on the eyes
- Real-time Updates: See your progress anywhere
Eorzea provides three distinct interfaces for accessing game data, each suited for different use cases:
Best for: Power users, automation, scripting
Features:
- Fast, keyboard-driven interface
- Full access to all game data
- Character management and progress tracking
- Quest, fish, item, recipe, gathering, and collectibles commands
- Perfect for quick lookups and batch operations
Example:
eorzea fish --available
eorzea item search "Darksteel Ore"
eorzea quest --search "The Ultimate Weapon"Best for: Third-party apps, integrations, automation
Features:
- Complete RESTful API with 30+ endpoints
- JSON responses for all game data
- Pagination support (limit/offset)
- Advanced filtering and search
- Full OpenAPI 3.0 documentation
- CORS-enabled for web apps
Base URL: http://localhost:3000/api
Available APIs:
- Fish:
/api/fish,/api/fish/available,/api/fish/:id - Quests:
/api/quests,/api/quests/:id - Items:
/api/items,/api/items/:id,/api/items/:id/guide,/api/items/:id/sources,/api/items/:id/uses - Gathering:
/api/gathering/points,/api/gathering/available,/api/gathering/types - Crafting:
/api/recipes,/api/recipes/:id,/api/recipes/:id/materials,/api/craft-types - Collectibles:
/api/mounts,/api/companions,/api/orchestrion,/api/collection/stats
Example:
# Get all flying mounts
curl "http://localhost:3000/api/mounts?is_flying=true"
# Get currently available fish
curl "http://localhost:3000/api/fish/available"
# Search for items by name
curl "http://localhost:3000/api/items?name=Darksteel&limit=10"Documentation: See docs/openapi.yaml for complete API specification
Best for: Browsing on phones/tablets, visual exploration
Features:
- Mobile-responsive HTML pages
- Dark theme optimized for mobile
- Browse all game data visually
- Search and filter functionality
- Real-time Eorzean time display
- Auto-refresh for time-sensitive data
URL: http://localhost:3000 (or http://YOUR_IP:3000 from other devices)
Available Pages:
- Fish:
/fish,/fish/available,/fish/:id - Quests:
/quests,/quest/:id - Items:
/items,/item/:id - Gathering:
/gathering,/gathering/:id - Crafting:
/crafting,/recipe/:id - Collectibles:
/mounts,/companions,/orchestrion,/collection
How it works: Both HTML pages and JSON APIs call the same service layer directly (no HTTP calls between them), ensuring a single source of truth and optimal performance.
┌──────────────────────────────────────────────────────────┐
│ USER INTERFACES │
├──────────────┬──────────────────┬────────────────────────┤
│ CLI │ JSON REST API │ Web UI (HTML) │
│ (Terminal) │ (HTTP/JSON) │ (Browser/Mobile) │
└──────┬───────┴────────┬─────────┴──────────┬─────────────┘
│ │ │
│ │ │
│ ↓ ↓
│ ┌────────────────────────────────────────┐
│ │ Express Route Handlers │
│ │ JSON API HTML Rendering │
│ │ /api/fish /fish │
│ │ /api/quests /quests │
│ │ /api/items /items │
│ │ etc... etc... │
│ └──────────┬────────────────┬────────────┘
│ │ │
│ ↓ ↓
│ ┌─────────────────────────────────────────┐
│ │ Service Layer │
│ ┌────┤ (Shared Business Logic) │
│ │ │ - FishTrackerService │
│ │ │ - QuestTrackerService │
↓ ↓ │ - ItemService │
│ │ │ - GatheringService │
│ │ │ - CraftingService │
│ │ │ - CollectiblesService │
└────┴────┴───────────────┬─────────────────────────┘
↓
┌────────────────────────────────────────────┐
│ SQLite Databases │
│ - gameData.db (game reference data) │
│ - userData.db (character progress) │
└────────────────────────────────────────────┘
Database Structure:
gameData.db (Read-Only Game Reference Data):
- Items, recipes, and crafting data
- Gathering nodes (Mining, Botany)
- Fish database with catch requirements
- Mounts, minions, and orchestrion rolls
- Quests, titles, and achievements
- All game reference data from FFXIV CSVs
userData.db (User-Specific Progress):
- Character profiles and settings
- Quest completions and job progress
- Fish catches and gathering logs
- Crafted items and collection tracking
- Bookmarks, goals, and session history
- Everything you can import/export/sync
Key Design Principles:
- Single Source of Truth: All interfaces (CLI, JSON API, HTML) call the same Service Layer
- No Duplicate Logic: Both JSON and HTML endpoints use identical service calls
- Direct Service Access: HTML endpoints call services directly (no internal HTTP overhead)
- Separation of Concerns: Clear boundaries between presentation, API, business logic, and data layers
- Offline-First: All data stored locally in SQLite
- RESTful Design: Consistent API patterns across all endpoints
- Data Portability: userData.db can be easily backed up, exported, or synced
# Clone the repository
git clone https://github.com/felipe/eorzea.git
cd eorzea
# Initialize git submodules (required for game data CSVs)
git submodule update --init --recursive
# Install dependencies
yarn install
# Link the CLI globally (makes 'eorzea' command available)
npm link
# Now you can use 'eorzea' from anywhere!
eorzea --help# View help
eorzea --help
# Character management
eorzea character --add --name "Character Name" --server "Server"
eorzea character --list # List all characters
eorzea character --active # Show active character
eorzea character --switch "Name" # Switch active character
eorzea character --sync # Sync from Lodestone
# Quest commands
eorzea quest --search "quest name"
eorzea quest --level 50
eorzea quest --id 12345
eorzea quest --id 12345 --complete --note "Just finished!"
# Progress tracking
eorzea progress # Show all progress
eorzea progress --quests # Quest progress only
eorzea progress --fish # Fish progress only
eorzea progress --titles # Title collection
eorzea progress --achievements # Achievement progress
# Title commands
eorzea title search "Warrior"
eorzea title view 355
eorzea title unlock 355
eorzea title list
eorzea title stats
# Achievement commands
eorzea achievement search "Shadowbringers"
eorzea achievement view 2298
eorzea achievement unlock 2298
eorzea achievement list
eorzea achievement stats
# Intelligent sync
eorzea sync --achievements 2298,2958,3496 # Sync achievements
eorzea sync --achievements 2298 --dry-run # Preview changes
# Fish commands
eorzea fish --available # Show currently catchable fish
eorzea fish --big # Show big fish only
eorzea fish --patch 6.0 # Filter by patch
eorzea fish --id 4898 # Get detailed fish info
eorzea fish --id 4898 --caught # Mark fish as caught
# Item commands
eorzea item search "Darksteel Ore"
eorzea item --id 5115
eorzea item --id 5115 --guide # Complete item guide
eorzea item --name "Potion" --level 50 --limit 10
# Gathering commands
eorzea gather --mining # Show mining nodes
eorzea gather --botany # Show botany nodes
eorzea gather --item "Darksteel Ore"
eorzea gather --level 50
eorzea gather --timed # Show timed nodes only
eorzea gather --id 123 --gathered
# Crafting commands
eorzea craft search "Darksteel Ingot"
eorzea craft --id 456
eorzea craft --id 456 --guide # Complete crafting guide
eorzea craft --id 456 --crafted
eorzea craft --type Armorer
eorzea craft --ingredient "Darksteel Ore"
# Mount commands
eorzea mount search "Phoenix"
eorzea mount --id 89
eorzea mount --id 89 --obtained
eorzea mount --flying # Show flying mounts only
# Minion commands
eorzea minion search "Wind-up"
eorzea minion --id 123
eorzea minion --id 123 --obtained
# Orchestrion commands
eorzea orchestrion search "Answers"
eorzea orchestrion --id 45
eorzea orchestrion --id 45 --obtained
# Collection stats
eorzea collection # Show all collection progress# Start the web server
yarn web
# Access from your phone at:
# http://YOUR_COMPUTER_IP:3000Features:
- Browse all fish, quests, items, recipes, gathering nodes, and collectibles
- Search by name or ID across all systems
- View detailed quest objectives and item information
- See fish catch requirements and gathering node details
- Check currently available fish and timed gathering nodes
- Browse and search mounts, minions, and orchestrion rolls
- View collection statistics and progress
- Mobile-responsive design with dark theme
- Complete API endpoints for all data
See docs/WEB_VIEW.md for detailed web view documentation.
The fastest way to populate your quest history:
# 1. Add your character
eorzea character --add --name "Your Name" --server "Your Server"
# 2. Find your MSQ completion achievements
# In-game: Character > Achievements > Battle
# Examples: Shadowbringers (#2298), Endwalker (#2958), Dawntrail (#3496)
# 3. Preview what will be synced
eorzea sync --achievements 2298,2958,3496 --dry-run
# 4. Perform the sync
eorzea sync --achievements 2298,2958,3496
# 5. View your progress
eorzea progressResult: 900+ quests inferred in seconds.
See docs/intelligent-sync.md for complete documentation.
Create a .env file in the project root (see .env.example):
DEFAULT_CHARACTER_NAME=Your Character Name
DEFAULT_SERVER=YourServerThe game data CSVs are provided via a git submodule (xivapi/ffxiv-datamining). After cloning and initializing the submodule, seed the databases:
# Initialize user database (for new users)
npx tsx scripts/init-user-db.ts
# Seed all game data (items, recipes, gathering, collectibles, fish)
npm run seed-game-data
npm run seed-fish-data
# Or seed selectively
npm run seed-game-data -- --skip-gathering
npm run seed-game-data -- --skip-collectiblesIf you have existing profile.db, game.db, or fish.db files from an older version:
# Automatically migrate to new consolidated structure
npx tsx scripts/migrate-to-consolidated-db.ts
# This will:
# - Create userData.db from profile.db + user tracking data
# - Create gameData.db from game.db + fish.db
# - Backup your old databasesWhen new patches are released, update the submodule to get the latest CSV data:
# Update the ffxiv-datamining submodule to latest
git submodule update --remote data/ffxiv-datamining
# Re-seed the database with new data
npm run seed-game-data
# Commit the submodule update
git add data/ffxiv-datamining
git commit -m "Update game data to latest patch"See docs/GAME_DATA_SETUP.md for detailed setup instructions.
# Run in development mode
yarn dev <command>
# Run tests
yarn test
# Lint code
yarn lint
# Format code
yarn format
# Update fish data (from Carbuncle Plushy)
yarn update-fish-data
# Parse quest data from CSVs
yarn parse-quest-data
# Seed game data from CSVs
yarn seed-game-dataPowered by data from xivapi/ffxiv-datamining:
- 50,000+ items from all expansions
- Item sources: Crafting, gathering, quests, vendors, dungeons, raids
- Item uses: Recipe ingredients, quest requirements, leves
- Full metadata: Level, rarity, categories, stack size, tradability
- Cross-references: Links to recipes, gathering nodes, quests
- Search and filter: By name, level, rarity, category, source type
- Complete guides: One command shows everything about an item
- 10,000+ recipes for all Disciples of the Hand
- 8 craft types: Carpenter, Blacksmith, Armorer, Goldsmith, Leatherworker, Weaver, Alchemist, Culinarian
- Recipe details: Level, stars, requirements (craftsmanship, control)
- Ingredient tracking: With quantities and HQ availability
- Material trees: Recursive breakdown of all sub-crafts
- Crafting guides: Complete walkthrough with requirements and costs
- Search options: By craft type, result item, ingredient, level
- Progress tracking: Track crafted recipes per character
- Thousands of gathering nodes for Mining, Botany, and Spearfishing
- Node locations: Map coordinates and territory names
- Timed nodes: Support for ephemeral/limited time gathering points
- Level requirements: Required gatherer level for each node
- Hidden items: Items requiring perception/GP
- Search options: By type, level, location, item name
- Progress tracking: Track gathered items per character
- Similar to fishing: Follows the same patterns as fish tracking
Mounts (400+):
- Flying and aquatic mount indicators
- Multi-seat mount tracking
- Source information (quest, achievement, shop, dungeon, etc.)
- Collection progress tracking
Minions (700+):
- Battle companion indicators
- Source information for all minions
- Collection completion tracking
Orchestrion Rolls (400+):
- Music organized by categories
- Source information for each roll
- Music collection tracking
All collectibles include:
- Detailed how-to-obtain guides
- Visual progress bars
- Per-character tracking
- Search and filter options
- 5,277 quests from FFXIV CSV files
- 4,514 quests with parsed objectives
- Fish, NPC, item, and enemy objectives
- Quest prerequisites and rewards
- Search by name, level, or ID
- Completion tracking with metadata
Powered by data from Carbuncle Plushy Fish Tracker:
- 1,088 fish entries from all patches
- 313 big fish with special requirements
- Time windows and weather requirements
- Bait paths and catch methods
- Aquarium compatibility data
- Real-time availability based on Eorzean time
- Catch tracking per character
- 810 titles (prefix and suffix)
- 3,751 achievements across all categories
- 814 achievements that reward titles
- Search, filter, and track unlocks
- Auto-unlock titles from achievements
- Progress tracking and statistics
- Multi-character support
- Quest completion tracking with source and confidence
- Fish catch logging with locations
- Title & achievement unlocks
- Job level syncing from Lodestone
- Progress statistics with visual displays
- Session history tracking
- Achievement analysis for MSQ completions
- Confidence scoring (0-100 scale)
- Batch operations (900+ quests in 1 second)
- Full audit trail (source, confidence, inferred_from)
- 12 MSQ achievements mapped (ARR → Dawntrail)
- Dry-run mode for previewing changes
- Search characters by name and server
- View character profiles via Lodestone scraper
- Sync job levels automatically
- Multi-character profile support
- Progress tracking per character
- Runtime: Node.js v20+ with TypeScript
- CLI Framework: Commander.js + Inquirer.js
- Web Server: Express.js (for mobile web view)
- Database: SQLite with better-sqlite3
- Data Sources: FFXIV CSV Files + Custom Lodestone Scraper + Carbuncle Plushy Fish Tracker
- Testing: Jest with ts-jest (93 passing tests)
This project is built on the shoulders of the FFXIV community! We're grateful to:
- Carbuncle Plushy Fish Tracker by icykoneko - Fish data
- xivapi/ffxiv-datamining - Game data CSVs
- SaintCoinach - CSV extraction tools
- Garland Tools, XIVAPI, Teamcraft - Inspiration
See ATTRIBUTIONS.md for complete details.
FINAL FANTASY XIV © 2010-2024 SQUARE ENIX CO., LTD. All Rights Reserved.
This project is not affiliated with or endorsed by Square Enix.
MIT - See LICENSE for details.