# What TabBot is (and is not) TabBot is a **local-first Discord bot studio**. You pick a **Visual** (no-code) or **Code** (TypeScript / discord.js names, bundled with **esbuild-wasm**) track per bot. Official modules run on both. Real **discord.js 14** runs in a **dedicated runner tab** on your machine, through BridgeSwarm’s native host (`window.BridgeSwarm.DiscordJS`). The product line is: > Real discord.js in a tab. Your token never leaves your machine. Close the tab, kill the bot. HoneyPeer, LLC publishes TabBot at **[tab-bot.rest](https://tab-bot.rest)**. HoneyPeer does not host your bot, does not keep it online, and does not hold your token. Company site: [honeypeer.llc](https://honeypeer.llc). ## What you get - A vault in this origin’s IndexedDB (`tabbot-vault`): AES-256-GCM tokens and named secrets, PBKDF2-SHA-256 at 600,000 iterations - Studio: list, wizard, settings, invite URL, modules, visual builder **or** Monaco code studio (one track per bot), logs, KV - A runner at `/run/:botId` whose lifetime **is** the bot process (named window + Web Lock so one gateway per bot id) - **35** official modules (GNU GPL v3 or later) plus JSON import/export and share codes - Docs, legal, and a [community](/docs/guide/community) page on this same origin ## What TabBot is not - A 24/7 cloud host. Sleep the laptop, close the runner, or quit the native host and the gateway dies. - An account system. There is no HoneyPeer login. - A custodian of bot tokens. Ciphertext never uploads to a TabBot server. - Affiliated with Discord Inc. or BotGhost. Feature overlap with BotGhost’s maker surface is intentional; partnership is not. - A replacement for `@discordjs/voice` on the current BridgeSwarm host. There is no music player or temp-voice hub in the catalog. - A remote marketplace of eval’d modules. ## Architecture in one picture 1. You unlock the vault in Studio. 2. Launch opens a real browser tab (`window.open`) named `tabbot-run-{botId}`. 3. Studio and runner handshake over same-origin `postMessage` / `BroadcastChannel`. A Web Lock steals a previous seat on the same bot id. 4. The runner constructs `new DiscordJS.Client({ intents })` on the Bare host and `login`s. 5. Closing that tab (or `pagehide`) stops **that** bot. Reload/Apply does not await `destroy()`. Stop does, with a 1.2s cap. Other runner tabs are independent, up to the host’s max clients (default 4). ## Next 1. [Community](/docs/guide/community) — Discord hangout and source 2. [Install BridgeSwarm](/docs/guide/install-bridgeswarm), allowlist this origin (`https://tab-bot.rest` on the official site) 3. Create a Discord application, then [create a TabBot bot](/docs/guide/create-a-bot) and [choose a track](/docs/guide/choose-a-track) Source is [git.ssh.surf/snxraven/tab-bot](https://git.ssh.surf/snxraven/tab-bot) (**GNU GPL v3 or later**).