studio

Ein Desktop-Tool für Moodboards, Cuts und Sessions, auf einem gemeinsamen Kern (Rust + Tauri). Dort, wo Dateizugriff, Offline-Arbeit und die Geschwindigkeit einer nativen App zählen. Ein Repo, ein gemeinsamer Core, separate Apps.

studio
TL;DR

Ein Desktop-Entwicklerwerkzeug zum Arbeiten mit Moodboards, Schnitten und Sitzungen, gebaut auf Rust + Tauri. Schneller Dateizugriff und Offline-Arbeit, native Geschwindigkeit statt eines Browser-Tabs, und dazu ein Repo und ein gemeinsamer Kern statt separaten Codes pro Plattform.

Einleitung

studio ist ein Desktop-Entwicklerwerkzeug, das die Arbeit mit Moodboards, Schnitten und Sitzungen bedient - Dinge, bei denen es auf ständigen, schnellen Zugriff auf Dateien auf der Festplatte ankommt. Diese Fallstudie behandelt, wie man ein solches Werkzeug nativ baut, ohne dabei den Code für jedes Betriebssystem zu vervielfachen.

Die Prämisse war zweiseitig. Einerseits soll sich das Werkzeug wie ein natives Programm anfühlen: Dateien griffbereit, Betrieb ohne Netz, flüssig auch bei einer großen Sitzung. Andererseits soll es ein Repository und ein Kern bleiben, nicht drei separate Apps, die dann dreifach gepflegt werden müssen.

Was ein Browser nicht geben kann

Die Arbeit mit Moodboards und Schnitten bedeutet ständiges Greifen zu den Festplatten: Hunderte von Dateien, Projektverzeichnisse, Vorschauen, die sofort erscheinen sollen. Ein Browser hält all das hinter einer Sandbox-Wand. Jeder Dateizugriff ist ein Dialog, kein Netz bedeutet keine App, und bei einer größeren Sitzung fängt die Oberfläche an zu würgen.

Wir wollten ein Werkzeug, das Dateien griffbereit hat wie ein natives Programm, ohne Netz funktioniert und bei einer großen Sitzung nicht langsamer wird. Aber ohne die Falle, in die man beim nativen Schreiben leicht tappt: separater Code für Windows, macOS und Linux, der dann zwischen den Plattformen auseinanderdriftet und die Arbeit bei jeder Änderung vervielfacht.

Warum Tauri und nicht Electron

Tauri kehrt die von Electron bekannte Anordnung um. Die Oberfläche schreiben Sie einmal, webbasiert, aber Sie schleppen nicht den ganzen Browser mit sich - das Fenster nutzt die Rendering-Engine des Systems, während die ganze schwerere Arbeit, der Dateizugriff und die Logik in einem Rust-Kern sitzen. Das Ergebnis ist ein Binary, das in Megabyte gemessen wird, nicht in Hunderten von Megabyte, und ein echter Systemzugriff, den eine verpackte Seite nie hatte.

Der Unterschied ist nicht kosmetisch. Electron liefert seine eigene Kopie der Browser-Engine mit jeder App aus, sodass jedes Werkzeug für dasselbe Chromium erneut bezahlt. Tauri nutzt, was das System bereits hat, und fügt nur eine dünne eigene Schicht hinzu. Bei einem Werkzeug, das schnell und leicht sein soll, ist das der Unterschied zwischen funktioniert und funktioniert sofort.

Tauri vs Electron

MerkmalTauriElectron
Rendering-Enginedas Systemeigene Kopie von Chromium
Binary-GrößeMegabyteHunderte von Megabyte
LogikkernRustNode.js
Systemzugriffnativ, über Befehleüber die Browser-Schicht

Web zeichnet, Rust macht

Die Aufteilung ist sauber, und sie ist es, die die ganze Architektur im Zaum hält: Web zeichnet, Rust macht. Die Ansichten von Moodboards und Schnitten werden einmal geschrieben, webbasiert, während Dateioperationen, Indizierung und alles, was schnell und offline sein soll, über Tauri-Befehle zu einem Kern gehen, der nichts über das Aussehen weiß.

Der Rust-Kern ist eine eigenständige Bibliothek: Dateiladen, Indizierung, das Sitzungsmodell. Sie hängen nicht davon ab, wer sie zeichnet, sodass sich dieselbe Logik ohne Oberfläche testen und über denselben Vertrag auf jeder Plattform bereitstellen lässt. Die Ansicht ist eine dünne Schicht obenauf und nicht der Ort, an dem das Wissen über das Projekt wohnt.

commands.rs · rust
#[tauri::command]
fn open_moodboard(path: String) -> Result<Moodboard, String> {
    Moodboard::load(&path).map_err(|err| err.to_string())
}
1
Repo, gemeinsamer Rust-Kern
3
Plattformen aus einer Quelle
100%
der Funktionen offline verfügbar

Die Grenze, die wir bewachen

Die saubere Aufteilung hat noch einen Vorteil: Es gibt nur einen Ort, an dem man Fehler ernsthaft bewachen muss. Innerhalb des Kerns vertrauen wir unseren eigenen Typen - wenn eine Sitzung geladen ist, ist ihr Modell korrekt. Aber ein Dateipfad, der aus der Ansicht kommt, ist eine Eingabe von außen. Er existiert vielleicht nicht, er kann auf eine beschädigte Datei zeigen, er kann ein Rest eines verschobenen Projekts sein.

Deshalb sitzt die Validierung genau an der Grenze - am Tauri-Befehl - und ist nicht sicherheitshalber über den ganzen Kern verschmiert. Dort, wo das Web auf Rust trifft, wird ein Fehler zu einer lesbaren Meldung für den Benutzer; tiefer müssen wir dasselbe nicht ein zweites Mal prüfen.

i
Hinweis

Die Grenze zwischen Web und Kern ist der einzige Ort, an dem wir Fehler ernsthaft bewachen. Innerhalb des Kerns vertrauen wir unseren eigenen Typen, aber ein Dateipfad aus der Ansicht ist eine Eingabe von außen - und erst hier, am Tauri-Befehl, wird er zu einer lesbaren Meldung, statt die App tiefer unten umzuwerfen.

1
Kern in Rust

Dateiladen, Indizierung und das Sitzungsmodell als von der Oberfläche unabhängige Bibliothek.

2
Weboberfläche

Moodboard- und Schnittansichten einmal geschrieben, über Tauri-Befehle mit dem Kern verbunden.

3
Offline von Grund auf

Daten und Dateien lokal gehalten, Sync ist eine Option, keine Startbedingung.

4
Ein Durchlauf, drei Plattformen

ein Build aus derselben Quelle für Windows, macOS und Linux, ohne separate Code-Zweige.

Was das Endergebnis ist

Das Werkzeug startet schnell, hat Dateien griffbereit und braucht kein Netz, um zu funktionieren - und vervielfacht trotzdem nicht den Code pro System. Ein Repo, ein Rust-Kern, eine dünne Ansichtsschicht obenauf und separate Apps am Ausgang, aus derselben Quelle gebaut.

Für die Person, die es benutzt, bedeutet das, dass sich das Werkzeug wie ein natives Programm verhält und nicht wie eine Seite, die eine App vortäuscht: Sie zeigen auf Dateien direkt von der Festplatte, die Arbeit geht ohne Netz weiter, und die Oberfläche würgt nicht bei einer großen Sitzung. Für die Pflege bedeutet es, dass eine im Kern hinzugefügte neue Funktion alle drei Plattformen zugleich erreicht, statt dreimal separat geschrieben und kaputtgemacht zu werden.

Dateien griffbereit wie in einem nativen Programm, ein Rust-Kern darunter, drei Plattformen aus einer Quelle.

Weitere Projekte

Weitere Projekte aus derselben Kategorie - sehen Sie, wie wir ähnliche Herausforderungen angehen.

Haben Sie ein ähnliches Projekt?

Melden Sie sich - ein Angebot ist kostenlos und kommt innerhalb einer Stunde.