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.
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)
| 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)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 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 logRelease 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 logSecurity 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.
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 logA 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.