Skip to content

feat: minimize to system tray with background receiving #23

@PranavAgarkar07

Description

@PranavAgarkar07

Goal

Allow BeamSync to minimize to the system tray (notification area) so file receiving continues in the background when the window is closed.

Deliverables

1. System Tray Integration

  • Add system tray icon using Wails runtime Menu API or platform-specific libraries
  • Tray icon: use the existing BeamSync logo or a simplified icon
  • Tray menu with options:
    • Show Window — restores the main Wails window
    • Quit — exits the application
  • Close/minimize button should hide to tray instead of quitting
  • Single click on tray icon toggles window visibility

2. Background Receiving

  • HTTP receiver continues running when window is hidden
  • Optional desktop notification on file received (using Wails runtime.Notify or libnotify)
  • Tray icon badge or subtle visual change when a transfer completes in background

3. Platform Support

  • Linux: use AppIndicator or gtk.StatusIcon via Wails systray support
  • Graceful fallback if tray is not available (e.g. Wayland without status-notifier)

Design Notes

  • Tray title: "BeamSync"
  • Tray tooltip: show current server URL or active transfer count
  • No additional Go dependencies beyond what Wails provides

Acceptance Criteria

  • App minimizes to tray when window close button is clicked (not quit)
  • Tray icon appears in system notification area
  • Tray menu has "Show Window" and "Quit" options
  • File transfers continue when window is hidden
  • Desktop notification on background file receive (optional)
  • App quits fully when "Quit" is selected
  • No crashes on Linux (X11 and Wayland)

References

  • desktop/main.go — Wails entry point, window creation
  • desktop/app.go — app lifecycle (start/stop server)
  • desktop/wails.json — Wails configuration
  • Existing logo at beamsync/ui/logo.png

Points (GSSoC)

  • Difficulty: beginner
  • Type: feature
  • Base Score: 50 + (1 x 1) + 10 = 61 points
  • Labels: level:beginner, type:feature, gssoc:approved

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions