Free, open-source TikTok LIVE overlays for OBS. Desktop app (macOS/Windows), CLI server and TypeScript library that turn TikTok LIVE chat, gifts, likes, follows and viewer counts into real-time events. No login, no signing service, runs locally.
See the codetiklive is an open-source TikTok LIVE connector and event server. It turns TikTok's LIVE WebSocket into typed JSON events for stream overlays: chats, gifts, likes, follows, shares, joins, subs and viewer counts. It ships a browser client, starter overlays (chat, alerts, goal bar), a dashboard, and a demo mode, so you can build overlays without being live. Actions turn events into sounds, GIFs, videos, text-to-speech and OBS scene switches, set up in the browser with no code.
Download the desktop app for macOS and Windows,
or run npx tiklive.
ttwid cookie.127.0.0.1 by default, so nothing leaves your machine.tiklive uses TikTok's private web protocol, which is not an official API. See Notes.
Download the app from GitHub Releases. It runs the
server on 127.0.0.1:8080, shows the dashboard, and updates itself.
See docs/user/desktop.md.
Needs Node 22+ or Bun.
npx tiklive # or: bunx tiklive
Open http://127.0.0.1:8080/ for the dashboard. Type demo as the username to get fake events.
Options are in docs/user/server.md.
npm install tiklive effect
effect is a peer dependency of the library entry points. See Library.
npx tiklive.| Overlay | URL |
|---|---|
| Chat | http://127.0.0.1:8080/overlays/chat.html?username=NAME |
| Alerts | http://127.0.0.1:8080/overlays/alerts.html?username=NAME |
| Goal bar | http://127.0.0.1:8080/overlays/goal.html?username=NAME&metric=likes&target=10000 |
Add &token=… if the server runs with --token. Use username=demo to test with fake events. Every
option is in docs/user/overlays.md.
| Import | What it is |
|---|---|
tiklive | The server: Server.layer, SessionManager, Session, routes |
tiklive/node | The server on Node's HTTP server: layer, runMain |
tiklive/bun | The server on Bun's HTTP server: layer, runMain |
tiklive/core | The TikTok connector: LiveConnection, TikTokWeb, errors, demoEvents |
tiklive/client | The TikLive client for browsers, Bun and Node. No runtime dependencies |
tiklive/contracts | Event and protocol schemas and types |
tiklive/testing | Fakes for tests: a scriptable socket, room lookups, frame builders |
tiklive/tiklive.js | The browser client bundle, served at /tiklive.js |
Connect to TikTok LIVE from your own Effect program:
import { LiveConnection } from "tiklive/core";
import { Effect, Stream } from "effect";
LiveConnection.events("someone").pipe(
Stream.runForEach((e) => Effect.log(e.type, e.timestamp)),
Effect.provide(LiveConnection.layer()),
Effect.runPromise,
);
Or follow a running server from Node or Bun:
import { TikLive } from "tiklive/client";
const live = new TikLive({ username: "demo", server: "ws://127.0.0.1:8080/ws" });
live.on("gift", (e) => {
if (!e.streaking) console.log(`${e.user.nickname} sent ${e.repeatCount}× ${e.giftName}`);
});
Each subpath is covered in docs/user/library.md. Embedding the server is in docs/user/server.md.
127.0.0.1 (the default), or set --token before you expose it. The server refuses to
listen beyond localhost without a token, unless you pass --allow-no-token. The tiklive CLI enforces this;
if you embed the server with Server.layer, you set token and allowedHosts yourself.Start at docs/README.md.
Requires Bun 1.4.3, pinned in package.json.
bun install
bun run dev # builds the client, serves the overlays at http://127.0.0.1:8080
bun run desktop:dev # runs the desktop app from the checkout
bun run dev reloads the server when its source changes. bun run start runs it without watching.
See CONTRIBUTING.md for the checks, tests and workflow.
MIT. Copyright 2026 Talkabout Design LLC.
Free, open-source TikTok LIVE overlays for OBS. Desktop app (macOS/Windows), CLI server and TypeScript library that turn TikTok LIVE chat, gifts, likes, follows and viewer counts into real-time events. No login, no signing service, runs locally.
See the codetiklive is an open-source TikTok LIVE connector and event server. It turns TikTok's LIVE WebSocket into typed JSON events for stream overlays: chats, gifts, likes, follows, shares, joins, subs and viewer counts. It ships a browser client, starter overlays (chat, alerts, goal bar), a dashboard, and a demo mode, so you can build overlays without being live. Actions turn events into sounds, GIFs, videos, text-to-speech and OBS scene switches, set up in the browser with no code.
Download the desktop app for macOS and Windows,
or run npx tiklive.
ttwid cookie.127.0.0.1 by default, so nothing leaves your machine.tiklive uses TikTok's private web protocol, which is not an official API. See Notes.
Download the app from GitHub Releases. It runs the
server on 127.0.0.1:8080, shows the dashboard, and updates itself.
See docs/user/desktop.md.
Needs Node 22+ or Bun.
npx tiklive # or: bunx tiklive
Open http://127.0.0.1:8080/ for the dashboard. Type demo as the username to get fake events.
Options are in docs/user/server.md.
npm install tiklive effect
effect is a peer dependency of the library entry points. See Library.
npx tiklive.| Overlay | URL |
|---|---|
| Chat | http://127.0.0.1:8080/overlays/chat.html?username=NAME |
| Alerts | http://127.0.0.1:8080/overlays/alerts.html?username=NAME |
| Goal bar | http://127.0.0.1:8080/overlays/goal.html?username=NAME&metric=likes&target=10000 |
Add &token=… if the server runs with --token. Use username=demo to test with fake events. Every
option is in docs/user/overlays.md.
| Import | What it is |
|---|---|
tiklive | The server: Server.layer, SessionManager, Session, routes |
tiklive/node | The server on Node's HTTP server: layer, runMain |
tiklive/bun | The server on Bun's HTTP server: layer, runMain |
tiklive/core | The TikTok connector: LiveConnection, TikTokWeb, errors, demoEvents |
tiklive/client | The TikLive client for browsers, Bun and Node. No runtime dependencies |
tiklive/contracts | Event and protocol schemas and types |
tiklive/testing | Fakes for tests: a scriptable socket, room lookups, frame builders |
tiklive/tiklive.js | The browser client bundle, served at /tiklive.js |
Connect to TikTok LIVE from your own Effect program:
import { LiveConnection } from "tiklive/core";
import { Effect, Stream } from "effect";
LiveConnection.events("someone").pipe(
Stream.runForEach((e) => Effect.log(e.type, e.timestamp)),
Effect.provide(LiveConnection.layer()),
Effect.runPromise,
);
Or follow a running server from Node or Bun:
import { TikLive } from "tiklive/client";
const live = new TikLive({ username: "demo", server: "ws://127.0.0.1:8080/ws" });
live.on("gift", (e) => {
if (!e.streaking) console.log(`${e.user.nickname} sent ${e.repeatCount}× ${e.giftName}`);
});
Each subpath is covered in docs/user/library.md. Embedding the server is in docs/user/server.md.
127.0.0.1 (the default), or set --token before you expose it. The server refuses to
listen beyond localhost without a token, unless you pass --allow-no-token. The tiklive CLI enforces this;
if you embed the server with Server.layer, you set token and allowedHosts yourself.Start at docs/README.md.
Requires Bun 1.4.3, pinned in package.json.
bun install
bun run dev # builds the client, serves the overlays at http://127.0.0.1:8080
bun run desktop:dev # runs the desktop app from the checkout
bun run dev reloads the server when its source changes. bun run start runs it without watching.
See CONTRIBUTING.md for the checks, tests and workflow.
MIT. Copyright 2026 Talkabout Design LLC.