← Crafts
Mult preview

Mult

Platform tooling Solo engineer

A Go CLI that bundles everyday file operations — rename, convert, analyze, archive, and cleanup — behind one registry instead of a folder of shell scripts.

Problem

Developer workflows accumulate one-off scripts: slugify a batch of filenames, strip duplicates, resize images, audit permissions. Each script has its own flags, error shape, and dry-run behavior. Consistency disappears; muscle memory replaces design.

Mult registers discrete operations behind a shared core contract so new capabilities plug in without rewriting the CLI shell.

Operation families

  • Rename transforms — slugify, regex replace, sequential numbering, CSV-driven batches, and metadata-aware renames
  • Media and document ops for image, video, audio, and document pipelines
  • Analysis and security passes over filesystem trees
  • Archive and cleanup helpers for bulk maintenance
  • Plugin-style registration via core.DefaultRegistry with category and audience metadata
mult CLI root command operation registry rename/* image/* cleanup/* security/* core.Result per file
Command dispatch
type slugifyOp struct{}

func (o slugifyOp) Name() string            { return "slugify" }
func (o slugifyOp) Description() string     { return "convert filenames to URL-safe slugs" }
func (o slugifyOp) Category() core.Category { return core.CategoryRename }

func (o slugifyOp) Execute(_ context.Context, entry core.FileEntry, _ core.Options) (core.Result, error) {
    stem, extension := splitStemExtension(entry.Name)
    newStem := filename.Slug(stem)
    return renameResult(entry, newStem+extension, "already slugified"), nil
}

func init() { core.DefaultRegistry.Register(slugifyOp{}) }
Mult CLI placeholder
Screenshot placeholder — swap for terminal output from a batch rename run.