Skip to content

Latest commit

Β 

History

17 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

CSSForge

Crates.io Version Total Downloads Documentation Rust Version Edition License: MIT Status

CSSForge is a safety-first, lossless semantic CSS refactoring engine and interactive terminal workbench written in Rust. It modernizes flat legacy CSS into native nesting, Range media queries, :is() factoring, and @layer consolidation with zero declaration loss and byte-range surgical precision.


πŸ“¦ Published Workspace Crates

Package Type Crates.io Description
cssforge CLI / TUI Binary crates.io Standalone executable with both an interactive visual terminal UI (TUI workbench) and headless CLI.
cssforge-core Pure Rust Library crates.io Headless AST parser, specificity calculator, and 26 transformation rules with zero UI dependencies.
cssforge-tui UI Component crates.io Reusable Ratatui/Crossterm interface, ASCII banner, step-by-step wizard, and unified diff viewer.

πŸš€ Installation

Option 1: Via Cargo (All Platforms β€” Recommended)

cargo install cssforge

Option 2: Pre-compiled Standalone Binaries

Download from GitHub Releases:

🐧 Linux (x64 / ARM64)

# Extract and copy to local user bin (no sudo needed):
tar -xzf cssforge-v0.3.1-linux-x64.tar.gz
cp cssforge-v0.3.1-linux-x64/cssforge ~/.local/bin/
chmod +x ~/.local/bin/cssforge

🍏 macOS (Apple Silicon M-Series)

tar -xzf cssforge-v0.3.1-macos-arm64.tar.gz
cp cssforge-v0.3.1-macos-arm64/cssforge ~/.local/bin/
chmod +x ~/.local/bin/cssforge

πŸͺŸ Windows (x64 / ARM64 Snapdragon)

Extract cssforge.exe from cssforge-v0.3.1-windows-x64.zip and move it to any directory in your system Path (e.g. C:\Windows\System32 or your tools folder).


πŸ“ Smart File Discovery & Default Ignored Conventions

When executing cssforge without arguments in any project directory (.), CSSForge automatically scans for human-authored .css files while applying zero-config safe discovery rules:

🚫 Automatically Ignored Directories & Purposes

  • node_modules/, vendor/ β€” Third-party dependencies that should never be mutated by local refactoring tools.
  • target/, dist/, build/, out/, .next/, .nuxt/, .turbo/, .svelte-kit/ β€” Ephemeral build and bundler output artifacts.
  • .git/, .hg/, .svn/, .cache/ β€” Version control internals and compiler caches.

🚫 Automatically Ignored File Patterns & Purposes

  • *.modern.css β€” Generated CSSForge output files (prevents infinite recursion loops).
  • *.min.css, *.bundle.css, *.chunk.css β€” Minified/bundled CSS where identifiers and structures are intentionally mangled and not meant for source AST nesting.
  • *.bak.css, *.backup.css β€” Safety backup files created prior to in-place overwrites.
  • *.map.css β€” Source map artifacts.

Tip (Explicit Target Override): If you explicitly specify a file path (e.g. cssforge interactive ./dist/bundle.min.css), CSSForge will directly process the requested file. Standard .gitignore rules are also natively respected.


πŸ’‘ Usage in Any Project

CSSForge automatically scans for CSS files in the current working directory or any path you pass:

1. Interactive TUI Workbench

# Go to ANY web project folder:
cd /path/to/my-project

# Launch interactive modernization:
cssforge

# Or target a specific folder / file:
cssforge interactive ./src/css

Keyboard Shortcuts

  • [Enter] Next step / Apply
  • [Space] Toggle file or rule selection
  • [a] Select / Deselect All
  • [p] Cycle presets (Conservative βž” Modern βž” Refactor βž” Aggressive)
  • [d] / [v] Open live unified code diff & safety proof checklist
  • [q] Quit

2. Headless CLI (CI/CD & Automation)

# Analyze CSS files and report modernization findings
cssforge analyze ./src

# Analyze with structured JSON output
cssforge analyze ./src --json

# Apply modern preset to new files (*.modern.css)
cssforge apply ./src/app.css --preset modern --output new-file

# Overwrite in-place with automatic safety backup (.bak)
cssforge apply ./src/app.css --output overwrite-with-backup --yes

# List all 26 transformation rules
cssforge rules

πŸ› οΈ 26 Transformation Rules Summary

  • Native Nesting: nest-pseudo-class, nest-pseudo-element, nest-attribute, nest-compound, nest-descendant, nest-combinator, factor-selector-list.
  • Conditional At-Rules: nest-media, nest-supports, nest-container, nest-starting-style.
  • Modern Selectors: consolidate-not, modernize-is, modernize-where, modernize-media-range-syntax.
  • At-Rule Merging: merge-same-named-layer, merge-adjacent-media, merge-adjacent-supports, merge-adjacent-container, merge-identical-scope, merge-identical-starting-style.
  • Deduplication & Pruning: merge-adjacent-identical-selector, merge-identical-rule-bodies, factor-identical-states-with-is, gather-related-selector-rules, prune-overridden-declarations.

For complete interactive visual examples of each rule, visit the Documentation Site.


πŸ”’ Safety Guarantees & Why CSSForge

Unlike lowering tools (e.g. LightningCSS, esbuild) or destructive minifiers (e.g. cssnano), CSSForge is built strictly for lossless forward semantic modernization:

  • πŸ›‘οΈ Dual-Layer Zero-Regression Engine: LightningCSS validates the AST, but a surgical Byte Patch Engine mutates only the targeted byte ranges. Untouched lines, developer comments, custom indentation, and quote styles remain 100% byte-for-byte identical.
  • πŸ”¬ Mathematical Proof Engine: Calculates exact specificity vectors (a, b, c) with zero specificity drift guarantees.
  • 🚫 Refusal as a Safety Feature: Refuses transformations that would break CSS matching (such as :is() specificity inflation on lower branches).
  • ✨ Multi-Selector Cluster Factoring: Automatically factors multi-branch rules sharing identical bases into clean :is() blocks with nested children.
  • πŸ”’ Git Dirty-Tree Guard: Blocks destructive in-place replacements if uncommitted Git changes are detected.

🚫 Strict Non-Goals (What We Do NOT & Will NOT Do)

  • ❌ No BEM String Concatenation (&__element): Native CSS & is a selector token (desugars to :is()), NOT a Sass string concatenator. Writing .card { &__title { } } is invalid in native CSS.
  • ❌ No Specificity Inflation / Lifting: If wrapping parent selectors in :is() would artificially lift the specificity of a lower-specificity branch and alter cascade priority, CSSForge refuses the refactor.
  • ❌ No Destructive Re-Serialization: We never re-format untouched code, strip comments, convert colors, or drop intentional browser fallback duplicate declarations.
  • ❌ No Unsound At-Rule Moving Across Barriers: We never hoist @media / @supports blocks across intervening selector barriers if moving them would invert the cascade.

πŸ“„ License

MIT Β© Jayesh Mepani

About

Safety-first semantic CSS refactoring and modernization workbench. Lossless native nesting, media range syntax, :is() factorizing, @layer deduplication, and dead-code elimination via fast Rust CLI & interactive TUI.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages