powerful but friendly backup program that runs in your tray, powered by restic devins.page/restray
go restic system-tray
2

Configure Feed

Select the types of activity you want to include in your feed.

fix: crash diagnostics, exit logging

intergrav (Jun 29, 2026, 6:04 PM EDT) 55460097 06629d5a

+14 -1
+4 -1
cmd/restray/main.go
··· 61 61 62 62 beeep.AppName = "Restray" 63 63 log.Printf("Restray v%s", version) 64 + defer log.Print("Restray exiting") 64 65 65 66 initAlertIcon() 66 - systray.Run(onReady, func() {}) 67 + systray.Run(onReady, func() { 68 + log.Print("systray exited") 69 + }) 67 70 }
+10
cmd/restray/tray.go
··· 555 555 watchConfig(applyConfig) 556 556 557 557 go func() { 558 + defer func() { 559 + if r := recover(); r != nil { 560 + log.Printf("update checker panicked: %v", r) 561 + } 562 + }() 558 563 for range time.NewTicker(24 * time.Hour).C { 559 564 resticPath, managed := findRestic() 560 565 if managed && !isAnyBusy() { ··· 565 570 }() 566 571 567 572 go func() { 573 + defer func() { 574 + if r := recover(); r != nil { 575 + log.Printf("monitor loop panicked: %v", r) 576 + } 577 + }() 568 578 prev := onBatteryPower() 569 579 lastWall := time.Now().Round(0) 570 580 for range time.NewTicker(60 * time.Second).C {