siyuan-note/siyuan · error

invalid inline styles data: %w

Error message

invalid inline styles data: %w

What it means

After version checks, loadInlineStyles runs normalizeInlineStyles over the Styles array to enforce IDs, limits, and field validity. Any violation (nil entry, empty/invalid ID, over-limit count, bad style data) surfaces as this generic 'invalid inline styles data' error for the Styles section.

Source

Thrown at kernel/model/inline_style.go:478

	data, err := filelock.ReadFile(inlineStylesPath())
	if os.IsNotExist(err) {
		return ret, nil
	}
	if err != nil {
		return nil, fmt.Errorf("read inline styles failed: %w", err)
	}
	if maxInlineStylesFileSize < len(data) {
		return nil, fmt.Errorf("inline styles file exceeds the %d byte limit", maxInlineStylesFileSize)
	}
	if err = gulu.JSON.UnmarshalJSON(data, ret); err != nil {
		return nil, fmt.Errorf("unmarshal inline styles failed: %w", err)
	}
	if ret.Version != 1 && ret.Version != InlineStylesVersion {
		return nil, fmt.Errorf("unsupported inline styles version [%d]", ret.Version)
	}
	ret.Styles, err = normalizeInlineStyles(ret.Styles, false)
	if err != nil {
		return nil, fmt.Errorf("invalid inline styles data: %w", err)
	}
	ret.Builtin, err = normalizeInlineStyleBuiltin(ret.Builtin)
	if err != nil {
		return nil, fmt.Errorf("invalid inline styles data: %w", err)
	}
	ret.Order = normalizeInlineStyleOrder(ret.Order, ret.Styles)
	ret.AV, err = normalizeInlineStyleAV(ret.AV, false)
	if err != nil {
		return nil, fmt.Errorf("invalid inline styles data: %w", err)
	}
	ret.Version = InlineStylesVersion
	return ret, nil
}

func newEmptyInlineStyles() *InlineStyles {
	return &InlineStyles{
		Version: InlineStylesVersion,
		Styles:  []*InlineStyle{},

View on GitHub (pinned to 8641553a1f)

Solutions

  1. Fix or remove the offending styles entries in the JSON (each needs a unique valid ID and style payload)
  2. Restore the file from file history or backup
  3. Delete the file to reset to defaults if the custom styles are expendable
  4. Use the in-app inline-style editor rather than editing the file so invariants are maintained

Example fix

// before: style entry without ID fails normalization
{"styles":[{"style":"color:red"}]}
// after: unique ID present
{"styles":[{"id":"20240101120000-abcdefg","style":"color:red"}]}
Defensive patterns

Strategy: validation

Validate before calling

function stylesWellFormed(styles) {
  const ids = new Set();
  return Array.isArray(styles) && styles.every(s =>
    s && typeof s.id === 'string' && /^[0-9]{14}-[a-z0-9]{7}$/.test(s.id) && !ids.has(s.id) && ids.add(s.id));
}

Type guard

function isInlineStyle(s) {
  return s !== null && typeof s === 'object' && typeof s.id === 'string' && s.id.length > 0 && typeof s.style === 'string';
}

Prevention

When it happens

Trigger: The loaded document's styles array contains null entries, entries with missing/duplicate/invalid IDs, or exceeds maxInlineStyles items when any loader-calling API is invoked.

Common situations: Manual edits removing required fields, duplicate IDs introduced by copy-pasting style entries, or partially corrupted JSON that still parses but violates struct invariants.

Understand the failure class

Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.

Related errors


AI-assisted analysis of siyuan-note/siyuan@8641553a1f (2026-09-11). Data as JSON: /api/errors/3dc9ccbbb34c44cf. Report an issue: GitHub.