unsubbed.co

Sshwifty

Sshwifty is a JavaScript-based application that provides SSH and Telnet connector made for the Web.

Self-hosted web terminal access, honestly reviewed. No marketing fluff, just what you get when you run it.

TL;DR

  • What it is: A self-hosted web application that turns your browser into an SSH and Telnet client — no local SSH client or terminal emulator required [README].
  • Who it’s for: Homelab runners, sysadmins, and developers who need browser-based SSH access to servers without the complexity of a full remote desktop gateway like Apache Guacamole.
  • Cost savings: Commercial web-based SSH/jump host solutions (JumpCloud, Teleport Cloud, Twingate) run $5–$15 per user per month. Sshwifty on a $5 VPS is effectively free.
  • Key strength: Extremely simple to deploy. One Docker command and you have a working web SSH terminal. No database, no user management system, no agent to install on target servers — it’s just a Go binary serving a web UI [README].
  • Key weakness: It’s a connector, not a gateway. There’s no audit logging, no session recording, no access controls, and no user authentication beyond an optional shared password. For anything beyond personal use, those gaps matter [README].

What is Sshwifty

Sshwifty is a web application written in Go (backend) with a Webpack-built frontend that lets you open SSH and Telnet connections from a browser. You point it at a server, it proxies the terminal session through WebSockets, and you get a working terminal in a browser tab.

That’s the complete pitch. There’s no broader platform, no plugin ecosystem, no AI layer. The GitHub README is unusually self-aware about this — the opening includes a joke about how the “glass glare effect” in the screenshot is “only included in the Executive Golden Premium Plus+ Platinum Ultimate AD-free version, which can be obtained after joining the cult” [README]. The project knows exactly what it is and doesn’t pretend otherwise.

What makes it notable is the execution. It’s a Go binary with a compiled frontend baked in, which means the entire application is one file. No database, no Redis, no Postgres — you run the binary or the Docker container, and it works. The project has 3,055 GitHub stars and 400 forks as of this review, making it one of the more established tools in its narrow category.

License: AGPL-3.0. That matters if you plan to run it as a service for others — you’d be required to open-source any modifications you make to the Sshwifty code itself [README]. For personal or internal business use, it’s effectively unrestricted.


Why people choose it

The third-party coverage of Sshwifty is thin — it doesn’t appear in formal tool comparison articles or SaaS-versus-self-hosted roundups. What it does appear in is homelab inventory lists, which is more honest signal than any marketing review. Timo Zimmermann, who runs a well-documented homelab with ~25 self-hosted services, includes sshwifty in his Docker Compose directory alongside Jellyfin, Vaultwarden, and Nextcloud [1][2]. The list entry, not any dedicated review, tells you who the actual user is: someone running a bunch of services who wants a browser-accessible terminal without spinning up a full remote access platform.

The Track Awesome Robotics Tooling list classified Sshwifty under “Command Line Interface” tools for monitoring, describing it as “a SSH and Telnet connector made for the Web” — when its stars were at 1.5K in 2021, before it doubled to the current 3.1K [4]. Growth from community discovery, not marketing.

The core appeal over alternatives like Apache Guacamole is complexity reduction. Guacamole gives you SSH, RDP, VNC, and SFTP with user authentication, connection groups, recording, and an admin console — but setting it up correctly takes a few hours and requires a backend database plus the Guacamole daemon. Sshwifty is docker run and done, at the cost of every feature Guacamole has beyond basic SSH.


Features

Based on the README and project files — no third-party reviews with feature breakdowns exist for this tool, so all claims are README-sourced.

Core functionality:

  • SSH client in the browser — connect to any SSH server without a local client [README]
  • Telnet support (useful for legacy network equipment, serial-over-network devices) [README]
  • WebSocket-proxied connections — the browser never connects directly to target servers; all traffic routes through the Sshwifty instance [README]

Deployment options:

  • Docker (recommended) — prebuilt images for common platforms, one-line deploy [README]
  • Prebuilt executables — available in GitHub Releases for popular platforms [README]
  • Compile from source — requires Go + Node.js + npm [README]
  • Third-party Homebrew Formulae for macOS via [@unbeatable-101] — unofficial, not audited by the project author [README]

Configuration:

  • JSON config file or environment variables — loader tries files first, falls back to env [README]
  • SSHWIFTY_CONFIG env var to specify custom config file path [README]
  • TLS support: either pass cert/key via SSHWIFTY_DOCKER_TLSCERT / SSHWIFTY_DOCKER_TLSCERTKEY env vars, or terminate TLS at a reverse proxy in front (Nginx, Traefik, Caddy) [README]
  • Preset connections: preset.example.json shows how to pre-configure connection targets [README]
  • Expose to localhost only for reverse-proxy-only access: --publish 127.0.0.1:8182:8182 instead of 0.0.0.0 [README]

What’s not there:

  • No user authentication system. There’s no login page with accounts. Access control is the network perimeter and an optional shared password.
  • No session recording or audit logs.
  • No RBAC, no user management, no teams.
  • No SFTP file transfer.
  • No RDP or VNC (SSH and Telnet only).
  • No API for programmatic connection management.

This is a feature list for a very specific use case: you need a browser terminal, you control who can reach the URL, and you don’t need governance tooling around it.


Pricing: SaaS vs self-hosted math

Sshwifty has no SaaS tier. There’s no managed cloud version, no hosted offering, no freemium plan. It’s purely self-hosted software.

The relevant pricing comparison is against commercial alternatives that solve the same problem (browser-accessible SSH without installing a local client):

Commercial alternatives:

  • Teleport Cloud: ~$5–$12/user/month depending on plan tier, adds session recording, audit logs, and certificate-based auth
  • JumpCloud: $9–$19/user/month for the full remote access suite
  • Twingate + web SSH: various, $5+/user/month
  • CloudShell (AWS/GCP/Azure): free for basic use, but tied to a single cloud provider’s ecosystem

Self-hosted Sshwifty:

  • Software cost: $0
  • VPS to run it: $4–$6/month (Hetzner CX11, Contabo VPS S, or similar)
  • Setup time: 15–30 minutes for a technical user

For a solo developer or small team that just wants browser SSH access to a handful of servers, the math is clear: a $5 VPS and 20 minutes beats paying per-user monthly fees. For a team that needs audit logs, session recording, and access controls — Sshwifty is the wrong tool regardless of price, and Teleport or a self-hosted Teleport instance is the right conversation.


Deployment reality check

The installation path is the simplest of any tool in the self-hosted terminal category. The recommended deployment is a single Docker command:

docker run --detach \
  --restart unless-stopped \
  --publish 8182:8182 \
  --name sshwifty \
  niruix/sshwifty:latest

Note the image name: niruix/sshwifty with an x — the README explicitly calls this out to prevent the obvious typo [README].

What you actually need:

  • A Linux host with Docker installed
  • A reverse proxy (Caddy, Nginx, Traefik) if you want HTTPS, which you do if it’s accessible over the internet
  • Nothing else — no database, no Redis, no external services

What can go sideways:

The latest tag is convenient but the README itself warns against it in spirit — prebuilt images are generated by “an unsupervised automatic procedure” that the authors “cannot guarantee to test” [README]. For anything beyond personal use, pin to a specific release tag.

Exposing port 8182 directly to the internet without authentication is a bad idea. Sshwifty’s optional shared password is a single credential for all users — if it leaks, anyone can use your SSH proxy. The secure setup is: reverse proxy with HTTPS + restrict access to the Sshwifty URL (VPN, IP allowlist, or a proper auth layer like Authelia/Vouch in front of it).

TLS can terminate at the reverse proxy (the right approach for most setups) or directly in Sshwifty via the cert environment variables [README]. Both work; proxy termination is simpler to manage with Let’s Encrypt.

Realistic time estimates:

  • Technical user with Docker experience: 15–20 minutes including reverse proxy setup
  • Non-technical user following a guide: plan for 2–3 hours including domain and HTTPS setup, or ask someone to deploy it

The Dockerfile in the repo documents the full build process if you hit compile issues [README].


Pros and cons

Pros

  • Minimal footprint. No database, no Redis, no dependencies beyond the binary or Docker image. Runs comfortably on any VPS with 512MB RAM.
  • Fast to deploy. Fastest browser SSH deployment in the category — one Docker command to a working terminal [README].
  • Go + compiled frontend = portability. The single binary includes the frontend. Move it anywhere without worrying about Node.js versions or asset serving.
  • Actually runs in real homelabs. Appears in homelab setups alongside battle-tested tools like Vaultwarden and Nextcloud — not just GitHub star collector territory [1][2].
  • Telnet support. Useful for network engineers who still manage equipment over Telnet. Most browser terminal tools don’t bother.
  • AGPL-3.0 — copyleft, but open. Source is available, you can modify it, run it, and the license protects it from being absorbed into proprietary products without attribution [README].
  • Proxy architecture. The browser never directly reaches your SSH servers. All connections proxy through Sshwifty, which means you can give someone browser access without exposing SSH ports further.

Cons

  • No user authentication. A shared optional password is not a security model for multi-user or production use. Anything beyond personal use needs a proper auth layer in front of it [README].
  • No session recording or audit logging. If you need to know who ran what command when, Sshwifty gives you nothing.
  • SSH and Telnet only. No RDP, no VNC, no SFTP file transfer. If you need those, Guacamole is the self-hosted answer.
  • Single-maintainer project. The repository is under nirui — one person. 3,055 stars is not enough community momentum to guarantee long-term maintenance if the author moves on. No company behind it, no commercial incentive to keep it alive.
  • Scarce documentation. The README covers the deployment basics, but deeper configuration (all the config file options, preset formats, advanced TLS scenarios) is sparsely documented. You’ll be reading the example config files and possibly the source code.
  • AGPL-3.0 can complicate commercial embedding. If you’re building a SaaS product that includes Sshwifty as a feature, AGPL requires you to open-source your modifications. Not a problem for internal use, but worth checking with a lawyer before embedding.
  • No dedicated review coverage. The near-total absence of in-depth third-party reviews means real-world edge cases, bugs, and failure modes are underdocumented. You’re partly relying on the README and your own testing.

Who should use this / who shouldn’t

Use Sshwifty if:

  • You’re a solo developer or small team running a homelab and want browser SSH access without setting up a full remote access platform.
  • You manage a handful of servers and occasionally need to SSH in from a device that doesn’t have a terminal installed (shared computer, tablet, mobile).
  • You want the simplest possible deployment — Docker, done, terminal in browser.
  • You control who can reach the URL (VPN, IP allowlist, or auth proxy in front).
  • You need Telnet access to legacy network equipment from a browser.

Skip it (use Apache Guacamole) if:

  • You need RDP or VNC access in addition to SSH.
  • You need user accounts, session recording, or audit logs.
  • You’re setting this up for multiple people who need different access levels.

Skip it (use Teleport or self-hosted Teleport) if:

  • You need certificate-based SSH access with proper audit trails.
  • You’re managing SSH access for a team and want revocable credentials.
  • You need compliance-grade session recording.

Skip it (use Wetty or ttyd) if:

  • You want to expose a local shell directly in the browser without the SSH proxy hop — Wetty wraps a local terminal, Sshwifty proxies remote SSH.

Skip it (stay with local SSH clients) if:

  • You always have terminal access on your devices. Sshwifty solves a specific access problem; if you don’t have the problem, you don’t need the tool.

Alternatives worth considering

  • Apache Guacamole — the full-featured open-source remote access gateway. Handles SSH, RDP, VNC, SFTP. Has user management, session recording, connection groups. Much more complex to deploy; needs Postgres and the guacd daemon. Apache-licensed. Choose Guacamole when you need more than SSH.
  • Wetty — another browser terminal, but it exposes a local shell over a WebSocket rather than proxying remote SSH. Simpler in some ways, different architecture.
  • ttyd — command-line tool that shares a terminal over the web. Extremely minimal. Good for exposing a specific command, less good as a general SSH proxy.
  • ShellHub — described as “centralized SSH for the edge and cloud computing” with a web-based UI. More features and complexity than Sshwifty [4]. Has both cloud and self-hosted versions.
  • GateOne — older Python-based web terminal that’s been in maintenance mode for years. Not recommended for new deployments.
  • Teleport — commercial-grade open-core SSH access management with proper audit trails, certificate authority, and RBAC. Self-host the community edition or pay for cloud. The right tool when governance matters.

For a solo operator who just wants browser SSH: Sshwifty vs Wetty. Pick Sshwifty if you need to connect to remote servers. Pick Wetty if you want to expose a local shell. For teams with access control requirements: neither — use Teleport.


Bottom line

Sshwifty earns its GitHub stars by doing one thing and refusing to overcomplicate it. Browser SSH terminal, one Docker command, no dependencies. For a developer or homelab operator who needs occasional browser-based access to remote servers — and who controls the network perimeter — it’s the right-sized tool. The trade-offs are real and explicit: no user authentication, no audit logging, no session recording, single maintainer, thin documentation. None of those are bugs in Sshwifty’s design; they’re honest acknowledgments that those problems belong to a different category of tool. If you find yourself wanting any of those features, you’ve outgrown Sshwifty and need Guacamole or Teleport. For everyone else: one Docker run, point your browser at port 8182, open a terminal.

If getting the HTTPS reverse proxy and access controls configured correctly is the blocker, that’s exactly the kind of one-time infrastructure setup that upready.dev deploys for clients.


Sources

  1. Timo Zimmermann, Screaming at my Screen“Keeping self hosted services updated… (notes)” — mentions Sshwifty as part of a 25-service homelab Docker Compose directory. https://www.screamingatmyscreen.com/notes/keeping-self-hosted-services-updated/
  2. Timo Zimmermann, Screaming at my Screen“Keeping self hosted services updated…” — full post version of the same homelab update article. https://www.screamingatmyscreen.com/keeping-self-hosted-services-updated/
  3. Cloudzy Marketplace — one-click app deployment catalog listing self-hosted tools. https://cloudzy.com/marketplace/
  4. Track Awesome List — protontypes/awesome-robotic-tooling — lists Sshwifty under Command Line Interface / Monitoring tools. https://www.trackawesomelist.com/protontypes/awesome-robotic-tooling/

Primary sources:

Features

Integrations & APIs

  • REST API