> For the complete documentation index, see [llms.txt](https://docs.onelitefeather.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.onelitefeather.net/ingot/upgrades/upgrade-changes.md).

# Upgrade changes and supported paths

Lookup tables for the upgrade to Ingot. Lists the supported upgrade paths, the changes of the first start in the database, the configuration and the tokens, and the environment variables.

## Supported upgrade paths

| From              | To                                                                | Storage          | Container test                                         |
| ----------------- | ----------------------------------------------------------------- | ---------------- | ------------------------------------------------------ |
| Reposilite 3.5.28 | First Ingot release with the identity model                       | SQLite (default) | `UpgradeScenario`, with switch and rollback            |
| Reposilite 3.5.28 | First Ingot release with the identity model                       | MariaDB 11.4     | `MariaDbUpgradeTest`, with switch and rollback         |
| Ingot 1.1.0       | First Ingot release with the identity model                       | SQLite (default) | `PreviousIngotMigrationTest`, with switch and rollback |
| Reposilite 2.x    | Ingot, tokens only, through `migration-plugin` and `token-import` | 2.x data files   | None                                                   |

## What the first start changes

### Database tables

The identity schema is created on the first start. The legacy token tables are kept and only read.

| Table                                                                                       | Content                                                                                                          |
| ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `principal`                                                                                 | Users and machine accounts. Each migrated token gets one machine principal.                                      |
| `principal_token`                                                                           | Token name, secret hash and expiry date.                                                                         |
| `team`, `team_member`, `team_grant`                                                         | Teams, their members and their grants. Each machine principal has a private team that holds its migrated routes. |
| `instance_role`                                                                             | Instance roles. A migrated manager token gets the instance admin role.                                           |
| `permission_node`, `team_parent`                                                            | Permission nodes and team hierarchy.                                                                             |
| `local_credential`, `refresh_token`, `login_attempt`, `login_setup_marker`, `user_identity` | Login tables.                                                                                                    |
| `identity_migration`                                                                        | One row per migration step, so each step runs once.                                                              |
| `identity_legacy_import`                                                                    | One row per legacy token that has been imported, keyed by the legacy id. Rows are never deleted.                 |
| `access_token`, `permission_access_token`, `permission_route`                               | Legacy token tables. Kept unchanged. Ingot reads them and never writes them.                                     |

### Configuration file

| Setting                                                 | Change                                                                                                                                                      |
| ------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `configuration.cdn`, `hideSettingsSecrets`              | Added with the value `false`.                                                                                                                               |
| `configuration.cdn`, `searchEnabled` and `searchEngine` | Added with the values `true` and `database`. Older versions ignore them after a rollback.                                                                   |
| Settings domain `search`                                | Added with its default values.                                                                                                                              |
| Settings domains `audit`, `cleanup`, `login`            | Added with their default values.                                                                                                                            |
| `authentication.ldap`                                   | Keeps working for the dashboard login with no change while `login.ldap` is off, and `login.ldap` is the new place for it and takes precedence once enabled. |
| Other settings                                          | Values unchanged. Header comments may differ, because both products rewrite the file.                                                                       |

### Tokens

| Legacy item                    | Result in Ingot                                                                                                                                           |
| ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Persistent token               | Machine principal with the same name. If another principal differs only in case, the name gets the token id appended, and the token keeps its exact name. |
| Secret                         | The stored hash is copied unchanged. Clients keep the secret they use.                                                                                    |
| Expiry date                    | Kept.                                                                                                                                                     |
| Manager permission             | Instance admin role.                                                                                                                                      |
| Read route                     | Grant `LEGACY_READ` on the private team, with the same path.                                                                                              |
| Write route                    | Grant `LEGACY_WRITE` on the private team, with the same path. It also allows delete.                                                                      |
| Other route permission         | Skipped. The log has a warning.                                                                                                                           |
| Temporary token from `--token` | Not stored and not migrated. Pass it again as before.                                                                                                     |
| Statistics from Reposilite 2.x | Not imported.                                                                                                                                             |

Tokens created in Ingot have the form `ingot_<tokenId>_<random>`. The secret is stored as a bcrypt hash.

### Environment variables

The `INGOT_` names are read first. Where a `REPOSILITE_` name exists, it is read as a fallback. When both are set, the `INGOT_` name wins. The full list of variables is in [Environment variables](/ingot/configuration/environment-variables.md).

* `INGOT_OPTS`, `INGOT_FORCE_CHOWN` and `INGOT_LOCAL_<KEY>` fall back to `REPOSILITE_OPTS`, `REPOSILITE_FORCE_CHOWN` and `REPOSILITE_LOCAL_<KEY>`.
* The `ingot.local.*` system properties fall back to `reposilite.local.*`.
* `JAVA_OPTS`, `PUID` and `PGID` have no prefix and are unchanged.


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.onelitefeather.net/ingot/upgrades/upgrade-changes.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
