← Browse

@zebbern/devonz

B

AI-powered vibe coding platform — describe what you want, watch it build.

mcp_servermcp

Install

agr install @zebbern/devonz --target claude

This artifact does not publish files for Claude.

Document

{ "name": "devonz", "description": "AI-powered local vibe coding platform for full-stack development", "private": true, "license": "MIT", "sideEffects": false, "type": "module", "version": "1.0.0", "author": { "name": "Devonz team" }, "scripts": { "deploy": "npm run build", "build": "tsc --noEmit && react-router build", "dev": "node pre-start.cjs && react-router dev", "dev:clean": "node pre-start.cjs && node -e "require('fs').rmSync('node_modules/.vite',{recursive:true,force:true})" && react-router dev", "setup": "node scripts/setup.mjs", "lint": "eslint --cache --cache-location ./node_modules/.cache/eslint app", "lint:fix": "npm run lint -- --fix && prettier app --write", "start": "node --import ./instrument.server.mjs ./node_modules/.bin/react-router-serve ./build/server/index.js", "test": "vitest run", "test:watch": "vitest", "test:coverage": "vitest run --coverage", "test:e2e": "playwright test", "typecheck": "tsc --noEmit", "preview": "pnpm run build && pnpm run start", "prepare": "husky", "clean": "node scripts/clean.js", "screenshots": "node scripts/generate-screenshots.mjs", "docker:build": "docker build -t devonz .", "docker:run": "docker run --rm -p 5173:5173 --env-file .env.local devonz", "docker:up": "docker compose up -d", "docker:down": "docker compose down", "docker:dev": "docker compose --profile dev up devonz-dev", "docker:update": "docker compose pull && docker compose up -d", "update": "node scripts/update.cjs", "knip": "knip" }, "engines": { "node": ">=18.18.0" }, "dependencies": { "@ai-sdk/amazon-bedrock": "^1.1.6", "@ai-sdk/anthropic": "1.2.12", "@ai-sdk/cerebras": "^2.0.44", "@ai-sdk/cohere": "1.0.3", "@ai-sdk/deepseek": "0.1.3", "@ai-sdk/fireworks": "^2.0.45", "@ai-sdk/google": "1.2.22", "@ai-sdk/mistral": "0.0.43", "@ai-sdk/openai": "1.1.2", "@ai-sdk/react": "^1.2.12", "@ai-sdk/ui-utils": "^1.2.11", "@codemirror/autocomplete": "^6.20.1", "@codemirror/commands": "^6.10.2", "@codemirror/lang-cpp": "^6.0.2", "@codemirror/lang-css": "^6.3.1", "@codemirror/lang-html": "^6.4.11", "@codemirror/lang-javascript": "^6.2.5", "@codemirror/lang-json": "^6.0.1", "@codemirror/lang-markdown": "^6.5.0", "@codemirror/lang-python": "^6.1.6", "@codemirror/lang-sass": "^6.0.2", "@codemirror/lang-vue": "^0.1.3", "@codemirror/lang-wast": "^6.0.2", "@codemirror/language": "^6.12.2", "@codemirror/search": "^6.6.0", "@codemirror/state": "^6.5.4", "@codemirror/view": "^6.39.16", "@iconify-json/svg-spinners": "^1.2.1", "@libsql/client": "^0.17.0", "@modelcontextprotocol/sdk": "^1.29.0", "@nanostores/react": "^0.7.3", "@octokit/rest": "^21.0.2", "@openrouter/ai-sdk-provider": "^0.0.5", "@radix-ui/react-checkbox": "^1.3.3", "@radix-ui/react-collapsible": "^1.1.12", "@radix-ui/react-context-menu": "^2.2.16", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-dropdown-menu": "^2.1.16", "@radix-ui/react-label": "^2.1.8", "@radix-ui/react-popover": "^1.1.15", "@radix-ui/react-scroll-area": "^1.2.10", "@radix-ui/react-switch": "^1.2.6", "@radix-ui/react-tabs": "^1.1.13", "@radix-ui/react-tooltip": "^1.2.8", "@radix-ui/react-visually-hidden": "^1.2.4", "@react-router/fs-routes": "^7.0.0", "@react-router/node": "^7.0.0", "@react-router/serve": "^7.0.0", "@sentry/node": "^10.43.0", "@sentry/react": "^10.43.0", "@sentry/vite-plugin": "^5.1.1", "@uiw/codemirror-theme-vscode": "^4.25.8", "@unocss/reset": "^0.61.9", "@xterm/addon-fit": "^0.10.0", "@xterm/addon-web-links": "^0.11.0", "@xterm/xterm": "^5.5.0", "ai": "4.3.16", "chalk": "^5.4.1", "chart.js": "^4.4.7", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", "date-fns": "^3.6.0", "diff": "^5.2.0", "dompurify": "^3.3.1", "drizzle-orm": "^0.45.1", "fast-glob": "^3.3.2", "file-saver": "^2.0.5", "framer-motion": "^11.12.0", "html2canvas": "1.4.1", "ignore": "^6.0.2", "isbot": "^4.4.0", "isomorphic-git": "^1.27.2", "istextorbinary": "^9.5.0", "js-cookie": "^3.0.5", "jspdf": "^4.2.0", "jszip": "^3.10.1", "nanostores": "^0.10.3", "ollama-ai-provider": "^0.15.2", "path-browserify": "^1.0.1", "react": "^19.0.0", "react-chartjs-2": "^5.3.0", "react-dnd": "^16.0.1", "react-dnd-html5-backend": "^16.0.1", "react-dom": "^19.0.0", "react-markdown": "^10.1.0", "react-qrcode-logo": "^3.0.0", "react-resizable-panels": "^2.1.7", "react-router": "^7.0.0", "react-window": "^2.2.7", "rehype-raw": "^7.0.0", "rehype-sanitize": "^6.0.0", "remark-gfm": "^4.0.0", "shiki": "^1.24.0", "sonner": "^2.0.7", "tailwind-merge": "^2.6.0", "unist-util-visit": "^5.0.0", "vite-plugin-node-polyfills": "^0.22.0", "ws": "^8.19.0", "zod": "^3.24.1" }, "devDependencies": { "@blitz/eslint-plugin": "0.1.4", "@commitlint/cli": "^20.5.0", "@commitlint/config-conventional": "^20.5.0", "@iconify-json/ph": "^1.2.1", "@iconify-json/vscode-icons": "^1.2.43", "@iconify/types": "^2.0.0", "@playwright/test": "^1.58.2", "@react-router/dev": "^7.0.0", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", "@types/diff": "^5.2.3", "@types/dom-speech-recognition": "^0.0.4", "@types/file-saver": "^2.0.7", "@types/js-cookie": "^3.0.6", "@types/path-browserify": "^1.0.3", "@types/react": "^19.0.0", "@types/react-dom": "^19.0.0", "@types/react-window": "^2.0.0", "@types/ws": "^8.18.1", "@vitejs/plugin-react": "^4.3.4", "@vitest/coverage-v8": "^2.0.0", "drizzle-kit": "^0.31.9", "eslint-config-prettier": "^10.1.1", "eslint-plugin-prettier": "^5.5.5", "husky": "9.1.7", "knip": "^5", "lint-staged": "^16.3.1", "node-fetch": "^3.3.2", "playwright": "^1.58.2", "pnpm": "^9.14.4", "prettier": "^3.8.1", "rollup-plugin-visualizer": "^7.0.0", "sass-embedded": "^1.98.0", "typescript": "^5.9.3", "unified": "^11.0.5", "unocss": "^0.61.9", "vite": "^5.4.21", "vite-plugin-optimize-css-modules": "^1.1.0", "vite-tsconfig-paths": "^4.3.2", "vitest": "^2.0.0" }, "lint-staged": { "app//*.{ts,tsx}": [ "eslint --cache --cache-location ./node_modules/.cache/eslint --fix", "prettier --write" ], "app//*.{scss,css}": [ "prettier --write" ] }, "pnpm": {}, "packageManager": "pnpm@9.14.4" }

Repository README

Describes zebbern/Devonz as a whole, which may contain artifacts other than this one. Where this artifact had no useful description of its own, its summary was taken from here.

AI-powered vibe coding platform — describe what you want, watch it build.

Node TypeScript License: MIT

Features · Quick Start · Environment Variables · Docker · Tech Stack · Contributing

Devonz Screenshot


What is Devonz?

Devonz is a local AI-powered vibe coding platform forked from bolt.diy. Describe what you want to build in natural language, and an AI agent generates full-stack applications in a browser-based IDE with an integrated editor, terminal, and live preview.

This is a local development tool, not a hosted web service. You run it on your own machine, bring your own API keys, and keep full control of your code.


Features

  • Real-time code generation — AI streaming produces code as you watch, with live diffs applied to the editor.
  • In-browser code execution — run and preview generated applications directly in the browser via WebContainer.
  • 22+ LLM providers — OpenAI, Anthropic, Google, xAI, Groq, Mistral, DeepSeek, OpenRouter, Ollama, LM Studio, and more. Swap models mid-conversation.
  • Agent mode — handles complex multi-step tasks with autonomous planning and execution.
  • Template system — start from React, Astro, Vite + Shadcn, and other popular boilerplates, then customise with AI.
  • Git integration — built-in version control with commit, branch, and push support.
  • Smart terminal — integrated terminal with error detection and intelligent alerts that help the agent auto-fix failures.
  • Speech-to-text — dictate prompts instead of typing.
  • File upload — attach files and images to prompts for additional context.
  • Dark / light themes — system-aware theme switching.
  • Framer Motion animations — smooth chat animations and transitions.
  • Error classification — errors are categorised and routed to toast notifications or dialog windows based on severity.
  • Deploy from the UI — push to GitHub, GitLab, Netlify, or Vercel directly.

Quick Start

Prerequisites

RequirementVersion
Node.js≥ 18.18.0
pnpm9.x (see below)

Enable pnpm via Corepack:

corepack enable
corepack prepare pnpm@9.14.4 --activate

Setup

git clone https://github.com/zebbern/Devonz.git
cd Devonz
cp .env.example .env.local      # add at least one API key
pnpm install
pnpm run dev

Open http://localhost:5173.

The first load can take up to two minutes while dependencies compile.


Environment Variables

Copy the example file and fill in your API keys:

cp .env.example .env.local

Or run the interactive setup wizard:

pnpm run setup

At minimum, add one AI provider key:

OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
GOOGLE_GENERATIVE_AI_API_KEY=AI...

You can also configure providers at runtime via Settings → Providers in the UI.

See .env.example for the full list of supported variables including deployment tokens, local provider URLs, and encryption settings.

Supported LLM Providers

ProviderEnv VariableNotes
OpenAIOPENAI_API_KEYGPT-4o, o1 series
AnthropicANTHROPIC_API_KEYClaude 3.5 / 4
Google GeminiGOOGLE_GENERATIVE_AI_API_KEYGemini models
xAIXAI_API_KEYGrok models
GroqGROQ_API_KEYFast inference
MistralMISTRAL_API_KEYMistral Large / Small
DeepSeekDEEPSEEK_API_KEYDeepSeek Chat, Coder
CohereCOHERE_API_KEYCommand R+
PerplexityPERPLEXITY_API_KEYSearch-augmented
TogetherTOGETHER_API_KEYOpen-source models
FireworksFIREWORKS_API_KEYFast inference
CerebrasCEREBRAS_API_KEYFast inference
HuggingFaceHuggingFace_API_KEYInference API
OpenRouterOPEN_ROUTER_API_KEYMulti-provider routing
GitHub ModelsGITHUB_API_KEYGitHub-hosted models
MoonshotMOONSHOT_API_KEYKimi models
HyperbolicHYPERBOLIC_API_KEYHyperbolic inference
Z.aiZAI_API_KEYGLM coding models
Amazon BedrockAWS_BEDROCK_CONFIGAWS-hosted models (JSON)
OllamaOLLAMA_API_BASE_URLLocal models, no key needed
LM StudioLMSTUDIO_API_BASE_URLLocal models, no key needed
OpenAI-LikeOPENAI_LIKE_API_BASE_URLAny compatible API

See docs/LLM-PROVIDERS.md for details on configuring each provider.

Encryption

Set DEVONZ_ENCRYPTION_KEY to persist encrypted API-key cookies across server restarts. Generate a key with:

node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

If omitted, a random key is generated on each startup and cookies will not survive restarts.


Docker

No local Node.js required — just Docker.

git clone https://github.com/zebbern/Devonz.git
cd Devonz
cp .env.example .env.local      # add at least one API key
docker compose up -d

Open http://localhost:5173.

Docker Commands

pnpm docker:build          # Build image locally
pnpm docker:run            # Run standalone container
pnpm docker:up             # Start via Docker Compose
pnpm docker:down           # Stop services
pnpm docker:dev            # Dev mode with hot reload
pnpm docker:update         # Pull latest image + restart

Compose Profiles

ProfileCommandDescription
(default)docker compose up -dProduction — pulls from GHCR
devdocker compose --profile dev upDevelopment — bind-mount with hot reload
auto-updatedocker compose --profile auto-update up -dAdds Watchtower for automatic image updates

Set DEVONZ_ENCRYPTION_KEY in your environment or .env.local to persist encrypted cookies across container restarts.


Tech Stack

LayerTechnology
FrameworkReact Router v7 (Remix)
UIReact 19
BuildVite 5
LanguageTypeScript 5 (strict)
StylingUnoCSS + SCSS + Radix UI
DatabaseDrizzle ORM
StateNanostores
AIVercel AI SDK (22 providers)
RuntimeWebContainer API
EditorCodeMirror 6
Terminalxterm.js
TestingVitest + Testing Library + Playwright
Package Managerpnpm 9.14.4

Development

Scripts

pnpm run dev               # Start dev server (http://localhost:5173)
pnpm run build             # Production build
pnpm run start             # Run production build
pnpm run preview           # Build + preview locally

pnpm test                  # Run test suite
pnpm test:watch            # Tests in watch mode
pnpm run typecheck         # TypeScript type check
pnpm run lint              # ESLint check
pnpm run lint:fix          # Auto-fix lint issues

pnpm run clean             # Clean build artifacts
pnpm run update            # Pull latest + install + rebuild

Updating

# From source
pnpm run update                    # pull, install, rebuild
pnpm run update -- --skip-build    # pull + install only

# Docker
pnpm docker:update                 # pull latest image, restart

Project Structure

devonz/
├── app/
│   ├── components/         # React components
│   │   ├── @settings/      # Settings panel
│   │   ├── chat/           # Chat interface
│   │   ├── deploy/         # Deployment integrations
│   │   ├── editor/         # Code editor (CodeMirror)
│   │   ├── git/            # Git integration
│   │   ├── header/         # App header
│   │   ├── sidebar/        # Sidebar navigation
│   │   ├── templates/      # Template gallery
│   │   ├── ui/             # Shared UI components
│   │   └── workbench/      # Development workbench
│   ├── lib/
│   │   ├── .server/        # Server-only code (LLM streaming)
│   │   ├── agent/          # Agent prompts + orchestration
│   │   ├── common/         # Prompt library + shared prompts
│   │   ├── hooks/          # Custom React hooks
│   │   ├── modules/        # Feature modules (22 LLM providers)
│   │   ├── persistence/    # IndexedDB, localStorage, autoBackup
│   │   ├── runtime/        # Action runner, message parser
│   │   ├── services/       # API services
│   │   ├── stores/         # Nanostores
│   │   └── utils/          # Utilities
│   ├── routes/             # Routes (pages + API endpoints)
│   ├── styles/             # Global styles (SCSS + CSS)
│   └── types/              # TypeScript type definitions
├── docs/                   # Extended documentation
├── drizzle/                # Database migrations
└── scripts/                # Build & update scripts

Contributing

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/my-feature
  3. Run checks: pnpm lint:fix && pnpm test
  4. Commit with a conventional message: git commit -m 'feat: add my feature'
  5. Push and open a Pull Request

See docs/CONTRIBUTING.md for detailed guidelines including code style, testing patterns, and API route conventions.


Acknowledgements

Devonz is forked from bolt.diy (originally StackBlitz bolt.new). Built with the Vercel AI SDK.


License

MIT


Trustgrade B

  • passBody integrity

    Whether the stored document is plausibly the kind of file the artifact declares, rather than something fetched by mistake.

  • warnType matchbest-effort: server code not analyzed

    Whether the artifact is really the kind of thing its metadata claims it is.

  • passFreshness

    How long since the source repository was last pushed to.

  • passPrompt injection

    Scans the artifact's own text for instructions aimed at your agent rather than at you.

  • warnLicenseno SPDX license detected

    Whether the source repository declares an SPDX license permissive enough to redistribute.

How the grade is calculated

Each check contributes 0 points when it passes, 1 when it warns, and 2 when it fails. The total maps to a letter:

  • Aevery check passed
  • Bone warning
  • Ctwo warnings
  • Dprompt injection or body integrity failed, or three warnings
  • Fone of those failed, and something else is wrong

These are automated hygiene checks, not a security audit, and not a dependency or vulnerability scan. A grade of A means nothing was flagged — not that the artifact is safe.

Versions

  • git-db815d8bbd5d2026-08-06