Simple finger server
  • Crystal 82.2%
  • Dockerfile 17.8%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Alexander Fortin b56c3cb33a
All checks were successful
Build and Push Container Image, redeploy service / build-and-push-1 (push) Successful in 36s
Build and Push Container Image, redeploy service / build-and-push (push) Successful in 0s
Build and Push Container Image, redeploy service / deploy-1 (push) Successful in 3s
Build and Push Container Image, redeploy service / deploy (push) Successful in 0s
feat: use default Alpine to reduce image size
2026-10-28 12:58:53 +07:00
.forgejo/workflows feat: use default Alpine to reduce image size 2026-10-28 12:58:53 +07:00
.gitignore feat: first draft 2026-10-18 07:55:35 +07:00
Containerfile feat: use default Alpine to reduce image size 2026-10-28 12:58:53 +07:00
finger.cr fix: use Process for idiomatic shut down handling 2026-10-19 21:29:08 +07:00
LICENSE feat: first draft 2026-10-18 07:55:35 +07:00
README.md feat: first draft 2026-10-18 07:55:35 +07:00
renovate.json feat: first draft 2026-10-18 07:55:35 +07:00

finger

A minimal finger server written in a single Crystal file with no dependencies.

What it does

Listens on a TCP port and answers finger-style queries (user or user@host) by returning the contents of a file named after the user. One file per user, plain text, read from a read-only data directory — nothing is ever written.

  • Query a known user → their file's content
  • Empty, unknown, or invalid query → the content of a randomly chosen user's file
  • No data at all → no such user.

Configuration

Environment variable Default Description
FINGER_PORT 1079 TCP port to listen on
FINGER_DATA_DIR /data Directory containing user files

User files must match /^[A-Za-z0-9._-]+$/. Queries are capped at 512 bytes.

Running

Build directly:

crystal build --release finger.cr
FINGER_DATA_DIR=./data ./finger

Or with the provided image:

podman run -p 1079:1079 -v "$PWD/data:/data:ro" forge.l3x.in/alex/finger:latest

Test it:

finger a@l3x.in

License

See LICENSE.