🌊 Nautilus - Server Manager
📋 Table of Contents
- About
- Key Features
- Screenshots
- Technologies
- Architecture
- Requirements
- Installation
- Development
- Distribution Build
- Usage Guide
- Project Structure
- Security and Storage
- Contributing
- License
🎯 About
Nautilus is a cross-platform desktop application built with Tauri for professional Linux server management via SSH/SFTP. It offers a modern and intuitive interface with light/dark themes, allowing you to efficiently manage multiple servers through a single application.
The application combines the best of both worlds: the lightweight and secure Tauri (Rust) with the rich user experience of React + Ant Design Pro, resulting in a powerful and performant tool.
✨ Key Features
🔐 Connection Management
- Secure SSH connection storage
- Support for password or private key authentication
- Passwords encrypted in the operating system's secure vault (via keytar)
- Connectivity test before saving
- Multi-server management
📊 Real-Time Dashboard
- CPU, memory, and disk monitoring
- Network statistics (upload/download)
- System uptime
- Monitored services status (systemctl)
- Automatic metrics updates
- Interactive charts with Chart.js
💻 Multi-Tab Terminal
- Full terminal based on xterm.js
- Multiple simultaneous sessions
- Automatic size adjustment
- Command history
- ANSI color support
- Right-click paste
- One-click snippet execution
📁 SFTP File Explorer
- Complete remote file system navigation
- Upload and download files (drag & drop)
- Integrated code editor (CodeMirror)
- Multiple languages with syntax highlighting
- Image and video preview
- Create, rename, and delete files/directories
- Permission management
- Synchronized light/dark theme
- Directory tree collapse to maximize editor
⚙️ Process Manager
- Running process listing (via ps)
- Filter by name, user, or PID
- Detailed information (CPU, memory, user, time)
- Safe process termination with confirmation
- Automatic list refresh
⏰ Cron Jobs Manager
- User cron jobs visualization
- Create and edit scheduled tasks
- User-friendly interface for non-technical users
- Automatic log redirection support
- Execution log viewing
- Cron syntax validation
📝 Reusable Snippets
- Library of frequent commands
- Organization by categories
- Quick execution in active terminal
- Password snippets (secure sending)
- Create, edit, and delete via interface
🎨 Modern Interface
- Design based on Ant Design Pro
- Light and dark themes
- Smooth transitions and animations
- Responsive and adaptive
- Frameless window with custom controls
- "About" modal with system information
📸 Screenshots
🛠 Technologies
Frontend
| Technology | Version | Purpose |
|---|---|---|
| React | 19.2.3 | UI Framework |
| TypeScript | 5.9.3 | Type safety |
| Vite | 7.3.0 | Build tool and dev server |
| Ant Design | 5.29.2 | UI Components |
| Ant Design Pro | 2.8.10 | Advanced components |
| Chart.js | 4.4.2 | Charts and visualizations |
| CodeMirror | 4.25.4 | Code editor |
| xterm.js | 5.3.0 | Terminal emulator |
| dayjs | 1.11.19 | Date manipulation |
Desktop (Tauri)
| Technology | Version | Purpose |
|---|---|---|
| Tauri | 2.9.6 | Desktop framework (Rust) |
| @tauri-apps/api | 2.9.1 | Tauri APIs |
| Plugins | 2.x | Dialog, FS, Shell |
Backend (Sidecar)
| Technology | Version | Purpose |
|---|---|---|
| Node.js | 18+ | Runtime |
| TypeScript | 5.3.0 | Type safety |
| ssh2 | 1.15.0 | SSH/SFTP client |
| keytar | 7.9.0 | Password management |
| winston | 3.13.0 | Logging system |
| pkg | 5.8.1 | Executable packager |
🏗 Architecture
┌─────────────────────────────────────────────────────────────┐
│ Tauri Application (Rust) │
│ Native Desktop Window │
└─────────────────────────────────────────────────────────────┘
│
┌───────────────┴───────────────┐
│ │
┌─────────▼─────────┐ ┌──────────▼──────────┐
│ React Frontend │◄───────►│ Backend Sidecar │
│ (TypeScript/Vite) │ HTTP │ (Node.js/TS) │
│ │ :45678 │ │
└────────────────────┘ └──────────┬──────────┘
│
│ SSH/SFTP
▼
┌──────────────────────┐
│ Linux Server(s) │
└──────────────────────┘
Data Flow
- Frontend (React/TypeScript): User interface rendered in Tauri's webview
- Tauri (Rust): Manages native window and system resources
- Backend Sidecar (Node.js):
- Runs as packaged child process
- Manages SSH/SFTP connections
- Maintains terminal sessions
- Collects server metrics
- Stores connections and snippets locally
- Communication: Frontend ↔ Backend via HTTP REST (localhost:45678)
- Persistence:
- Data in JSON files in the system's
userDatadirectory - Passwords in native OS vault via keytar
- Data in JSON files in the system's
📦 Requirements
For Development
- Node.js 18 or higher
- npm (included with Node.js)
- Rust (to compile Tauri)
- Install via rustup
- OS-specific build tools:
- Windows: Visual Studio Build Tools with C++ toolchain
- Linux:
build-essential,libssl-dev,libsoup-3.0-dev,webkit2gtk-4.1-dev - macOS: Xcode Command Line Tools
For Use
- Remote server running Linux
- SSH enabled on server
- Required commands on server (for full functionality):
uptime,free,df,top,ps,killsystemctl(for service monitoring)/proc/net/dev(for network statistics)
🚀 Installation
Quick Installation
# 1. Clone the repository git clone https://github.com/your-username/Nautilus.git cd Nautilus # 2. Install frontend dependencies npm install # 3. Install backend dependencies cd backend && npm install && cd .. # 4. Ready! Now you can start development npm run tauri:dev
💻 Development
Development Mode with Tauri (Recommended)
This command will:
- Compile backend TypeScript
- Package backend as executable
- Start Vite dev server (hot reload)
- Open Tauri window
Frontend-Only Development Mode
Useful for quick UI development without desktop:
# Terminal 1 - Frontend (http://localhost:5173) npm run dev # Terminal 2 - Backend cd backend && npm run dev
Available Scripts
Main Scripts (project root)
npm run dev # Start Vite frontend only npm run build # Compile frontend npm run preview # Preview frontend build npm run tauri:dev # Full development (frontend + backend + Tauri) npm run tauri:build # Full production build npm run build:backend # Compile and package backend
Backend Scripts (cd backend)
npm run dev # Development with hot-reload (tsx watch) npm start # Run compiled backend npm run build # Full build (TS + pkg Windows) npm run build:ts # Compile TypeScript only npm run build:pkg:win # Package for Windows npm run build:pkg:linux # Package for Linux npm run build:pkg:mac # Package for macOS npm run build:all # Package for all platforms npm run typecheck # Check types without compiling
Native Module Rebuilding
If you encounter issues with native modules like keytar, especially after switching Node.js versions:
cd backend
npm rebuild keytar📦 Distribution Build
Full Production Build
This command will automatically execute:
- ✅ Install backend dependencies
- ✅ Compile backend TypeScript
- ✅ Package backend as executable (pkg)
- ✅ Compile frontend (Vite)
- ✅ Build Tauri for current OS
- ✅ Generate installers
Multi-Platform Build
To generate backend executables for all platforms:
cd backend
npm run build:allThis will create:
nautilus-backend-x86_64-pc-windows-msvc.exe(Windows)nautilus-backend-x86_64-unknown-linux-gnu(Linux)nautilus-backend-x86_64-apple-darwin(macOS)
Note: Tauri build can only be done natively on each platform. To create Windows installers, compile on Windows; for macOS, compile on macOS, etc.
Build Output
After building, you'll find:
Tauri Installers
📁 src-tauri/target/release/bundle/
- Windows:
Nautilus_1.0.0_x64.msi(MSI Installer)Nautilus_1.0.0_x64_en-US.msi(Localized)
- Linux:
nautilus_1.0.0_amd64.AppImage(Portable AppImage)nautilus_1.0.0_amd64.deb(Debian package)
- macOS:
Nautilus_1.0.0_x64.dmg(DMG Installer)
Backend Sidecar
📁 src-tauri/binaries/
- Compiled and packaged backend for each platform
Compiled Frontend
📁 dist/
- Compiled and optimized React application
📖 Usage Guide
1️⃣ First Run
When opening Nautilus for the first time:
- Welcome Screen: Wait for backend initialization
- Click "Enter": Access main interface
- No connections found: You'll see a prompt to create your first connection
2️⃣ Managing Connections
Create New Connection
- Click "+ New Connection" button in sidebar
- Fill in the data:
- Name: Friendly identifier (e.g., "Production Server")
- Host: IP or hostname (e.g.,
192.168.1.100orserver.example.com) - Port: SSH port (default: 22)
- Username: SSH username
- Authentication Method:
- Password: Enter password (will be stored securely)
- Private Key: Select key file (e.g.,
~/.ssh/id_rsa)
- Click "Test & Save"
- Wait for connection validation
Connect to a Server
- Select connection from sidebar list
- Wait for dashboard to load
- Status icon will turn green when connected
3️⃣ Dashboard
After connecting, you'll see:
-
Real-Time Metrics:
- 🔄 CPU Usage (%)
- 💾 RAM Memory (used/total)
- 💿 Disk Space (/)
- 🌐 Network Traffic (RX/TX)
- ⏱️ System Uptime
-
Monitored Services:
- Service status via systemctl
- Visual indication (active/inactive)
4️⃣ Terminal
Open Terminal
- Click "Terminal" tab in top menu
- Click "+" button to create new tab
- Type commands normally
- Use Ctrl+C to interrupt processes
Special Features
- Multiple Tabs: Manage several sessions simultaneously
- Rename Tab: Right-click on tab
- Paste: Right-click in terminal area
- Snippets: Click a snippet in sidebar to execute
5️⃣ Files (SFTP)
Navigation
- Click "Files" tab
- Use directory tree on left to navigate
- Click collapse icon to maximize editor
Upload Files
- Method 1: Click "Upload" button and select files
- Method 2: Drag and drop files into interface
Download Files
- Right-click on file → "Download"
- Choose destination location
Edit Files
- Double-click on a text file
- CodeMirror editor will open
- Make changes
- Press Ctrl+S to save
- Editor theme follows application theme
Create/Delete
- New File: "New File" button → Enter name
- New Folder: "New Folder" button → Enter name
- Delete: Right-click → "Delete" → Confirm
6️⃣ Processes
- Click "Processes" tab
- View running processes list
- Use search bar to filter by:
- Process name
- PID
- User
- Click "Refresh" to reload list
- To terminate a process:
- Click "Kill" button
- Confirm action
7️⃣ Cron Jobs
View Cron Jobs
- Click "Cron" tab
- See all user cron jobs
- Jobs with logs have "View Log" button
Create New Cron Job
- Click "New Cron Job"
- Configure:
- Minute (0-59 or *)
- Hour (0-23 or *)
- Day of Month (1-31 or *)
- Month (1-12 or *)
- Day of Week (0-6 or *, 0=Sunday)
- Command: Command to execute
- Log: Enable to redirect output to file
- Click "Save"
Edit/Delete
- Edit: Click edit icon → Modify → Save
- Delete: Click trash icon → Confirm
8️⃣ Snippets
Create Snippet
- Click "Snippets" in sidebar
- Click "+"
- Fill in:
- Name: Identifier
- Command: Command to execute
- Category (optional)
- Save
Use Snippet
- Have a terminal open
- Click snippet in list
- Command will be executed automatically in active terminal
Password Snippet
To send passwords securely:
- Create a snippet
- Mark as "Type: Password"
- Enter password
- When clicked, password is sent without appearing in terminal
9️⃣ Themes
Switch between light and dark themes:
- Click 🌙/☀️ icon in top right corner
- Theme is applied instantly across entire application
- Includes: UI, terminal, code editor, charts
🔟 System Information
- Click "i" icon in top right corner
- View Nautilus information
- Version, credits, etc.
📂 Project Structure
Nautilus/
│
├── 📁 src/ # React + TypeScript Frontend
│ ├── 📁 assets/ # Images and static resources
│ │ └── splash-screen.png
│ ├── 📁 components/ # Reusable React components
│ │ ├── SplashScreen.tsx
│ │ ├── 📁 cron/ # Cron management components
│ │ ├── 📁 dashboard/ # Dashboard cards and charts
│ │ ├── 📁 files/ # SFTP file explorer
│ │ ├── 📁 modals/ # Modals (About, Connections, etc)
│ │ ├── 📁 processes/ # Process manager
│ │ └── 📁 terminal/ # xterm.js terminal
│ ├── 📁 context/ # React contexts
│ │ ├── ConnectionContext.tsx # Global connection state
│ │ └── ThemeContext.tsx # Theme management
│ ├── 📁 hooks/ # Custom hooks
│ ├── 📁 layouts/ # Main layouts
│ │ └── MainLayout.tsx # Layout with sidebar and header
│ ├── 📁 theme/ # Ant Design theme configuration
│ │ └── themeConfig.ts
│ ├── 📁 utils/ # Utility functions
│ ├── App.tsx # Root component
│ ├── main.tsx # React entry point
│ ├── index.css # Global styles
│ ├── tauri-bridge.ts # Backend communication bridge
│ └── types.ts # TypeScript type definitions
│
├── 📁 src-tauri/ # Tauri Application (Rust)
│ ├── 📁 src/ # Rust code
│ │ ├── main.rs # Tauri entry point
│ │ └── lib.rs
│ ├── 📁 icons/ # Application icons
│ ├── 📁 binaries/ # Compiled backend sidecar
│ │ └── nautilus-backend-*.exe
│ ├── 📁 target/ # Build output
│ │ └── release/
│ │ └── bundle/ # Installers (.msi, .deb, .dmg)
│ ├── tauri.conf.json # Tauri configuration
│ ├── Cargo.toml # Rust dependencies
│ └── build.rs
│
├── 📁 backend/ # Node.js Backend (Sidecar)
│ ├── 📁 src/ # TypeScript code
│ │ ├── index.ts # HTTP server + routes
│ │ ├── 📁 models/ # Data models
│ │ │ ├── Connection.ts
│ │ │ ├── Snippet.ts
│ │ │ └── Terminal.ts
│ │ ├── 📁 services/ # Business logic
│ │ │ ├── ConnectionService.ts # Connection CRUD
│ │ │ ├── SSHService.ts # SSH management
│ │ │ ├── SFTPService.ts # SFTP operations
│ │ │ ├── MetricsService.ts # Metrics collection
│ │ │ ├── ProcessService.ts # Process listing and kill
│ │ │ ├── CronService.ts # Cron management
│ │ │ └── SnippetService.ts # Snippet CRUD
│ │ ├── 📁 types/ # TypeScript types
│ │ │ └── index.ts
│ │ └── 📁 utils/ # Helper functions
│ │ └── logger.ts # Logging system (winston)
│ ├── 📁 dist/ # Compiled TypeScript
│ ├── package.json
│ ├── tsconfig.json
│ └── pkg.json # pkg configuration
│
├── 📁 dist/ # Compiled frontend (Vite)
├── 📁 node_modules/ # npm dependencies
├── 📁 .vscode/ # VS Code settings
├── 📁 .agent/ # Agent configurations
│
├── package.json # Main dependencies and scripts
├── package-lock.json
├── tsconfig.json # TypeScript config (frontend)
├── vite.config.ts # Vite config
├── postcss.config.js # PostCSS config
├── .gitignore
├── LICENSE # MIT License
└── README.md # This file
🔒 Security and Storage
Local Data
Nautilus stores data locally in the system's userData directory:
- Windows:
%APPDATA%\nti.nautilus\ - Linux:
~/.config/nti.nautilus/ - macOS:
~/Library/Application Support/nti.nautilus/
Stored files:
userData/
├── connections.json # Connection list (without passwords)
├── snippets.json # Snippet library
└── logs/ # Backend logs (winston)
└── application-YYYY-MM-DD.log
Secure Password Storage
SSH passwords are NEVER stored in plain text. Nautilus uses the keytar library, which:
- Windows: Uses Windows Credential Manager
- Linux: Uses libsecret (GNOME Keyring/KWallet)
- macOS: Uses macOS Keychain
Each password is stored with a unique key based on connection ID:
Service: nautilus-ssh
Account: connection-{uuid}
Password: (encrypted by OS)
Private Keys
When using private key authentication:
- Nautilus reads the key file only during connection
- The key is never copied or stored
- Only the path to the key is saved in
connections.json
Network Traffic
- ✅ All SSH/SFTP connections are encrypted (standard SSH protocol)
- ✅ Frontend ↔ Backend communication is via
localhost(doesn't leave machine) - ✅ No data is sent to external servers
- ✅ No telemetry or tracking
Best Practices
To maximize security:
- ✅ Use SSH keys instead of passwords when possible
- ✅ Keep your private keys protected with passphrase
- ✅ Don't share the
connections.jsonfile - ✅ Run Nautilus only on trusted machines
- ✅ Keep the application always updated
🤝 Contributing
Contributions are welcome! To contribute:
Report Bugs
- Check if the bug has already been reported in Issues
- Create a new issue with:
- Clear problem description
- Steps to reproduce
- Operating system and version
- Relevant logs (if applicable)
Suggest Features
- Open an issue with the
enhancementtag - Describe the desired feature
- Explain the use case
Pull Requests
- Fork the project
- Create a branch for your feature (
git checkout -b feature/MyNewFeature) - Commit your changes (
git commit -m 'Add MyNewFeature') - Push to the branch (
git push origin feature/MyNewFeature) - Open a Pull Request
Code Guidelines
- Use TypeScript for all new code
- Follow existing code style
- Add comments to complex code
- Test your changes before submitting
📜 License
This project is licensed under the MIT License.
MIT License
Copyright (c) 2025 Ricardo Borges
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
See the LICENSE file for more details.
🙏 Acknowledgments
- Tauri - Amazing desktop framework
- React - Powerful UI library
- Ant Design - Complete design system
- xterm.js - Terminal emulator
- CodeMirror - Code editor
- ssh2 - SSH client for Node.js
- Open-source community
⭐ If you liked Nautilus, consider giving the project a star!


