# Voyager for Lemmy: a mobile-first client you can host on your own nginx

> Voyager is an Apollo-style open source web client for Lemmy that ships as a PWA and as native iOS, Android, F-Droid and Flathub packages, and it can also be self-hosted. It suits readers who want mobile gestures and multiple accounts.

**aeharding/voyager** — Voyager — a beautiful app for Lemmy and Piefed

- Repository: https://github.com/aeharding/voyager
- Website: https://getvoyager.app
- Stars: 1,821 · Forks: 176
- Language: TypeScript
- License: AGPL-3.0
- Published: 2026-10-16 · Updated: 2026-10-16 · Language: en
- Canonical page: https://hysenlabs.com/projects/aeharding-voyager

## What Voyager is: Lemmy through a phone-shaped interface

Voyager describes itself as an Apollo-like open source web client for Lemmy, and the repository description widens that to Lemmy and Piefed. The design target is a thumb. The feature list is built around that: swipe gestures throughout, swipe to hide posts, a single comment thread context view, collapsible threads, and separate iOS and Android themes so the interface follows the platform conventions of whichever device you are holding.

The functional surface is a full reader client rather than a feed viewer. You can view and subscribe to communities, upvote, downvote and reply to threads and comments, edit and delete both, save and bookmark, favorite, interact with user profiles, and send messages, mentions and replies. Multiple accounts are supported, which matters on a federated network where a reader may have an account on more than one instance. Creating new posts covers url, photo and text types.

The project's argument for being a web app is threefold and stated plainly in the README: cross-platform reach across phone, tablet and desktop, self-hostability so your client cannot be taken away, and light weight because there is no large installation bundle to download. That argument is the reason to read the deployment section before deciding.

## PWA, Capacitor wrappers, and a Tauri directory in the same repo

The repository ships several targets from one TypeScript source tree. The repository includes capacitor.config.ts, android/ and ios/, while the README links to iOS, Android, F-Droid and Flathub builds. manifest.json and index.html back the installable PWA served from vger.app.

Alongside those sits src-tauri/ and a tauri script in package.json, plus a Dockerfile and nginx.conf.template, so the same code base also has a desktop shell path. The build itself is Vite, run through a prebuild step named ionic:build:before that invokes./scripts/prebuild.sh, with Ionic configuration in ionic.config.json and postcss.config.js handling styles.

Development is pnpm based, pinned through the packageManager field to pnpm@11.20.0, and the repository uses a patches/ directory with pnpm-workspace.yaml, which means patches to dependencies are part of the build rather than something you can drop. Tests come in two layers: vitest for unit level checks and playwright for e2e runs driven by playwright.config.ts, plus an eslint setup that runs with --max-warnings=0.

## Self-hosting with the Dockerfile and the NGINX_PORT knob

Most users are pointed at the store builds, and the README says so before describing the alternatives. If you want your own instance, the Dockerfile gives a two stage build on node:lts-alpine with pnpm enabled through corepack, then ships the compiled bundle into nginx. The runtime stage copies nginx.conf.template into nginx's template directory and a config generator into docker-entrypoint.d, so nginx renders its server config at container start rather than at build time.

The container listens on one non-obvious port, set through an environment variable the base image exposes:

```dockerfile
ENV NGINX_PORT=5314

EXPOSE 5314/tcp
```

The build stage also sets BUILD_FOSS_ONLY=true, and it writes APP_VERSION into .env from package.json if that key is missing, which keeps the version string in the bundle in step with the source. Anyone copying the Dockerfile should know that the whole build runs a full pnpm install and a Vite build inside the image, so a local build is not instant.

## The community deployment list is a map, not a guarantee

The README carries a long table of third-party PWA hosts across the United States, Finland, Singapore, Mexico, France, Germany, Portugal and elsewhere, each with a contact link. One entry is labelled the official Voyager PWA instance at vger.app. The table is genuinely useful for finding a fast or region-appropriate instance.

The caveat attached to it matters more than the table. The README states that community deployments are not maintained by the Voyager team, may not be synced with Voyager's source code, and that you should research the host servers yourself before using them. That is a real operational boundary: a stale deployment can be missing fixes for an ActivityPub edge case, and nothing in the client tells you which build a given host is running.

If you care about which code you are running, self-hosting is the answer rather than picking a host from the table, and nginx.conf.template plus scripts/docker_generate_config.sh are the two files to read before you expose one.

## Swipe gestures are the feature and the hazard

The interface assumes a touch screen and rewards it. Swipe to hide posts lets you prune a feed without opening anything, and the README mentions a bunch of swipe gestures alongside the named hide action. On a phone that is a genuine advantage over a desktop-first client.

On touch devices, a horizontal swipe and a back gesture can sit close together, so the interaction model may require care. Voyager also ships light and dark modes, which sounds ordinary until you consider it pairs with the per platform themes: a user switching from an iPhone to an Android phone keeps their account and settings but sees a different native styling.

Roadmap items are more customization, native notifications and badging, mod features and translations. Treat that list as a capability forecast. The roadmap lists mod features, but the current feature list does not claim dedicated moderation tools.

## Release cadence versus a federation protocol that never waits

The last push to the repository was on 2026-10-11, and tagged releases landed on 2026-09-13, 2026-09-06 and 2026-08-17 for versions 2.49.1, 2.49.0 and 2.48.5. The version in package.json is 2.49.2, so the working tree can sit slightly ahead of the newest tag, which is normal for a project releasing from main.

The licensing is AGPL-3.0. Review the AGPL-3.0 licence's source and network-use obligations before distributing or hosting a modified build.

The federation layer is the part you do not control. Voyager is a client, so its behaviour is bounded by what a given Lemmy instance exposes over its API and what the version of that API the client expects. When a client release and an instance upgrade land close together, a stale community deployment is the first thing to break.

## Where Voyager differs from other Lemmy clients

The comparison that matters is not feature count but packaging. The documented distinction here is Voyager's packaging: it uses one TypeScript source tree alongside native project directories and a web client. Voyager ships one TypeScript source and wraps it, so iOS, Android, F-Droid, Flathub and the PWA are the same interface, and the roadmap item for more customization applies to all of them at once.

The other structural difference is that Voyager is not merely a client you point at one instance. Multiple account support and the community deployment table reflect a federated reality where a reader may hold accounts in several places and may not want to depend on any single host. That is also its cost: every feature has to work against API variations across instances, which is why mod features sit on the roadmap while the core read and vote paths are the documented ones.

For an administrator, the gap is the same from either direction. Voyager's current feature list does not claim dedicated moderation tools.

## Conclusion

Adopt Voyager if you browse Lemmy from a phone, want iOS and Android themes and multiple accounts in one client, and can live with the fact that the PWA is a static bundle served by nginx. Skip it if you need moderation tooling, native notifications or translations today, since all three sit on the roadmap rather than in the feature list. Before deploying, read nginx.conf.template and scripts/docker_generate_config.sh, confirm your Lemmy instance allows the origin you will serve from, and remember that the community deployments in the README are not maintained by the Voyager team.

## FAQ

### How do I install Voyager for Lemmy?

The README points most users to native builds in the iOS App Store, Google Play, F-Droid or Flathub. If you prefer the Progressive Web App you can use a community host or run your own, and the repository ships a Dockerfile that builds the client and serves it through nginx.

### Can I self-host Voyager?

Yes. The repository includes a Dockerfile with a Vite build stage and an nginx runtime stage, plus nginx.conf.template and scripts/docker_generate_config.sh that generate the server config at container start. The container exposes port 5314 through the NGINX_PORT variable.

### Are the community Voyager instances safe to use?

The README says community deployments are not maintained by the Voyager team, may not be synced with Voyager's source code, and that you should research the host servers yourself before using one. Only the instance at vger.app is labelled the official Voyager PWA instance.

### Does Voyager support moderation or multiple accounts?

Multiple accounts are listed among current features. Mod features are on the roadmap alongside native notifications, translations and more customization, so moderation from inside the app is not something the README claims today.

## Sources

- [aeharding/voyager on GitHub](https://github.com/aeharding/voyager)
- [License: AGPL-3.0](https://github.com/aeharding/voyager/blob/main/LICENSE)
- [Project website](https://getvoyager.app)
- [README](https://github.com/aeharding/voyager/blob/main/README.md)
- [Releases](https://github.com/aeharding/voyager/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/aeharding-voyager
