Hex Documentation Search
Search Elixir package documentation. Prioritize local sources, fetch if needed.
Search Locations (in order)
-
Project deps: deps/<package>/lib/ (source with @moduledoc/@doc), deps/<package>/doc/ (HTML if generated)
-
Fetched docs cache: .hex-docs/docs/hexpm/<package>/<version>/
-
Fetched source cache: .hex-packages/<package>-<version>/
-
HexDocs API: Programmatic search (see below)
-
Web search: Last resort with site:hexdocs.pm
Fetching Locally
Determine version from mix.lock , mix.exs , or prompt user if ambiguous.
Fetch documentation (stores in .hex-docs/)
HEX_HOME=.hex-docs mix hex.docs fetch <package> <version>
Fetch source code (if docs insufficient or unavailable)
mix hex.package fetch <package> <version> --unpack --output .hex-packages/<package>-<version>
Mention adding .hex-docs/ and .hex-packages/ to .gitignore once per session when fetching occurs.
HexDocs Search API
Powered by Typesense at search.hexdocs.pm .
Search within a specific package
curl -s "https://search.hexdocs.pm/?q=<query>&filter_by=package:=[<package>-<version>]"
| jq '.hits[].document | {title, doc, url}'
Search across all packages
curl -s "https://search.hexdocs.pm/?q=<query>"
| jq '.hits[].document | {package, title, doc}'
Response fields:
-
package : Package name
-
title : Module/function name
-
doc : Documentation text
-
url : Path to append to https://hexdocs.pm
Version Resolution
From mix.lock
grep '"<package>"' mix.lock | grep -oE '[0-9]+.[0-9]+.[0-9]+'
Latest from hex.pm
curl -s "https://hex.pm/api/packages/<package>" | jq -r '.releases[0].version'
Key Behaviors
-
Prefer local/cached results (version matches project)
-
Show real usage examples from project codebase when relevant
-
Include file:line references for source code
-
Prompt user before fetching external packages
-
Source code @moduledoc/@doc often has more detail than HTML docs