# 支持的格式

格式按文件扩展名识别（大小写不敏感），不读取文件内容。

| 格式 | 扩展名 | 预览方式 |
| --- | --- | --- |
| Markdown | `.md`、`.markdown` | 渲染为文档；支持任务列表、数学公式（KaTeX）与内嵌 Mermaid 图 |
| HTML | `.html`、`.htm` | 在隔离的沙箱中执行自包含的页面 |
| Mermaid | `.mmd`、`.mermaid` | 渲染为图表 |
| SVG | `.svg` | 清洗后显示 |
| JSON | `.json` | 格式化并可折叠 |
| YAML | `.yaml`、`.yml` | 语法高亮 |
| 纯文本 | `.txt` | 原样显示 |
| Canvas（实验） | `.canvas.tsx` | 在沙箱中用 React 渲染 Cursor Canvas 组件 |

`.canvas.tsx`（Canvas）是实验格式。上传后在沙箱里转译并渲染：只允许从 `cursor/canvas` 导入，使用 React 19 的 JSX 运行时。支持的导出名和属性见 [Canvas 兼容表](/docs/canvas)。`useHostTheme()` 跟随系统浅色或深色。`useCanvasState()` 只在当次打开的页面里保持，刷新后回到默认值。`useCanvasAction()` 不会操作 Cursor，点击后提示该操作只在 Cursor 内可用。`namespace` 和装饰器会在转译前拒绝。未实现的模块或导出名报 `UNSUPPORTED_IMPORT`，并写明模块和导出名。`.mdx`、`.qmd`、`.dot`、`.puml` 属于后续支持，目前上传返回 `415`。

## 边界

- 文件必须是 UTF-8 文本，不含 NUL 字节，且不为空。
- HTML 在沙箱中运行，不能访问本站数据，也不能发起网络请求，所以依赖外部脚本、样式或图片的页面会缺失这些资源，预览会提示缺了什么。
- 源文件原样保存。预览用的清洗与转换结果不会覆盖原文，下载得到的就是上传时的字节。
- Markdown 或图表有语法错误时，预览显示错误（有行号时一并显示），仍可切换到「源码」查看原文。
