SplitChat is a modern web application for viewing multiple live streaming chat rooms simultaneously. Perfect for multi-streaming enthusiasts, moderators, and viewers who want to keep track of multiple conversations at once.
- Multi-platform Support: View chats from Twitch, YouTube, and Kick simultaneously
- Unlimited Chat Panels: Display up to 10+ chat rooms side by side (technically unlimited)
- Auto-Detection: Automatically detects current YouTube live streams by username
- Responsive Design: Adjust the width of each chat panel with intuitive drag-and-drop
- Smart Performance: Automatically unloads chats when the tab becomes inactive to save resources
- Light/Dark Mode: Switch between light, dark, and system themes
- Persistent Settings: Everything is saved locally in your browser
- Preset System: Quick-switch between predefined chat configurations via URL
- Real-time Updates: Live chat updates with smooth animations
- Mobile Friendly: Responsive design that works on all devices
- YouTube API Integration: Real-time lookup of live streams using YouTube Data API v3
- Caching System: Intelligent caching to reduce API calls and improve performance
- Privacy Focused: All data stays in your browser, no account required
- Modern Tech Stack: Built with Nuxt 4, Vue 3, and TypeScript
- Node.js 18+
- Package manager: pnpm, npm, yarn, or bun
- Clone the repository:
git clone <repository-url>
cd theo-chat- Install dependencies:
# Using pnpm (recommended)
pnpm install
# Or using npm
npm install
# Or using yarn
yarn install
# Or using bun
bun install- Set up environment variables:
cp .env.example .env-
Get a YouTube Data API v3 key (optional for auto-detect current livestream by username):
- Go to Google Cloud Console
- Create a new project or select existing
- Enable YouTube Data API v3
- Create credentials (API Key)
- Add the key to your
.envfile:
YT_API_KEY=your_youtube_api_key_here -
Start the development server:
# Using pnpm
pnpm dev
# Or using npm
npm run dev
# Or using yarn
yarn dev
# Or using bun
bun run dev- Open http://localhost:3000 in your browser
- Click the settings button (gear icon) at the bottom of the screen
- Click "Add chat" to create a new chat panel
- Enter a streamer username or URL:
- Twitch:
streamernameorhttps://twitch.tv/streamername - YouTube:
@usernameorhttps://youtube.com/@username - Kick:
streamernameorhttps://kick.com/streamername
- Twitch:
Twitch:
ninjahttps://twitch.tv/ninjahttps://www.twitch.tv/ninja
YouTube:
@PewDiePiePewDiePie(automatically treated as @handle)UC-lHJZR3Gqxm24_Vd_AJ5Yw(channel ID)https://youtube.com/@PewDiePiehttps://youtube.com/channel/UC-lHJZR3Gqxm24_Vd_AJ5Yw
Kick:
xqchttps://kick.com/xqc
- Resize panels: Drag the divider between chat panels to adjust widths
- Equalize widths: Double-click any divider to equalize all panel widths
- Theme toggle: Use the theme buttons in settings to switch between light/dark mode
- Unload on blur: Configure automatic unloading of YouTube chats when tab becomes inactive
- Platform selection: Choose which platforms should unload when inactive
SplitChat includes built-in presets for quick setup:
theo- Theo's Twitch and YouTube chatsempty- Clear all settings
Access presets via URL:
http://localhost:3000/theo
http://localhost:3000/empty
โโโ app/
โ โโโ app.vue # Main application component
โโโ components/
โ โโโ ChatEntryInput.vue # Chat input component
โ โโโ PlatformMultiPicker.vue # Platform selection
โ โโโ SettingsModal.vue # Settings modal
โ โโโ UiSelect.vue # UI select component
โโโ server/
โ โโโ api/
โ โโโ youtube/
โ โโโ live.get.ts # YouTube API integration
โโโ presets/
โ โโโ index.ts # Preset definitions
โโโ public/
โโโ sounds/ # Sound effects
โโโ images/ # Static assets
# Build the application
pnpm build
# Preview production build locally
pnpm previewCreate a .env file with:
# YouTube Data API v3 Key (required for YouTube live detection)
YT_API_KEY=your_youtube_api_key_hereThe app uses Nuxt 4 with the following modules:
@nuxt/icon- Icon support@nuxtjs/color-mode- Theme switching@nuxt/fonts- Font management@formkit/auto-animate- Smooth animations
YouTube API key is configured in nuxt.config.ts:
runtimeConfig: {
youtubeApiKey: process.env.YT_API_KEY
}Endpoint: GET /api/youtube/live
Query Parameters:
input- Streamer username, handle, or URL
Response:
{
"videoId": "dQw4w9WgXcQ",
"reason": "optional reason for null videoId"
}- Fork the repository
- Create a feature branch:
git checkout -b feature-name - Make your changes
- Test thoroughly
- Submit a pull request
This project is open source and available under the MIT License.
- Built with Nuxt
- Icons from Iconify
- YouTube Data API v3 integration
- Inspired by the streaming community's need for better multi-chat tools
Happy streaming! ๐ฎ๐บ