--- pkg/wavebase/wavebase.go.orig	2026-03-03 23:22:35 UTC
+++ pkg/wavebase/wavebase.go
@@ -81,6 +81,8 @@ var SupportedWshBinaries = map[string]bool{
 	"linux-arm64":   true,
 	"windows-x64":   true,
 	"windows-arm64": true,
+	"freebsd-x64":   true,
+	"freebsd-arm64": true,
 }
 
 type FDLock interface {
@@ -217,6 +219,7 @@ func resolveWaveCachesDir() string {
 		homeDir := GetHomeDir()
 		cacheDir = filepath.Join(homeDir, "Library", "Caches", appBundle)
 	case "linux":
+	case "freebsd":
 		xdgCache := os.Getenv("XDG_CACHE_HOME")
 		if xdgCache != "" {
 			cacheDir = filepath.Join(xdgCache, appBundle)
@@ -471,6 +474,25 @@ func getSystemSummary(ctx context.Context) string {
 			details = "Windows"
 		}
 		return fmt.Sprintf("%s (%s)", details, runtime.GOARCH)
+	case "freebsd":
+		// Read /var/run/os-release directly (standard location since 2012)
+		data, err := os.ReadFile("/var/run/os-release")
+		var prettyName string
+		if err == nil {
+			for _, line := range strings.Split(string(data), "\n") {
+				line = strings.TrimSpace(line)
+				if strings.HasPrefix(line, "PRETTY_NAME=") {
+					prettyName = strings.Trim(strings.TrimPrefix(line, "PRETTY_NAME="), "\"")
+					break
+				}
+			}
+		}
+		if prettyName == "" {
+			prettyName = "FreeBSD"
+		} else if !strings.Contains(strings.ToLower(prettyName), "freebsd") {
+			prettyName = "FreeBSD " + prettyName
+		}
+		return fmt.Sprintf("%s (%s)", prettyName, runtime.GOARCH)
 	default:
 		return fmt.Sprintf("%s (%s)", runtime.GOOS, runtime.GOARCH)
 	}
