postmany v0.4.1

crystal workflow

Postmany

Postmany reads filenames from stdin and transfers file content to/from an HTTP(S) endpoint.

It is designed for event-driven pipelines where a list of files is produced by one tool and streamed to another system.

Features

  • Stream filenames from stdin
  • Upload with POST or PUT
  • Download with GET
  • Multiple worker fibers (-w) for concurrent transfers
  • Static request headers (-H) for APIs like Azure Blob

Installation

Build from source

shards install
shards --production build --release --static

The compiled binary is written to bin/postmany.

Docker development image

Use compose.yml with crystallang/crystal:1.19.1-alpine:

docker compose run --rm dev shards install
docker compose run --rm dev crystal spec

Usage

POST upload

URL="https://example.test/webhook"
find files -name '*.json' | postmany "$URL"

PUT upload (Azure Blob style)

SAS="?sv=2020-10-02&..."
STORAGE_ACCOUNT="mystorageaccount"
CONTAINER="mycontainer"
find images -name '*.png' | \
  postmany -X PUT -H x-ms-blob-type:BlockBlob \
  "https://${STORAGE_ACCOUNT}.blob.core.windows.net/${CONTAINER}${SAS}"

GET download

printf "docs/a.json\ndocs/b.json\n" | postmany -X GET "https://example.test/files"

CLI Reference

Option Description
-w, --workers=WORKERS Number of workers (default: 1, minimum: 1)
-s, --silent Disable per-file stdout output
--no-progress Disable progress messages
-X, --request=METHOD HTTP method: POST, PUT, GET (default: POST)
-H, --header=HEADER Static HTTP header (key:value)
-h, --help Show help
--version Show version

Positional argument:

  • ENDPOINT (required): target URL.

Engineering Docs

Contributor workflows, architecture, and CI/CD details live in CONTRIBUTING.md.

License

UNLICENSE.

Repository

postmany

Owner
Statistic
  • 3
  • 0
  • 3
  • 0
  • 0
  • about 6 hours ago
  • February 27, 2022
License

The Unlicense

Links
Synced at

Sat, 21 Feb 2026 11:18:05 GMT

Languages