WeKnora is Tencent’s open-source LLM knowledge platform, written in Go, with about 34K GitHub stars and a v0.8.3 release published today (2026-10-14). It turns raw documents into a queryable RAG, an autonomous reasoning agent and a self-maintaining wiki — three modes on the same knowledge bases — and it ships as a Docker Compose stack with a web UI, multi-workspace permissions and chat-app channels.
This is the guide I wanted before deciding whether it deserves a slot next to OpenRAG: what it is, the pipeline in four steps, the README quickstart, the license and security details most summaries skip, and when not to use it. I read the README, LICENSE, compose file and docs on 2026-10-14; I did not deploy it, so everything below is attributed to those sources.
1. What WeKnora Is
The GitHub description says it all: “Open-source LLM knowledge platform: turn raw documents into a queryable RAG, an autonomous reasoning agent, and a self-maintaining Wiki.” It is a full product rather than a library. Per the README overview, you use RAG to look things up, the agent for multi-step tasks and the wiki to organize knowledge — all on the same knowledge bases, behind one web UI, with workspaces, roles, API keys and channels around them.
Repo facts (verified 2026-10-14)
- Repository: github.com/Tencent/WeKnora
- Stars: ~34K (33,999 per the GitHub API today) · ~4.5K forks
- Stack: Go backend · Vue 3 UI · Python DocReader service (per the docs)
- Latest release: v0.8.3, published 2026-10-14 — still a 0.x line
- Created: July 2025
- License: MIT with listed third-party exceptions (LICENSE file) · GitHub API says “Other / NOASSERTION”
- Maintainer: Tencent · docs hosted at weknora.weixin.qq.com
If you read my OpenRAG post, here is the difference in one paragraph: OpenRAG packages Langflow, Docling and OpenSearch behind a single uvx command and gives you visual flows to edit. WeKnora is a heavier, more product-shaped option for the same job — a Go backend and Vue UI with multi-tenant workspaces and RBAC, an agent with skills and a sandbox, an auto-generated wiki, and connectors for WeCom, Feishu, Slack and more. Same “chat with your documents” starting point, very different weight class.
The license note most summaries skip
I read the LICENSE file itself. Its first lines say “WeKnora is licensed under the MIT except for the third-party components listed below”, followed by the MIT text (Copyright (C) 2026 Tencent). The list names three components that keep their own terms: opencc (Apache-2.0), anydoc (MIT, Copyright 2026 Sideguide Technologies Inc., modified by Tencent) and wails v2 (MIT). The README’s License section and badge also say MIT. GitHub’s API still reports “Other / NOASSERTION” — most likely because the file mixes an MIT grant with a full embedded Apache-2.0 text, which an automated detector can’t classify (my reading; GitHub doesn’t explain it). In practice: WeKnora’s own code is MIT, keep the notices for those three components, and remember the optional images you enable (Neo4j, MinIO, Qdrant, Langfuse, SearXNG…) are separate projects with their own licenses. Not legal advice.
2. The Architecture in 4 Steps
The README’s architecture note says it is a modular pipeline from document parsing and vectorization through retrieval to LLM inference, with every component replaceable. The v0.8.3 architecture page (in Chinese) fills in the detail:
Step 1 — Parse (DocReader)
An upload hits the Go API, which queues an async Asynq task; the task calls DocReader, a Python gRPC service that the architecture page says parses 25+ formats and is reachable only inside the Compose network. The README lists PDF, Word, PPT, Excel, CSV, Markdown, HTML, EPUB, images and more.
Step 2 — Embed and index
Chunks are embedded and written to the vector store. By default that is PostgreSQL — the docs describe a ParadeDB image with BM25 full-text search plus pgvector (RETRIEVE_DRIVER=postgres), so a separate vector DB is optional. Elasticsearch, OpenSearch, Qdrant, Milvus, Weaviate, Doris and Tencent VectorDB are supported alternatives; Neo4j adds GraphRAG.
Step 3 — Retrieve and rerank
A chat pipeline, described as a plugin chain, runs query understanding, parallel retrieval, reranking, merging and prompt assembly. The README lists keyword + vector hybrid search, rerank, parent-child chunking and retrieval evaluation with recall and BLEU/ROUGE.
Step 4 — Answer, reason or write the wiki
Quick Q&A streams a cited answer over SSE. Smart reasoning runs a ReAct agent over knowledge bases, web search, MCP tools, skills and the local browser, showing each step; skills execute in Docker, E2B or Cube sandboxes. With Wiki enabled, WeKnora extracts people, products and concepts into interlinked, cited pages you can edit and roll back.
The moving parts
Vue 3 UI behind NGINX · Go app (REST API, retrieval, agent engine, workers, channels) · Python DocReader · PostgreSQL · Redis (task queue, SSE streams, rate limiting). Optional: SearXNG, Neo4j, MinIO, alternative vector stores, Langfuse and a sandbox. Source: the v0.8.3 architecture page, written in Simplified Chinese.
3. Quickstart: From Clone to Login
Prerequisites per the README: Docker, Docker Compose and Git. These are the README’s own commands, verified against the README on 2026-10-14 (I did not execute them):
git clone https://github.com/Tencent/WeKnora.git cd WeKnora cp .env.example .env # Edit .env as needed, see comments in the file docker compose pull # Pull the latest images docker compose up -d # Start core services
Then open http://localhost and follow the onboarding guide. The README’s service table lists the Web UI on http://localhost, the backend API on http://localhost:8080 and, only with the langfuse profile, Langfuse tracing on http://localhost:3000. The Chinese quickstart page adds a health check and the first-login rule: there is no default account — the first person to register gets a personal workspace and becomes its Owner.
curl http://localhost:8080/health
You still need models. The quickstart docs say you need a chat model and an embedding model, local Ollama or any OpenAI-compatible service, configured per knowledge base in an initialization wizard (use its test button before saving); changing the embedding model later means rebuilding the index. For a local Ollama, the README’s tip is to start it first, and .env.example points OLLAMA_BASE_URL at host.docker.internal:11434 because localhost inside a container is the container itself:
ollama serve > /dev/null 2>&1 &
Want graph retrieval or object storage? Profiles are combinable; the README lists full (everything), neo4j, minio and langfuse:
docker compose --profile neo4j --profile minio pull docker compose --profile neo4j --profile minio up -d docker compose down # Stop services
Upgrading has one trap the README calls out: docker compose up -d alone can reuse cached images and leave the UI out of sync with the release, so pull first. It also says to read the v0.8.3 upgrade notes before upgrading, and the v0.8.2 notes if you are coming from an older version.
# Set WEKNORA_VERSION in .env to the target release (e.g. 0.8.3), or keep latest docker compose pull # Pull images matching WEKNORA_VERSION docker compose up -d # Recreate containers with new images
Prefer scripting to clicking? The README describes an “agent-first” weknora CLI (JSON output by default, --format text for humans). These are its example commands; I did not verify how to install the CLI, so start from cli/README.md in the repo:
weknora profile add prod --host https://kb.example.com --use weknora auth login weknora kb list weknora link --kb my-knowledge-base weknora doc upload notes.md weknora chat "summarise the design doc"
Tip: know the usual failure modes
The Chinese quickstart’s warning list names the usual suspects: Ollama unreachable from containers (use host.docker.internal; on Linux check the host-gateway mapping), documents stuck in processing (check the docreader logs; MAX_FILE_SIZE_MB defaults to 50 and the processing timeout to 2 hours), and empty answers when the embedding model differs from the one used to build the index.
Language reality check: what is translated and what is not
The README exists in English, Chinese, Japanese and Korean, and the README lists the web UI in Chinese, English, Japanese, Korean and Russian (the v0.8.3 notes add Traditional Chinese). But the documentation site (weknora.weixin.qq.com/docs) — quickstart, architecture, API, release upgrade notes — is written in Simplified Chinese, and I found no language switcher or English version (a guessed /docs/en/ path returned 404). docs/README.md, website-docs/README.md and the comments inside .env.example are Chinese as well. Browser translation works, but plan for it.
4. Before You Open a Port: Security Defaults
Right under the deployment options, the README carries a warning block. I am paraphrasing it closely: WeKnora ships with login authentication, but for production the maintainers strongly recommend that you:
README warning (read 2026-10-14)
- • Deploy it in an internal / private network rather than on the public internet.
- • Avoid exposing the service directly to public networks, to prevent information leakage.
- • Configure proper firewall rules and access controls for the deployment environment.
- • Regularly update to the latest version for security patches and improvements.
That advice matters because of what the compose file and .env.example actually do out of the box:
Registration is open by default
No default account exists; the first registered user becomes Owner of a personal workspace. In .env.example, DISABLE_REGISTRATION is commented out as false, and its (Chinese) comment says true is recommended in production.
Secrets start empty
JWT_SECRET is blank (the comment says a random value is generated at startup; the file suggests openssl rand -hex 32 to generate one once). SYSTEM_AES_KEY is blank too, and the file says to generate it once and retain existing keys on upgrade. The example file also ships placeholder Postgres and Redis passwords — replace them.
Ports bind to every interface
The compose file publishes the frontend (${FRONTEND_PORT:-80}:80) and the API (${APP_PORT:-8080}:8080) with no loopback prefix. Optional profile services such as Neo4j and MinIO are published the same way, with fallbacks like neo4j/password and minioadmin if you don’t override them.
Sandbox and internal services
The Docker sandbox backend is off by default because, per the file’s comment, a mounted docker.sock is equivalent to host root. The README’s v0.8.2 entry lists as breaking that sandbox commands run as root. A compose comment says the docreader gRPC service ships without auth/TLS and is meant to stay internal.
What is built in
To be fair, the README’s feature table lists workspace RBAC with four roles and an audit log, scoped API keys, OIDC, AES-256-GCM credential encryption, and SSRF-safe outbound requests with a whitelist-only mode; its Toolbox section adds tool-by-tool approval for agent calls. Vulnerabilities go through GitHub’s private reporting (SECURITY.md).
My take
Before anything beyond localhost: generate the secrets, change every placeholder password, lock down or invite-only the registration, and put the UI behind a VPN or an authenticated reverse proxy. That is my hardening checklist, not the README’s.
5. Where It Shines: Use Cases
WeKnora earns its weight when knowledge has to be shared, permissioned and kept fresh across a team:
Team knowledge base with real permissions
Multiple workspaces, four roles, audit log, scoped API keys and OIDC (README features) — the things a single-user “chat with PDFs” tool never grows.
Answers where people already chat
Channels for WeCom, Feishu, Lark, Slack, Telegram, DingTalk, Mattermost and more, plus a website embed widget, all pointing at the same knowledge bases.
A wiki that maintains itself
Entities extracted from your documents become interlinked pages with source citations, a knowledge graph, revision diffs and rollback.
Multi-step research agent
A ReAct agent over your knowledge bases, web search (DuckDuckGo, Bing, Tavily, SearXNG…), MCP tools and skills in a sandbox, with per-tool approval.
Knowledge for your coding agents
The built-in MCP server publishes knowledge bases to Cursor, Claude and other MCP clients over Streamable HTTP; a Go SDK and the CLI cover scripts.
Synced, evaluated, observable
Data sources like Feishu, Confluence, GitLab, Notion, Yuque, DingTalk Docs, Seafile and RSS; Langfuse tracing, a parsing timeline and retrieval evaluation for the ops side.
The pattern across all six: one deployment, many users, knowledge that keeps changing — not one developer who needs quick semantic search.
6. When NOT to Use It
WeKnora is impressive, but it is not the right default for every RAG job. Honest boundaries:
❌ Skip it when
- • You want the lightest install — the core stack is already five services (frontend, app, docreader, PostgreSQL, Redis) and the full profile adds many more. A Lite single binary with SQLite exists per the README, but I haven’t evaluated it.
- • Nobody on your team can read Chinese — the docs site, release upgrade notes and config comments are Chinese-only; only the README and UI are translated.
- • You plan to put it on the public internet as-is — the README itself says not to, and the defaults above are built for a private network.
- • You need a stable API surface — it is a 0.x line, v0.8.2 listed breaking changes, and the v0.8.3 notes show a plugin system merged and then removed from main in the same release.
- • Your compliance tooling must classify the license automatically — GitHub reports NOASSERTION, so someone has to read the LICENSE by hand.
- • A few hundred pages and one developer — hybrid search inside your existing Postgres is simpler (see my hybrid-search post).
- • You want a visual node editor for the pipeline — the README doesn’t describe one; that is OpenRAG and Langflow territory.
✅ Use it when
- • A team needs a shared, permissioned knowledge base, not a personal tool.
- • You want RAG, an agent and a wiki on the same corpus from one deployment.
- • Your users live in WeCom, Feishu, DingTalk or Yuque — or Slack and Telegram — and you want answers there.
- • You are comfortable running Go, Postgres, Redis and Docker on a private network.
- • You want a built-in MCP server to feed knowledge to coding agents.
Golden rule
OpenRAG is the one-command starter with a visual flow editor. WeKnora is the team platform with an agent and a wiki attached. Pick by who has to use it and who has to operate it, not by star count.
Conclusion
WeKnora is a rare thing among trending RAG repos: a product with permissions, channels, evaluation and tracing, not only a pipeline demo. About 34K stars in roughly 15 months says teams want exactly that. The price is weight — a multi-service stack, a 0.x release train and docs that live mostly in Chinese.
My suggestion: read the README’s security note first, run the core stack on a private network with registration locked down, index one real corpus and compare its answers with your current setup — measure recall instead of guessing (my RAG evaluation post shows how). If all you need is quick semantic search, OpenRAG or pgvector gets you there with fewer moving parts.
Sources
- Repository and README (overview, quickstart, features, security note) — github.com/Tencent/WeKnora
- LICENSE: MIT with listed third-party components — github.com/Tencent/WeKnora
- Release v0.8.3 (2026-10-14) — github.com/Tencent/WeKnora
- .env.example: secrets, registration, vector driver — github.com/Tencent/WeKnora
- docker-compose.yml: services, ports, profiles — github.com/Tencent/WeKnora
- Architecture overview (Chinese) — weknora.weixin.qq.com
- Quick start page (Chinese) — weknora.weixin.qq.com
- SECURITY.md: private vulnerability reporting — github.com/Tencent/WeKnora



