About this project

Elden Ring Compass is a web companion for Elden Ring that reads your save file and turns it into a progression dashboard. Upload a save once, or point the page at it for continuous polling, and the site reports inventory, bosses defeated, graces unlocked, map markers and other completion data. Parsing happens entirely in the browser: the save never leaves the machine and the site has no ability to write to it, so it cannot be used to modify a character. Features described in the README: - In-browser save parsing with no server-side upload of save contents. - Continuous save polling so the view updates while you play, without re-uploading. - Local persistence of map position, row selection and column filters. - A tiled interactive map (Leaflet / react-leaflet) with item, boss and grace markers. - Virtualized data tables for browsing large item and progression lists. Architecture and tooling: The project is a Bun + Turborepo monorepo. The web app is built on TanStack Start and TanStack Router with React 19, using Effect and @effect/atom-react for app state and an in-memory data layer instead of TanStack Query or IndexedDB. UI components come from shadcn (Base UI variant) with Tailwind CSS v4. Tables use TanStack Table and TanStack Virtual. Vite and Nitro handle bundling and the production server, while oxlint/oxfmt and TypeScript 7 (patched by @effect/tsgo for Effect diagnostics) cover linting, formatting and type checking. Tests use Vitest and Playwright. Packages: - apps/web — the website. - packages/data — the single runtime data source: game data and item icons baked by the extractor. - packages/save-parser (save-parser-ts) — a pure-TypeScript Elden Ring save parser that runs in the browser or a worker; the README notes the earlier Rust/WASM save-editor stack was removed. - packages/extractor (er-extractor) — a build-time CLI that reads an installed copy of the game and bakes names, stats, markers, icons, graces and event scripts into the data package, using Oodle decompression via bun:ffi, dvdbnd unpacking and FMG/PARAM/MSB/EMEVD parsing. - packages/vendored-data — build-time-only reverse-engineered constants that cannot be derived from the install, such as event-flag tables, AES/RSA keys and param schemas, adapted from upstream projects ER-Save-Lib, UXM-Selective-Unpack, soulsmods/Paramdex and soulstruct. - packages/config/* — shared TypeScript and oxlint configuration. Development: The web app only requires Bun; a Nix flake is also provided for a reproducible toolchain. Rebuilding game data from scratch additionally needs an installed copy of Elden Ring and the Rust toolchain, but the prebuilt data package is committed, so neither is needed to run or develop the site. Typical commands are bun install, bun run dev, bun run lint, bun run typecheck, bun run test and bun run build. The README also notes that the default snippet for serving a save file uses Node.js, though any simple HTTP file server works, and that manual upload is an alternative to continuous polling.