지원 형식
VMark는 아래의 모든 파일 형식을 직접 열 수 있습니다. 차별화된 특징은 스키마 인식 미리보기입니다. 알려진 아티팩트 파일의 경우, 일반적인 JSON 트리가 아닌 적합한 뷰로 렌더링됩니다.
형식 활성화
Markdown, 일반 텍스트, YAML/YML 은 항상 전체 에디터로 열립니다 — 이것이 기본값입니다. 그 외의 형식은 모두 기본적으로 비활성화되어 있으며, 설정 → 형식의 카테고리 토글을 통해 활성화할 수 있습니다.
| 토글 | 활성화 대상 |
|---|---|
| 데이터 형식 | .json, .jsonl, .toml (소스 + 트리 분할 창, Cargo / package.json / pyproject 스키마 렌더러 포함) |
| 다이어그램 & SVG | .mmd, .svg (소스 + 새니타이즈된 라이브 렌더 분할 창) |
| HTML 미리보기 | .html, .htm (샌드박스 iframe — HTML 보안 모델 참조) |
| 코드 뷰어 | 읽기 전용 코드 뷰어 12종 (.ts, .tsx, .js, .jsx, .py, .rs, .go, .css, .sh, .bash, .rb, .lua) |
카테고리가 비활성화된 경우, 해당 확장자는 일반 텍스트 폴백으로 열립니다 — 미리보기나 스키마 뷰 없이도 파일은 계속 열립니다. 토글을 전환하면 레지스트리가 즉시 재빌드되고, 열려 있는 탭이 적절한 어댑터로 다시 마운트됩니다.
다중 형식 지원으로 업그레이드한 후 첫 실행 시, VMark는 설정 → 형식으로 안내하는 일회성 토스트 알림을 표시합니다. 알림을 닫았거나 새로 설치한 경우, 언제든지 설정 → 형식 패널에서 확인할 수 있습니다.
한눈에 보기
| 분류 | 확장자 | 기본값 | 에디터 | 미리보기 |
|---|---|---|---|---|
| Markdown | .md, .markdown, .mdown, .mkd, .mdx | 항상 켜짐 | WYSIWYG + 소스 모드 | 렌더링된 본문 |
| 일반 텍스트 | .txt | 항상 켜짐 | 소스 | — |
| 데이터 — YAML | .yaml, .yml | 항상 켜짐 | 소스 + 트리 | 탐색 가능한 트리, 스키마 인식 (GitHub Actions) |
| 데이터 — JSON | .json, .jsonl | 데이터 형식 토글 필요 | 소스 + 트리 | 탐색 가능한 JSON 트리, 스키마 인식 (package.json) |
| 데이터 — TOML | .toml | 데이터 형식 토글 필요 | 소스 + 트리 | 탐색 가능한 트리, 스키마 인식 (Cargo.toml, pyproject.toml) |
| 다이어그램 | .mmd | 다이어그램 & SVG 토글 필요 | 소스 + 렌더 | 라이브 Mermaid 다이어그램 |
| 벡터 | .svg | 다이어그램 & SVG 토글 필요 | 소스 + 렌더 | 새니타이즈된 인라인 렌더 |
| 웹 | .html, .htm | HTML 미리보기 토글 필요 | 소스 + 렌더 | 샌드박스 iframe (빈 sandbox="", DOMPurify, CSP) |
| 코드 (읽기 전용) | .ts, .tsx, .js, .jsx, .py, .rs, .go, .css, .sh, .bash, .rb, .lua | 코드 뷰어 토글 필요 | 뷰어 (편집 전환 가능) | — |
코드 파일은 기본적으로 읽기 전용으로 열리며, 편집 활성화 또는 외부 에디터에서 열기 배너가 표시됩니다.
스키마 인식 미리보기
경로 또는 내용이 알려진 스키마와 일치할 때, VMark는 일반 트리 대신 적합한 뷰로 대체합니다.
GitHub Actions 워크플로우 (.github/workflows/*.yml)
워크플로우 시각화 (작업 DAG, 트리거, 권한)로 열립니다.
- 경로 감지:
.github/workflows/하위의.yml/.yaml파일은 워크플로우 렌더러로 라우팅됩니다 — YAML 이 손상된 경우에도 진단과 함께 저하된 뷰를 표시합니다. (파일은 먼저 YAML 어댑터에 도달해야 하므로,.yml/.yaml확장자가 필요합니다.) - 내용 감지: 최상위
on:및jobs:키.
Cargo.toml
Rust 의존성 트리로 열립니다 — 런타임, 개발, 빌드 의존성, 버전 사양 및 피처 플래그 포함.
- 경로 감지: POSIX 또는 Windows 경로에서 파일명
Cargo.toml(대소문자 무관). - 내용 감지:
[package]또는[workspace]헤더. - 네트워크 호출 없음 — VMark는 crates.io를 해석하지 않습니다.
package.json
npm 의존성 트리로 열립니다 — dependencies, devDependencies, peerDependencies, optionalDependencies.
- 경로 감지: 파일명
package.json. - 내용 감지: 최상위
name과dependencies/devDependencies/peerDependencies중 하나 이상.
pyproject.toml
Python 의존성 트리로 열립니다 — PEP 621 ([project] + [project.optional-dependencies]) 및 Poetry ([tool.poetry.dependencies], [tool.poetry.dev-dependencies], [tool.poetry.group.<name>.dependencies]) 모두 지원.
- 경로 감지: 파일명
pyproject.toml. - 내용 감지:
[project]또는[tool.poetry]헤더 (TOML 파싱 성공 시).
편집 규칙
- Markdown 은 전체 툴바, 단락 서식, CJK 규칙, 수학, Mermaid, 각주 등 모든 기존 Markdown 기능을 제공합니다.
- 데이터 형식 (JSON, YAML, TOML) 은 소스 창에 파싱 오류 거터 마커와 함께 열리며, 트리 미리보기가 입력에 따라 실시간으로 업데이트됩니다. Markdown 전용 메뉴 동작 (CJK 서식, 블록 삽입, 단락 서식)은 비활성화되고, 모드 관련 컨트롤은 활성 상태를 유지합니다.
- 시각적 형식 (Mermaid, SVG, HTML) 은 소스 창에 열리고, 오른쪽 창에 렌더링된 뷰가 표시됩니다 (디바운스 적용).
- 코드 형식 은 구문 강조 뷰어로 열립니다. 인플레이스 편집으로 전환하거나 외부 에디터에서 열 수 있습니다 (아래 참조).
찾기, 저장, 내용 검색
- Cmd+O 필터: 등록된 모든 형식을 포함하는 단일 "지원되는 모든 파일" 프리셋. 다른 이름으로 저장 필터와 기본 저장 확장자는 활성 탭의 형식 어댑터에서 파생되므로,
.toml파일을 저장할 때.toml이 확장자로 제안됩니다. - 드래그 앤 드롭 은 등록된 모든 확장자를 허용합니다.
- 다른 이름으로 저장 필터와 저장 시 기본 확장자는 활성 탭의 형식 어댑터에서 파생됩니다.
- Cmd+Shift+H 내용 검색 ("파일에서 찾기") 은 텍스트 기반 형식 (Markdown, txt, json, yaml, toml, html, svg, Mermaid) 을 모두 인덱싱합니다. 코드 파일은 기본적으로 제외됩니다 — 코드 뷰어 모드이기 때문입니다.
HTML 보안 모델
다중 형식 계획의 ADR-4에 따라, HTML 미리보기는 세 가지 독립적인 방어 계층에 의존합니다:
<iframe sandbox="">— 빈 허용 목록으로 스크립트, 동일 출처, 폼, 팝업을 모두 차단합니다. 샌드박싱은 iframe 속성만으로 강제 적용됩니다 (MDN 에 따르면<meta>를 통한 CSP 는 샌드박스가 아닙니다).- DOMPurify 새니타이징 — 먼저 실행되어
<script>,javascript:URL, 인라인 이벤트 핸들러, base-href 트릭을 제거합니다. - CSP
<meta>삽입 —default-src 'none'; img-src data:; style-src 'unsafe-inline'; font-src data:; base-uri 'none';— iframe 내 리소스 로딩을 제한합니다.
유효성 검사기는 스크립트 태그, javascript: URL, 인라인 이벤트 핸들러를 경고로 표시하여 차단 내용을 확인할 수 있습니다.
외부 에디터에서 열기
코드 파일의 경우, 읽기 전용 배너의 외부 에디터에서 열기 버튼으로 원하는 에디터를 실행합니다. 해석 순서:
- 설정 → 형식 → 외부 에디터 (GUI 필드 — 설정 참조). macOS 에서는
.app번들, Linux/Windows 에서는 실행 파일, 또는 셸이 해석할 수 있는 모든 경로. $VMARK_EXTERNAL_EDITOR(프로젝트 수준 환경 변수 재정의)$VISUAL$EDITOR- 플랫폼 기본값 (macOS 에서
open -t, Windows 에서notepad.exe, Linux 에서xdg-open)
GUI 설정이 환경 변수보다 우선합니다 — 명시적인 것이 암묵적인 것보다 우선합니다. 필드를 비워 두면 환경 변수 폴백 체인을 사용합니다.
VMark는 로그인 셸 PATH 를 통해 라우팅하므로, macOS GUI 앱에서 실행할 때 VS Code / Cursor / JetBrains 래퍼가 올바르게 해석됩니다.
보안 게이트
open_in_external_editor Tauri 명령은 다음 경우를 거부합니다:
- 존재하지 않는 경로
- 디렉터리 및 기타 일반 파일이 아닌 것 (소켓, 장치)
- 정규화된 확장자가 VMark의 등록된 형식 집합에 없는 경로
- 정규 대상이 위 검사 중 하나를 통과하지 못하는 심볼릭 링크
손상된 웹뷰는 이 버튼을 사용하여 임의의 시스템 파일 (암호, 키 등) 에서 외부 에디터를 실행할 수 없습니다 — VMark가 스스로 열 수 있는 경로에 한해서만 가능합니다.
지원하지 않는 것
계획의 비목표에 따라:
- 코드 에디터가 아닙니다. LSP, 자동 완성, 리팩터링, 디버거, git 거터 없음.
- "모든 일반 텍스트 형식"이 아닙니다. 범위가 제한되어 있습니다 — 위 표를 참조하세요.
- HTML 스크립트 실행 없음. 샌드박스 렌더만 지원합니다.
- v1 에서 Markdown 이 아닌 형식의 인쇄 / 내보내기 / HTML 로 복사 없음.
- 아직 코드 뷰어로 지원하지 않음: Zig, Swift, Kotlin, Java, Elixir, OCaml, 12개 확장자 집합 밖의 기타 언어. 선택 기준은 "직접 사용하는 언어" 입니다 — 추가를 원한다면 이슈를 등록해 주세요.
원하는 형식이 목록에 없고 명시적으로 비목표에 해당하지 않는다면, 이슈를 등록해 주세요.