{TABS.find((t) => t.id === tab)?.label}
Interface Scale
{#each [50,60,70,80,90,100,110,125,150,175,200] as v} {/each}
Server
Inactivity
Integrations
Language
Theme
Page Layout
Fit & Zoom
{#each [50, 75, 100, 125, 150, 200] as v} {/each}
Behaviour
{#if !(store.settings.autoNextChapter ?? false)} {/if}Display
Chapters
History
Render Limit
{#each [12, 24, 48, 96, 200] as v} {/each}
Rendering
Idle / Splash Screen
Interface
Session Cache
Keyboard shortcuts
Click a binding to rebind, then press the new key combination.
Disk Usage
Reading filesystem…
{:else if storageError}{storageError}
{:else if isExternalServer}Disk usage is unavailable for external servers — filesystem access requires a local connection.
{:else if multiStorageInfos.length > 0} {#each multiStorageInfos as info} {@const limitGb = store.settings.storageLimitGb ?? null} {@const limitBytes = limitGb !== null ? limitGb * 1024 ** 3 : null} {@const available = info.manga_bytes + info.free_bytes} {@const cap = limitBytes !== null ? Math.min(limitBytes, available) : available} {@const pct = cap > 0 ? Math.min(100, (info.manga_bytes / cap) * 100) : 0} {/each} {:else}No download path configured.
{/if}Downloads Path
{#if isExternalServer}Connected to an external server. The path below is read from the server — changes here will update the server's config directly. Make sure the path is valid on the server's filesystem.
{/if}Storage Limit
Cache
{backupError}
{/if} {#if backupList.length === 0}No backups yet — create one above.
{:else}{validateError}
{/if} {#if validateResult} {#if validateResult.missingSources.length === 0 && validateResult.missingTrackers.length === 0}✓ All sources and trackers present
{:else} {#if validateResult.missingSources.length > 0}{restoreError}
{/if} {#if restoreStatus}Manage Folders
Folders are stored as Suwayomi categories. Changes sync across all clients.
{#if catsError}{catsError}
{/if}Loading folders…
{:else if store.categories.filter(c => c.id !== 0).length === 0}No folders yet. Create one above.
{:else} {@const displayCats = store.categories .filter(c => c.id !== 0) .sort((a, b) => { const defaultId = store.settings.defaultLibraryCategoryId ?? null; if (a.id === defaultId) return -1; if (b.id === defaultId) return 1; return a.order - b.order; })}Connected Trackers
{#if trackersError}Loading trackers…
{:else}Browser opened {tracker.name} login — after authorising, copy the full callback URL and paste it below.
{ if (e.key === "Enter") submitOAuth(); if (e.key === "Escape") cancelOAuth(); }} use:focusEl />Server Authentication
{store.settings.serverAuthMode === "BASIC_AUTH" ? "Basic Auth" : store.settings.serverAuthMode === "SIMPLE_LOGIN" ? "Simple Login — unsupported" : store.settings.serverAuthMode === "UI_LOGIN" ? "UI Login — unsupported" : "Disabled"}Images are proxied through Tauri when Basic Auth is active, which reduces loading speed.
App Lock
SOCKS Proxy
FlareSolverr
Content Filter
Blocked Genre Tags
Source Overrides
Allow lets a source through even if flagged NSFW. Block always hides it.
Loading sources…
{:else if contentSources.length === 0}No sources found — check your server connection.
{:else}Moku
A manga reader frontend for Suwayomi / Tachidesk.
Built with Tauri + Svelte.
Version
Releases
{#if releasesError}{releasesError}
{:else if releasesLoading}Fetching releases…
{:else if releases.length === 0}No releases found.
{:else}{release.body.trim()}
Toasts
Previews
3D tilt cards — hover to preview
Runtime