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.8.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.8.0
File Size Uploaded
aioxlib-0.8.0.tar.gz 135.0 kB Details

Built distribution (wheel)

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

Total release size: 222.5 kB

Release files / aioxlib-0.8.0.tar.gz

Download URL aioxlib-0.8.0.tar.gz
Size 135.0 kB
Tags Source
SHA-256 checksum
How to use checksums
1fa354226edf4b435a0d8d54749e509ac3542c7f49ffdfd1a514e4f696d26c76
BLAKE2b-256 checksum
How to use checksums
898c235fe4b7601853ee0c273a8d802e8dfe462ce16d77f66e3ccb674ad8dd30
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.8.0-py3-none-any.whl

Download URL aioxlib-0.8.0-py3-none-any.whl
Size 87.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c3cedc6652fde430fc1d08eed758a1947a1adb8a9e327b4ccb5dd64057fee5c3
BLAKE2b-256 checksum
How to use checksums
6211b556f0c5e4e345840cb0dfe40c50776e022f670cb334eb46111a1f43b441
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

This release

0.8.0 This release

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