# Non-Source mode property edits detrimentally convert flow- to block-style (multi-level YAML, list of lists, sequence of sequences, ..)

**URL:** <https://forum.obsidian.md/t/non-source-mode-property-edits-detrimentally-convert-flow-to-block-style-multi-level-yaml-list-of-lists-sequence-of-sequences/101635>\
**Category:** Bug graveyard\
**Created:** [June 7, 2025, 8:28am UTC](https://forum.obsidian.md/t/non-source-mode-property-edits-detrimentally-convert-flow-to-block-style-multi-level-yaml-list-of-lists-sequence-of-sequences/101635 "2025-06-07T08:28:43Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Alistaire](https://forum.obsidian.md/letter_avatar_proxy/v4/letter/a/e95f7d/32.png) [@Alistaire](https://forum.obsidian.md/u/Alistaire)\
**Post date:** [June 7, 2025, 8:28am UTC](https://forum.obsidian.md/t/non-source-mode-property-edits-detrimentally-convert-flow-to-block-style-multi-level-yaml-list-of-lists-sequence-of-sequences/101635/1 "2025-06-07T08:28:43Z")

</div>

### Steps to reproduce

- Create a new vault (to show it works without plugins)
- Create a note or replace the note with the following YAML frontmatter (all examples taken from [Chapter 7 flow-style productions](https://yaml.org/spec/1.2.2/#chapter-7-flow-style-productions) of YAML 1.2.2, the latest version of YAML):
- “my\_use\_case” is in a format that allows overview of a large list of numbers in a way that makes it simple (in Source mode) to edit individual entries. The actual data would be height, center, width, color and name of a Gaussian peak

```auto
---
test1:
 - [one, two]  
 - [three ,four]
test2:
 [ [ "one",
     "two" ],
   [ "three",
    "four" ] ]
test3:
 [ "double quoted",
   "single quoted",
   "plain text",
   ["nested"],
   { "single": "pair" } ]
test4:
 - { one : two , three: four , }
 - {five: six,seven : eight}
test5:
 [ { "one": "two",
     "three": "four" },
   { "five": "six",
     "seven": "eight" } ]
test6:
 [{ "foo": "bar" }]
test7:
 [[ { "YAML": "separate" }],
   [{ null: "empty key entry" }],
   [{ { "JSON": "like" }: "adjacent" }] ]
test8:
 [[ "a", "b"],
   { "a": "b" },
   "a",
   "b",
   "c" ]
test9:
 - [a, b]
 - { a: b }
 - "a"
 - 'b'
 - c
test10:
 { "implicit block key":
   [{ "implicit flow key": "value" }] }
test11:
 { "foo": "",
   "": "bar" }
my_use_case:
 [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0] ]
---

```

This is displayed in the properties or bases view as:

 ![image](https://forum.obsidian.md/uploads/default/original/3X/2/e/2e409b63bf2633bc7743af40bf12089ef52a03ca.png)  
 ![image](https://forum.obsidian.md/uploads/default/original/3X/b/6/b6ceb558a1eeee21b1606876dbaac11f5f770871.png)

- Perform any action using the Properties view (such as rename a key, click to add a new key) or perform any action using Bases views (add a non-existent column and fill it in for this note)

### Did you follow the troubleshooting guide? [Y/N]

Yes, this is default Obsidian behaviour

### Expected result

I expect any flow-style YAML to be left as-is, given it is part of the YAML 1.2.2 specification, **unless** any conversion is **required** and **immediately usable by Obsidian** where the flow-style YAML was not.

### Actual result

- Observe that the entire YAML frontmatter has converted to block style YAML as follows
- “my\_use\_case” has been **destructively** converted to a completely unusable format

```auto
---
test1:
  - - one
    - two
  - - three
    - four
test2:
  - - one
    - two
  - - three
    - four
test3:
  - double quoted
  - single quoted
  - plain text
  - - nested
  - single: pair
test4:
  - one: two
    three: four
  - five: six
    seven: eight
test5:
  - one: two
    three: four
  - five: six
    seven: eight
test6:
  - foo: bar
test7:
  - - YAML: separate
  - - "": empty key entry
  - - '{ "JSON": "like" }': adjacent
test8:
  - - a
    - b
  - a: b
  - a
  - b
  - c
test9:
  - - a
    - b
  - a: b
  - a
  - b
  - c
test10:
  implicit block key:
    - implicit flow key: value
test11:
  foo: ""
  "": bar
my_use_case:
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
  - - 0
    - 0
    - 0
    - 0
    - 0
---

```

This is displayed in the properties or bases view as:

 ![image](https://forum.obsidian.md/uploads/default/original/3X/9/d/9dc2acb6c675682313ae35544d330b3ed38db65b.png)  
 ![image](https://forum.obsidian.md/uploads/default/original/3X/3/a/3aaac8fcb48b08221ce5f25417bda5af2a760209.png)

Or: There is **no visible difference** after Obsidian has modified flow-style YAML unprompted.

This modification becomes **irreversible** within the amount of edits required to overwrite the undo history.

### Environment

SYSTEM INFO:  
Obsidian version: v1.9.1  
Installer version: v1.7.7  
Operating system: Windows 11 Home 10.0.26100  
Login status: logged in  
Language: en  
Catalyst license: insider  
Insider build toggle: on  
Live preview: on  
Base theme: dark  
Community theme: none  
Snippets enabled: 0  
Restricted mode: on

RECOMMENDATIONS:  
none

* * *

### Additional information

This has been a bug since the Properties updates, but was manageable (despite the conversion from flow to block style being **completely unnecessary** ) through only using Source mode.

With Bases, the bug becomes entirely undetectable to typical users and irreversibly converts YAML formats to an actively worse-to-edit format.

Obsidian should do absolutely nothing to flow-style YAML when any random part of the YAML is modified outside of Source mode. Bases should not destructively and irreparably modify YAML frontmatter. Ideally there are no changes to flow-style YAML at any point, given that the modification **remains non-functional** in both Properties and Bases views and **has no user benefit whatsoever**. Furthermore, flow-style YAML **should remain intact** given it is part of the current YAML specification.

All of these are multi-level YAML sequences that are indicated as not recognized in the Properties as well as the Bases views, both before and after conversion. The format conversion from YAML flow-style to block-style has **no benefits** to either view, has **no benefits** to the user and in fact it is **detrimental**.

Obsidian does not enforce the block style YAML at any point. This conversion is not done in any way to improve the usability of the YAML. This is clearly a bug - **it is a far too aggressively run piece of code to generate only block-style YAML to no user benefit and to active user detriment**.

---

<div class="post-metadata">

**Author:** ![ariehen](https://forum.obsidian.md/user_avatar/forum.obsidian.md/ariehen/32/46932_2.png) [@ariehen](https://forum.obsidian.md/u/ariehen)\
**Post date:** [June 7, 2025, 8:34am UTC](https://forum.obsidian.md/t/non-source-mode-property-edits-detrimentally-convert-flow-to-block-style-multi-level-yaml-list-of-lists-sequence-of-sequences/101635/2 "2025-06-07T08:34:23Z")

</div>

See:

> [@YAML & Properties & API: processFrontMatter removes / alters string quotes, comments, types, formatting](https://forum.obsidian.md/t/api-processfrontmatter-removes-string-quotes-comments-types-formatting/65851):
>
> Calling processFrontMatter will destroy all previous formatting, and most YAML features/syntax. As you will see from the expected vs actual output, the behavior is quite odd. Steps to reproduce Modify the sample’s ‘sample-editor-command’ code in the onload method [here](https://github.com/obsidianmd/obsidian-sample-plugin/blob/7112f01bc6e20f4d6884c71aa2ecf8f6f1f8e3c7/main.ts#L40-L47) to the content below this.addCommand({ id: 'sample-editor-command', name: 'Sample editor command', editorCallback: (editor: Editor, view: MarkdownView) =\> { console.log(editor.getSelection()); editor.replaceSelection('Sam…

---

<div class="post-metadata">

**Author:** ![Alistaire](https://forum.obsidian.md/letter_avatar_proxy/v4/letter/a/e95f7d/32.png) [@Alistaire](https://forum.obsidian.md/u/Alistaire)\
**Post date:** [June 7, 2025, 9:05am UTC](https://forum.obsidian.md/t/non-source-mode-property-edits-detrimentally-convert-flow-to-block-style-multi-level-yaml-list-of-lists-sequence-of-sequences/101635/3 "2025-06-07T09:05:25Z")

</div>

Is there any way for a user to just not let Obsidian call this function? There are no settings or core plugins or anything to access this. When I add breakpoints to `App.js` lines `e.prototype.processFrontMatter = function(e, t, n) {` and `return [4, this.ctx.app.fileManager.processFrontMatter(this.file, (function(n) {` it doesn’t do anything.

EDIT: I’m not sure the problem is that function - apparently Obsidian uses something internally, and this strips YAML from flow-style formatting (besides many other aspects allowable in the YAML spec).

---

<div class="post-metadata">

**Author:** ![WhiteNoise](https://forum.obsidian.md/user_avatar/forum.obsidian.md/whitenoise/32/11_2.png) [@WhiteNoise](https://forum.obsidian.md/u/WhiteNoise)\
**Post date:** [August 22, 2025, 1:37pm UTC](https://forum.obsidian.md/t/non-source-mode-property-edits-detrimentally-convert-flow-to-block-style-multi-level-yaml-list-of-lists-sequence-of-sequences/101635/4 "2025-08-22T13:37:49Z")

</div>

arihen pointed you to the wrong thread.

For this BR, the relative FR is this

> [@Properties & Bases: Support multi-level YAML (Mapping of Mappings, nested attributes, nested properties)](https://forum.obsidian.md/t/properties-bases-support-multi-level-yaml-mapping-of-mappings-nested-attributes/63826):
>
> Use case or problem We need to be able to support multi-level YAML. Especially for Dataview users --- parent: child1: grandchild1: 1 grandchild2: 2 child2: grandchild3: 3 grandchild4: 4 ---

---

<div class="post-metadata">

**Author:** ![system](https://forum.obsidian.md/uploads/default/original/3X/b/e/bec35fbd23ab28909bb6bfe62cb32eb82dd34019.png) [@system](https://forum.obsidian.md/u/system)\
**Post date:** [August 29, 2025, 1:38pm UTC](https://forum.obsidian.md/t/non-source-mode-property-edits-detrimentally-convert-flow-to-block-style-multi-level-yaml-list-of-lists-sequence-of-sequences/101635/5 "2025-08-29T13:38:03Z")

</div>

Closed on August 29, 2025, 1:38pm UTC

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.
