VVAE › User Guide

V2EX Push Notifications Setup Guide

Last updated: September 30, 2026

The V2EX website has no iOS push notifications. VVAE is a native V2EX iOS app for iPhone and iPad. With push turned on, you hear about replies, mentions, thanks and favorites within about 30 seconds. Each notification says who did what and shows the topic title and the text. Notifications for the same topic are grouped, and tapping one opens the topic.

VVAE push notifications on an iPhone Lock Screen: a reply, a mention, a thanks and a favorite, with notifications for the same topic stacked together

Push needs a small program, vvae-notifier, that you self-host on your computer, a NAS or a server.

Contents

  1. How it works
  2. Set up in four steps
  3. Other ways to deploy
  4. Multiple V2EX accounts
  5. Update or stop
  6. Proxy
  7. Status and troubleshooting
  8. Encryption and privacy

How it works

  1. Poll. vvae-notifier runs wherever you deploy it and checks your V2EX notifications every 30 seconds over that machine’s network, using the V2EX API 2.0.
  2. Encrypt. When something new arrives, it encrypts it with a key that only the app and the notifier have, and hands it to the VVAE push relay.
  3. Deliver. The relay passes the ciphertext to Apple Push Notification service (APNs). VVAE's notification extension decrypts it on your phone and shows it as "someone replied to you".

Set up in four steps

Before you start, you need

  1. In VVAE, go to Settings › Push Notifications, turn on Allow Notifications, and allow notifications when iOS asks. The app creates a V2EX access token for you. It's valid for 180 days, and opening the app renews it before it expires.
  2. Tap Copy Docker Command.
  3. Paste the command into a terminal on your machine and run it. It looks like this. VVAE_KEY is the deploy key the app generated for you, and it's different for everyone:
    docker rm -f vvae-notifier; docker run -d --name vvae-notifier \
      --hostname "$(hostname)" --restart=always \
      -v vvae-notifier:/data \
      -e VVAE_KEY='vvaepush1.…' \
      ghcr.io/vastlogic-dev/vvae-notifier:latest
    The first time, Docker says it can't find a container named vvae-notifier. That's the first part of the command removing an old container, and it doesn't affect the rest.
  4. Back in the app, Status changes to Connected and you get a "Notifier Connected" notification. From then on, new notifications arrive within about 30 seconds. Older ones from before you set it up are not sent.

What each part of the command does:

PartWhat it does
--restart=alwaysStarts the notifier again after a reboot or a crash.
--hostname "$(hostname)"Gives the container your machine's name, so the Notifiers section in the app shows where it runs.
-v vvae-notifier:/dataKeeps the notifier's state and settings, so a restart doesn't send duplicates.
-e VVAE_KEYThe deploy key. Treat it like a password.

After this, token renewals and changes to which notifications you get come from the app. You don't need to deploy again.

Other ways to deploy

NAS web UI

Create the container in your NAS's container manager (Synology Container Manager, QNAP Container Station and similar) with these settings:

Docker Compose

services:
  vvae-notifier:
    image: ghcr.io/vastlogic-dev/vvae-notifier:latest
    # optional: the machine name shown in the app
    hostname: my-nas
    restart: always
    environment:
      VVAE_KEY: ${VVAE_KEY}
    volumes:
      - data:/data

volumes:
  data:

Create a .env file in the same folder with the value from Copy VVAE_KEY in the app:

VVAE_KEY=vvaepush1.…

Then start it:

docker compose up -d

Multiple V2EX accounts

Update or stop

Update to the latest version

docker pull ghcr.io/vastlogic-dev/vvae-notifier:latest

Then run the command you copied from the app again. With Compose:

docker compose pull && docker compose up -d

Stop push notifications

Proxy

If the machine running the notifier can't reach v2ex.com, set HTTPS_PROXY. It accepts http://, https:// and socks5:// URLs, with an optional user:password@. Use NO_PROXY to exclude addresses.

If the proxy runs on the host, remember that 127.0.0.1 inside the container is the container itself. With Docker Desktop (Mac, Windows), use host.docker.internal. On Linux, use the host's LAN address or add --network host. For example:

-e HTTPS_PROXY=socks5://host.docker.internal:1080

Status and troubleshooting

Status in Settings › Push Notifications can show:

StatusWhat it means and what to do
Waiting for NotifierThe notifier hasn't checked in yet. Make sure the container is running and that VVAE_KEY was copied in full.
Notifier OfflineNo heartbeat for more than 30 minutes. You get a "Notifications Stopped" alert, and another one if it's still offline after 24 hours. Check whether the machine is off, offline, or the container has stopped.
Token InvalidYour V2EX token was deleted or revoked. Open VVAE and it creates and sends a new one.
Rate Limited by V2EXToo many API requests from the same IP. The notifier pauses until the limit resets.
Notifier ErrorA temporary network or V2EX error. The notifier retries on its own. If it doesn't recover, check the container logs.
N Notifiers RunningThe same deploy key is running in several places, so each notification arrives N times. The Notifiers section shows which machines; stop the extra ones.
Couldn't Create TokenThe app couldn't create a token on V2EX. V2EX allows 10 tokens per account; if you're at the limit, delete ones you don't use.
Notifications OffAllow notifications for VVAE in iOS Settings › Notifications.

Check the logs

docker logs vvae-notifier

The log is in Chinese. A healthy start shows 已应用配置 (config applied) and 已记录基线 (baseline recorded). The 8-character tag at the start of each line tells accounts apart.

Encryption and privacy

Still stuck? Feel free to reach us anytime at support@vastlogic.dev.