# honker (Elixir)
Elixir binding for [Honker](https://github.com/russellromney/honker): durable queues, streams, pub/sub, and time-trigger scheduling on SQLite.
Full docs:
- [Main repo](https://github.com/russellromney/honker)
- [Docs](https://honker.dev)
## Install
```elixir
def deps do
[
{:honker, "~> 0.1"}
]
end
```
You also need the Honker SQLite extension from the main repo.
## Watcher backends
`Honker.open(path, extension_path: ext, watcher_backend: "polling")`
accepts the default polling backend aliases (`"polling"` / `"poll"`).
Experimental `"kernel"` / `"shm"` requests route through `honker-core`
via SQL watcher handles registered by the loaded Honker extension and
return `{:error, reason}` if that extension was not built with the
matching feature.
## Quick start
```elixir
{:ok, db} = Honker.open("app.db", extension_path: "./libhonker_ext.dylib")
{:ok, _id} = Honker.Queue.enqueue(db, "emails", %{to: "alice@example.com"})
case Honker.Queue.claim_one(db, "emails", "worker-1") do
{:ok, nil} -> :empty
{:ok, job} ->
send_email(job.payload)
Honker.Job.ack(db, job)
end
```
Delayed jobs use `run_at:`:
```elixir
{:ok, _id} = Honker.Queue.enqueue(db, "emails", %{to: "later@example.com"}, run_at: System.os_time(:second) + 10)
```
Recurring schedules use `schedule:`:
```elixir
:ok = Honker.Scheduler.add(db, name: "fast", queue: "emails", schedule: "@every 1s", payload: %{kind: "tick"})
```
Supported schedule forms:
- `0 3 * * *`
- `*/2 * * * * *`
- `@every 1s`
`schedule:` is the canonical recurring name. `cron:` is compatibility-only.