Alexis Purslane 11dedd4446 Implement complete native menu system with keyboard accelerators
This commit establishes a comprehensive native menu system for the Tauri application, bringing it to parity with the Electron implementation and enabling full keyboard shortcut support.

## Key Features Added

**Native Menu System:**
- Complete menu bar with File, Edit, View, and Window menus
- Platform-specific adaptations (macOS app menu, Windows/Linux quit behavior)
- Full menu event handling system with proper window management

**Keyboard Accelerators:**
- CmdOrCtrl+N for New Instance creation
- Standard Edit menu shortcuts (Undo, Redo, Cut, Copy, Paste, Select All)
- View menu shortcuts (Reload, Force Reload, Toggle DevTools, Fullscreen)
- Built-in zoom hotkeys enabled via zoomHotkeysEnabled

**Enhanced Capabilities:**
- Added core:menu:default permission for menu management
- Added core:webview:allow-set-webview-zoom for zoom functionality
- Proper event communication between Tauri backend and frontend

**Frontend Integration:**
- Tauri event listener for menu:newInstance events
- Proper cleanup and error handling for event subscriptions
- Runtime environment detection for Tauri-specific behavior

## Technical Changes

**Backend (Rust):**
- Replaced empty menu stub with full SubmenuBuilder implementation
- Added comprehensive menu event handling with window operations
- Implemented MenuItem::with_id for accelerator support
- Added platform-specific menu construction logic

**Frontend (TypeScript):**
- Added Tauri event listener integration in main App component
- Proper lifecycle management with onMount/onCleanup
- Runtime environment detection for conditional Tauri behavior

**Configuration:**
- Enabled zoomHotkeysEnabled in tauri.conf.json for built-in zoom support
- Updated capabilities to include necessary menu and webview permissions

This implementation provides a native, platform-consistent user experience with full keyboard shortcut support, matching the functionality users expect from desktop applications.
2025-12-08 11:23:57 -05:00
2025-12-08 14:49:39 +00:00
2025-12-02 19:23:05 +00:00
2025-11-21 21:59:58 +00:00
2025-12-01 11:35:03 -05:00
2025-12-06 23:22:18 +00:00
2025-12-06 23:22:18 +00:00

CodeNomad

A fast, multi-instance workspace for running OpenCode sessions.

CodeNomad is built for people who live inside OpenCode for hours on end and need a cockpit, not a kiosk. It delivers a premium, low-latency workspace that favors speed, clarity, and direct control.

Multi-instance workspace Manage multiple OpenCode sessions side-by-side.

📸 More Screenshots

Command palette overlay Global command palette for keyboard-first control.

Image Previews Rich media previews for images and assets.

Browser Support Browser support via CodeNomad Server.

Getting Started

Choose the way that fits your workflow:

The best experience. A native application (Electron-based) with global shortcuts, deeper system integration, and a dedicated window.

  • Download: Grab the latest installer for macOS, Windows, or Linux from the Releases Page.
  • Run: Install and launch like any other app.

🦀 Tauri App (Experimental)

We are also working on a lightweight, high-performance version built with Tauri. It is currently in active development.

  • Download: Experimental builds are available on the Releases Page.
  • Source: Check out packages/tauri-app if you're interested in contributing.

💻 CodeNomad Server

Run CodeNomad as a local server and access it via your web browser. Perfect for remote development (SSH/VPN) or running as a service.

npx @neuralnomads/codenomad --launch

For dev version

npx @neuralnomads/codenomad@dev --launch

This command starts the server and opens the web client in your default browser.

Highlights

  • Multi-Instance: Juggle several OpenCode sessions side-by-side with tabs.
  • Long-Session Native: Scroll through massive transcripts without hitches.
  • Command Palette: A single global palette to jump tabs, launch tools, and control everything.
  • Deep Task Awareness: Monitor background tasks and child sessions without losing flow.

Requirements

  • OpenCode CLI: Must be installed and available in your PATH.
  • Node.js 18+: Required if running the CLI server or building from source.

Troubleshooting

macOS says the app is damaged

If macOS reports that "CodeNomad.app is damaged and can't be opened," Gatekeeper flagged the download because the app is not yet notarized. You can clear the quarantine flag after moving CodeNomad into /Applications:

xattr -l /Applications/CodeNomad.app
xattr -dr com.apple.quarantine /Applications/CodeNomad.app

After removing the quarantine attribute, launch the app normally. On Intel Macs you may also need to approve CodeNomad from System Settings → Privacy & Security the first time you run it.

Architecture & Development

CodeNomad is a monorepo split into specialized packages. If you want to contribute or build from source, check out the individual package documentation:

Package Description
packages/electron-app The native desktop application shell. Wraps the UI and Server.
packages/server The core logic and CLI. Manages workspaces, proxies OpenCode, and serves the API.
packages/ui The SolidJS-based frontend. Fast, reactive, and beautiful.

Quick Build

To build the Desktop App from source:

  1. Clone the repo.
  2. Run npm install (requires pnpm or npm 7+ for workspaces).
  3. Run npm run build --workspace @neuralnomads/codenomad-electron-app.
Description
CodeNomad: The command center that puts AI coding on steroids.
Readme MIT 109 MiB
Languages
TypeScript 88.4%
CSS 6.7%
Rust 3.2%
JavaScript 1.5%
HTML 0.2%