mrkeyoor.com_
Wed 02 Sept 18:06 UTC
Self-Hostedevaluationupdated 02 Sept 2026

pansou review

PanSou is a Chinese-language, self-hosted API that searches Telegram channels and plugin sites for shared cloud-drive, magnet, and eD2k links. Its README and developer guides are in Chinese; the repository does not provide an English guide. It merges results, sorts them, caches them, and groups links by storage type for another app or front end to consume.

trackingstars / 7d
Verdict

Our PanSou run installed 68 packages in 14 seconds and passed all 36 tests after a 56-second build; live Telegram and plugin sources were outside that result. Use it when a Chinese-speaking team wants a self-hosted cloud-link search API and accepts ongoing source curation. Do not expose the defaults publicly, and choose another system when content provenance or predictable source availability is a requirement.

We ran it

Lab card: what happened when we ran pansouScreenshot of pansou (so.252035.xyz)
Install✓ · 14s68 packages
Build✓ · 56s
Tests✓ · 21s36 passed · 0 failed of 36 (go test)
Repo233 files~74,948 lines of source · 2.9 MB · 1 CI workflows · Dockerfile

Answers from our run

Does pansou build from source?

Dependencies installed in 14 seconds (68 packages), and the build succeeded in 56 seconds. We cloned commit d46c501 into a clean Debian container with 3 CPUs and no project-specific setup.

Do pansou's tests pass?

Yes: 36 of 36 passed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use pansou?

English-only operators: the README, API reference, system design, and plugin guide are Chinese, with no English guide in the repository tree.

What are the alternatives to pansou?

SearXNG, AList, Cloudreve. Our PanSou run installed 68 packages in 14 seconds and passed all 36 tests after a 56-second build; live Telegram and plugin sources were outside that result.

Setup4/514-second install, Docker paths, and all 36 tests passed
Docs3/5Detailed Chinese API and plugin docs; no English guide
Community4/514,442 stars, 3,481 forks, and same-day merged work
Maturity3/5Clean tests and active fixes, with no tagged release

Who it’s for

Chinese-speaking self-hosters building a search front end for link sources they are permitted to use.
Go teams willing to select plugins, watch upstream sites, and repair parsers when sources change.
Applications that need JSON results grouped by cloud-drive type or filtered by source.
Operators prepared to configure authentication, a fixed JWT secret, proxy access, and worker limits.

Who it’s NOT for

English-only operators: the README, API reference, system design, and plugin guide are Chinese, with no English guide in the repository tree.
Teams expecting a stable, self-contained catalog: results depend on Telegram and plugin sites, while open issues 129 and 135 report Telegram searches failing under specific proxy or DNS conditions.
Anyone wanting secure public defaults: authentication starts disabled, logout only deletes the client token, and the README tells operators to set the JWT secret manually.
Low-ops deployments that enable every supplied source: open issue 141 attributes more than 4 GB of memory and 30,689 requests to one failing plugin on the reporter's instance.
Services that require documented content provenance or a takedown process: the API returns third-party cloud shares and torrent-style links, and the README documents neither control.

Setup reality

Our sandbox installed 68 Go packages in 14 seconds. The build succeeded in 56 seconds, and go test finished in 21 seconds with 36 passed and 0 failed out of 36. The checkout held 233 files, about 74,948 source lines, and used 2.9 MB.

The backend can run from source, Docker, or Compose on port 8888. Plugins must be selected through ENABLED_PLUGINS, and Telegram access may need a SOCKS5 or HTTP proxy. Core search documents no required external API credential; optional JWT access needs AUTH_USERS and a fixed AUTH_JWT_SECRET.

Authentication is off by default. The integrated web image comes from the separate pansou-web project, while this repository's image is API-only. Live result quality depends on Telegram and plugin sites that can change or block requests, so passing local tests does not settle production source health.

Search covers 14 link types without owning an index

A search request can limit results by channel, plugin, source, or any of the 14 documented cloud and link categories. PanSou queries Telegram pages and enabled plugins concurrently, then deduplicates, ranks, and groups the returned links. Clients can ask for raw results, merged groups, or both through GET or POST on /api/search. The project is therefore a federation layer over other sites. It does not crawl a durable catalog that remains useful when those sites disappear.

The link-check endpoint covers 9 cloud-drive types and returns states such as valid, bad, locked, unsupported, or uncertain. Per-request proxy settings can be supplied for that check, and its cache is separated by proxy address. Magnet, eD2k, and other search result types are outside the documented validity list. PanSou also has no documented ownership check for a result. A service using it must decide which sources are permitted and how questionable or reported links are removed.

Docker exposes port 8888 while authentication starts off

PanSou defines a 24-hour token lifetime, yet AUTH_ENABLED is false in the supplied image and Compose file. The backend image listens on port 8888; the separate pansou-web image bundles a front end on port 80. Enabling JWT access requires AUTH_USERS, and the README recommends setting AUTH_JWT_SECRET yourself. Open issue 131 concerns the integrated pansou-web image staying public after configuration, so it is a reason to test that image rather than proof of a backend-only failure.

The current config code makes a fixed secret mandatory for a serious deployment. If AUTH_JWT_SECRET is missing, it creates pansou-default-secret- followed by the current Unix timestamp, despite a comment describing a random 32-byte value. Logout only tells the client to delete its JWT, so a copied token remains usable until expiry. The application allows cross-origin requests from any origin. PanSou's Nginx example adds TLS and a 60-requests-per-minute limit, controls the Go service does not supply by default.

What happened when we ran it

Our sandbox installed 68 Go packages in 14 seconds and built commit d46c501 in 56 seconds. Go test completed in 21 seconds with 36 passed and 0 failed out of 36. The checkout contained 233 files, roughly 74,948 lines of source, and occupied 2.9 MB. Every measured step ran in a fresh unprivileged Debian container with 3 CPUs, 8 GB of RAM, and no secrets.

The repository had 1 CI workflow, a Dockerfile, and a Compose file, with no top-level tests directory. The 36 passing cases live in package files under the source tree, which is normal for Go. Our run did not measure response latency, result freshness, link accuracy, or the availability of Telegram and plugin sites. A clean compiler and test result make code evaluation easier; they cannot certify dozens of external parsers against sites that may change after the commit.

The 4-second response can contain partial plugin results

PanSou's async path uses a 4-second initial response timeout and a 30-second plugin timeout by default. A slower plugin can return what it has quickly, keep working in the background, and update the cache for a later request. The normal cache lifetime is 60 minutes with a 100 MB limit, while the async cache defaults to 1 hour. These are configuration values from the README, not latency results from our sandbox.

Source startup differs between deployment paths. Running from source without ENABLED_PLUGINS activates no plugins, while the supplied Dockerfile and Compose configuration list many by name. That makes the container feel populated immediately, at the cost of sending each query toward a broad collection of independently operated sites. The API allows callers to narrow plugins and channels per request. A sensible deployment begins with a small reviewed list, observes errors and memory, then adds sources individually.

Issue 141 makes the default plugin list an operations job

The issue 141 reporter attributed more than 4 GB of memory and 30,689 requests to the enabled yulinshufa plugin on one deployment. Only 36 requests reportedly returned results, and the source retried failures. The current Docker configuration still includes yulinshufa. We did not reproduce this workload, and the issue has no maintainer reply, so those figures belong to that reporter's instance. They still justify per-plugin request, error, and memory monitoring before copying the full default list into production.

Telegram has separate failure modes. Open issue 129 says a configured proxy produced plugin results while Telegram stayed empty until channels were supplied explicitly. Issue 135 reports blocked t.me resolution affecting 115 results. Both remain open, although their short threads do not isolate a universal cause. The September 2 commit message says several plugins were fixed, and nearby commits add or repair more sources. That pace reflects the job: an upstream domain, page layout, protection layer, or API can change without PanSou changing.

September 2 activity comes without a tagged release

GitHub recorded 14,442 stars, 3,481 forks, and 16 open issues and pull requests on September 2, 2026. Fifteen were issues and 1 was a pull request. The last push was that same day, and a plugin contribution had been merged hours earlier. The queue also contained a referral-link spam issue and long-running community front-end threads, so the combined count should not be read as 16 unresolved bugs. Current commits and issue updates show active use.

The repository has no tagged GitHub release, so adopters must pin a commit or an image digest instead of relying on a versioned release line. commit d46c501 gave us 36 passing tests, and the Docker assets make a trial straightforward. Production is a different decision because authentication needs hardening and every useful source adds an external dependency. PanSou fits a self-hoster who will own that maintenance. It is a poor base for a service promising verified content, stable coverage, or hands-off operation.

Alternatives

ProjectWhat it isPick it when
SearXNG gh↗A self-hosted metasearch engine that combines general web search providers.pick this instead when broad web metasearch matters more than parsing Chinese cloud-share sources.
AListA self-hosted file list and WebDAV layer for many storage providers.pick this instead when you need one browser for storage accounts you control rather than public share-link search.
Cloudreve gh↗A self-hosted file management and sharing system with multiple storage backends.pick this instead when uploads, permissions, and sharing under your own policy are the main job.

What people are saying

  1. [github-trending] fish2018/pansou

Sources

  1. PanSou repository and Chinese README
  2. PanSou configuration source
  3. PanSou Dockerfile
  4. Yulinshufa resource issue 141
  5. Integrated web image authentication issue 131
  6. Telegram proxy issue 129
  7. PanSou releases page

More self-hosted reviews

nebula · birdnet-go · arcbox · ConvertX · LiveTalking · TypeWords · the whole board →