🔥 Local build, conversion, packaging, publishing, and desktop-ready toolkit for Tailwind CSS projects across multiple generations.
Tailwind CSS Forge is a local-first system for analyzing, converting, compiling, exporting, and publishing Tailwind CSS projects safely.
It is designed for real-world projects such as:
- plain HTML websites
- multi-page static sites
- simple PHP template projects
- legacy Tailwind setups
- browser/CDN-based Tailwind projects that need a production build pipeline
The project currently ships with a working FastAPI backend, a React/Vite frontend, async builds with progress streaming, ZIP export, secure FTP/SFTP publishing, a Tauri desktop shell, and an installer-ready launcher flow for future packaging.
- 🔍 Secure project import into isolated workspaces
- 🧠 Tailwind usage detection from HTML, CSS, config files, and
package.json - 🧭 Strategy planning with confidence, signals, and warnings
- 🌍 Real
pt-BRanden-USi18n support - 🏗️ Real build support for:
play_cdn_conversioncdn_legacycli_buildvite_buildpostcss_buildlegacy_safe_mode
- 📡 Async build jobs with cancel support and WebSocket progress
- 🧾 JSON, Markdown, and log report generation
- 🧮 History, activity, settings, and report views in the UI
- 📦 ZIP export for successful builds
- 🌐 FTP/FTPS and SFTP publishing from
dist - 🔐 Locally encrypted publishing credentials
- 🖥️ Smart launcher with one-click Windows startup
- 🪟 Native Tauri desktop shell with local backend boot
- 🧰 Installer-ready bundle preparation for future PyInstaller or Inno Setup usage
tailwind-css-forge/
├─ backend/ FastAPI API, services, builders, detectors, tests
├─ frontend/ React + Vite web UI
├─ desktop/ Tauri shell and native boot UI
├─ installer/ Installer-ready templates and guides
├─ scripts/ Launcher, bundle preparation, validation helpers
├─ runtime/ Local runtime data during development
└─ build/ Generated distribution artifacts
- Backend: Python 3.12+, FastAPI, SQLite
- Frontend: React, TypeScript, Vite, Tailwind CSS
- Publishing:
ftplibandparamiko - Security: local encryption for stored publish credentials
- Distribution prep: Python launcher + Windows batch entrypoint + Tauri shell + installer templates
- Python
3.12+ - Node.js
20+ npmandnpxavailable inPATH
cd backend
python -m pip install -e .[dev]
uvicorn app.main:app --reloadBackend endpoints:
http://127.0.0.1:8000/api/health
cd frontend
npm install
npm run devFrontend dev server:
http://127.0.0.1:5173
Windows one-click entrypoint:
start_forge.batManual launcher:
python scripts/launch_forge.pyUseful launcher commands:
python scripts/launch_forge.py --prepare-only
python scripts/launch_forge.py --no-browser
python scripts/launch_forge.py --port 8010
python scripts/launch_forge.py --self-check
python scripts/launch_forge.py --self-check --json --assert-readyThe launcher can:
- create the backend virtual environment automatically
- install backend dependencies
- install frontend dependencies in source-layout mode
- rebuild the frontend when needed
- start the backend serving the built frontend
- wait for health checks
- open the browser automatically
- validate source-layout or installed-layout readiness through
self-check
The repository is already prepared for future packaging, without generating an executable yet.
python scripts/render_installer_assets.py
python scripts/prepare_installer_bundle.py --force
python scripts/validate_installer_bundle.pyThis workflow prepares and validates a staged bundle in build/installer-bundle/ that is ready for:
- PyInstaller later
- Inno Setup later
- Inno Setup wrapping a future PyInstaller output
Key distribution files:
forge-product.jsoninstaller/README.mdinstaller/inno/forge.issinstaller/inno/forge.version.issinstaller/pyinstaller/forge_launcher.specinstaller/pyinstaller/version_info.txt
Main workflow:
POST /api/projects/importPOST /api/projects/{project_id}/analyzePOST /api/projects/{project_id}/buildPOST /api/builds/{build_id}/cancelGET /api/projects/{project_id}/buildsGET /api/builds/{build_id}GET /api/builds/{build_id}/reportGET /api/builds/{build_id}/logPOST /api/builds/{build_id}/export/zipGET /api/historyGET /api/history/projects/{project_id}GET /api/settingsPUT /api/settingsGET /api/projects/{project_id}/publish/profilesPOST /api/projects/{project_id}/publish/profilesPUT /api/projects/{project_id}/publish/profiles/{profile_id}DELETE /api/projects/{project_id}/publish/profiles/{profile_id}POST /api/projects/{project_id}/publish/testPOST /api/builds/{build_id}/publish/ftpPOST /api/builds/{build_id}/publish/sftp
Example import request:
curl -X POST http://127.0.0.1:8000/api/projects/import ^
-H "Content-Type: application/json" ^
-d "{\"source_path\":\"C:/sites/my-project\"}"Converts modern Tailwind browser/CDN usage into a local production build flow.
Handles older CDN-driven Tailwind projects with a safer compatibility-oriented path.
Builds projects that already use Tailwind directives such as @tailwind.
Builds Vite-based projects and materializes final output directly into dist/.
Applies a more conservative compatibility flow for legacy scenarios.
Backend quality:
cd backend
python -m ruff check app tests
python -m pytestFrontend production build:
cd frontend
npm run build
npm run test
npm run test:e2eDesktop shell smoke:
cd desktop/src-tauri
cargo checkCurrent local validation status:
- backend test suite passing
- frontend build, unit tests, and E2E smoke passing
- installer bundle preparation validated
- staged bundle self-check validated
- isolated workspaces per imported project
- backup of
src/before each build - internal command allowlist for build execution
npm install --ignore-scriptsin safety-sensitive flows- encrypted local storage for publishing credentials
- explicit FTPS mode for FTP publishing
- explicit SFTP host key policy support with local
known_hosts - publishing always uses
dist, never the original project folder
Please read SECURITY.md before reporting vulnerabilities.
The web interface already includes:
- health and recent-project dashboard
- project import flow
- analysis view
- async build, live progress, cancel, and ZIP export flow
- settings, report, FTP/SFTP publishing, and history screens
- theme switching and full
pt-BR/en-USlanguage switching
The native desktop shell is already present and can:
- boot the local backend
- wait for health before opening the UI
- expose native folder selection
- package the existing web app without changing the backend architecture
- 🧾 richer history filtering and comparison views
- 📊 broader observability and diagnostics
- 🧳 stronger installer assets and signed release polish
- 🖥️ final desktop packaging and release workflow hardening
installer/README.mddesktop/README.md
- Initial release.
Contributions are welcome. Please read CONTRIBUTING.md before opening a pull request.
This project is licensed under the MIT License. See LICENSE for details.