Skip to content

V6 - 2026 edition bump#63

Merged
zz85 merged 39 commits intomasterfrom
v6
Feb 5, 2026
Merged

V6 - 2026 edition bump#63
zz85 merged 39 commits intomasterfrom
v6

Conversation

@zz85
Copy link
Owner

@zz85 zz85 commented Feb 4, 2026

Major update getting SpaceRadar to work with modern Electron and addressing long-standing issues.

Electron & Platform

  • Electron 28 → 40.1.0 upgrade
  • Apple Silicon support (arm64/universal builds)
  • GitHub Actions CI/CD with auto-publishing
  • Auto-update support via electron-updater

Performance

  • Canvas-based sunburst renderer (replaces SVG for much better performance)
  • 3D mode toggle (experimental)

Scanning Improvements

  • Cancel and pause/resume scanning
  • Free space visualization in sunburst chart
  • Accurate scanning: skip symlinks, dedupe hardlinks, exclude problematic paths
  • Real-time scan statistics (files/dirs count, speed, errors)
  • Prevent scanner hangs on special files (sockets, FIFOs, devices)

Memory Visualization

  • Cross-platform support using systeminformation library
  • Native vm_stat/ps on macOS for accuracy

UI/UX

  • Modern IPC architecture with folder picker
  • Restored color options menu with new Seaborn palettes
  • Fixed flamegraph view (d3-flame-graph v4 compatibility)
  • macOS window dragging fix
  • Disk space info in footer

Other

  • MIT LICENSE added

zz85 added 9 commits February 4, 2026 03:08
…le d3 deps

- Update flamegraph.js to use d3-flame-graph v4 API:
  - Load via script tag instead of require() (v4 uses ESM)
  - Use new tooltip API: flamegraph.tooltip.defaultFlamegraphTooltip()
  - Update node data access for hierarchy nodes (node.data.name)
- Fix CSS path: d3.flameGraph.css -> d3-flamegraph.css
- Revert d3-scale to ^1.0.6 (v4 is ESM-only, breaks require())
- Revert d3-tip to ^0.7.1 for compatibility
The menu was not appearing because Menu API was being accessed from the
renderer process, which is not allowed in modern Electron versions.

- Move menu creation to main.js (main process)
- Add IPC communication for color changes between main and renderer
- Update colors.js to listen for color-change events via ipcRenderer
- Return mainWindow from start.js for IPC targeting
The app wasn't exiting because the hidden scanner window kept it alive.
Now we explicitly call app.quit() when the main window closes.
The Open button wasn't working because start.js uses main process APIs
(BrowserWindow, screen) that aren't available in the renderer since
electron.remote was deprecated. Now we send an IPC message to the main
process to create new windows.
- data.js: Declare partition variable so sunburst.js can assign to it
- flamegraph.js: Use fallback dimensions, preprocess data with value computation,
  filter small nodes to prevent memory issues, disable redundant redraws
- listview.js: Use nullish coalescing to fallback through sum/value/size
- router.js: Initialize dimensions at startup
- utils.js: Handle undefined/NaN in format() function

Fixes #47 (flamegraph hanging) and NaN TB display issue
Wrap require('systeminformation') in try-catch to prevent TDZ error
if module fails to load. Also check if module is available before
using it in mem() function.
Comprehensive documentation of Space Radar architecture including:
- Process architecture (main, renderer, scanner)
- IPC communication flow
- Data flow from scan to visualization
- Module dependencies
- File organization
- Data structures
zz85 and others added 19 commits February 5, 2026 04:49
- Fix Locate Directory button using path.sep instead of undefined PATH_DELIMITER
- Add detailed scan statistics in footer: files, dirs, size, items/sec, MB/sec
- Track separate file and directory counts during scanning
- Add seaborn color palettes (deep, muted, pastel, bright, dark, colorblind)
- Set pastel palette with 'By Root Directory' mode as new defaults
- Add 'Random/Confetti' color mode for visual effect
- Add dark mode support with CSS theme and menu toggle
- Reorganize Color Options menu with submenus for palettes and modes
- Skip special files that can cause hangs (sockets, FIFOs, block/char devices)
- Track and display error count for permission denied and other failures
- Add exclusion paths for problematic macOS system directories
- Show errors in both legend overlay and footer status bar
- Better error logging with error codes for debugging
- Exclude /dev, /.Spotlight-V100, /System/Volumes/*, Time Machine paths
- Add disk space display functionality using systeminformation
- Add disk_space_info element to footer and update display logic
- Address code review feedback: improve error handling and cross-platform path matching
- Add null check for usePercent and CSS for disk_space_info element
- Fix mount point matching to handle nested mounts correctly

Co-authored-by: zz85 <314997+zz85@users.noreply.github.com>
- Remove duplicate si declaration in radar.js (already declared in mem.js)
- Fix Menu/MenuItem access for newer Electron versions using remote
- Add null guards for contextMenu and openMenu
- Add null guard for si in getDiskSpaceInfo to prevent script execution halt
- Remove .travis.yml
- Add GitHub Actions workflow for building Electron app
- Build for macOS (x64, arm64), Linux, and Windows
- Auto-release on version tags (v*)
- Upload build artifacts for each platform
- Fix 'main' entry in package.json to point to app/main.js
- Downgrade Electron from 40.1.0 to 35.7.5 for better SVG performance
- Add dist/ to .gitignore
- Add WeakMap cache for ancestor lookups in mouseover (O(1) vs O(depth))
- Wrap DOM updates in requestAnimationFrame to batch changes
- Debounce hover events with 16ms delay (~1 frame)
- Reduce transition time from 750ms to 300ms
- Optimize ListView to toggle CSS classes instead of full redraw
- Cache colorByParent results to avoid repeated LAB conversions
- Simplify build workflow to use electron-builder outputs
- Update artifact paths to use dist/ directory
- Add GH_TOKEN for electron-builder
- Bump app version to 6.0.0 and add author field
Replace SVG-based sunburst with Canvas 2D rendering for dramatically
improved performance. This eliminates DOM overhead that caused ~657ms
presentation delay on interactions.

Key changes:
- New canvas element (#sunburst-canvas) for rendering
- Direct arc drawing with ctx.arc() instead of SVG path elements
- Polar coordinate hit-testing for mouse interactions
- RAF-based animation loop with easeOutCubic transitions
- Maintain same visual appearance and interaction model

Expected performance improvement:
- INP: 992ms → <150ms
- Presentation delay: 657ms → <20ms
- Fix d3-shape API usage in sunburst3d.js (create arc generator per segment)
- Add null checks for canvas3d element
- Add toggle3D() function to enable/disable 3D mode at runtime
- Add '3D Mode (Experimental)' checkbox in Color Options menu
- Add IPC handler for 3dMode toggle in colors.js
- Properly manage animation loop lifecycle
- Only show 'Kernel / others' when diff is positive
- Filter out zero/negative memory category values
- Rename 'Kernel / others?' to 'Kernel / others'
Canvas-based sunburst now performs well with latest Electron.
Use native macOS commands for more accurate memory data:
- vm_stat for system memory statistics
- ps -cx -opid,ppid,rss,comm for process memory

Falls back to systeminformation library on Windows/Linux.
systeminformation is used by radar.js for disk space info (si.fsSize),
so it needs to be loaded on macOS too. Memory scanning on macOS still
uses native vm_stat/ps commands for accuracy.
- Store disk info when scan starts for use in visualization
- Add 'Free Space' node to root level showing available disk space
- Display free space as light gray segment in sunburst
- Fix macOS APFS disk detection to use /System/Volumes/Data mount
- Prevent clicking/zooming into Free Space node
Use samuelmeuli/action-electron-builder@v1.6.0 for simpler CI/CD:
- Automatically installs dependencies
- Builds for current platform
- Auto-releases on version tags (v*)
- Install electron-updater package
- Check for updates on app ready
- Add logging for update events (checking, available, downloading, etc.)
- Auto-notifies users when updates are available
zz85 added 5 commits February 5, 2026 07:35
Add 'args' parameter to specify platform-specific build flags:
- macOS: --mac
- Linux: --linux
- Windows: --win

Also add mac_certs secrets for optional code signing.
The 'build' script now runs 'electron-builder' without platform flags,
allowing the CI action's 'args' parameter to specify the platform.

Renamed old 'build' to 'build:all' for local multi-platform builds.
- Add cancel scan feature that stops traversal and returns partial results
- Add pause/resume scan feature with async wait mechanism
- Show pause/cancel buttons in scanning UI (legend and footer)
- Update status display to indicate cancelled/paused state
- IPC communication: renderer -> main -> scanner window -> du.js

Addresses GitHub issue #53
zz85 added 5 commits February 5, 2026 08:12
Prevents prerelease suffix from being stripped, fixes upload conflicts
- Increase job timeout to 30 minutes
- Set fail-fast: false so one platform failure doesn't cancel others
- Add --publish always to args to avoid implicit publish behavior
- Add generateUpdatesFilesForAllChannels for prerelease support
- Bump to v6.0.0-alpha.4
When packaged as asar, __dirname is read-only. Use:
- App data directory for lastload.json (persistent cache)
- Temp directory for fs-ipc.json (temporary IPC file)

Fixes ENOENT error when running from /Applications
@zz85
Copy link
Owner Author

zz85 commented Feb 5, 2026

builds pass, merging!

@zz85 zz85 merged commit 5c3d2bf into master Feb 5, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants