Markdown Extension Proposal

Native Indent
for Markdown

마크다운에는 들여쓰기를 위한 문법이 없습니다. .> ..> ...> — 시각적 깊이로 계층을 표현하는 확장 문법을 제안합니다.Markdown has no dedicated indentation syntax. We propose .> ..> ...> — a minimal extension for expressing semantic hierarchy through visual indentation.

.> syntax → rendered
markdown source
# Project overview .> Architecture ..> Frontend — React ..> Backend — Go ...> Auth: JWT ...> Data: PostgreSQL
rendered output
Project overview
Architecture
Frontend — React
Backend — Go
Auth: JWT
Data: PostgreSQL
↓ 문제부터 보기↓ Start with the problem
01 — Problem
들여쓰기 하나가 왜 이렇게 어려운가All this pain for a simple indent

문서에서 시각적 깊이는 작아 보여도 가독성을 크게 좌우합니다. 하지만 마크다운에는 들여쓰기 문법이 없고, 우회법은 전부 다른 문법을 억지로 빌려 쓸 뿐입니다.Visual depth may seem minor, but it makes a real difference in readability. Markdown has no syntax for indentation, and every workaround misuses something else.

01-01  반복 — HTML 엔티티 수동 삽입  repetition — manual HTML entities
마크다운 소스Markdown source
    detail         deeper             level 3
실제 렌더링Actual render
    detail
        deeper
            level 3
→ 렌더링은 되지만... 소스를 다시 보세요→ It renders... but look at the source again
깊이 3이면   12개. 소스가 엉망이 됨. 파서마다 처리도 다름.Depth 3 = 12   entities. Source readability destroyed. Parser behavior varies.
01-02> 블록인용 남용 — 의미 오염> Blockquote abuse — semantic pollution
마크다운 소스Markdown source
> description > > supplementary > > > details
실제 렌더링Actual render
description
supplementary
details
🔊 스크린 리더: "인용 시작… 인용 속 인용…"🔊 Screen reader: "blockquote… nested blockquote…"
들여쓰기를 원했지만 <blockquote> 3중 중첩. 의도와 의미가 완전히 불일치.Wanted indentation, got triple-nested <blockquote>. Intent and semantics misaligned.
01-03탭 / 스페이스 4칸 — 코드 블록으로 변신Tab / 4 spaces — becomes a code block
마크다운 소스Markdown source
normal paragraph just want margin this is plain text
실제 렌더링Actual render
normal paragraph
just want margin this is plain text
→ <pre><code> 코드 블록이 되어버림→ Rendered as <pre><code> block
4칸 스페이스 = 코드 블록. 가장 직관적인 들여쓰기 방법이 이미 점유됨.4 spaces = code block. The most intuitive indentation method is already taken.
01-04빈 리스트 아이템 트릭 — 대부분 렌더러에서 무효Empty list item trick — invalid in most renderers
마크다운 소스Markdown source
- indented-looking text continued
실제 렌더링 (대부분의 파서)Actual render (most parsers)
GitHub / CommonMark
  • indented-looking text continued
VSCode Preview
  •  
indented-looking text
→ 파서가 일반 리스트로 보정하거나, 빈 불릿이 노출됨→ Parser corrects to proper list, or exposes empty bullet
렌더러마다 결과가 다름. 대부분 파서가 일반 목록으로 보정해 버림.Results vary. Most parsers correct to a proper list, so the trick simply doesn't work.
02 — Proposed Syntax
점 개수가 곧 깊이Number of dots = depth

규칙은 간단합니다. 줄 시작에 .>를 쓰고, 점 개수로 깊이를 나타냅니다.The rule is simple. Start a line with .> and express depth by the number of dots.

SyntaxHTML Output설명Description
.> text<div class="indent-1">1단계 들여쓰기Indent level 1
..> text<div class="indent-2">2단계 들여쓰기Indent level 2
...> text<div class="indent-3">3단계 들여쓰기Indent level 3
....> text<div class="indent-4">4단계 들여쓰기Indent level 4
03 — AS-IS → TO-BE
같은 결과, 다른 의도Same result, different intent
AS-IS
# Project overview &nbsp;&nbsp;&nbsp;&nbsp;background &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;detail 또는 blockquote 남용:or blockquote abuse: > background > > detail > > > deeper ⚠ 의미 오염 / 소스 가독성 저하⚠ Semantic pollution / poor readability
TO-BE
# Project overview .> background detail continues here more context ..> deeper note still inside depth 2 ✓ 의미 명확 (indent ≠ quote)✓ Clear intent (indent ≠ quote) ✓ lazy continuation — 접두사 반복 불필요✓ Lazy continuation — no prefix repetition ✓ 렌더러 독립적 / 충돌 없음✓ Renderer-independent / no conflicts
04 — Scope & Boundaries
컨테이너 블록 — >와 같은 모델Container block — same model as >

.>>와 같은 container block입니다. lazy continuation이 가능하고, 빈 줄이면 컨테이너가 끝납니다..> is a container block, same model as >. Lazy continuation is allowed. An empty line terminates the container.

컨테이너 동작Container behavior
.> first line
continued without prefix
still inside indent

outside — empty line ends
lazy continuation — 접두사 없이 빈 줄 전까지 컨테이너 안Lazy continuation — no prefix needed until empty line
.> depth 1
..> depth 2 nested
still depth 2
더 깊은 depth는 중첩 — > >와 같은 패턴Deeper depth = nesting — same pattern as > >
.> text + **bold** `code` ~~strike~~
인라인 마크다운 자유 사용All inline markdown
.> inner blocks work:
.> > blockquote inside
.> - list inside
안에 다른 블록 포함 가능 (정방향)Other blocks inside indent (forward)
역방향 — 다른 블록 안에서 사용 불가Reverse — not inside other blocks
> .> indent in quote
blockquote 안에서 .> 불가.> inside blockquote — not allowed
- .> indent in list
리스트 안에서 .> 불가.> inside list item — not allowed
| .> cell | tbl
테이블 셀 안에서 .> 불가.> inside table cell — not allowed
```
.> in code
```
코드 블록 안 — 그냥 텍스트Inside code block — literal text
왜 > 와 같은 모델인가Why the same model as >
들여쓰기의 개념은 영역입니다 — 줄 단위 선언이 아닙니다. 워드 프로세서에서도 들여쓰기는 해제 전까지 유지됩니다.

마크다운의 >가 lazy continuation을 쓰는 이유도 이것입니다 — 쓰는 사람의 흐름을 우선한 설계.

.>는 이 검증된 패턴을 따릅니다. 접두사로 시작하고, 빈 줄로 끝납니다.

역방향은 금지 — .>는 항상 줄 시작(column 0)에서만 동작합니다.
The mental model of "indentation" is an area, not a per-line declaration. In word processors, indent persists until explicitly removed.

This is exactly why Markdown's > supports lazy continuation — prioritizing natural writing flow.

.> follows this proven pattern. A prefix opens the area; an empty line closes it.

Reverse is forbidden — .> only opens a new container at column 0.
05 — Live Preview
직접 써보세요Try it yourself
.> Indent Renderer v0.1
markdown + .> syntax
rendered output
GUIDES
06 — Rationale
왜 .> 인가Why .>
01

기존 문법과 무충돌No conflict with existing syntax

.>로 시작하는 줄은 현재 어떤 파서에서도 특별한 의미가 없습니다..> at line start has no special meaning in any current parser.

02

소스에서 구조가 보임Structure visible in raw text

.>, ..>, ...> — 점이 늘어나는 모양만으로 깊이가 읽힙니다. 렌더링 전에도 구조가 보입니다..>, ..>, ...> — the growing dots convey depth visually even in raw text. Structure is visible before rendering.

03

의미의 분리Semantic clarity

>는 인용, .>는 들여쓰기. 의도와 결과가 일치합니다.> for quoting, .> for indenting. Intent matches output.

04

점진적 도입Graceful degradation

지원하지 않는 파서에서도 일반 텍스트로 보입니다.On unsupported parsers, it just shows as plain text.

05

구현 용이성Easy to implement

정규식 한 줄 /^(\.{1,4})>\s(.+)$/로 파싱할 수 있습니다.One regex /^(\.{1,4})>\s(.+)$/ handles all parsing.

06

타이핑 한 동작One-key typing flow

.>는 같은 물리 키입니다. .Shift+. — 손가락이 키에서 떠나지 않습니다. 깊이를 늘리려면 .을 한 번 더 누르면 됩니다.. and > share the same physical key. .Shift+. — your finger never leaves the key. Deeper indent is just one more . press.

07 — Spec Draft
구현 명세 초안Implementation spec draft
RULE 1 .> 는 container block — > (blockquote)와 같은 모델.> is a container block — same model as > (blockquote) RULE 2 줄 시작이 /^\.{1,N}> / 이면 해당 depth의 indent container를 연다If line starts with /^\.{1,N}> /, open an indent container at that depth RULE 3 점 개수 = indent depth (권장 최대: 4)Dot count = indent depth (recommended max: 4) RULE 4 > 뒤 공백 1개 필수, 이후 콘텐츠One space required after >, then content RULE 5 lazy continuation — 접두사 없는 줄은 현재 컨테이너 안Lazy continuation — lines without prefix belong to current container RULE 6 빈 줄이면 컨테이너 종료An empty line closes the container RULE 7 더 깊은 depth(.> → ..>)는 중첩 — > > 와 같은 패턴Deeper depth (.> → ..>) means nesting — same as > > RULE 8 인라인 마크다운 + 안쪽 블록(blockquote, list, code) 모두 허용Inline markdown + inner blocks (blockquote, list, code) all allowed RULE 9 HTML: <div class="md-indent md-indent-{N}"> RULE 10 [역방향 금지REV BAN] 다른 블록 안에서 .> 사용 불가 — column 0에서만 동작.> cannot be used inside other blocks — column 0 only NOTE 종료 조건 요약: (1) 빈 줄 (2) 더 낮은 depth의 .> (3) 파일 끝Termination: (1) empty line (2) shallower .> (3) end of file NOTE CSS: padding-left: calc(N × 1.5em) NOTE A11y: role="group" aria-level="{N}"
08 — Why This Matters
사람과 AI 모두를 위한 구조Structure for humans and AI alike

계층 없는 텍스트는 맥락을 잃기 쉽습니다. 같은 내용이라도 계층이 보이면 이해 속도와 정확도가 달라집니다.Flat text loses context. The same information, when layered explicitly, is understood faster and more accurately.

👤 사람이 읽을 때When humans read
Flat
Architecture overview
Frontend config
Backend config
API layer
Data layer
Layered
Architecture overview
Frontend config
Backend config
API layer
Data layer
시선의 흐름만으로 '이 정보가 어디에 속하는지' 바로 파악됩니다. 읽는 속도가 아니라 인지 속도의 문제입니다.Eye flow alone reveals "where this belongs." Not reading speed — cognitive speed.
🤖 AI가 읽을 때When AI reads
Flat
Tokens:
[Architecture] [overview]
[Frontend] [config] [Backend]
[config] [API] [layer]
→ 종속 관계 불명확→ Hierarchy unclear
Layered
.> depth=1
..> depth=2 ← child
..> depth=2 ← sibling
...> depth=3 ← child
→ 트리 즉시 파싱→ Tree parsed instantly
LLM은 토큰에서 계층을 추론해야 합니다. .>명시적 트리 구조를 제공하면 맥락 파악 비용이 줄어듭니다.LLMs must infer hierarchy from tokens. .> provides an explicit tree structure, reducing context-parsing cost.
마크다운은 이미 사람과 기계 모두 읽는 포맷입니다. 계층을 명시하는 것은 양쪽 모두에게 도움이 되는 가장 작은 개선입니다.Markdown is already read by both humans and machines. Explicit hierarchy is the smallest improvement that helps both.

의견이나 제안은 GitHub 이슈로 남겨 주세요.Feedback and ideas are welcome — open an issue on GitHub.