Download the PHP package saficodes/laravel-hostkit without Composer
On this page you can find all versions of the php package saficodes/laravel-hostkit. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download saficodes/laravel-hostkit
More information about saficodes/laravel-hostkit
Files in saficodes/laravel-hostkit
Package laravel-hostkit
Short Description Safely switch Laravel asset folders between local (public/) and shared-hosting (root) layouts.
License MIT
Informations about the package laravel-hostkit
laravel-hostkit
A Laravel Artisan package for developers who deploy to shared hosting (Hostinger, Namecheap, cPanel, etc.) where the web root is the project root — not public/.
On shared hosting you can't point the domain to /public, so everything inside public/ — index.php, .htaccess, assets, everything — needs to live at the project root instead. This package moves all public/ contents back and forth safely, including automatically patching index.php paths and securing sensitive files via .htaccess.
The Problem
You don't want to manually move files and patch paths every time you switch environments. This package automates that — with backups, rollback, conflict detection, and automatic .htaccess security.
Installation
Auto-discovery registers the service provider. No config file needed.
Commands
| Command | What it does |
|---|---|
php artisan env:status |
Show current mode and what's in public/ vs root |
php artisan env:productionise |
Move all public/ contents → project root (for shared hosting) |
php artisan env:localise |
Move everything back → public/ (for local dev) |
php artisan env:backup --type=pre-deploy |
Create a named backup snapshot |
php artisan env:reset --to=previous |
Restore from a backup |
Options
Typical workflow
1. Check current state
2. Before pushing to shared hosting
3. Back to local dev after pulling
4. Something went wrong — roll back
What gets moved
Everything inside public/ is moved to the project root, including:
index.php(paths are automatically patched —__DIR__.'/../'becomes__DIR__.'/').htaccess(security rules are automatically added to block sensitive files)favicon.ico,robots.txtbuild/,css/,js/,images/— any asset folders- Any other files or directories you've added
Skipped automatically:
- Symlinks (e.g.
storage/→../storage/app/public) .gitignore
Security
When you run env:productionise, the package automatically adds rules to .htaccess that block web access to sensitive files and directories:
Blocked files: .env, artisan, composer.json, composer.lock, package.json, phpunit.xml, vite.config.js/ts
Blocked directories: app/, bootstrap/, config/, database/, lang/, resources/, routes/, storage/, tests/, vendor/
These rules are automatically removed when you run env:localise.
How mode is detected
The package uses a state file (.hostkit.json) to track the current mode and which items were moved. If no state file exists, it falls back to checking where index.php lives.
| State | Condition |
|---|---|
local |
public/index.php exists (standard Laravel) |
production |
index.php at project root (moved from public/) |
conflict |
index.php found in BOTH locations |
unknown |
index.php not found anywhere |
Backups
Every switch command automatically creates a previous backup before making any changes. The very first switch also saves an original backup. You can create additional named backups at any time:
Backups are stored in .hostkit-backups/ at the project root. Add this to .gitignore.
Safety
- Pre-flight collision check — before moving any files, the package checks for collisions at the destination. If a file already exists, the operation is aborted before touching anything.
- Per-item rollback — if a move fails mid-way, already-moved items are moved back automatically.
- Automatic path patching —
index.phprelative paths are updated so the app works in both locations. - Automatic
.htaccesssecurity — sensitive files and directories are blocked from web access in production mode. - State tracking —
.hostkit.jsonrecords exactly which items were moved, solocaliseknows what to move back. - Atomic reset —
env:resetcopies the backup to a temp location first, then verifies it before wiping the current state. Your backup is never at risk. - Conflict detection — if
index.phpends up in both locations, the package detects this and refuses to switch until you resolve it.
Add to .gitignore
Requirements
- PHP 8.1+
- Laravel 10, 11, 12, or 13
License
MIT © M Safi Abdullah