TOML 포맷터 & 검증기

TOML을 붙여넣고 포맷 버튼을 누르면 TOML 1.0 정규형으로 정리되고, 검증 버튼을 누르면 문법만 확인해요. 모든 처리는 브라우저 안에서 진행되며 업로드가 없어요.

  1. 왼쪽 텍스트 영역에 TOML을 붙여넣어 주세요.
  2. 포맷 버튼을 누르면 @iarna/toml을 거쳐 정규화된 레이아웃으로 출력돼요.
  3. 검증 버튼은 입력을 변경하지 않고 문법만 확인합니다.
  4. 오류는 발생한 줄과 열을 알려줘요.
어떤 도구인가요?

@iarna/toml의 TOML 1.0 모드로 파싱한 뒤 정규 레이아웃으로 다시 출력합니다 — 일반 키가 하위 테이블보다 먼저 오고, 따옴표 처리가 일관되며, 정수의 밑줄 구분자는 제거돼요. 검증 버튼은 입력을 바꾸지 않고 스펙에 따라 문법만 확인합니다. 주석은 파싱-덤프 왕복 과정에서 사라져요(대부분의 TOML 포맷터가 동일한 한계를 가집니다).

예시

정리되지 않은 TOML 입력:

[server]
host="localhost"
port=8080

name="myapp"

정리된 출력:

name = "myapp"

[server]
host = "localhost"
port = 8080

자주 만나는 TOML 오류와 해결 방법

TOML 1.0 의 규칙은 YAML 이나 JSON 보다 엄격해요. 파서가 거부할 때 살펴볼 패턴들입니다.

  • 따옴표 없는 문자열. `name = Ada` 는 잘못됐어요. 큰따옴표를 사용하세요: `name = "Ada"`.
  • 테이블 재정의. `[a]` 를 두 번 정의하는 건 오류예요. 같은 테이블 헤더는 최대 한 번만 등장해야 합니다. 키들을 단일 `[a]` 블록으로 합쳐 주세요.
  • 테이블 뒤에 최상위 키. `[section]` 을 작성한 이후의 모든 키는 그 섹션에 속해요. 일반 키는 첫 테이블 헤더보다 앞에 와야 합니다. 포맷터가 이를 자동으로 재정렬해 주지만, 입력 자체가 유효해야 해요.
  • 시간대 없는 날짜시간. `d = 2026-04-26T12:00:00` (Z나 오프셋 없음) 은 "지역 날짜시간" 이에요. 파싱은 되지만 JSON 스타일 소비자는 지역성을 표현하지 못할 수 있어요. UTC 가 필요하면 `2026-04-26T12:00:00Z` 를 사용하세요.
  • 인라인 테이블 확장. 인라인 테이블 `point = {x=1, y=2}` 은 닫혀 있고 자기 완결적이에요. 나중에 `point.z = 3` 으로 확장할 수 없어요. 확장이 필요하면 표준 `[point]` 블록 문법을 사용하세요.
  • 트리플 쿼트 이스케이프 혼동. `"""..."""` (기본 다중 행)은 이스케이프를 처리하지만 `\'\'\'...\'\'\'` (리터럴 다중 행)은 처리하지 않아요. 두 규칙을 섞으면 가장 흔한 다중 행 문자열 오류가 발생합니다.
자주 묻는 질문

포맷이 데이터를 변경하나요?

레이아웃만 바뀝니다 — TOML 규칙에 따라 일반 키가 하위 테이블보다 앞에 오도록 정렬되고, 공백이 정규화되며, 정수의 밑줄(TOML 의미론)이 제거돼요. 값 자체는 변하지 않습니다.

TOML 주석은 보존되나요?

아니요. @iarna/toml 의 파싱-덤프 왕복은 주석을 유지하지 않아요. 주석을 보존하는 포맷이 필요하면 소스 위치 정보를 유지하는 다른 라이브러리를 사용해야 해요.

TOML 1.0 기준으로 검증하나요?

네. @iarna/toml 은 TOML 1.0 을 따라요 — 혼합 타입 배열, 도트 키, 개정된 문자열 규칙을 모두 허용합니다. TOML 0.5 전용 동작(동질 배열 필수)에 의존하는 입력도 여기서는 파싱되지만, 더 엄격한 0.5 파서에서는 깨질 수 있어요.

얼마나 큰 TOML 파일까지 처리되나요?

약 30 MB 까지는 무리 없이 동작해요. 대부분의 설정 파일은 1 MB 미만입니다.

TOML 이 어디론가 업로드되나요?

아니요. 모든 처리는 브라우저 안에서 진행돼요. 변환 버튼을 눌러도 어떤 서버에도 데이터가 전송되지 않습니다.

왜 포맷터가 키 순서를 바꾸나요?

TOML 1.0 은 같은 스코프 내에서 일반 키(원시 값)가 테이블 헤더보다 먼저 등장해야 한다고 요구해요. 포맷터는 일반 키를 하위 테이블 앞으로 정렬해 이 규칙을 적용합니다. 원본의 순서가 달랐다면 포맷 단계에서 정규화돼요.