Open-source project
molvqingtai/WebChat avatar
molvqingtai/WebChat

WebChat: a WebRTC chat room that lives inside any website

💬 Chat with anyone on any website.

2,570 stars207 forksTypeScriptMIT

At a glance

What is it?
WebChat is a Chrome, Edge and Firefox extension that turns the page you are already on into an anonymous peer-to-peer chat room. It is a small, MIT-licensed TypeScript project, and its main constraint is the network effect: a room is only as useful as the number of other visitors running the extension.
Who is it for?
WebChat suits people who want an anonymous, serverless chat layer on a site they are already browsing, and who accept that an empty room is the normal case. It is the wrong tool for anyone who needs message history, moderation, guaranteed delivery, or a conversation that survives the tab closing.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 29 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 11, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The problem WebChat solves, and who it is actually for

Most websites have no way for the people currently reading them to talk to each other. Comments are asynchronous and tied to a page's publishing system. Discord servers and subreddits are separate destinations that require an invitation and an account. WebChat takes the opposite approach: the page itself is the room. The README describes the extension as a decentralized browser extension that lets people visiting the same website chat anonymously, and the tagline is simply "Chat with anyone on any website."

The intended user is someone who wants a low-commitment conversation with whoever else is on the same URL right now. No account, no room creation, no server to host. That also defines the audience narrowly. WebChat is for spontaneous, transient contact, not for building a community with a history. If you want a persistent space with roles, searchable archives and moderation tools, this is the wrong shape of product, and no amount of configuration will turn it into one.

How the peer-to-peer room is wired

The README is explicit that WebChat uses WebRTC for end-to-end encrypted, peer-to-peer communication, with no central chat server, and that data remains on the device. The mechanism follows from that: the extension runs in the browser, peers discover each other through a signaling transport, and messages travel directly between browsers rather than through an application server.

The built-with list names two transports. Artico "provides the default WebRTC room transport," and Trystero "provides an optional WebRTC room transport using its default Nostr strategy." Those are two different answers to the same problem, which is how peers find each other before a direct connection exists. Artico is the default; Trystero's Nostr strategy is the alternative path. The repository layout reflects a multi-context extension rather than a single script: there is a src/ directory, a wxt.config.ts, an e2e/ directory, and a patches/ directory for patched dependencies.

State management is handled by Remesh, which the README says provides a DDD-inspired state model keeping application logic independent from the React UI. RPC between the extension's JavaScript contexts comes from Comctx, a project by the same author. That context split matters in practice: a browser extension has a background service worker, content scripts injected into pages, and UI surfaces, and those cannot share memory directly. Comctx is the bridge. The avatars come from ugly-avatar, which is why the README calls them distinctive.

Installing WebChat and joining a first room

The README points users at three stores rather than a manual install: Chrome Web Store, Microsoft Edge Add-ons, and Firefox Add-ons. There is no published npm package for end users, and the README gives no sideloading steps, so the store listing is the intended path.

Once installed, the usage section describes a single interaction: a ghost icon appears in the bottom-right corner of each website; select it to join that site's chat room and talk with other visitors. There is no room name to type and no invite link to paste. The page you are on is the room key.

For developers working from source, package.json defines the toolchain. The project uses pnpm and WXT, and the dev script starts the extension in development mode:

bash
pnpm install
pnpm dev
pnpm dev:firefox

The first command installs dependencies; the postinstall hook runs wxt prepare so generated types exist. The second starts Chrome development mode, and the third does the same for Firefox.

Building from source with the repository scripts

The repository is a pnpm workspace with WXT as the build framework. The scripts in package.json are the only documented way to run it locally. The build script runs the chrome and firefox builds in parallel through run-p, and the pack script produces store zips. Note that build and pack set NODE_ENV=production, so a plain build is not a development artifact.

bash
pnpm build
pnpm pack:chrome
pnpm pack:firefox

Quality gates are separate commands: check runs wxt prepare followed by tsc --noEmit, test runs vitest, and there is an end-to-end Chrome path that builds first and then runs the runtime script.

bash
pnpm check
pnpm test
pnpm test:e2e:chrome

If type checking fails immediately after cloning, the wxt prepare step is the first thing to verify.

The empty room problem and other real limits

The hardest constraint is not technical. A chat room only exists when at least two people with the extension are on the same site at the same time. On a large site at peak hours that may happen; on a personal blog it will not. The README does not describe any discovery directory, room list, or way to see how many peers are present before joining, so the ghost icon gives no signal about whether anyone is there.

Second, WebRTC depends on network conditions. The README does not document relay or TURN configuration, so on restrictive corporate networks or symmetric NAT setups a direct peer connection may simply fail. There is no documented fallback to a server-relayed path.

Third, the README does not document message persistence, history, moderation, reporting, or blocking. That is consistent with a serverless design, but it means anything said in a room is gone when the participants leave, and there is no operator to appeal to. For a tool that lets anonymous strangers talk on any page, the absence of a moderation story is a design decision worth naming rather than a gap to be filled later.

WebChat versus a hosted chat widget or a Discord server

The obvious alternative is a hosted chat widget such as the ones sites embed for support, or a community server on a platform like Discord. The difference in approach is where the state lives. A hosted widget runs a server that stores conversations, authenticates users and gives the site owner logs and moderation controls. Discord centralizes identity and history in one company's infrastructure.

WebChat inverts all of that. There is no server to operate, no account, and no archive. The site owner does not know the room exists, which is the point for users and a problem for anyone who wants accountability. Choosing between them is not a feature comparison; it is a choice about whether a conversation should leave a trace and whether anyone should be able to moderate it. If the answer to both is yes, WebChat is the wrong tool.

Maintenance, licensing and what the repository tells you

The last push to the master branch was on 2026-09-13, and the most recent release listed is v2.8.1 on 2026-09-11. The repository is not archived. The release cadence visible in the repository is recent and fairly tight, with v2.8.0 and v2.7.2 both dated 2026-08-29.

The licence is MIT, stated in the README and in package.json. In practical terms that permits reuse and modification with attribution and without a copyleft obligation, but the repository is a browser extension rather than a library, so the licence mostly matters if you intend to fork the extension or reuse its source. The README does not document a public API or a stable extension interface for third parties to build against.

The upgrade cost is the toolchain, not the licence. The project pins Node through .nvmrc, uses pnpm with a lockfile, and patches dependencies through the patches/ directory. It also carries agent-oriented files at the repository root (AGENTS.md, CLAUDE.md, .agents/, .codex/) and an openspec/ directory, which suggests the development workflow is documented in-repo rather than only in the README. Anyone maintaining a fork should expect to track WXT and browser extension API changes, not just WebChat's own releases.

Editorial conclusion

WebChat suits people who want an anonymous, serverless chat layer on a site they are already browsing, and who accept that an empty room is the normal case. It is the wrong tool for anyone who needs message history, moderation, guaranteed delivery, or a conversation that survives the tab closing. Before adopting it, check three things: whether the ghost icon appears on the sites you care about, whether your network lets WebRTC traffic through, and whether the Artico or Trystero transport is the one your build actually uses. The extension is MIT-licensed, so the real cost is not the licence but the maintenance of a WXT and pnpm build chain that moves with browser extension APIs.

Frequently asked questions

What is WebChat by molvqingtai?

It is a decentralized browser extension that lets people visiting the same website chat anonymously, using WebRTC for end-to-end encrypted peer-to-peer communication with no central chat server.

Is WebChat free?

The project is MIT-licensed and distributed through the Chrome Web Store, Microsoft Edge Add-ons and Firefox Add-ons. The README does not mention any paid tier.

How do I use WebChat?

After installing the extension, a ghost icon appears in the bottom-right corner of each website. Select it to join that site's chat room and talk with other visitors.

What is a webchat?

In this project, the term refers to chat that runs inside the page you are already viewing: WebChat turns any website into a shared room for the people currently on it, without a separate chat server.

Official sources

  1. License: MIT
  2. molvqingtai/WebChat on GitHub
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/molvqingtai-webchat.svg)](https://hysenlabs.com/projects/molvqingtai-webchat)