Changelog
This page provides an overview of notable changes to the s9s project. For a complete and detailed changelog, please see the full changelog.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Recent Changes
Version 0.9.0 (2026-04-08)
Refresh-rate consistency, job output viewer, enriched job details, and grouped node fixes:
- Unified Auto-Refresh: All views now share a single refresh cadence driven by
refreshRatein config. Previously, Jobs (30s), Health (10s), and Performance (5s) used hardcoded intervals that ignored the config. The per-viewm/Mtoggle on Jobs and R toggle on Performance are removed in favor of a new global F6 pause/resume - Live Reconfiguration: Editing
refreshRatein the F10 modal re-arms the running ticker immediately — no restart required. Empty string (refreshRate: "") is now a deliberate "auto-refresh disabled" state - Default Refresh Rate: Bumped from
2sto10s— saner for shared clusters now that a single ticker drives all views - Data Race Fix: Auto-refresh state is now accessed via
atomic.Bool, fixing a real cross-goroutine race - Job Output Streaming: Press o to view job output, t for real-time tail-f streaming, s to switch stdout/stderr, e to export
- Array Job Output Patterns:
%Aand%aexpanded in output file paths - Enriched Job Detail Modal: TRES requested/allocated, GRES with GPU index, batch host, cluster, memory, submit command line, and 22 additional SLURM fields
- GRES Submission Fix:
gres: gpu:1correctly mapped totres_per_node: gres/gpu:1 - Go 1.25 Minimum: Go 1.24 no longer receives security patches; source builds require Go 1.25+. Prebuilt binaries unaffected
- Bug Fixes: Dashboard modal ESC/R, node operations when grouped, sort/group mutual exclusivity, health checks stable ordering, F1 help modal j/k scrolling
- Dependabot: Replaces Trivy for dependency scanning
- gofmt CI Gate: Formatting enforced in lint job
Version 0.8.0 (2026-03-30)
Keyboard shortcut overhaul, layout system, and configuration consolidation:
- Dashboard Layout Switcher: Press L to toggle between default 6-panel view and Monitoring layout (metrics + health)
- Uniform Keyboard Shortcuts: f for advanced filter (all views), x for actions menu (jobs), t for future filter (reservations)
- Contextual Help: ? and F1 show global keys, commands, and the current view's shortcuts
- Tab Completion: Press Tab on empty : prompt to browse all available commands
- Self-Update:
s9s updatecommand with auto-update checks, SHA256 verification, and GitHub Releases - Configuration Overhaul: F10 modal consolidated to General + View Settings; saves correctly with proper field casing
- View Settings Applied: Max Jobs, Show Only Active, Group Nodes By from config take effect on startup
- Dead Code Removed: Preferences modal (F3), stub widgets, placeholder config groups (-1,500+ lines)
- Bug Fixes: Layout deadlock, command line focus stealing, config save path, hint bar stale hints
Version 0.7.1 (2026-03-21)
Bug fix release for remote cluster connectivity:
- Configurable SLURM Username: New
userfield in cluster config (cluster.user: root) overrides theX-SLURM-USER-NAMEheader — for environments where the local OS user doesn't match a SLURM user (laptops, CI runners, containers, or any host outside the cluster's shared user directory) SLURM_USER_NAMEEnvironment Variable: Overrides all other username resolution for CI/scripting use cases- No Silent Root Fallback: Username resolution fails explicitly if no user can be determined, preventing unintended privilege escalation
Version 0.7.0 (2026-03-16)
Configurable job submission templates and full SLURM field support:
- Configurable Templates: Define custom job templates in config YAML with pre-filled defaults, hidden fields, and restricted dropdown options
- 3-Tier Template Merge: Built-in, config YAML, and user-saved JSON templates merge with name-based override
- 84 sbatch Fields: Job submission wizard supports 84 of 117 SLURM fields (was 12) -- fields like QoS, GPUs, array, constraints, dependencies now actually reach slurmrestd
- Smart Field Visibility: Advanced fields hidden by default, shown automatically when a template sets them
- CLI Template Management:
s9s templates listands9s templates exportcommands for viewing and exporting templates - SubmitRaw Integration: Bypasses lossy intermediate struct, maps directly to SLURM OpenAPI
JobCreate - QoS Dropdown: QoS field now fetches from cluster API like partitions and accounts
- User Defaults: Account and QoS default to the current SLURM user's defaults
- Preview Copy: Ctrl+Y in job script preview copies clean sbatch script to clipboard (OSC 52)
- Full
--beginParsing: ISO dates, relative times (now+1hour), SLURM named times (midnight,fika,teatime) - Bug Fixes: Viper key case normalization, preview directive accuracy, optional dropdown defaults, duplicate shebang/SBATCH removal
- Removed: Deprecated
OLDShowJobTemplateSelectorand helpers
Version 0.6.3 (2026-03-14)
Performance and responsiveness release:
- Eliminate N+1 API calls: Partitions view now fetches all jobs in a single API call instead of 2N+1 calls per refresh — fixes multi-second freezes on clusters with 20k+ jobs
- Lazy view init & background fetch: Views only initialize when first focused; DAO-level caching reduces redundant API calls; only the active view auto-refreshes
- Async UI-thread API calls: 11 blocking API calls (cancel, hold, release, details modals, etc.) moved off the tview draw thread — UI stays responsive during all operations
- Header improvements: Remove clock, add navigation key hints (Tab, Enter, ?)
- Per-user temp paths: Fix multi-user conflicts with shared
/tmpfiles - Install script fix: Serve install script directly at
get.s9s.devroot
Version 0.6.2 (2026-03-10)
Setup wizard improvements and bug fixes:
- Setup Wizard Config Fix: Generated config now uses valid camelCase YAML keys — previously
yaml.Marshalproduced lowercase keys that s9s couldn't load - Streamlined Wizard: Removed questions that didn't affect config; wizard now asks only endpoint, cluster name, and optional JWT token
- Token Discovery Fix: Generated config no longer disables token auto-discovery, so
scontrol tokenandSLURM_JWTfallback works without a configured token - Connection Test: Setup wizard now tests the slurmrestd connection before completing
- Docs Update: Lead with zero-configuration auto-discovery (DNS SRV,
scontrol ping) — s9s works on any SLURM node without running setup
Version 0.6.1 (2026-03-09)
Bug fix release focusing on metric accuracy:
- Node Resource Metrics: Use real SLURM API fields (
AllocCPUs,AllocMemory,FreeMem,CPULoad) instead of hardcoded 50% estimates - Cluster Metrics: Dashboard, Performance, and Health views now show real memory and CPU usage from node data
- Job Times: Fix negative elapsed times for PENDING jobs (SLURM sets StartTime to future estimate)
- Remove fake hardcoded "Job Throughput (24h)" chart from Dashboard
Version 0.6.0 (2026-03-08)
Key features:
- Cluster Switcher: Show active cluster name in header, press Ctrl+K to switch clusters at runtime
--clusterFlag: Select cluster context from the command line; fix--configflag being ignored- Table Export: Press e in any view to export data (CSV, JSON, Text, Markdown, HTML)
- VHS Integration Tests: Regression testing against real Slurm clusters (24.05, 24.11, 25.05, 25.11)
- Breaking: Config keys renamed
contexts→clusters,currentContext→defaultCluster
Version 0.5.0 (2026-02-18)
Key features:
- Zero-Configuration Auto-Discovery: Works out-of-the-box on SLURM systems without config files
- API Version Auto-Detection: Removed hardcoded API version default
- Static Binary Builds:
CGO_ENABLED=0for cross-distribution compatibility - Integration Tests CI: PR testing with ephemeral k3d cluster and mock SLURM API
Version 0.4.0 (2026-02-08)
Key features:
- Performance View: Real-time cluster-wide metrics (jobs, nodes, CPU%, memory%)
- Sorting Modal: Press S in any table view for interactive column sorting
- Command Mode with Arguments: Vim-style
:cancel,:drain,:requeuewith Tab completion - Reservation Filters: a for active-only, f for future-only
- Job Output File Reading: Local filesystem and SSH-based remote file access
Version 0.3.0 (2026-01-30)
Key features:
- Vim-style view navigation: h and l keys for switching between views
- Global search cross-view navigation: Search results navigate to the correct view
- Partition filter syntax: Use
p:partition_nameto filter by partition - Username resolution: Jobs display actual usernames instead of numeric UIDs
- Centralized version management and automated release processes
Version 0.1.0 (2026-01-21)
Initial stable release with core features:
- Core TUI Application for SLURM cluster management
- Vim-like navigation and keybindings
- Interactive job and node management
- Multi-cluster support with context switching
- Configuration management and wizard
- CSV, JSON, and Markdown export capabilities
- Observability plugin with Prometheus integration
- Comprehensive test suite and CI/CD
Viewing the Full Changelog
For a complete list of all changes, features, and fixes across all versions, refer to the full CHANGELOG.md.
Version History
- v0.9.0 - Latest release
- v0.8.0 - Layouts, self-update, config overhaul
- v0.7.1 - SLURM username config
- v0.7.0 - Job templates
- v0.6.3 - Performance and responsiveness
- v0.6.2 - Setup wizard fixes
- v0.6.1 - Node metrics, job times, dashboard fixes
- v0.6.0 - Cluster switcher, export, config rename
- v0.5.0 - Auto-discovery, static builds
- v0.4.0 - Performance view, sorting, command mode
- v0.3.0 - Vim navigation, search, filters
- v0.1.0 - Initial release
- Unreleased - Upcoming changes
Semantic Versioning
This project follows Semantic Versioning (MAJOR.MINOR.PATCH):
- MAJOR: Incompatible API changes
- MINOR: Added functionality in a backwards-compatible manner
- PATCH: Backwards-compatible bug fixes
Contributing
If you've found a bug or have a feature request, please check the changelog to see if it's already been addressed or planned. For more information about contributing, refer to the project's contributing guidelines.