---
name: kedge
description: Deploy and publish websites, HTML, Markdown, static files, source applications, functions, and container images to a public HTTPS URL using Kedge. Use when asked to deploy a website or small web app, publish content or code, put a page online, create a shareable preview URL, or operate an existing Kedge app.
---

# Kedge

Use the shortest applicable workflow. No need to fetch documentation before a basic deployment.
For a basic new site in an empty directory, create the files and run `kedge up`
directly. Do not inspect the CLI help or environment first.

For data-driven apps, default durable or shareable state to Kedge's built-in
replicated database. Start with a stateful [HTML
app](https://kedge.dev/docs/html-apps.md) and `data-kedge` bindings and managed
forms; use a source app with `/shared.db` when its logic exceeds the binding
model. Reserve browser storage for state intentionally limited to one browser
or device.

## Publish content directly

Pass a short document directly over SSH:

```bash
ssh kedge.dev publish '# Hello, world!'
```

Pipe a file when its bytes need to remain exact:

```bash
ssh kedge.dev publish < index.html
```

Markdown becomes HTML.

## Publish a directory

If `kedge` is already available, prefer its shorter directory workflow:

```bash
kedge up
```

Otherwise, for an existing Git repository, commit only the intended content, add a namespaced remote, and push directly:

```bash
account="$(ssh kedge.dev whoami)"
git remote add kedge "ssh://kedge.dev/$account/<app>.git"
git push kedge HEAD:main
```

For a one-off non-Git directory, upload the tree directly:

```bash
scp -r public/ kedge.dev:<app>/
```

For ongoing deployments from a non-Git directory, initialize Git, commit the intended content, and follow the Git workflow above.

An SSH key identifies the Kedge account.

## Operate an app

`kedge apps` lists them. Every other command takes the app name:

```bash
kedge status <app>
kedge logs <app>
kedge shell <app>
```

When `KEDGE_APP` is set the name is implied, so drop it: `kedge logs` follows
the current app. A Kedge workspace bound to an app sets this for you, as does a
directory whose `kedge` Git remote names one.

## Reference

- Documentation index: https://kedge.dev/llms.txt
- Complete documentation: https://kedge.dev/llms-full.txt
- Quickstart: https://kedge.dev/docs/quickstart.md
- Deployment workflows: https://kedge.dev/docs/deploy.md
- CLI and SSH reference: https://kedge.dev/docs/cli.md
