Replace line-by-line text diff with semantic key-level diff that:
- Compares top-level plist keys using parsed JSON values
- Serializes changed key-value pairs back to XML form
- Shows neighboring keys for context (sorted alphabetically)
- Add filter input to home page header (searches by product name/version)
- Move platform toggles (iOS/macOS/OS X) to header
- Display product names (e.g., "macOS Big Sur") on each build card
- Normalize platform names: mac→macOS, osx→OS X
- Center section headers with larger font
- Support left/right positions in HeaderPortal
- Move Keys/Files button group left-aligned after version dropdown
- Add icons to Keys/Files buttons with longer labels
- Use compact icon-only expand/collapse buttons on files and find pages
- Make platform filters (iOS/mac/osx) toggleable instead of anchors
- Optimize find page: filter controls right-aligned on same row as title
- Simplify keys page to flat grid layout without tree grouping
- Remove virtualization from keys page, use simple grid layout
- Add min-h-0 to main element for proper flex behavior
- Add subtle blue tint (oklch hue 250) to primary, accent, ring colors
- Keep black/white backgrounds, only colorize interactive elements
- Fix hover states to use foreground color instead of primary
- Change root layout from min-h-screen to h-screen with overflow-hidden
to properly constrain viewport height
- Add min-h-0 to main element to allow flex shrinking
- Add rewrite rule to proxy /data/* to production data URL for local dev
- Make output: "export" conditional (production only) since rewrites
require server mode
- Replace Node.js/npm with Bun for faster builds
- Replace ESLint with Biome for faster linting
- Use codecolor.ist/entdb-data for data URL (same origin, no CORS)
- Fix virtualizer row height estimation by tracking actual column count
- Batch consecutive single keys into grid rows for better space usage
- Default diff view to unified mode on narrow screens (<480px)
In Major Releases view, always display all minor versions for the
latest 2 major versions of iOS and macOS instead of just the latest
build of each major version.
- Display each changed key as separate colored badge
- Fix dark mode contrast for added/removed/changed badges
- Better visual organization with flex-wrap layout
- Show binary basename in breadcrumb after iOS version
- Move version switcher inline with OS name
- Remove separate Binary Detail/Search Results labels
- Add build timestamp to footer
- Rename GitHub links for clarity (Source Code, Firmware Indexer, Raw Data)
- Remove height limit from version history sidebar
- Remove duplicate links from header, keep only theme toggle
- Add links to all three repos (Website, Indexer, Data) in footer
- Update README with features, live site link, and repo table
- Create Footer component with links to GitHub and Mastodon
- Restructure root layout with flex column for sticky footer
- Update OS layout to use flex-1 for proper height inheritance
- Fix navbar height to h-14 (56px) for consistency
- Use flexbox layout to fill available viewport height
- Reduce header padding and margins
- Add min-h-0 for proper flex overflow handling
- Support light/dark themes with prism/tomorrow syntax styles
- Add mounted state to prevent hydration jitter
- Integrate download button alongside copy button
- Use theme-aware link colors for entitlement keys
- Add toggle between unified and split (side-by-side) view
- Make diff viewer theme-aware for light/dark modes
- Add context lines around changes
- Make diff summary collapsible for large change sets
- Implement @tanstack/react-virtual for performance with large key lists
- Add native debouncing (300ms) for search input
- Handle single-key groups without collapsible UI
- Add anchor navigation for quick jumps to OS groups
- Rename toggle from "Latest Only/All Versions" to "Major Releases/All Builds"
- Group versions by major version when showing all builds
- Add dark/light mode toggle with next-themes
- Redesign binary detail page with version history sidebar and diff support
- Improve keys page with multi-column grid layout
- Update navtop styling to match content padding
- Replace checkbox with segmented button for "Latest Only" toggle
- Upgrade to Next.js 16, React 19, TypeScript 6
- Find page now has same controls as files page
- Both pages support expand all / collapse all buttons
- FileSystem component accepts controlled expandAll state
- Fixed single-key groups to not show as collapsible
- Fix double base path in tab navigation (router.push handles it)
- Use multi-column grid for files in shallow folders
- Show item counts always (not just on hover)
- Better use of horizontal space on desktop
- Move version history to collapsible sidebar
- Group versions by major version (iOS 15.x, 16.x, etc.)
- Move copy button inside XML code block
- Improve loading skeleton
- Side-by-side layout on larger screens
- Add version switcher dropdown to quickly jump between OS versions
- Redesign keys page with grouped, collapsible sections
- Dim common prefix and highlight unique suffix for better scanning
- Add tab navigation between Entitlement Keys and Browse Files
- Show key counts per group and total
The @pierre/diffs library was causing the browser to freeze when
comparing certain versions. Implemented a simple line-based diff
that only shows added/removed lines.
- Convert XML plist to JSON for proper key sorting and comparison
- Generate normalized XML from sorted JSON for diffing
- Hide unchanged lines in diff view (collapsedContextThreshold: 0)
- Simplify diffPlistKeys to use JSON comparison
- Show all OS versions where the same binary path exists
- Add side-by-side diff view comparing entitlements between versions
- Normalize plist by sorting root-level keys before comparison
- Add plist utilities for parsing and key extraction
The keys/paths pages failed to load because:
1. findOS expected just build ID but URL contains version_build format
2. openKV expected object format but index files use array format