# Publish your app

Publishing turns something you've deployed into an app: a public page on koo.io that anyone can visit. This page covers what a listing is, how to publish a service, how to author the page, and what to do when a listing degrades.

## A listing that points at a service

An app page is a listing that points at exactly one exposed web service. The page lives at `koo.io/@handle/app-slug` — the handle belongs to the account that owns the service (see [Your public profile](/docs/showcase/your-profile)), and you choose the slug when you publish.

The page shows a Visit link to the URL you chose, the listing content you author, and community activity — votes and comments, covered in [Discovery & community](/docs/showcase/discovery-and-community).

> **Note:**
>
> Publishing shares only the service's public URL and the listing content. It doesn't change the service itself, and visitors never see your logs, variables, deployments, or anything else inside the console.

## Publish a service

1. - 
   -
2. 
3. 
4. 
5. 
6.

The page is live right away at `koo.io/@handle/app-slug`. On the board, the service's node picks up a **Published** badge, so you can see at a glance which services have a public page.

Publishing, unpublishing, and re-pointing a listing require the admin role or higher. Editing a published listing's content requires editor or higher — see [Teams and roles](/docs/collaboration/teams-and-roles).

## Author the listing

The listing carries everything the public page shows. You fill it in when you publish, and edit it any time after by opening the app from **Apps**:

- 
- 
- 
- 
- 
- 
-

## Change where the page points

The listing tracks its service by name, not by a hidden id. Deleting a service and recreating it under the same name — or [promoting](/docs/projects/promote-an-environment) into that environment — keeps the page bound to whatever holds the name.

To point the page somewhere else, open the app from **Apps**, change the environment, service, or public URL under **Target service**, and click **Save changes**.

## When the page looks broken

The pointer is re-checked every time the page is read — nothing stale is stored. When it no longer resolves, the public page hides its Visit link, and your own view of the app tells you exactly why:

- 
- 
-

Fixing the service or re-pointing the listing clears the state on the next read — there is nothing extra to save.

The console won't let you break a listing silently: [staging](/docs/projects/staged-changes) a change that un-exposes or deletes a service behind a live app asks for explicit confirmation before the change goes on the changes bar.

## Unpublish

To take the page down, open the app from **Apps** and click **Remove app** in the **Danger zone**, then confirm.

- 
-

> **Warning:**
>
> Removing an app can't be undone. Publishing the same service again creates a fresh listing — the old page's votes and comments don't carry over.

Everything on this page is also available programmatically — see the [Published apps API](/api/apps) and the [Published app object](/api/objects/published-app).
