NDS - Noras Detached Shell ๐
Simple detachable shell sessions with zero configuration. Not a complex multiplexer like tmux or screen - just clean, persistent sessions you can attach and detach as needed.
Features โข Installation โข Usage โข Documentation โข Contributing
โจ Features
- ๐ฏ Simple Session Management: Create, detach, and reattach shell sessions with ease
- ๐ชถ Lightweight: < 1MB single binary with zero configuration required
- โก Fast: Written in Rust for maximum performance
- ๐จ User-Friendly: Intuitive commands with partial ID matching
- ๐ฅ๏ธ Interactive Mode: Visual session picker with arrow key navigation
- ๐ Session History: Track all session events with persistent history
- ๐งน Auto-Cleanup: Automatic cleanup of dead sessions
- ๐ Session Switching: Simple attach/detach without complex multiplexing
- ๐ท๏ธ Named Sessions: Give meaningful names to your sessions
- ๐ง Cross-Platform: Works on Linux and macOS
๐ฏ Philosophy
NDS transforms your normal shell into a detachable, persistent session without changing how you work. No panes, no tabs, no complex layouts - just your shell, but better. When you need splits or tabs, your terminal emulator already handles that perfectly. NDS does one thing exceptionally well: making any shell session detachable and persistent.
๐ฆ Installation
Using Cargo
From Source
# Clone the repository
# Build and install (recommended)
# Or manually
๐ Quick Start
# Create a new session
# List sessions
# Attach to a session
# Detach from current session
# Press Enter, then ~d (like SSH's escape sequences)
๐ Usage
Creating Sessions
# Create and attach to a new session
# Create a named session
# Create without attaching
Managing Sessions
# List all active sessions
# Interactive session picker
# Attach to a session (supports partial ID matching)
# Kill sessions
# Clean up dead sessions
Session Information
# Get detailed info about a session
# Rename a session
# View session history
Keyboard Shortcuts (Inside Session)
Enter, ~d- Detach from current session (like SSH's~.sequence)
๐๏ธ Architecture
NDS uses a simple and robust architecture:
- PTY Management: Each session runs in its own pseudo-terminal
- Unix Sockets: Communication via Unix domain sockets
- JSON Metadata: Session info stored in
~/.nds/sessions/ - Per-Session History: History stored in
~/.nds/history/ - Zero Dependencies: Minimal external dependencies for reliability
Directory Structure
~/.nds/
โโโ sessions/ # Session metadata (JSON)
โโโ sockets/ # Unix domain sockets
โโโ history/ # Session history
โโโ active/ # Currently running sessions
โโโ archived/ # Terminated sessions
๐ง Configuration
NDS works out of the box with zero configuration. However, you can customize:
Environment Variables
# Change default shell (default: $SHELL or /bin/sh)
# Change detach key binding (coming soon)
๐ค Contributing
We love contributions! Please see CONTRIBUTING.md for details.
Development Setup
# Clone the repo
# Run tests
# Run with debug logs
RUST_LOG=debug
# Quick rebuild and test
Running Tests
# Run all tests
# Run with coverage
# Run benchmarks
๐ง Project Status
Alpha Release - NDS is in active development. Core functionality is stable, but expect breaking changes.
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ Acknowledgments
๐ Troubleshooting
Session not found after reboot
Sessions don't persist across system reboots by design. Use nds history --all to see past sessions.
Permission denied errors
Ensure ~/.nds/ directory has proper permissions:
Can't detach from session
Make sure you're using the correct key sequence: press Enter first, then ~d (similar to SSH's escape sequences).
๐ฎ Support
- ๐ Report bugs
- ๐ก Request features
- ๐ฌ Discussions