All notable changes to this project are documented here. The format follows Keep a Changelog, and the project follows semantic versioning.
0.3.3 (2026-07-01)
Features
- add GhEx.Notifications for consuming the notifications inbox (#104) (2c0668e)
- add GhEx.Notifications thread subscription management (#106) (a40efc4)
0.3.2 (2026-06-29)
Features
- add GhEx.RateLimit.delay_until_reset/2 for opt-in proactive pacing (#101) (dedf9d5)
- add stream_* auto-pagination companions to the convenience modules (#91) (7235196), closes #66
- default per_page to 100 in REST.stream/3 (#92) (be06994), closes #70
- emit :telemetry spans around REST and GraphQL requests (#96) (e54733b)
- handle 304 Not Modified and expose ETag/Last-Modified on REST meta (#97) (59f5bf2), closes #68
Bug Fixes
- accept :params as a map in GhEx.Search (#88) (b563252)
- detect body-only secondary rate limit in RateLimit.retry/2 (#98) (be52b01)
- halt GraphQL.stream when :path traverses a non-map intermediate (#89) (95262a4), closes #64
- halt GraphQL.stream when endCursor is nil despite hasNextPage (#81) (cfc3227)
- label a GraphQL 200 with a non-map body as a shape error, not HTTP 200 (#84) (6d0264e)
- redact credentials from GhEx.Client and cached token inspect (#77) (a514f88)
- refuse cross-host pagination URL in REST.stream/3 (#85) (f9cc218)
- reject a zero or negative JWT :lifetime that mints an expired token (#90) (c81d071)
- run installation-token mint off the GenServer to avoid 5s call timeout (#82) (db15e64)
- URL-encode the file path in GhEx.Contents (#83) (ff3e0b8)
0.3.1 (2026-06-26)
Features
- add Actions and Search convenience modules (#54) (1fa2755)
- add Users, Organizations, Teams, Checks, Statuses, and Gists convenience modules (#57) (a35f7a3)
0.3.0 (2026-06-26)
Features
0.2.1 (2026-06-25)
Bug Fixes
0.2.0 (2026-06-25)
Features
- add GhEx.REST.raw/4 and GhEx.RateLimit.get/1 (58550fd)
- add GhEx.Webhooks for signature verification and payload parsing (5a01e07)
0.1.0 - 2026-06-24
Added
- REST core (
GhEx.REST):get/post/patch/put/deletereturning{:ok, body, meta}/{:error, reason}, andstream/3forLink-header auto-pagination. - GraphQL core (
GhEx.GraphQL):query/3with variable passing and 200-with-errors normalization intoGhEx.Error, andstream/4forpageInfocursor pagination. - Client and request plumbing:
GhEx.new/1,GhEx.Client,GhEx.Request, with the required GitHub headers and bearer auth injected on every call. - Auth (
GhEx.Auth):{:token, t}and{:app, issuer, pem}credential forms. - GitHub App auth:
GhEx.JWT.mint/3(OTP-native RS256, no JOSE dependency) andGhEx.App.installation_token/3/installation_client/3for one-shot installation access tokens. - Transparent installation-token caching:
GhEx.App.installation/3returns a client that mints, caches, and refreshes its token through aGhEx.TokenCache.GhEx.TokenCache.ETSis the default supervised cache (single-flight minting); the behaviour lets you plug in a clustered backend. - Metadata and errors:
GhEx.REST.Meta,GhEx.GraphQL.Meta,GhEx.RateLimit,GhEx.Pagination, and the normalizedGhEx.Error. - Convenience resources:
GhEx.IssuesandGhEx.PullRequests, thin wrappers overGhEx.RESTfor the common Issues and Pull Requests paths. - Opt-in GitHub-aware rate-limit retry:
GhEx.RateLimit.retry/2, aReq-compatible policy that backs off on secondary rate limits (a403withretry-afterorx-ratelimit-remaining: 0).