Skip to content

Blacksmith v0.2.1 - First Public Release

Choose a tag to compare

@jimididit jimididit released this 15 Dec 07:53
· 125 commits to main since this release

🎉 Blacksmith v0.2.1 - First Public Release

I'm excited to announce the first public release of Blacksmith! 🔨

Blacksmith v0.2.1 is a cross-platform CLI tool that streamlines the installation of development and cybersecurity tools after a fresh OS install. This release introduces major cross-platform enhancements, making it easier than ever to create and manage tool sets that work seamlessly across Windows and Linux.

🚀 What's New

Cross-Platform Set Definitions

Blacksmith now supports true cross-platform tool sets with OS-specific manager preferences:

  • target_os - Define which operating systems your set supports (["windows"], ["linux"], or ["windows", "linux"])
  • preferred_managers - Specify preferred package managers per OS (e.g., prefer winget on Windows, apt on Linux)
  • managers_supported - Limit installation to specific package managers

Sets are now package-manager-agnostic by default, automatically using the best available manager for each OS.

Enhanced Create Command

The blacksmith create command has been completely redesigned with a unified search experience:

  • Unified search - Search across all selected managers simultaneously
  • Multi-select - Select packages from multiple managers at once using checkboxes
  • OS selection - Choose Windows, Linux, or both when creating sets
  • Manager selection - Select which package managers to target for each OS
  • Smart grouping - Automatically groups the same package from different managers
  • Cancel/exit option - Easily cancel set creation without saving

New Commands

  • blacksmith info <set> - View detailed information about sets including:

    • OS compatibility badges
    • Preferred package managers
    • Package count and sample packages
    • Manager preferences per OS
  • blacksmith export <set> --format <format> - Export sets to native package manager formats:

    • winget - JSON array of package IDs
    • chocolatey / choco - XML packages.config format
    • apt - Plain text list
    • pacman - Plain text list
    • scoop - JSON array

Smart Manager Selection

Blacksmith now uses intelligent manager selection with:

  • Preference-based selection - Respects preferred_managers from set configuration
  • OS-specific defaults - Falls back to sensible defaults (e.g., winget > chocolatey > scoop on Windows)
  • Automatic fallback - If preferred manager isn't available, tries the next one in order
  • OS compatibility checking - Warns if set isn't compatible with your OS (can be overridden with --force)
  • Manager filtering - Respects managers_supported to limit which managers are considered

Enhanced Search

The blacksmith search command now includes:

  • Manager aliases - Use choco for chocolatey, dnf for yum, etc.
  • OS-aware errors - Clear messages when requesting OS-specific managers (e.g., apt on Windows)
  • Improved display - Results grouped by manager with descriptions

Update Support

All package managers now support updating installed packages:

  • Check before install - Always checks if a package is already installed
  • Update option - Prompt to update if package is installed and update is available
  • Reinstall option - Option to reinstall if needed
  • Skip option - Skip already installed packages

Supported for: winget, chocolatey, scoop, apt, pacman, yum/dnf, snap, and flatpak.

Enhanced List Command

The blacksmith list command now shows:

  • OS compatibility badges - Visual indicators (🪟 Windows, 🐧 Linux, 🍎 macOS)
  • Preferred managers - Shows which managers are preferred for each OS
  • Compatibility status - Indicates if set is compatible with your current OS

📝 Configuration Format Updates

Basic Format (Backward Compatible)

Existing configuration files continue to work without changes:

name: "My Custom Set"
description: "My favorite development tools"
packages:
  - name: git
    managers:
      apt: git
      winget: Git.Git
      chocolatey: git

Advanced Format (New)

New cross-platform fields are available:

name: "Cross-Platform Dev Tools"
description: "Development tools for Windows and Linux"
target_os: ["windows", "linux"]
preferred_managers:
  windows: ["winget", "chocolatey"]
  linux: ["apt", "flatpak"]
managers_supported:
  - winget
  - chocolatey
  - apt
  - flatpak
packages:
  - name: git
    managers:
      winget: Git.Git
      chocolatey: git
      apt: git
      flatpak: org.gnome.gitg

🔧 Installation Options

New installation options:

# Prefer a specific package manager (overrides set preferences)
blacksmith install development --prefer winget

# Force installation even if OS doesn't match set's target_os
blacksmith install development --force

🐛 Bug Fixes

  • Fixed blacksmith info command error where manager names were misinterpreted as CLI arguments
  • Fixed blacksmith create default package name extraction
  • Fixed "skip this manager" option not moving to next manager
  • Fixed winget search Unicode encoding errors on Windows
  • Fixed winget search parsing for older winget versions (v1.12.350 and earlier)
  • Improved error messages for OS-specific package managers

📚 Documentation

  • Updated README with all new features and commands
  • Added comprehensive examples for cross-platform sets
  • Enhanced development section with updated project structure
  • Added guidance for creating cross-platform sets

🔄 Migration Guide

No migration required! All existing configuration files continue to work. The new cross-platform fields are optional and backward compatible.

To take advantage of cross-platform features:

  1. Add target_os to specify which OSes your set supports
  2. Add preferred_managers to specify manager preferences per OS
  3. Optionally add managers_supported to limit which managers are used

⚠️ Important Notes

  • This is the first public release of Blacksmith (v0.2.1)
  • This is an alpha release - the API may change in future versions
  • Currently supports Linux and Windows (macOS support planned for future release)
  • All changes are backward compatible
  • Existing sets continue to work without modification
  • New cross-platform features are optional
  • Requires Python 3.8+
  • Some operations may require administrator/sudo privileges

🙏 Acknowledgments

Thank you to everyone who tested the enhancements and provided feedback! Special thanks to the community for helping identify bugs and suggesting improvements.

📦 Installation

Install Blacksmith v0.2.1:

# Install from PyPI (recommended)
pip install jdi-blacksmith

# Or for current user only (no admin required)
pip install --user jdi-blacksmith

Or use our installation scripts:

Linux:

curl -fsSL https://raw.githubusercontent.com/jimididit/blacksmith/main/install.sh | bash

Windows:

irm https://raw.githubusercontent.com/jimididit/blacksmith/main/install.ps1 | iex

🚀 Quick Start

After installation, get started with Blacksmith:

# Run Blacksmith interactively
blacksmith

# Or install a pre-made set
blacksmith install development
blacksmith install cybersecurity
blacksmith install minimal

# Search for packages
blacksmith search docker

# Create your own custom set
blacksmith create

# View set information
blacksmith info development

# List all available sets
blacksmith list

Thank you for using Blacksmith! If you find it useful, please consider giving it a ⭐ on GitHub!

For issues, feature requests, or questions, please visit our GitHub repository.