# Ibis

A [GObject](https://docs.gtk.org/gobject/) based [IRCv3](https://ircv3.net)
library.

## About

This parser originated out of an early version of
[purple-spasm](https://keep.imfreedom.org/grim/purple-spasm). The library was
then adopted by the new IRCv3 protocol in purple 3 with the intent of being
able to subclass the protocol. However that proved to be very difficult and
thus Ibis was split out to its own library where others can use it.

Ibis is what we like to call an integration library. What that means is that it
is used to integrate the protocol into your application instead of bolting the
protocol onto your application in a highly opinionated way.

What this really means is that Ibis will do the heavy lifting for you of
handling the protocol specifics like parsing and serialization as well as any
building blocks the protocol requires.

In the case of IRCv3 these building blocks would be things like
[Capabilities](https://ircv3.net/specs/extensions/capability-negotiation),
[SASL](https://ircv3.net/specs/extensions/sasl-3.2),
[Batches](https://ircv3.net/specs/extensions/batch), etc.

However, this is where Ibis stops. Again, Ibis is meant for integration, so it
has zero opinion about how messages are handled, therefore it doesn't try to
handle them. Instead it makes the messages available to you, the integrator, to
do what you want with them.

## Name

Keeping with the bird names for libraries whose origins are from Pidgin and
libpurple we went with Ibis for many reasons, least of which is that it starts
with an `I` like `IRC`.

[Ibis](https://en.wikipedia.org/wiki/Ibis) are long-legged wading birds, which
seemed fitting for IRC users who spend a lot of time idling around.

## Building

Standard [meson](https://mesonbuild.com) project build:

```sh
meson setup build
meson compile -C build
meson install -C build
```

### Configuration

There are configuration options for a few things, but you'll probably only be
interested in `doc` and `introspection`. Please note that `doc` requires
`introspection`.

## Documentation

Documentation and API reference for the project can be found at
[docs.imfreedom.org/ibis](https://docs.imfreedom.org/ibis/).
