Prerequisites
Required Software
- Node.js 18+ and npm
- Git
- Platform-specific tools:
- macOS: Xcode Command Line Tools
- Windows: Visual Studio Build Tools (C++ workload)
- Linux: build-essential, python3
Installation
- macOS
- Windows
- Linux (Ubuntu/Debian)
Clone Repository
FromREADME.md:229-238:
Development Setup
Install Dependencies
Frompackage.json:11-29 and README.md:235:
The
postinstall script automatically rebuilds native modules (node-pty, serialport, etc.) for Electron and applies necessary patches.Development Mode
Frompackage.json:12-13:
- Runs ESLint to check code quality
- Starts Vite dev server on
http://localhost:5173 - Waits for Vite to be ready
- Launches Electron pointing to the dev server
Hot Reload
In development mode:- Renderer process (React): Hot Module Replacement (HMR) via Vite
- Main process (Electron): Restart required (close and re-run
npm run dev)
Linting
Frompackage.json:27-28:
eslint.config.js.
Project Structure
FromREADME.md:241-258:
Building for Production
Production Build
Frompackage.json:15-16:
- Runs
prebuildscript:node scripts/copy-monaco.cjs(copies Monaco Editor assets) - Runs Vite build: bundles React app to
dist/ - Output: Optimized JavaScript, CSS, and assets
vite.config.ts
Preview Production Build
Running Production Build
Packaging
Package for Current Platform
Frompackage.json:18:
dist/ directory:
- macOS:
.dmgand.zip - Windows:
.exeinstaller - Linux:
.AppImage,.deb,.rpm
Package for Specific Platforms
Frompackage.json:20-22 and README.md:266-276:
Package to Directory (No Installer)
Frompackage.json:19:
Electron Builder Configuration
Packaging is configured inelectron-builder.config.cjs.
Supported Architectures
FromREADME.md:209-214:
| OS | Support |
|---|---|
| macOS | Universal (x64 / arm64) |
| Windows | x64 / arm64 |
| Linux | x64 / arm64 |
Build Artifacts
After packaging, artifacts are indist/:
Native Dependencies
Netcatty uses several native Node.js modules that require compilation:- node-pty (1.1.0-beta19) - PTY (pseudoterminal) for local shell
- serialport (13.0.0) - Serial port communication
- ssh2 (via ssh2-sftp-client) - SSH protocol implementation
Rebuilding Native Modules
Frompackage.json:25-26:
electron-builder install-app-deps to rebuild native modules against Electron’s Node.js version.
Troubleshooting Native Modules
Build fails onnode-pty:
serialport:
Environment Variables
Development
Build
package.json:18:
Build Scripts Reference
Frompackage.json:11-28:
| Script | Command | Purpose |
|---|---|---|
dev | npm run lint && concurrently ... | Start development mode |
build | vite build | Build production bundle |
preview | vite preview | Preview production build |
start | node electron/launch.cjs | Run production app |
pack | npm run build && electron-builder ... | Package for current platform |
pack:dir | ... --dir ... | Package to directory (no installer) |
pack:win | ... --win ... | Package for Windows |
pack:mac | ... --mac ... | Package for macOS |
pack:linux | ... --linux ... | Package for Linux |
pack:linux-x64 | ... --linux --x64 ... | Package for Linux x64 |
pack:linux-arm64 | ... --linux --arm64 ... | Package for Linux ARM64 |
postinstall | electron-builder install-app-deps && patch-package | Rebuild natives + apply patches |
rebuild | electron-builder install-app-deps | Rebuild native modules |
lint | eslint . | Check code style |
lint:fix | eslint . --fix | Auto-fix code style |
Dependencies
Runtime Dependencies
Key dependencies frompackage.json:30-63:
Core:
electron(40.1.0)react(19.2.1)react-dom(19.2.1)
@xterm/xterm(5.5.0)@xterm/addon-fit,@xterm/addon-webgl, etc.
ssh2-sftp-client(12.0.1)node-pty(1.1.0-beta19)serialport(13.0.0)
@radix-ui/*(various) - Headless UI componentslucide-react(0.560.0) - Icons@monaco-editor/react(4.7.0) - Code editortailwind-merge(3.4.0),clsx(2.1.1) - CSS utilities
@fontsource/jetbrains-mono(5.2.8)@fontsource/space-grotesk(5.2.10)
Development Dependencies
Key devDependencies frompackage.json:65-84:
Build:
vite(7.2.7)@vitejs/plugin-react(5.1.2)electron-builder(26.0.12)
tailwindcss(4.1.17)@tailwindcss/vite,@tailwindcss/postcss(4.1.17)
typescript(5.9.3)@types/node(25.0.0)
eslint(9.39.1)@typescript-eslint/eslint-plugin,@typescript-eslint/parser(8.49.0)eslint-plugin-react-hooks(7.0.1)eslint-plugin-unused-imports(4.3.0)
concurrently(9.2.1) - Run multiple commandscross-env(10.1.0) - Cross-platform environment variableswait-on(9.0.3) - Wait for dev serverpatch-package(8.0.0) - Patch node_modules
Vite Configuration
Build configuration invite.config.ts:
Troubleshooting
Build Errors
Error: Cannot find module ‘electron’Development Issues
Hot reload not working:- Check that Vite dev server is running on port 5173
- Restart
npm run dev - Clear browser cache (Ctrl+Shift+R / Cmd+Shift+R)
- Check DevTools Console for errors (Ctrl+Shift+I / Cmd+Option+I)
- Verify Vite dev server is accessible at
http://localhost:5173 - Check
electron/main.cjsfor loading errors
- Restart
npm run dev(main process doesn’t hot reload)
Packaging Issues
macOS: “App is damaged” SeeREADME.md:217-221:
- Ensure Visual Studio C++ Redistributable is installed
- Electron includes necessary DLLs in packaged app
Next Steps
Architecture
Understand the codebase structure
Contributing
Learn how to contribute to Netcatty
