DSH Hub

TiantianFlow/dsh-one-gateway

dsh-one-gateway

BundleWorkflow12 GitHub stars· updated 2026-08-21

Private DSH One Gateway — loopback, identity-first ingress for DeepSeek Harness

Install

npx @deepseek-ai/dsh plugin --profile web add -w

Restart `dsh web` after install. Bundle APIs can change during the developer preview.

README badge

dsh-one-gateway DSH Hub badge
[![DSH Hub](https://dshhub.dev/badge/dsh-one-gateway.svg)](https://dshhub.dev/plugins/dsh-one-gateway)

Paste this into your README. The star count updates with every catalog sync.

From the README

Excerpt from TiantianFlow/dsh-one-gateway, cleaned of badges and images.

DSH One Gateway

<p align="center"><a href="README.md">English</a> · <a href="README.zh-CN.md">简体中文</a></p> <p align="center"><strong>Share DSH Web with the people you choose — not your whole network.</strong></p>

A DeepSeek Harness (DSH) plugin that puts a private, zero-trust gateway in front of DSH Web. Callers authenticate through Tailscale Serve, Cloudflare Access, or — on Headscale — a generated gateway credential in front of private TCP Serve. One private allowlist decides who gets in. There is no user-chosen password to manage.

The gateway and DSH stay on loopback. Tailscale Serve, Cloudflare Tunnel with Cloudflare Access, or Headscale via Tailscale TCP Serve is only the private ingress. Joining that private network is never an authorization decision. Every request must resolve one unambiguous, allowlisted principal before anything is forwarded to DSH. That is self-hosted access control for a zero trust homelab: reachability is not permission.

Allowlisted browser ─ HTTPS ─> provider ingress (Tailscale Serve, Cloudflare Access,
                                      │           or Headscale TCP Serve)
                                      └─ loopback gateway ─> local DSH
                                         127.0.0.1:3088   127.0.0.1:3080

What you get: an exact principal allowlist in front of DSH, a loopback-only HTTP/WebSocket proxy, and a single onboarding command that previews a plan and refuses public or anonymous defaults. Installing the plugin does nothing until you run setup.

The full command is dsh-one-gateway; a shorter dsh-gateway alias is installed too, for typing convenience.

How this is different

Other DSH gateways may bind off loopback, patch DSH internals so a gate stays exhaustive after upgrades, or run a reverse proxy in front of DSH. Those designs can cover /api and WebSockets too; the difference is not who covers more of the surface. This plugin is a different contract: DSH itself never leaves loopback.

Related plugins