✨ A beautiful desktop companion app with Live2D character and AI chat ✨
- 🎨 Live2D Character Display - Beautiful animated characters rendered with WebGL
- 🤖 AI Chat Integration - Connect to LLM APIs (OpenAI, MiniMax, or any OpenAI-compatible endpoint)
- 🌐 WebSocket Server - Built-in WebSocket server for external integrations
- 🔲 Frameless Overlay - Transparent, always-on-top floating window
- 💬 Context Menu Settings - Right-click to configure model, window, and LLM
- 📦 System Tray - Runs quietly in background
- 👤 Identity & Soul Settings - Customize character's identity and personality
Download the latest release for your platform:
- Windows:
Nova Link_x.x.x_x64-setup.exe - macOS:
Nova Link_x.x.x_x64.dmg/Nova Link_x.x.x_aarch64.dmg - Linux:
Nova Link_x.x.x_amd64.AppImage
# Install dependencies
npm install
# Run in development mode
npm run tauri dev# Build for current platform
npm run tauri build
# Build for all platforms (requires cross-compilation toolchains)
npm run tauri build -- --target x86_64-pc-windows-msvc
npm run tauri build -- --target x86_64-apple-darwin
npm run tauri build -- --target aarch64-apple-darwin
npm run tauri build -- --target x86_64-unknown-linux-gnuRight-click anywhere on the window to access the context menu:
| Setting | Description |
|---|---|
| Model Path | Path to Live2D model (.model3.json) |
| Window | Width and height dimensions |
| WebSocket URL | Server endpoint for external clients |
| Chat Provider | OpenClaw Gateway / LLM |
| LLM Provider | Choose: None / MiniMax / OpenAI Compatible |
| API Key | Your LLM API key |
| API URL | LLM API endpoint |
| Model | Model name to use |
Open "Character Settings" from the right-click menu to configure:
- Identity Settings: Name, creature type, temperament, emoji, avatar
- Soul Settings: Character personality, speaking style, emotion triggers
- App Settings: Model path, window, chat provider, LLM configuration
Identity and Soul settings are automatically synced to ~/.openclaw/workspace/ directory.
Nova Link runs a WebSocket server on ws://localhost:18789 (configurable). External clients can connect and send messages:
{
"type": "message",
"content": "Hello!",
"sender_id": "client_1",
"chat_id": "default"
}┌─────────────────────────┐
│ Nova Link App │
├─────────────────────────┤
│ Tauri (Rust) │
│ ├─ WebSocket Server │
│ ├─ LLM Integration │
│ ├─ SQLite Storage │
│ └─ System Tray │
├─────────────────────────┤
│ WebView (TypeScript) │
│ ├─ PIXI.js │
│ ├─ Live2D Display │
│ └─ Chat UI │
└─────────────────────────┘
Multi-layer transparency mechanism for cross-platform support (macOS/Windows/Linux):
- Tauri config:
"transparent": true - Rust setup:
window.eval()injects JS to set transparent styles - Vue rendering:
setTimeout(..., 100)delays style application until DOM renders - Multi-layer: body, documentElement, #app, #live2d-canvas all set to transparent
- Frontend: TypeScript, Vite, PIXI.js, pixi-live2d-display, Vue 3
- Backend: Rust, Tauri v2, tokio-tungstenite, rusqlite
- Build: GitHub Actions, tauri-action
Thanks to all the contributors:
| Contributor | Description |
|---|---|
| tangtianshuo | Founder, Main Developer |
MIT License - see LICENSE for details.
Made with ❤️ by Nova Link Team