Skip to content

EthanShoeDev/fressh

Repository files navigation

Fressh

Fressh is a mobile SSH client that remains clean and simple while supporting powerful features.

ci npm: @fressh/react-native-uniffi-russh npm: @fressh/react-native-xtermjs-webview

Features

  • Secure connection history: Securely store previous connections
  • Theming: Configurable theme
  • xterm fidelity: Fully accurate xterm emulation

Coming soon

  • Command presets: Configurable preset command buttons
  • On-device AI: On-device LLM for command completion and output summarization

Screenshots

Hosts tab

Shell detail

Architecture

The app is a monorepo with three main parts:

  • apps/mobile: The actual React Native Expo app.
  • packages/react-native-uniffi-russh: A uniffi react native binding package that exposes a native Rust module for russh.
  • packages/react-native-xtermjs-webview: A small library that instantiates an Expo WebView preloaded with xterm.js.

Both packages are published on npm if you want to use them in your own project:

Why

Mostly to practice with React Native, Expo, and Rust. There are a few more developed SSH clients on the Google Play and iOS App Stores.

Some of those try to lock features like one-off commands behind a paywall, so this aims to be a free alternative.

Another notable feature of the app is the WebView xterm.js renderer. Using this as the render layer has a few benefits:

  • Parity with VS Code: We match the render behavior of VS Code
  • Consistent visuals: The render layer visually matches on both iOS and Android

With that said, it is probably less performant than a native renderer, so it may be replaced in the future. Implementing a Nitro view seems very promising.

Changelogs

Contributing

We provide a Nix flake devshell to help get a working environment quickly. See CONTRIBUTING.md for details.

License

MIT

About

Fressh is a mobile SSH client that remains clean and simple while supporting powerful features.

Resources

Contributing

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •