> ## Documentation Index
> Fetch the complete documentation index at: https://ej3mplo.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Saved games, repacks and shortcuts

> ejg.saves, repackUpdateNote, howLongNote, shortcuts and your year.

## Saved games

```js theme={null}
const info = await ejg.saves.info(id)
// { paths: [{ path, source: "manifest" | "emulator" | "steam" | "manual", bytes, files }],
//   snapshots: [{ id, at, size, note }], known }
const copy = await ejg.saves.backup(id)       // the copy, or null if nothing changed
await ejg.saves.restore(id, copy.id)          // with the game closed
ejg.saves.onChange(({ gameId }) => …)         // a new copy, a restore, or paths changed
```

Where each game stores its saves comes from the Ludusavi manifest, the Steam emulator folders and Steam Cloud.

## A repack with a newer version

Games installed from Downloads carry `repackUpdate: { slug, installed, latest }` when the store has a newer
version (and the user has not hidden it). The kit paints the notice:

```js theme={null}
import { repackUpdateNote } from "/_sdk/kit/updates.js"
page.append(repackUpdateNote(game))      // HTMLElement | null
```

Also: `ejg.game.dismissRepackUpdate(id)` and `ejg.game.checkRepackUpdates()`.

## How long it takes

```js theme={null}
const h = await ejg.game.hltb(id)         // { main, extra, complete, url } in hours, or null
```

```js theme={null}
import { howLongNote } from "/_sdk/kit/hltb.js"
page.append(howLongNote(game))           // fills itself in; if there is no data, it disappears
```

## Launching from outside

```js theme={null}
await ejg.game.shortcut(id)               // a desktop shortcut (path of the .lnk)
await ejg.game.addToSteam(id)             // adds it to Steam as a non-Steam game
```

## Console games

ROM games carry `platform` (`"snes"`, `"ps2"`…). Smart collections accept the rule
`{ platform: "snes" }`, and ejGames creates one per system.

## Your year

```js theme={null}
const y = await ejg.stats.year(2026)      // hours, top games, months, streaks, achievements…
ejg.ui.open("year-review")                // the host's card recap
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.