defmodule TerminusDB do @moduledoc """ An idiomatic Elixir client for [TerminusDB](https://terminusdb.org), the document graph database with built-in version control. The client provides an immutable `TerminusDB.Config` for connection context, a Req-based `TerminusDB.Client` HTTP layer, a typed `TerminusDB.Error`, the `TerminusDB.Database` management API, `TerminusDB.Document` CRUD with streaming, `TerminusDB.Schema` frame retrieval, `TerminusDB.Branch` management, `TerminusDB.Commit` history, `TerminusDB.Diff`, `TerminusDB.Merge` (rebase), a `TerminusDB.WOQL` functional query DSL, and `TerminusDB.Telemetry` events on every operation. Connection context is **immutable data**, making it safe for concurrent use. Ecto and ExDatalog integrations are planned for later milestones. See `ARCHITECTURE.md` and the ADRs (under `docs/adr/`) for the full design and roadmap. ## Quick start # 1. Configure a connection (immutable context) config = TerminusDB.Config.new(endpoint: "http://localhost:6363") # 2. Manage databases {:ok, _} = TerminusDB.Database.create(config, "mydb", label: "My Database", comment: "A new database", schema: true ) # 3. Scope to a database (for later document work) config = TerminusDB.Config.with_database(config, "mydb") All public calls return `{:ok, result}` or `{:error, %TerminusDB.Error{}}`. Each `!/1`-suffixed variant raises `TerminusDB.Error` instead. Every operation emits `:telemetry` events (see `TerminusDB.Telemetry`). """ @version Mix.Project.config()[:version] || "0.0.0" @doc """ Returns the library version string. ## Examples iex> String.match?(TerminusDB.version(), ~r/^\\d+\\.\\d+\\.\\d+/) true """ @spec version() :: String.t() def version, do: @version end