Skip to content

LeDaniii/Eros

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

37 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸš€ Eros Charts - High-Performance gRPC Streaming Charts

WebGPU-basierte Chart-Library fΓΌr Echtzeit-Datenvisualisierung ΓΌber gRPC Streams.

✨ Features

  • WebGPU Rendering - Millionen von Datenpunkten @ 60fps
  • gRPC Server-Streaming - Effiziente Echtzeit-Daten-Übertragung
  • SharedArrayBuffer - Lock-free Threading fΓΌr maximale Performance
  • Auto-Scaling - Y-Achse passt sich automatisch an
  • Zoom & Pan - Interaktive Datenexploration
  • TypeScript - Voll typisierte API

🎯 Use Cases

  • Embedded/IoT Dashboards (z.B. PrΓΌfstΓ€nde)
  • Scientific Data Visualization
  • Monitoring Tools

πŸš€ Quick Start

1. Server starten

cd eros-server
npm install
node server.mjs

Server lΓ€uft auf http://localhost:50051

2. Frontend starten

npm install
npm run dev

Γ–ffne http://localhost:5173

πŸ’» Verwendung

import { ErosChart } from './lib/api/ErosChart';

// Chart erstellen
const chart = new ErosChart('#plotCanvas', {
  grpcUrl: 'http://localhost:50051',
  bufferSize: 100_000,   // 10 Sekunden @ 10kHz
  sampleRate: 10_000,    // 10kHz
  lineColor: '#00ff00'   // Optional: Linienfarbe (default: grΓΌn)
});

// Initialisieren
await chart.initialize();

// Stream starten
await chart.startStream({ duration: 30 });

// Zoom/Pan
chart.setViewport(5000, 15000);    // Zeige Samples 5k-15k
chart.resetViewport();              // ZurΓΌck zur Vollansicht

πŸ“ Projekt-Struktur

eros/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ lib/                    # Die Eros Chart Library
β”‚   β”‚   β”œβ”€β”€ api/
β”‚   β”‚   β”‚   └── ErosChart.ts   # Haupt-API (Start hier!)
β”‚   β”‚   β”œβ”€β”€ core/
β”‚   β”‚   β”‚   └── SharedRingBuffer.ts  # Thread-sicherer Ringpuffer
β”‚   β”‚   β”œβ”€β”€ renderer/
β”‚   β”‚   β”‚   β”œβ”€β”€ WebGPURenderer.ts    # WebGPU Renderer
β”‚   β”‚   β”‚   └── GridOverlay.ts       # Canvas2D Grid
β”‚   β”‚   β”œβ”€β”€ worker/
β”‚   β”‚   β”‚   └── data.worker.ts       # gRPC Stream Worker
β”‚   β”‚   └── index.ts            # Public Exports
β”‚   β”‚
β”‚   β”œβ”€β”€ main.ts                 # Demo App
β”‚   └── gen/                    # Generated Protobuf Code
β”‚
β”œβ”€β”€ eros-server/                # Beispiel gRPC Server
β”‚   β”œβ”€β”€ server.mjs             # Node.js Server
β”‚   └── gen/                    # Generated Protobuf Code
β”‚
└── src/lib/api/proto/
    └── measurements.proto      # gRPC Schema

🧠 Wie funktioniert's?

WebGPU Rendering

CPU: Daten in GPU Buffer kopieren
GPU: Vertex Shader lΓ€uft PARALLEL fΓΌr alle Punkte
GPU: Fragment Shader malt die Pixel
Ergebnis: 60fps bei Millionen von Punkten!

SharedArrayBuffer

Worker Thread: gRPC Stream β†’ schreibt in SharedArrayBuffer
Main Thread: Renderer β†’ liest aus SharedArrayBuffer
Vorteil: Keine Kopie nΓΆtig, ultra-schnell!

gRPC Server-Streaming

Client: "Gib mir Messdaten"
Server: Batch 1 (100 Samples)
Server: Batch 2 (100 Samples)
Server: Batch 3 (100 Samples)
...
Vorteil: 1 Connection, viele Messages (effizient!)

πŸ“š Lern-Kommentare

Der Code ist VOLLSTΓ„NDIG kommentiert mit:

  • WAS passiert (fΓΌr schnelles Verstehen)
  • WARUM diese LΓΆsung (fΓΌr Lernen)
  • WIE es technisch funktioniert (Details)

Perfekt zum Lernen von WebGPU, SharedArrayBuffer, gRPC!

πŸ› οΈ Technologie-Stack

  • WebGPU (WGSL Shaders)
  • gRPC / Connect-RPC (Protocol Buffers)
  • Web Workers (Background Threading)
  • SharedArrayBuffer + Atomics (Lock-free Sync)
  • TypeScript (Type Safety)
  • Vite (Build Tool)

Binary Curve Format (.erosb)

The app can export and import native binary curve files with the .erosb extension.

  • Spec: docs/erosb-format.md
  • APIs: ErosChart.exportBinary(), ErosChart.decodeBinary(), ErosChart.loadData()

πŸ”§ Entwicklung

# TypeScript kompilieren
npm run build

# Dev Server (Hot Reload)
npm run dev

# Protobuf Code generieren
npm run buf:generate

πŸ“¦ Als Library nutzen

In package.json kannst du das spΓ€ter publishen:

{
  "name": "@eros/charts",
  "main": "./dist/lib/index.js",
  "types": "./dist/lib/index.d.ts",
  "exports": {
    ".": {
      "import": "./dist/lib/index.js",
      "types": "./dist/lib/index.d.ts"
    }
  }
}

Dann in anderen Projekten:

npm install @eros/charts
import { ErosChart } from '@eros/charts';

πŸŽ“ Wichtige Konzepte

1. Warum WebGPU statt Canvas2D?

Canvas2D ist CPU-basiert und schafft maximal ~10.000 Punkte bei 60fps. WebGPU nutzt die GPU (parallele Berechnung) β†’ Millionen von Punkten mΓΆglich!

2. Warum SharedArrayBuffer?

Normales ArrayBuffer: Jeder Thread bekommt eine KOPIE (langsam!). SharedArrayBuffer: BEIDE Threads sehen den GLEICHEN Speicher (schnell!).

3. Warum gRPC Streaming?

10.000 Samples/Sekunde = 10.000 HTTP Requests wΓ€re irre. gRPC Stream hΓ€lt die Verbindung offen und schickt Daten fortlaufend.

🚧 TODOs für Production

  • Multi-Channel Support (mehrere Kurven gleichzeitig)
  • Cursors & Measurements
  • Export (PNG/CSV)
  • WebGPU Fallback (Canvas2D fΓΌr alte Browser)
  • Reconnection Logic
  • npm Package verΓΆffentlichen
  • Dokumentations-Website (VitePress)
  • Unit Tests

πŸ“„ Lizenz

Noch offen - fΓΌr private/firmeninternen Gebrauch OK!


Made with ❀️ für PrüfstÀnde und High-Performance Visualisierung

About

High-performance, framework-agnostic WebGPU charting library designed for 10kHz+ real-time data streaming and massive historical dataset investigation.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors