# ODK v10 upgrade guide

As with all ODK updates, this version contains breaking changes. This update from ODK v9.4.1 to ODK v10.0 is more involved that usual due to a couple of factors.

1. The delta between these two releases is especially large as we went through a simplification and hardening process of the ODK itself
2. The base M2 engine has been repurposed to focus solely on support the ODK framework

Please have a read over the breaking changes list \[todo-reference]. Additional please read through the following four points, and action them if possible:

1. **Download and install the M2Deprecated plugin**\
   This plugin has accumulated deprecated content from M2 over the past year, and has now been removed fully from the base Unreal engine that ships with ODK v10. It's highly likely however that existing projects might have dependencies on some of that deprecated content, so we'd recommend that as a first step that you download the M2Deprecated plugin. You can do that directly from the ODK launcher. \
   \
   ![](/files/PA609fS7jCfO1hcHUrtP) \
   \
   Once downloaded and installed within your project, you'll see it as a project plugin within your content folder.\
   \
   ![](/files/7l3jwkgSpBc2DC79RikN)\
   \
   There's two version of the M2Deprecated plugin, 1.0 and 1.1. \
   1.0 contains the full content pack of all the assets that have been removed from the base M2 engine project. As some of the blueprint content relies on source content that has been fully removed, not all of the blueprint content will compile. \
   1.1 contains a stripped down version of the content that exists in 1.0, with all remaining blueprint content compiling. \
   If you are reliant on missing M2Deprecated content, it's recommend that you:

   1. Add M2Deprecated 1.0 to your project, and attempt to run. If all your content compiles as expected, then you don't need to do anymore.
   2. If you find that some of your content is reliant on blueprints that no longer compile, you can upgrade the M2Deprecated plugin to 1.1, and attempt to run.

   For any further questions about M2Deprecated content, please reach our to your nearest ODK support channel.
2. **Clean up unused config settings**\
   Previously ODK template projects instantiated a lot of required config directly within the config folder. This made it difficult from us to rollout changes to this content, as it was being versioned for the project at the point of creation. To solve this upgrade problem, we've migrated all required, base ODK config into the ODK plugin config folder directly. This means when you take a new ODK plugin, you automatically get migrated to the new required config. This does mean that any existing projects will very likely have redundant, potentially incorrect, config left over within their config folder. It's also likely that you've added your own config to the project config, so it's not as simple as nuking all of it. \
   \
   Our recommended guide for cleaning up is to inspect all config within your config folder, and remove anything you haven't added yourself. In general, the only config we include now as part of the base template instantiation process is the following. <br>

   ```
   <DefaultEngine.ini>
   [/Script/EngineSettings.GameMapsSettings]
   GameDefaultMap=<Path to default map>
   EditorStartupMap=<Path to default map>

   <DefaultGame.ini>
   [/Script/WorldBuilderEditor.M2_WorldBuilderSettings]
   !Maps=ClearArray
   +Maps=(IncludeMapInUpload=True,Map="<Path to default map>",DisplayName="<Name>",Description="<Description>",PictureUrl="")
   ```

   <br>
3. **Base singleton cleanup**\
   We've retired a number of legacy singleton objects that were previously defined within the world settings. The singletons references within world settings can become stale when their class no longer exists, and the bootflow process can stall when attempting to startup the world. \
   Please see this [breaking change](#default-required-singleton-classes-reset) for more information and recommend fixup steps.
4. **Roles system refactor**\
   The roles system has gone through a substantial refactor and cleanup, to remove superfluous functionality and better target what we require within the ODK. Please read the [breaking change](#roles-component-refactor) log here and ensure that if you require roles for your project, that you've created a new role DT and set it (either project wide within your config, or within your map directly).


---

# Agent Instructions: 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:

```
GET https://docs.otherside.xyz/release-notes/releases/v10.0-release/odk-v10-upgrade-guide.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
