blob: ed80b3887d7361b6ac05478b3437db8b2dbf2553 [file] [log] [blame] [view] [raw]
---
title: facil.io - core API and extensions
toc: false
layout: api
---
# {{ page.title }}
facil.io's API is divided into different modules, each of them belonging to one of two groups:
* The Core Modules:
These modules are required for facil.io to operate properly and they include:
* [The `facil` library](facil) - this is the hub for everything network related except socket read/write calls.
the `facil` library and it's API is at the heart of everything and it is the glue that holds the different modules together.
* [The `sock` library](sock) - an abstraction layer over POSIX sockets, which solves many of the issues and pitfalls related to socket programming.
* [The `defer` library](defer) - a simple event / action queue. It;s used internally but can be used directly as well.
* [The `evio` library](evio) - the evented *one-shot* I/O module. This module is mostly for internal uses and shouldn't be accessed directly. It's API, although stable, should be considered volatile.
* [The `FIOBJ` object library](fiobj) - a dynamic type system designed for handling network data (which is, by nature, dynamic).
* The Extension Modules:
These modules can be safely ignored or removed if not utilized by an application. These modules include:
* [The `http` extension](http) - this is compound module is everything HTTP.
* [The `websockets` extension](websockets) - this is part of the HTTP module and extends it to support Websocket connections.
* [The `pubsub` extension](pubsub) - this allows messages to be exchanged using the [Publish–Subscribe Pattern](https://en.wikipedia.org/wiki/Publish–subscribe_pattern).
This powerful tool, which integrates seamlessly with the Websocket library, can allow an application to scale horizontally across machines, as can be demonstrated by the use of the [Redis pub/sub engine](redis).
* [The `redis_engine` extension](redis) to the pub/sub service.
* [The CLI (`fio_cli`) helper](fio_cli) for handling command line arguments.
* [The parsers](parsers) some of the extensions, such as the Redis pub/sub engine and the HTTP / Websocket extensions make use of parsers that can be used independently of the facil.io framework.