Skip to main content

🎲 bgg-pi

PyPI version Python Versions Tests Code Style: Ruff License Contributions Welcome

A modern, high-performance asynchronous Python client for BoardGameGeek.

bgg-pi is designed for developers who need reliable, non-blocking access to BoardGameGeek data. Whether you're building a Home Assistant integration, a discord bot, or a data analysis tool, bgg-pi makes it effortless.

✨ Features

  • 🚀 Fully Async: Built on top of aiohttp to keep your applications responsive.
  • ✍️ Record Plays: One of the few libraries that supports logging plays directly to a BGG account.
  • 📦 Collection Management: Fetch user collections with options to filter by ownership, wishlist status, and more.
  • 🎨 Rich Metadata: Retrieve high-fidelity game details including box art, ranks, weight, and play times.
  • 🛡️ Type Safe: Fully typed codebase for excellent IDE autocompletion and error checking.

🚀 Installation

Install via pip:

pip install bgg-pi

🛠️ Quick Start

Fetching User Plays

import asyncio
import aiohttp
from bgg_pi import BggClient

async def main():
    async with aiohttp.ClientSession() as session:
        client = BggClient(session, username="your_username")
        
        # specific api token is optional for public data but recommended
        plays = await client.fetch_plays()
        
        print(f"Found {plays['total']} plays!")
        # Access simple play data
        if plays['last_play']:
             print(f"Last played: {plays['last_play']['game']} on {plays['last_play']['date']}")

if __name__ == "__main__":
    asyncio.run(main())

Logging a Play

Authenticate securely and log your gaming sessions:

async def log_play():
    async with aiohttp.ClientSession() as session:
        # Password is required for play logging
        client = BggClient(session, username="seanmccabe", password="secret_password")
        
        if await client.login():
            success = await client.record_play(
                game_id=13,  # Catan
                date="2026-01-16",
                comments="Great game with friends!",
                length="90",
                players=[
                    {"name": "Sean", "win": True, "score": "10"},
                    {"name": "Friend", "win": False, "score": "8"}
                ]
            )
            
            if success:
                print("Play recorded successfully!")

📚 Documentation

The client covers the most essential BGG XML API2 and GeekPlay endpoints:

  • fetch_plays(): Get logged plays.
  • fetch_collection(): Get a user's board game collection (with filters).
  • fetch_thing_details([ids]): Get detailed metadata for specific games.
  • fetch_game_plays(id): Get play counts for a specific game.
  • record_play(...): Post a new play to BGG.

📦 Projects using bgg-pi

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

Metadata

Release files for bgg-pi 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 bgg-pi 0.1.1
File Size Uploaded
bgg_pi-0.1.1.tar.gz 11.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for bgg-pi 0.1.1
File Interpreter ABI Platform
bgg_pi-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 19.4 kB

Release files / bgg_pi-0.1.1.tar.gz

Download URL bgg_pi-0.1.1.tar.gz
Size 11.1 kB
Tags Source
SHA-256 checksum
How to use checksums
87ce2a66f5ca03308db5af5d1f68e885308275d4fca5f302b0674d6df25d949e
BLAKE2b-256 checksum
How to use checksums
b749072661e15912958a42a9c4184153137f5c3872945264b952333139905c43
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 Jan 16, 2026.

Transparency log

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

Download URL bgg_pi-0.1.1-py3-none-any.whl
Size 8.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c72a0c6c1fc2546d617247754904707a99a6b6cc10b241a5e822be7d7cb294ec
BLAKE2b-256 checksum
How to use checksums
3e3a9a40990a0003dc838a4f135a64ce7d334086a3afdbaa5c47507b5cebd786
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 Jan 16, 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