A Go library for building SSH applications with middleware support, making it easy to create secure, terminal-accessible apps.
Wish is an SSH server library written in Go that simplifies building custom SSH applications beyond traditional shell access. It provides a secure framework for creating remotely accessible tools like Git servers, terminal user interfaces (TUIs), and other network services over SSH, leveraging SSH's built-in authentication and encryption.
Go developers building secure network applications that need SSH-based access, such as custom Git servers, interactive terminal applications, or specialized remote administration tools. It's particularly useful for developers who want to avoid the complexity of HTTPS certificates while maintaining secure communication.
Developers choose Wish for its middleware architecture that simplifies SSH server development, similar to HTTP frameworks, and its native integration with Bubble Tea for building TUIs over SSH. It offers sensible defaults, automatic server key generation, and modular components for access control, logging, and protocol support without requiring OpenSSH.
Make SSH apps, just like that! 💫
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Wish's middleware system, analogous to HTTP frameworks, simplifies adding features like logging and access control, allowing modular composition as described in the README.
The bubbletea middleware natively connects SSH PTY input/output to tea.Program, handling window resizes and making TUI serving over SSH seamless, with demos available.
With the git middleware, Wish adds Git server capabilities including repo creation on push and public key auth, though it requires git installed on the server.
Wish provides automatic server key generation and secure defaults, reducing setup complexity for creating SSH servers without OpenSSH dependency.
Wish is implemented in Go and only supports Go developers, limiting adoption in polyglot teams or environments without Go expertise.
The git middleware requires git to be installed on the server, adding an external dependency that complicates minimal or containerized deployments.
Middlewares are composed from first to last, with the last executed first, which can be counterintuitive and error-prone for developers, as noted in the README.