|
@@ -1,172 +1,73 @@
|
|
|
# New API Electron Desktop App
|
|
# New API Electron Desktop App
|
|
|
|
|
|
|
|
-This directory contains the Electron wrapper for New API, allowing it to run as a native desktop application on Windows, macOS, and Linux.
|
|
|
|
|
|
|
+This directory contains the Electron wrapper for New API, providing a native desktop application with system tray support for Windows, macOS, and Linux.
|
|
|
|
|
|
|
|
-## Architecture
|
|
|
|
|
|
|
+## Prerequisites
|
|
|
|
|
|
|
|
-The Electron app consists of:
|
|
|
|
|
-- **main.js**: Main process that spawns the Go backend server and creates the application window
|
|
|
|
|
-- **preload.js**: Preload script for secure context isolation
|
|
|
|
|
-- **package.json**: Electron dependencies and build configuration
|
|
|
|
|
|
|
+### 1. Go Binary (Required)
|
|
|
|
|
+The Electron app requires the compiled Go binary to function. You have two options:
|
|
|
|
|
|
|
|
-## Development
|
|
|
|
|
-
|
|
|
|
|
-### Prerequisites
|
|
|
|
|
-
|
|
|
|
|
-1. Build the Go backend first:
|
|
|
|
|
|
|
+**Option A: Use existing binary (without Go installed)**
|
|
|
```bash
|
|
```bash
|
|
|
-cd ..
|
|
|
|
|
-go build -o new-api
|
|
|
|
|
|
|
+# If you have a pre-built binary (e.g., new-api-macos)
|
|
|
|
|
+cp ../new-api-macos ../new-api
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-2. Install Electron dependencies:
|
|
|
|
|
|
|
+**Option B: Build from source (requires Go)**
|
|
|
|
|
+TODO
|
|
|
|
|
+
|
|
|
|
|
+### 3. Electron Dependencies
|
|
|
```bash
|
|
```bash
|
|
|
cd electron
|
|
cd electron
|
|
|
npm install
|
|
npm install
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-### Running in Development Mode
|
|
|
|
|
|
|
+## Development
|
|
|
|
|
|
|
|
|
|
+Run the app in development mode:
|
|
|
```bash
|
|
```bash
|
|
|
npm start
|
|
npm start
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
This will:
|
|
This will:
|
|
|
- Start the Go backend on port 3000
|
|
- Start the Go backend on port 3000
|
|
|
-- Open an Electron window pointing to `http://localhost:3000`
|
|
|
|
|
-- Enable DevTools for debugging
|
|
|
|
|
|
|
+- Open an Electron window with DevTools enabled
|
|
|
|
|
+- Create a system tray icon (menu bar on macOS)
|
|
|
|
|
+- Store database in `../data/new-api.db`
|
|
|
|
|
|
|
|
## Building for Production
|
|
## Building for Production
|
|
|
|
|
|
|
|
-### Quick Build (Current Platform)
|
|
|
|
|
-
|
|
|
|
|
-Use the provided build script:
|
|
|
|
|
|
|
+### Quick Build
|
|
|
```bash
|
|
```bash
|
|
|
-./build.sh
|
|
|
|
|
-```
|
|
|
|
|
-
|
|
|
|
|
-This will:
|
|
|
|
|
-1. Build the frontend (web/dist)
|
|
|
|
|
-2. Build the Go binary for your platform
|
|
|
|
|
-3. Package the Electron app
|
|
|
|
|
-
|
|
|
|
|
-### Manual Build Steps
|
|
|
|
|
-
|
|
|
|
|
-1. Build frontend:
|
|
|
|
|
-```bash
|
|
|
|
|
-cd ../web
|
|
|
|
|
-DISABLE_ESLINT_PLUGIN='true' bun run build
|
|
|
|
|
-```
|
|
|
|
|
|
|
+# Ensure Go binary exists in parent directory
|
|
|
|
|
+ls ../new-api # Should exist
|
|
|
|
|
|
|
|
-2. Build backend:
|
|
|
|
|
-```bash
|
|
|
|
|
-cd ..
|
|
|
|
|
-# macOS/Linux
|
|
|
|
|
-go build -ldflags="-s -w" -o new-api
|
|
|
|
|
-
|
|
|
|
|
-# Windows
|
|
|
|
|
-go build -ldflags="-s -w" -o new-api.exe
|
|
|
|
|
-```
|
|
|
|
|
-
|
|
|
|
|
-3. Build Electron app:
|
|
|
|
|
-```bash
|
|
|
|
|
-cd electron
|
|
|
|
|
-npm install
|
|
|
|
|
-
|
|
|
|
|
-# All platforms
|
|
|
|
|
|
|
+# Build for current platform
|
|
|
npm run build
|
|
npm run build
|
|
|
|
|
|
|
|
-# Or specific platforms
|
|
|
|
|
-npm run build:mac # macOS (DMG, ZIP)
|
|
|
|
|
-npm run build:win # Windows (NSIS installer, Portable)
|
|
|
|
|
-npm run build:linux # Linux (AppImage, DEB)
|
|
|
|
|
-```
|
|
|
|
|
-
|
|
|
|
|
-### Output
|
|
|
|
|
-
|
|
|
|
|
-Built apps are located in `electron/dist/`:
|
|
|
|
|
-- **macOS**: `.dmg` and `.zip`
|
|
|
|
|
-- **Windows**: `.exe` installer and portable `.exe`
|
|
|
|
|
-- **Linux**: `.AppImage` and `.deb`
|
|
|
|
|
-
|
|
|
|
|
-## Cross-Platform Building
|
|
|
|
|
-
|
|
|
|
|
-To build for other platforms:
|
|
|
|
|
-
|
|
|
|
|
-```bash
|
|
|
|
|
-# From macOS, build Windows app
|
|
|
|
|
-npm run build:win
|
|
|
|
|
-
|
|
|
|
|
-# From macOS, build Linux app
|
|
|
|
|
-npm run build:linux
|
|
|
|
|
|
|
+# Platform-specific builds
|
|
|
|
|
+npm run build:mac # Creates .dmg and .zip
|
|
|
|
|
+npm run build:win # Creates .exe installer
|
|
|
|
|
+npm run build:linux # Creates .AppImage and .deb
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-Note: Building macOS apps requires macOS. Building Windows apps with code signing requires Windows.
|
|
|
|
|
|
|
+### Build Output
|
|
|
|
|
+- Built applications are in `electron/dist/`
|
|
|
|
|
+- macOS: `.dmg` (installer) and `.zip` (portable)
|
|
|
|
|
+- Windows: `.exe` (installer) and portable exe
|
|
|
|
|
+- Linux: `.AppImage` and `.deb`
|
|
|
|
|
|
|
|
## Configuration
|
|
## Configuration
|
|
|
|
|
|
|
|
### Port
|
|
### Port
|
|
|
-
|
|
|
|
|
-The app uses port 3000 by default. To change:
|
|
|
|
|
-
|
|
|
|
|
-Edit `electron/main.js`:
|
|
|
|
|
|
|
+Default port is 3000. To change, edit `main.js`:
|
|
|
```javascript
|
|
```javascript
|
|
|
-const PORT = 3000; // Change to your desired port
|
|
|
|
|
|
|
+const PORT = 3000; // Change to desired port
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-### Data Directory
|
|
|
|
|
-
|
|
|
|
|
-- **Development**: Uses `data/` in the project root
|
|
|
|
|
-- **Production**: Uses Electron's `userData` directory:
|
|
|
|
|
|
|
+### Database Location
|
|
|
|
|
+- **Development**: `../data/new-api.db` (project directory)
|
|
|
|
|
+- **Production**:
|
|
|
- macOS: `~/Library/Application Support/New API/data/`
|
|
- macOS: `~/Library/Application Support/New API/data/`
|
|
|
- Windows: `%APPDATA%/New API/data/`
|
|
- Windows: `%APPDATA%/New API/data/`
|
|
|
- Linux: `~/.config/New API/data/`
|
|
- Linux: `~/.config/New API/data/`
|
|
|
-
|
|
|
|
|
-### Window Size
|
|
|
|
|
-
|
|
|
|
|
-Edit `electron/main.js` in the `createWindow()` function:
|
|
|
|
|
-```javascript
|
|
|
|
|
-mainWindow = new BrowserWindow({
|
|
|
|
|
- width: 1400, // Change width
|
|
|
|
|
- height: 900, // Change height
|
|
|
|
|
- // ...
|
|
|
|
|
-});
|
|
|
|
|
-```
|
|
|
|
|
-
|
|
|
|
|
-## Troubleshooting
|
|
|
|
|
-
|
|
|
|
|
-### Server fails to start
|
|
|
|
|
-
|
|
|
|
|
-Check the console logs in DevTools (Cmd/Ctrl+Shift+I). Common issues:
|
|
|
|
|
-- Go binary not found (ensure it's built)
|
|
|
|
|
-- Port 3000 already in use
|
|
|
|
|
-- Database file permission issues
|
|
|
|
|
-
|
|
|
|
|
-### Binary not found in production
|
|
|
|
|
-
|
|
|
|
|
-Ensure the Go binary is built before running `electron-builder`:
|
|
|
|
|
-```bash
|
|
|
|
|
-go build -o new-api # macOS/Linux
|
|
|
|
|
-go build -o new-api.exe # Windows
|
|
|
|
|
-```
|
|
|
|
|
-
|
|
|
|
|
-The binary must be in the project root, not inside `electron/`.
|
|
|
|
|
-
|
|
|
|
|
-### Database issues
|
|
|
|
|
-
|
|
|
|
|
-If you encounter database errors, delete the data directory and restart:
|
|
|
|
|
-- Dev: `rm -rf data/`
|
|
|
|
|
-- Prod: Clear Electron's userData folder (see "Data Directory" above)
|
|
|
|
|
-
|
|
|
|
|
-## Icon
|
|
|
|
|
-
|
|
|
|
|
-To add a custom icon:
|
|
|
|
|
-1. Place a 512x512 PNG icon at `electron/icon.png`
|
|
|
|
|
-2. Rebuild the app with `npm run build`
|
|
|
|
|
-
|
|
|
|
|
-## Security
|
|
|
|
|
-
|
|
|
|
|
-- Context isolation is enabled
|
|
|
|
|
-- Node integration is disabled in renderer process
|
|
|
|
|
-- Only safe APIs are exposed via preload script
|
|
|
|
|
-- Backend runs as a local subprocess with no external network access by default
|
|
|