Skip to content

Commit 43db9cd

Browse files
authored
Release v0.14.0 - Sidecars, Remote access from app, more speedy (#325)
## Thanks for contributions - PR #262 “fix(server): show sane remote URLs for 0.0.0.0 binds” by @VooDisss - PR #270 “Implement shared compact split and unified tool-call diff layout” by @VooDisss - PR #272 “Add log level configuration support” by @bluelovers - PR #274 “perf(ui): fix O(n²) reactive subscriptions in timeline effects (HUGE SPEED IMPROVEMENT)” by @pascalandr - PR #285 “fix(ui): preserve prompt text when dismissing mention picker” by @app/codenomadbot - PR #291 “perf(ui): virtualize message timeline rendering, #274 follow-up ( BIG SPEED IMPROVEMENT )” by @pascalandr - PR #309 “fix(ui): stop forced auto-follow during streaming” by @VooDisss - PR #320 “fix(tauri): own Windows CLI subtree with a job object” by @pascalandr ## Highlights - **Remote access is much easier to use**: Connect to remote CodeNomad servers directly from the app and have full app experience remotely. - **Sidecars**: Open locally hosted services directly in CodeNomad. OpenVSCode Server, Terminal ( using ttyd ) and many more all available remotely and on the move. - **Background task notifications**: LLMs can now run background task asynchronously and be notified when the task is done. No need to wait or periodically checking the status. - **Long conversations are much smoother**: Large sessions and busy timelines render much faster, and chat scrolling behaves better while responses stream in. - **Clearer diffs and output views**: Tool-call diffs and session changes now render more consistently with improved split/unified layouts and support for unified diff patch formats. ## What’s Improved - **Big timeline performance gains**: The message timeline got two major performance passes, including virtualization, so large sessions stay responsive much longer. - **More useful context information**: Token stats are shown more clearly, and context window reporting is simpler to understand. - **Smoother voice and speech flows**: Speech input stays chained correctly, dictated text inserts more naturally into prompts, and voice mode state stays synced across listeners. - **More dependable desktop behavior**: Desktop auth isolation is safer per app, startup is more stable, and Windows process cleanup is more reliable. ## Fixes - **Less frustrating auto-scroll behavior**: Streaming reasoning, tool output, and oversized assistant replies no longer pull you to the bottom as aggressively, and you can toggle hold behavior for long replies. - **More reliable timeline previews**: Message preview tooltips now escape clipping so previews remain usable. - **Safer prompt editing**: Dismissing the mention picker no longer wipes your draft text. - **Better remote session stability**: Remote keyboard handling, reconnect flows, TLS exception scoping, and remote URL display are more predictable. - **Better small-screen and desktop polish**: The settings modal behaves better on phones, speech input stays pinned correctly, and Windows desktop builds handle CLI subprocess ownership more safely. ## Docs - **Refreshed project docs**: README and supporting presentation content were updated to better reflect the current product. ### Contributors - @pascalandr - @VooDisss - @bluelovers **Full Changelog**: v0.13.3...v0.14.0
2 parents f3c54df + 03ed3d3 commit 43db9cd

142 files changed

Lines changed: 6352 additions & 1283 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/comment-pr-artifacts.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ on:
44
pull_request_target:
55
types:
66
- opened
7+
- edited
78
- synchronize
89
- reopened
910
- ready_for_review
@@ -19,7 +20,7 @@ jobs:
1920
runs-on: ubuntu-latest
2021
env:
2122
ALLOWED_ACTORS: ${{ vars.ALLOWED_NON_DEV_PR_ACTORS }}
22-
ACTOR: ${{ github.actor }}
23+
PR_AUTHOR: ${{ github.event.pull_request.user.login }}
2324
BASE_REF: ${{ github.event.pull_request.base.ref }}
2425
IS_DRAFT: ${{ github.event.pull_request.draft }}
2526
PR_NUMBER: ${{ github.event.pull_request.number }}
@@ -37,7 +38,7 @@ jobs:
3738
fi
3839
3940
normalized=",${ALLOWED_ACTORS},"
40-
if [[ "$normalized" == *",${ACTOR},"* ]]; then
41+
if [[ "$normalized" == *",${PR_AUTHOR},"* ]]; then
4142
echo "allowed=true" >> "$GITHUB_OUTPUT"
4243
else
4344
echo "allowed=false" >> "$GITHUB_OUTPUT"

.github/workflows/pr-build.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ on:
44
pull_request:
55
types:
66
- opened
7+
- edited
78
- synchronize
89
- reopened
910
- ready_for_review
@@ -23,7 +24,7 @@ jobs:
2324
allowed: ${{ steps.auth.outputs.allowed }}
2425
env:
2526
ALLOWED_ACTORS: ${{ vars.ALLOWED_NON_DEV_PR_ACTORS }}
26-
ACTOR: ${{ github.actor }}
27+
PR_AUTHOR: ${{ github.event.pull_request.user.login }}
2728
BASE_REF: ${{ github.event.pull_request.base.ref }}
2829
steps:
2930
- name: Check PR authorization
@@ -37,11 +38,11 @@ jobs:
3738
fi
3839
3940
normalized=",${ALLOWED_ACTORS},"
40-
if [[ "$normalized" == *",${ACTOR},"* ]]; then
41+
if [[ "$normalized" == *",${PR_AUTHOR},"* ]]; then
4142
echo "allowed=true" >> "$GITHUB_OUTPUT"
4243
else
4344
echo "allowed=false" >> "$GITHUB_OUTPUT"
44-
echo "Skipping builds for unauthorized PR targeting $BASE_REF" >&2
45+
echo "Skipping builds for PR by unauthorized author targeting $BASE_REF" >&2
4546
fi
4647
4748
build:

.github/workflows/restrict-non-dev-prs.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ on:
44
pull_request_target:
55
types:
66
- opened
7+
- edited
78
- reopened
89
- synchronize
910

@@ -17,7 +18,7 @@ jobs:
1718
runs-on: ubuntu-latest
1819
env:
1920
ALLOWED_ACTORS: ${{ vars.ALLOWED_NON_DEV_PR_ACTORS }}
20-
ACTOR: ${{ github.actor }}
21+
PR_AUTHOR: ${{ github.event.pull_request.user.login }}
2122
PR_NUMBER: ${{ github.event.pull_request.number }}
2223
BASE_REF: ${{ github.event.pull_request.base.ref }}
2324
steps:
@@ -27,7 +28,7 @@ jobs:
2728
run: |
2829
set -euo pipefail
2930
normalized=",${ALLOWED_ACTORS},"
30-
if [[ "$normalized" == *",${ACTOR},"* ]]; then
31+
if [[ "$normalized" == *",${PR_AUTHOR},"* ]]; then
3132
echo "authorized=true" >> "$GITHUB_OUTPUT"
3233
else
3334
echo "authorized=false" >> "$GITHUB_OUTPUT"
@@ -50,5 +51,5 @@ jobs:
5051
- name: Fail unauthorized PR
5152
if: ${{ steps.auth.outputs.authorized != 'true' }}
5253
run: |
53-
echo "Actor $ACTOR is not allowed to open PRs targeting $BASE_REF" >&2
54+
echo "PR author $PR_AUTHOR is not allowed to open PRs targeting $BASE_REF" >&2
5455
exit 1

README.md

Lines changed: 74 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,128 +1,127 @@
11
# CodeNomad
22

3-
## A fast, multi-instance workspace for running OpenCode sessions.
3+
## The AI Coding Cockpit for OpenCode
44

5-
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.
5+
CodeNomad transforms OpenCode from a terminal tool into a **premium desktop workspace** — built for developers who live inside AI coding sessions for hours and need control, speed, and clarity.
6+
7+
> OpenCode gives you the engine. CodeNomad gives you the cockpit.
68
79
![Multi-instance workspace](docs/screenshots/newSession.png)
8-
_Manage multiple OpenCode sessions side-by-side._
910

10-
<details>
11-
<summary>📸 More Screenshots</summary>
11+
---
1212

13-
![Command palette overlay](docs/screenshots/command-palette.png)
14-
_Global command palette for keyboard-first control._
13+
## Features
1514

16-
![Image Previews](docs/screenshots/image-previews.png)
17-
_Rich media previews for images and assets._
15+
- **🚀 Multi-Instance Workspace**
16+
- **🌐 Remote Access**
17+
- **🧠 Session Management**
18+
- **🎙️ Voice Input & Speech**
19+
- **🌳 Git Worktrees**
20+
- **💬 Rich Message Experience**
21+
- **⌨️ Command Palette**
22+
- **📁 File System Browser**
23+
- **🔐 Authentication & Security**
24+
- **🔔 Notifications**
25+
- **🎨 Theming**
26+
- **🌍 Internationalization**
1827

19-
![Browser Support](docs/screenshots/browser-support.png)
20-
_Browser support via CodeNomad Server._
21-
22-
</details>
28+
---
2329

2430
## Getting Started
2531

26-
Choose the way that fits your workflow:
27-
28-
### 🖥️ Desktop App (Recommended)
29-
The best experience. A native application (Electron-based) with global shortcuts, deeper system integration, and a dedicated window.
32+
### 🖥️ Desktop App
3033

31-
- **Download**: Grab the latest installer for macOS, Windows, or Linux from the [Releases Page](https://github.com/shantur/CodeNomad/releases).
32-
- **Run**: Install and launch like any other app.
34+
Available as both Electron and Tauri builds — choose based on your preference.
3335

34-
### 🦀 Tauri App (Experimental)
35-
We are also working on a lightweight, high-performance version built with [Tauri](https://tauri.app). It is currently in active development.
36+
Download the latest installer for your platform from [Releases](https://github.com/shantur/CodeNomad/releases).
3637

37-
- **Download**: Experimental builds are available on the [Releases Page](https://github.com/shantur/CodeNomad/releases).
38-
- **Source**: Check out `packages/tauri-app` if you're interested in contributing.
38+
| Platform | Formats |
39+
|----------|---------|
40+
| macOS | DMG, ZIP (Universal: Intel + Apple Silicon) |
41+
| Windows | NSIS Installer, ZIP (x64, ARM64) |
42+
| Linux | AppImage, deb, tar.gz (x64, ARM64) |
3943

4044
### 💻 CodeNomad Server
41-
Run CodeNomad as a local server and access it via your web browser. Perfect for remote development (SSH/VPN) or running as a service.
45+
46+
Run as a local server and access via browser. Perfect for remote development.
4247

4348
```bash
4449
npx @neuralnomads/codenomad --launch
4550
```
4651

47-
Full server/CLI documentation (flags + env vars, TLS, auth, remote access):
48-
- [packages/server/README.md](packages/server/README.md)
49-
50-
To see all available options:
51-
52-
```bash
53-
npx @neuralnomads/codenomad --help
54-
```
52+
See [Server Documentation](packages/server/README.md) for flags, TLS, auth, and remote access.
5553

5654
### 🧪 Dev Releases
57-
Bleeding-edge builds are published as GitHub pre-releases and are generated automatically from the `dev` branch.
55+
56+
Bleeding-edge builds from the `dev` branch:
5857

5958
```bash
6059
npx @neuralnomads/codenomad-dev --launch
6160
```
6261

63-
## Highlights
64-
65-
- **Multi-Instance**: Juggle several OpenCode sessions side-by-side with tabs.
66-
- **Long-Session Native**: Scroll through massive transcripts without hitches.
67-
- **Command Palette**: A single global palette to jump tabs, launch tools, and control everything.
68-
- **Deep Task Awareness**: Monitor background tasks and child sessions without losing flow.
62+
---
6963

7064
## Requirements
7165

72-
- **[OpenCode CLI](https://opencode.ai)**: Must be installed and available in your `PATH`.
73-
- **Node.js 18+**: Required if running the CLI server or building from source.
66+
- **[OpenCode CLI](https://opencode.ai)** — must be installed and in your `PATH`
67+
- **Node.js 18+** — for server mode or building from source
7468

75-
## Troubleshooting
69+
---
70+
71+
## Development
72+
73+
CodeNomad is a monorepo built with:
74+
75+
| Package | Description |
76+
|---------|-------------|
77+
| **[packages/server](packages/server/README.md)** | Core logic & CLI — workspaces, OpenCode proxy, API, auth, speech |
78+
| **[packages/ui](packages/ui/README.md)** | SolidJS frontend — reactive, fast, beautiful |
79+
| **[packages/electron-app](packages/electron-app/README.md)** | Desktop shell — process management, IPC, native dialogs |
80+
| **[packages/tauri-app](packages/tauri-app)** | Tauri desktop shell (experimental) |
7681

77-
### macOS says the app is damaged
78-
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`:
82+
### Quick Start
7983

8084
```bash
81-
xattr -l /Applications/CodeNomad.app
82-
xattr -dr com.apple.quarantine /Applications/CodeNomad.app
85+
git clone https://github.com/NeuralNomadsAI/CodeNomad.git
86+
cd CodeNomad
87+
npm install
88+
npm run dev
8389
```
8490

85-
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.
91+
---
8692

87-
### Linux (Wayland + NVIDIA): Tauri AppImage closes immediately
88-
On some Wayland compositor + NVIDIA driver setups, WebKitGTK can fail to initialize its DMA-BUF/GBM path and the Tauri build may exit right away.
93+
## Troubleshooting
8994

90-
Try running with one of these environment variables:
95+
<details>
96+
<summary><strong>macOS: "CodeNomad.app is damaged and can't be opened"</strong></summary>
9197

92-
```bash
93-
# Most reliable workaround (can reduce rendering performance)
94-
WEBKIT_DISABLE_DMABUF_RENDERER=1 codenomad
98+
Gatekeeper flag due to missing notarization. Clear the quarantine attribute:
9599

96-
# Alternative for some Wayland setups
97-
__NV_DISABLE_EXPLICIT_SYNC=1 codenomad
100+
```bash
101+
xattr -dr com.apple.quarantine /Applications/CodeNomad.app
98102
```
99103

100-
If you're running the Tauri AppImage and want the workaround applied every time, create a tiny wrapper script on your `PATH`:
104+
On Intel Macs, also check **System Settings → Privacy & Security** on first launch.
105+
</details>
101106

102-
```bash
103-
#!/bin/bash
104-
export WEBKIT_DISABLE_DMABUF_RENDERER=1
105-
exec ~/.local/share/bauh/appimage/installed/codenomad/CodeNomad-Tauri-0.4.0-linux-x64.AppImage "$@"
106-
```
107+
<details>
108+
<summary><strong>Linux (Wayland + NVIDIA): Tauri App closes immediately</strong></summary>
107109

108-
Upstream tracking: https://github.com/tauri-apps/tauri/issues/10702
110+
WebKitGTK DMA-BUF/GBM issue. Run with:
109111

110-
## Architecture & Development
112+
```bash
113+
WEBKIT_DISABLE_DMABUF_RENDERER=1 codenomad
114+
```
111115

112-
CodeNomad is a monorepo split into specialized packages. If you want to contribute or build from source, check out the individual package documentation:
116+
See full workaround in the original README.
117+
</details>
113118

114-
| Package | Description |
115-
|---------|-------------|
116-
| **[packages/electron-app](packages/electron-app/README.md)** | The native desktop application shell. Wraps the UI and Server. |
117-
| **[packages/server](packages/server/README.md)** | The core logic and CLI. Manages workspaces, proxies OpenCode, and serves the API. |
118-
| **[packages/ui](packages/ui/README.md)** | The SolidJS-based frontend. Fast, reactive, and beautiful. |
119+
---
119120

120-
### Quick Build
121-
To build the Desktop App from source:
121+
## Community
122122

123-
1. Clone the repo.
124-
2. Run `npm install` (requires pnpm or npm 7+ for workspaces).
125-
3. Run `npm run build --workspace @neuralnomads/codenomad-electron-app`.
123+
[![Star History](https://api.star-history.com/svg?repos=NeuralNomadsAI/CodeNomad&type=Date)](https://star-history.com/#NeuralNomadsAI/CodeNomad&Date)
126124

127-
[![Star History Chart](https://api.star-history.com/svg?repos=NeuralNomadsAI/CodeNomad&type=Date)](https://star-history.com/#NeuralNomadsAI/CodeNomad&Date)
125+
---
128126

127+
**Built with ♥ by [Neural Nomads](https://github.com/NeuralNomadsAI)** · [MIT License](LICENSE)
-845 KB
Binary file not shown.
-835 KB
Binary file not shown.
-1.36 MB
Binary file not shown.

docs/screenshots/newSession.png

181 KB
Loading

package-lock.json

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "codenomad-workspace",
3-
"version": "0.13.3",
3+
"version": "0.14.0",
44
"private": true,
55
"description": "CodeNomad monorepo workspace",
66
"license": "MIT",

0 commit comments

Comments
 (0)