DEV Community

Orbit Websites
Orbit Websites

Posted on

Unlocking Visual Storytelling with Excaliclaw: A Game-Changing Skill for OpenClaw Users

OpenClaw Challenge Submission 🦞

Unlocking Visual Storytelling with Excaliclaw: A Game-Changing Skill for OpenClaw Users

If you're using OpenClaw (a powerful open-source framework for AI-driven data workflows), you're already ahead of the curve. But what if you could visualize your workflows, data flows, and logic trees in real time—right inside your documentation or planning tools?

Enter Excaliclaw: a lightweight, embeddable diagramming tool built specifically for OpenClaw users who want to turn complex logic into clear, interactive visuals. In this tutorial, you’ll learn how to integrate Excaliclaw into your OpenClaw projects, create dynamic diagrams, and enhance your storytelling with code.

🛠️ What You’ll Build: A visual workflow diagram that maps an OpenClaw data pipeline—from ingestion to AI inference—with live updates.


Prerequisites

Before we begin, ensure you have:

  • Node.js (v16+)
  • An OpenClaw project set up (or clone the OpenClaw Starter)
  • Basic knowledge of JavaScript/TypeScript
  • A code editor (VS Code recommended)

Step 1: Install Excaliclaw

Excaliclaw runs as a plugin inside Obsidian or as a standalone web component. For OpenClaw integration, we’ll use it as a web component.

Install via npm:

npm install excaliclaw
Enter fullscreen mode Exit fullscreen mode

Then, import and register it in your project (e.g., in main.ts or index.html):

<!-- index.html -->
<script type="module">
  import { defineCustomElements } from 'excaliclaw/loader';
  defineCustomElements();
</script>
Enter fullscreen mode Exit fullscreen mode

Now you can use <excaliclaw-diagram> anywhere in your HTML or React/Vue components.


Step 2: Create Your First Diagram

Let’s visualize a simple OpenClaw pipeline:

  1. Data Ingestion →
  2. Preprocessing →
  3. AI Model Inference →
  4. Output Export

Create a new HTML file or React component:

<!-- workflow-diagram.html -->
<excaliclaw-diagram>
  {
    "type": "excalidraw",
    "version": 2,
    "source": "excaliclaw",
    "elements": [
      {
        "id": "ingest",
        "type": "rectangle",
        "x": 100,
        "y": 100,
        "width": 120,
        "height": 60,
        "label": "Data Ingestion"
      },
      {
        "id": "preprocess",
        "type": "rectangle",
        "x": 300,
        "y": 100,
        "width": 140,
        "height": 60,
        "label": "Preprocessing"
      },
      {
        "id": "inference",
        "type": "rectangle",
        "x": 520,
        "y": 100,
        "width": 160,
        "height": 60,
        "label": "AI Inference"
      },
      {
        "id": "export",
        "type": "rectangle",
        "x": 760,
        "y": 100,
        "width": 120,
        "height": 60,
        "label": "Export"
      },
      {
        "id": "arrow1",
        "type": "arrow",
        "start": { "elementId": "ingest", "anchor": "end" },
        "end": { "elementId": "preprocess", "anchor": "start" }
      },
      {
        "id": "arrow2",
        "type": "arrow",
        "start": { "elementId": "preprocess", "anchor": "end" },
        "end": { "elementId": "inference", "anchor": "start" }
      },
      {
        "id": "arrow3",
        "type": "arrow",
        "start": { "elementId": "inference", "anchor": "end" },
        "end": { "elementId": "export", "anchor": "start" }
      }
    ]
  }
</excaliclaw-diagram>
Enter fullscreen mode Exit fullscreen mode

Open this in your browser. You’ll see a clean, editable diagram of your pipeline!

💡 Pro Tip: Use label fields to describe each step. Excaliclaw supports rich text and emojis: "label": "🚀 AI Inference".


Step 3: Connect Diagram to OpenClaw Logic

Now, let’s make the diagram reactive. We’ll update node colors based on real-time OpenClaw job status.

Assume you have a status API:

// openclaw-status.ts
async function getPipelineStatus() {
  const res = await fetch('/api/pipeline/status');
  return await res.json();
  // Returns: { ingestion: "success", preprocessing: "running", inference: "pending", export: "pending" }
}
Enter fullscreen mode Exit fullscreen mode

Update your diagram dynamically:


ts
// update-diagram.ts
const diagram = document.querySelector('excaliclaw-diagram');

async function updateDiagram() {
  const status = await getPipelineStatus();

  const colorMap = {
    success: "#10b981", // green
    running: "#f59e0b", // yellow
    pending: "#6b7280", //

---

☕ Supporting my work on Ko-fi (https://ko-fi.com/orbitwebsites) directly funds the development of new free tools, articles, and open source projects, so your contribution has a tangible impact on the community.
Enter fullscreen mode Exit fullscreen mode

Top comments (0)