Skip to main content

Typed Lighter

A fully typed, validated async client for the Lighter API.

PyPI version Python versions Docs License



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'])

Create the API key on Lighter's API keys page: connect your wallet, click Generate API Key, pick an index from 4 to 254, and copy the private key (it is shown once). The same page shows your account index. See Authenticated Setup for the full walkthrough, read-only tokens and registering keys from code.

Why Typed Lighter?

  • 🎯 Precise Types: Typed requests and responses on every surface, down to order-type unions and Literal statuses, not dict/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

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.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for typed-lighter 0.1.1
File Size Uploaded
typed_lighter-0.1.1.tar.gz 163.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for typed-lighter 0.1.1
File Interpreter ABI Platform
typed_lighter-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 455.2 kB

Release files / typed_lighter-0.1.1.tar.gz

Download URL typed_lighter-0.1.1.tar.gz
Size 163.1 kB
Tags Source
SHA-256 checksum
How to use checksums
98624551c6c3b5bb825ce1eeee250aa37b46437bcebfa14992e6b9f6b0fd8131
BLAKE2b-256 checksum
How to use checksums
d9deed77a53b38d1b9a6b60825b8db8a88459642e6062b439e6328dbf8749070
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

Release files / typed_lighter-0.1.1-py3-none-any.whl

Download URL typed_lighter-0.1.1-py3-none-any.whl
Size 292.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2c8337cddf9778d6dd3a945dfe34e02a3022a7d7243f5881843a5104c0e82f3a
BLAKE2b-256 checksum
How to use checksums
595155d51782d33f7ed15d2ac9f957b23d80f67fe09e54bda4549fa0981e0ab5
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

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page