CLI-Tool
crossterm-rs/crossterm avatar
crossterm-rs/crossterm

Crossterm: reine Rust-Bibliothek fuer plattformuebergreifende Terminalsteuerung

Plattformübergreifende Terminalbibliothek rostet. Es unterstützt alle UNIX- und Windows-Terminals bis hin zu Windows 7 (nicht alle Terminals sind getestet, weitere Informationen finden Sie unter „Getestete Terminals“).

4.216 Sterne418 ForksRustMIT
GitHub

Auf einen Blick

Was ist das?
Der Crate crossterm bedient Cursor, Farben, Alternativbildschirm und Ereignisverarbeitung auf UNIX und Windows bis hinunter zu Windows 7, mit Feature-Flags zur Verschlankung der Abhaengigkeiten.
Für wen ist es gedacht?
Crossterm passt fuer Rust-Projekte, die eine schlanke Terminalschicht ohne komplettes UI-Framework suchen, etwa eigene Kommandozeilenwerkzeuge auf Basis von Ratatui oder direkte Ansteuerung von Cursor und Ereignissen. Wer current Releases erwartet, sollte beachten, dass Version 0.29 vom April 2025 der letzte Stand ist; vor dem Upgrade von 0.27 lohnt ein Blick auf das Changelog und die docs.rs-Liste der unterstuetzten Befehle.
Darf ich es kommerziell nutzen?
Ja. MIT ist eine freizügige Lizenz: Sie dürfen darauf aufbauende Software nutzen, verändern und verkaufen, solange Sie die Urheberrechts- und Lizenzhinweise beibehalten.
Wird es noch gepflegt?
Ja. Die letzten Commits kamen vor 2 Tagen.
In welcher Sprache ist es geschrieben?
Hauptsächlich Rust, laut der Sprachstatistik von GitHub.

Die Antworten beruhen auf den GitHub-Daten des Projekts (zuletzt abgeglichen am 14. September 2026) und auf unserer Analyse. Sie sind keine Rechtsberatung.

TIEFGEHENDE OPEN-SOURCE-ANALYSE

Eine reine Rust-Schicht zwischen Programm und Terminal

Crossterm ist eine in reinem Rust geschriebene Bibliothek zur Terminalmanipulation, mit der sich plattformuebergreifende textbasierte Oberflaechen bauen lassen. Das README versichert Unterstuetzung fuer alle UNIX- und Windows-Terminals bis hinunter zu Windows 7, raumt aber zugleich ein, dass nicht alle Terminals getestet wurden, und verweist auf eine Liste gepruefter Umgebungen. Die Bibliothek liefert damit die Low-Level-Arbeit, die jedes Terminalprogramm braucht: Ausgabe steuern, Eingabe lesen, Bildschirmzustand verwalten.

Als Crate ist crossterm bewusst klein gehalten, das README fuehrt nur wenige Abhaengigkeiten und volle Kontrolle ueber das Schreiben und Flushing des Ausgabepuffers als Eigenschaften an. Die Metadaten verzeichnen 4.200 Sterne, 415 Forks, den Standardzweig ist master, die Lizenz MIT. Die Positionierung wird im Abschnitt Used By sichtbar: Projekte wie Broot, Cursive, Ratatui, Rust-sloth und Rusty-rain bauen darauf auf, teils als ganze Frameworks, teils als einzelne Werkzeuge. Crossterm selbst bleibt darunter liegende Infrastruktur und stellt keine Widgets oder Layoutlogik bereit.

Vier Funktionsbereiche: Cursor, Stil, Terminal, Ereignisse

Das README gliedert die Faehigkeiten in vier Gruppen. Beim Cursor umfasst die Palette Bewegungen um N Schritte in alle Richtungen, Wechsel auf vorherige oder naechste Zeile, Sprung auf eine Spalte, Lesen und Setzen der Position, Speichern und Wiederherstellen sowie Ein- und Ausblenden; das Blinken laesst sich aktivieren, mit dem Vorbehalt, dass nicht alle Terminals es unterstuetzen. Die gestylte Ausgabe bietet Vorder- und Hintergrundfarben aus 16 Grundfarben, 256 ANSI-Farben und RGB unter Windows 10 und UNIX sowie Attribute wie fett, kursiv, unterstrichen und durchgestrichen.

Auf Terminal-Ebene gibt es Loeschen von Zeilen oder des gesamten Bildschirms inklusive Varianten ab bzw. bis zum Cursor, Scrollen, Lesen und Setzen der Groesse, Beenden des Prozesses, Alternativbildschirm, Rohbildschirm, Fenstertitel und Zeilenumbruchumschaltung. Die Ereignisverarbeitung liest Tastatureingaben, Mausdruck, -loslass, -position, -tasten und -ziehen, Groessenaenderungen des Terminals sowie Modifikatoren SHIFT, ALT und CTRL fuer Maus und Tastatur, gepaart mit einer Poll- und Read-API. Diese Aufteilung erlaubt es, genau die Ebenen zu nutzen, die ein Projekt braucht, ohne die anderen zu bemuehen.

Einstieg mit execute! und ExecutableCommand

Der Einstieg ist eine Zeile in der Cargo.toml, das README zeigt crossterm = "0.27". Das Beispielprogramm importiert aus dem style-Modul Color, Print, ResetColor, SetBackgroundColor und SetForegroundColor und ruft das Makro execute! auf dem stdout auf: erst SetForegroundColor(Color::Blue), dann SetBackgroundColor(Color::Red), Print("Styled text here.") und schliesslich ResetColor. Dieselben Befehle lassen sich alternativ funktional verketten ueber das Trait ExecutableCommand mit stdout().execute(...).

Zwei Wege, ein Ziel: Das Makro bündelt mehrere Befehle in einem Ausdruck, die Trait-Methode fuehrt sie einzeln aus; beide schreiben direkt in den Ausgabepuffer. Fuer fortgeschrittene Faelle verweist das README auf das examples/-Verzeichnis und die Dokumentation unter docs.rs/crossterm, wo eine Liste aller unterstuetzten Befehle hinterlegt ist. Wer nur eine duenne Schicht ohne Ereignisverarbeitung braucht, kann laut README das events-Feature deaktivieren oder das filedescriptor-Feature verwenden und damit die Abhaengigkeiten mio, signal-hook und signal-hook-mio aus dem Baum entfernen.

Feature-Flags und die Abhaengigkeitsbegründung

Das README dokumentiert sechs Feature-Flags mit knapper Wirkung: event-stream liefert einen futures::Stream, der Result<Event> erzeugt, serde erlaubt Serialisieren und Deserialisieren von Ereignissen, events steuert das Lesen von Eingabe- und Systemereignissen und ist standardmaessig aktiv, filedescriptor nutzt rohe Dateideskriptoren statt mio, derive-more ergaenzt is_*-Hilfsfunktionen fuer Ereignistypen, osc52 aktiviert das Modul crossterm::clipboard.

Dazu gehoert eine ungewoehnlich explizite Tabelle der Abhaengigkeitsbegründung: bitflags fuer KeyModifiers und parking_lot fuer RwLocks mit Timeout und const-Mutexes sind immer dabei, libc, Mio und signal-hook sind optional und nur unter UNIX im events-Feature aktiv, winapi deckt Windows-Systemaufrufe ab, die ANSI-Codes nicht ersetzen koennen, futures-core kommt nur mit event-stream, serde nur mit serde, base64 nur mit osc52, und derive_more ist optional, aber standardmaessig enthalten. Diese Transparenz ermoeglicht es, den Abhaengigkeitsbaum vor dem Commit in die eigene Cargo.toml abzuschaetzen, ein Detail, das die meisten Crate-READMEs schuldig bleiben. Fuer minimale Builds ist die Kombination aus events-Deaktivierung und filedescriptor der dokumentierte Weg.

Die Liste gepruefter Terminals und ihre Grenzen

Das README fuehrt konkret getestete Umgebungen auf: Console Host unter Windows 10 Pro und 8.1 N, Windows Terminal auf Windows 10 x86_64 und Windows 11 arm64, GNOME Terminal unter Ubuntu 23.04, Ubuntu 17.10 und Pop!_OS 20.04, KDE Konsole auf Arch und Manjaro, Kitty auf Arch und NixOS, Linux Mint, Alacritty auf OpenSuse, Crostini unter Chrome OS sowie macOS Monterey 12.7.1 auf Intel und Sonoma 14.4 auf M1 Max.

Die Liste ist ausdruecklich unvollstaendig; das README laedt ein, weitere problemlos laufende Terminals nachzutragen. Praktisch relevant sind dabei zwei Zusagen: RGB und 256 Farben funktionieren laut Featureliste nur unter Windows 10 und UNIX, aeltere Windows-Versionen fallen auf die 16 Grundfarben zurueck, und das Cursor-Blinken ist terminalabhaengig. Wer eine Zielumgebung ausserhalb der Liste hat, etwa einen ungewoehnlichen Terminal-Emulator oder einen serial angeschlossenen Bildschirm, sollte die Funktion daher vor dem Commit in die eigene Software anhand der Beispiele aus examples/ pruefen, statt die unterste Windows-7-Zusage als Garantie fuer alleDetails zu lesen.

Pflegezustand, Mitwirkung und MIT-Lizenz

Die Release-Historie zeigt einen langsamen, aber nachvollziehbaren Takt: 0.29 erschien am 5. April 2025, 0.28 am 31. Juli 2024 und 0.27.0 am 6. August 2023. Das README stammt aus dem 0.27-Zeitalter, wie die Beispielzeile zeigt; wer 0.29 einsetzt, sollte die docs.rs-Dokumentation der aktuellen Version konsultieren. Die 244 offenen Issues sind bei einer solchen Bibliothek eine Mischung aus Terminalspezifika und Featurewuenschen.

Fuer Beitraege verweist das README auf docs/CONTRIBUTING.md, als Autor wird Timon Post als Projektinhaber und Schoepfer genannt, ein Discord-Server ist verlinkt. Die MIT-Lizenz gilt fuer das Projekt und alle seine Sub-Crates und erlaubt Nutzung, Kopieren, Veraendern, Verteilung und kommerziellen Einsatz ohne Copyleft-Pflichten, die Software wird ohne Gewaehrleistung geliefert. Fuer Rust-Teams heisst das: Der Crate ist rechtlich unkompliziert einsetzbar, der eigentliche Planungsaufwand liegt in der Terminalmatrix und im Upgrade-Rhythmus zwischen den Minor-Versionen.

Redaktionelles Fazit

Crossterm passt fuer Rust-Projekte, die eine schlanke Terminalschicht ohne komplettes UI-Framework suchen, etwa eigene Kommandozeilenwerkzeuge auf Basis von Ratatui oder direkte Ansteuerung von Cursor und Ereignissen. Wer current Releases erwartet, sollte beachten, dass Version 0.29 vom April 2025 der letzte Stand ist; vor dem Upgrade von 0.27 lohnt ein Blick auf das Changelog und die docs.rs-Liste der unterstuetzten Befehle.

Offizielle Quellen

  1. Official README
  2. Project repository
  3. Release notes
Community-Notizen

Community-Notizen