- beautiful-mermaid เป็นเครื่องมือความเร็วสูงที่พัฒนาด้วย TypeScript สำหรับเรนเดอร์ไดอะแกรม Mermaid เป็น SVG หรือ ASCII art
- รองรับ ไดอะแกรม 5 ประเภท (Flowchart, State, Sequence, Class, ER) และ ทำงานได้ทั้งในเทอร์มินัลและเบราว์เซอร์
- มี ธีมในตัว 15 แบบ และ รองรับ Shiki ทำให้สามารถนำธีม VS Code มาใช้ได้โดยตรง
- โหมด Mono มอบการแสดงผลที่สม่ำเสมอด้วยสีเพียงสองสี และรองรับการสลับธีมแบบเรียลไทม์ผ่าน CSS custom properties
- เป็นเครื่องมือแบบเบาและไม่มี dependency ที่เหมาะกับการ แสดงภาพการไหลของข้อมูลและโครงสร้างระบบ ในสภาพแวดล้อมการเขียนโปรแกรมที่มี AI ช่วยเหลือ
ภาพรวม
- beautiful-mermaid เป็นเครื่องมือสำหรับเรนเดอร์ไดอะแกรม Mermaid เป็น SVG หรือข้อความ ASCII/Unicode
- ทำงานได้โดยไม่ต้องพึ่งพา DOM และรองรับ การเรนเดอร์ความเร็วสูงมาก (มากกว่า 100 ไดอะแกรมภายใน 500ms)
- พัฒนาโดยทีม Craft สำหรับ Craft Agents
- พอร์ต Mermaid-ascii (โปรเจ็กต์ที่พัฒนาด้วย Go) มาเป็น TypeScript พร้อมขยายความสามารถเพิ่มเติม
- เพิ่มการรองรับไดอะแกรม Sequence, Class และ ER
- มีอักขระกรอบแบบ Unicode และตัวเลือกสำหรับกำหนดระยะห่างกับ padding
ความสามารถหลัก
- ประเภทไดอะแกรมที่รองรับ: Flowchart, State, Sequence, Class, ER
- รูปแบบเอาต์พุต: SVG (สำหรับ UI แบบ rich), ASCII/Unicode (สำหรับเทอร์มินัล)
- ระบบธีม
- มีธีมในตัว 15 แบบ (
tokyo-night, dracula, nord, github-dark เป็นต้น)
- โหมด Mono: ใช้เพียงสองสีคือพื้นหลัง (bg) และสีหน้า (fg) แล้วสร้างชุดสีทั้งหมดโดยอัตโนมัติ
- โหมด Enriched: สามารถกำหนดสีเพิ่มเติมแบบเลือกได้ เช่น
accent, muted, surface, border
- รองรับ การสลับแบบเรียลไทม์บนพื้นฐานของ CSS custom properties
- การผสานรวมกับ Shiki
- แมปสีจากธีม VS Code มาเป็นสีของไดอะแกรมโดยอัตโนมัติ
- ใช้ฟังก์ชัน
fromShikiTheme() เพื่อดึงค่าอย่าง bg, fg, accent เป็นต้น
การติดตั้งและการใช้งาน
- คำสั่งติดตั้ง
npm install beautiful-mermaid หรือ bun add beautiful-mermaid, pnpm add beautiful-mermaid
- ตัวอย่างการเรนเดอร์ SVG
import { renderMermaid } from 'beautiful-mermaid'
const svg = await renderMermaid(`graph TD; A-->B;`)
- ตัวอย่างการเรนเดอร์ ASCII
import { renderMermaidAscii } from 'beautiful-mermaid'
const ascii = renderMermaidAscii(`graph LR; A --> B --> C`)
- การใช้งานบนเบราว์เซอร์
- โหลดผ่าน CDN (
unpkg, jsDelivr) ได้โดยตรงด้วยแท็ก <script>
- เข้าถึง
renderMermaid, renderMermaidAscii, THEMES เป็นต้น ได้จากอ็อบเจ็กต์โกลบอล beautifulMermaid
เอาต์พุต ASCII และตัวเลือก
สรุป API
renderMermaid(text, options?): เรนเดอร์ไดอะแกรม Mermaid เป็น SVG
- ตัวเลือก:
bg, fg, accent, muted, surface, border, font, transparent
renderMermaidAscii(text, options?): เรนเดอร์เป็นข้อความ ASCII/Unicode
fromShikiTheme(theme): ดึงค่าสีจากธีม Shiki
THEMES: อ็อบเจ็กต์ธีมในตัว 15 แบบ
DEFAULTS: ค่าสีเริ่มต้น (#FFFFFF, #27272A)
ไลเซนส์และผู้พัฒนา
- MIT License
- พัฒนาโดยทีม Craft
- เอนจิน ASCII อ้างอิงจาก: mermaid-ascii ของ Alexander Grooff
นัยสำคัญทางเทคนิค
- ในสภาพแวดล้อม AI coding assistant สามารถ แสดงไดอะแกรมได้ทันทีภายในเทอร์มินัลหรืออินเทอร์เฟซแชต
- ด้วยโครงสร้างแบบ เบา เร็ว และไม่มี dependency จึงเหมาะกับทั้งเครื่องมือ CLI และสภาพแวดล้อมเซิร์ฟเวอร์
- ความยืดหยุ่นและความเข้ากันได้ของระบบธีม ช่วยยกระดับประสบการณ์ของนักพัฒนา
1 ความคิดเห็น
ความเห็นจาก Hacker News
โปรเจ็กต์ที่สร้างบนไลบรารี Go mermaid-ascii ของ Alexander Grooff นั้นเจ๋งมาก
แต่พบ บั๊กที่ edge "start" ไม่ถูกเรนเดอร์
ทดสอบที่ agents.craft.do/mermaid
ไม่ค่อยเข้าใจว่าทำไมช่วงนี้ ไดอะแกรม ASCII ถึงกลับมาได้รับความสนใจอีกครั้ง
Mermaid กับ PlantUML ก็เป็นแบบ text-based อยู่แล้ว และผู้ใช้ส่วนใหญ่ก็ต้องการไดอะแกรมมาตรฐานที่มนุษย์อ่านง่ายมากกว่าที่เครื่องอ่านง่าย
ASCII ถูกจำกัดอยู่แค่ตัวอักษรที่พิมพ์ได้ ทำให้ความสามารถในการแสดงผลต่ำกว่าและทำให้การทำมาตรฐานยากด้วย
เพราะไม่ต้องยุ่งกับการจัดการไฟล์ภาพหรือการตั้งค่าซับซ้อนอย่าง Git LFS
ฉันชอบ ไดอะแกรม ASCII มากจริงๆ
ไม่ว่าจะดูด้วย
catในเทอร์มินัลหรือให้เว็บไซต์เรนเดอร์ ก็ดูดีเหมือนกันหมด นี่แหละเสน่ห์ของมันขอแค่มี monospaced font ดีๆ ก็จะดูสะอาดตาในเชิงภาพด้วย
ขอแนะนำแอปทำไดอะแกรม ASCII ชื่อ Monodraw
ตัว Mermaid ASCII renderer จริงๆ ยกมาจากโปรเจ็กต์ AlexanderGrooff/mermaid-ascii
โปรเจ็กต์นี้แค่ แปลงมันเป็น TypeScript และเพิ่มธีมของตัวเองเข้าไป
อัลกอริทึมหลักแทบจะถูกแปลงมาแบบ 1:1 ดังนั้น Claude น่าจะใช้เวลาไม่ถึงชั่วโมงในการพอร์ตเป็น TS
ลองเทียบ โค้ด Go กับ โค้ด TS ได้
ถึง Mermaid จะกำลังได้รับความสนใจ แต่ Kroki(kroki.io) รองรับฟอร์แมตไดอะแกรมได้หลากหลายกว่ามาก
รวมถึง BlockDiag, BPMN, C4, D2, DBML, Excalidraw, GraphViz และแทบทุกไดอะแกรมแบบ text-based
Markdown editor ของฉัน KeenWrite(keenwrite.com) รวม Kroki เป็นบริการไว้แล้ว ดังนั้นเมื่อมีฟอร์แมตใหม่เพิ่มเข้ามาก็ใช้งานได้อัตโนมัติ
Mermaid ใช้
<foreignObject>จึงทำให้ไลบรารีส่วนใหญ่เรนเดอร์ได้ยากMermaidJS ทำงานได้เร็วและรันแบบ local ภายในหน้าเว็บ แต่ Kroki ต้องพึ่งพาบริการภายนอก
ถ้าไม่ได้ต้องการไดอะแกรมซับซ้อนมาก Mermaid ก็เป็นตัวเลือกที่ง่ายกว่า
ใน ตัวอย่าง README มีตัวอย่างผลลัพธ์หลายแบบ เช่น chess graph
ถึงอย่างนั้นก็ยังรู้สึกว่าสไตล์เริ่มต้นของ Mermaid ดูสะอาดกว่า
อนึ่ง KeenWrite ก็ดูน่าสนใจมาก
ยังมีเครื่องมือ Diagon สำหรับแปลงข้อความเป็นไดอะแกรม ASCII ด้วย
ฉันยังมี รายการเครื่องมือ text→diagram ที่รวบรวมไว้ แต่เครื่องมือแปลง text→ASCII ยังมีไม่มากนัก
ดูเหมือนว่าถ้าจะรันไลฟ์เดโม ต้อง ดาวน์โหลดแพลตฟอร์ม AI agent ก่อน
เสียดายที่ยังลองใช้ได้ทันทีโดยไม่ต้องติดตั้งไม่ได้
จากโครงสร้างของโปรเจ็กต์ก็ดูเป็นไปได้อยู่แล้ว
มีฟีเจอร์ “Subgraph Direction Override” ที่ให้ ตั้งค่าทิศทางของ subgraph ให้ต่างออกไป ได้
ทำให้สามารถเลียนแบบ ไดอะแกรม swim lane ที่ Mermaid ยังไม่รองรับได้
Selkie ที่ฉันสร้างเป็นโปรเจ็กต์ทดลองซึ่ง ทำ Mermaid parser และ renderer ขึ้นใหม่ทั้งหมดด้วย Rust
เดิมทีทำไว้เพื่อทดสอบว่า Claude Code ทำอะไรได้มากแค่ไหน แต่ผลลัพธ์น่าทึ่งมาก
ลองได้ทันทีใน Playground
ถ้ารองรับ Kitty terminal ก็สามารถแสดงไดอะแกรมออกในเทอร์มินัลได้โดยตรง
เร็วๆ นี้ฉันจะเขียนบล็อกเล่ากระบวนการทั้งหมด
โปรเจ็กต์นี้เจ๋งมาก และ การทำงานร่วมกับ Claude Code ก็น่าประทับใจ
ฉันเองก็ทำโปรเจ็กต์คล้ายกัน แต่โฟกัสที่ การสำรวจโค้ดแบบอินเทอร์แอ็กทีฟ แทน ASCII
ออกแบบมาเพื่อช่วยให้มนุษย์เข้าใจได้ดีขึ้น ใช้ D2 และกำลังเตรียมรองรับ Mermaid ด้วย
อยากฟังความเห็นว่า ความอินเทอร์แอ็กทีฟ เพื่อมนุษย์มีคุณค่ามากกว่า หรือว่า บริบทสำหรับ agent สำคัญกว่า
ลิงก์โปรเจ็กต์