A desktop application for visualizing and tracking the technology tree in Space Empires V. Displays all 128 technologies as an interactive DAG (directed acyclic graph), shows prerequisites, unlocked components and facilities, and lets you track your research progress.
Built with Electron + Vue 3 + Cytoscape.js. Runs on macOS and Windows.
- Interactive tech tree graph with dagre layout
- Filter by group and category
- Search across technologies, components, and facilities
- Track researched levels per technology
- Detail panel with prerequisites, unlocked items, and cost
- UI available in Ukrainian and English (game data is in Russian — original game text)
Requirements: Node.js 18+
npm install
npm run dev # development (hot reload)
npm run build # production build
npm run build:mac # package for macOS (.app)
npm run build:win # package for Windows (portable .exe)src/
locales/ # UI translation strings
uk.json # Ukrainian
en.json # English
components/
TechGraph.vue # Cytoscape DAG graph
Sidebar.vue # Group/category filter, search, language switcher
DetailPanel.vue # Tech details, level control, components/facilities
stores/
techStore.js # Pinia store — all state and logic
i18n.js # Minimal i18n composable (no external library)
App.vue # Root layout and topbar
resources/
tech_tree_uk.json # Tech tree data (Ukrainian slot — currently Russian game text)
tech_tree_en.json # Tech tree data (English slot — currently Russian game text)
components_uk.json
components_en.json
facilities_uk.json
facilities_en.json
Copy src/locales/en.json to src/locales/<code>.json and translate the values.
// src/i18n.js
import uk from './locales/uk.json'
import en from './locales/en.json'
import de from './locales/de.json' // ← add
const locales = { uk, en, de } // ← addCopy the existing data files as a placeholder:
cp resources/tech_tree_en.json resources/tech_tree_de.json
cp resources/components_en.json resources/components_de.json
cp resources/facilities_en.json resources/facilities_de.jsonReplace the content later when you have parsed game data in the target language.
// src/stores/techStore.js
import techTreeDe from '@parsed/tech_tree_de.json'
import componentsDe from '@parsed/components_de.json'
import facilitiesDe from '@parsed/facilities_de.json'
const dataByLang = {
uk: { ... },
en: { ... },
de: { techs: techTreeDe, components: componentsDe, facilities: facilitiesDe }, // ← add
}<!-- src/components/Sidebar.vue -->
<div class="lang-section">
<button class="lang-btn" :class="{ active: currentLang === 'uk' }" @click="store.setLanguage('uk')">УКР</button>
<button class="lang-btn" :class="{ active: currentLang === 'en' }" @click="store.setLanguage('en')">ENG</button>
<button class="lang-btn" :class="{ active: currentLang === 'de' }" @click="store.setLanguage('de')">DEU</button>
</div>Game data is parsed from the original Space Empires V installation files (TechAreas.txt, Components.txt, Facilities.txt). The files use UTF-16 LE encoding with Russian text. See the parser script for details.
Tech names are used as internal IDs throughout the app. When adding an English dataset, parsed tech names must match the tech field in requirements arrays so that cross-references resolve correctly.
Personal use. Space Empires V is a trademark of Malfador Machinations.