Skip to content

v2.0.0

Choose a tag to compare

@patsoffice patsoffice released this 15 Mar 20:42
2dced25

Aliasman 2.0 — Complete Rewrite in Rust

v2.0.0 is a ground-up rewrite of aliasman from Go to Rust. The original Go CLI has been replaced with an async, workspace-based Rust project offering the same functionality plus a new web frontend, additional storage backends, and a more extensible architecture.

Architecture

Three-crate workspace:

  • aliasman-core — async library with StorageProvider and EmailProvider traits, enum dispatch, models, and all domain logic
  • aliasman-cli — Clap-based CLI binary with comfy-table output
  • aliasman-web — Axum web server with Askama templates and HTMX-powered UI

Fully async (tokio), thiserror errors in core, anyhow in binaries, TOML config with named multi-system support.

Storage Providers

  • SQLite — with schema migration system (PRAGMA user_version) and sequential versioned migrations
  • S3 — Rust-native JSON format with index optimization for fast loading; supports AWS credential chain, static credentials, custom endpoints (MinIO, LocalStack), and force_path_style
  • PostgreSQL — native TIMESTAMPTZ/BOOLEAN types, schema versioning via aliasman_meta table
  • Storage conversionstorage convert command to migrate between any providers, with --legacy-source flag for reading Go-era S3 format

CLI Commands

  • alias create, delete, list, edit — full CRUD with dual-write (email provider first, then storage)
  • alias suspend / unsuspend — toggle alias suspension with dual-write
  • alias search — regex filtering across all alias fields
  • audit — compare storage vs email provider, detect discrepancies (storage-only, email-only, address mismatch)
  • config — display resolved configuration
  • --dry-run flag on all 4 mutation commands (create, delete, suspend, unsuspend)
  • Aliases displayed as alias@domain via full_alias()

Web Frontend

  • HTMX-powered alias listing with search/filter and system switching
  • Full mutation support: create (with random name generator), edit, delete, suspend, unsuspend
  • Auto-refresh alias table on mutations via HX-Trigger events
  • OOB swaps keep alias count in sync on partial updates
  • Shared Askama templates with Tailwind CSS

CI/CD & Packaging

  • GitHub Actions CI (fmt, clippy, test) on push/PR
  • Release workflow triggered by version tags — builds CLI artifacts for x86_64 Linux and aarch64 macOS
  • Multi-stage Dockerfile (builder + debian-slim runtime) with Docker image pushed to GHCR

Migration from v1.x (Go)

The S3 storage provider supports reading the original Go implementation's metadata-based format via the --legacy-source flag on storage convert. SQLite and PostgreSQL are new backends with no Go-era equivalent.

Assets

  • aliasman-aarch64-macos.tar.gz — macOS (Apple Silicon)
  • aliasman-x86_64-linux.tar.gz — Linux (x86_64)