Integration Method | Applicable Scenarios | Integration Notes |
Quick deployment without extensive customization | Deploy the Live Streaming Management System to your environment and use it directly, or embed it into your existing operations system via iframe. | |
Unified brand styling or custom features and pages required | Build on the open-source codebase to customize pages, menus, and features, then integrate into your existing business system. |
Feature Module | Description | UI Preview |
Live Monitoring | Supports multi-screen concurrent monitoring and quick live room search by Room ID. The system displays violation labels for non-compliant live rooms(contact us to enable). Operators can force-stop streaming with one click or send violation alerts to hosts, keeping track of live status in real time and responding to risks promptly. | ![]() |
Room Details | Supports entering the live room details page to view real-time chat messages, online audience, and core operational data. Provides management capabilities such as mute all and ban members, helping operators respond to and handle live room issues quickly. Admins can send admin messages in the chat (entering this page joins the live room with admin identity). If Text Moderation is integrated, you can view the live room's text moderation records and use review management features such as batch approval and correction whitelist(contact us to enable). | ![]() |
Room List | Pre-create live rooms in the backend with designated host IDs, allowing hosts to enter assigned rooms directly when starting streams. Generates OBS streaming URLs enabling hosts to go live with one click via OBS | ![]() |
Gift Configuration | Supports adding, editing, and deleting gifts and gift categories, with multi-language configuration. | ![]() |

git clone https://github.com/Tencent-RTC/TUILiveKit_Managercd TUILiveKit_Managerpnpm install
packages/server/config/.env:SDK_APP_ID=1400000001 # Replace with your SDKAppIDSECRET_KEY=xxxxxxx # Replace with your SecretKeyUSER_ID=administrator # Replace with your admin userID
pnpm run start:server
packages/react/.env:VITE_API_BASE_URL=http://localhost:9000/api
pnpm run dev:react
packages/server/config/.env. The system supports three options:STORAGE_PROVIDER=cosCOS_SECRET_ID=your_secret_id # Tencent Cloud API SecretIdCOS_SECRET_KEY=your_secret_key # Tencent Cloud API SecretKeyCOS_BUCKET=your-bucket-1250000000 # COS bucket nameCOS_REGION=ap-guangzhou # Bucket regionCOS_CDN_DOMAIN=web.sdk.qcloud.com # (Optional) CDN acceleration domain; if not set, the default COS domain is usedCOS_PATH_PREFIX=uploads # (Optional) Storage path prefix; files will be stored under this directory
multipart/form-data.STORAGE_PROVIDER=customCUSTOM_UPLOAD_URL=https://your-api.com/upload # Upload endpoint (required)CUSTOM_ACCESS_DOMAIN=https://cdn.your-api.com # (Optional) File access domain prefixCUSTOM_UPLOAD_FIELD=file # (Optional) Upload file field name, default: fileCUSTOM_RESPONSE_URL_FIELD=data.url # (Optional) JSON path for the URL field in the response, default: data.urlCUSTOM_AUTH_HEADER=Authorization: Bearer token # (Optional) Custom auth request headerCUSTOM_PATH_PREFIX=uploads # (Optional) Storage path prefix
{ "code": 0, "data": { "url": "https://cdn.example.com/xxx.png" } }.YourProvider.js in packages/server/src/services/storage/, extending the StorageProvider base class.PROVIDER_MAP in packages/server/src/services/storage/index.js.STORAGE_PROVIDER=your_key in .env with the corresponding configuration items.packages/server/config/.env:# Tencent Cloud API keys (required for content moderation, violation labels, etc.)TENCENT_CLOUD_SECRET_ID=xxxx # Replace with your Tencent Cloud SecretIdTENCENT_CLOUD_SECRET_KEY=xxxx # Replace with your Tencent Cloud SecretKey
packages/react) is fully open source; you are free to adjust the page structure, navigation menus, brand identity, and page styles. Business capabilities can be flexibly extended in the following ways:live-manager.ts.packages/server.packages/react/src/live-manager.ts file in the project is the unified configuration file. Modify this file to customize the brand, menus, slots, and all other content:import type { ComponentType, LazyExoticComponent } from 'react';import { configureLiveManager } from 'tuikit-live-manager-sdk-react';export default configureLiveManager<ComponentType | LazyExoticComponent<any>>({brand: {appName: 'My Live Management System',pageTitle: 'Live Management Console',logoUrl: '/assets/my-logo.png',primaryColor: '#0052D9',},menus: {hidden: [],rename: { 'live-list': 'Live Room Management' },order: ['live-list', 'live-monitor', 'gift-config'],extraMenus: [],},components: {},features: { enableGift: true },runtime: {apiBaseUrl: 'http://localhost:9000/api',language: 'zh-CN',},});
.env file by default. The example above uses hardcoded values. In practice, we recommend reading from import.meta.env.VITE_* environment variables.configureLiveManager to extend page functionality:Slot Name | Insert Position | Received Props |
headerRight | Header right area | - |
sidebarBottom | Sidebar bottom area | - |
export default configureLiveManager<ComponentType | LazyExoticComponent<any>>({components: {layout: { headerRight: MyHeaderWidget },},});
Slot Name | Insert Position | Received Props |
userActionExtraItems | Action area of each live room card | { live: MonitorLiveInfo } |
// live-manager.tsimport MyMonitorButton from './components/MyMonitorButton.tsx';export default configureLiveManager({components: {liveMonitor: {userActionExtraItems: MyMonitorButton,},},});
// MyMonitorButton.tsximport type { MonitorLiveInfo } from 'tuikit-live-manager-sdk-react';interface Props { live: MonitorLiveInfo }function MyMonitorButton({ live }: Props) {return (<t-button variant="text" size="small">Custom Action — {live.liveName}</t-button>);}
Slot Name | Insert Position | Received Props |
beforeToolbar | Before the list page toolbar | { lives: MonitorLiveInfo[]; loading: boolean } |
afterToolbar | After the list page toolbar | { lives: MonitorLiveInfo[]; loading: boolean } |
tableExtraColumns | Table extra columns | { live: MonitorLiveInfo } |
rowActions | Row action button area | { live: MonitorLiveInfo } |
liveFormExtraFields | Create/edit live room form extra fields | { mode: 'create' | 'edit'; formData: Record<string, unknown> } |
// live-manager.tsimport CustomColumn from './components/CustomColumn.tsx';export default configureLiveManager({components: {liveList: {tableExtraColumns: CustomColumn,},},});
// CustomColumn.tsximport type { MonitorLiveInfo } from 'tuikit-live-manager-sdk-react';import { Tag as TTag } from 'tdesign-react';interface Props {live: MonitorLiveInfo;}function CustomColumn({ live }: Props) {return (<TTag theme={live.isMuted ? 'warning' : 'success'} variant="light">{live.isMuted ? 'Muted' : 'Normal'}</TTag>);}export default CustomColumn;
Slot Name | Insert Position | Received Props |
beforeLiveInfo | Before the live room info area | { liveInfo: MonitorLiveInfo | null } |
customControlPanel | Control panel below statistics cards | { liveInfo: MonitorLiveInfo | null; stats: LiveStats } |
// live-manager.tsimport CustomPanel from './components/CustomPanel.tsx';export default configureLiveManager({components: {liveControl: {customControlPanel: CustomPanel,},},});
// CustomPanel.tsximport { useMemo } from 'react';import type { MonitorLiveInfo, LiveStats } from 'tuikit-live-manager-sdk-react';interface Props {liveInfo: MonitorLiveInfo | null;stats: LiveStats;}function CustomPanel({ liveInfo, stats }: Props) {const revenueRate = useMemo(() => {if (!stats || stats.viewCount === 0) return '0';return ((Number(stats.giftUserCount ?? 0) / stats.viewCount) * 100).toFixed(2);}, [stats]);return (<t-card title="Custom Statistics" class="custom-panel"><p>Gift Conversion Rate: {revenueRate}%</p><p>Total Likes: {stats.likeCount.toLocaleString()}</p><p>Total Comments: {stats.commentCount.toLocaleString()}</p></t-card>);}
Slot Name | Insert Position | Received Props |
giftTableExtraColumns | Gift table extra columns | { gift: GiftItem } |
giftRowActions | Gift row action button area | { gift: GiftItem } |
giftFormExtraFields | Create/edit gift form extra fields | { mode: 'create' | 'edit'; formData: Record<string, unknown> } |
// live-manager.tsimport GiftCategoryTag from './components/GiftCategoryTag.tsx';export default configureLiveManager<ComponentType | LazyExoticComponent<any>>({components: {giftConfig: {giftTableExtraColumns: GiftCategoryTag,},},});
// GiftCategoryTag.tsximport type { GiftItem } from 'tuikit-live-manager-sdk-react';import { Space as TSpace, Tag as TTag } from 'tdesign-react';interface Props {gift: GiftItem;}function GiftCategoryTag({ gift }: Props) {const categories = gift.categories ?? [];return (<TSpace size="small">{categories.map(cat => (<TTag key={cat} size="small" variant="light">{cat}</TTag>))}</TSpace>);}export default GiftCategoryTag;
packages/server to your server, run pnpm install in that directory, then run node src/index.js to start the server.VITE_API_BASE_URL, run pnpm run build:react at the root and deploy the build output to a static resource server such as Nginx. You can also place the build output in the server's public directory to share the port with the server. In this case, set VITE_API_BASE_URL=/api so the frontend uses relative paths for API requests.npm run deploy:server at the root, then upload packages/server/dist/scf-deploy.zip to Tencent Cloud Functions (Web Functions, Node.js 20.19)..env.production with the Cloud Function request URL, then run pnpm run build:react at the root and upload the build output to COS or EdgeOne.VITE_API_BASE_URL=https://your-scf-url.com/api
Was this page helpful?
You can also Contact sales or Submit a Ticket for help.
Help us improve! Rate your documentation experience in 5 mins.
Feedback