ZELYRA
ZELYRA / SPRACHVERGLEICH

Zelyra verstehen
im direkten Vergleich.

Sieh selbst, wie Zelyra typische Reibungsverluste moderner Web-Stacks vermeidet: Ein einziges Modell für Schema, Typen und Validierung, nominale Fachtypen, nativer Webserver und compile-geprüftes SQL.

Der architektonische Kern

In klassischen Frameworks synchronisierst du Migrationen, ORM-Modelle, Request-Validierungen und DTOs über viele separate Dateien hinweg. In Zelyra ist das Schema Teil der Sprache — und treibt Typen, Abfragen und Formulare direkt an.

< 5 ms Kaltstart-Latenz Sofortige Betriebsbereitschaft
0 Byte Dependency-Ballast Kein node_modules / vendor
100% Kompilierte SQL-Prüfung Geprüft vor der Ausführung
0 Null-Pointer-Abstürze Garantiert durch Option<T>
Vergleichen mit:
01 / ÜBERSICHTSMATRIX

Die große Feature- und
Architektur-Matrix.

Ein ehrlicher und transparenter Überblick über fundamentale Architektureigenschaften von Zelyra im Vergleich zu etablierten Ökosystemen. Klicke oben auf eine Sprache, um Tabelle und Codebeispiele direkt zu fokussieren.

Merkmal / Disziplin Zelyra PHP (Laravel) TypeScript (Prisma) Rust (Axum) Go (net/http) Python (Django)
Single-Source Schema DDL, Typen & Validierung aus einem Guss ✓ Nativ ✗ 3-4 Dateien ~ Generiert ✗ Macros ✗ Struct Tags ✗ Models+Forms
Nominale Fachtypen Compiler verhindert vertauschte IDs ✓ Garantiert ✗ Primitive int/str ✗ Nur strukturell ✓ Newtypes ~ Schwacher Alias ✗ Dynamisch
Compile-geprüfte Null-Sicherheit Null-Pointer-Abstürze ausgeschlossen ✓ Option<T> ✗ Laufzeit TypeError ~ undefined/any ✓ Option<T> ✗ nil Panic ✗ NoneType Error
Compile-geprüftes SQL Gegen Schema validierte sql { } Blöcke ✓ Eingebaut ✗ Laufzeit Strings ✗ ORM / DSL ✓ sqlx Macros ✗ Laufzeit Strings ✗ ORM / DSL
Integrierter Webserver Kein Apache, Nginx oder FPM zwingend ✓ Nativ in Rust ✗ PHP-FPM / Nginx ~ Node.js Engine ~ Crates nötig ✓ net/http ✗ Gunicorn / WSGI
Deployment-Artefakt Ein einzelnes autarkes Binary ✓ Single Binary ✗ Source + Runtime ✗ Source + Node ✓ Single Binary ✓ Single Binary ✗ Source + Python
Abhängigkeiten-Footprint Vollkommen autark ohne Package-Zwang ✓ 0 Dependencies ✗ vendor/ (~150MB) ✗ node_modules (~400MB) ~ Crates (~1GB build) ✓ Schlank ✗ venv / pip
Kaltstart-Geschwindigkeit Sofortige Verfügbarkeit & Cloud ⚡ < 5 ms ~ 60 - 90 ms ~ 200 - 350 ms ⚡ < 2 ms ⚡ < 5 ms ~ 250 - 450 ms
Minimaler RAM-Verbrauch Speicherbedarf pro Instanz ⚡ ~12 MB ~ 45 - 70 MB ~ 85 - 140 MB ⚡ ~8 MB ⚡ ~15 MB ~ 75 - 120 MB
02 / DATENMODELL & SCHEMA

Ein einziges Schema.
Keine Doppelarbeit.

In Zelyra erzeugt eine einzige Tabellen-Deklaration automatisch die Tabellenstruktur, den Fachtyp, Null-Sicherheit und die Validierungsregeln.

customer.zyl ZELYRA
// 1 Definition: Schema, DDL, Typen & Validierung
table customers {
    id: Id primary auto
    name: String(100) required
    email: Email?
    active: Bool = true
}

// Generiert typgeprüftes HTML-Formular
form CustomerCreate -> customers {
    fields { name email }
}
Customer.php + migration.php LARAVEL
// 1. Migration, 2. Model, 3. FormRequest (3 Dateien synchron halten!)
class CreateCustomersTable extends Migration {
    public function up() {
        Schema::create('customers', function (Blueprint $t) {
            $t->id();
            $t->string('name', 100);
            $t->string('email')->nullable();
            $t->boolean('active')->default(true);
        });
    }
}
// In Customer.php: protected $fillable = ['name', 'email', 'active'];
// In StoreCustomerRequest.php: rules() => ['name' => 'required|max:100'...]
// 1. schema.prisma + npx prisma generate
model Customer {
  id     Int     @id @default(autoincrement())
  name   String  @db.VarChar(100)
  email  String?
  active Boolean @default(true)
}
// 2. Zod-Validierung muss manuell dupliziert werden:
export const CustomerSchema = z.object({
  name: z.string().min(1).max(100),
  email: z.string().email().optional(),
});
export type CustomerInput = z.infer<typeof CustomerSchema>;
// Diesel: migration.sql + schema.rs + models.rs
#[derive(Queryable, Selectable, Insertable, Serialize, Deserialize)]
#[diesel(table_name = crate::schema::customers)]
pub struct Customer {
    pub id: i32,
    pub name: String,
    pub email: Option<String>,
    pub active: bool,
}
// Validierungs-Crate validator muss zusätzlich implementiert werden:
#[derive(Validate, Deserialize)]
pub struct NewCustomer { ... }
💡
Der architektonische Vorteil: Kein Schema-Drift

In klassischen Projekten erfordert eine neue Spalte das Ändern der Migration, der ORM-Attribute, der FormRequest-Validierungsregeln und der DTO-Klassen. In Zelyra passt du die Tabelle an einer Stelle an – alle abhängigen Typen und Formulare sind sofort atomar synchron.

03 / NOMINALE FACHTYPEN

Vertauschte IDs gehören
der Vergangenheit an.

In TypeScript und PHP sind IDs schlicht primitive Zahlen oder Strings. Zelyra erzwingt echte nominale Typen: Eine OrderId kann niemals versehentlich als UserId übergeben werden.

nominal_safety.zyl ZELYRA
// Nominale Typen: Strikte Trennung im Typensystem
type UserId = Id
type OrderId = Id

fn cancel_order(order: OrderId, user: UserId) {
    // ...
}

// ❌ COMPILE ERROR:
// TypeMismatch: Expected OrderId, but found UserId
cancel_order(current_user_id, current_order_id)
structural_bug.ts TYPESCRIPT
type UserId = string;
type OrderId = string;

// TypeScript verwendet rein strukturelle Typisierung!
function cancelOrder(order: OrderId, user: UserId) { ... }

// ⚠️ KEIN FEHLER: Kompiliert ohne jede Warnung!
// Führt zur Laufzeit zu stiller Datenbeschädigung:
cancelOrder(currentUserId, currentOrderId);
// PHP erlaubt nur primitive Skalare:
function cancelOrder(int $orderId, int $userId): void {
    // ...
}

// ⚠️ Vertauschte Parameter werden klaglos akzeptiert.
// Erst wenn der falsche Kunde oder Auftrag gelöscht wird,
// bemerkt man den Fehler in Produktion!
cancelOrder($currentUserId, $currentOrderId);
// In Rust geht das nur über das Newtype-Pattern:
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub struct UserId(pub u64);

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub struct OrderId(pub u64);

fn cancel_order(order: OrderId, user: UserId) { ... }
// Sicher, aber erfordert mühsames Entpacken order.0
🛡️
Warum das in der Unternehmenspraxis entscheidend ist

Strukturelle Typsysteme (wie in TypeScript) können Aliase primitiver Datentypen nicht unterscheiden. Zelyras nominale Typbarrieren garantieren, dass Fachtypen niemals versehentlich vertauscht werden – und verhindern fatale Datenverluste vorab.

04 / NULL-SICHERHEIT

Keine Null-Pointer-Abstürze.
Garantiert durch Option<T>.

In Zelyra gibt es weder null noch undefined. Optionale Werte sind sichtbar als T? deklariert und müssen per Pattern Matching zwingend behandelt werden.

safe_option.zyl ZELYRA
// T? ist Option<T>. Zugriff ohne Prüfung unmöglich:
user_name: String? = load_user_name(id)

// Compiler erzwingt vollständige Fallunterscheidung
match user_name {
    Some(name) => print("Willkommen, {name}!")
    None       => print("Gast-Benutzer")
}
null_danger.ts TYPESCRIPT
const userName = loadUserName(id);

// Optional Chaining täuscht Sicherheit vor:
const upper = userName?.toUpperCase();

// ⚠️ 'upper' ist jetzt undefined!
// Wandert ohne Compiler-Fehler in die SQL-Datenbank
// oder führt im Template zu 'Hello, undefined'
saveToDatabase({ name: upper });
$userName = loadUserName($id); // gibt ?string zurück

// Vergessenes if ($userName !== null) führt zum Fatal Crash:
echo strtoupper($userName);

// 💥 Fatal error: Uncaught TypeError:
// strtoupper(): Argument #1 ($string) must be of type string, null given
user, err := loadUser(id)
// Ein vergessenes err != nil oder nil-Pointer-Dereferenzierung:
println(user.Name)

// 💥 panic: runtime error: invalid memory address
// or nil pointer dereference
Option<T> statt trügerisches Optional Chaining

Optional Chaining (?. ) löst das Null-Problem nicht; es verschiebt undefined lediglich weiter nach hinten, bis es in der Datenbank oder im Frontend knallt. Zelyra verlangt zwingend den bewussten Umgang an Ort und Stelle.

05 / DATENBANK-ABFRAGEN

Natives, typgeprüftes SQL.
Ohne ORM-Ballast und N+1-Fallen.

Relationale Datenbanken sind unschlagbar. Zelyra bindet SQL direkt in die Sprache ein – statisch gegen dein Schema typgeprüft, ohne schwere ORMs oder N+1-Laufzeitfallen.

orders_query.zyl ZELYRA
// Direktes SQL: Compile-geprüft & null Overhead
fn get_top_customers(min_spend: Float) -> List<CustomerSummary> {
    sql {
        SELECT c.id, c.name, SUM(o.total) AS total_spent
        FROM customers c
        JOIN orders o ON o.customer_id = c.id
        WHERE c.active = true
        GROUP BY c.id, c.name
        HAVING SUM(o.total) >= :min_spend
        ORDER BY total_spent DESC;
    }
}
EloquentQuery.php LARAVEL
// Eloquent: Verschachtelter Query-Builder mit Reflection
$topCustomers = Customer::query()
    ->selectRaw('customers.id, customers.name, SUM(orders.total) as total_spent')
    ->join('orders', 'orders.customer_id', '=', 'customers.id')
    ->where('customers.active', true)
    ->groupBy('customers.id', 'customers.name')
    ->havingRaw('SUM(orders.total) >= ?', [$minSpend])
    ->orderByDesc('total_spent')
    ->get();
// ⚠️ selectRaw und havingRaw sind ungeprüfte Strings!
// Massiver Speicherverbrauch bei großen Hydrierungen.
// Prisma unterstützt komplexe GROUP BY / HAVING nur eingeschränkt:
const aggregations = await prisma.order.groupBy({
  by: ['customerId'],
  _sum: { total: true },
  having: { total: { _sum: { gte: minSpend } } },
});
// Benötigt anschließende zweite Query für Kundendaten:
// -> Gefahr von N+1 Latenz oder komplexen Raw-Queries!
// SQLx in Rust prüft SQL zur Compile-Zeit:
let customers = sqlx::query_as!(
    CustomerSummary,
    r#"SELECT c.id, c.name, SUM(o.total) as total_spent ... "#,
    min_spend
)
.fetch_all(&pool)
.await?;
// Exzellente Sicherheit, erfordert aber laufende DB beim Build!
📊
Kein ORM-Verschleierungsspiel

ORMs versprechen Abstraktion, doch in der Praxis verbringen Entwickler Stunden damit, generierte N+1 Queries, ineffiziente Joins und ORM-Hydrierung zu optimieren. Zelyra gibt dir volles, schnelles SQL mit Compile-Schutz.

06 / WEBSERVER & ROUTING

Integrierter Webserver.
Kein externer Server-Overhead.

In Zelyra sind HTTP-Routing, Parameterbindung und HTML-Ausgabe Teil des Sprachkerns. Kein Nginx, Apache, PHP-FPM oder Express-Setup erforderlich.

profile_page.zyl ZELYRA
// Nativer Webserver läuft direkt via 'zelyra serve'
page "/users/{id}" {
    let user = find_user(id)?

    // Automatisches XSS-Escaping für alle Werte
    html {
        <h1>Profil: {user.name}</h1>
        <p>E-Mail: {user.email}</p>
    }
}
routes/web.php + Controller LARAVEL
// In routes/web.php:
Route::get('/users/{id}', [UserController::class, 'show']);

// In app/Http/Controllers/UserController.php:
public function show($id) {
    $user = User::findOrFail($id);
    return view('users.show', compact('user'));
}
// In resources/views/users/show.blade.php:
// <h1>Profil: {{ $user->name }}</h1>
// Erfordert Nginx + PHP-FPM Prozessmanagement im Betrieb!
// Next.js App Router:
export default async function UserPage({ params }: { params: { id: string } }) {
  const user = await db.user.findUnique({ where: { id: Number(params.id) } });
  if (!user) notFound();

  return (
    <div>
      <h1>Profil: {user.name}</h1>
      <p>E-Mail: {user.email}</p>
    </div>
  );
}
// Erfordert Node.js Runtime, JSX-Build-Pipeline und npm packages
async fn show_user(Path(id): Path<i32>) -> Response {
    let user = db::find(id).await;
    Html(format!("<h1>Profil: {}</h1>", user.name)).into_response()
}

let app = Router::new().route("/users/:id", get(show_user));
axum::serve(listener, app).await.unwrap();
// Benötigt Tokio Async-Runtime, Lifetimes und HTML-Escaping Crate
🚀
Von Grund auf für das Web konstruiert

In Zelyra ist das Web keine externe Bibliotheks-Erweiterung, sondern ein nativer Sprachbestandteil: Routen, Validierung und HTML-Rendering verschmelzen zu einer homogenen Einheit.

07 / PERFORMANCE & RESSOURCEN

Schlank, schnell & sparsam.
Ressourcen im direkten Vergleich.

Wie sich Zelyra bei Kaltstart-Latenz, minimalem Speicherverbrauch und Container-Größe gegen andere Sprachen schlägt.

Kaltstart-Latenz

Zeit bis zur ersten verarbeiteten HTTP-Anfrage.

Rust (Axum)1.8 ms
Zelyra3.2 ms
Go (net/http)4.5 ms
PHP (Laravel)82 ms
Node.js / TS280 ms

RAM-Bedarf im Leerlauf

Arbeitsspeicherbedarf der gestarteten Webanwendung.

Rust8 MB
Zelyra12 MB
Go15 MB
PHP-FPM (1 Worker)48 MB
Node.js (V8)95 MB

Docker-Container-Größe

Minimaler Image-Footprint für das Production Deployment.

Zelyra (Alpine)18 MB
Rust (Scratch)22 MB
Go (Alpine)25 MB
PHP + Nginx340 MB
Node + node_modules480 MB
08 / ENTSCHEIDUNGSHILFE

Wann wählst du was?
Ehrliche architektonische Leitplanken.

Keine Programmiersprache ist für jede erdenkliche Aufgabe die beste. Hier ist eine ehrliche Einschätzung, wann welches Werkzeug glänzt.

🐘 Bleib bei PHP / Laravel, wenn:

Du auf ein gewaltiges, jahrzehntelang gewachsenes Ökosystem und fertige Fertiglösungen angewiesen bist.

  • Du fertige Admin-Panels wie Filament oder Nova benötigst.
  • Du bestehende Monolithen mit eingespielten Teams weiterentwickelst.
  • Klassisches Webspace- oder Shared-Hosting zwingend vorgeschrieben ist.

🔷 Bleib bei TypeScript, wenn:

Du Code, Typen und Rendering nahtlos zwischen Browser und Backend teilen willst.

  • Du stark interaktive Frontend-Clients mit Next.js, Nuxt oder Svelte baust.
  • Du spezielle Node.js-APIs oder NPM-Visualisierungsbibliotheken nutzt.
  • Dein Team rein aus Frontend-Entwicklern besteht.

🦀 Wähle Rust, wenn:

Du Low-Level-Infrastruktur baust, bei der jedes Byte und Nanosekunden zählen.

  • Datenbank-Engines, Browser-Engines, Treiber oder Kryptografie.
  • Du absolute manuelle Kontrolle über Speicherlayouts und Threads benötigst.
  • Dein Projekt den Aufwand des Borrow-Checkers und langer Build-Zeiten rechtfertigt.

🐹 Wähle Go, wenn:

Du Cloud-Infrastruktur-Tools, Netzwerk-Proxies oder Kubernetes-Operatoren baust.

  • Reine I/O-Netzwerk-Gateways mit vielen parallelen TCP-Verbindungen.
  • Direkte Einbindung in das Kubernetes- und Docker-Ökosystem.
  • Du mit manuellem `if err != nil` und Boilerplate gut leben kannst.

⚡ Wähle Zelyra, wenn:

Du ohne Umwege, ohne Framework-Frust und mit maximaler Einfachheit echte Webanwendungen bauen willst.
Zelyra ist das Werkzeug für Menschen, die schnell greifbare Ergebnisse sehen wollen: Du hast eine Idee für ein Kundenportal, ein internes Firmen-Tool, ein Buchungssystem oder ein datenbankgestütztes Dashboard? Du willst nicht erst Tage damit verbringen, Webserver zu konfigurieren, Docker-Netzwerke zu debuggen oder gegen wuchernde ORM-Schichten zu kämpfen. Mit Zelyra schreibst du deine Datenmodelle auf, bindest deine Routen und die Anwendung läuft – blitzschnell, sicher und wartungsarm über Jahre hinweg.

🚀 Vom Gedanken zur fertigen Seite in Minuten

Keine zeitraubende Vorarbeit: Eine Tabelle deklarieren, ein HTML-Formular anbinden und die Route steht. Wo du in anderen Stacks Migrationen, Models, FormRequests und DTOs synchronisieren musst, erreichst du dein Ziel in Zelyra in einer einzigen, lesbaren Datei.

🛠️ Null Konfigurations-Frust & Kein Server-Zirkus

Kein Apache, kein Nginx, kein PHP-FPM, kein Gunicorn. Der High-Performance-Webserver in Rust ist direkt eingebaut. Ein Befehl (zelyra serve), und deine Anwendung antwortet auf Port 3000 mit echter nativer Geschwindigkeit und sofortigem Kaltstart.

🧩 Perfekt für pragmatische CRUD- & Daten-Apps

Ob interne Firmen-Werkzeuge, Kundenbereiche, Inventarlisten, Auftragsverwaltungen oder MVPs: Zelyra verbindet relationale Datenbanken und HTML-Ausgabe nahtlos. Echtes, typgeprüftes SQL ohne N+1-Überraschungen und ohne schwerfälligen ORM-Ballast.

🛡️ Sicherheit geschenkt – ohne Bibliotheks-Wahnsinn

Einfachheit bedeutet nicht Pfusch: Automatisches XSS-Escaping im HTML, garantierter Schutz vor SQL-Injections und die vollständige Eliminierung von Null-Pointer-Abstürzen durch Option<T> sind standardmäßig aktiv. Deine Web-App ist sicher, bevor sie je ein Deployment sieht.

Der 3-Schritte-Workflow: 1. Tabelle deklarieren 2. Formular & Route schreiben 3. zelyra serve ✓ Fertig & produktiv!

Editor & Tooling einrichten

Hole dir Syntax-Highlighting für .zyl-Dateien in VS Code, Sublime Text oder Neovim mit der offiziellen TextMate-Grammatik.

Schnellstart-Anleitung öffnen →
// Installationsbefehl
git clone https://github.com/sf1976/zelyra.git
cd zelyra && ./install.sh
zelyra run main.zyl