Packages
horde
0.1.0
0.10.0
0.9.1
0.9.0
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.8.0-rc.1
0.7.1
0.7.0
0.6.1
0.6.0
0.6.0-rc.1
0.5.0
0.5.0-rc.12
0.5.0-rc.11
0.5.0-rc.10
0.5.0-rc.9
0.5.0-rc.8
0.5.0-rc.7
0.5.0-rc.6
0.5.0-rc.5
0.5.0-rc.4
0.5.0-rc.3
0.5.0-rc.2
0.5.0-rc.1
0.4.0-rc.2
0.4.0-rc.1
0.3.0
0.3.0-rc1
0.2.3
0.2.2
0.2.1
0.2.0
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Distributed supervisor & process registry built with DELTA-CRDTs
Current section
Files
Jump to
Current section
Files
README.md
# Horde
Horde packages a distributed Supervisor and Registry built on δ-CRDTs.
[](https://hex.pm/packages/horde)[](https://circleci.com/gh/derekkraan/horde)
## Installation
If [available in Hex](https://hex.pm/docs/publish), the package can be installed
by adding `horde` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[
{:horde, "~> 0.1.0"}
]
end
```
## Usage
Public APIs of `Supervisor` and `Registry` have been reproduced as faithfully as possible. `Horde.Supervisor` and `Horde.Registry` should function more or less as drop-in replacements.
```elixir
{:ok, supervisor} = Horde.Supervisor.start_link([], node_id: :distributed_supervisor_1, strategy: :one_for_one)
Horde.Supervisor.start_child(supervisor, child_spec)
```
Horde runs inside Erlang clustering (but might later be ported to use other transport methods). Joining up supervisors or registries must be done manually:
```elixir
Horde.Tracker.join_hordes(supervisor_1, supervisor_2)
```
Leaving a horde is also possible:
```elixir
Horde.Tracker.leave_hordes(supervisor_2)
```
See the docs at [https://hexdocs.pm/horde](https://hexdocs.pm/horde).