DSH Plugin MarketA community catalog for DeepSeek Harness plugins

dsh-rustxng

Verified Tools & capabilities ★ 10 0.5.5

Replace the built-in web_search of DeepSeek Harness with a self-hosted RustXNG instance, and add a RustXNG search tool plus a settings card. Cross-platform (Windows / macOS / Linux).

What it is

Replace the built-in web_search of DeepSeek Harness with a self-hosted RustXNG instance, and add a RustXNG search tool plus a settings card. Cross-platform (Windows / macOS / Linux).

How to install

Run this in the DSH web profile, then refresh the page.

$ dsh plugin --profile web add 'git+https://github.com/kgmkm/dsh-rustxng.git#ab2d4fc2194969853a93d5d4249d3534783199e4'

DSH versions accepted

>=0.2.0-rc.2 <0.3.0

Author and traction

kgmkm · ★ 10 · Updated 2026-11-05

About this plugin

dsh-rustxng

Use a self-hosted [RustXNG](https://github.com/sahenjp/RustXNG) instance from

[DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) — and answer the

built-in web_search with it.

RustXNG is a SearXNG-compatible metasearch engine written in Rust: one query fans out to

over a hundred search engines (119 enabled in 0.28's default standard profile),

deduplicates the results and returns them without ads or tracking. This

plugin connects DSH to a RustXNG you run yourself (Windows, macOS or Linux)

and adds:

| Contribution | What it gives you |

| :--- | :--- |

| Search provider | A rustxng provider on the web seam. Point web.searchProvider at it and the built-in web_search is answered by your instance — no DeepSeek search API key involved. |

| Settings card | A card in Plugins with two live switches and the instance URL. No restart, no hand-edited YAML. |

| Tools | rustxng_search (engine, category, language and time-range scoped) and rustxng_status (reachability, version, engine count, provider state). |

| Fetch provider (optional) | A charset-aware web_fetch: resolves BOM → HTTP header → ` before decoding, so Shift_JIS pages that declare their encoding only in stop coming back as �`. Does not use RustXNG. |

| Process supervision (optional) | Start the binary when the instance does not answer, and stop it again after an idle timeout (default 60 min, editable in the card). Only a process this plugin started is stopped — this is also the only thing that cleans up after a Harness that was killed. |

| Binary fetcher | node scripts/install-binary.mjs downloads and verifies the right release binary for your OS and CPU. |

Nothing in DSH is patched: the plugin uses the documented ctx.web.registerSearchProvider()

API and the ordinary web.searchProvider settings field, so it survives Harness upgrades.

Do you need this plugin at all?

If you use rustdsh (rdsh), let rustdsh handle search. Since v0.15.0 it checks whether

rustxng / SEARXNG_URL actually answers at start-up and, only when it does, passes

DSH_WEB_SEARCH_PROVIDER=rdsh-rustxng to the delegated DSH so the bundled

rdsh-web-search-searxng provider takes web_search over (web_search_bridge, on by

default).

| Your situation | Use |

| :--- | :--- |

| You start DSH through rdsh (rdsh tui, rdsh web, …) and want web_search to hit a local engine | rustdsh's own bridge. Nothing to configure; stop it with rdsh features off web_search_bridge |

| You start dsh directly (desktop app, systemd, …) and want web_search replaced | This plugin. rdsh only injects into the children it launches, so a plain dsh boot is untouched |

| You need web_fetch to stop garbling pages whose charset is declared only in ` | This plugin (webFetch.enabled`) — rustdsh's bridge is search only |

| You want the agent to call RustXNG as a tool (rustxng_search / rustxng_status) | This plugin. |

| You want the binary downloaded, started and idle-stopped for you | This plugin (autoStart); rustdsh never downloads anything on behalf of the bridge |

| You use both and want one instance for both | Point rdsh at this plugin's instance: RUSTXNG_URL=http://127.0.0.1:8888 |

Give search to exactly one of them. With both, two providers are registered (rustxng and

rdsh-rustxng) and two sidecars can end up running. Letting rustdsh own it means turning this

plugin's webSearch.enabled off; letting this plugin own it means

rdsh features off web_search_bridge (or RDSH_WEB_SEARCH_BRIDGE=0).

Delegating search to rustdsh does not change web_fetch. Use this plugin's

webFetch.enabled when you want the fetch side replaced too. See

[If you also use rdsh](#if-you-also-use-rdsh) for sharing one instance and one binary.

---

Requirements

  • DeepSeek Harness >= 0.2.0-rc.2 < 0.3.0 (host tools, web and settings services).

Verified on 0.2.0-rc.2 and 0.2.1-rc.2; see [docs/PLATFORMS.md](docs/PLATFORMS.md#dsh-versions).

  • Node.js 20+ (the plugin uses the global fetch)
  • A running RustXNG instance — see below

1. Get RustXNG

Easiest: let the plugin fetch a release binary.

node scripts/install-binary.mjs          # into $DSH_HOME/bin (or ~/.dsh/bin)
node scripts/install-binary.mjs --dir ./bin --musl   # Linux without glibc

The script picks the asset for your platform, verifies the published SHA-256, and prints

the start command.

Or download it yourself from the

[releases page](https://github.com/sahenjp/RustXNG/releases/latest):

| Platform | Asset |

| :--- | :--- |

| Windows x64 | rustxng-v-x86_64-pc-windows-msvc.exe |

| macOS arm64 | rustxng-v-aarch64-apple-darwin |

| macOS x64 | rustxng-v-x86_64-apple-darwin |

Compare in this category

The five most-starred plugins in the same category.

PluginAuthor StarsVersionUpdated
Mole tw93 74.5K 0.0.0 2026-11-10
DeepSeek-Reasonix esengine 36.1K 0.0.0 2026-11-10
dsh-desktop anywhere-labs 35.6K 0.4.1 2026-11-06
awesome-dsh-plugin awesome-dsh-plugin 24.1K 0.1.0 2026-11-10
dsh-market dsh-market 11.8K 1.73.17 2026-11-09