Elixir and Dart HTTP client user agents
Elixir applications often make outbound calls through HTTPoison, which sits on the Hackney HTTP client, while Dart and Flutter code commonly uses the official http package over dart:io. Each sends a default user agent that names the underlying library unless the developer overrides it, marking the request as scripted rather than a browser.
What this means
In the Elixir ecosystem, the widely used HTTPoison library wraps Hackney, an Erlang HTTP client. Outbound requests therefore tend to surface a Hackney-related default user agent unless the application sets its own. This is typical of API integrations, webhooks, and service-to-service calls.
Dart's standard http package, common in Flutter apps and Dart backends, builds on dart:io and likewise sends a library default when no custom user agent is provided. Mobile apps frequently leave it as-is for simple API calls.
How they appear
Look for a token naming the underlying Elixir/Erlang client (Hackney) or the Dart HTTP stack, without any browser compatibility chain. The absence of AppleWebKit, Gecko, or a Chrome token is itself a strong hint that the caller is a library, not a browser.
Because both ecosystems make overriding the user agent trivial, many production clients replace the default with an app-specific string. Match the defaults to catch unconfigured clients, but do not assume their absence means no Elixir or Dart traffic.
- Elixir HTTPoison wraps Hackney; defaults name the Erlang client
- Dart/Flutter http package sends a Dart library default
- No browser chain present; easily overridden with a custom UA
How it appears in analytics and logs
A user agent naming an Elixir HTTP client such as Hackney, or a Dart/Flutter HTTP library, indicates programmatic traffic from server code or a mobile app, not a human loading a page in a browser.
Diagnostic use case
Identify backend Elixir traffic and Dart/Flutter HTTP calls by their library-named defaults, and recognise that these defaults are routinely overridden.
What WebmasterID can help detect
WebmasterID classifies Elixir and Dart HTTP-library defaults as scripted, non-browser traffic, helping keep backend integrations and Flutter app calls out of human analytics.
Common mistakes
- Assuming all Elixir or Flutter traffic shows a library token — custom UAs hide it.
- Counting backend or app API calls as human page views.
- Reading a library token as proof of abuse rather than just the tool.
Privacy and accuracy notes
These tokens name HTTP libraries, not people. WebmasterID reads them as coarse automation signals and never ties them to a visitor identity.
Related pages
- Ruby and Faraday user agents
Ruby applications make HTTP requests through the standard net/http library and popular wrappers like Faraday. These send library-style default user agents — for example a Ruby token from net/http or a Faraday token — that identify server-side Ruby automation rather than a human browser. Defaults are commonly customised.
- Go-http-client user agent
Programs built with Go's standard net/http client send a default user agent of the form Go-http-client/x.y. Seeing it means a Go application made the request — common for backend services, CLIs, and integrations. It is honest automation, not a browser, and the default can be overridden. This page covers the pattern.
- API client user agents (Postman, etc.)
Developers exercise APIs with tools like Postman, Insomnia, and HTTPie, each of which sends a recognisable default user agent (for example a PostmanRuntime token). Seeing these means someone is testing or scripting against your API, not browsing your pages. This page covers the patterns and how to read them.
- Bot intelligence
Surface Elixir and Dart HTTP-library traffic separately from human visits.
Sources and verification notes
- HTTPoison (Elixir) — Hex docsHTTPoison is built on the Hackney HTTP client; default user agent names the library unless overridden.
- Dart http package — pub.devOfficial Dart/Flutter HTTP package; sends a library default user agent when none is set.
Last reviewed 2026-06-24. Facts are checked against primary/official sources where available; uncertain specifics are marked “Data not yet verified” rather than guessed.