TERN : un client SSH natif pour macOS qui tient en 76 Mo
⏱️ Temps de lecture estimé : 4 minutes
https://github.com/your-moon/tern
📌 TERN est un client SSH natif pour macOS, écrit en Rust sur GPUI, le framework d’interface de Zed. Il reprend ce que Termius et Tabby proposent pour une liste de serveurs — hôtes enregistrés, SFTP, splits, snippets, tunnels — mais dans un seul petit processus, sans moteur de navigateur embarqué.
Le constat de départ est un chiffre. Une session connectée tient en 76 Mo chez TERN, contre 580 Mo pour Tabby et 583 Mo pour Termius, dans les mesures publiées par le projet. Je ne les ai pas refaites moi-même, mais l’écart tient à l’architecture : pas d’Electron, pas de Chromium, juste Rust et le rendu natif de GPUI.
Ce que vous faites avec, concrètement. Vous importez une fois votre ~/.ssh/config, vos hôtes se rangent en groupes et en tags, et ⌘K ouvre un sélecteur qui filtre au fil de la frappe. Une fois la connexion posée, ⇧⌘O déplie un panneau SFTP pour parcourir le dossier distant, télécharger ou glisser-déposer un fichier. ⌘D coupe l’onglet en deux, ⌘F cherche dans le scrollback, ⇧⌘S rappelle vos commandes enregistrées, et la saisie peut être diffusée vers plusieurs onglets à la fois.

Le détail qui m’intéresse le plus reste les mots de passe. Ils viennent de votre clé SSH, d’une commande de gestionnaire — gopass show -o work/ssh/web-01, op read …, pass show … — ou du coffre age interne, déverrouillé par un PIN ou le trousseau et reverrouillé à l’inactivité. Devant une invite sudo, ⌘\\ tape le mot de passe. Jamais tout seul : uniquement sur demande, et seulement face à une vraie invite de mot de passe. C’est exactement le comportement que j’attends d’un outil qui manipule des secrets.
La sauvegarde suit la même logique. Hôtes, snippets et réglages partent vers un dépôt Git privé que vous possédez, chiffrés sur le Mac avant l’envoi ; le dépôt ne voit que des fichiers .age et un tern-meta.json sans contenu. Pas de compte, pas d’abonnement. La synchronisation fusionne hôte par hôte quand deux Mac ont divergé, et ne vous sollicite qu’en cas de vrai conflit.
Sous le capot, la pile SSH s’appuie sur russh, le terminal sur alacritty_terminal et l’interface sur GPUI. Les clés d’hôte sont vérifiées contre ~/.ssh/known_hosts : une clé changée refuse la connexion et affiche la ligne ssh-keygen -R à recopier pour repartir proprement. Sont inclus aussi les chaînes ProxyJump, les transferts local, distant et SOCKS, l’agent forwarding, les connexions à deux facteurs, et une reconnexion automatique après une coupure réseau — mais jamais après un exit volontaire.
TERN reste jeune : version 0.1.3, un dépôt ouvert depuis quelques jours, et un auteur qui l’utilise chaque jour. Les builds Windows et Linux sont publiés en avant-première, testés en CI mais pas encore lancés sur un vrai bureau. Côté apparence, sept œuvres du domaine public servent de fonds d’écran, le clair/sombre suit macOS et la fenêtre tire ses couleurs de l’image. L’interface se contente d’anglais pour l’instant.
Je trouve l’approche juste. Plutôt que d’empiler une interface web sur une pile Electron, TERN parie sur le natif, et cela se sent dans le poids comme dans le lancement. Termius garde une longueur d’avance sur le mobile et les fonctions d’équipe, Tabby sur son écosystème de plugins, mais pour qui veut un client SSH sobre sur macOS, l’alternative mérite un essai. La réserve est celle de tout projet récent : les angles manquent encore, et il faut aimer le Mac.
Quelques repères avant d’essayer :
- 🖥️ Terminal natif Rust/GPUI, une session connectée annoncée à 76 Mo
- 🔑 Mots de passe via gestionnaire, clé SSH ou coffre age, tapés par ⌘\\ devant
sudo - 📂 SFTP intégré, glisser-déposer et édition des fichiers distants
- 🌐 Splits ⌘D, recherche dans le scrollback, snippets ⇧⌘S et diffusion de saisie
- 🔄 Sync chiffrée vers un dépôt Git privé, sans compte ni abonnement
- 🧱 ProxyJump, tunnels local/distant/SOCKS, agent forwarding et 2FA
Sources






