@zebbern/devonz
BAI-powered vibe coding platform — describe what you want, watch it build.
Install
agr install @zebbern/devonz --target claudeThis 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.
Features · Quick Start · Environment Variables · Docker · Tech Stack · Contributing
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
| Requirement | Version |
|---|---|
| Node.js | ≥ 18.18.0 |
| pnpm | 9.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
| Provider | Env Variable | Notes |
|---|---|---|
| OpenAI | OPENAI_API_KEY | GPT-4o, o1 series |
| Anthropic | ANTHROPIC_API_KEY | Claude 3.5 / 4 |
| Google Gemini | GOOGLE_GENERATIVE_AI_API_KEY | Gemini models |
| xAI | XAI_API_KEY | Grok models |
| Groq | GROQ_API_KEY | Fast inference |
| Mistral | MISTRAL_API_KEY | Mistral Large / Small |
| DeepSeek | DEEPSEEK_API_KEY | DeepSeek Chat, Coder |
| Cohere | COHERE_API_KEY | Command R+ |
| Perplexity | PERPLEXITY_API_KEY | Search-augmented |
| Together | TOGETHER_API_KEY | Open-source models |
| Fireworks | FIREWORKS_API_KEY | Fast inference |
| Cerebras | CEREBRAS_API_KEY | Fast inference |
| HuggingFace | HuggingFace_API_KEY | Inference API |
| OpenRouter | OPEN_ROUTER_API_KEY | Multi-provider routing |
| GitHub Models | GITHUB_API_KEY | GitHub-hosted models |
| Moonshot | MOONSHOT_API_KEY | Kimi models |
| Hyperbolic | HYPERBOLIC_API_KEY | Hyperbolic inference |
| Z.ai | ZAI_API_KEY | GLM coding models |
| Amazon Bedrock | AWS_BEDROCK_CONFIG | AWS-hosted models (JSON) |
| Ollama | OLLAMA_API_BASE_URL | Local models, no key needed |
| LM Studio | LMSTUDIO_API_BASE_URL | Local models, no key needed |
| OpenAI-Like | OPENAI_LIKE_API_BASE_URL | Any 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
| Profile | Command | Description |
|---|---|---|
| (default) | docker compose up -d | Production — pulls from GHCR |
dev | docker compose --profile dev up | Development — bind-mount with hot reload |
auto-update | docker compose --profile auto-update up -d | Adds Watchtower for automatic image updates |
Set
DEVONZ_ENCRYPTION_KEYin your environment or.env.localto persist encrypted cookies across container restarts.
Tech Stack
| Layer | Technology |
|---|---|
| Framework | React Router v7 (Remix) |
| UI | React 19 |
| Build | Vite 5 |
| Language | TypeScript 5 (strict) |
| Styling | UnoCSS + SCSS + Radix UI |
| Database | Drizzle ORM |
| State | Nanostores |
| AI | Vercel AI SDK (22 providers) |
| Runtime | WebContainer API |
| Editor | CodeMirror 6 |
| Terminal | xterm.js |
| Testing | Vitest + Testing Library + Playwright |
| Package Manager | pnpm 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
- Fork the repository
- Create a feature branch:
git checkout -b feature/my-feature - Run checks:
pnpm lint:fix && pnpm test - Commit with a conventional message:
git commit -m 'feat: add my feature' - 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
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