---
layout: project
title: Circle
description: A thin client and server for group chat, supporting IRC & Matrix
categories: projects client
thumbnail: /docs/projects/images/circle-fe-term+matrix-small.png
author: LeoNerd
maturity: Beta
---

# {{ page.title }}
Circle is an IRC & Matrix client which merges the best attributes of a local client and the common screen+irssi recipe.

 * Keep IRC connects and state on a backend server, allowing disconnections from local UI.
 * Interact with a real local GUI for the frontend, instead of incurring SSH roundtrips for every keypress.
 * Supports IRC, Matrix, 

![image](http://www.leonerd.org.uk/code/circle/circle-two-fes.png)
![image](/docs/projects/images/circle-fe-term+matrix.png)

First, get the code from CPAN:

```
$ cpan Circle
$ cpan Circle::Net::Matrix

$ cpan Circle::FE::Term
```

Now you can run the backend. Personally I keep UNIX sockets in `$HOME/var/run` but of course feel free to use whatever path you like.

```
$ mkdir -p ~/var/run
$ cd circle-be
$ ./circle-be --socket ~/var/run/circle.sock
```

Now you can run the frontend, which connects to the backend server via ssh and connects to that UNIX socket.

```
$ cd circle-fe-term
$ ./circle-fe-term sshunix://server/var/run/circle.sock
```

Then in the Global tab, create a new Matrix network:

```
/networks add -type matrix Matrix
```

Then in the new MyNet tab for that network, configure it and connect:

```
/set homeserver example.org
/set user_id @me:example.org
/set access_token MDAxABCDE...

/connect
```

(for now, you'll have to steal the access token from another Matrix client, such as Riot or [App::MatrixTool](https://metacpan.org/pod/App::MatrixTool))
