A fast code editor, built as a alternative to VSCode.
  • TypeScript 76.1%
  • CSS 23.9%
Find a file
Rina 6c3f872480 Add extensions panel, activity bar, detail panel etc
This adds support for OpenVSX Extenstions, though some UI and API elements have not been added yet which some extenstions may need
2026-05-30 19:06:01 +01:00
browser-app Initial scaffold 2026-05-30 18:25:56 +01:00
core Add extensions panel, activity bar, detail panel etc 2026-05-30 19:06:01 +01:00
electron-app Initial scaffold 2026-05-30 18:25:56 +01:00
.gitignore Initial scaffold 2026-05-30 18:25:56 +01:00
.npmrc Initial scaffold 2026-05-30 18:25:56 +01:00
package-lock.json Initial scaffold 2026-05-30 18:25:56 +01:00
package.json Initial scaffold 2026-05-30 18:25:56 +01:00
README.md Initial scaffold 2026-05-30 18:25:56 +01:00

NeoCode

A fast, lean code editor, built as an alternative to VSCode.

Why NeoCode?

VSCode has grown slower and buggier with each release, and its coupling to Microsoft's ecosystem and telemetry has become hard to opt out of. Recent security issues have made that coupling uncomfortable for many people. The handful of alternatives that try to fill the gap each have their own trade-offs.

NeoCode is an attempt at a different trade-off, a custom UI built on top of Eclipse Theia, which provides the headless services (Monaco editor, file system, language server protocol, VSCode extension host). The UI is React, the styling is plain CSS, and the application shell that Theia normally ships is hidden you get the editing experience and the Open VSX extension ecosystem, without Microsoft and without the visual baggage.

The goal is lean, predictable, and independent. It runs on Electron for desktop and in any modern browser.

Status

Warning

Very early alpha. Things will break. State may be lost. The app may explode in creative ways. Use it only if you're comfortable with that and please report anything that goes wrong.

Features

What works today:

  • Monaco editor wired through Theia's text-model service, full file open/save/dirty tracking
  • File tree with native OS folder-open dialog (Electron) or in-app picker (browser)
  • Tabs above the editor:
    • Drag to reorder
    • Middle-click, ×, or keyboard shortcut to close (with unsaved-changes prompt)
    • Dirty indicator
    • Most-recently-used cycling
    • Auto-scroll active tab into view, scroll past end via trailing drop zone
  • Command palette (Ctrl+Shift+P) - runs any Theia command
  • Status bar - workspace, active file, cursor position, language, encoding
  • Custom title bar with drag region and file/workspace context
  • Save (Ctrl+S)
  • DevTools (Ctrl+Shift+I / F12)
  • Language detection for ~35 file types (syntax highlighting requires the relevant Open VSX language extension)
  • VSCode extension compatibility via Open VSX extensions can be installed manually today, UI is coming
  • Both Electron and browser builds ship from the same codebase

Roadmap

What's planned, roughly in order:

Milestone Adds
1 - Extensions UI Browse / install / enable / disable from Open VSX
2 - Settings UI Preferences editor, theme picker, keybinding editor
3 - Terminal Integrated xterm.js terminal in a bottom panel
4 - Search Workspace-wide find / replace via ripgrep
5 - Git Source-control panel, branch indicator, diff viewer
6 - Polish Notifications, onboarding, loading states, branding
Post-v1 File tree v2 (create, rename, delete, drag-move, multi-select)

Platforms

  • Linux
  • Windows
  • macOS (untested, should work; please report issues)
  • Browser (any modern Chromium / Firefox)

Keyboard shortcuts

A handful of shortcuts differ between the desktop and browser builds because browsers reserve Ctrl+Tab / Ctrl+W for their own UI.

Action Electron Browser
Save Ctrl+S Ctrl+S
Command palette Ctrl+Shift+P Ctrl+Shift+P
Close active tab Ctrl+W Alt+W
Cycle MRU tabs Ctrl+Tab / Ctrl+Shift+Tab Alt+E / Alt+Shift+E
DevTools Ctrl+Shift+I / F12 Ctrl+Shift+I / F12

Installing

Prerequisites

  • Node.js 20 or 22+ (Node 21 is unsupported by some build tooling)
  • npm 8+ (11+ recomended)
  • Python 3 (some Theia native modules build with node-gyp)
  • Theia's general prerequisites guide covers OS-specific build dependencies (build-essential on Debian/Ubuntu, base-devel on Arch, Xcode tools on macOS, etc.)

Clone and install

git clone https://git.arcaneneko.com/ArcaneNeko/NeoCode.git
cd NeoCode
npm install

npm install will also rebuild Electron native modules and skip Puppeteer's Chromium download (configured via the in-repo .npmrc).

Building & running

Desktop (Electron)

npm run build:electron
npm run start:electron

Browser

npm run build:browser
npm run start:browser

Then open http://127.0.0.1:3000.

Run both builds back-to-back

npm run build:electron && npm run build:browser

Development

Watch mode rebuilds the core package + the target app on file changes:

npm run watch:electron   # core + electron-app in parallel
npm run watch:browser    # core + browser-app in parallel

Or watch a single package on its own:

cd core && npm run watch

The core watcher is tsc -w only CSS file changes need a manual npm --prefix core run copy-assets until that's fixed.

Repo layout

NeoCode/
├── core/             # @neocode/core custom UI, store, hooks, Theia bindings
├── browser-app/      # Theia browser application entry
├── electron-app/     # Theia electron application entry
├── PLAN.md           # Committed roadmap
└── plans/            # Per-milestone breakdowns (gitignored)

The custom UI lives in core/src/browser/react/. The Theia integration glue (extension contribution, frontend module, theme CSS that hides Theia's shell) is in core/src/browser/.

Tech stack

  • Eclipse Theia 1.72 - headless services (extension host, file system, LSP, Monaco model service)
  • React 18 + Zustand 5 - UI and state
  • Plain CSS with an .nc- prefix - no CSS Modules, no preprocessors (Theia's esbuild loader doesn't transform them)
  • TypeScript 6
  • Electron for the desktop build, plain Express for the browser build (both via Theia's CLI)

Contributing

Issues and PRs welcome. Given the early alpha status, expect the codebase and the plans to shift week to week. Open an issue before sinking time into anything large.

License

See LICENSE.