gadget/gadget-code
Rob Colbert c705cbd3d9 feat: replace react-ace with @uiw/react-codemirror
react-ace v14 is CommonJS-only with no ESM entry point, making it
fundamentally incompatible with Vite's ESM-first dev server. Every
CJS interop workaround failed. Switched to @uiw/react-codemirror v4.25
which ships proper dual ESM+CJS and works with Vite out of the box.

Changes:
- Remove ace-builds and react-ace dependencies
- Add @uiw/react-codemirror + 16 @codemirror/lang-* packages
- Add @uiw/codemirror-theme-tomorrow-night-blue (closest to ACE's 'tomorrow')
- Add @replit/codemirror-lang-csharp for C# support
- Rewrite EditorPanel.tsx: delete 108 lines of ACE boilerplate
  (?url imports, setModuleUrl, CJS interop hack), replace with
  ~30 lines of clean CodeMirror language extension setup
- Delete vite.d.ts (only needed for ACE ?url import types)
- Remove optimizeDeps.include from vite.config.ts (not needed for CM)
- Add CodeMirror flex layout CSS to index.css

Supported languages: JavaScript/JSX, TypeScript/TSX, Python, JSON,
HTML, CSS, Less, YAML, Markdown, SQL, Java, Go, Rust, C/C++, C#,
PHP, XML. Unsupported types fall back to plain text.

Verified: tsc clean, vite build passes, heartbeat worker intact.
2026-05-12 22:41:31 -04:00
..
.vscode created by merging gadget-code and gadget-drone 2026-04-28 09:20:37 -04:00
assets/icon created by merging gadget-code and gadget-drone 2026-04-28 09:20:37 -04:00
data/prompts plan prompt language moved from common block 2026-05-12 08:49:38 -04:00
docs philosophy shifting for Workspaces and Projects 2026-05-10 16:10:04 -04:00
frontend feat: replace react-ace with @uiw/react-codemirror 2026-05-12 22:41:31 -04:00
nginx created by merging gadget-code and gadget-drone 2026-04-28 09:20:37 -04:00
scripts move from Types.ObjectId to GadgetId (a string) 2026-05-01 14:31:00 -04:00
src Phase 2: ACE Editor integration and file operations 2026-05-12 19:32:58 -04:00
ssl created by merging gadget-code and gadget-drone 2026-04-28 09:20:37 -04:00
supervisor created by merging gadget-code and gadget-drone 2026-04-28 09:20:37 -04:00
tests checkpoint that I plan to delete 2026-05-09 14:52:59 -04:00
types created by merging gadget-code and gadget-drone 2026-04-28 09:20:37 -04:00
.gitignore created by merging gadget-code and gadget-drone 2026-04-28 09:20:37 -04:00
AGENTS.md finishing touches on move to GadgetId from ObjectId 2026-05-01 15:07:37 -04:00
deploy created by merging gadget-code and gadget-drone 2026-04-28 09:20:37 -04:00
gadget-code.code-workspace created by merging gadget-code and gadget-drone 2026-04-28 09:20:37 -04:00
LICENSE created by merging gadget-code and gadget-drone 2026-04-28 09:20:37 -04:00
package.json fix: ACE editor integration crash — React 19 compat, Vite ?url pattern, Error Boundary 2026-05-12 21:36:22 -04:00
playwright.config.ts created by merging gadget-code and gadget-drone 2026-04-28 09:20:37 -04:00
pnpm-lock.yaml feat: replace react-ace with @uiw/react-codemirror 2026-05-12 22:41:31 -04:00
pnpm-workspace.yaml created by merging gadget-code and gadget-drone 2026-04-28 09:20:37 -04:00
README.md make reasoning effort configurable; remove sign up concept 2026-05-08 11:40:30 -04:00
release created by merging gadget-code and gadget-drone 2026-04-28 09:20:37 -04:00
tsconfig.json created by merging gadget-code and gadget-drone 2026-04-28 09:20:37 -04:00
vitest.config.ts make reasoning effort configurable; remove sign up concept 2026-05-08 11:40:30 -04:00

Gadget Code

A modern self-hosted and open source Agentic Engineering Environment. Gadget Code is a hackable TypeScript/Node.js web application - and application development framework - built with Express, React, Vite, and Tailwind CSS.

Gadget Code is a Gab-first initiative. It is most well-tested and tuned for use with Gab.ai as your "Big Brain" compute provider. However, it is designed to be easily adaptable for use with other compute providers as well as your own local Ollama, vLLM, or other OpenAI or Ollama API-compatible setup.

Architecture

┌─────────────────────────────────────────────────────────────┐
│                    Vite Dev Server (HTTPS)                  │
│                    https://code-dev.g4dge7.com:5174         │
│                                                             │
│  ┌───────────┐  ┌───────────┐  ┌───────────┐                │
│  │   /auth   │  │   /api    │  │  static   │                │
│  │   proxy   │  │  proxy    │  │  files    │                │
│  └────┬──────┘  └────┬──────┘  └───────────┘                │
│       │              │                                      │
│       ▼              ▼                                      │
│  ┌─────────────────────────────┐                            │
│  │   Backend (HTTP)            │                            │
│  │   http://localhost:3443     │                            │
│  │   - Express API             │                            │
│  │   - Socket.io               │                            │
│  │   - Session (Redis)         │                            │
│  │   - MongoDB                 │                            │
│  └─────────────────────────────┘                            │
└─────────────────────────────────────────────────────────────┘

Tech Stack

  • Frontend: React 19, Vite 8, Tailwind CSS 4, Socket.io Client
  • Backend: Express 5, TypeScript, Socket.io Server
  • Database: MongoDB (Mongoose)
  • Cache/Session: Redis (ioredis + connect-redis)
  • File Storage: MinIO
  • Testing: Vitest, Playwright

Getting Started

Prerequisites

  • Node.js 22+
  • pnpm 10+
  • MongoDB running on localhost:27017
  • Redis running on localhost:6379
  • SSL certificates in ssl/ directory

Installation

pnpm install

Development

# Start both backend and frontend
pnpm dev:backend   # Backend on http://localhost:3443
pnpm dev:frontend # Frontend on https://localhost:5174

Build

pnpm build          # Build backend + frontend
pnpm build:backend # Build TypeScript only
pnpm build:frontend # Build React/Vite only

Testing

pnpm test            # Run vitest unit tests
npx playwright test  # Run E2E integration tests

Scripts

Your environment can be managed with the following package.json scripts and npx commands.

Command Description
pnpm build Build backend + frontend
pnpm test Run vitest unit tests
npx playwright test Run E2E tests
pnpm dev:backend Start backend (port 3443)
pnpm dev:frontend Start frontend (port 5174)
pnpm start Start production build

Environment Variables

# Required
DTP_USER_PASSWORD_SALT="your-password-salt"
DTP_JWT_SECRET="your-jwt-secret"
DTP_SESSION_SECRET="your-session-secret"

# MongoDB
DTP_MONGODB_HOST="localhost"
DTP_MONGODB_DATABASE="gadget-code"

# Redis
DTP_REDIS_HOST="localhost"
DTP_REDIS_PORT="6379"

# HTTPS
DTP_HTTPS="enabled"
DTP_HTTPS_HOST="localhost"
DTP_HTTPS_PORT="3443"
DTP_HTTPS_KEY_FILE="/path/to/ssl/key.pem"
DTP_HTTPS_CRT_FILE="/path/to/ssl/cert.pem"

 # Session
 DTP_SESSION_TRUST_PROXY="enabled"
 DTP_SESSION_COOKIE_SECURE="enabled"
 DTP_SESSION_COOKIE_SAMESITE="strict"

Features

  • User authentication (sign in, sign out)
  • JWT-based session management
  • RESTful API structure
  • Socket.io real-time communication
  • File upload support (MinIO)
  • Email notifications
  • Tailwind CSS frontend with dark theme

Project Structure

/src
  /config          # Environment configuration
  /controllers    # Express route handlers
  /lib            # Core utilities
  /models         # Mongoose models
  /services       # Business logic
/frontend
  /src
    /components  # React components
    /pages       # React pages
    /lib         # Frontend utilities
  /public        # Static assets
  vite.config.ts # Vite configuration
/tests
  /e2e           # Playwright tests

API Endpoints

Method Endpoint Description
POST /auth/sign-in Authenticate
GET /auth/sign-out Sign out
GET /api/v1/user Get current user

License

SEE LICENSE IN LICENSE