This is the Telegram Subscription App for Remnawave (https://remna.st/). The page allows see their subscriptions directly through Telegram. As a requirement for using the page, the Telegram ID must be set in the user's profile to ensure proper identification and linking of subscriptions.
- View your subscriptions in the mini app
- Multi-language support (English, Russian)
The application requires the following environment variables to be set:
| Variable | Description |
|---|---|
REMNAWAVE_PANEL_URL |
Remnawave Panel URL, can be http://remnawave:3000 or https://panel.example.com |
REMNAWAVE_TOKEN |
Authentication token for Remnawave API |
BUY_LINK |
The URL for purchase actions |
CRYPTO_LINK |
Allows using encrypted links (currently supported Happ application). If no applications supporting cryptolink are present in app-config.json configuration, these links will not be displayed(true/false) |
AUTH_API_KEY |
If you use "Caddy with security" or TinyAuth for Nginx addon, you can place here X-Api-Key, which will be applied to requests to Remnawave Panel. |
REDIRECT_LINK |
Use this link to fix deeplink issues on Windows. It bypasses OS-level restrictions. More details https://github.com/maposia/redirect-page |
TELEGRAM_BOT_TOKEN |
Telegram bot token(allow multiple, see .env.example) |
FORCE_SNOWFLAKES |
Allows snowfall on main page(true/false) |
CUSTOM_SUB_DOMAIN |
Enables custom subdomain functionality for subscription links (true/false) |
| Remnawave | MiniApp |
|---|---|
| 1.6 - 2.3.9 | 2.3.4 |
| 2.4.x | 3.x.x |
| 3.0.0 and newer | 4.0.0 and newer |
-
Create new directory for mini app
mkdir /opt/remnawave-telegram-sub-mini-app && cd /opt/remnawave-telegram-sub-mini-app
-
Download and configure the environment variables.
curl -o .env https://raw.githubusercontent.com/maposia/remnawave-telegram-mini-bot/refs/heads/main/.env.example
-
Configure the environment variables.
nano .env
-
Create docker-compose.yml file
nano docker-compose.yml
Example below.
services:
remnawave-mini-app:
image: ghcr.io/maposia/remnawave-telegram-sub-mini-app:latest
container_name: remnawave-telegram-mini-app
hostname: remnawave-telegram-mini-app
env_file:
- .env
restart: always
ports:
- '127.0.0.1:3020:3020'
# networks:
# - remnawave-network
#networks:
# remnawave-network:
# name: remnawave-network
# driver: bridge
# external: trueUncomment if you want to use local connection via single network in docker
networks:
- remnawave-network
networks:
remnawave-network:
name: remnawave-network
driver: bridge
external: true- Run containers.
docker compose up -d && docker compose logs -f - Mini app is now running on http://127.0.0.1:3020
Now we are ready to move on the Reverse Proxy installation.
You can customize the subscription page in the Subpage Builder in Remnawave Dashboard. This allows you to:
Add support for different VPN apps Customize text and instructions in multiple languages Add your own branding (logo, company name, support links) Configure which apps appear as "featured"
When CUSTOM_SUB_DOMAIN=true, you can use custom domains for subscription links by configuring response headers in external squads.
- Set
CUSTOM_SUB_DOMAIN=truein your environment variables - In the Remnawave Panel, navigate to the external squad configuration
- Add a response header with the following specifications:
- Header Name:
X-Subscription-Domain - Header Value: Your custom domain URL (e.g.,
https://custom-domain.com)
- Header Name:
When enabled, the system will:
- Extract the path from the original subscription URL (e.g.,
/sSwssdWxe6wPuC) - Replace the domain with your custom domain from the header
- Preserve the original path, resulting in URLs like:
https://custom-domain.com/sSwssdWxe6wPuC
This allows you to serve subscription links through your own domain while maintaining the original subscription paths.
-
Pull the latest Docker image:
docker compose pull
-
Restart the containers:
docker compose down && docker compose up -d
We welcome contributions, especially in making the app accessible to more users!
If you want to add a new language for "no sub or need buy" page :
-
Add the translation file: Create a new JSON file in
public/locales/{languageTag}.jsonwith your translations. -
Register the new locale: Open
src/core/i18n/config.tsand add your language tag to thelocalesarray:export const locales = [defaultLocale, 'ru', '{languageTag}'] as const;
Tip
Note on Language Tags: The {languageTag} must match the tag used in your Remnawave Panel settings under the Subscription Page configuration section.
