Modern Python asyncio Finger protocol (RFC 1288) client library
Project description
Mapilli
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,/Wverbose 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:
- Installation Guide — all the ways to install
- Quick Start — get up and running fast
- CLI Reference — all command-line options
- API Reference — complete Python API docs
- The Finger Protocol — learn about RFC 1288
License
MIT License — see LICENSE.txt for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mapilli-0.1.1.tar.gz.
File metadata
- Download URL: mapilli-0.1.1.tar.gz
- Upload date:
- Size: 9.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d3cc2a912303cad75022018935c563bd05efd312042fa196711788f5d7464669
|
|
| MD5 |
e9ab45bab47cea941a37db134af908e2
|
|
| BLAKE2b-256 |
408e89bfdba58ab6e84405ec0e494d0882de0703b7fdacb5cf9c368bb879881c
|
Provenance
The following attestation bundles were made for mapilli-0.1.1.tar.gz:
Publisher:
release-pypi.yml on alanbato/mapilli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mapilli-0.1.1.tar.gz -
Subject digest:
d3cc2a912303cad75022018935c563bd05efd312042fa196711788f5d7464669 - Sigstore transparency entry: 786162218
- Sigstore integration time:
-
Permalink:
alanbato/mapilli@62fc4c5bddcf9b8d0f308bf03566a86eee0870d2 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/alanbato
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-pypi.yml@62fc4c5bddcf9b8d0f308bf03566a86eee0870d2 -
Trigger Event:
push
-
Statement type:
File details
Details for the file mapilli-0.1.1-py3-none-any.whl.
File metadata
- Download URL: mapilli-0.1.1-py3-none-any.whl
- Upload date:
- Size: 12.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fe31d99cc49a382cc46c93fa2548e194b26eeaba9672f37a9620091f67901830
|
|
| MD5 |
ebca798844aa9c6a4e57a4929678b40e
|
|
| BLAKE2b-256 |
a9262bca47db866bd782fdc74061ac4652a1b959cd27e106a846bb9a12d1293b
|
Provenance
The following attestation bundles were made for mapilli-0.1.1-py3-none-any.whl:
Publisher:
release-pypi.yml on alanbato/mapilli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mapilli-0.1.1-py3-none-any.whl -
Subject digest:
fe31d99cc49a382cc46c93fa2548e194b26eeaba9672f37a9620091f67901830 - Sigstore transparency entry: 786162232
- Sigstore integration time:
-
Permalink:
alanbato/mapilli@62fc4c5bddcf9b8d0f308bf03566a86eee0870d2 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/alanbato
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-pypi.yml@62fc4c5bddcf9b8d0f308bf03566a86eee0870d2 -
Trigger Event:
push
-
Statement type: