Downloads

Download kavita-3ds.3dsx Download kavita-3ds.cia
Version: 0.4.1
Last updated:

Description

Kavita 3DS

A Nintendo 3DS homebrew client for Kavita — browse your comic, manga, and book library from your 3DS.

Features

  • Browse libraries, series, volumes, and chapters
  • Cover art thumbnails with lazy loading
  • Full-screen comic/manga page reader
  • Reading progress sync back to Kavita
  • Credentials saved to SD card

Build Setup

1. Install devkitPro

Download and install devkitPro.

On Windows: use the devkitPro MSYS2 installer, then open a devkitPro MSYS2 shell.

2. Install 3DS packages

dkp-pacman -S 3ds-dev 3ds-citro2d 3ds-citro3d

3. Download vendored libraries

bash bootstrap.sh

This downloads cJSON and stb_image into the libs/ directory.

4. Python (for icon / CIA assets)

The first make runs tools/prepare_cia_assets.py, which resizes icon.png to 48×48 (for the .smdh), builds the CIA banner from icon-large.png, and writes a short silent audio clip for the banner. Install Python 3 and Pillow:

pip install Pillow

5. Build

make

Output: kavita-3ds.3dsx and kavita-3ds.smdh

6. CIA package (optional)

Installing a .cia on the HOME Menu requires bannertool and makerom, which are not included in devkitPro’s 3dstools package. Download release binaries and put them on your PATH (for example copy bannertool.exe and makerom.exe into %DEVKITPRO%\tools\bin), or pass explicit paths when invoking Make.

From a devkitPro MSYS2 shell (same environment as make):

make cia

If the tools are not on PATH, use MSYS-style paths, for example:

make cia BANNERTOOL=/c/path/to/bannertool.exe MAKEROM=/c/path/to/makerom.exe

Output: kavita-3ds.cia in the project root. Ensure make has already been run at least once so kavita-3ds.elf and the CIA banner/icon assets under build/ exist.

Running

Copy kavita-3ds.3dsx to /3ds/kavita-3ds/kavita-3ds.3dsx on your SD card, then launch via the Homebrew Launcher.

Controls

Displayed on touchscreen.

In reader, press the A button to show the following controls:

  • X: Adjust Zoom Level
  • Circle Pad (Whilst Zoomed): Pan Viewport
  • Start: Go To page
  • B: Back to Chapter List
  • Left / Right D-Pad: Previous / Next Page

Config

Server URL and credentials are saved to /3ds/kavita-3ds/config.ini on the SD card. Delete this file to reset.

Project Structure

kavita-3ds/
├── Makefile
├── bootstrap.sh          # Downloads vendored libs
├── icon.png              # app icon
├── romfs/                # Read-only filesystem embedded in .3dsx
├── libs/                 # Vendored: cJSON.h/c, stb_image.h (after bootstrap)
├── include/              # Header files
└── source/               # C source files
    ├── main.c            # Entry point, service init, main loop
    ├── app.c             # State machine
    ├── config.c          # SD card config INI
    ├── http_client.c     # libctru httpc wrapper
    ├── kavita_api.c      # Kavita REST API calls
    ├── image_loader.c    # JPEG/PNG decode → GPU texture
    ├── ui.c              # UI primitives
    ├── screen_setup.c    # Login screen
    ├── screen_libraries.c
    ├── screen_series.c   # Cover grid with lazy loading
    ├── screen_detail.c   # Volume/chapter list
    └── screen_reader.c   # Full-screen page reader