add docs/use

This commit is contained in:
zuckerhalo
2025-10-13 16:11:48 +03:00
parent d926057828
commit c65e46d9c3
52 changed files with 652 additions and 0 deletions

4
docs/use/_category_.json Normal file
View File

@@ -0,0 +1,4 @@
{
"label": "Use",
"position": 3
}

View File

@@ -0,0 +1,80 @@
---
title: Config Profiles
sidebar_position: 5
---
import DocCard from '@theme/DocCard';
:::warning
This article **does not** cover how to configure Xray-core itself.
For details on configuration syntax and behavior, refer to the [official Xray documentation](https://xtls.github.io/config/).
:::
As mentioned earlier, a Config Profile is essentially a full Xray-core configuration "template" for a Node. Each Profile contains everything the Node needs to run — including all Inbounds and general settings.
---
Let's try creating a new Profile.
Navigate to the `Config Profiles` section and click `Create Config Profile`.
<img src={require('./images/32.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Config Profiles list" />
After entering a name for the Profile, a configuration editor will open.
<img src={require('./images/33.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Create profile" />
Here you can add or remove Inbounds and adjust any other Xray settings.
For demonstration purposes, lets load a pre-made template using the `Load from GitHub` button.
<img src={require('./images/34.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Load from Github" />
By default, this template only contains one Inbound. Lets add a second one — `VLESS` — to the Inbounds array.
<img src={require('./images/35.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Add second inbound" />
Once you're done, return to the Config Profile list to confirm our new setup.
<img src={require('./images/36.webp').default} width="100%" style={{borderRadius: '8px'}} alt="New profile in list" />
As you can see, the new profile we just created — `Sample` — has appeared in the list.
Below the profile name, you'll notice two small icons:
* The **left** icon shows the number of **Inbounds** defined in the Profile.
* The **right** icon shows the number of **Nodes** currently using this Profile.
In our case, the `Sample` Profile contains 2 Inbounds and is not yet used by any Node.
Lets activate this profile on our Node. Go back to the Nodes settings (`Nodes``Management``Node Card``Change Profile`), select the new Profile from the list, and enable both of its Inbounds.
<img src={require('./images/37.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Activate new profile on node" />
Now that the Node is using the updated profile, head over to the `Hosts` page.
Whether you're creating a new Host or editing an existing one, youll now be able to assign the new Inbounds from this profile to that Host.
<img src={require('./images/38.webp').default} width="100%" style={{borderRadius: '8px'}} alt="New inbounds available for hosts" />
However, even though the Node is now using the new Profile and Hosts have been configured, users still wont have access to the new Inbounds — unless theyre enabled in the relevant **Internal Squad**.
Lets fix that.
Navigate to the `Internal Squads` page and edit the only available squad — `Default-Squad`.
<img src={require('./images/39.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Editing Internal Squad" />
As you can see, only the `Shadowsocks` Inbound is currently enabled.
Lets enable the remaining Inbounds from the new Profile.
<img src={require('./images/40.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Enable all inbounds in squad" />
Now that everything is set, click `Save` to apply the changes and finish creating your custom Config Profile.
---
```mdx-code-block
<DocCard
item={{ type: 'link', label: 'Templates', description: 'Define what client applications receive.', href: '/docs/use/templates' }}
/>
```

92
docs/use/hosts.md Normal file
View File

@@ -0,0 +1,92 @@
---
title: Hosts
sidebar_position: 2
---
import DocCard from '@theme/DocCard';
Think of a Host as the gateway that directs users to your Nodes.
When users get a **subscription URL** and add it to their client app, the app fetches a list of available Hosts. Each Host contains the connection details like server address and port, guiding the user to the right Node.
Heres how it works:
1. The user receives a subscription URL.
2. The client app retrieves a list of available Hosts.
3. The user picks a Host, which connects them to the associated Node.
For example, you could create a Host named “Finland” and configure it to serve only Finnish nodes. When a user selects “Finland” in their client app, their traffic will be routed through those Finnish nodes.
## Create a Host {#create-host}
Navigate to the `Hosts` section and click `Create new host`.
<img src={require('./images/17.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Hosts" />
This will open a modal window where you can configure the Host.
* `Host visibility` Controls whether the Host is available to users.
For example, you can create a Host but leave it disabled. In this case, it wont appear in the users subscription, and client applications wont be able to access it.
* `Remark` This is the name of the host that will be displayed in the dashboard.
For instance, if the Host uses only Finnish nodes, you might name it "Finland" to reflect that.
### Select an Inbound {#select-inbound}
Before assigning the Host to a Node, you must first select the Inbound it will be associated with.
You can only assign one Inbound for each Host.
Click the `Select` button to choose an Inbound. Youll see a familiar window listing your existing Config Profiles. This time, you're selecting a specific Inbound from any available Profile.
<img src={require('./images/18.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Create host modal" />
Lets choose `Shadowsocks` and save the selection by clicking `Apply changes`.
<img src={require('./images/19.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Select inbound" />
After selecting the Inbound, you may notice that the Port field is automatically populated. Thats expected — the Host inherits its configuration from the selected Inbound, including the port.
:::tip
In most cases, the Host's port will match the Inbounds port. However, in certain advanced Xray configurations, they may differ. Remnawave allows for this flexibility when needed.
:::
### Assign an Address {#assign-address}
The final and arguably most important field is the `Address`. This defines where users will connect when they select this Host.
You can enter either an **IP address** or a **domain name**. However, the address you provide must resolve to the IP of the Node this Host is meant to connect to.
For example:
Lets say we previously added a Node with the IP address `1.2.3.4`.
We then created a DNS A record for `node.example.com` pointing to that IP: `node.example.org → 1.2.3.4`
In this case, we can safely use `node.example.com` as the Host's `Address`.
:::tip Why use a domain instead of a raw IP address?
While it's technically fine to use an IP address, its not ideal in practice. IP addresses can change. If that happens, users will need to refresh their subscription to get the new IP. However, many client applications dont handle subscription updates reliably.
Using a domain name solves this problem. If the Nodes IP changes, you can simply update the DNS record. The domain stays the same, and users dont need to take any action.
:::
After filling out all fields, click `Save` to create a Host.
<img src={require('./images/21.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Host list" />
After creating the Host, it will appear in the list. Clicking on it will open the editing window.
### Advanced Options {#advanced-options}
With the main configuration done, the last section to look at is `Advanced Options`. These settings allow you to override specific parameters inherited from the Inbounds configuration.
<img src={require('./images/20.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Host advanced options" />
For instance, the `SNI` field lets you override the `serverNames` value. If these fields are left empty, Remnawave will fall back to the value defined in the Inbound configuration.
For most use cases, it's best to leave this section as is — unless you're sure of what you're doing.
---
```mdx-code-block
<DocCard
item={{ type: 'link', label: 'Internal Squads', description: 'With Hosts created, the next step is to create an Internal Squad.', href: '/docs/use/internal-squads' }}
/>
```

BIN
docs/use/images/1.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
docs/use/images/10.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
docs/use/images/11.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
docs/use/images/12.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

BIN
docs/use/images/13.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
docs/use/images/14.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
docs/use/images/15.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

BIN
docs/use/images/16.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
docs/use/images/17.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
docs/use/images/18.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
docs/use/images/19.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
docs/use/images/2.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
docs/use/images/20.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
docs/use/images/21.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
docs/use/images/22.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
docs/use/images/23.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
docs/use/images/24.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
docs/use/images/25.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

BIN
docs/use/images/26.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

BIN
docs/use/images/27.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

BIN
docs/use/images/28.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
docs/use/images/29.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
docs/use/images/3.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

BIN
docs/use/images/30.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

BIN
docs/use/images/31.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
docs/use/images/32.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
docs/use/images/33.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
docs/use/images/34.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
docs/use/images/35.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
docs/use/images/36.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
docs/use/images/37.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
docs/use/images/38.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
docs/use/images/39.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
docs/use/images/4.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
docs/use/images/40.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
docs/use/images/41.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
docs/use/images/42.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
docs/use/images/43.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

BIN
docs/use/images/44.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
docs/use/images/5.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
docs/use/images/6.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
docs/use/images/7.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

BIN
docs/use/images/8.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

BIN
docs/use/images/9.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View File

@@ -0,0 +1,54 @@
---
title: Internal Squads
sidebar_position: 3
---
import DocCard from '@theme/DocCard';
## What are Internal Squads? {#whats-internal-squad}
Previously, we mentioned Config Profiles, which serve as complete Xray-core configuration templates for Nodes. When setting up a Node, you assign it a Profile and choose which of its Inbounds to activate.
If a Config Profile defines how a *Node* behaves, an Internal Squad determines what a *user* can access — think of it as an access control **group**.
Each Internal Squad allows you to select which Inbounds are available to users assigned to it. You can choose any Inbounds from any existing Config Profile, offering complete flexibility when defining user permissions.
Users can be assigned to multiple Internal Squads simultaneously, and this gives you fine control over user access.
This architecture allows you to create powerful combinations.
:::tip For example
* You might have one Squad for **regular users**, with access to specific Inbounds.
* And another for **premium users**, with access to additional Inbounds.
If a user is upgraded to premium, you simply assign them to both the premium and regular Squads.
:::
## Create a Squad {#create-squad}
Navigate to the `Internal Squads` page and either click `+` to create a new Squad, or `Edit` the default one.
<img src={require('./images/23.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Internal Squad" />
In the menu that opens, youll see a list of all available Inbounds across all Config Profiles. From there, you can enable or disable specific ones for this Squad.
Since we only have one available (`Shadowsocks`), go ahead and enable it, then click `Save`.
This configuration means that any user assigned to this Squad will only have access to the `Shadowsocks` Inbound.
At the moment, all Squads are empty — they dont have any members yet.
Thats because we havent created any users. In the next step, well create a user and show you how to assign them to a Squad.
:::tip
You can **bulk**-manage Squad members by clicking the arrow next to the `Edit` button:
* `Add users` — assign all existing users to the Squad.
* `Remove users` — unassign all users currently in the Squad.
You can also see which Nodes are available to Squad members by clicking `View accessible nodes`.
:::
---
```mdx-code-block
<DocCard
item={{ type: 'link', label: 'Users', description: 'We are finally ready to create a user.', href: '/docs/use/users' }}
/>
```

135
docs/use/nodes.md Normal file
View File

@@ -0,0 +1,135 @@
---
title: Nodes
sidebar_position: 1
---
import DocCard from '@theme/DocCard';
:::warning Warning
This article does not cover the installation process for a **Remnawave Node**. For detailed installation instructions, please refer to the [installation documentation](/docs/install/remnawave-node).
:::
The Remnawave Node is the component responsible for proxying user traffic through Xray-core within the Remnawave system.
The Remnawave Panel itself **does not** contain the Xray core. This means that even if you create a user, configure Hosts, Inbounds, and everything else, the user will not be able to connect until you add a Remnawave Node.
## Nodes {#nodes}
To do that, navigate to `Nodes``Management`.
<img src={require('./images/6.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Nodes management" />
At the top, you'll see a small block of four cards displaying statistics for the current hour (e.g., if it's 4:30 PM, the stats are from 4:00 PM to 4:30 PM).
Below that, youll find the `Actions` block. Here, you can manually `Update` Node data or perform a bulk action to `Restart all nodes`.
However, before you can use these options, youll need to add at least one node by clicking `+ Create new node`.
### Node Vitals {#node-vitals}
<img src={require('./images/7.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Node vitals" />
This block contains essential parameters required to create a Node.
* **Country** Select the country where the Node is located.
* **Internal name** A name used to identify the Node within Remnawave.
* **Address** The IP address or domain name of the Node.
* **Port** The port your Node is running on.
### Consumption {#consumption}
<img src={require('./images/8.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Consumption" />
This block lets you configure how user traffic is counted using a multiplier (coefficient):
`1.0` means normal usage, `0.5` counts half the actual traffic, and `2.0` doubles it.
For instance, if a user has a 1GB data limit and the coefficient is set to `2.0`, theyll only be able to use **0.5GB** of actual traffic.
Remnawave will still report **1GB** used, and the user's status will change to `LIMITED`.
### Core Configuration {#core-configuration}
<img src={require('./images/9.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Core Configuration" />
Here, you need to select which `Config Profile` you want the Node to run on.
Since we've just set up the Panel, we only have one Profile, which was automatically generated.
Click the `Select Config Profile` button to choose a Profile.
<img src={require('./images/10.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Config Profiles" />
A menu will appear on the right, listing all available **Profiles** (e.g. Default-Profile) along with the **Inbounds** (e.g. Shadowsocks) included in each one.
:::tip
You can select **only one Profile per Node**, since each profile represents a full Xray-core configuration. Selecting multiple Profiles isnt technically possible. However, you can create custom Profiles that include multiple Inbounds. For each Node, youll be able to choose which Inbounds to enable.
Theres no limit to how many Inbounds can be active within a single Profile.
:::
For now, since `Shadowsocks` is the only available option, select it and click `Apply changes` to save your choice.
<img src={require('./images/11.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Config Profiles" />
### Tracking & Billing {#tracking-and-billing}
<img src={require('./images/12.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Tracking & Billing" />
This block contains optional settings that do not need to be filled out.
* **Infrastructure Provider** This option is currently unavailable because no providers have been set up yet — well walk through that later in the guide.
In short, a provider is the service where your server is hosted. Once you create one, youll be able to link it to a Node, and Remnawave will show that information in the Node list.
* **Track traffic usage** This checkbox determines if Remnawave will actively track usage against a set limit for this Node. The Panel always records traffic, but if you enable and configure this option, it will send you a notification when the limit is reached. The limit will also reset on the specified day.
For example:
Imagine youve rented a VPS from Hetzner, which offers 20TB of monthly traffic. Hetzner measures this as combined incoming + outgoing traffic.
Since Xray generates traffic in both directions, your practical limit is 10TB of actual usage. If Hetzner resets traffic usage on the 1st of every month, you would configure Remnawave to do the same.
Based on this, we can set the following parameters:
* `Traffic limit` The traffic cap in GB. For 10TB, this equals 10,240GB.
* `Reset day` The day of the month when the traffic counter resets. In this case, `1`.
* `Notification %` The usage percentage that triggers a notification. For example, `90`.
With these settings, Remnawave will notify you when 9TB of traffic has been used. Then, on the 1st of the month, the counter resets and the cycle starts over.
### Node Management {#node-management}
<img src={require('./images/13.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Node creation" />
Once all required fields are filled in, click `Save` in the bottom right corner to create the Node.
<img src={require('./images/14.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Node list" />
As you can see, the Node you created now appears in the Node list. Within a few seconds, the Remnawave Panel will connect to the Node and start the Xray-core.
:::tip
You can monitor the Nodes status by looking at the icon to the left of its card and the cards background color.
In the center of the card, youll see the `Address` assigned to the Node during creation. To the right of that, the current traffic usage is displayed along with the number of days remaining until the counter resets (traffic refill). Further to the right, youll find the uptime of the Xray-core.
:::
<img src={require('./images/15.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Node status" />
Clicking on the Node card will open a modal window where you can edit its settings and view more details.
The highlighted block appears only after a Node has been created and connected. The labels indicate:
* **Left:** Number of connections to this Node (duplicates are counted).
* **Center:** Version of the Xray-core running on the Node.
* **Right:** Version of the Remnawave Node.
<img src={require('./images/16.webp').default} width="100%" style={{borderRadius: '8px'}} alt="More actions" />
The `More actions` button is now visible, giving you access to additional features:
* `Show usage` Opens a modal displaying detailed usage statistics for the Node by user over a selected time period. Since theres no data yet, well revisit this later.
* `Copy Node UUID` Copies the Nodes UUID, useful for API operations.
* `Disable` Deactivates the Node.
* `Delete` Permanently removes the Node.
---
```mdx-code-block
<DocCard
item={{ type: 'link', label: 'Hosts', description: 'After creating your first Node, the next step is to configure a Host.', href: '/docs/use/hosts' }}
/>
```

105
docs/use/quick-start.md Normal file
View File

@@ -0,0 +1,105 @@
---
title: Initial Setup
sidebar_position: 0
---
import DocCard from '@theme/DocCard';
In this guide, we'll walk you through the essential features of the Remnawave Panel, helping you get up and running quickly.
We will cover every step, from your first login to the Panel to importing a subscription into a client application.
:::warning Note
* This guide is written for Panel **version 2.0** and newer.
* This guide also assumes that you have already installed Remnawave and its components.
* Some UI elements have changed their appearance in recent updates, but dont worry — the functionality is largely unchanged, and this guide remains up to date.
:::
## Getting Started {#first-steps}
After you've installed the Panel and its necessary components, the admin interface will be accessible through browser — navigate to the domain you've assigned the Panel to.
<img src={require('./images/1.webp').default} width="100%" style={{borderRadius: '8px'}} alt="First steps" />
First, you need to create a user. The first user to register automatically becomes the "super-admin."
:::tip Tip
If you ever forget your password, you can always recreate the super-admin account using the Rescue CLI.
To access the Rescue CLI, use the command: `docker exec -it remnawave remnawave-rescue-cli`
:::
---
## Home Page {#home}
After registration, you will be taken to the main dashboard.
<img src={require('./images/2.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Home page" />
Let's break down the elements on this page.
### Remnawave Statistics {#remnawave-stats}
<img src={require('./images/3.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Remnawave stats"/>
The first two blocks, `Remnawave Usage` and `Process Details`, show you how Remnawave is currently utilizing system resources.
In `Process Details`, you can see which internal Remnawave processes are consuming the most resources.
Depending on your configuration, there may be more than one REST-API process.
### Bandwidth Usage {#bandwidth}
<img src={require('./images/4.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Traffic usage"/>
This block displays overall traffic usage statistics for all users, with a comparison to the previous equivalent period.
For example, let's consider the `Today` metric. If you open the Panel at 4:00 PM, this block will show statistics from 12:00 AM to 4:00 PM today. However, the comparison will be against the *entire* previous calendar day (from 12:00 AM to 11:59 PM).
Currently, the screenshot shows all zeros, but after we configure everything and connect a user, this block will reflect real data.
### Users {#home-users}
<img src={require('./images/5.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Users"/>
1. `System``Total online on nodes`
* This displays the total number of online connections across all Nodes. A single user can be connected to multiple Nodes **simultaneously**. This figure represents the sum of all connections on all Nodes, including duplicates.
* **For example**: If User X is connected to Node A and Node B at the same time, this card will show 2 online connections.
2. `Online stats`
* This block displays the total number of unique online users, not counting duplicates.
* **For example**: If User X is connected to Node A and Node B, this card will show 1 online user.
3. `Users`
* This block shows general information about all users.
* **For example**: If you have two users — User X and User Z — the `Total` will display 2. If User X has an active subscription and User Zs subscription has expired, then the `Active` and `Expired` counts will show 1 each.
### Navigation Menu {#nav}
On the left side you will see the navigation menu:
1. **Overview** — Contains the `Home` page, which displays high-level statistics and system information. We covered this earlier in the guide.
2. **Management** — This is the core section of the Panel — you'll spend most of your time here. It includes:
* `Users` - Create and manage [Users](/docs/use/users).
* `Internal Squads` - Configure [Internal Squads](/docs/use/internal-squads).
* `Config Profiles` - Create and manage [Xray-core configurations](/docs/use/config-profiles).
* `Nodes`:
- `Management` - View, edit, disable, or delete [Nodes](/docs/use/nodes).
- `Statistics` - Review detailed usage statistics per Node.
- `Infra Billing` - Track infrastructure costs.
- `Bandwidth` - Analyze traffic consumption across Nodes.
- `Metrics` - Access live telemetry from Prometheus.
* `API Tokens` - Manage [API access](/api) to your Panel.
3. **Tools** - the section with useful tools for reviwing data collected by the Panel about your users.
* `HWID Inspector` - View hardware IDs reported by client apps.
* `SRH Inspector` - Analyze subscription requests sent from client apps.
4. **Subscription** - Configure what the client app receives when fetching the subscription.
* `Settings` - Manage additional metadata sent to supported clients, such as Subscription Name.
* `Templates` - Define how the configuration is generated for the client apps' cores.
5. **Utilities** - Tools designed to simplify and automate common tasks.
* `Happ Routing` - A rule builder for creating and managing routing rules for Happ.
* `Subscription Page` - Customize the content of the [Subscription Page](/docs/install/subscription-page/customization).
---
```mdx-code-block
<DocCard
item={{ type: 'link', label: 'Nodes', description: 'Once youve created a super-admin and explored the Home page, your next step is to set up your first Node.', href: '/docs/use/nodes' }}
/>
```

71
docs/use/templates.md Normal file
View File

@@ -0,0 +1,71 @@
---
title: Templates
sidebar_position: 6
---
import DocCard from '@theme/DocCard';
As mentioned earlier, when you create a user, theyre assigned a Subscription URL.
You probably noticed that when we opened our subscription URL in a browser, we saw a human-readable webpage. But when we added the same URL to a client app, it imported without any issues.
This happens because Remnawave automatically detects which client application is making the subscription request:
When opened from a browser, Remnawave recognizes it and serves the webpage.
When a request comes from a client application, Remnawave delivers the subscription in the appropriate format based on the client type.
You can customize what the client app receives in the `Templates` section. Since many client apps use different cores under the hood, you will need to configure each of them individually.
Generally, subscription formats fall into four main families:
* **Mihomo**
* **Base64**
* **Xray-json**
* **Sing-box**
```mdx-code-block
<DocCard
item={{ type: 'link', label: 'Client Apps', description: 'Browse all client applications compatible with Remnawave and the cores they use.', href: '/docs/clients' }}
/>
```
<br></br>
<img src={require('./images/41.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Templates menu" />
### Mihomo {#mihomo}
<img src={require('./images/42.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Mihomo template" />
This format was originally known as Clash. However, the original Clash client and server core are no longer maintained. Theyve since been replaced by Mihomo, which is now the de facto successor.
:::tip Learn More
You can find the Mihomo documentation [here](https://wiki.metacubex.one/config/).
---
Mihomo supports special Remnawave keys. Check out this [article](/docs/guides/templates/mihomo) to learn more.
:::
### Xray-json {#xray-json}
<img src={require('./images/43.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Xray-json template" />
This is one of the newer formats, used in client applications that are based on the Xray core.
:::tip Learn More
You can find the Xray documentation [here](https://xtls.github.io).
:::
### Sing-box {#sing-box}
<img src={require('./images/44.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Sing-box template" />
This format is analogous to Xray-json but is used in client applications based on the Sing-box core.
:::tip Learn More
You can find the Sing-box documentation [here](https://sing-box.sagernet.org/configuration/).
:::
### Base64 {#base64}
There is no template for this format. It is one of the oldest formats and consists of a simple list of server configurations, separated by a `\n` character and encoded in Base64.
This subscription format is used as a fallback when the client application does not match any of the other specific formats.

111
docs/use/users.md Normal file
View File

@@ -0,0 +1,111 @@
---
title: Users
sidebar_position: 4
---
import DocCard from '@theme/DocCard';
## Create a user {#create-user}
Navigate to the `Users` page and click `Create user`.
<img src={require('./images/22.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Create User" />
Start by choosing a username. It can be anything, but must not contain spaces.
Next, in the `Traffic & Limits` section, set the users data restrictions:
* `Data limit` The traffic quota in GB.
* `Traffic reset strategy` How often the traffic counter resets for this user.
For this example, well set a **1 GB** limit with a **daily reset**.
In the `Access Settings` section, configure the subscription expiration date and assign the user to one or more Internal Squads.
Lets set the subscription to expire in one month and assign the only available Squad.
<img src={require('./images/24.webp').default} width="100%" style={{borderRadius: '8px'}} alt="User settings" />
Create the user by clicking `Create user`.
<img src={require('./images/25.webp').default} width="100%" style={{borderRadius: '8px'}} alt="User table" />
After creating the user, youll return to the user list.
:::tip
Here, you can customize which columns are visible, toggle full-screen mode, and search users by specific fields — useful tools to help you efficiently manage an expanding user base.
:::
### User Management Tools {#extra-settings}
If you click the pencil icon to open the `Edit user` menu, youll notice a new button — `More actions`.
This menu includes several useful tools beyond basic user management:
1. `Detailed Info` Includes extra information such as VLESS UUIDs and Happ Crypto links.
2. `Show usage` Displays detailed traffic statistics for the user.
3. `HWIDs and Devices` Shows hardware and device info reported by client apps.
> Note: Not all apps support this feature. If its empty, the user hasnt used a compatible client.
4. `Subscription QR Code` Generates a scannable QR code for the users subscription URL.
5. `Subscription links` Displays raw subscription links like `vless://`, `ss://`, etc.
6. `Request History` Lists all requests the users client apps made to fetch the subscription.
---
Back on the `Users` page, youll see a red button with a gear icon on the right — this is the **Bulk Actions** menu.
Clicking it opens a panel where you can perform actions across **all users**.
If you want to target specific users only, you have two options:
* Use the checkboxes on the left to select them manually.
* Or use the sorting/filtering tools on the right, then click `Bulk actions`.
From the Bulk Actions menu, you can:
* Activate or deactivate selected users
* Set a unified data limit and traffic reset strategy
* Extend subscription time for all selected users
* And more
### Get the Subscription URL {#get-subscription}
<img src={require('./images/26.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Get subscription" />
After creating the user, you can easily get their subscription URL by clicking the **link icon** to copy it to your clipboard.
Alternatively, click the pencil icon next to it to open the `Edit user` menu, where the subscription URL is also available.
<img src={require('./images/27.webp').default} width="100%" style={{borderRadius: '8px'}} alt="User card" />
Opening this link in a browser will display the `Subscription Page`, confirming that everything is set up correctly.
<img src={require('./images/28.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Subscription page" />
:::tip
You can customize the Subscription Page, as explained in one of the installation [articles](/docs/install/subscription-page/customization).
:::
## Verifying the Setup {#remark-four}
Weve created a user and obtained their subscription URL. Now, lets test it by importing the subscription into a client application.
For this example, we'll use [Clash Verge Rev](https://github.com/clash-verge-rev/clash-verge-rev).
Once the subscription is imported, connect to the Node and verify that everything is working as expected.
<img src={require('./images/29.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Client connection" />
As promised, you can now view updated statistics on the Panels Home page and within the Nodes details.
<img src={require('./images/30.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Updated home stats" />
<img src={require('./images/31.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Updated node stats" />
---
```mdx-code-block
<DocCard
item={{ type: 'link', label: 'Config Profiles', description: 'Define how Nodes behave by creating Config Profiles.', href: '/docs/use/config-profiles' }}
/>
```