wavetermdev/waveterm · error
job manager only supported on unix systems, not %s
Error message
job manager only supported on unix systems, not %s
What it means
SetupJobManager only supports linux and darwin; on any other GOOS it refuses to initialize the job manager daemon. The error reports the unsupported GOOS value so the caller knows why job management is unavailable.
Source
Thrown at pkg/jobmanager/jobmanager.go:50
var WshCmdJobManager JobManager
type JobManager struct {
ClientId string
JobId string
Cmd *JobCmd
JwtPublicKey []byte
JobAuthToken string
StreamManager *StreamManager
InputQueue *utilds.QuickReorderQueue[wshrpc.CommandJobInputData]
lock sync.Mutex
attachedClient *MainServerConn
connectedStreamClient *MainServerConn
pendingStreamMeta *wshrpc.StreamMeta
}
func SetupJobManager(clientId string, jobId string, publicKeyBytes []byte, jobAuthToken string, readyFile *os.File) error {
if runtime.GOOS != "linux" && runtime.GOOS != "darwin" {
return fmt.Errorf("job manager only supported on unix systems, not %s", runtime.GOOS)
}
WshCmdJobManager.ClientId = clientId
WshCmdJobManager.JobId = jobId
WshCmdJobManager.JwtPublicKey = publicKeyBytes
WshCmdJobManager.JobAuthToken = jobAuthToken
WshCmdJobManager.StreamManager = MakeStreamManager()
WshCmdJobManager.InputQueue = utilds.MakeQuickReorderQueue[wshrpc.CommandJobInputData](JobInputQueueSize, JobInputQueueTimeout)
err := wavejwt.SetPublicKey(publicKeyBytes)
if err != nil {
return fmt.Errorf("failed to set public key: %w", err)
}
err = MakeJobDomainSocket(clientId, jobId)
if err != nil {
return err
}
go func() {
defer func() {View on GitHub (pinned to a4447c1563)
Solutions
- Run the job manager on linux or darwin only
- On Windows, use an alternative such as WSL2 where GOOS is linux inside the subsystem
- Add an early GOOS guard in your own tooling so unsupported platforms never invoke the job command
- If you need windows support, file/track an upstream feature request; PTY/job-manager plumbing is unix-specific
Example fix
// before
SetupJobManager(clientId, jobId, pubKey, token, readyFile)
// after
if runtime.GOOS != "linux" && runtime.GOOS != "darwin" {
return fmt.Errorf("job manager unsupported on %s; use linux/darwin or WSL", runtime.GOOS)
}
SetupJobManager(clientId, jobId, pubKey, token, readyFile) Defensive patterns
Strategy: validation
Validate before calling
if runtime.GOOS != "linux" && runtime.GOOS != "darwin" {
return fmt.Errorf("job manager requires linux or darwin (got %s); use WSL on Windows", runtime.GOOS)
} Try / catch
if err := jobmanager.SetupJobManager(cid, jid, pub, tok, rf); err != nil {
if strings.Contains(err.Error(), "only supported on unix") {
// disable job features in UI, do not retry
return
}
return err
} Prevention
- Feature-gate job functionality by runtime.GOOS at startup
- On Windows prefer WSL2 for the daemon
- Skip unsupported OSes in CI matrices
- Never attempt retries for platform errors
When it happens
Trigger: Calling SetupJobManager (via the wsh jobManagerRun path, e.g. `wsh job` start) on windows or another non-unix GOOS like plan9, wasip1, or js.
Common situations: Running Wave Terminal's job manager features on Windows; CI matrix job accidentally testing the wsh job command on an unsupported OS; cross-compiling and running the binary on an unexpected platform.
Understand the failure class
Background: "unsupported platform" / "not supported on this platform" errors: what they mean and how to fix them — this error's family across 47 libraries.
Related errors
- invalid pgid returned: %d
- failed to connect client: %w
- job already started
- no pending stream (call PrepareConnect first)
- failed to authenticate to server: %w
AI-assisted analysis of wavetermdev/waveterm@a4447c1563 (2026-09-01).
Data as JSON: /api/errors/7e47e324404de031.
Report an issue: GitHub.