Documentation

    FolderManifest CLI

    Every FolderManifest feature, from the terminal — scriptable, reproducible, and built for bulk. Schedule nightly verifications, dedupe spreadsheets in batches, and wire integrity checks into CI. The CLI ships inside the Windows app and is included with the trial and every license.

    Published June 24, 2026Updated June 24, 202615 min read

    The FolderManifest CLI brings every feature of the desktop app to your terminal so you can automate the boring, prove the important, and clean up in bulk. Instead of clicking through the GUI, you run a command — and because each command has a stable exit code and optional JSON output, those commands drop straight into Windows Task Scheduler, batch files, and CI pipelines.

    The CLI ships inside the desktop app and is available to trial and paid users (the same license as the GUI). It is not a separate install and is not published to a package manager — it lives in the app you already installed, and it runs whether the app window is open or closed.

    Schedule nightly verification so backups check themselves
    Dedupe and merge CSV/Excel lists across files in one command
    Generate git- and AI-friendly Markdown + JSON manifests
    Fail a CI build the moment a tracked file changes

    Install & first run

    Install FolderManifest, activate a trial or license, and the CLI is ready. Open any terminal and just type foldermanifest:

    Scan My Folder Free for 7 Days

    Included with the 7-day trial and every lifetime license · No credit card · Runs locally on Windows

    Terminal
    foldermanifest --version
    foldermanifest --help

    Every command follows the same shape: foldermanifest <command> [paths...] [options].

    Quick start

    Three commands cover most of what people reach for first:

    Terminal
    # Create a manifest of a folder (Markdown, with SHA-256 checksums)
    foldermanifest generate "C:\Projects\Photos"
    
    # Verify a folder against a saved JSON manifest (great for Task Scheduler/CI)
    foldermanifest verify "C:\Projects\Photos" --manifest photos.json
    
    # Hash some files
    foldermanifest checksum report.pdf invoice.xlsx

    Create a manifest — generate

    generate <dir> walks a folder, hashes every file, and writes a manifest: a complete, timestamped record of exactly what was there and what it contained. Think of it as a notarized photograph of a folder at a moment in time.

    OptionDescriptionDefault
    --format <list>One or more of html, md, json (comma-separated)md
    --algo <a>Checksum algorithm: crc32 or sha256sha256
    --duplicatesAlso detect duplicate filesoff
    --out <path>Output file (single format) or base path (multiple formats)./<folder>-manifest.<ext>
    Terminal
    foldermanifest generate "C:\Photos" --format md,json --algo sha256 --out photos
    # writes photos.md and photos.json
    Freelancers & agencies

    Turn “I delivered everything” into proof

    A design studio ships a 4 GB folder of final assets to a client, then generates a Markdown manifest and attaches it to the handoff email. Months later the client claims three logos were “never sent.” The manifest lists every file, its size, and its SHA-256 — dated and signed off. The dispute ends in one reply instead of a week of finger-pointing and re-exports.

    Benefit: fewer disputes, no unpaid rework, a paper trail you control.

    Prove nothing changed — verify

    verify <dir> --manifest <file> compares a folder's current state to a saved manifest and tells you what drifted. It exits 0 when everything matches and 1 when anything was added, removed, or modified — so a one-line script can react.

    OptionDescription
    --manifest <file>Required. The manifest to check against (.json or .html).
    --algo <a>Override checksum algorithm (crc32 / sha256).
    Terminal
    foldermanifest verify "C:\Photos" --manifest photos.json
    
    # Branch on the result in a script:
    foldermanifest verify "C:\Photos" --manifest photos.json || echo "FILES CHANGED!"

    Markdown manifests are read-only and rejected by verify — use .json or .html as the verify input.

    IT & MSPs

    Catch silent corruption and ransomware early

    A managed-services provider keeps a JSON baseline of each client's critical share. A scheduled verify runs every morning at 5 a.m.; if the exit code is 1, the script emails the on-call tech the list of changed files. When a ransomware process quietly starts rewriting documents over a weekend, the Monday-morning alert lands hours before anyone opens a file — turning a full restore into a contained incident.

    Benefit: hours of early warning, smaller blast radius, lower recovery cost.

    Hash files — checksum

    checksum <paths...> computes SHA-256 for files (and for files inside given folders). Add --json for machine output or --report for an HTML report.

    Terminal
    foldermanifest checksum *.iso --json
    foldermanifest checksum *.iso --report checksums.html
    Anyone transferring data

    Trust that a transfer arrived intact

    Before shipping a drive of raw footage to a post house, an editor hashes the source folder; the post house hashes it on arrival and compares. Identical SHA-256s mean every byte survived the trip — no re-shoots because of a corrupt clip discovered three weeks later.

    Benefit: confidence at the handoff, not a nasty surprise downstream.

    Reclaim storage — duplicates

    duplicates <paths...> finds — and optionally cleans — duplicate files across the given files/folders by comparing contents, so it catches copies even when the filenames differ. (This is distinct from sheet-analyze/sheet-dedupe, which work on rows inside a spreadsheet.)

    OptionDescriptionDefault
    --cleanMove extra copies to the Recovery Bin, keeping one per groupoff (find only)
    --keep first|lastWith --clean, which copy to keepfirst
    --report <path>Write an HTML report
    --out <path>Write the result as JSON
    Terminal
    # Find duplicates in a folder
    foldermanifest duplicates "C:\Downloads" --report dupes.html
    
    # Find AND clean: move extra copies to the Recovery Bin (reversible)
    foldermanifest duplicates "C:\Photos" --clean

    Cleaning never hard-deletes — copies move to the Recovery Bin and can be restored anytime; each group always keeps one file.

    Teams on shared drives

    Stop paying to store the same file ten times

    A small firm's NAS is nearly full and a storage upgrade is being quoted. A duplicates scan of the shared drive produces an HTML report showing 180 GB of byte-identical copies — the same proposal PDF saved into nine project folders, years of re-downloaded installers, duplicated photo imports. They delete with confidence (matches are content-verified) and defer the upgrade.

    Benefit: real money saved, decisions backed by a shareable report.

    Compare files & folders

    compare-files <a> <b> compares two files and compare-folders <a> <b> compares two folders (added / removed / modified). Both exit 1 when they differ, so they gate scripts just like verify.

    Terminal
    foldermanifest compare-files old.pdf new.pdf
    foldermanifest compare-folders ".\backup" ".\live"
    Anyone migrating data

    Confirm a move copied everything — before deleting the source

    Migrating a 50,000-file project archive to a new server, an admin runs compare-folders between the old and new locations. The report flags 12 files that failed to copy (locked during the run). They re-copy those 12 and re-run until the exit code is 0 — then they wipe the old volume. No silent data loss, no "we'll notice in six months."

    Benefit: migrate without fear; delete the source only when it's provably safe.

    Inspect metadata — metadata

    metadata <paths...> extracts metadata (MIME type, size, embedded fields) from files. Add --json to feed an inventory pipeline or --out to save it.

    Terminal
    foldermanifest metadata photo.jpg song.mp3 --json
    foldermanifest metadata photos/* --out metadata.json

    Clean spreadsheets — sheet-dedupe & sheet-analyze

    The spreadsheet commands are namespaced (sheet-) to keep them clearly separate from the file-level duplicates tool. They operate on rows and values inside a CSV/XLSX, not on files.

    sheet-dedupe — remove or merge duplicate rows

    It has two modes:

    • Single file — one file + --key removes duplicate rows.
    • Cross-source — two or more files are combined and deduped across all of them, matching the key columns by name.
    OptionDescriptionDefault
    --key <cols>Required. Column names or 0-based indices (cross-source matches by name)
    --action <a>keep-first, keep-last, or merge-fill-blankskeep-first
    --sheet <name>Worksheet name (XLSX)first sheet
    --format <f>Output csv or xlsxcsv
    --out <path>Cleaned output file<file>-deduped / combined-deduped
    --report <path>Also write an HTML report
    --list-sheetsList the .xlsx worksheet names and exit (then pick one with --sheet)
    Terminal
    # Single file — collapse repeats by Email, filling blanks from later rows
    foldermanifest sheet-dedupe contacts.xlsx --key Email --action merge-fill-blanks --format xlsx
    
    # Combine + dedupe across multiple files (key matched by column name)
    foldermanifest sheet-dedupe list-a.csv list-b.csv list-c.csv --key Email --out master.csv --report dedupe.html

    sheet-analyze — duplicate-value report (no changes)

    Finds duplicate values across cells and reports them per column — so you can see which columns have repeated values before you change anything. Nothing is modified; run it first to understand your data. Limit it with --columns (optional — defaults to all columns), and note this uses --columns, not --key:

    Terminal
    # All columns (default)
    foldermanifest sheet-analyze contacts.xlsx --report duplicate-values.html
    
    # Only specific columns
    foldermanifest sheet-analyze contacts.xlsx --columns Email,Phone

    On either spreadsheet command, --list-sheets prints an .xlsx file's worksheet names and exits (mirroring the app's worksheet picker) so you can pick the right --sheet:

    Terminal
    foldermanifest sheet-analyze quarterly.xlsx --list-sheets
    Marketing & sales ops

    Merge three lists without burning your sender reputation

    Before a campaign, ops has a webinar list, a trade-show list, and the CRM export — overlapping, with the same person appearing in two or three with different missing fields. One sheet-dedupe with --key Email --action merge-fill-blanks combines all three into a single clean master, filling blank phone numbers and titles from whichever row had them. No contact gets emailed twice, bounce rates stay low, and the mailbox provider keeps trusting the domain.

    Benefit: protect deliverability, stop annoying customers, save the cost of a damaged sender reputation.

    Recovery Bin — recovery

    When the duplicate cleaner removes files (duplicates --clean here, or the app), they go to the Recovery Bin rather than being deleted outright — the same safety net the desktop app uses. The recovery commands manage that bin from the terminal, so you can undo a bulk cleanup or reclaim space without opening the GUI. Restores are reversible; nothing is hard-deleted until you empty it.

    CommandWhat it does
    recovery listList items (id, path, size, removed / expiry dates)
    recovery restore <ids...>Restore the given items (or --all)
    recovery purgePermanently delete only expired items (those past their retention period)
    recovery emptyPermanently delete all items now, regardless of retention
    Terminal
    foldermanifest recovery list
    foldermanifest recovery restore item-12 item-15
    foldermanifest recovery restore --all

    Retention period

    Each item is kept for a set time before it is deleted automatically — 7, 30, 90 days, or never (default 30), configured in the app under Settings → Recovery. When an item is moved in, its expiry is removed date + retention. Expired items are auto-purged when the app starts; recovery purge does the same on demand, while recovery empty deletes everything regardless of expiry. A never retention keeps items until you restore or empty them.

    Anyone who cleans up in bulk

    Undo a too-aggressive cleanup in seconds

    A late-night duplicates --clean sweep removed more than intended. Instead of hunting through folders or a backup, one recovery list shows what moved and recovery restore --all puts it back — and with a 30-day retention, the files were still there to restore.

    Benefit: clean aggressively without fear of permanent loss.

    Output formats — and why each one matters

    • Markdown (md) — branded, human- and AI-readable, and diffs cleanly in git. Because the brand and URL travel inside the file, an AI agent that ingests your manifest also ingests where it came from. Read-only — not a verify input.
    • JSON (json) — the exact machine format. Use it for verify and for any tool or agent that parses manifests.
    • HTML (html) — a rich, shareable human report. (CSV and PDF outputs were dropped.)

    Every result command can also save where you choose: --report <file.html> for a formatted report (works for checksum, duplicates, metadata, compare-files, compare-folders, sheet-analyze, and sheet-dedupe) and --out <file.json> for the raw result, manifest, or cleaned spreadsheet.

    Reproducible bulk with --config

    Define a list of jobs once in a JSON file, then run them anytime. Each job takes the same option names as the equivalent flag, and the overall exit code is the worst (non-zero) result among the jobs — so one command can guard a whole runbook.

    nightly.json
    {
      "jobs": [
        { "cmd": "generate", "paths": ["C:\\Photos"], "format": "json", "out": "photos" },
        { "cmd": "generate", "paths": ["C:\\Docs"], "format": "md,json", "out": "docs" },
        { "cmd": "verify",   "paths": ["C:\\Photos"], "manifest": "photos.json" }
      ]
    }
    Terminal
    foldermanifest --config nightly.json
    Operations & compliance

    One file becomes the team's repeatable routine

    An operations lead encodes the month-end evidence routine — snapshot four controlled folders, verify two baselines — into a single config.json checked into the team repo. Anyone can run it, it produces identical output every time, and when the auditor asks "how do you know this folder is unchanged?", the answer is a version-controlled file and a dated report, not tribal knowledge in one person's head.

    Benefit: institutional memory that survives turnover; audits answered in minutes.

    For a full walkthrough of scheduling this on Windows, see Automate folder verification with the FolderManifest CLI.

    Exit codes

    Stable codes let Windows Task Scheduler and CI pipelines branch on the result:

    CodeMeaning
    0Success / no changes
    1Drift detected (verify, compare-*) or a runtime error
    2No active license — trial ended or not activated
    3Usage error (bad / missing arguments)

    Global options available on every command:

    Global options
    --json            Machine-readable JSON to stdout (scripting / agents)
    --out <path>      Write the result to a custom file
    --report <path>   Write an HTML report to a custom path
    --config <file>   Run a batch of jobs from a JSON file (reproducible)
    --quiet           Suppress the trial reminder line
    --help            Show usage
    --version         Show the app version

    Trial & licensing

    • While on trial, every run prints a one-line reminder to stderr: Trial: 5 days left — upgrade at https://foldermanifest.com (silence it with --quiet).
    • When the trial ends (or no license is active), commands stop with exit code 2 and an upgrade notice. Your files are never modified in this case.
    • A paid license removes the reminder. Activate once in the desktop app and the CLI picks up the same license automatically.

    Start scripting your folders

    The CLI is included with the 7-day trial and every lifetime license — install once on Windows and run it from any terminal.

    Troubleshooting

    SymptomFix
    foldermanifest not foundReopen the terminal so it picks up the updated PATH, then try again.
    Exit code 2Activate a trial/paid license in the desktop app.
    verify reports everything changedMake sure the manifest is .json or .html, not .md.
    Need exact output for a scriptAdd --json.

    Frequently asked questions

    What is the FolderManifest CLI?

    It is a command-line interface to every FolderManifest feature — generate manifests, verify folders, hash files, find duplicate files, extract metadata, compare files and folders, and dedupe spreadsheets. It ships inside the Windows desktop app and is included with the trial and every paid license. Run `foldermanifest <command>` in any terminal.

    Is the FolderManifest CLI free or a separate download?

    It is not a separate download and not published to npm or winget. The CLI is part of the installed desktop app and is available to trial and paid users — the same license as the GUI. Without an active trial or license, commands print an upgrade notice and do not modify files.

    How do I verify folder integrity from the command line?

    First create a JSON manifest with `foldermanifest generate "C:\Path" --format json --out baseline`, then run `foldermanifest verify "C:\Path" --manifest baseline.json`. Exit code 0 means nothing changed; exit code 1 means drift was detected, so the command slots straight into scripts, Windows Task Scheduler, and CI pipelines.

    What are the CLI exit codes?

    0 = success / no changes, 1 = drift detected (verify, compare-*) or a runtime error, 2 = no active license (trial ended or not activated), 3 = usage error (bad or missing arguments). Stable codes let Windows Task Scheduler and CI pipelines branch on the result.

    Can I merge and dedupe multiple CSV files from the command line?

    Yes. `foldermanifest sheet-dedupe list-a.csv list-b.csv list-c.csv --key Email --out master.csv` combines all the files and removes duplicates, matching the key columns by name across sources. Use `--action merge-fill-blanks` to combine partial records instead of dropping them.

    Does the CLI need the app window to be open?

    No. Each command starts a short-lived headless process, does the work, and exits — it works whether the app window is open or closed, which is exactly what you want for Windows Task Scheduler.

    How long does the Recovery Bin keep cleaned duplicates?

    Each item is kept for its retention period — 7, 30, 90 days, or never (default 30), set in the app under Settings → Recovery. Expiry is the removed date plus the retention period. Expired items are auto-purged when the app starts; `foldermanifest recovery purge` deletes only expired items on demand, while `recovery empty` permanently deletes everything regardless of expiry. Until then, `recovery restore <ids...>` or `recovery restore --all` brings files back.

    What output formats does the CLI produce?

    Markdown (md) — branded, human- and AI-readable, and git-friendly; JSON — the exact machine format used for verification and by tools and AI agents; and HTML — a rich human report. Markdown is read-only and rejected by verify; use JSON or HTML to verify against. (CSV and PDF outputs were dropped.)