Editor de Diagramas Mermaid - Crear Diagramas de Flujo en Línea
Crea diagramas de flujo, diagramas de secuencia, diagramas ER y más de 20 tipos con vista previa en vivo de Mermaid.js. Exporta como SVG/PNG — 100% del lado del cliente, sin envío de datos al servidor.
Preguntas Frecuentes
Que es un Editor de Diagramas Mermaid?
Un Editor de Diagramas Mermaid es una herramienta en linea que te permite crear diagramas usando Mermaid.js, un lenguaje de diagramacion basado en texto. En lugar de arrastrar y soltar formas, escribes una sintaxis simple similar a Markdown (por ejemplo, graph TD; A-->B) y el editor lo renderiza como un diagrama visual en tiempo real. Mermaid soporta mas de 20 tipos de diagramas incluyendo diagramas de flujo, diagramas de secuencia, diagramas de clases, diagramas ER, diagramas de Gantt, mapas mentales y mas.
Como uso este Editor de Diagramas Mermaid?
Selecciona una plantilla de diagrama del menu desplegable de Plantillas (por ejemplo, Diagrama de Flujo o Diagrama de Secuencia) o comienza a escribir codigo Mermaid desde cero. Mientras escribes, el panel de vista previa se actualiza en tiempo real. Si hay un error de sintaxis, aparece una insignia roja 'Invalid'. Elige un tema Mermaid (Default, Dark, Forest, Neutral) para cambiar el estilo visual. Cuando estes satisfecho, haz clic en Descargar SVG o Descargar PNG para exportar tu diagrama.
Estan seguros mis datos de diagrama? Se envia algo a un servidor?
Todo el renderizado de diagramas se realiza 100% del lado del cliente en tu navegador usando la biblioteca JavaScript mermaid.js. Ningun codigo de diagrama, ninguna imagen renderizada y ningun dato de usuario se transmiten jamas a ningun servidor. Tus diagramas existen solo en la memoria de tu navegador y en localStorage. Esto hace que la herramienta sea segura para diagramas de arquitectura propietarios, esquemas de bases de datos internos y documentacion confidencial.
Que tipos de diagramas soporta Mermaid?
Mermaid.js soporta mas de 20 tipos de diagramas: Diagrama de Flujo (flujos de proceso), Diagrama de Secuencia (interacciones entre actores), Diagrama de Clases (estructura POO), Diagrama de Estado (maquinas de estado), Diagrama ER (esquemas de base de datos), Diagrama de Gantt (cronogramas de proyecto), Grafico Circular (datos proporcionales), Mapa Mental (jerarquias de ideas), Git Graph (visualizacion de ramificaciones), Linea de Tiempo (eventos cronologicos), y muchos mas incluyendo C4, Sankey, Grafico XY, Kanban y diagramas de Arquitectura.
Como exporto mi diagrama como imagen?
Haz clic en Descargar SVG para obtener un grafico vectorial escalable que se mantiene nitido en cualquier tamano — ideal para documentacion. Haz clic en Descargar PNG para una imagen rasterizada, con opciones para elegir la escala (1x, 2x para retina, 3x para impresion) y fondo transparente o blanco. Tambien puedes hacer clic en Copiar SVG para copiar el marcado SVG a tu portapapeles para pegarlo en herramientas de diseno como Figma.
Que son los temas de Mermaid?
Mermaid.js incluye cuatro temas integrados: Default (tonos azules/morados), Dark (fondos oscuros para presentaciones), Forest (tonos verdes, sensacion organica) y Neutral (escala de grises, profesional). El tema afecta los colores de nodos, estilos de linea y fondos dentro del diagrama. El tema de la interfaz de la aplicacion (modo oscuro/claro) es independiente del tema del diagrama Mermaid.
El editor guarda automaticamente mi trabajo?
Si. El codigo de tu diagrama se guarda automaticamente en el localStorage de tu navegador mientras escribes. Cuando revisites la pagina, tu ultimo diagrama se restaurara automaticamente. Ten en cuenta que localStorage es especifico del navegador — cambiar de navegador o borrar los datos del navegador eliminara el diagrama guardado. Para almacenamiento a largo plazo, exporta tu diagrama o copia la URL compartible.
Ejemplos de Codigo
// Mermaid Diagram Rendering and Export in JavaScript (Browser)
/**
* Initialize mermaid.js with configuration
*/
async function initMermaid(theme = 'default') {
const mermaid = await import('https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs');
mermaid.default.initialize({
startOnLoad: false,
theme: theme, // 'default', 'dark', 'forest', 'neutral'
securityLevel: 'strict',
});
return mermaid.default;
}
/**
* Render Mermaid code to SVG string
*/
async function renderMermaid(mermaidInstance, code, elementId = 'mermaid-output') {
try {
const { svg } = await mermaidInstance.render(elementId, code);
return { svg, error: null };
} catch (error) {
return { svg: null, error: error.message };
}
}
/**
* Export SVG string as downloadable .svg file
*/
function downloadSvg(svgContent, filename = 'diagram.svg') {
const blob = new Blob([svgContent], { type: 'image/svg+xml;charset=utf-8' });
const url = URL.createObjectURL(blob);
const anchor = document.createElement('a');
anchor.href = url;
anchor.download = filename;
anchor.click();
URL.revokeObjectURL(url);
}
/**
* Convert SVG to PNG and download
*/
async function downloadPng(svgContent, scale = 2, filename = 'diagram.png') {
return new Promise((resolve, reject) => {
const svgBlob = new Blob([svgContent], { type: 'image/svg+xml;charset=utf-8' });
const url = URL.createObjectURL(svgBlob);
const img = new Image();
img.onload = () => {
const canvas = document.createElement('canvas');
canvas.width = img.naturalWidth * scale;
canvas.height = img.naturalHeight * scale;
const ctx = canvas.getContext('2d');
ctx.fillStyle = '#ffffff';
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.scale(scale, scale);
ctx.drawImage(img, 0, 0);
canvas.toBlob((blob) => {
const pngUrl = URL.createObjectURL(blob);
const anchor = document.createElement('a');
anchor.href = pngUrl;
anchor.download = filename;
anchor.click();
URL.revokeObjectURL(pngUrl);
URL.revokeObjectURL(url);
resolve();
}, 'image/png');
};
img.onerror = reject;
img.src = url;
});
}
/**
* Encode diagram state for URL sharing
*/
function encodeDiagramState(code, theme) {
const state = JSON.stringify({ code, theme });
return btoa(unescape(encodeURIComponent(state)));
}
function decodeDiagramState(encoded) {
try {
const json = decodeURIComponent(escape(atob(encoded)));
return JSON.parse(json);
} catch {
return null;
}
}
// Example usage
(async () => {
const mermaid = await initMermaid('default');
const code = `
graph TD
A[Start] --> B{Is it working?}
B -->|Yes| C[Great!]
B -->|No| D[Debug]
D --> B
`;
const { svg, error } = await renderMermaid(mermaid, code);
if (error) {
console.error('Render error:', error);
return;
}
console.log('SVG rendered successfully');
// Download as SVG
downloadSvg(svg, 'flowchart.svg');
// Download as PNG at 2x resolution
await downloadPng(svg, 2, 'flowchart.png');
// Create shareable URL
const encoded = encodeDiagramState(code, 'default');
console.log(`Share URL: https://ohmyutils.com/en/mermaid-diagram-editor?state=${encoded}`);
})();