Kiwix
Offline Wikipedia and other content served from ZIM files.
Kiwix is an open-source tool for offline reading of web content. It serves Wikipedia, Project Gutenberg, Stack Overflow, and other knowledge bases packaged as ZIM files. Self-hosting Kiwix makes large knowledge bases accessible without internet connectivity and with very low latency.
Alternatives considered
Cloud Hosted
| Tool | Open Source | Free Tier | Monthly Cost |
|---|---|---|---|
| Wikipedia | Yes | Yes | Free |
| DevDocs | Yes | Yes | Free; dev docs only |
Self Hosted
| Tool | Open Source | Full Features | Notes |
|---|---|---|---|
| Zeal | Yes | Yes | Desktop-only offline docs browser |
Installation
Architecture
- Deployment: Single
kiwixdeployment in thekiwixnamespace - Image:
ghcr.io/kiwix/kiwix-serve, digest-pinned via Renovate - Storage: NFS volume from TrueNAS for ZIM files (read-only content serving)
- Networking: ClusterIP service on port 80, HTTPRoute via public gateway; NetworkPolicy allows ingress from Envoy Gateway and Homepage
Security
No securityContext configured. No secrets required — read-only content serving with no writable state.
Updates
Managed by Renovate. Image is digest-pinned.
Data Management
No PVCs. ZIM files reside on the TrueNAS NFS share and are managed by TrueNAS. To add content, download ZIM files from kiwix.org and place them in the NFS share directory.
User Management
No authentication configured. Public access via HTTPRoute.
Configuration Management
No ConfigMaps or Secrets. ZIM file path passed as command argument to the container.
Usage
Download ZIM files from the Kiwix library (kiwix.org/en/download) and place them in the data volume. Access the web UI to browse and search all loaded knowledge bases. Particularly useful as an offline reference for Wikipedia and technical documentation.
Cluster-specific deviations from the above live in the per-cluster README — see k8s/apps/kiwix/talos/README.md.
Cluster Deployment
Kiwix — Talos cluster
- Image:
ghcr.io/kiwix/kiwix-serve:3.8.2@sha256:e478554a9920412eeb5ce1d73f24e4b28445ebed233187cdd03c623c32be46a5
Rendered manifests (kustomize build)
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
kustomize.toolkit.fluxcd.io/force: enabled
labels:
app.kubernetes.io/name: kiwix
name: kiwix
namespace: kiwix
spec:
replicas: 1
revisionHistoryLimit: 2
selector:
matchLabels:
app.kubernetes.io/name: kiwix
strategy:
rollingUpdate: null
type: Recreate
template:
metadata:
labels:
app.kubernetes.io/name: kiwix
spec:
automountServiceAccountToken: false
containers:
- args:
- -M
- '*.zim'
image: ghcr.io/kiwix/kiwix-serve:3.8.2@sha256:e478554a9920412eeb5ce1d73f24e4b28445ebed233187cdd03c623c32be46a5
livenessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
name: kiwix
ports:
- containerPort: 8080
name: web
protocol: TCP
readinessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
resources:
limits:
memory: 128Mi
requests:
cpu: 25m
memory: 64Mi
volumeMounts:
- mountPath: /data/
name: kiwix-data
subPath: kiwix
priorityClassName: tier-3
volumes:
- name: kiwix-data
persistentVolumeClaim:
claimName: kiwix-truenas-nfs-reading