CHANGELOG.md

# Changelog

All notable changes to this project are documented in this file. The format
is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and this
project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.1.1] - 2026-04-23

### Fixed
- `BoltexNif.Native` looked for a checksum file named
  `checksum-boltex_nif-<version>.exs` that `rustler_precompiled` never
  generates — the real filename is `checksum-Elixir.BoltexNif.Native.exs`
  (derived from the module name). The mismatch meant `force_build` was
  always `true` when installing from Hex, so every consumer needed a Rust
  toolchain despite the README promising the opposite. The lookup now
  uses the correct name anchored at `__DIR__` (instead of the unreliable
  `File.cwd!()`), so precompiled binaries are picked up transparently.
  Thanks to the users who hit this on a fresh `mix deps.get`.

## [0.1.0] - 2026-04-22

### Added
- First public release.
- Rustler-based NIF wrapping [`neo4rs`](https://github.com/neo4j-labs/neo4rs)
  `0.9.0-rc.9` with the `unstable-v1` feature bundle (Bolt v5 protocol,
  result summaries, packstream serde).
- Precompiled binaries shipped via `rustler_precompiled` — no Rust toolchain
  required to install on macOS (ARM/Intel), Linux (glibc/musl, x86_64/ARM64)
  and Windows (MSVC x86_64). `FORCE_BOLTEX_BUILD=1` opts into building from
  source.
- Async NIF pattern built on a global Tokio runtime: every call returns a
  fresh `ref` synchronously and the driver sends `{ref, result}` back through
  `OwnedEnv::send_and_clear`.
- Auto-commit queries: `BoltexNif.connect/1`, `run/4`, `execute/4`,
  `run_with_summary/4`.
- Explicit transactions: `begin_transaction/2`, `txn_run/4`, `txn_execute/4`,
  `commit/2`, `rollback/2`, plus the `transaction/3` helper (commit on
  `{:ok, _}`, rollback on `{:error, _}`, rollback + re-raise on exception).
- Lazy row streaming: `stream_start/4`, `stream_next/2`, `stream_close/2`.
- Full Bolt type marshalling to idiomatic Elixir:
  - Primitives and collections.
  - Graph types: `%BoltexNif.Node{}`, `%BoltexNif.Relationship{}`,
    `%BoltexNif.UnboundRelationship{}`, `%BoltexNif.Path{}`.
  - Spatial: `%BoltexNif.Point{}` (2D/3D).
  - Temporal: `%Date{}`, `%Time{}`, `%NaiveDateTime{}`, plus
    `%BoltexNif.Time{}`, `%BoltexNif.DateTime{}`,
    `%BoltexNif.DateTimeZoneId{}`, `%BoltexNif.Duration{}`.
- `%BoltexNif.Summary{}` + `Counters` + `Notification` for operational
  metadata (available/consumed-after ms, query type, counters, notifications
  with source position).
- Structured Neo4j errors as `%BoltexNif.Neo4jError{code, message, kind}`
  with 13 classified kinds and `Neo4jError.retryable?/1`.
- TLS configuration (CA, mutual, skip-validation), user impersonation,
  bookmarks on commit.

### Unreleased / future
- `element_id` on Nodes/Relationships (requires decoding via the Bolt v5
  serde path, not the classic `types/*` tree we currently use).
- Feature flags for `json` and `uuid` in `neo4rs`.
- Richer streaming (per-stream `fetch_size` override, streaming within a
  transaction).

[Unreleased]: https://github.com/rocket4ce/boltex_nif/compare/v0.1.1...HEAD
[0.1.1]: https://github.com/rocket4ce/boltex_nif/releases/tag/v0.1.1
[0.1.0]: https://github.com/rocket4ce/boltex_nif/releases/tag/v0.1.0