Skip to main content

aioxlib

Human-friendly asyncio interface to the X11 protocol

PyPI Python Versions License: GPL-3.0 Docs

aioxlib is a pure-Python, asyncio-native client for the X11 wire protocol. Open displays, create windows, draw with GCs and the RENDER extension, and stream events — without blocking the event loop and without linking to libX11 or xcb.

Conway's Game of Life on X11 via aioxlib   Rotating 3D wireframe via aioxlib

Examples shipped with the library: Game of Life · 3D wireframe

Why aioxlib?

aioxlib python-xlib xcffib / xpyb
Language Pure Python Pure Python C (libxcb) + Python
Async asyncio first Blocking / threads Blocking
Dependencies None at runtime None libxcb
Protocol access Pack/unpack helpers exposed High-level only Low-level
Extensions RENDER, MIT-SHM, DBE, GLX, … Many Many

Inspired by linuxpy (same author): a clean high-level API when you want it, full protocol detail when you need it.

Requirements

  • Python ≥ 3.12
  • An X server (local or remote) and network/socket access to it ($DISPLAY or an explicit URI)

No third-party Python packages are required at runtime.

Installation

pip install aioxlib

Quick start

Functional API (simplest)

import asyncio
import aioxlib


async def main():
    wnd = await aioxlib.create_window(640, 480, title="Hello from aioxlib")
    await wnd.show()

    async for event in aioxlib.events():
        if wnd.is_delete_window(event):
            break


asyncio.run(main())

Explicit display (object API)

import asyncio
import aioxlib


async def main():
    display = await aioxlib.get_display()
    async with display:
        screen = display.default_screen()
        wnd = await screen.create_window(640, 480, title="Hello from aioxlib")
        await wnd.show()

        async for event in display.events():
            if wnd.is_delete_window(event):
                break


asyncio.run(main())

Features

  • Windows & drawing — create/map/configure windows, GCs, polylines, rectangles, arcs, text, images
  • Events — non-blocking async for event in display.events() stream
  • Properties & atoms — WM_NAME, protocols, custom properties
  • Extensions — BIG-REQUESTS, RENDER, MIT-SHM, DBE, GLX, RANDR, DRI3, Present
  • Pipeline — batch requests with async with display.pipeline(): …
  • Protocol transparent — opcodes, pack/unpack helpers stay accessible

Examples

# clone the repo, then:
python examples/basic.py
python examples/game_of_life.py   # Conway's Life (numpy)
python examples/3d.py             # rotating 3D mesh
python examples/video_shm_dbe.py  # shared memory + double buffering
Example What it shows
basic.py Window + delete protocol
game_of_life.py Animated cellular automaton
3d.py Perspective projection & wireframe
render.py / tristrip.py RENDER extension
shm.py / video_shm*.py MIT-SHM image transfer
cube_dbe.py Double buffering (DBE)
keyboard.py Key events

Package layout

Module Contents
aioxlib (root) Functional API + get_display + common constants
aioxlib.constants X11 constants and enumerations
aioxlib.protocol Pack/unpack helpers
aioxlib.connection Socket connection, Xauthority
aioxlib.display Display, Screen, Window, GC, Pipeline
aioxlib.render / shm / dbe / … Extensions

Classes such as Display, Window, and EventType are imported from their modules (or from the root where re-exported).

Root functional API (selection)

Function Role
get_display / get_default_display Open connection
create_window, map_window, … Windows
events(), pipeline() Event stream / batched writes
flush, query_extension, get_atom, … Display operations
close_default_display Tear down default connection

Documentation

pip install --group docs   # or: pip install mkdocs mkdocs-material 'mkdocstrings[python]'
mkdocs serve

License

GPLv3 or later — see LICENSE.

Author

José Tiago Macara Coutinho https://codeberg.org/tiagocoutinho

Release files for aioxlib 0.9.0

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

Source distribution (sdist)

Source distribution for aioxlib 0.9.0
File Size Uploaded
aioxlib-0.9.0.tar.gz 139.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for aioxlib 0.9.0
File Interpreter ABI Platform
aioxlib-0.9.0-py3-none-any.whl Python 3 none any Details

Total release size: 231.2 kB

Release files / aioxlib-0.9.0.tar.gz

Download URL aioxlib-0.9.0.tar.gz
Size 139.3 kB
Tags Source
SHA-256 checksum
How to use checksums
0a70826d5a581f0be89a40a58e9b7d5f428db9a1a0a1dfc96dd5b54e2063f28c
BLAKE2b-256 checksum
How to use checksums
3b05453c2f733bf7f795470e54f2c1a2d9ee09101c99c14339fa7222e0184980
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.9

Release files / aioxlib-0.9.0-py3-none-any.whl

Download URL aioxlib-0.9.0-py3-none-any.whl
Size 91.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5098bce7e08e0b0ca663873b25d1cf9766ca7295e89c5483a3fe3b04d76d139c
BLAKE2b-256 checksum
How to use checksums
faf79d4ba55d4eedec4f536b2429089bfed996899310b651b9a2ff899f51c86e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.9

Release history Release notifications | RSS feed

0.10.0

2 release files

This release

0.9.0 This release

2 release files

0.8.0

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

0.0.8

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

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