---
title: "Deploy OpenDesign"
description: "Open-source Claude Design alternative, with Claude Code, Codex and OpenCode"
category: "AI/ML"
url: https://railway.com/deploy/opendesign
---

# Deploy OpenDesign

Open-source Claude Design alternative, with Claude Code, Codex and OpenCode

**[Deploy OpenDesign on Railway](https://railway.com/template/opendesign)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/opendesign/manifest.json

- **Creator:** Dektion Studio
- **Category:** AI/ML
- **Total deploys:** 1

## Template content

### open-design https://raw.githubusercontent.com/nexu-io/open-design/1b47e60bd46641469fcd8b69c496c4e3a548bc28/apps/web/public/app-icon.png

- **Source:** dektionstudio/railway-template-images
- **Health check:** /api/health
- **Public domain:** Yes

## Documentation

# Deploy and Host OpenDesign on Railway

[OpenDesign](https://github.com/nexu-io/open-design) (Apache-2.0) is an open-source alternative to Claude Design: you describe a prototype, landing page, slide deck, document or image, a coding agent builds it as real files, and the studio previews them and exports HTML, PDF or PPTX.

This template runs upstream's Docker image with the agent CLIs added. Upstream leaves Claude Code, Codex and OpenCode out of its image on purpose and suggests a separate layer for servers that need them. Without them only the plain-API mode works, where the model returns one artifact block; with them the agent writes project files itself. This template is that layer, plus libc6-compat, which is what upstream's own Dockerfile.local adds so those CLIs run on Alpine.

## About Hosting OpenDesign

When the deploy finishes, open `OPEN_DESIGN_URL` from the Variables tab. The browser asks for a login: the username is `open-design` and the password is `OD_API_TOKEN`. That's upstream's own authentication, and API clients can send the same token as `Authorization: Bearer`.

To give the agents a model, set a key on the service: `ANTHROPIC_API_KEY` for Claude Code, `OPENAI_API_KEY` for Codex or `OPENROUTER_API_KEY` for OpenCode with OpenRouter models. You can also paste a key in the studio's BYOK settings, which uses the plain-API mode.

Before publishing I tested it end to end. The studio and API return 401 without the token and `/api/health` answers without it, for Railway's healthcheck. The service found Claude Code 2.1.283, Codex 0.157.1 and OpenCode. A call through the BYOK proxy to OpenRouter streamed its answer back. Then I asked OpenCode, on an OpenRouter model, for a landing page for a bakery: 10 seconds later the project had a 1.6 KB HTML file, registered as an artifact with HTML, PDF and ZIP export. After a restart the project was still there. I didn't run Claude Code or Codex with real keys, only confirmed they're installed and detected.

## Common Use Cases

- Turn a brief into a clickable prototype or landing page you can hand to engineering as HTML
- Make slide decks and one-pagers from a design system extracted from your brand

## Dependencies for OpenDesign Hosting

An API key for at least one model: Anthropic, OpenAI or OpenRouter as a service variable, or any provider through the studio's BYOK settings.

### Deployment Dependencies

- OpenDesign: https://github.com/nexu-io/open-design
- Upstream Docker guide: https://github.com/nexu-io/open-design/blob/main/deploy/README.md
- Image: `ghcr.io/nexu-io/od`
- The wrapper this template builds: https://github.com/dektionstudio/railway-template-images/tree/main/open-design

### Implementation Details

```
OD_API_TOKEN=                        # studio password (user open-design) and API Bearer token
OD_ALLOWED_ORIGINS=https://     # add your custom domain here, comma-separated
OD_DATA_DIR=/data/od                            # projects, design systems, settings
HOME=/data/home                                 # agent CLI logins and settings
ANTHROPIC_API_KEY / OPENAI_API_KEY / OPENROUTER_API_KEY   # optional, per agent
```

Everything sits on one volume at `/data`. The container starts as root only long enough to hand that volume to the image's `open-design` user, then runs upstream's command as that user.

The service builds from the newest upstream image. To stay on one release, set `OD_VERSION` (an image tag) on the service.

The service used 0.17 GB of RAM idle and about 0.75 GB while one OpenCode run worked. Railway's trial caps a service at 1 GB, and in my test two runs started at the same moment got the agent process killed, so use the Hobby plan if you want agents working in parallel.

## Why Deploy OpenDesign on Railway?

The studio stays up on its own HTTPS address behind upstream's token login, with the agent CLIs already installed, so a design brief works from any browser. Idle it costs about $2 a month in RAM; model calls are billed by your provider.


## Similar templates

- [Chat Chat](https://railway.com/deploy/-WWW5r) — Chat Chat, your own unified chat and search to AI platform.
- [stella](https://railway.com/deploy/stella) — Self-host stella with web, API, Postgres, Redis, and object storage.
- [Hermes Agent | OpenClaw Alternative with Dashboard](https://railway.com/deploy/hermes-agent-or-openclaw-alternative-wit) — Self-Hosted Hermes AI Agent for Telegram, Discord & Slack

Open this page in a browser: https://railway.com/deploy/opendesign
