Kavita – your online library

Kavita – your online library

Managing various media like comics, eBooks, and computer manuals has always been challenging in digital libraries. Kavita, a relatively new but open-source server for your digital library, aims to change this.

This blog post explores what Kavita is, its features, and why it’s quickly becoming a favourite among digital library enthusiasts.

Introduction to Kavita

Kavita is an open-source, self-hosted digital library server that specializes in serving comics, manga, eBooks and PDFs. Its user-friendly interface, ease of setup, and broad range of supported formats make it stand out.

Designed with casual readers and serious collectors in mind, Kavita offers a streamlined way to organize, access, and enjoy your digital reading materials from any device.

Key Features of Kavita

  1. Wide Range of Supported Formats: Kavita supports numerous file formats, including popular ones like PDF, EPUB, CBR, CBZ, and more, making it versatile.
  2. User-Friendly Interface: The interface is clean, intuitive, and responsive, suitable for both desktop and mobile devices.
  3. Advanced Library Management: Offers features like metadata tagging, reading progress tracking, and customizable organization for your library.
  4. Multi-User Support: Allows multiple users to access the library with personalized settings and progress tracking.
  5. Performance-Oriented: Optimized for fast loading and smooth performance, even with large libraries.

Setting Up Kavita

The setup process of Kavita is straightforward, making it accessible for users with varying levels of technical expertise:

  1. Installation: Can be installed on various platforms including Windows, Linux, and Docker.
  2. Configuration: Simple configuration process for setting up your library, adding users, and organizing your collections.
  3. Customization: Offers various customization options to tailor the library according to personal preferences.

Why Choose Kavita?

  • Open-Source and Free: Being open-source, it’s free to use and regularly updated by the community.
  • Privacy-Focused: As a self-hosted solution, it keeps your data private and in your control.
  • Community Support: Has an active community for support, feature requests, and regular updates.
  • Cross-Platform Accessibility: Accessible from any device with a web browser, offering flexibility in how and where you read.

Use Cases for Kavita

  • Personal Digital Library: Ideal for individuals looking to organize and read their digital collection of comics and eBooks.
  • Shared Family Library: Families can set up a shared library accessible to all members with personalized experiences.
  • Community Libraries: Small communities or clubs can host a digital library for members to access shared reading materials.

Summary

Kavita is a game-changer in the digital library space, especially for comic and eBook enthusiasts. Its blend of powerful features, user-friendly design, and open-source nature make it an excellent choice for anyone looking to set up a personal or shared digital library.

I needed a solution not only to store my ever-growing list of books – particularly computer and software engineering books – but to finally give me access to them in a way that a simple file server folder never could.

Installing Kavita on Kubernetes

As with all deployments to Kubernetes, it starts with a manifest file written in yaml. For this, I created a file called ‘kavita.yaml’ with the following in it: –

apiVersion: v1
kind: Namespace
metadata:
  name: kavita
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: kavita-claim-config
  namespace: kavita
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: kavita-claim-data
  namespace: kavita
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: kavita
  name: kavita
  namespace: kavita
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kavita
  template:
    metadata:
      labels:
        app: kavita
    spec:
      volumes:
      - name: kavita-config
        persistentVolumeClaim:
          claimName: kavita-claim-config
      - name: kavita-data
        persistentVolumeClaim:
          claimName: kavita-claim-data
      - name: nfs-kavita-developer
        nfs:
          server: 192.168.1.95
          path: /mnt/HDDPool1/Software/Development/Manuals
      containers:
      - env:
        - name: PGID
          value: "1000"
        - name: PUID
          value: "1000"
        - name: TZ
          value: Europe/London
        image: lscr.io/linuxserver/kavita:latest
        imagePullPolicy: Always
        name: kavita
        ports:
        - name: kavita
          containerPort: 5000
          protocol: TCP
        resources: {}
        stdin: true
        tty: true
        volumeMounts:
        - mountPath: /config
          name: kavita-config
        - mountPath: /data
          name: kavita-data 
        - mountPath: /usr/manuals
          name: nfs-kavita-developer
      dnsPolicy: ClusterFirst
      restartPolicy: Always
---
kind: Service
apiVersion: v1
metadata:
  name: kavita-service
  namespace: kavita
spec:
  selector:
    app: kavita
  ports:
  - port: 5000
    targetPort: 5000
    name: kavita
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: kavita
  namespace: kavita
spec:
  entryPoints:
    - websecure
  routes:
    - match: Host(`kavita.intrasoftware.uk`)
      kind: Rule
      services:
        - name: kavita-service
          port: 5000
          namespace: kavita
  tls:
    secretName: intrasoftware-uk-tls

This file contains the namespace, deployment, persistent volumes, service and ingress route.

Deploying it to Kubernetes is simple – you just run this one command: –

kubectl create -f kavita.yaml
Stephen

Hi, my name is Stephen Finchett. I have been a software engineer for over 30 years and worked on complex, business critical, multi-user systems for all of my career. For the last 15 years, I have been concentrating on web based solutions using the Microsoft Stack including ASP.Net, C#, TypeScript, SQL Server and running everything at scale within Kubernetes.