> ## Documentation Index
> Fetch the complete documentation index at: https://tbd-6fc993ce-mintlify-add-deploy-button-docs-27400.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Deploying

Kernel's app deployment process is as simple as it is fast. There are no configuration files to manage or complex CI/CD pipelines.

Once you deploy an app on Kernel, you can schedule its actions on a job or run them from other contexts. You can even run actions multiple times in parallel.

## Deploy the app

### From local directory

Use our CLI from the root directory of your project:

```bash theme={null}
kernel deploy <entrypoint_file_name>
```

#### Notes

* The `entrypoint_file_name` is the file name where you [defined](/apps/develop) your app.
* Include a `.gitignore` file to exclude dependency folders like `node_modules` and `.venv`.

### From GitHub

You can deploy a Kernel app directly from a public or private GitHub repository using the Kernel CLI. No need to clone or manually push code.

```bash theme={null}
kernel deploy github \
  --url https://github.com/<owner>/<repo> \
  --ref <branch|tag|commit> \
  --entrypoint <path/to/entrypoint> \
  [--path <optional/subdir>] \
  [--github-token <token>] \
  [--env KEY=value ...] \
  [--env-file .env] \
  [--version latest] \
  [--force]
```

#### Notes

* **`--path` vs `--entrypoint`:** Use `--path` to specify a subdirectory within the repo (useful for monorepos), and `--entrypoint` for the path to your app's entry file relative to that directory (or repo root if no `--path` is specified).
* The CLI automatically downloads and extracts the GitHub source code and uploads your app for deployment.
* For private repositories, provide a `--github-token` or set the `GITHUB_TOKEN` environment variable.

## Environment variables

You can set environment variables for your app using the `--env` flag. For example:

<CodeGroup>
  ```bash Typescript/Javascript (inline) theme={null}
  kernel deploy my_app.ts --env MY_ENV_VAR=my_value # Can add multiple env vars delimited by space
  ```

  ```bash Typescript/Javascript (from file) theme={null}
  kernel deploy my_app.ts --env-file .env
  ```

  ```bash Python (inline) theme={null}
  kernel deploy my_app.py --env MY_ENV_VAR=my_value # Can add multiple env vars delimited by space
  ```

  ```bash Python (from file) theme={null}
  kernel deploy my_app.py --env-file .env
  ```
</CodeGroup>

## Deployment notes

* **The dependency manifest (`package.json` for JS/TS, `pyproject.toml` for Python) must be present in the root directory of your project.**
* **For JS/TS apps, set `"type": "module"` in your `package.json`.**
* View deployment logs using: `kernel deploy logs <deployment_id> --follow`
* If you encounter a 500 error during deployment, verify that your entrypoint file name and extension are correct (e.g., `app.py` not `app` or `app.js`).
* Kernel assumes the root directory contains at least this file structure:

<CodeGroup>
  ```bash Typescript/Javascript theme={null}
  project-root/
    ├─ .gitignore # Exclude dependency folders like node_modules
    ├─ my_app.ts # Entrypoint file (can be located in a subdirectory, e.g. src/my_app.ts)
    ├─ package.json
    ├─ tsconfig.json # If using TypeScript
    └─ bun.lock | package-lock.json | pnpm-lock.yaml # One of these lockfiles
  ```

  ```bash Python theme={null}
  project-root/
    ├─ .gitignore # Exclude dependency folders like .venv
    ├─ my_app.py # Entrypoint file
    └─ pyproject.toml
  ```
</CodeGroup>

```bash theme={null}
# Successful deployment CLI output
SUCCESS  Compressed files
SUCCESS  Deployment successful
SUCCESS  App "my_app.ts" deployed with action(s): [my-action]
INFO  Invoke with: kernel invoke my-app my-action --payload '{...}'
SUCCESS  Total deployment time: 2.78s
```

Once deployed, you can [invoke](/apps/invoke) your app from anywhere.

## Deploy Button

The Deploy Button lets users deploy your Kernel app with a single click. It's ideal for sharing open-source projects, templates, or example apps that others can deploy to their own Kernel account.

### How it works

1. Go to the [Deploy Button generator](https://dashboard.onkernel.com/deploy-button) in the Kernel dashboard
2. Enter your public GitHub repository URL
3. Specify the required environment variables (API keys, secrets, etc.) that users need to provide
4. Copy the generated button snippet or link

When someone clicks your Deploy Button, they're taken to a deployment flow where they:

* Connect their Kernel account
* Enter the required environment variable values you specified
* Deploy the app to their account

### Use cases

* **Open-source projects**: Let users deploy your app without cloning repos or running CLI commands
* **Templates and starters**: Share ready-to-deploy examples that others can customize
* **Documentation**: Embed deploy buttons in READMEs so readers can try your code instantly

### Adding the button to your repository

After generating your button, add it to your README or documentation:

```markdown theme={null}
[![Deploy](https://www.kernel.sh/brand_assets/kernel_deploy.svg)](https://dashboard.onkernel.com/deploy?repo=https%3A%2F%2Fgithub.com%2Forg%2Frepo&entrypoint=index.ts)
```

Or use HTML:

```html theme={null}
<a href="https://dashboard.onkernel.com/deploy?repo=https%3A%2F%2Fgithub.com%2Forg%2Frepo&entrypoint=index.ts"><img src="https://www.kernel.sh/brand_assets/kernel_deploy.svg" alt="Deploy" /></a>
```
