# Kiwi IRC is a web client you host on a web server and configure with one file

> Kiwi IRC is a Vue application that talks IRC from the browser, and it is built to be served as static files from your own web server or a CDN. The architecture is defined by two decisions, everything is configuration read at runtime rather than baked into the build, and there are three separate ways of getting a browser to an IRC server, each with different requirements on the server side.

**kiwiirc/kiwiirc** — 🥝 Next generation of the Kiwi IRC web client

- Repository: https://github.com/kiwiirc/kiwiirc
- Website: https://kiwiirc.com/
- Stars: 990 · Forks: 234
- Language: Vue
- License: Apache-2.0
- Published: 2026-10-20 · Updated: 2026-10-20 · Language: en
- Canonical page: https://hysenlabs.com/projects/kiwiirc-kiwiirc

## Static files, and no backend of your own

The first line of the feature list is the one that defines the project, 100 percent static files, hosted with whichever web server or CDN you prefer. There is no application server, no database and no session store. Everything the client does happens in the browser, which means you can put it behind a CDN, put it in a subdirectory of an existing site, or hand the same files to several different deployments, and the only moving part on your side is whatever carries the IRC traffic. For a team that wants a chat client on its own domain, with its own colours and its own set of channels, that is an attractive property, because the server side work reduces to serving files and, in some configurations, running a proxy. The documentation also points at a client builder on the project site, for the case where the goal is to embed an IRC client on a website and have it hosted by the project itself rather than by you.

## Three routes from a browser to an IRC server

A browser cannot open a raw TCP connection, so the client offers three connection modes and the choice belongs to whoever runs the server. The first is a direct connection to a websocket IRC server, which needs no extra infrastructure but does need a server that speaks websocket. The second is the webircgateway websocket proxy, which sits in front of ordinary IRC servers and translates the websocket traffic into plain IRC, so a normal network becomes usable from a browser. The third is KiwiBNC, the project's own bouncer, which keeps the connection alive so that the client can disconnect and reconnect without losing the session. The distinction between the gateway and the bouncer is the one to think about: the gateway is a translation layer in front of a network, while the bouncer holds a connection on your behalf. The client also supports single or multiple IRC network connections at once, which is what makes the remembered networks feature meaningful.

## One JSON file decides how the client behaves

The client is described as extremely versatile through a single JSON configuration file read at runtime, and this is the architectural decision that matters most for anyone hosting it. By default the client loads the file at `/static/config.json` on startup, and the same built files can therefore be pointed at a different IRC network, a different theme or a different set of plugins by replacing one file. That is a very different model from a build that hardcodes the network in a source file, and it is what lets a community run a branded instance without rebuilding anything. The surrounding feature list hangs off the same idea, with light and dark modes, multiple layouts for small areas or full pages, desktop notifications, and a single or multiple network layout in the sidebar. The plugin system is the other extension point, with plugins for file uploading and for video calling called out as examples, and a team mode aimed at workplaces.

## Building it is two commands, and the dist folder is the product

Building from source needs Node.js and yarn, and the production build is two steps:

```bash
yarn install
yarn run build
```

The output lands in the `dist/` folder, and the documentation is emphatic about what to do with it, copy the files from that folder to your web server, and be aware that the folder is overwritten each time you build. There is also a development environment, with an optional step that links the git pre-commit linting hooks and a dev server on port 8080:

```bash
ln -s $PWD/scripts/pre-commit .git/hooks/
yarn run dev
```

The warning attached to the dev server is the one to remember, do not use the development environment on a live website, because it is slow, very large and insecure. That is a description of a dev bundle that ships the whole framework and the debug tooling, which is the usual reason, and it is a reminder that the `dist/` output is the artefact that matters.

## The stack is Vue 2 with the Vue CLI, and that is worth noticing

The package manifest is the clearest statement of what the project is made of. The framework is Vue at version 2.7.16, driven by the Vue CLI service, and the build script runs `vue-cli-service build --no-module`, the flag that produces a single bundle rather than a module build. The IRC protocol handling is not written in the project, it is the `irc-framework` package at 4.14, which is the part that parses the protocol, handles the numerics and keeps the connection state. Around that sit a set of dependencies that reveal the target browser range, `whatwg-fetch`, `xhr`, `buffer` and `stream-browserify` as fetch, XHR and Node buffer and stream shims, which is consistent with the stated IE11 support, and `tinycon` for the favicon badge, `font-awesome` for icons, `vue-virtual-scroller` for long channel and user lists, and `i18next` with the `@panter/vue-i18next` bridge for translations, with a `crowdin.yml` in the repository for the translation workflow. So a project described as the next generation of the web client is still a Vue 2 application on the Vue CLI, which matters if you plan to maintain it.

## Linting, tests and generated documentation

The scripts show a project with the usual housekeeping wired in, and each tool has a specific job. Linting is run through npm-run-all over two linters, eslint through the Vue CLI service with the airbnb config and the standard config, and stylelint over the styles in the source tree, and there are separate configuration files for both, plus a prettier configuration and an editorconfig. Tests are Jest, run through the Vue CLI unit test command with the Vue test utilities and the Jest transform for Vue 2 components, and a `jest.config.js` at the root. Documentation is generated with jsdoc from a `jsdoc.json` configuration, and the script writes into an `srcdocs/` directory that it removes first, so the generated API reference is disposable. There is also a `jsconfig.json` for editor support and a `.browserslistrc` that records the browsers the build targets, which is the file to look at when the browser support question comes up.

## Old browser support is a deliberate position

The browser support section is explicit. Kiwi IRC is tested on all modern browsers and on IE11, and other browsers are not actively tested and may have trouble running it. The list is Chrome, Chrome Mobile on Android, Firefox, IE11 and Safari 9 or later. Keeping IE11 in the tested set is unusual and explains the shim dependencies, and it is the reason the build is Babel driven and the fetch layer is a polyfill rather than the native API. The other thing to weigh is the release cadence. The listed versions are v1.7.1 from 2023-09-13, v1.7.0 from 2023-07-24 and v1.6.1 from 2022-01-24, so the published versions have not moved in three years, while the last push to the repository was on 2026-06-19, which means work is still landing on the default branch. The licence is Apache-2.0, and the author of the package is listed as Darren.

## Conclusion

Kiwi IRC suits a community that wants its own branded chat client on its own domain, with the server side kept to a minimum, and it suits an operator who wants one build of the client to serve many instances, since the network, theme and behaviour all come from a JSON file rather than from a compile time setting. It is a poor fit if you need IRC over a plain TCP connection from the browser, because the browser cannot open one and the gateway proxy or the bouncer is what supplies it, and it is a poor fit if you need a client built on current Vue, since the package still targets Vue 2.7 with the Vue CLI. Before you deploy it, check three things: which of the three connection modes you will run on the server side, that the `dist/` folder is what you actually serve, and the state of the project, with v1.7.1 published on 2023-09-13 and the last push to the repository on 2026-06-19.

## FAQ

### Do I need a server to run Kiwi IRC?

For the client itself, no. It is 100 percent static files, so you can serve the built files from any web server or CDN. On the IRC side you need one of the three connection modes, a websocket IRC server, the webircgateway websocket proxy in front of a normal server, or the KiwiBNC bouncer to hold the connection.

### How do I build Kiwi IRC from source?

With Node.js and yarn installed, run `yarn install` and then `yarn run build`. The output goes into the `dist/` folder, which is what you copy to your web server, and the folder is overwritten on every build.

### How is Kiwi IRC configured?

Through a single JSON configuration file read at runtime, by default at `/static/config.json`. That means one build can serve several instances with different networks, themes and plugins, and you replace the file rather than rebuilding.

### Can I extend Kiwi IRC with plugins?

Yes, the plugin system is called out as one of the main extension points, with file uploading and video calling given as examples of plugins that exist. There is also a client builder on the project site for generating a custom hosted client.

### Which browsers does Kiwi IRC support?

It is tested on modern browsers and on IE11, with the list covering Chrome, Chrome Mobile on Android, Firefox, IE11 and Safari 9 or later. Other browsers are not actively tested, and the dependency on fetch, XHR and buffer shims is a direct consequence of that browser range.

## Sources

- [kiwiirc/kiwiirc on GitHub](https://github.com/kiwiirc/kiwiirc)
- [License: Apache-2.0](https://github.com/kiwiirc/kiwiirc/blob/master/LICENSE)
- [Project website](https://kiwiirc.com/)
- [README](https://github.com/kiwiirc/kiwiirc/blob/master/README.md)
- [Releases](https://github.com/kiwiirc/kiwiirc/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/kiwiirc-kiwiirc
