A high-level Python client / SDK for the LINE Chrome messaging API.
OkLine reproduces the API of the official LINE Chrome extension (CHROMEOS
3.7.2) — send and receive messages, log in by QR or e‑mail, and automate
your own account from Python. The protocol is reproduced faithfully, including
the mandatory X-Hmac signature (computed by LINE's real ltsm.wasm), so
requests are byte‑for‑byte what the real client sends.
from okline import OkLine
api = OkLine(access_token="…", refresh_token="…")
print(api.get_profile())
api.send_text("u0123456789abcdef0123456789abcdef", "hello from python")- All 77 endpoints — typed methods, or call any of them generically.
- QR & e‑mail login — QR rendered as ASCII right in your terminal.
X-Hmacsigning — handled automatically via the bundled WASM module.- Bot framework —
@bot.on_message, typed models, session persistence. - Response recording — capture, redact and export every request/response.
- CLI —
python -m okline …to call any endpoint from the shell.
pip install oklineThe bundled ltsm.wasm (for X-Hmac signing) ships inside the wheel, so that's
all you need from Python. Optionally pip install qrcode to render the QR-login
code in your terminal.
Prerequisites
- Python 3.9+
- Node.js 18+ on your
PATH— required to compute the mandatoryX-Hmacrequest signature (the realltsm.wasmruns through a tiny Node bridge; details). Check withnode --version.
Verify it works:
python -m okline versionInstall from source instead
git clone https://github.com/NiceDayZc/okline.git
cd okline
pip install -e . # editable install of the okline package + depsFirst login (do this once; the session is then reusable):
okline login # scan the QR with the LINE app — saves tokens.jsonThen just run okline for an interactive, menu-driven UI (pick actions by
number), or use any of the ~30 subcommands directly:
okline # interactive menu (soft colours, no setup)
okline whoami
okline send <mid> "hello"
okline contacts --search soda
okline chatlog <chat-mid> # reads and decrypts recent messages
okline -h # full command listfrom okline import OkLine, Bot
# log in once, reuse the session forever
api = OkLine()
api.auth.qr_login(on_qr=print) # scan the QR with your phone
api.save_tokens("session.json")
# next time
api = OkLine.from_tokens_file("session.json")
api.send_text("c…group…mid", "hi from python")
# a 3-line echo bot
bot = Bot(api)
bot.on_message(lambda ctx: ctx.reply(f"you said: {ctx.text}"))
bot.run()From the shell — okline login once, then everything reuses the session:
okline login # scan the QR; saves tokens.json
okline send <mid> "hello"
okline call Talk.TalkService.getProfile "[2]"Full docs in docs/:
| Guide | |
|---|---|
| Getting started | install, okline login, the menu, first Python call |
| Authentication | token reuse, e‑mail (RSA), QR login, refresh, logout |
| Sending messages | text, stickers, location, contacts, flex, reactions |
| Media · E2EE | send images/files · encrypt & decrypt (1:1 + group) |
| Receiving events · Bots | the SSE stream · the bot framework |
| Recording | paste / export every response |
| CLI · Cookbook | every okline command · copy‑paste recipes |
| Architecture | the protocol, X-Hmac, module map |
| Endpoint reference | all 77 endpoints with their fields |
| Troubleshooting · Contributing |
OkLine is unofficial and not affiliated with LINE Corporation. Use it only with your own account and in compliance with LINE's Terms of Service. Treat tokens like passwords — see SECURITY.md.