Technical approach: Instead of reading the entire file into RAM (which crashes browsers on 2GB+ files), LV use File.prototype.slice() to read 50KB chunks via FileReader. This keeps memory usage constant at ~10MB regardless of file size. For GZIP files I use the native DecompressionStream API.
What's new in v2.0:
- Command Palette (Ctrl+K) for keyboard-driven navigation
- Multi-Filter: apply multiple include/exclude filters simultaneously with regex support
- Error Aggregation: groups similar errors by pattern, shows occurrence counts
- Split View: two independent panels for comparing different file sections
- Heatmap Navigation: visual error density on minimap (red=error, orange=warn)
- Log Statistics: real-time level distribution with bar charts
- Export Selection: export specific lines as TXT/JSON/CSV
- Dark/Light theme toggle
- Full keyboard shortcut system (Vim-style navigation for search, bookmarks, etc.)
Thanks for checking it out (and very appreciate feedback)!