
Product
Introducing Webhook Events for Alert Changes
Add real-time Socket webhook events to your workflows to automatically receive software supply chain alert changes in real time.
@remnawave/xtls-sdk
Advanced tools
A TypeScript SDK for interacting with XRAY (XTLS) Core via gRPC API. This package provides a type-safe interface for managing and monitoring your XRAY server, including statistics, user management, and connection information.
npm install @remnawave/xtls-sdk
# or
yarn add @remnawave/xtls-sdk
# or
pnpm add @remnawave/xtls-sdk
import { XtlsApi } from '@remnawave/xtls-sdk';
// Initialize the API client
const api = new XtlsApi('127.0.0.1', '10085');
// Example: Get system statistics
const stats = await api.stats.getSysStats();
if (stats.isOk) {
console.log('System Stats:', stats.data);
}
// System Statistics
const sysStats = await api.stats.getSysStats();
// User Statistics
const userStats = await api.stats.getUserStats('username');
const allUsers = await api.stats.getAllUsersStats();
const isOnline = await api.stats.getUserOnlineStatus('username');
// Traffic Statistics
const inbounds = await api.stats.getAllInboundsStats();
const outbounds = await api.stats.getAllOutboundsStats();
All API methods return a standardized response format:
interface ISdkResponse<T> {
isOk: boolean;
data?: T;
message?: string;
code?: string;
}
Example usage:
const response = await api.stats.getSysStats();
if (response.isOk) {
// Success case
console.log('Stats:', response.data);
} else {
// Error case
console.error(`Error ${response.code}: ${response.message}`);
}
Many methods support statistics reset functionality:
// Get stats and reset counters
const stats = await api.stats.getUserStats('username', true);
Main client class for interacting with the XRAY server.
const api = new XtlsApi(ip: string, port: string);
Service for managing inbound handlers and their users.
| Method | Description | Parameters |
|---|---|---|
getInboundUsers(tag: string) | Get all users from an inbound | tag: Inbound handler tag |
getInboundUsersCount(tag: string) | Get count of users in an inbound | tag: Inbound handler tag |
removeUser(tag: string, username: string) | Remove a user from an inbound | tag: Inbound handler tagusername: User to remove |
| Method | Description | Parameters |
|---|---|---|
addTrojanUser(data: IAddTrojanUser) | Add Trojan user | data: { tag, username, password, level } |
addVlessUser(data: IAddVlessUser) | Add VLESS user | data: { tag, username, uuid, flow, level } |
addShadowsocksUser(data: IAddShadowsocksUser) | Add Shadowsocks user | data: { tag, username, password, cipherType, ivCheck, level } |
addShadowsocks2022User(data: IAddShadowsocks2022User) | Add Shadowsocks 2022 user | data: { tag, username, key, level } |
addSocksUser(data: IAddSocksUser) | Add SOCKS user | data: { tag, username, socks_username, socks_password, level } |
addHttpUser(data: IAddHttpUser) | Add HTTP user | data: { tag, username, http_username, http_password, level } |
Example usage:
// Get all users in an inbound
const users = await api.handler.getInboundUsers('main-inbound');
if (users.isOk) {
console.log('Users:', users.data.users);
}
// Add a new Trojan user
const newUser = await api.handler.addTrojanUser({
tag: 'main-inbound',
username: 'user@example.com',
password: 'secure-password',
level: 0,
});
// Remove a user
const removed = await api.handler.removeUser('main-inbound', 'user@example.com');
// Get user count
const count = await api.handler.getInboundUsersCount('main-inbound');
if (count.isOk) {
console.log('Total users:', count.data);
}
Statistics management service.
| Method | Description | Parameters |
|---|---|---|
getSysStats() | Get system statistics | None |
getAllUsersStats(reset?: boolean) | Get all users' statistics | reset: Reset stats after retrieval |
getUserStats(username: string, reset?: boolean) | Get specific user statistics | username: Target userreset: Reset stats after retrieval |
getUserOnlineStatus(username: string) | Check user online status | username: Target user |
getAllInboundsStats(reset?: boolean) | Get all inbound statistics | reset: Reset stats after retrieval |
getInboundStats(inbound: string, reset?: boolean) | Get specific inbound statistics | inbound: Inbound tagreset: Reset stats after retrieval |
getAllOutboundsStats(reset?: boolean) | Get all outbound statistics | reset: Reset stats after retrieval |
getOutboundStats(outbound: string, reset?: boolean) | Get specific outbound statistics | outbound: Outbound tagreset: Reset stats after retrieval |
The SDK provides detailed error information through the response object:
try {
const response = await api.stats.getUserStats('username');
if (!response.isOk) {
console.error(`Operation failed: ${response.message}`);
console.error(`Error code: ${response.code}`);
}
} catch (error) {
console.error('Unexpected error:', error);
}
We ❤️‍🔥 contributors! If you'd like to contribute, please check out our Contributing Guidelines and feel free to submit a pull request or open an issue.
Check open issues to help the progress of this project.
Thanks to the all contributors who have helped improve XTLS SDK:
MIT License - see the LICENSE file for details.
FAQs
A Typescript SDK for XRAY (XTLS) Core GRPC Api
We found that @remnawave/xtls-sdk demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Add real-time Socket webhook events to your workflows to automatically receive software supply chain alert changes in real time.

Security News
ENISA has become a CVE Program Root, giving the EU a central authority for coordinating vulnerability reporting, disclosure, and cross-border response.

Product
Socket now scans OpenVSX extensions, giving teams early detection of risky behaviors, hidden capabilities, and supply chain threats in developer tools.