> For the complete documentation index, see [llms.txt](https://docs.kouch.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.kouch.dev/docs/adr/0006-in-app-emulator-updater.md).

# ADR 0006: Emulator install/update lives in Kouch, driven by community profiles

## Status

Accepted (2026-09-18, owner decision — "full updater, but the user is the one adding the emulators, they are NOT bundled in").

## Context

`docs/FEATURE_PLAN.md` ("External GitHub updater (separate from Steam app)") kept every emulator download outside the Steam app: a community-maintained tool in a separate org, not promoted in Kouch. The motivation was store-policy caution — Kouch must never look like it ships or distributes emulators for excluded platforms.

The owner asked for a smoother path: community-written **emulator profiles** (`.kouch-profile`, `docs/DESIGN.md` §10c) that can be imported by drag-and-drop, from Settings, or through a `kouch://` link, and that may name a **source** the emulator can be fetched and kept up to date from.

## Decision

The updater is part of Kouch (`crates/kouch-updater`, `profile_check_update` / `profile_update` / `profile_rollback` commands), but:

* **Nothing is bundled and nothing is enabled by default.** Every source comes from a profile the user imports; a profile is data, not code.
* **The user's toggles win.** "Check for emulator updates" and "Update automatically" default off on every import; a profile's `auto_update` is only a suggestion and cannot turn either on.
* Every import ends in the same confirmation Sheet showing the source host, asset, size and SHA-256 (or "unverified"); errors from validation block the import. Links never carry launch arguments.
* Downloads are HTTPS only with no cross-domain redirects; SHA-256 is verified when declared; installs go to `<data>/emulators/<profile-id>/<version>/` and switch `launch.path` atomically; the previous version stays for **Roll back**; a running emulator is never touched.
* Profiles may not reference BIOS, firmware or keys (deny-list in `kouch-profiles::validate`) — ground rule 2 holds.
* The FEATURE\_PLAN's items that still apply — official release pages only, changelog before updating, a remote blocklist for malicious or DMCA'd sources, maintainer 2FA for any curated profile repository — are the hardening backlog for this crate, not reasons to move it back out.

## Consequences

* One fewer tool for players to install; the Steam app is the whole experience, which is what the 5×3 launcher is for.
* Store-policy risk is managed by *what* Kouch does (never bundles, never defaults on, never fetches without an explicit user import + confirm) rather than *where* the code lives. Revisit if Steam review objects.
* `docs/FEATURE_PLAN.md` "External GitHub updater" is superseded by this ADR; the plan text is kept verbatim as the owner's original.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.kouch.dev/docs/adr/0006-in-app-emulator-updater.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
