tina4
Unified CLI for the Tina4 framework — Python, PHP, Ruby, and Node.js.
A single Rust binary that auto-detects your project language, compiles SCSS, watches files for hot-reload, and delegates to the language-specific CLI.
Install
macOS / Linux
|
Or with wget:
|
The script auto-detects your OS and architecture, downloads the correct binary from the latest GitHub release, and installs it to /usr/local/bin. Override the install location with:
TINA4_INSTALL_DIR=/.local/bin |
Windows (PowerShell)
irm https://raw.githubusercontent.com/tina4stack/tina4/main/install.ps1 | iex
Installs to %LOCALAPPDATA%\tina4 and automatically adds it to your user PATH. Open a new terminal after installation.
Homebrew (macOS / Linux)
From source (requires Rust)
Manual download
Pre-built binaries for every platform are attached to each GitHub release:
| Platform | Binary |
|---|---|
| macOS ARM64 (Apple Silicon) | tina4-darwin-arm64 |
| macOS x86_64 (Intel) | tina4-darwin-amd64 |
| Linux x86_64 | tina4-linux-amd64 |
| Linux ARM64 | tina4-linux-arm64 |
| Windows x86_64 | tina4-windows-amd64.exe |
Quick start
# Check your environment
# Create a new project (prompts for language if multiple runtimes are installed)
# Start the dev server with SCSS compilation and hot-reload
Commands
| Command | Description |
|---|---|
tina4 doctor |
Check installed languages, package managers, and Tina4 CLIs |
tina4 install <language> |
Install a language runtime (python, php, ruby, nodejs) |
tina4 init [language] <path> |
Scaffold a new Tina4 project. Prompts for language if not specified and multiple runtimes are available |
tina4 serve [--port N] [--host H] [--dev] [--production] [--no-browser] |
Compile SCSS, start the dev server, watch files, open the browser |
tina4 scss [-w] |
Compile SCSS files (src/scss → src/public/css). Use -w to watch |
tina4 migrate [--create <name>] |
Run database migrations or create a new one |
tina4 test |
Run project tests (delegated to the framework CLI) |
tina4 routes |
List registered routes |
tina4 generate <type> <name> |
Generate scaffolding: model, route, migration, middleware |
tina4 ai [--all] [--force] |
Detect AI coding tools and install framework context/skills |
tina4 console |
Start an interactive REPL with the framework loaded (delegated) |
tina4 env [--sync] [--example] [--list] |
Scan the project for referenced env vars, merge with .env.example, prompt for missing values |
tina4 agent [--port N] |
Start the AI agent server for Code With Me |
tina4 books |
Download the Tina4 book into the current directory |
tina4 docs |
Download framework-specific documentation into .tina4-docs/ |
tina4 i-want-to-stop-using-v2-and-switch-to-v3 |
Migrate a v2 project to the v3 structure |
tina4 update |
Self-update the tina4 binary and remove old v2 CLI binaries |
How it works
- Language detection — scans for
pyproject.toml,composer.json,Gemfile, orpackage.jsonto determine the project language - SCSS compilation — uses the grass crate (pure Rust Sass compiler) so individual frameworks don't need their own SCSS compilers
- File watching — monitors
src/,migrations/, and.envfor changes. On a meaningful change it POSTs/__dev/api/reloadto the framework (the server keeps running); the framework then broadcasts the reload to the browser via WebSocket (/__dev_reload) with a polling fallback (GET /__dev/api/mtime). SCSS changes are recompiled in-place and signalled astype: "css"so the browser swaps the stylesheet without a full reload. Events are filtered to real source changes — metadata/access events,__pycache__,.git,node_modules,vendor,dist,target,logs,.log/.db*/.pyc/.swpfiles are ignored, and a real mtime check defeats overlayfs / polling-mode spurious events (Podman, distrobox) - Delegation — forwards commands like
migrate,test,routes,console, andaitotina4python,tina4php,tina4ruby, ortina4nodejsas appropriate - Self-update —
tina4 updatechecks GitHub releases and replaces the binary in-place. Also detects and removes old v2 CLI binaries that may be shadowing the new CLI
Upgrading from v2
If you have an older v2 Tina4 project, run tina4 i-want-to-stop-using-v2-and-switch-to-v3 inside the project directory. The verbose name is deliberate — this is a one-way migration and we want you to mean it. It will:
- Move top-level directories (
routes/,orm/,templates/, etc.) intosrc/ - Update dependency versions in your manifest file to v3
- Delegate any language-specific code changes to the framework CLI
If you have old v2 CLI binaries (tina4python, tina4php, etc.) installed globally, tina4 update will detect and remove them.
License
MIT