A fully typed, validated async client for the Lighter API.
- Documentation: https://tribulnation.com/typed/lighter
- Source Code: https://github.com/tribulnation/typed/tree/main/packages/lighter
from typed_lighter import Lighter
async with Lighter.new(public=True) as client:
books = await client.api.markets.order_books(filter='perp')
for book in books['order_books'][:5]:
print(book['market_id'], book['symbol'], book['supported_price_decimals'])
Lighter is a perpetuals and spot order book running on its own ZK rollup. Every state change (orders, transfers, leverage, API keys) is a signed L2 transaction; everything else is a REST read, a WebSocket stream, or an auth-token-gated account write. The client mirrors that split:
| Surface | What it covers | Credentials |
|---|---|---|
client.api |
REST: markets, candles, accounts, orders and trades, transfers, blocks, pools, referrals, RFQ | public, or an auth token for private reads |
client.tx |
Signed transactions: orders, cancels, leverage, margin, transfers, sub-accounts, API keys, pools, staking | API key |
client.streams |
WebSocket channels: order books, trades, candles, market stats, account orders, positions, notifications | public, or an auth token for private channels |
client.signer |
Local signing with no network: every transaction type, auth tokens, key generation | API key |
client.explorer |
The public block explorer (mainnet and testnet): blocks, batches, logs, account history | none |
client.deposit_bridge |
Universal deposit addresses from other chains | bridge API key |
Signing happens in pure Python, inside the package: no compiled library, no external process. Transactions go over HTTP or over the shared WebSocket connection, chosen per call.
Authenticated Quick Start
from typed_lighter import Lighter
async with Lighter.new() as client: # reads LIGHTER_ACCOUNT_INDEX, LIGHTER_API_KEY_INDEX, LIGHTER_API_PRIVATE_KEY
account = client.signer.account_index
orders = await client.api.account.orders.active(account_index=account)
for order in orders['orders']:
print(order['market_index'], order['order_index'], order['price'], order['status'])
See Authenticated Setup for how accounts, API keys and auth tokens work on Lighter.
Why Typed Lighter?
- 🎯 Precise Types: Typed requests and responses on every surface, down to order-type unions and
Literalstatuses, notdict/Any. - ✅ Runtime Validation: REST replies, WebSocket frames and transaction receipts validated by default, not just typed on paper.
- ⚡ Async First: Async HTTP and one multiplexed WebSocket connection for streams and transactions, built for concurrent workflows.
- 📚 Full Surface: Every REST endpoint and stream channel, all 20 user transaction types, the explorer and the deposit bridge, not just the popular ones.
Installation
pip install typed-lighter
How To
- Fetch Market Data
- Fetch Account Data
- Paginate Through Results
- Place & Manage Orders
- Listen To Streams
- Batch Transactions
- Transfers & Sub-Accounts
- Sign Offline
Reference
Design Philosophy
Typed Lighter follows the principles outlined in this blog post.
Details matter. Developer experience matters.
License
MIT — see LICENSE.
Release files for typed-lighter 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| typed_lighter-0.1.0.tar.gz | 162.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| typed_lighter-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 454.6 kB
Release files / typed_lighter-0.1.0.tar.gz
| Download URL | typed_lighter-0.1.0.tar.gz |
|---|---|
| Size | 162.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
53820ff8d0a5680e729c4d8988009f2b807b8959ae874281141f46e223d0c825
|
|
BLAKE2b-256 checksum How to use checksums |
eed900a69c6f2161ca416ab85d096c236229c9f3bc3bb8c04f272f85683530cc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency logRelease files / typed_lighter-0.1.0-py3-none-any.whl
| Download URL | typed_lighter-0.1.0-py3-none-any.whl |
|---|---|
| Size | 291.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1d3edd06ae3e3aea10573056572a4c9b6038a1f1ff643359246d86e472c1d6cf
|
|
BLAKE2b-256 checksum How to use checksums |
714c4dda904182590043bb2a7a96b4283ab0b5c458089ed93711dd90cf9baa0f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency log