- About
- Key Features
- Screenshots
- Technologies
- Architecture
- Requirements
- Installation
- Development
- Distribution Build
- Usage Guide
- Project Structure
- Security and Storage
- Contributing
- License
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.
- 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
- CPU, memory, and disk monitoring
- Network statistics (upload/download)
- System uptime
- Monitored services status (systemctl)
- Automatic metrics updates
- Interactive charts with Chart.js
- Full terminal based on xterm.js
- Multiple simultaneous sessions
- Automatic size adjustment
- Command history
- ANSI color support
- Right-click paste
- One-click snippet execution
- 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
- 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
- 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
- Library of frequent commands
- Organization by categories
- Quick execution in active terminal
- Password snippets (secure sending)
- Create, edit, and delete via 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
| 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 |
| Technology | Version | Purpose |
|---|---|---|
| Tauri | 2.9.6 | Desktop framework (Rust) |
| @tauri-apps/api | 2.9.1 | Tauri APIs |
| Plugins | 2.x | Dialog, FS, Shell |
| 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 |
┌─────────────────────────────────────────────────────────────┐
│ Tauri Application (Rust) │
│ Native Desktop Window │
└─────────────────────────────────────────────────────────────┘
│
┌───────────────┴───────────────┐
│ │
┌─────────▼─────────┐ ┌──────────▼──────────┐
│ React Frontend │◄───────►│ Backend Sidecar │
│ (TypeScript/Vite) │ HTTP │ (Node.js/TS) │
│ │ :45678 │ │
└────────────────────┘ └──────────┬──────────┘
│
│ SSH/SFTP
▼
┌──────────────────────┐
│ Linux Server(s) │
└──────────────────────┘
- 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
- 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
- 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)
# 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:devnpm run tauri:devThis command will:
- Compile backend TypeScript
- Package backend as executable
- Start Vite dev server (hot reload)
- Open Tauri window
Useful for quick UI development without desktop:
# Terminal 1 - Frontend (http://localhost:5173)
npm run dev
# Terminal 2 - Backend
cd backend && npm run devnpm 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 backendnpm 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 compilingIf you encounter issues with native modules like keytar, especially after switching Node.js versions:
cd backend
npm rebuild keytarnpm run tauri:buildThis 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
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.
After building, you'll find:
📁 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)
📁 src-tauri/binaries/
- Compiled and packaged backend for each platform
📁 dist/
- Compiled and optimized React application
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
- 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
- Select connection from sidebar list
- Wait for dashboard to load
- Status icon will turn green when connected
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)
- Click "Terminal" tab in top menu
- Click "+" button to create new tab
- Type commands normally
- Use Ctrl+C to interrupt processes
- 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
- Click "Files" tab
- Use directory tree on left to navigate
- Click collapse icon to maximize editor
- Method 1: Click "Upload" button and select files
- Method 2: Drag and drop files into interface
- Right-click on file → "Download"
- Choose destination location
- Double-click on a text file
- CodeMirror editor will open
- Make changes
- Press Ctrl+S to save
- Editor theme follows application theme
- New File: "New File" button → Enter name
- New Folder: "New Folder" button → Enter name
- Delete: Right-click → "Delete" → Confirm
- 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
- Click "Cron" tab
- See all user cron jobs
- Jobs with logs have "View Log" button
- 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: Click edit icon → Modify → Save
- Delete: Click trash icon → Confirm
- Click "Snippets" in sidebar
- Click "+"
- Fill in:
- Name: Identifier
- Command: Command to execute
- Category (optional)
- Save
- Have a terminal open
- Click snippet in list
- Command will be executed automatically in active terminal
To send passwords securely:
- Create a snippet
- Mark as "Type: Password"
- Enter password
- When clicked, password is sent without appearing in terminal
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
- Click "i" icon in top right corner
- View Nautilus information
- Version, credits, etc.
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
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
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)
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
- ✅ 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
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
Contributions are welcome! To contribute:
- 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)
- Open an issue with the
enhancementtag - Describe the desired feature
- Explain the use case
- 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
- Use TypeScript for all new code
- Follow existing code style
- Add comments to complex code
- Test your changes before submitting
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.
- 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!


