allegedly

Crates.ioallegedly
lib.rsallegedly
version0.2.1
created_at2025-09-18 18:40:43.98249+00
updated_at2025-09-25 20:10:48.813246+00
descriptionpublic ledger server tools and services (for the PLC)
homepage
repository
max_upload_size
id1845125
size208,190
phil (uniphil)

documentation

README

Allegedly

Some public ledger tools and services for servers

Allegedly can

  • Tail PLC ops to stdout: allegedly tail | jq

  • Export PLC ops to weekly gzipped bundles: allegdly bundle --dest ./some-folder

  • Dump bundled ops to stdout FAST: allegedly backfill --source-workers 6 | pv -l > /ops-unordered.jsonl

  • Wrap the reference PLC server and run it as a mirror, copying ops from upstream:

    allegedly mirror \
      --wrap "http://127.0.0.1:3000" \
      --wrap-pg "postgresql://user:pass@pg-host:5432/plc-db"
    
  • Wrap a plc server, maximalist edition:

    # put sensitive values in environment so they don't leak via process name.
    export ALLEGEDLY_WRAP_PG="postgresql://user:pass@pg-host:5432/plc-db"
    
    # sudo to bind :80 + :443 for acme tls, but it's better to give user net cap.
    # will try to autoprovision cert for "plc.wtf" from letsencrypt staging.
    sudo allegedly mirror \
      --upstream "https://plc.directory" \
      --wrap "http://127.0.0.1:3000" \
      --acme-domain "plc.wtf" \
      --acme-cache-path ./acme-cache \
      --acme-directory-url "https://acme-staging-v02.api.letsencrypt.org/directory"
    

add --help to any command for more info about it

install

cargo install allegedly

the version on crates might be behind while new features are under development. to install the latest from source:

  • make sure you have rust/rustup set up

  • clone the repo

  • install

    cargo install --path . --bin allegedly
    

future improvements

existing stuff

  • signals and shutdown handling

  • monitoring of the various tasks

  • health check pings

  • expose metrics/tracing

  • read-only flag for mirror wrapper

  • bundle: write directly to s3-compatible object storage

  • helpers for automating periodic bundle runs

new things

  • experimental: websocket version of /export

  • experimental: accept writes by forwarding them upstream

  • experimental: serve a tlog

  • experimental: embed a log database directly for fast and efficient mirroring

  • experimental: support multiple upstreams?

  • new command todo: zip or check or diff: compare two plc logs over some time range

  • new command to consider: scatter or something: broadcast plc writes to multiple upstreams

if you have an idea for a new command, open a request!

license

This work is dual-licensed under MIT and Apache 2.0. You can choose between one of them if you use this work.

SPDX-License-Identifier: MIT OR Apache-2.0

Commit count: 0

cargo fmt