e.fu
ccxt_client is a pure Elixir client for interacting with 110+ cryptocurrency exchanges through a unified API.
It is generated from the CCXT exchange specifications and requires no Node.js at runtime — just Elixir.
{:ccxt_client, "~> 0.1"}
Overview
The library provides a consistent, type-safe interface for both public market data and authenticated trading
operations across a large number of exchanges.
All exchange modules are generated at compile time from specifications extracted from the
CCXT project’s 7+ years of accumulated exchange knowledge.
Usage examples
Public endpoints (works on all exchanges)
{:ok, ticker} = CCXT.Binance.fetch_ticker("BTC/USDT")
{:ok, book} = CCXT.Kraken.fetch_order_book("ETH/USD")
Authenticated endpoints (trading, balances, etc.)
creds = CCXT.Credentials.new(api_key: "...", secret: "...")
{:ok, balance} = CCXT.Bybit.fetch_balance(creds)
{:ok, order} =
CCXT.OKX.create_order(
"BTC/USDT",
"limit",
"buy",
0.001,
50_000.0,
creds
)
How it works
Instead of hand-writing and maintaining 110+ exchange modules, ccxt_client is generated using a small set of
reusable patterns:
- Exchange specifications (endpoints, signing patterns, symbol formats, capabilities) are extracted from CCXT
- Exchange modules are generated via macros at compile time
- Requests are signed using 7 parameterized signing patterns that cover 95%+ of exchanges
This approach produces a large exchange surface area with minimal duplication and consistent behavior.
Features
- Unified API across 110+ exchanges
- Public endpoints: tickers, order books, trades, OHLCV
- Authenticated endpoints: balances, orders, trading
- Type-safe response structs
- WebSocket support with automatic reconnection
- Circuit breakers and rate limiting
- Bidirectional symbol normalization (
BTC/USDT↔BTCUSDT) - All exchanges compile and pass unit tests
Authenticated endpoints have been verified with real credentials on Deribit, Bybit, and a few other exchanges.
Where help is needed
While the signing implementations follow each exchange’s specification, many exchanges have not yet been tested
with real API credentials.
Community testing would be extremely valuable.
If you have an account on any exchange:
-
Try a public endpoint:
CCXT.YourExchange.fetch_ticker("BTC/USDT") -
Try an authenticated endpoint using testnet or sandbox credentials
-
Report results (what worked / what didn’t) via GitHub issues
Every tested exchange improves the library for everyone.
Selective compilation
If you do not need all exchanges, you can limit which ones are compiled:
config :ccxt_client, exchanges: [:binance, :bybit, :okx]
Status
This is version v0.1.0 — early, but functional.
Feedback, issues, and pull requests are welcome.
Links
- Hex package: ccxt_client | Hex
- Documentation: ccxt_client v0.6.1 — Documentation
- Extraction tooling: https://github.com/ZenHive/ccxt_ex
Trending in Announcing
Other Trending Topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #blog-post
- #phoenix_html
- #iex
- #graphql
- #genstage
- #ai
- #elixirconf-us
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #security
- #hex











First 2 of 2 Posts
e.fu
v0.2.0 released — WebSocket adapters, telemetry, and a breaking change
Quick update on
ccxt_client. v0.2.0 is out with some significant improvements and one breaking change.CCXT.Trading.*modules (Greeks, Funding, Risk, Volatility, Options, etc.) have been extracted to a separate library. If you were using any of those modules, they’re no longer inccxt_client.ccxt_clientis now a focused exchange-access library — HTTP, WebSocket, signing, symbol normalization, and types only. No changes to any exchange API functionality.What’s new
WebSocket Adapter
A managed
GenServerthat handles reconnection, subscription restoration, and auth state automatically:The adapter:
(
:unauthenticated → :authenticated → :expired)The low-level
CCXT.WS.Clientis still available for short-lived connections where you manage lifecycle yourself.Telemetry
Centralized event contract with
attach/2anddetach/1support:Six events covering:
Market Precision Metadata
Extract precision info from any exchange’s markets:
Handles all three CCXT precision modes:
Includes a TradingView-compatible price format helper.
Other improvements
fetch_trades/1arityStill looking for testers
The ask from the original post still stands — if you have an account on any exchange, trying even a single endpoint and reporting what happens is enormously helpful:
Open an issue with what worked and what didn’t.
e.fu
v0.4.0 — Compile-time 93% faster, named params, self-describing APIs
Hey all, sharing a progress update on ccxt_client. v0.4.0 is going up on Hex today.
Compile-time: 35s → 2.5s
The biggest win this release. Exchange modules used to inline the full pipeline per endpoint — Binance alone took 28 seconds. We replaced that with a shared runtime dispatcher (
Dispatch.call/5) where generated functions are thin wrappers looking up pre-computed@endpoint_configs. Binance now compiles in ~1 second..beamsizes dropped 85%.Named params everywhere
Positional
arg0/arg1replaced with actual parameter names across all 52 specs. Function signatures now read naturally:Timeframe translation
Unified timeframes (
"1h","1d") are automatically translated to exchange-native formats ("60","D") for both REST and WebSocket. No more checking what Phemex calls a daily candle.Symbol format v2
Symbol normalization got significantly richer —
forward_aliases, prefix handling, colon separators, andsplit_no_separatorfor exchanges that don’t use delimiters. Coverage went from basic delimiter mapping to handling most exchange quirks.Self-describing APIs (Descripex)
Exchange modules now expose machine-readable metadata about their capabilities:
This is groundwork for agent-consumable APIs — other tools (including AI agents) can discover what an exchange supports programmatically.
Other highlights
CCXT.Health— quick exchange health checks (ping/2,latency/2,status/1)scripts/verify_sync.shvalidates nothing breaks across spec refreshesInstallation
Still need your help testing
The library covers 107 exchanges, but most authenticated endpoints still need real-world validation. If you trade on any exchange and can spare 10 minutes with testnet credentials, open an issue with what works and what doesn’t. Every exchange tested helps everyone.
GitHub · Hex · Docs