π Nautilus - Server Manager
Modern and powerful desktop Linux 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, alloβ¦
π Nautilus - Server Manager
Modern and powerful desktop Linux 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
π¦ 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,kill -
systemctl(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)
npm run tauri:dev
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
npm run tauri: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:all
This 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!