openGym is an open-source, self-hosted fitness and body-weight tracker designed for people who want complete control over their workout data. Instead of storing training history on a third-party service, it runs on your own server and keeps your data in files you control.

The application combines workout planning, guided training, body-weight tracking, statistics, muscle analysis, and cross-device synchronization in a web application that can also be installed as a Progressive Web App.

Features

openGym provides a weekly workout planner with routines organized by day. Users can create and modify training sessions, move workouts between days, and choose from predefined workout plans such as Push/Pull/Legs, Upper/Lower, Full Body, and 5×5.

The exercise library contains more than 1,300 exercises with animated demonstrations. Exercises can be searched, browsed by muscle group, and filtered according to available equipment.

During workouts, the application supports regular sets, supersets, warm-ups, cardio, rest timers, and exercise tracking. It records training history and provides statistics including personal records and progress charts.

Muscle analysis is another notable feature. openGym can show which muscles are being trained, fatigued, or detrained, helping users understand how their training volume is distributed over time.

The application can import workout history from services and applications including FitNotes, Strong, and Hevy. This makes switching to a self-hosted system considerably easier for existing users.

Authentication uses passkeys, while the application can operate offline and synchronize data when connectivity returns. The synchronization system uses revisions to prevent one device from silently overwriting changes made by another device.

Download openGym APK v1.3.9 - Software Mirrors

openGym APK v1.3.9 for Android

openGym-1.3.9.apk | 15.41 MB

openGym APK v1.3.9 Source Code

openGym APK v1.3.9 Source code (zip)

openGym APK v1.3.9 Source code (tar.gz)

openGym APK v1.3.9 Release Notes:

The milestone was "edit your history", and it is in: fix a saved workout after the fact, move it to another day, change how long it took, attach photos and videos to it. Around it, the two reports from Discord that mattered most — a paired phone that quietly stopped syncing and lost a week, and a routine planned at 2 × 10 that opened at 2 × 15 — are fixed at the root. Password sign-in for instances that want it, more than one passkey per profile, your own picture on your own exercises, Structural Balance, plate loading per set, the rest countdown in an Android notification, Ukrainian and Arabic. Thirty-nine community pull requests from eighteen contributors, plus five more taken in part. Web bundle, APK and API image. The two reports from Discord

  • ๐Ÿ”Œ A paired phone can no longer lose your workouts without telling you (andi242). After the

server refused a phone's sign-in once — "Sign out everywhere" does that, so does an expired token — the next start of the app unpaired it silently but kept you on screen, every sync after that went nowhere and was counted as done, and Disconnect then wiped the phone. Every paired phone since v1.2.10 could get there. Now:

  • The app says when it is not connected, always: a line at the top for offline, a server that

-- cannot be reached, a server that refuses this phone, an answer that is not the server's, and -- phone-only or guest use.

  • A refused phone keeps its pairing and its data and offers Pair again. Phones already stuck

-- in that state from an earlier version are healed when they start, and their unsynced workouts -- reach the server once they are paired again.

  • Settings → Server & sync shows the host, the account, the status, the last sync, what is

-- still waiting, and a Sync now button.

  • Disconnect and Sign out ask first when something has not reached the server yet — try again,

-- export it, or go ahead anyway. Going ahead keeps a copy on the device, and it is merged back -- the next time you connect to the same account.

  • Pairing again or signing in to the same account merges, instead of replacing the phone's copy

-- with the server's. A phone in use renews its sign-in on its own.

  • Signing in or pairing waits for your answer to "add this device's workouts?" before it touches

-- anything, and a kg ↔ lb conversion, a reset or a backup import now reaches every device.

  • Tip if you were hit by this: the phone's daily backup files (Documents/openGym/, or

-- Documents/opengym-backup-….json from before this version) may still hold the lost days — -- Settings → Import.

  • ๐Ÿ“‹ The plan owns the reps (seals187, Supportlik, #275, #216). A session copied its reps from

the last time you did that exercise in any routine, so a 2 × 10 day opened at the 2 × 15 you had done somewhere else. Now a planned session starts from the plan (Settings → "Planned sessions start from": your plan, or your last session), progression runs per routine slot and falls back to the exercise's history only when the slot has none, an edited plan restarts progression with its new weight, and the card says "Plan: 2 × 10" (or "2 × 10–15" for a range).

  • ๐Ÿ” Double progression waits for the top of the range (Diego-Sanchez2000, #278, bluzername's

#297) before it adds weight.

  • ๐Ÿ—‚️ A stale second tab can no longer overwrite the server (danielkleinert, #283). Each tab

tracks the revision it last saw, and a conflict keeps the latest edit of every routine and workout instead of whole copies.

  • ๐Ÿ“ด The iPhone home-screen app opens offline again (tpodolak, #274, bluzername's #298) — and a

slow connection no longer cuts a download off halfway. Editing your history

  • ✏️ Edit a saved workout (Space-Hermes, #203, #143, #229) — weights, reps, sets and exercises,

in the same screen you logged it on; progression and records re-read the corrected session. A workout emptied in the editor offers to delete it instead of saving nothing.

  • ๐Ÿ• Date, start time and duration (Parth-Vasave, #263, expressiveminute, #218), without

touching what you lifted.

  • ๐Ÿ“ธ Photos and videos on a workout — attach them on the finish screen or in the workout's

detail. They live on your server and the device, never in the synced data.

  • ๐Ÿ—“️ Log a missed day (svillar, #284) — mark a planned routine from a past day as done; its

rows only look at the history from before that day.

  • ๐Ÿ“š Drop sets and supersets show in History, an exercise's history opens from a past workout, a

workout copies as text, a finished session saves as a routine of its own (Space-Hermes, #211), and every weigh-in has a history with weekly averages.

  • ๐Ÿšซ "Don't count for progression" for one exercise or a whole workout (the ⋯ and ⋮ menus) —

an injury day stays out of the next session's numbers. Accounts and sign-in

  • ๐Ÿ” Password sign-in, if you want it (#118). Off by default; an instance switches it on with

PASSWORD_LOGIN=1, and each profile opts in by setting a password in Settings. Sign in with the profile's name or an e-mail address you add (no mail is ever sent). Passwords are stored with scrypt, repeated wrong guesses pause sign-in for that name, and an admin can hand out a one-time reset code. Removing a passkey or the password asks for proof first.

  • ๐Ÿ”‘ More than one passkey, and a new device by code (AlexanderVott, #95). Settings lists a

profile's passkeys to add, rename or remove, and Add another device shows a one-time code and QR; the code creates a passkey on the new device, never a session by itself. During a workout

  • ⏸️ Pause the rest timer — paused time does not count, and the alert moves with it.

  • ๐Ÿ”” The rest countdown in an Android notification (vitox013, #296, #122), with Pause, ±15 s and

Skip, on time with the screen off. A louder chime, and a Vibrate switch of its own.

  • ๐Ÿ‹️ Plate loading per set (kurktchiev, #194) — each row shows the plates for its weight, from

the plates you own; "No bar" Smith machines count from zero, and drop sets land on a weight you can actually load.

  • ⌨️ Keyboard shortcuts (#133) — Space or Enter ticks the next set, the arrow keys switch

exercise, for a keyboard or a Bluetooth button.

  • ⏱️ Rest timers stay on Ready when they run out, and a timed hold may run into overtime

(Space-Hermes, #204). The rest timer and a hold can no longer run at once (kurktchiev, #251).

  • The line under each exercise can show your best set instead of last time (Flxp49, #173); the

next workout card peeks in while you swipe (Space-Hermes, #202, sgoendoer, #113); "Set current" goes straight to card view (bluzername, #262, xwr3, #260); typing an exact RIR/RPE no longer ticks the set on the first keystroke (kurktchiev, #288). Plan, library and stats

  • ๐Ÿงฎ Structural Balance (Josevi, !140) — Stats compares your lifts with each other against the

Poliquin, Thibaudeau and ATG ratios and names the weakest one.

  • ๐Ÿ–ผ️ Your own picture on your own exercises (#126, #170; based on horusglez's #295 and

Vaibhav159's #246) — one photo, GIF or short video (up to 40 MB and 60 s) and one link per custom exercise. The file is stripped of its location data, kept on your server and on the device, never in the synced data, and works offline once seen; a YouTube link makes no request until you tap it. Shared plans carry the link, never the file.

  • ๐Ÿ”„ Replace an exercise in the routine editor (codedmind, #110) and keep its sets, reps, weight

and rule; print a single routine or save it as PDF (Teo230, #282); swipe left to delete a routine in Plan (Agripa22, #286); a drag handle on computers (seals187, #277, sgoendoer, #114).

  • A compact "+" on a day that already has a routine (seals187, #276), a live result count in

exercise search (GitLab !31), "benchpress" finds "bench press", cardio speed in mph for imperial users, the activity heatmap by time or by volume (Space-Hermes, #205), repeated exercises add up the same way in History and Stats (Space-Hermes, #212), a changed load cascades down the sets without overwriting the ones you set by hand (Space-Hermes, #209), and the Home body-weight card can be hidden (sacgsxr, #279). Languages

  • ๐Ÿ‡บ๐Ÿ‡ฆ Ukrainian (illinoiseeee, #285) and ๐Ÿ‡ธ๐Ÿ‡ฆ Arabic, laid out right to left (smsmy, GitLab

!36) — seventeen languages in all.

  • ๐Ÿ“– Exercise names in seven languages: German (mkoester, #290), Spanish (AlexRomero12, #245),

Russian (dima-po, #266), Italian and French (giulioleuci, #254), next to Brazilian Portuguese and Hungarian — each with a switch to show the English name beside it, or only the English name.

  • ๐ŸŒ DEFAULT_LANG (edgardjnr, #303) — an instance can pick the language of its sign-in screen and

of profiles that never chose one; otherwise a new visitor starts in their browser's language.

  • Russian demo strings (dima-po, #265), untranslated Coach equipment chips (dima-po, #264), and CSV

imports that read localized month names (sTOrM2202, #273).

  • "1 workout and 1 weigh-in" instead of "1 workouts and 1 weigh-ins" when signing in finds entries

from while you were signed out. The AI Coach

  • A review that swaps in an exercise the routine already has is told the rule and keeps the rest of

its proposal, instead of failing as "unusable" (fama-lama, #313).

  • Routine icons from the Coach work, and its plans pick more varied exercises (ameer-khan-ashraf,

#311).

  • The maximum message length is an admin setting (bluzername, #280, SSamDav, #267, #268).

  • A bonus set no longer reads as a stall you never had (kurktchiev, #287); Save in the Coach setup,

the demo Coach's failure state and the intake line are fixed (kurktchiev, #289); a weekly review is due until it has run, not for one minute a week (kurktchiev, #249).

  • On an iPhone the Coach waits out a slow local model instead of giving up after 30 seconds

(thedandano, part of #187), and the phone refuses a plain http:// endpoint with a reason.

  • A run that fails before its first status check still answers in the chat.

Imports

  • Strong: a workout's Duration is its length and its Workout Notes the session note, and timed

holds come in as seconds. Hevy: supersets come in as supersets. The import summary shows the year when the range is not this year. Android and iPhone

  • ๐Ÿ“ฑ Android 15: sheets sit on top of the keyboard with the field you are typing in above it,

and with three-button navigation the tab bar sits above the navigation bar, so a tap on a tab no longer lands on Home or Recents.

  • ๐ŸŽ iPhone: large photos and videos are kept in a form Safari can read back, so they play and

upload. The iOS build targets iOS 15.5 (clown-doing-code, #270).

  • ๐Ÿ“ฆ The release APK carries only the ARM builds and is about 12 MB smaller (#136). Automatic

backups go to Documents/openGym/ and only the newest 14 are kept (#161).

  • ๐Ÿ—‚️ Exercise pictures stay available offline in the installed web app (xwr3, #281).

Self-hosting

  • ๐Ÿšข Kubernetes (chriscowley, #304) — manifests in kubernetes/ and a guide,

docs/SELF_HOSTING_KUBERNETES.md, with both images pinned to the same release.

  • Settings shows your account id, for an admin who needs to find your data (ItzEarthy, #219); the

admin's "last sync" counts pulls as well as pushes. Security and robustness

  • ๐Ÿ›ก️ Coach hardening: everything that goes into a Coach prompt — what you typed, the plan, the

log, every id, and the "compare with others" figures — is bounded field by field before it is sent, so no text from another account can reach your prompt and an oversized request is never made.

  • ๐Ÿšฆ A sign-in throttle in front of the password routes, counted before the check.

  • The API answers a client's mistake as a client error and keeps its state cache bounded

(kurktchiev, #249); a push that carries nothing of the profile can no longer empty it on the server; the admin's activity log names what each pause was for. Community pull requests

  • Space-Hermes: edit saved workouts (#203), Ready rest timers and hold overtime (#204), the heatmap

by time or volume (#205), load cascades that keep manual edits (#209), save a session as a routine (#211), consistent totals for repeated exercises (#212), the swipe preview (#202).

  • kurktchiev: plate loading per set (#194), a build that names itself (#244), API hardening (#249),

the part of #250 this release took, the timer and hold fixes (#251), the API reference with the Coach routes (#255), check-locales that reads the translations (#256), sheet pinning (#257), a lighter tab bar (#258), and three Coach and effort fixes (#287, #288, #289).

  • bluzername: Set current to card view (#262), the Coach message length (#280), double progression

(#297), the service-worker timeout (#298).

  • dima-po: Coach equipment chips (#264), Russian demo strings (#265), Russian exercise names (#266).

  • Parth-Vasave (#263), vitox013 (#296), chriscowley (#304), ameer-khan-ashraf (#311), AlexRomero12

(#245), giulioleuci (#254), mkoester (#290), illinoiseeee (#285), clown-doing-code (#270), sTOrM2202 (#273), sacgsxr (#279), Agripa22 (#286); on GitLab smsmy (!36) and Josevi (!140).

  • Taken in part, with thanks: AlexanderVott (#95), thedandano (#187), horusglez (#295),

Vaibhav159 (#246). Thank you to everyone who reported, tested and wrote code for this one: andi242, seals187, Supportlik, Diego-Sanchez2000, danielkleinert, tpodolak, svillar, expressiveminute, ncbachh, codedmind, Teo230, Flxp49, xwr3, sgoendoer, fama-lama, SSamDav, edgardjnr, ItzEarthy, asierlama, Space-Hermes, kurktchiev, bluzername, dima-po, Parth-Vasave, vitox013, chriscowley, ameer-khan-ashraf, AlexRomero12, giulioleuci, mkoester, illinoiseeee, clown-doing-code, sTOrM2202, sacgsxr, Agripa22, smsmy, Josevi, AlexanderVott, thedandano, horusglez and Vaibhav159. Upgrading

  • Nothing to migrate: v1.3.8 data opens as it is.

  • Update paired phones. The fixes for silently unpaired phones are in the app, not the server;

a phone still on v1.3.8 can still get stuck.

  • "Sign out everywhere" unpairs phones too — each one then shows Pair again, and keeps its data.

  • New, all optional, in .env (see .env.example and docs/SELF_HOSTING.md):

  • PASSWORD_LOGIN=1 switches password sign-in on. It is off by default. Give the api container

-- at least 256 MB of memory when it is on.

  • TRUST_PROXY lets the sign-in throttle read the client's address from X-Forwarded-For. The

-- bundled docker-compose.yml now sets it, because there the api is reachable only through the -- web container. Running the api any other way, turn it on only when whatever sits in front -- overwrites that header.

  • MEDIA_* for exercise and workout photos and videos: MEDIA_UPLOADS=0 turns uploads off,

-- MEDIA_QUOTA_MB (200 per profile by default), MEDIA_MIN_FREE_MB (uploads stop below that much -- free disk), and the per-type size limits. Media needs disk space — on a small disk or with -- open signup, lower MEDIA_QUOTA_MB. Keep the web container's MEDIA_UPLOAD_MAX above -- MEDIA_VIDEO_MAX_MB.

  • DEFAULT_LANG for the instance's default language.

  • The api image carries new files (password.js, rate-limit.js, passkeys-store.js,

device-link.js, media.js). If you build your own image with an explicit file list, add them.

  • A reverse proxy with a short read timeout can cut off a slow video upload; photos are unaffected.

Known and not fixed: counts in Russian, Ukrainian and Polish still use the English two-form plural rule ("2 ะดะฝะตะน" where it should read "2 ะดะฝั"). The Ukrainian, Arabic, Hindi, Korean, Thai and Chinese packs have not been read by a native speaker yet — corrections are very welcome.

  • registry.gitlab.com/duartesantos8/opengym/api: 1.3.9 1.3 latest | sha256:88b192dd743ed3746ddeeb973952bdf380c810d6b69337b8205d96d053d7962f

  • registry.gitlab.com/duartesantos8/opengym/web: 1.3.9 1.3 latest | sha256:eb97d4f78a9d495a41d0181440ae3394feab41e7200b7a4a36099cee36e80036

Both images are linux/amd64 + linux/arm64. Android: openGym-1.3.9.apk (16.2 MB, ARM only), SHA-256 bf484160250db1bfb86baf99d585ef0d5c2306a6b364846ced8848bfa4820fb1 — check it with sha256sum -c openGym-1.3.9.apk.sha256. Signed with the same certificate as every release since v1.2.7 (0d22a49e…), so it installs over your current one. Built from e6c920eb.


Published on GitHub on 2026-09-28, mirroring the GitLab release of the same tag, where the artefacts above were built. The same images are on GHCR, built from this release by GitHub Actions: ghcr.io/duartesantos8/opengym-api:1.3.9 and ghcr.io/duartesantos8/opengym-web:1.3.9.

Performance and Compatibility

openGym is designed primarily as a self-hosted web application, but it also provides an Android application and can be installed as a PWA. The Docker deployment supports both AMD64 and ARM64, making it suitable for conventional servers as well as ARM-based systems.

The deployment architecture is relatively lightweight. The API uses Node.js, while the frontend is served through nginx. User data is stored under the application's data directory, including profiles, workout state, settings, and the session signing key. This makes backups straightforward because backing up the data directory effectively backs up the application data.

Offline functionality is particularly useful for a fitness tracker because workouts can continue even when the phone temporarily loses connectivity. Changes that have not reached the server are retained, and the application indicates when it is operating offline.

There are some important self-hosting considerations. Passkey authentication requires a properly configured HTTPS origin when accessing the application from a phone. The project provides guides for Cloudflare Tunnel, Caddy, Traefik, nginx, LAN HTTPS, and Kubernetes deployments.

The exercise media also deserves attention. The application downloads the exercise images and animations from an upstream dataset rather than redistributing them directly. The repository explicitly notes that the media has separate third-party licensing considerations and should not automatically be treated as covered by openGym's AGPL license.

System Requirements

  • Docker with Docker Compose for the recommended self-hosted deployment

  • AMD64 or ARM64 system for the provided container images

  • Persistent storage for application data and exercise media

  • HTTPS and a suitable domain when using passkeys from external devices

  • Android device for the native Android application

  • Modern web browser for the web/PWA interface

Pros and Cons

Pros

  • Open-source and self-hosted

  • Your workout data stays under your control

  • No subscription

  • No advertising

  • No required third-party account

  • Passkey authentication

  • Offline workout support

  • Cross-device synchronization

  • Progressive Web App support

  • Android application

  • Extensive exercise library

  • Animated exercise demonstrations

  • Workout planning and guided sessions

  • Supersets, warm-ups, and cardio tracking

  • Body-weight tracking

  • Muscle fatigue and detraining analysis

  • Personal records and statistics

  • Imports from FitNotes, Strong, and Hevy

  • Docker deployment

  • AMD64 and ARM64 container images

  • Kubernetes deployment support

Cons

  • Self-hosting requires some technical knowledge

  • HTTPS configuration is necessary for convenient passkey access from phones

  • Users are responsible for server backups and maintenance

  • Exercise media has separate third-party licensing considerations

  • The project is relatively young compared with established commercial fitness platforms

  • Some advanced functionality is still actively evolving

How to Install

The simplest deployment method is Docker Compose.

Clone the repository, create the environment file, pull the prebuilt images, and start the services:

git clone https://github.com/DuarteSantos8/openGym
cd openGym
cp .env.example .env
docker compose pull
docker compose up -d

The application can then be accessed through the configured web port. The first startup downloads the exercise media required by the application.

For access from a phone, configure HTTPS and a domain before relying on passkey authentication. The project documentation provides deployment examples for common reverse proxies and tunnel solutions.

Once installed, create a profile and configure your weekly routine. Existing workout history can also be imported from supported fitness applications.

Final Verdict

openGym is an impressive self-hosted alternative to conventional workout tracking services. Its strongest feature is not simply workout logging, but the combination of data ownership, offline support, passkey authentication, cross-device synchronization, exercise analytics, and a surprisingly complete training workflow.

The Docker-based deployment is particularly attractive for technically inclined users. The application can run on relatively inexpensive hardware, while its data directory makes backup and migration straightforward.

The main drawback is that self-hosting transfers responsibility for availability, HTTPS, backups, and updates to the user. The separate licensing situation surrounding exercise media is another consideration for anyone redistributing an installation.

For users who want a modern fitness tracker without handing their workout history to a third-party service, openGym is an excellent project and one of the more compelling self-hosted fitness applications available.

openGym APK for Android v1.3.9
Free
Software Informations:
Developer:

Operating System:
Android
Date Added:
2026-10-05T16:17:14.000Z

WhatsApp for Mac is the desktop version of the popular messaging platform, allowing users to sync conversations, send files, make calls, and manage chats directly from macOS devices. The application now operates as a more native Mac client compared to the older Electron based versions, improving responsiveness and battery efficiency in many cases.

WhatsApp for Mac is desktop releases for macOS users, continuing Meta’s push toward a more native and responsive desktop experience. The update improves synchronization, messaging performance, and media handling, while still facing some stability complaints from users on newer macOS versions.

Key Features of WhatsApp for Mac

  • Native macOS Experience
    The newer Mac versions integrate better with macOS, offering smoother animations, improved notifications, and better overall responsiveness compared to older builds.

  • Multi Device Synchronization
    Users can continue messaging even if the phone is offline for periods of time, thanks to WhatsApp’s linked device system.

  • Voice and Video Calling
    The desktop client supports high quality voice and video calls directly from the Mac application.

  • Media Sharing and File Transfers
    You can drag and drop files, images, videos, and documents directly into chats for fast sharing.

  • Cross Platform Consistency
    The interface closely matches WhatsApp on mobile and web, making it easy to switch between devices.

User Experience

The interface is clean and familiar, especially for users already comfortable with WhatsApp on mobile devices. Navigation is straightforward, and synchronization is usually quick and reliable.

Some users also reported that the App Store build and direct DMG version behave differently depending on the issue encountered.

Performance and Compatibility

The application supports Apple Silicon and Intel Macs running newer versions of macOS. Current listings mention compatibility with macOS 12.1 or later.

Performance is generally fast and responsive during daily messaging, but recent reports suggest there are still unresolved bugs related to sleep behavior, crashes, and clipboard image handling on certain macOS releases.

Pros

  • Clean native macOS interface

  • Fast synchronization across devices

  • Supports voice and video calls

  • Easy file and media sharing

  • Better responsiveness than older desktop builds

Cons

  • Recent stability issues reported by some users

  • Occasional startup and QR linking crashes

  • Some macOS specific bugs remain unresolved

  • Can consume significant system resources during background activity

WhatsApp for Mac is ideal for users who spend long hours on desktop systems and want seamless access to conversations without constantly using their phones. It is especially useful for work communication, file sharing, and multitasking.

Users experiencing crashes may temporarily prefer WhatsApp Web until newer updates improve stability. Community feedback suggests that behavior may vary depending on the macOS version and installation source.

WhatsApp for Mac delivers a polished messaging experience with strong cross device integration and a modern native interface. While performance is generally solid, current stability issues prevent it from being completely flawless for all macOS users.

WhatsApp 2.26.40.16 for Mac
Free
Software Informations:
Developer:

Operating System:
macOS
Date Added:
2026-10-05T16:03:42.693Z

Caddy is an open-source web server and reverse proxy designed to make modern HTTPS deployments simpler. Written in Go, it combines a web server, automatic TLS certificate management, reverse proxy, static file server, and extensible module system in a single application.

Its biggest differentiator is automatic HTTPS. When configured with a domain name, Caddy can obtain and renew certificates and redirect HTTP traffic to HTTPS without requiring the extensive certificate configuration often associated with traditional web servers.

Features

Caddy supports HTTP/1.1, HTTP/2, and HTTP/3, with modern protocols enabled by default. It can serve static websites and files, or act as a reverse proxy in front of applications and services.

The Caddyfile provides a relatively simple configuration syntax for common deployments, while Caddy's native JSON configuration and API provide considerably more control for advanced setups. Configuration adapters also allow other formats to be converted into Caddy's native configuration model.

The reverse proxy supports multiple upstreams, load balancing, active and passive health checking, retries, connection pooling, header manipulation, buffering, and different transport options. This makes Caddy capable of handling substantially more than a basic single-backend proxy.

Caddy's TLS system can automatically obtain publicly trusted certificates using supported ACME issuers, while its internal CA can be used for internal services and local development. It also supports features such as multi-issuer fallback and Encrypted ClientHello.

The architecture is highly modular. Caddy functionality is implemented through modules, allowing additional capabilities to be added without modifying the core application. The official project also provides an extensive plugin ecosystem.

Download Caddy v2.11.7 - Software Mirrors

Caddy v2.11.7 for Windows

caddy_2.11.7_windows_arm64.zip | 15.78 MB

caddy_2.11.7_windows_amd64.zip | 17.62 MB

Caddy v2.11.7 for macOS

caddy_2.11.7_mac_arm64.tar.gz | 16.5 MB

caddy_2.11.7_mac_amd64.tar.gz | 17.69 MB

Caddy v2.11.7 for Linux

caddy_2.11.7_linux_s390x.tar.gz | 16.66 MB

caddy_2.11.7_linux_s390x.deb | 16.69 MB

caddy_2.11.7_linux_riscv64.tar.gz | 16.3 MB

caddy_2.11.7_linux_riscv64.deb | 16.33 MB

caddy_2.11.7_linux_ppc64le.tar.gz | 15.72 MB

caddy_2.11.7_linux_ppc64le.deb | 15.74 MB

caddy_2.11.7_linux_armv7.tar.gz | 16.34 MB

caddy_2.11.7_linux_armv7.deb | 16.37 MB

caddy_2.11.7_linux_armv6.tar.gz | 16.36 MB

caddy_2.11.7_linux_armv6.deb | 16.38 MB

caddy_2.11.7_linux_armv5.tar.gz | 16.37 MB

caddy_2.11.7_linux_armv5.deb | 16.39 MB

caddy_2.11.7_linux_arm64.tar.gz | 15.72 MB

caddy_2.11.7_linux_arm64.deb | 15.75 MB

caddy_2.11.7_linux_amd64.tar.gz | 17.27 MB

caddy_2.11.7_linux_amd64.deb | 17.3 MB

Caddy v2.11.7 for BSD

caddy_2.11.7_freebsd_armv7.tar.gz | 16.27 MB

caddy_2.11.7_freebsd_armv6.tar.gz | 16.29 MB

caddy_2.11.7_freebsd_arm64.tar.gz | 15.65 MB

caddy_2.11.7_freebsd_amd64.tar.gz | 17.2 MB

Others Download related to Caddy v2.11.7

caddy_2.11.7_src.tar.gz | 11.46 MB

caddy_2.11.7_checksums.txt | 6.61 kB

caddy_2.11.7_buildable-artifact.tar.gz | 11.01 MB

Caddy v2.11.7 Source Code

Caddy v2.11.7 Source code (zip)

Caddy v2.11.7 Source code (tar.gz)

Caddy v2.11.7 Release Notes:

This patch release fixes regressions from 2.11.6, including a crash when proxying over HTTP/2 and streams that were cut off after a minute. If you're on 2.11.6, we recommend upgrading. It also adds support for the brand new Incremental header field (RFC 10036). Huge thank you to our sponsors for keeping the project alive with resources, and for our maintainers who triage and assist tirelessly in this relentless new age of AI.

Highlights

  • Fixed: crash and dropped streams caused by the new idle timeouts. 2.11.6 introduced default idle read/write timeouts, which caused some problems:

  • In 2.11.6, the request body's idle deadline could outlive the handler that set it:

-- - Over HTTP/2, Caddy could panic with a nil pointer dereference when the reverse proxy was still reading a request body after the handler had returned. (#8101) -- - Over HTTP/1.1, streaming responses to requests with a body, such as SSE clients that open the stream with a POST, were cut off exactly 60 seconds after the body was read. (#8103) -- Both are fixed in #8107. Thanks @steadytao!

  • Over HTTP/2, streaming responses that paused between writes for longer than write_idle (1 minute by default), like quiet SSE streams, were reset with a stream error. As documented, only a write that stalls should count. Thanks @WeidiDeng! (#8118, #8119)

  • Fixed: placeholders for missing cookies are empty again. Since 2.11.6, places that keep unknown placeholders as written, like respond headers, would output {http.request.cookie.} literally when the cookie wasn't in the request. The same happened to {http.request.tls.} on plain HTTP requests. Both are empty again. Thanks @steadytao! (#8019)

  • New: support for the Incremental header field (RFC 10036). It's the standard replacement for NGINX's proprietary X-Accel-Buffering header. If an upstream response has Incremental: ?1, reverse_proxy forwards it immediately, the same as flush_interval -1, and encode streams it instead of holding it back. Great for Mercure, SSE and other streaming apps.

  • If the request_buffers or response_buffers options would prevent incremental forwarding, Caddy responds with 501 Not Implemented instead of silently buffering, as the RFC requires.

  • The new proxy_status_name option adds a Proxy-Status header to those responses, explaining why the message was refused.

Thanks @dunglas! (#8020)

  • Faster TLS handshakes: When nothing subscribes to certificate events and debug logging is off, CertMagic no longer builds event data for every handshake. Certificate lookup per handshake is about twice as fast, with 10 allocations instead of 15. Thanks @u5surf! (#8010)

  • Unix sockets: When a reload moves a listener (or the admin endpoint) off a Unix socket, the old socket now closes right away and its file is removed. Before, clients connecting to the old path would hang until the next garbage collection, about 2 minutes later. Thanks @littfed! (#8061)

  • Headers handler: Multiple Set-Cookie values in a JSON config's set are now sent as separate header fields, instead of being joined with commas into one field that clients can't parse. Thanks @Indra55! (#8080)

  • caddy fmt no longer deletes an opening brace at the very end of the input. Thanks @n0liu! (#8047)

What's Changed

  • events: tell CertMagic which events are worth emitting by @u5surf in #8010

  • feat: implement the Incremental header field (RFC 10036) by @dunglas in #8020

  • caddyfile: Keep an opening brace that ends the input by @n0liu in #8047

  • listeners: close unix socket immediately and unlink file on reload by @littfed in #8061

  • reverseproxy: stabilise half-close test by @steadytao in #8049

  • caddyhttp: keep absent optional placeholders empty by @steadytao in #8019

  • headers: Preserve separate Set-Cookie values by @Indra55 in #8080

  • caddyhttp: end request-body deadline ownership with handler by @steadytao in #8107

  • timeouts: fix idle writer terminate h2 response writers between writes by @WeidiDeng in #8119

New Contributors

  • @n0liu made their first contribution in #8047

  • @littfed made their first contribution in #8061

Full Changelog: v2.11.6...v2.11.7

Performance and Compatibility

Caddy is written in Go and compiles for major platforms without requiring external runtime dependencies. It can be deployed directly as a binary, in containers, or through other supported installation methods.

Its performance is strong enough for production web serving and reverse-proxy workloads, while the configuration model is arguably its bigger advantage over traditional alternatives. A simple reverse proxy can be configured with only a few lines, while more complex deployments can use the JSON API and modular configuration system.

Caddy is particularly attractive for administrators who regularly deploy HTTPS services. Automatic certificate provisioning and renewal remove much of the routine TLS maintenance, while the same configuration can handle reverse proxying, static files, headers, compression, and other HTTP functions.

There is a learning curve once deployments move beyond simple Caddyfile configurations. Caddy's underlying JSON configuration and modular architecture are powerful, but understanding modules, matchers, handlers, transports, and adapters takes time.

For administrators migrating from Nginx or Apache, Caddy's configuration model is also substantially different. Existing configurations cannot simply be copied over, although Caddy provides configuration adapters for several formats.

System Requirements

  • Windows, Linux, macOS, or another supported platform

  • 64-bit or platform-appropriate Caddy binary

  • Network access for public certificate issuance and renewal when using publicly trusted HTTPS certificates

  • Ports 80 and 443 when using standard public HTTPS with automatic certificate management

  • Additional storage and resources depending on website, proxy, logging, and workload requirements

Pros and Cons

Pros

  • Automatic HTTPS and certificate renewal

  • HTTP/1.1, HTTP/2, and HTTP/3 support

  • Simple Caddyfile configuration

  • Powerful JSON configuration and API

  • Excellent reverse-proxy capabilities

  • Load balancing and health checking

  • Static file server

  • Highly extensible modular architecture

  • Cross-platform

  • No external runtime dependencies

  • Supports internal HTTPS with its own CA

  • Suitable for containers and modern infrastructure

  • Strong support for automated deployments

Cons

  • Configuration becomes more complex for advanced deployments

  • Different configuration model from Nginx and Apache

  • Large plugin ecosystem can make choosing extensions more complicated

  • Some advanced functionality requires understanding Caddy's module architecture

  • Automatic HTTPS still requires correct DNS and network configuration for public services

  • Migration from existing Nginx or Apache configurations requires rewriting the configuration

How to Install

Download the appropriate Caddy package for your operating system or use one of the supported installation methods.

For a basic HTTPS website, create a Caddyfile containing the domain and the desired handler. For example:

example.com {
    reverse_proxy localhost:9000
}

Run Caddy with the configuration file. If the domain resolves to the server and ports 80 and 443 are reachable, Caddy can automatically obtain and manage the TLS certificate.

For containerized deployments, Caddy can also be run as a Docker container with configuration and certificate storage mounted as persistent volumes.

Before deploying a configuration, caddy validate can be used to verify the configuration, while caddy reload allows configuration changes to be applied without stopping the running server.

Final Verdict

Caddy is one of the strongest choices for administrators who want a modern web server and reverse proxy without spending significant time managing TLS certificates.

Its automatic HTTPS is the standout feature, but the software offers considerably more than certificate automation. HTTP/3, load balancing, health checks, static file serving, API-driven configuration, and a powerful module architecture make it capable of handling serious production workloads.

Its main weakness is complexity at the advanced end. Caddy is extremely approachable for simple deployments, but administrators who need highly customized routing and modular behavior will need to learn its underlying configuration architecture.

For new deployments, especially reverse proxies and HTTPS services, Caddy offers an excellent balance of simplicity, automation, and production capability.

Caddy v2.11.7
Free
Software Informations:
Developer:

Operating System:
Windows / macOS / Linux / BSD
Date Added:
2026-10-05T14:03:45.000Z

DiskRaptor is a modern open source disk space analyzer designed to help you quickly understand what is consuming storage on your computer. Built with Rust and Tauri 2, it is positioned as a faster, more modern alternative to tools such as WinDirStat and DaisyDisk.

What makes DiskRaptor particularly interesting is its focus on handling very large file systems. The project uses native Rust scanning components and a virtual tree interface designed to remain responsive even when working with millions of files.

What Is DiskRaptor?

DiskRaptor is a cross platform disk usage analyzer for Windows, macOS, and Linux.

Its main purpose is simple. You select a drive or directory, let DiskRaptor scan it, and then explore which folders and files are consuming the most space.

The project is built with Rust and Tauri 2. The native scanning engine handles file system traversal while the interface runs inside the operating system's native webview. This keeps the application relatively lightweight compared with applications that bundle an entire Chromium runtime.

Fast Disk Scanning

Performance is one of DiskRaptor's main selling points.

The project uses a parallel scanning engine on macOS and a reliable walkdir-based engine on Windows and Linux. It is designed to handle drives containing millions of files, with the project documenting support for scans involving up to 20 million nodes.

Access denied folders are handled gracefully as well. Instead of completely stopping a scan because it encounters a protected directory, DiskRaptor logs the problem and continues scanning.

For users with large SSDs, hard drives, external drives, or development machines containing huge numbers of files, this approach can make a significant difference.

Virtual Tree View

DiskRaptor uses a virtual tree interface that renders only the items currently visible on screen.

This is important when working with extremely large directory structures. Loading millions of files into a conventional browser interface would quickly become impractical.

The project claims that its virtual tree can handle more than 10 million files while remaining responsive.

You can navigate through folders, inspect file sizes, and identify which directories are responsible for consuming storage.

Multiple Visualization Options

DiskRaptor doesn't rely on a single visualization.

It provides several ways to understand disk usage, including:

  • Pie charts

  • Squarified treemaps

  • Bar charts

  • Galaxy 3D visualization

The application also provides a Top 50 list of the largest files. Selecting an item in the visualization can take you directly to the corresponding location in the directory tree.

The treemap is particularly useful when you want a quick visual overview of a large drive.

Find Large Files

Finding large files is one of the most practical reasons to use a disk analyzer.

DiskRaptor highlights the largest files and allows you to inspect their location directly.

This can quickly reveal things such as old installers, virtual machine images, Docker data, video files, build artifacts, backups, and other files that have quietly consumed hundreds of gigabytes.

Duplicate File Detection

DiskRaptor also includes duplicate detection.

It uses content hashing with xxHash3 to identify files that contain the same data.

This is more useful than simply comparing filenames because files with different names can still contain identical content.

Duplicate detection can be particularly helpful for large collections of photographs, videos, archives, downloads, and project backups.

Empty Folder Finder

The application can identify empty directories and allow you to jump directly to them.

This is a relatively small feature, but it can be useful when cleaning up development directories, extracted archives, or old project structures.

File Search and Filtering

DiskRaptor provides search functionality for scanned results.

You can search by filename pattern and filter results by file type, including:

  • Images

  • Video

  • Audio

  • Archives

  • PDF files

This makes it easier to locate specific categories of files without manually navigating the entire directory tree.

File Management

DiskRaptor isn't purely a visualization tool.

Its context menus provide actions such as opening a file in Explorer or Finder, opening a terminal, viewing properties, copying a path, moving an item to the trash, and scanning a particular folder.

The ability to move files to the trash directly from the application makes cleanup considerably more convenient.

Because file deletion is potentially destructive, users should still verify what they are removing before performing cleanup operations.

Trash Recovery

Another useful feature is trash management.

DiskRaptor can browse items in the operating system's trash, restore them, or permanently delete them.

This gives the application some basic recovery functionality rather than treating deletion as a one way operation.

Reports and Export

DiskRaptor can export disk analysis results in several formats.

Supported options include:

  • HTML reports

  • CSV

  • JSON

The HTML report can be shared as a standalone report containing statistics and charts. CSV and JSON exports are useful when you want to process the results with another application or script.

This is particularly useful for administrators who need to document storage usage rather than simply inspect it interactively.

Cross Platform Support

DiskRaptor supports:

  • Windows

  • macOS

  • Linux

The project provides a Windows NSIS installer, a universal macOS binary supporting both Intel and Apple Silicon, and a DEB package for Debian and Ubuntu.

This makes it considerably more versatile than Windows-only disk analyzers.

Interface and Customization

The interface supports both dark and light modes, with the selected setting saved for future sessions.

It also supports 25 languages with automatic language detection and a language switcher.

Drag and drop is supported as well, allowing folders to be dragged from Explorer or Finder into DiskRaptor for scanning.

The interface also has resizable panels, keyboard navigation, and contextual menus.

Technology

DiskRaptor is built around Rust and Tauri 2.

The architecture separates the native layer from the interface. Rust handles scanning and native operations while JavaScript handles the user interface through the operating system's webview.

That means DiskRaptor does not need to ship its own Chromium browser engine.

On Windows it uses WebView2, macOS uses WKWebView, and Linux uses WebKitGTK.

For a disk utility that needs to remain responsive while processing very large directory trees, this is a sensible architecture.

Pros

  • Open source

  • Free to use

  • Windows, macOS, and Linux support

  • Built with Rust

  • Tauri 2 architecture

  • Fast directory scanning

  • Designed for millions of files

  • Virtual tree view

  • Treemap visualization

  • Pie charts

  • Bar charts

  • Galaxy 3D view

  • Top 50 largest files

  • Duplicate file detection

  • Empty folder detection

  • Filename search

  • File type filtering

  • Trash recovery

  • Direct file management

  • HTML report export

  • CSV export

  • JSON export

  • Dark and light modes

  • 25 languages

  • Drag and drop support

  • Apple Silicon support

Cons

  • The project is still relatively young

  • Some advanced features may need further refinement

  • Scanning very large drives can still consume substantial CPU and storage I/O

  • Deleting files directly from a disk analyzer requires caution

  • The visualization features may be more than users need for simple disk cleanup

  • Linux packaging currently focuses on DEB distributions

DiskRaptor vs WinDirStat

WinDirStat remains one of the best known Windows disk usage analyzers, but DiskRaptor takes a more modern approach.

DiskRaptor is cross platform, built with Rust and Tauri, supports multiple visualization modes, includes duplicate detection and trash recovery, and is designed around very large directory trees.

WinDirStat has the advantage of being a mature and well established Windows application.

For users who want a modern cross platform alternative, DiskRaptor is much more interesting.

DiskRaptor vs DaisyDisk

DaisyDisk is known for its polished macOS interface and strong visualization capabilities.

DiskRaptor brings a similar visual approach to Windows and Linux while also supporting macOS.

Its open source nature is another major difference.

For someone who wants a free and open source disk analyzer that works across multiple operating systems, DiskRaptor is a compelling alternative.

Who Should Use DiskRaptor?

DiskRaptor is a good choice for anyone who regularly needs to answer the question, "What is using all my disk space?"

It is especially useful for:

  • Developers

  • System administrators

  • Power users

  • NAS and storage users

  • Large media collections

  • Users managing external drives

  • People cleaning old project files

  • Anyone with a rapidly filling SSD

The large file and duplicate detection features are particularly useful for development machines where build artifacts, package caches, Docker files, virtual machines, and old repositories can accumulate surprisingly quickly.

Final Verdict

DiskRaptor is an impressive open source disk space analyzer with a clear focus on performance and usability.

Its Rust based scanning engine, virtual tree interface, multiple visualizations, duplicate detection, file filtering, and report export make it much more than a basic folder size viewer.

The cross platform support is another major advantage. You can use the same general workflow on Windows, macOS, and Linux rather than maintaining different disk analysis tools for each operating system.

The project is also under active development. The GitHub repository currently shows more than 800 commits, six open pull requests, and recent updates in August 2026.

It is still less mature than long established applications such as WinDirStat, so some users may encounter rough edges. Nevertheless, the architecture and feature set make DiskRaptor one of the more interesting modern alternatives in this category.

If you want a fast, open source, cross platform disk space analyzer, DiskRaptor is well worth trying.

DiskRaptor v1.0.45
Free
Software Informations:
Developer:

Operating System:
Windows / Linux / macOS
Date Added:
2026-10-05T14:03:32.851Z

Readest is a modern open source ebook reader designed for readers who want more than a basic EPUB viewer. It combines support for multiple ebook and document formats with annotations, customizable reading layouts, text-to-speech, translation, side-by-side reading, library management, and cross-device synchronization. It is available across Windows, macOS, Linux, Android, iOS, and the web.

Readest is built around the idea of making digital reading feel consistent across devices. Instead of maintaining separate applications for desktop, mobile, and web reading, users can keep the same library and reading progress across supported platforms.

The project is a modern rewrite of Foliate and uses Next.js and Tauri as part of its technology stack. It is released under the AGPL-3.0 license, making the source code available for inspection, modification, and contribution.

Key Features of Readest

Wide Format Support

Readest supports a broad range of formats, including:

  • EPUB

  • PDF

  • MOBI

  • AZW3

  • FB2

  • CBZ

  • TXT

This makes it useful as a general reading application rather than an EPUB-only reader.

Customizable Reading Experience

Readers can adjust typography, fonts, margins, spacing, themes, and reading layouts. Both scrolling and paginated reading modes are available, allowing users to choose an experience that suits the book and device.

Parallel Reading

One of Readest's most interesting features is Parallel Read. It allows two books or documents to be displayed side by side with synchronized navigation.

This is particularly useful for comparing translations, studying textbooks, reading technical documentation, or working with two related documents.

Notes and Highlights

Readest provides tools for highlighting passages, creating notes, and bookmarking important sections. These features make it suitable for studying and research as well as casual reading.

Annotations can also be exported, while integrations with services such as Readwise and Hardcover provide additional ways to manage reading information.

Text to Speech

The built-in text-to-speech functionality allows users to listen to supported books instead of reading them manually. Readest supports on-device, browser, and cloud TTS options depending on the platform and configuration.

Translation and Lookup

Readers can select passages and use integrated tools for translation or terminology lookup without leaving the book. DeepL, Wikipedia, and Wiktionary integrations make this particularly useful for language learners and readers working with unfamiliar subjects.

Cross-Device Sync

Readest can synchronize reading progress, highlights, notes, and library information across supported devices. It also supports integration with OPDS catalogs and personal Calibre libraries.

The project also supports synchronization with KOReader, which is especially useful for users who read on dedicated e-ink devices.

Local-First Approach

Readest emphasizes privacy and control over personal reading data. The application can be used locally, while cloud synchronization is available when users want it. The project states that it does not require forced accounts or data harvesting.

Web Version

A web version makes it possible to access the reading experience without installing a desktop or mobile application. This complements the native applications and makes the platform more flexible for users working across different devices.

Download Readest v0.12.12 - Software Mirrors

Readest v0.12.12 for Windows

Readest_0.12.12_x64-setup.exe | 55.21 MB

Readest_0.12.12_x64-portable.exe | 88.12 MB

Readest_0.12.12_arm64-setup.exe | 53.59 MB

Readest_0.12.12_arm64-portable.exe | 79.3 MB

Readest v0.12.12 for macOS

Readest_0.12.12_universal.dmg | 67.51 MB

Readest v0.12.12 for Linux

Readest_0.12.12_arm64.deb | 173.55 MB

Readest_0.12.12_amd64.deb | 170.57 MB

Readest_0.12.12_amd64.AppImage | 202.72 MB

Readest_0.12.12_aarch64.AppImage | 193.86 MB

Readest-0.12.12-1.x86_64.rpm | 135.63 MB

Readest-0.12.12-1.aarch64.rpm | 134.13 MB

Readest v0.12.12 for Android

Readest_0.12.12_universal.apk | 205.59 MB

Readest_0.12.12_arm64.apk | 54.36 MB

Others Download related to Readest v0.12.12

send-to-readest-0.2.1.zip | 467.07 kB

Readest_0.12.12_universal.app.tar.gz | 67.1 MB

Readest-0.12.12.crosspoint-plugin.zip | 8.27 kB

Readest-0.12.12.calibre-plugin.zip | 43.62 kB

Readest-0.12.12-1.koplugin.zip | 5.53 MB

Readest v0.12.12 Source Code

Readest v0.12.12 Source code (zip)

Readest v0.12.12 Source code (tar.gz)

Readest v0.12.12 Release Notes:

Release Highlights

  • Text-to-Speech: You can now listen sentence by sentence and loop a passage with A-B repeat, control playback from your desktop's Now Playing controls
  • Reading: Added dialogue highlighting for quoted speech, a Column Gap setting for two-page spreads
  • Sync: Added a Readest plugin for CrossPoint e-readers for reading progress sync
  • Sync: You can now sync reading progress to Pagebound, sign in to Hardcover more easily, and note edits are no longer overwritten by older synced copies
  • PDF: PDFs now blend smoothly with your reading theme with smart image inversion, show page thumbnails in the table of contents
  • PDF: Highlighting and text selection on scanned PDFs is smoother and more accurate, and very large scanned pages no longer crash the reader on iOS
  • Translation: You can now add your own translation providers with a reusable prompt library, look up words with an AI context dictionary
  • Annotations: A global note now appears on every occurrence of its text, exports can include the sentence around each highlight
  • Android: Added home screen widgets for your current book and bookshelf, automatic e-ink full refresh every few page turns
  • More: Images now have a long-press and right-click menu to copy or save them, Windows shows PDF thumbnails in Explorer

What's Changed

  • fix(koplugin): fix sync on Android, library pull ANR, and Rescan library by @chrox in #6364
  • chore(agent): add koreader-e2e skill for on-device plugin testing by @chrox in #6366
  • fix(reader): fall back to saving a file when the gallery save fails by @chrox in #6367
  • fix(windows): drop the broken native shadow on Windows 10 by @k6G52m4Dz75W in #6362
  • perf(android): cut the arm64 apk from 90MB to 57MB by @chrox in #6368
  • fix(build): repair the Docker and Nix builds after #6368 by @chrox in #6379
  • fix(settings): reset update preferences with behavior settings by @hulkbig in #6369
  • fix(android): open Readest from TTS media controls by @kelvinalfaro in #6370
  • fix(reader): handle footnote links in paragraph mode by @hulkbig in #6365
  • feat(reader): add dialogue highlighting for quoted speech by @WantenMN in #6376
  • chore(deps): bump the github-actions group with 7 updates by @dependabot[bot] in #6387
  • fix(annotator): clear the pre-drag range when a highlight is resized by @hulkbig in #6357
  • fix(reader): keep the sidebar toggler in place when the sidebar opens by @chrox in #6435
  • fix(payment): revoke one-time Stripe purchases on refund by @chrox in #6436
  • fix(android): detect e-ink readers whose manufacturer prop reports the SoC vendor by @k6G52m4Dz75W in #6392
  • refactor(settings): organize the font panel around the role each font plays by @k6G52m4Dz75W in #6325
  • fix(settings): restore scroll position on reopen by @WantenMN in #6389
  • fix(web): decode binary files read as text by @WestXu in #6402
  • fix(library): skip copying a book file onto itself on import by @WestXu in #6403
  • fix(backup): restore orphan books whose library row was deleted by @WestXu in #6405
  • fix(sync): push existing notes on the first open of a book by @WestXu in #6404
  • fix(reader): keep the footer clear of rounded screen corners on Android by @davidfvaquero in #6429
  • perf(reader): parallelize the EPUB open path by @shiningsprk-arch in #6406
  • fix(telemetry): stop PostHog traffic when the setting is off by @itsmunzir in #6434
  • feat(widget): configurable Android bookshelf widget by @RedHatter in #6430
  • fix(windows): draw the missing window frame on Windows 10 by @k6G52m4Dz75W in #6399
  • fix(koplugin): prompt to log in again when the session has expired by @chrox in #6445
  • fix(koplugin): avoid crash when synced position can't be resolved by @stantonb in #6441
  • fix(sync): refuse Readest Cloud book uploads while Books sync is off by @chrox in #6446
  • feat(widget): improve bookshelf widget configuration by @RedHatter in #6440
  • feat(settings): reverse mouse wheel paging and hide e-ink bookshelf buttons by @chrox in #6448
  • fix(reader): update chapter pages left on every page turn by @chrox in #6447
  • fix(tts): let the play/pause media key resume TTS on desktop by @chrox in #6452
  • fix(sync): stop creating OneDrive folders that Graph now rejects by @chrox in #6451
  • fix(library): skip hidden subdirectories when scanning folders to import by @chrox in #6453
  • docs(sync): make the write-parent precondition provider-neutral by @chrox in #6455
  • fix(library): page the e-ink library with volume keys by @chrox in #6456
  • feat(tts): native desktop Now Playing for macOS, Windows and Linux by @chrox in #6457
  • fix(nix): add the desktop Now Playing crates to Cargo.cef.lock by @chrox in #6459
  • fix(reader): turn the page when tapping a page-filling image by @chrox in #6458
  • fix(library): skip per-book toasts for bulk downloads by @chrox in #6463
  • feat(annotator): make keeping the selection after an instant lookup optional by @chrox in #6460
  • fix(koplugin): remove sync response files left behind by exit-time syncs by @chrox in #6461
  • fix(ios): resume audiobook natively after a CarPlay interruption ends by @chrox in #6462
  • feat(reader): import MHTML web archives, closes #6413 by @chrox in #6464
  • fix(annotator): close selection popup after choosing a highlight color by @kelvinalfaro in #6465
  • fix(reader): close lookup popups when their selection is cleared by @chrox in #6467
  • fix(sidebar): keep the annotations list still when the clicked note is visible by @chrox in #6468
  • feat(tts): pause longer after questions, exclamations and ellipses, closes #6412 by @chrox in #6469
  • fix(library): keep Date Read order when grouping, tagging or editing metadata by @chrox in #6470
  • test(player): fix flaky podcast session-end tests by @chrox in #6472
  • fix(reader): keep the footer clear of rounded screen corners on iPhone by @chrox in #6474
  • fix(reader): hold the horizontal pan lock through momentum swipes on iOS by @chrox in #6475
  • fix(reader): keep note editor and highlight toolbar open in footnote popups, closes #6395 by @chrox in #6477
  • fix(transfer): allow uploads and downloads under a custom data location, closes #6383 by @chrox in #6478
  • chore(agent): update agent memories by @chrox in #6479
  • fix(library): center the empty library state again by @chrox in #6482
  • ci(android): give the Android build step 90 minutes by @chrox in #6483
  • fix: empty library state over a lingering search, and a dropped dictionary card tap by @chrox in #6485
  • fix(backup): save iOS backups through the share sheet instead of hanging at 0%, closes #6375 by @chrox in #6486
  • chore(linux): catch up the CEF runtime with upstream feat/cef, closes #6397 by @chrox in #6487
  • fix(library): download selected Audiobookshelf items for offline from select mode by @chrox in #6489
  • feat(backup): include reading statistics in library backups, closes #6488 by @chrox in #6490
  • fix(reader): remove the line between zoomed images in Webtoon Mode, closes #6484 by @chrox in #6491
  • test(paginator): rest before release so the drag test commits on distance alone by @chrox in #6493
  • fix(desktop): open books in a new window after closing another reader, closes #6363 by @chrox in #6496
  • fix(desktop): reopen the library when Readest is relaunched with only reader windows open, closes #6394 by @chrox in #6495
  • fix(search): ignore soft hyphens when searching book text, closes #6384 by @chrox in #6494
  • fix(ui): stop iOS 16 reloading to the library when a toggle or slider renders, closes #6355 by @chrox in #6497
  • feat(annotations): optionally export the sentence around each highlight, closes #6352 by @chrox in #6498
  • feat(tts): skip Hanja glosses after Hangul in Korean text by @chrox in #6500
  • feat(annotator): show a global note on every occurrence of its text, closes #6186 by @chrox in #6501
  • feat(settings): give Nearby BookDrop its own section in Integrations, closes #6360 by @chrox in #6499
  • fix(ios): keep swipe brightness in sync with the system brightness, closes #6374 by @chrox in #6502
  • feat(android): probe Hanvon eink service for full refresh by @k6G52m4Dz75W in #6505
  • fix(reader): animate page turns for PDF and comics on Windows and Linux, closes #6380 by @chrox in #6506
  • fix(reader): stop the sidebar-width flash on Windows and Linux page turns by @chrox in #6509
  • feat(annotator): edit highlight ranges and notes inside footnote popups, closes #6504 by @chrox in #6510
  • fix(reader): keep the selected word readable in dark mode, closes #6503 by @chrox in #6512
  • fix(annotator): open imported highlights on tap, closes #6160 by @chrox in #6515
  • fix(annotator): keep the highlight toolbar off the footnote popup, closes #6390 by @chrox in #6514
  • feat(reader): show Duokan slim covers on tall mobile screens, closes #6513 by @chrox in #6516
  • feat(reader): optionally mark italic text in dialogue highlighting, closes #6517 by @chrox in #6522
  • fix(ios): keep chrome and page content clear of iPhone Duo's side status strip by @kad-air in #6312
  • chore(deps): bump the github-actions group with 3 updates by @dependabot[bot] in #6523
  • feat(layout): Column Gap setting for two-column spreads by @kad-air in #6507
  • fix(ios): hide the status bar through the view controller for Xcode 27 builds by @kad-air in #6508
  • fix(android): focus the WebView on cold start so the first page-turn key isn't lost by @RedHatter in #6519
  • feat(widget): currently reading Android widget and widget options by @RedHatter in #6518
  • fix(pdf): stop huge scanned pages crashing or blanking the reader on iOS, closes #6521 by @chrox in #6526
  • feat(android): automatic e-ink full refresh every N page turns by @k6G52m4Dz75W in #6525
  • feat(sync): sync reading progress to Pagebound, closes #6511 by @chrox in #6528
  • fix(reader): show Hardcover status on the sync row and push on tap by @RedHatter in #6527
  • feat(windows): PDF thumbnails and Explorer preview pane, closes #6524 by @chrox in #6533
  • feat(dictionary): look up Wiktionary in the book language's own edition, closes #6529 by @chrox in #6534
  • fix(settings): align the BookOrbit sync rows with the rest of the card by @chrox in #6535
  • fix(library): erase cloud progress and notes when purging reading data, closes #6532 by @chrox in #6536
  • fix(epub): show whole pages of comics with unsized SVG page images by @chrox in #6537
  • fix(bookorbit): list unmatched books for linking when only progress or stats sync is on by @chrox in #6539
  • fix(calibre): push custom columns in the shape bookshelf filters read by @chrox in #6538
  • fix(reader): remove note bubbles when deleting highlights by @kelvinalfaro in #6545
  • fix(windows): stop the main window from growing on every launch by @k6G52m4Dz75W in #6546
  • feat(pdf): smooth theme colors and smart invert for PDFs by @chrox in #6550
  • fix(notes): keep note edits from losing to the synced copy they change, closes #6544 by @chrox in #6551
  • feat(crosspoint): Readest plugin for CrossPoint e-readers by @chrox in #6547
  • chore(agent): update agent memories by @chrox in #6554
  • feat(reader): turn PDF pages with the mouse wheel in Fit Width mode by @chrox in #6555
  • feat(reader): show PDF page thumbnails in the TOC, closes #6177 by @chrox in #6553
  • fix(reader): keep PDF selections from jumping across text gaps, closes #5599, closes #4945 by @chrox in #6559
  • feat(crosspoint): web-only sign-in, in-app linking, and recently read books first by @chrox in #6561
  • fix(reader): drop the horizontal scrollbar from fit-width PDFs by @chrox in #6560
  • fix(reader): stop the page container's fade on e-ink panels by @k6G52m4Dz75W in #6565
  • fix(audiobookshelf): fetch a synced audiobook's cover before shelving it by @chrox in #6564
  • feat(reader): copy and save book images from one right-click menu by @chrox in #6567
  • fix(reader): keep a selection from jumping next to a footnote marker, closes #6566 by @chrox in #6569
  • fix(crosspoint): paint /link in the user's theme by @chrox in #6570
  • fix(reader): stop annotation cards expanding while scrolling on iOS, closes #6568 by @chrox in #6571
  • fix(utils): treat Korean as CJK in getLanguageInfo by @sx4im in #6572
  • fix(deps): resolve open Dependabot alerts by @chrox in #6573
  • fix(reader): set plain-text footnotes in the reader font by @kelvinalfaro in #6575
  • fix(reader): keep a linked footnote's font in its popup, closes #3602 by @chrox in #6580
  • docs(readme): serve the Ask DeepWiki badge from shields.io by @chrox in #6585
  • fix(reader): smooth highlights on scanned PDFs and keep ones dragged past a page's end, closes #6578 by @chrox in #6581
  • fix(reader): keep the e-ink battery percentage readable at any charge by @chrox in #6588
  • feat(reader): edit a book's metadata from Book Details in the reader, closes #6584 by @chrox in #6587
  • fix(reader): select and deselect in the clicked chapter at scroll-mode boundaries, closes #6583 by @chrox in #6591
  • fix(reader): keep the dragged range when a PDF instant highlight runs past the page by @chrox in #6597
  • fix(windows): stop the PDF preview pane from freezing Explorer, closes #6590 by @chrox in #6594
  • feat(crosspoint): plugin updates, version display, and sync for optimized EPUBs by @chrox in #6592
  • feat(translation): custom translation providers with a prompt library by @chrox in #6582
  • fix(reader): remember where a locked, zoomed PDF page is panned across reopening by @chrox in #6595
  • feat(shortcuts): bind several keys to one action, closes #6600 by @chrox in #6603
  • feat(reader): open the image menu with a long press on iOS and Android, closes #6574 by @chrox in #6601
  • fix(koplugin): stop BookDrop start errors popping up on every launch by @chrox in #6604
  • feat(reader): show a PDF's header and footer only at the page's own edges, closes #6596 by @chrox in #6605
  • fix(reader): keep pull-to-bookmark off the top screen edge, enable it on e-ink, and size the ribbon consistently, closes #6599 by @chrox in #6606
  • fix(reader): return to the open book when leaving the account page, closes #6607 by @chrox in #6609
  • fix(reader): reject backslash redirects and retry failed books on return by @chrox in #6610
  • feat(dictionary): context dictionary, closes #5544 by @nphng15 in #5881
  • fix(crosspoint): link an optimized copy to the book being read when duplicates tie by @chrox in #6614
  • fix(sync): don't let a deleted copy's position pull a new copy forward by @chrox in #6615
  • fix(reader): apply scroll overlap to fixed-layout books only; tidy the fixed-layout view menu by @chrox in #6621
  • fix(windows): show the main window only after the themed page is painted by @k6G52m4Dz75W in #6611
  • fix(library): carousel cover spine, Rename Group, Import Books placement, reader return transition by @chrox in #6624
  • fix(library): keep nested groups when renaming a group by @chrox in #6625
  • feat(library): badge the series index on covers inside a series group by @kelvinalfaro in #6579
  • fix(reader): keep scrolled PDFs smooth on iOS: virtualize the strip, hide PDF chrome by layout by @chrox in #6626
  • feat(tts): sentence-by-sentence mode and A-B repeat by @chrox in #6627
  • feat(hardcover): sign in with OAuth using the device authorization flow by @RedHatter in #6612
  • fix(hardcover): follow API rate limits and batch journal writes by @RedHatter in #6617
  • fix(dictionary): lift dark text colors in dark mode by @itsmunzir in #6622
  • fix(widget): keep E-ink reading widget text legible in dark mode by @chrox in #6628
  • feat(library): hide the bookshelf page buttons by default on e-ink by @chrox in #6631
  • fix(reader): save library progress before the app quits (#6623) by @chrox in #6633
  • chore(agent): update agent memories by @chrox in #6634
  • fix(import): pick the declared cover when holds an href by @chrox in #6635
  • feat(hardcover): use the account's default visibility for new journal entries by @RedHatter in #6638
  • fix(opds): load plain-http covers natively on iOS/macOS (#6637) by @chrox in #6639
  • fix(library): keep the bookshelf column count while dragging a file in by @chrox in #6640
  • fix(library): search book contents only within the opened group by @chrox in #6641
  • fix(library): keep the shelf scroll position after opening a book by @chrox in #6642
  • release: version 0.12.12 by @chrox in #6644

New Contributors

  • @hulkbig made their first contribution in #6369
  • @WestXu made their first contribution in #6402
  • @davidfvaquero made their first contribution in #6429
  • @shiningsprk-arch made their first contribution in #6406
  • @itsmunzir made their first contribution in #6434
  • @RedHatter made their first contribution in #6430
  • @stantonb made their first contribution in #6441
  • @sx4im made their first contribution in #6572
  • @nphng15 made their first contribution in #5881
Full Changelog: v0.12.10...v0.12.12

Performance and User Experience

Readest has a clean interface that focuses on reading rather than surrounding the user with unnecessary controls. The application feels closer to a modern productivity tool than a traditional ebook utility.

Its biggest strength is the combination of simple reading features with tools aimed at deeper study. Side-by-side reading, annotations, translation, TTS, and customizable typography make it useful for everything from casual novels to technical books and academic material.

The project is also developing quickly. Recent releases have improved library performance, PDF support, reading layouts, synchronization, OPDS management, and accessibility.

Because Readest is still actively evolving, users should expect some features and interfaces to change over time.

Pros

  • Free and open source.

  • Supports EPUB, PDF, MOBI, AZW3, FB2, CBZ, and TXT.

  • Available on Windows, macOS, Linux, Android, iOS, and the web.

  • Clean and customizable reading interface.

  • Side-by-side Parallel Read mode.

  • Highlights, notes, and bookmarks.

  • Text-to-speech support.

  • Translation and dictionary tools.

  • Cross-device synchronization.

  • OPDS and Calibre support.

  • KOReader synchronization.

  • Local-first and privacy-focused design.

  • Active development.

Cons

  • Some advanced functionality is still evolving.

  • Cloud-based features may require additional configuration or services.

  • Users looking for a very minimal ebook reader may find the feature set extensive.

  • The ecosystem is smaller than established commercial ebook platforms.

Who Should Use Readest?

Readest is an excellent choice for students, researchers, developers, language learners, academics, and anyone who reads across multiple devices.

It is particularly appealing to people who want more control over their ebook library while still having modern conveniences such as synchronization, text-to-speech, annotations, translation, and OPDS support.

For users who already have a Calibre library or use KOReader on an e-ink device, Readest is also worth considering because of its interoperability with those ecosystems.

Final Verdict

Readest is one of the most impressive open source ebook readers currently available. It combines the simplicity of a traditional reader with features normally found across several separate applications.

The ability to read multiple formats, compare books side by side, annotate documents, translate passages, listen through TTS, and synchronize reading progress across platforms gives Readest a strong advantage over basic ebook readers.

It is not simply trying to replace a conventional EPUB viewer. Its focus on deep reading, study, interoperability, and cross-platform access makes it a compelling choice for anyone who wants a more complete reading environment while keeping their books and data under their control.

Readest v0.12.12
Free
Software Informations:
Developer:

Operating System:
Windows / macOS / Linux / Android
Date Added:
2026-10-05T13:03:29.041Z