Skip to content
Back to skills

Domino App Init

ASecurity

Scaffold a new Domino-ready web application (Vite + React, Streamlit, Dash, Flask, or Gradio) with proxy-compatible settings, port 8888 binding, and an app.sh entry point. Use when the user wants to start, initialize, or scaffold a new app to publish on Domino, or asks for a starter app.sh for a web framework.

  • 3 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 9, 2026
ai-agentsjavascriptpythonjavabashreactflaskapici/cd

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 7 files and shows the line behind each finding

Scanned October 9, 2026

npx -y skills add dominodatalab/domino-ai-plugin --skill domino-app-init --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Domino App Init?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Domino App Init
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/dominodatalab-domino-app-init/badge)](https://www.skillsdirectory.com/skills/dominodatalab-domino-app-init)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: domino-app-init
description: Scaffold a new Domino-ready web application (Vite + React, Streamlit, Dash, Flask, or Gradio) with proxy-compatible settings, port 8888 binding, and an app.sh entry point. Use when the user wants to start, initialize, or scaffold a new app to publish on Domino, or asks for a starter app.sh for a web framework.
---

# Initialize a Domino App

Create a web application that works behind Domino's reverse proxy on the first publish.

## Inputs

Collect these before writing files. Skip any the user has already given.

1. **Framework**: `vite-react` (default), `streamlit`, `dash`, `flask`, or `gradio`.
2. **Project name**: name for the app folder and `package.json` (React only).
3. **Model API integration**: whether the app calls a Domino model endpoint, and if so its URL.

If the target directory already contains an app, stop and ask before overwriting anything.

## Steps

1. Copy the matching template from this skill's `assets/` folder into the project:

   | Framework | Files to copy |
   |---|---|
   | `vite-react` | `assets/vite-react/vite.config.js`, `assets/vite-react/app.sh`, `assets/vite-react/.env.example` |
   | `streamlit` | `assets/streamlit/app.sh` |
   | `dash` | `assets/dash/app.sh`, and `assets/dash/app.py.template` saved as `app.py` |
   | `flask`, `gradio` | No template; write the files from the snippets below |

2. Make `app.sh` executable (`chmod +x app.sh`).
3. Keep these invariants in every generated file:
   - Bind to `0.0.0.0`, never `localhost` or `127.0.0.1`.
   - Listen on port `8888` unless the user asks for another port.
   - For Vite, set `base: './'` so assets resolve under the proxy prefix.
4. If the user wants Model API integration, add the endpoint URL and token as environment
   variables (see `.env.example`) and never hardcode credentials.
5. Finish with the post-initialization checklist below.

## Reference snippets

### React / Vite: `vite.config.js`

```javascript
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

export default defineConfig({
  plugins: [react()],
  base: './',
  server: { host: '0.0.0.0', port: 8888, strictPort: true },
  preview: { host: '0.0.0.0', port: 8888, strictPort: true },
  build: { outDir: 'dist', assetsDir: 'assets' }
})
```

### React / Vite: `app.sh`

```bash
#!/bin/bash
set -e
cd /mnt/code
npm ci
npm run build
npx serve -s dist -l 8888 --no-clipboard
```

### Streamlit: `app.sh`

```bash
#!/bin/bash
set -e
streamlit run app.py \
    --server.port 8888 \
    --server.address 0.0.0.0 \
    --server.headless true
```

### Dash: `app.py`

```python
import os
from dash import Dash, html

app = Dash(__name__)
app.layout = html.Div([html.H1("Domino Dash App")])

if __name__ == '__main__':
    app.run_server(host='0.0.0.0', port=8888, debug=False)
```

### Flask: `app.py` and `app.sh`

```python
import os
from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return "Domino Flask App"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8888, debug=False)
```

```bash
#!/bin/bash
set -e
python app.py
```

### Gradio: `app.py` (use the Flask `app.sh` above)

```python
import gradio as gr

demo = gr.Interface(fn=lambda text: text, inputs="text", outputs="text")

if __name__ == '__main__':
    demo.launch(server_name='0.0.0.0', server_port=8888)
```

## Post-initialization checklist

Tell the user to:

1. Configure environment variables in the Domino project settings.
2. Set `app.sh` as the app entry point when publishing the app.
3. Test locally with `./app.sh` before deploying.
4. Confirm the app listens on port 8888.

For deployment details, CI/CD, and proxy troubleshooting, use the `domino-apps` skill. If the app
shows 404s or blank pages after publishing, use the `domino-debug-proxy` skill.

Files in this skill

  • SKILL.md3.7 KB
  • assets/dash/app.py.template1.9 KB
  • assets/dash/app.sh508 B
  • assets/streamlit/app.sh829 B
  • assets/vite-react/.env.example455 B
  • assets/vite-react/app.sh830 B
  • assets/vite-react/vite.config.js826 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.