サポートされるフォーマット
VMark は以下のすべてのファイル形式を直接開きます。差別化ポイントはスキーマ対応プレビューです:ファイルが既知のアーティファクトである場合、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 は設定 → 形式を促す 1 回限りのトーストを表示します。それを閉じた場合(または新規インストールの場合)、パネルはいつでも設定 → 形式にあります。
一覧
| ファミリー | 拡張子 | デフォルト | エディタ | プレビュー |
|---|---|---|---|---|
| Markdown | .md、.markdown、.mdown、.mkd、.mdx | 常にオン | WYSIWYG + ソースモード | レンダリングされた文章 |
| プレーンテキスト | .txt | 常にオン | ソース | — |
| データ——YAML | .yaml、.yml | 常にオン | ソース + ツリー | ナビゲート可能なツリー、スキーマ対応(GitHub Actions、VMark ワークフロー) |
| データ——JSON | .json、.jsonl | データフォーマットトグルが必要 | ソース + ツリー | ナビゲート可能な JSON ツリー、スキーマ対応(package.json) |
| データ——TOML | .toml | データフォーマットトグルが必要 | ソース + ツリー | ナビゲート可能なツリー、スキーマ対応(Cargo.toml、pyproject.toml) |
| ダイアグラム | .mmd | ダイアグラム & SVG トグルが必要 | ソース + レンダリング | ライブ Mermaid ダイアグラム |
| ベクター | .svg | ダイアグラム & SVG トグルが必要 | ソース + レンダリング | サニタイズされたインラインレンダリング |
| Web | .html、.htm | HTML プレビュートグルが必要 | ソース + レンダリング | サンドボックス iframe(空の sandbox=""、DOMPurify、CSP)。信頼モードはファイルごとのオプトイン |
| コード(読み取り専用) | .ts、.tsx、.js、.jsx、.py、.rs、.go、.css、.sh、.bash、.rb、.lua | コードビューアトグルが必要 | ビューア(編集への切り替え可) | — |
| メディア | 画像(.png、.jpg、.gif、.webp、.heic、.tiff、…)、動画(.mp4、.webm、.mov、…)、音声(.mp3、.wav、.flac、…) | 常にオン | ビューア(読み取り専用) | ネイティブの画像 / <video> / <audio> |
コードファイルはデフォルトで読み取り専用となり、編集を有効化または外部エディタで開くを提供するバナーが表示されます。
表示モード(ソース / 分割 / プレビュー)
プレビューを持つフォーマット——HTML、SVG、Mermaid、JSON、YAML、TOML——は、右上隅に小さな ソース · 分割 · プレビュー トグルが付いた状態で開きます:
- ソース——編集可能なソースペインを全幅で表示します。
- 分割——ソースとプレビューを左右に並べて表示します(デフォルト)。
- プレビュー——レンダリング結果を全幅で表示します。プレビューは読み取り専用のレンダリングです。編集するには、ソースまたは分割に戻してください。
キーボードからも切り替えられます:F6 でソース ⇄ 分割、Shift + F6 でプレビュー ⇄ 分割を切り替えます(分割が基本の状態です)。選択はタブごとに記憶されます。新しく開くファイルのデフォルトは 設定 → 形式 → デフォルトの表示モード で設定します。
プレビューのないフォーマット(プレーンテキスト、コードビューア)は常にソースのみを表示するため、トグルは表示されません。
メディアファイル(画像、動画、音声)
画像、動画、音声ファイルを開くと、VMark はそれをインラインで表示します——Finder のクイックルックのように。プレビューの方法は 2 つあります:
- 開く(ファイルエクスプローラーでクリックする、ファイル → ファイルを開く... を使う、またはドラッグして入れる)と、タブで表示されます。
- クイックルック:エクスプローラーでファイルを選択して Space を押すと、ウィンドウ全体のプレビューオーバーレイが表示されます。Space、Esc を押すか、背景をクリックすると閉じます。
仕組みと期待できること:
- テキストとして読み込まれることはありません。 メディアはバイナリです——VMark はネイティブのアセットパイプラインを通じてファイルをビューアに直接ストリーミングします。UTF-8 として読まれることも、ドキュメントとしてメモリに保持されることも、編集や保存の対象になることもありません。数ギガバイトの動画でも即座に開き、ネイティブにシークできます。
- ディスク上の変更が反映されます。 エディタから画像を書き出し直したり、スクリプトに書き換えさせたりすると、開いているタブが自動的に新しいバージョンを取り込みます——開き直す必要も、ファイルを閉じて開き直す必要もありません。
- 幅広いフォーマットに対応。 VMark はファイルをプラットフォームのメディアエンジンに渡すため、対応範囲はシステムの WebView がデコードできるものに従います。macOS では対応範囲が広く、HEIC、TIFF、
.mov/H.264、FLAC はすべて再生できます。WebView がデコードできないフォーマット(例:.mkv、.avi、.wmv)も開くことはでき、デフォルトアプリで開く と Finderで表示(Windows では エクスプローラーで表示、Linux では ファイルマネージャーで表示)を備えたフォールバックパネルが表示されます。 - 読み取り専用。 メディアのタブが未保存状態になることはなく、保存の確認なしで閉じられます。
スキーマ対応プレビュー
パスまたはコンテンツが既知のスキーマと一致する場合、VMark は汎用ツリーの代わりに適切なビューを表示します。
GitHub Actions ワークフロー(.github/workflows/*.yml)
ワークフローワークベンチで開きます:インタラクティブなジョブ DAG キャンバスと、保存 / 破棄を備えた構造化フォームエディタです(ワークフロービューアガイドを参照)。ソースペインもワークフローを認識します——$ 式の補完、カーソルからキャンバスへのジョブのハイライト、ローカルの uses: 参照での Cmd+クリック。
- パス検出:
.github/workflows/下の.yml/.yamlファイルは、YAML が不正な場合でもワークフローレンダラーにルーティングされます——空のツリーではなく診断付きの縮退ビューが表示されます。(ファイルは最初に YAML アダプターに到達する必要があります。.yml/.yaml拡張子が必要です。) - コンテンツ検出:トップレベルの
on:とjobs:キー。
VMark ワークフロー(トップレベルの steps:)
ワークフロー実行パネルで開きます:ステータス行付きの 実行 / キャンセル ツールバー、ライブのステップグラフ(またはパースエラー)、そしてファイルを書き込んだ実行の後には ファイルを復元 が表示されます。ワークフローガイドを参照してください。
- パス検出:
.github/workflows/下では決して該当しません——そのフォルダーは GitHub のものです。 - コンテンツ検出:YAML がパースでき、トップレベルの
jobs:がなく、トップレベルのsteps:リストがあり、そのうち少なくとも 1 つのステップのuses:がgenie/、action/、webhook/のいずれかで始まること。壊れた YAML が VMark ワークフローになることはありません。 - このパネルには 設定 → 詳細設定 → ワークフローエンジン が必要です。エンジンがオフの場合、ファイルはプレーンな YAML ツリーで表示されます(このタブから開始した実行がまだ動いている場合を除きます。その場合はキャンセルに引き続きアクセスできます)。
Cargo.toml
Rust 依存ツリーで開きます——ランタイム、dev、ビルド依存関係、バージョン仕様、フィーチャーフラグ付き。
- パス検出: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)はソースペインに表示され、レンダリングビューが右ペインに表示されます。プレビューは入力よりも低い優先度でレンダリングされるため、大きなドキュメントではキーを押すたびに再レンダリングするのではなく、キャレットより一拍遅れて追いつきます。
- コードフォーマットはシンタックスハイライト付きビューアで開きます。その場で編集に切り替えるか、外部エディタで開けます(下記参照)。
Markdown の方言
VMark は remark(内部は micromark)で Markdown を読み書きします:CommonMark に加え、GitHub Flavored Markdown(表、タスクリスト、~~ による取り消し線、自動リンク、脚注)、YAML フロントマター、$…$ / $$…$$ の数式、ウィキリンク([[target]])、GitHub アラート(> [!NOTE]、[!TIP]、[!IMPORTANT]、[!WARNING]、[!CAUTION])、<details> ブロック、[TOC]、そして 4 つのインラインマーク ==highlight==、~subscript~、^superscript^、++underline++ に対応しています。チルダ 1 つは下付き文字であり、取り消し線になることはありません。
ネストの上限。 WYSIWYG は最大 1000 レベルまでネストされた引用ブロックとリストをサポートします。それより深いドキュメントは、深さを示すメッセージとともに ソースモード で開き、ステータスバーに 「ソースモードで開きました(WYSIWYG で表示できません)。」 と表示されます。この状態の間、ファイルはリッチエディタによって上書きされないよう保護されます。ネストを減らしてから WYSIWYG に切り替え を使ってください。フェンスコード、区切り線、インラインの強調は上限に数えられません。大きなファイルも参照してください。
VMark がファイルの種類を決める仕組み
VMark は Markdown をデフォルトではなく許可リストとして 扱います。ルールは次の順序です:
- Markdown ファミリーの拡張子(
.md、.markdown、.mdown、.mkd、.mdx)はリッチな Markdown エディタで開きます。 - 登録済みの非 Markdown 拡張子(そのカテゴリが有効な場合——JSON、YAML、コードビューアなど)は、そのフォーマットのソースペインで開きます。
- それ以外のすべて——
.env、.env.local、Dockerfile、Makefile、.gitignore、未知の拡張子——は プレーンテキストのソースペイン で開き、Markdown エディタで開くことはありません。
つまり、設定ファイルが黙って Markdown としてレンダリングされることはありません。.env.local はプレーンテキストとして開き、KEY=value の行、# コメント、アンダースコアは入力したとおりにそのまま残ります。
ドットファイルのファミリーはグループとして認識されます:.env への上書きは .env.local、.env.production などにも適用されます。
システムからファイルを開く
インストーラーは VMark をこれらのファイル形式のエディタとして OS に登録するため、このアプリケーションで開く に表示され、ダブルクリックで VMark で開けます:
| 拡張子 | 登録される種類 |
|---|---|
.md、.markdown、.mdown、.mkd、.mdx | Markdown Document |
.txt | Plain Text Document |
.json、.jsonl | JSON Document |
.yaml、.yml | YAML Document |
.toml | TOML Document |
.mmd | Mermaid Diagram |
.svg | SVG Image |
.html、.htm | HTML Document |
Windows では、インストーラーはすでに他のアプリが扱っているファイル形式を奪いません:すでに既定のプログラムがある拡張子については、VMark は自身を プログラムから開く に追加し、その既定はそのまま残します。VMark が既定になるのは何も登録されていなかった場合だけです——実際には Markdown の拡張子であり、.txt、.html、.htm、.svg ではありません。Windows の設定で自分で選んだ既定が常に優先されます。アンインストールすると、Windows の 新規作成 → テキスト ドキュメント メニュー項目と以前のハンドラーが元に戻ります。
登録されたファイルが VMark で開くのは、そのフォーマットが有効な場合だけです(フォーマットの有効化を参照)。そうでなければプレーンテキストとして開きます。
Windows と Linux では、コマンドラインで渡したフォルダー(vmark C:\notes や vmark ~/notes)は、macOS で Dock アイコンにフォルダーをドロップしたときと同じように、専用のウィンドウでワークスペースとして開きます。VMark がすでに起動している場合も同様です。
プレーンファイルのシンタックスハイライト
ファイルがプレーンテキストとして開く場合でも、VMark は種類を認識できれば色付けします——.env/.ini/.conf(プロパティ)、.sh/.bash(シェル)、Dockerfile、.toml、.sql、.diff、および一般的な言語です。これは純粋に見た目だけのもので、ファイルがどのエディタで開くかを変えることはなく、コードビューアのカテゴリが有効かどうかに関係なく動作します。
上書き:「ファイル形式を設定」
この判定はデフォルトであって、檻ではありません。コマンドパレットを開いて次を実行します:
- ファイル形式を設定:プレーンテキスト——現在のファイルファミリーを強制的にプレーンテキストとして開きます(例:生のメモとして残している
.txtがレンダリングされないようにする)。 - ファイル形式を設定:Markdown——
.md以外のファイルを Markdown エディタでレンダリングします(例:実際には Markdown で書いている.txt)。 - ファイル形式を設定:デフォルトに戻す——上書きを解除します。
上書きはファイルファミリーごと(拡張子ごと、または .env のようなファイルではドットファイルの名前ごと)に記憶され、セッションをまたいで保持されます。上記の組み込みルールより優先されます。
検索、保存、コンテンツ検索
- ファイル → ファイルを開く... には 2 つのフィルターがあります:サポートされているすべての形式(登録済みのすべてのフォーマット)と Markdown です。この項目にはデフォルトのショートカットがありません——
Mod + Oはクイックオープンです——が、設定 → ショートカット で割り当てられます。名前を付けて保存フィルターとデフォルト保存拡張子は、アクティブなタブのフォーマットアダプターから導出されます。.tomlファイルを保存すると、.tomlが拡張子として提案されます。 - ドラッグ&ドロップは登録済みのすべての拡張子を受け付けます。
- 名前を付けて保存フィルターとデフォルト拡張子は、アクティブなタブのフォーマットアダプターから導出されます。
- Cmd+Shift+H コンテンツ検索(「ファイル内を検索」)はすべてのテキスト系フォーマット(Markdown、txt、json、yaml、toml、html、svg、Mermaid)をインデックス化します。コードファイルはデフォルトで除外されます——コードビューアモードです。
HTML のセキュリティモデル
マルチフォーマット計画の ADR-4 に従い、HTML プレビューは 3 つの独立した防御レイヤーで構成されています:
<iframe sandbox="">空の許可リスト付き——スクリプトなし、同一オリジンなし、フォームなし、ポップアップなし。サンドボックスは iframe 属性のみで強制されます(MDN によると CSP の<meta>はサンドボックスではありません)。- 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、インラインイベントハンドラを警告として表示し、何がブロックされているか確認できます。ファイルを信頼すると、これらは代わりに情報として表示されるため、信頼済みバナーと矛盾するものはありません。信頼の有無にかかわらず、プレビューが決して許可しないものを 2 つのメッセージが示します:外部スクリプト(<script src="…">)は決して読み込まれません。ファイルや URL から来るスクリプトはないためです。また、別のウィンドウやトップページを対象とする javascript: リンク(target="_top"、_blank、または <base target>)は決して遷移しません。プレビューは自分自身の外に出られないためです。検出はページのタグを近似的に読み取るもので、検出結果にラベルを付けるだけで、何が実行されるかを決めることはありません——それを決めるのはサンドボックスです。
このプレビューの正式なセキュリティ承認はまだ保留中で、プレビューはレンダリングされたページの上の通知でその旨を示します:**HTML プレビューはサンドボックス化されています。セキュリティ審査はまだ完了していません。**上記の 3 つの防御層は実装済みで、残っているのは、実行中のアプリの WebView 内で OWASP の XSS ペイロードに対してそれらを確認する作業です。
信頼済み HTML プレビュー(オプトイン)
上記の安全なプレビューがデフォルトであり、それが変わることはありません。自分で書いたドキュメント——インタラクティブな実験ページ、ローカルのダッシュボード、自己完結型のデモ——については、そのファイル 1 つに限り、このセッションの間だけ スクリプトの実行を許可できます。
プレビュー上部のバーにある 信頼済みプレビューを有効にする… を使います。まず警告が表示され、確認するまでは何も実行されません。有効な間はバーが表示されたままで 信頼済み——スクリプト有効 と示し、信頼を取り消す はワンクリックで行えます。
信頼モードが許可するものと、許可しないもの:
| 信頼済みプレビュー | |
|---|---|
JavaScript、DOM、ポインターイベント、requestAnimationFrame、Web Audio | ✅ 実行される |
ネットワーク(fetch、XMLHttpRequest、WebSocket、リモートの画像/スクリプト) | ❌ default-src 'none' によりブロック |
| VMark 自身のページ、Tauri コマンド、ファイルシステム | ❌ 到達不可——ドキュメントは独自の不透明なオリジンで実行される |
| トップレベルのナビゲーション、ポップアップ、フォーム送信、ダウンロード、モーダル | ❌ 許可されない(sandbox="allow-scripts" のみ) |
| カメラ、マイク、位置情報、クリップボード | ❌ フレームに委譲される機能はない |
localStorage / sessionStorage | ❌ 利用不可——不透明なオリジンには同一オリジンのストレージがない |
eval / new Function | ❌ 許可されない |
知っておくべき 3 つの性質:
- 信頼が推測されることはありません。
.html拡張子からも、ファイルの入手元からも、すでに信頼した隣のファイルからも推測されません。信頼を与えるのは確認操作だけです。 - 信頼が永続化されることはありません。 VMark を閉じると、すべての許可は消えます。また、未保存のドキュメントでは利用できません。許可を結び付ける識別情報がないためです——先にファイルを保存してください。
- 信頼済みプレビューが自動で再実行されることはありません。 ソースを編集すると 現在のソースと一致しない可能性があります という表示が付き、再読み込み を待ちます。そのため、実行中のシミュレーションがキー入力のたびにリセットされることはありません。フレームで何が実行されているかを VMark が知り得ない場合にも同じ表示が出ます——タブから別のタブに切り替えて戻ったとき、またはタブを閉じて開き直したとき、プレビューはそのファイルについて最後に公開されたものを実行し続けるため、最新であると主張する代わりにその旨を示します。再読み込み は現時点のファイルを公開し直します。
Windows ではローカルの http オリジンで配信されます
WebView2 にはカスタム URL スキームがないため、Windows では信頼済みドキュメントは vmark-trusted:// ではなく http://vmark-trusted.localhost から配信されます——同じ許可、同じサンドボックス、同じ CSP で、Tauri がそこでのすべてのカスタムプロトコルに使う URL 形式を用います。安全なプレビューはすべてのプラットフォームで動作します。
信頼済みコンテンツは、独自の制限的な CSP を持つ vmark-trusted:// オリジン(Windows では http://vmark-trusted.localhost)から配信されます。この間接化は飾りではなく必須です:srcdoc、blob:、data: のフレームは VMark 自身の script-src 'self' ポリシーを継承し、フレーム内の CSP は継承したポリシーを厳しくすることはできても緩めることはできません——そのため、iframe の属性だけでインラインスクリプトを実行させることはできないのです。
外部エディタで開く
コードファイルの場合、読み取り専用バナーの外部エディタで開くボタンは選択したエディタを起動します。解決順序:
- 設定 → 形式 → 外部エディタ(GUI フィールド——設定を参照)。既知のエディタの名前(
code、cursor、zed、subl、bbedit、idea、vim、nvim、emacs、notepad++、…)か、エディタの フルパス——macOS では.appバンドル、Linux/Windows では実行ファイル——を入力します。このフィールドに入れられるのはプログラム 1 つだけで、引数は入れられません。引数を渡すには$VMARK_EXTERNAL_EDITORを使ってください。 $VMARK_EXTERNAL_EDITOR(プロジェクトレベルの環境変数オーバーライド)$VISUAL$EDITOR- プラットフォームデフォルト(macOS では
open -t、Windows ではnotepad.exe、Linux ではxdg-open)
GUI 設定は環境変数より優先されます——明示的なものが暗黙的なものに勝ちます。フィールドを空にすると、環境変数のフォールバックチェーンを使用します。
VMark はログインシェルの PATH を経由してルーティングするため、macOS GUI アプリから起動しても VS Code / Cursor / JetBrains ラッパーが正しく解決されます。
セキュリティゲート
外部エディタ の設定自体が、何かを起動する前にチェックされます。VMark は以下を拒否します:
- シェル文字(
;、|、&、`、$、<、>、引用符、改行)と先頭の- - VMark が知らないエディタの単なる名前——「「X」は VMark が名前で認識できるエディタではありません。エディタのフルパスを入力してください」
- 相対パス、
..セグメントや末尾のスラッシュを含むパス、または存在しないパス - 渡されたファイルを開くのではなく実行してしまうプログラム——シェル(
sh、bash、zsh、pwsh、cmd、…)、インタープリター(python、node、ruby、perl、osascript、…)、ランチャー(env、sudo、open、xdg-open、…)、またはターミナルエミュレーター——入力した名前と、リンクの解決先の名前の両方でチェックされます
フォールバックチェーンの環境変数には制限はありません:それらは VMark の外で、あなた自身が設定するものです。
open_in_external_editor Tauri コマンドはさらに以下も拒否します:
- 存在しないパス
- ディレクトリおよびその他の非通常ファイル(ソケット、デバイス)
- 正規化された拡張子が VMark の登録済みフォーマットセットにないパス
- 正規のターゲットが上記のいずれかのチェックに失敗するシンボリックリンク
侵害されたウェブビューは、このボタンを使用して任意のシステムファイル(パスワード、キーなど)で外部エディタを起動することはできません——VMark 自身が開くパスのみが対象です。
サポートされていないもの
計画の非目標に従い:
- コードエディタではありません。 LSP、オートコンプリート、リファクタリング、デバッガ、git ガターはありません。
- 「すべてのプレーンテキスト形式」ではありません。 上記の表を参照した制限されたスコープです。
- デフォルトでは HTML スクリプトの実行はありません。 信頼済み HTML プレビューで 1 つのファイルを明示的に許可しない限り、サンドボックスレンダリングのみです。
- v1 では Markdown 以外のフォーマットの印刷/エクスポート/HTML としてコピーはありません。
- コードビューアとしてまだサポートされていないもの:Zig、Swift、Kotlin、Java、Elixir、OCaml、および 12 拡張子セット外のその他の言語。判断ルールは「私たち自身が使用する言語」です——追加を希望する場合は issue を提出してください。
一覧にないフォーマットで意図的に対象外でないものがあれば、issue を提出してください。