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

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.7.2
File Size Uploaded
aioxlib-0.7.2.tar.gz 133.4 kB Details

Built distribution (wheel)

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

Total release size: 219.7 kB

Release files / aioxlib-0.7.2.tar.gz

Download URL aioxlib-0.7.2.tar.gz
Size 133.4 kB
Tags Source
SHA-256 checksum
How to use checksums
f12c727fee65d1f870774c240b1d33228bad6ad0ebebcb6fb7dd2b522c1b2a4b
BLAKE2b-256 checksum
How to use checksums
5b0adbb2edd6e563b61e3e1e77f8d60014ec71ce23ab6b1c8f8c24cb15c6f0db
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.7.2-py3-none-any.whl

Download URL aioxlib-0.7.2-py3-none-any.whl
Size 86.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f82f1e81912c7964a98394960f8a4a861a64cd29606e459dc2e0355c5518917c
BLAKE2b-256 checksum
How to use checksums
225e12f11726dbb6dd36e5860d957dbb4a150202464d0b5539bdb33ccc23982a
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

0.9.0

2 release files

0.8.0

2 release files

This release

0.7.2 This release

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