ppy/osu · error · InvalidOperationException
Ruleset with ID of {Score.RulesetID} not found locally
Error message
Ruleset with ID of {Score.RulesetID} not found locally What it means
Thrown by DrawableProfileScore.load when resolving the ruleset for a profile score: rulesets.GetRuleset(Score.RulesetID) returns null. The profile score references a ruleset the client cannot instantiate.
Source
Thrown at osu.Game/Overlays/Profile/Sections/Ranks/DrawableProfileScore.cs:54
[Resolved]
private OsuColour colours { get; set; } = null!;
[Resolved]
private OverlayColourProvider colourProvider { get; set; } = null!;
public DrawableProfileScore(SoloScoreInfo score)
{
Score = score;
RelativeSizeAxes = Axes.X;
Height = height;
}
[BackgroundDependencyLoader]
private void load(RulesetStore rulesets)
{
var ruleset = rulesets.GetRuleset(Score.RulesetID)?.CreateInstance() ?? throw new InvalidOperationException($"Ruleset with ID of {Score.RulesetID} not found locally");
AddInternal(new ProfileItemContainer
{
Children = new Drawable[]
{
new Container
{
RelativeSizeAxes = Axes.Both,
Padding = new MarginPadding { Left = 20, Right = performance_width },
Children = new Drawable[]
{
new FillFlowContainer
{
Anchor = Anchor.CentreLeft,
Origin = Anchor.CentreLeft,
AutoSizeAxes = Axes.Both,
Direction = FillDirection.Horizontal,
Spacing = new Vector2(10, 0),
View on GitHub (pinned to d9c73e12ad)
Solutions
- Ensure the ruleset assembly for Score.RulesetID is installed and enabled.
- Filter scores by rulesets.AvailableRulesets before creating DrawableProfileScore.
- Catch InvalidOperationException during load and skip that score in the profile list.
Example fix
// before Add(new DrawableProfileScore(score)); // after if (rulesets.GetRuleset(score.RulesetID) == null) return; Add(new DrawableProfileScore(score));
Defensive patterns
Strategy: validation
Validate before calling
if (rulesets.GetRuleset(score.RulesetID) == null)
return; // skip profile scores whose ruleset is unavailable Type guard
RulesetInfo? ResolveRuleset(RulesetStore store, SoloScoreInfo score)
=> store.GetRuleset(score.RulesetID); Try / catch
try { Add(new DrawableProfileScore(score)); }
catch (InvalidOperationException) { /* ruleset unavailable: skip */ } Prevention
- Filter profile scores by AvailableRulesets before constructing DrawableProfileScore.
- Keep all standard ruleset DLLs enabled.
- Telemetry-log unresolved RulesetIDs.
When it happens
Trigger: Loading a DrawableProfileScore for a SoloScoreInfo whose RulesetID is not in the local RulesetStore (during [BackgroundDependencyLoader]).
Common situations: Profile displays a score from a ruleset the client lacks (custom/uninstalled/disabled ruleset, version skew).
Related errors
- Ruleset with ID of {RulesetID} not found locally
- Couldn't create score with unknown ruleset: {RulesetId}
- At least one value expected!
- Only scores in the osu, taiko, catch, or mania rulesets can
- Ruleset is not available locally.
AI-assisted analysis of ppy/osu@d9c73e12ad (2026-08-13).
Data as JSON: /api/errors/28ad09d64c90f81f.
Report an issue: GitHub.