mirror of
https://github.com/EthanShoeDev/fressh.git
synced 2026-01-11 06:12:51 +00:00
81 lines
3.2 KiB
Markdown
81 lines
3.2 KiB
Markdown
## Fressh
|
|
|
|
[Fressh](https://fressh.dev/) is a mobile SSH client that remains clean and
|
|
simple while supporting powerful features.
|
|
|
|
[](https://github.com/EthanShoeDev/fressh/actions/workflows/check.yml)
|
|
[](https://www.npmjs.com/package/@fressh/react-native-uniffi-russh)
|
|
[](https://www.npmjs.com/package/@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
|
|
|
|

|
|
|
|

|
|
|
|
### 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](https://github.com/jhugman/uniffi-bindgen-react-native)
|
|
binding package that exposes a native Rust module for
|
|
[russh](https://github.com/Eugeny/russh).
|
|
- **`packages/react-native-xtermjs-webview`**: A small library that instantiates
|
|
an Expo WebView preloaded with [xterm.js](https://xtermjs.org/).
|
|
|
|
Both packages are published on npm if you want to use them in your own project:
|
|
|
|
- [`@fressh/react-native-uniffi-russh`](https://www.npmjs.com/package/@fressh/react-native-uniffi-russh)
|
|
- [`@fressh/react-native-xtermjs-webview`](https://www.npmjs.com/package/@fressh/react-native-xtermjs-webview)
|
|
|
|
### 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](https://nitro.margelo.com/docs/view-components) seems very
|
|
promising.
|
|
|
|
### Changelogs
|
|
|
|
- `apps/mobile`: [`apps/mobile/CHANGELOG.md`](./apps/mobile/CHANGELOG.md)
|
|
- `@fressh/react-native-uniffi-russh`:
|
|
[`packages/react-native-uniffi-russh/CHANGELOG.md`](./packages/react-native-uniffi-russh/CHANGELOG.md)
|
|
- `@fressh/react-native-xtermjs-webview`:
|
|
[`packages/react-native-xtermjs-webview/CHANGELOG.md`](./packages/react-native-xtermjs-webview/CHANGELOG.md)
|
|
|
|
### Contributing
|
|
|
|
We provide a Nix flake devshell to help get a working environment quickly. See
|
|
[`CONTRIBUTING.md`](./CONTRIBUTING.md) for details.
|
|
|
|
### License
|
|
|
|
MIT
|