Skip to main content

Mapilli

Python 3.10+ License: MIT Documentation

Modern async Python client for the Finger protocol (RFC 1288)


What is this?

The Finger protocol was the internet's original social network — a way to check if someone was online, read their status, and learn a bit about them. Think of it as the .plan file era's equivalent of checking someone's profile.

Mapilli brings this classic protocol into modern Python with a clean async API and a simple command-line tool. Whether you're exploring tilde communities, building retro-inspired status pages, or just learning about networking protocols, Mapilli makes it easy.

Features

  • Modern async/await API built on asyncio's Protocol/Transport pattern
  • Full RFC 1288 compliance including query forwarding and verbose output
  • Both CLI and library — use from the terminal or import into your code
  • Type hints throughout for excellent IDE support
  • Flexible query syntax — user@host, @host, /W verbose prefix
  • Concurrent queries — query multiple hosts in parallel
  • Configurable timeouts — don't wait forever for unresponsive servers

Installation

pip install mapilli

Or with uv:

uv add mapilli

Quick Start

From the Command Line

# Query a user
mapilli alice@example.com

# Verbose output (more details)
mapilli -W alice@example.com

# List all users on a host
mapilli -h example.com

# Custom timeout
mapilli -t 10 alice@example.com

From Python

import asyncio
from mapilli import FingerClient

async def main():
    async with FingerClient() as client:
        # Query a user
        response = await client.query("alice@example.com")
        print(response.body)

        # Or specify host separately
        response = await client.query("alice", host="example.com")
        print(response.body)

asyncio.run(main())

Concurrent Queries

async with FingerClient() as client:
    queries = ["alice@host1.com", "bob@host2.com", "charlie@host3.com"]
    responses = await asyncio.gather(*[client.query(q) for q in queries])

    for response in responses:
        print(f"{response.host}: {response.body[:50]}...")

Documentation

Full documentation is available at mapilli.readthedocs.io:

License

MIT License — see LICENSE.txt for details.

Metadata

Release files for mapilli 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 mapilli 0.1.1
File Size Uploaded Provenance Actions
mapilli-0.1.1.tar.gz 9.2 kB With provenance Details for mapilli-0.1.1.tar.gz

Built distribution (wheel)

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

Total release size: 22.1 kB

Release files / mapilli-0.1.1.tar.gz

Download URL mapilli-0.1.1.tar.gz
Size 9.2 kB
Tags Source
SHA-256 checksum
How to use checksums
d3cc2a912303cad75022018935c563bd05efd312042fa196711788f5d7464669
BLAKE2b-256 checksum
How to use checksums
408e89bfdba58ab6e84405ec0e494d0882de0703b7fdacb5cf9c368bb879881c
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 Dec 31, 2025.

Transparency log

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

Download URL mapilli-0.1.1-py3-none-any.whl
Size 12.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fe31d99cc49a382cc46c93fa2548e194b26eeaba9672f37a9620091f67901830
BLAKE2b-256 checksum
How to use checksums
a9262bca47db866bd782fdc74061ac4652a1b959cd27e106a846bb9a12d1293b
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 Dec 31, 2025.

Transparency log

Security for mapilli 0.1.1

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for mapilli-0.1.1.tar.gz

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 Dec 31, 2025.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files Full provenance

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