Skip to main content

Tachiyomi (Suwayomi)

A self-hosted manga server and reader based on the Tachiyomi Android app.

Suwayomi (deployed here as tachiyomi) is a self-hosted server that runs the Tachiyomi manga reader backend with web UI access. It supports the full Tachiyomi extension ecosystem for reading manga from various sources. Self-hosting keeps your reading history private and provides a web interface independent of Android.

Alternatives considered​

Cloud Hosted

ToolOpen SourceFree TierMonthly Cost
MangaDexNoYesFree

Self Hosted

ToolOpen SourceFull FeaturesNotes
KomgaYesYesLocal CBZ/CBR collections; no extension system

Installation​

Architecture​

  • Deployment: Single tachiyomi deployment in the tachiyomi namespace
  • Image: ghcr.io/suwayomi/tachidesk, digest-pinned via Renovate
  • Storage: NFS PV from TrueNAS for manga storage; no PVC
  • Networking: ClusterIP service on port 4567, HTTPRoute via internal gateway

Security​

  • Runs as runAsUser: 1000, runAsNonRoot: true, allowPrivilegeEscalation: false, capabilities dropped
  • Basic auth credentials from SOPS-encrypted secret

Updates​

Managed by Renovate. Image is digest-pinned.

Data Management​

No PVCs. Manga files reside on the TrueNAS NFS share managed by TrueNAS. App settings and reading progress stored in the container's internal SQLite database (on the NFS share).

User Management​

Basic authentication via authsecret (username/password from SOPS secret). No OIDC.

Configuration Management​

  • Basic auth credentials from SOPS-encrypted secret

Usage​

Access the web UI to install Tachiyomi extensions and browse manga from configured sources. Downloaded manga is stored on the NFS share. Reading progress syncs in the server database. Tachiyomi Android app can connect to this server as a remote source.

Cluster-specific deviations from the above live in the per-cluster README — see k8s/apps/tachiyomi/talos/README.md.

Cluster Deployment​

Depends on

Tachiyomi (Suwayomi) — Talos cluster

Kubernetes Metadata
  • Image: ghcr.io/suwayomi/tachidesk:v2.4.2422@sha256:9397e89561c3d0d05bd8657b89808bb306f4a228ca3d055b81c471cee834af41
Rendered manifests (kustomize build)
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
kustomize.toolkit.fluxcd.io/force: enabled
labels:
app.kubernetes.io/name: tachiyomi
name: tachiyomi
namespace: tachiyomi
spec:
replicas: 1
revisionHistoryLimit: 2
selector:
matchLabels:
app.kubernetes.io/name: tachiyomi
strategy:
type: Recreate
template:
metadata:
labels:
app.kubernetes.io/name: tachiyomi
spec:
automountServiceAccountToken: false
containers:
- image: ghcr.io/suwayomi/tachidesk:v2.4.2422@sha256:9397e89561c3d0d05bd8657b89808bb306f4a228ca3d055b81c471cee834af41
livenessProbe:
failureThreshold: 3
httpGet:
path: /
port: 4567
initialDelaySeconds: 5
periodSeconds: 5
successThreshold: 1
timeoutSeconds: 2
name: tachiyomi
ports:
- containerPort: 4567
name: web
protocol: TCP
readinessProbe:
failureThreshold: 1
httpGet:
path: /
port: 4567
initialDelaySeconds: 5
periodSeconds: 5
successThreshold: 1
timeoutSeconds: 2
resources:
limits:
memory: 2816Mi
requests:
cpu: 25m
memory: 1408Mi
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
privileged: false
volumeMounts:
- mountPath: /home/suwayomi/.local/share/Tachidesk
name: tachiyomi-nfs
subPath: tachiyomi
- mountPath: /downloads
name: tachiyomi-nfs
subPath: manga/tachiyomi
priorityClassName: tier-3
securityContext:
fsGroup: 1000
fsGroupChangePolicy: OnRootMismatch
runAsGroup: 1000
runAsNonRoot: true
runAsUser: 1000
seccompProfile:
type: RuntimeDefault
volumes:
- name: tachiyomi-nfs
persistentVolumeClaim:
claimName: tachiyomi-truenas-nfs-reading