Getting Started

Introduction

Row-Template is a self-contained, white-label subscription page for 3X-UI, PasarGuard and Rebecca panels — seventeen designs, one HTML file each, installed and managed with one command.

3X-UI, PasarGuard and Rebecca can each serve a custom page to subscribers instead of their built-in one. Row-Template is that page. A subscriber opens their subscription link in a browser and sees their plan, their traffic, their expiry date, and one-tap ways to add the subscription to the app they use.

It ships as one self-contained HTML file per design — every style, script, font and the QR code generator are inlined — built once for each panel’s own template engine. A single command detects your panel, installs the page next to it, points the panel at it, and gives you a row-template manager for branding, updates and rollback.

This documentation covers Row-Template 1.4.0

Supported panels: 3X-UI (MHSanaei) 3.6.0 or newer, PasarGuard 5.x, and Rebecca 1.x — the Go edition, from Rebecca’s binary install. Rebecca’s Docker image is still the 0.0.x Python edition, which cannot render this page; the installer refuses it and changes nothing. Commands and messages on this site are taken from the 1.4.0 installer. Compatibility →

How it works

  1. The installer downloads a release, verifies its SHA-256 checksum (there is no way to skip this), and finds out which panel the server runs. On a server with more than one, it asks — or, in a script, reads RT_PANEL.

  2. It installs into its own directory — /etc/3x-ui/sub_templates/row-template on 3X-UI, /etc/row-template on PasarGuard and Rebecca — then generates the page from the design you chose and your branding, validates it, and swaps it into place atomically.

  3. It points the panel at the page, changing as little as possible:

    • 3X-UI: one panel setting, the subscription theme directory (subThemeDir).
    • PasarGuard: the page goes into PasarGuard’s templates directory, and one marked block selecting it is appended to /opt/pasarguard/.env.
    • Rebecca: the page goes into Rebecca’s templates directory, and two fields of its subscription settings select it.

    On PasarGuard and Rebecca this is a transaction: the panel’s settings are snapshotted first, and restored exactly if any step fails.

  4. The panel fills the page with each subscriber’s data when it serves it. The page then keeps its status fresh by asking your own panel for updated figures, on all three panels. VPN apps that fetch the same link still receive normal subscription content.

/etc/3x-ui/sub_templates/row-template/ (3X-UI)
/etc/row-template/ (PasarGuard, Rebecca)
├── sub.html # the generated page (3X-UI serves it from here;
│ # PasarGuard and Rebecca get a copy in their templates directory)
├── config.env # your branding and selected design (data, never executed)
├── VERSION
├── PANEL # the panel this installation serves
├── dist/
│ ├── template.html # the selected design, pristine
│ └── templates/<id>/ # every design in the release, each with its checksum
├── lib/ # the management library and the transaction engine
├── panels/ # one adapter per panel
├── backups/ # snapshots used by rollback
└── backups.v2/ # PasarGuard and Rebecca: the panel's settings before activation

Why Row-Template

Private by design

The page makes no third-party requests: no CDNs, no external QR or geolocation lookups, no telemetry. Live status on 3X-UI comes from your own panel.

Genuinely white-label

Your service name, your support link, your logo. Nothing on the served page identifies Row-Template.

Seventeen designs

Same features, same languages, same safety checks on every supported panel — only the layout and look change. Row is the default.

Safe to operate

Checksum-verified releases, atomic and transactional activation, automatic restore on failure, and one-command rollback.

What it does not do

  • It never patches your panel. On 3X-UI it changes one setting, subThemeDir; on PasarGuard it adds one marked block to .env; on Rebecca it sets two fields of its subscription settings. Uninstall puts each of them back.
  • It never touches your inbounds, clients, users, nodes, hosts, certificates or the panel’s other settings.
  • It installs nothing else on your server: no Node.js, no Python, no database. It uses the tools Linux already has, plus sqlite3 if it is present.

Where to go next

Edit this page on GitHubApplies to Row-Template 1.4.0
Esc
↑↓ to navigate↵ to selectEsc to close