Packages

Embedded Open Graph and Twitter card rendering for Phoenix

Current section

Files

Jump to
og_ex docs function-reference.md
Raw

docs/function-reference.md

# Function Reference
This reference covers every function implemented by the OgEx Elixir library and
Takumi NIF. Public functions also have ExDoc documentation in their source
modules. Private functions are documented here because ExDoc intentionally
excludes private APIs.
## `OgEx`
- `init/1` — initializes the optional backward-compatible endpoint plug.
- `call/2` — eagerly fetches query parameters for applications that retain the
optional plug; new applications do not need it.
## Application internals (`OgEx.Application`)
- `start/2` — starts the OgEx supervisor and its default ETS cache.
## `OgEx.Card`
- `__using__/1` — imports Phoenix component functionality, installs the card
behaviour, and records width, height, and output format.
- generated `__og_ex__/1` — returns the configured `:width`, `:height`, or
`:format` for a card module.
- callback `metadata/1` — returns page and image metadata for the current
assigns.
- callback `render/1` — returns the card's HEEx safe data.
- optional callback `version/1` — returns stable content data used for the image
URL, ETag, and cache key.
## `OgEx.Controller`
- `__using__/1` — installs a controller-local OgEx-aware `render/3`.
- generated `render/3` — forwards the consuming controller's render request to
`OgEx.Controller.render/3`.
- `render/3` — delegates ordinary renders to Phoenix; for an OgEx card, selects
either the normal page response or signed image response and discovers the
signature lazily.
- private `pop_card/1` — separates the `:og` card module from keyword-list or
map template assigns.
## Configuration builder internals (`OgEx.ConfigBuilder`)
- `build/3` — evaluates metadata, creates the deterministic content version and
compact 22-character HMAC, and returns a complete `%OgEx.Config{}`.
- `verify/2` — rebuilds and securely compares the signature bound to the card,
version, and request path.
- private `version/2` — hashes the card identity and either `version/1` output
or full assigns into a URL-safe SHA-256 value.
- private `signature/3` — creates a 128-bit truncated HMAC.
- private `signing_key/1` — derives a domain-separated key from Phoenix's
`secret_key_base`.
- private `image_url/2` — adds the compact signature to the current absolute URL
while preserving unrelated query parameters.
## Request internals (`OgEx.Request`)
- `image_request?/1` — lazily reports whether the reserved signature is present.
- `signature/1` — lazily fetches and returns the signature, or `nil`.
## HTML internals (`OgEx.HTML`)
- `render/1` — evaluates card HEEx safely and wraps it in a complete,
viewport-sized HTML document for the native renderer.
## `OgEx.Renderer`
- callback `render/2` — converts HTML plus rendering options into an encoded
image binary.
## `OgEx.Renderer.Takumi`
- `render/2` — normalizes Elixir keyword options and invokes the native Takumi
renderer.
## Native bridge internals (`OgEx.Native`)
- `render_html/2` — Rustler NIF declaration. Its Elixir body raises
`:nif_not_loaded` only if native loading failed.
## Font internals (`OgEx.Fonts`)
- `load/0` — resolves every configured path or binary into loaded font bytes.
- private `load_font!/1` — reads an existing path; otherwise treats the input
as an already-loaded binary.
## Image response internals (`OgEx.ImageResponse`)
- `send/2` — verifies the request, obtains the encoded image, and sends the
correct immutable HTTP response.
- private `cached_or_render/1` — checks the configured cache and executes the
HTML/native rendering pipeline on a miss.
- private `render/2` — loads fonts, calls the configured renderer, and emits
successful-render telemetry.
- private `content_type/1` — maps `:png`, `:jpeg`, `:webp`, and `:svg` to their
HTTP media types.
## `OgEx.Cache`
- callback `fetch/1` — follows `Map.fetch/2`, returning `{:ok, image}` when
found or `:error` when absent.
- callback `put/2` — stores an encoded image.
## `OgEx.Cache.ETS`
- `start_link/1` — starts the cache table owner.
- `fetch/1` — performs a concurrent direct ETS lookup and returns
`{:ok, image}` or `:error`.
- `put/2` — inserts or replaces an ETS cache entry.
- `init/1` — creates the named, concurrent-read ETS table.
## Head injection internals (`OgEx.Head`)
- `put_config/2` — assigns the card configuration and registers metadata
injection before the response is sent.
- private `inject_metadata/1` — rewrites complete binary HTML responses and
leaves unsupported response shapes unchanged.
- private `replace_closing_head/2` — inserts tags before the first
case-insensitive `</head>` without changing the rest of the original bytes.
## Metadata internals (`OgEx&#46;Meta`)
- `to_html/1` — builds the complete escaped Open Graph and Twitter/X tag set.
- private `meta/1` — safely encodes one `<meta>` element.
- private `optional_meta/2` — omits absent values or adds a `content` attribute
and delegates to `meta/1`.
## Native Rust functions
These functions live in `native/og_ex_native/src/lib.rs`.
- `render_html/3` — exported dirty-CPU NIF. It decodes Elixir arguments, calls
the native pipeline, and returns `{:ok, binary}` or `{:error, reason}`.
- private `render/2` — parses HTML, parses CSS, registers fonts, runs Takumi
layout and painting, and encodes the resulting bitmap.
- private `extract_stylesheets/1` — extracts card-local `<style>` contents
because Takumi's HTML helper discards style elements from the node tree.
- private `output_format/1` — maps raster Elixir atoms to Takumi encoder
settings; SVG bypasses raster encoding and uses Takumi's vector backend.