novay / minios
MiniOS Desktop Environment for Laravel
Requires
- php: ^8.2
- illuminate/support: ^11.0|^12.0|^13.0
- livewire/flux: ^2.0
- livewire/livewire: ^3.0|^4.0
Requires (Dev)
None
Suggests
- league/flysystem-aws-s3-v3: Required to use AWS S3 storage driver in MiniOS Settings (^3.0).
- platformcommunity/flysystem-bunnycdn: Required to use BunnyCDN storage driver in MiniOS Settings (^3.4).
- resend/resend-laravel: Required to use Resend mail driver in MiniOS Settings (^1.0).
Provides
None
Conflicts
None
Replaces
None
README
Sulap web Laravel lu jadi OS desktop multi-window. Gak pake ribet, sat-set langsung jalan.
Bahasa: Bahasa Indonesia | English
๐ฅฑ Lagi Bosen, nih!
Jujur aja, dashboard admin jaman now ngebosenin parah: sidebar item di kiri, navbar di atas, isinya tabel putih polosan.
MiniOS nyulap aplikasi Laravel lu jadi Web Desktop OS interaktif berasa pake macOS atau Windows. Jendelanya bisa digeser (draggable), di-resize, di-minimize ke dock, ada task manager, terminal interaktif, sampe fitur pasang aplikasi baru tinggal lempar file .zip.
Ditenagai langsung sama Laravel, Livewire, Alpine.js, Tailwind CSS v4, dan Vite. Enteng, reaktif, gak ada dependensi framework JS ribet.
โก Cara Pasang (<1 Menit Beres)
1. Install via Composer
composer require novay/minios
2. Install, Migrasi & Run
php artisan minios:install
๐ก Pilihan Mode: Installer bakal nawarin dua pilihan:
- [0] Full Desktop OS โ Menjadikan web lu OS Desktop lengkap (window manager, core apps, wallpapers, & tampilan auth).
- [1] UI Kit Only โ Hanya memasang komponen Blade, style window, dan script tanpa mengutak-atik rute atau autentikasi bawaan web lu.
Bisa juga langsung pake flag:
php artisan minios:install --fullatauphp artisan minios:install --ui.
php artisan migrate npm run build
3. Selesai
Lu gak wajib ngetik apa-apa lagi! Desktop MiniOS bakal tetap jalan lancar jaya membaca sesi login lama lu tanpa masalah!
Mentok di /email/verify?
Itu kelakuan bawaan Fortify. Langsung gini saja:
Buka config/fortify.php, matiin (komentari) baris ini:
// Features::emailVerification(),
๐งน Cara Hapus (Uninstall)
Kalo suatu saat lu pengen bersihin MiniOS dari project Laravel lu:
php artisan minios:uninstall
Perintah ini bakal minta konfirmasi terlebih dahulu, lalu otomatis membersihkan semua konfigurasi, asset publik, rute, migrasi, dan integrasi frontend yang dilibatkan oleh MiniOS tanpa mengganggu file-file bawaan Laravel lainnya.
Bikin Kustom Aplikasi di MiniOS
Ada 3 opsi, pilih yang paling cocok sama gaya lu:
Cara 1: Pake Artisan Generator (Paling Sat-Set)
Tinggal ketik:
php artisan minios:make-app Kasir --icon=shopping-cart --pinned
Bum! Langsung brojol 3 file:
app/MiniOS/Kasir/KasirApp.php(Manifest aplikasi)app/MiniOS/Kasir/Livewire/Kasir.php(Komponen Livewire)resources/views/apps/kasir.blade.php(Tampilan Blade)
Cara 2: Suruh AI (Paling Enak & Cepet)
Proses instalasi sudah nyelipin skill untuk agent, jadi AI coding assistant lu (Google Antigravity, Cursor, Windsurf, Claude Code, atau Copilot) udah paham jeroan arsitektur MiniOS.
Tinggal suruh pake prompt santai begini:
"Bro, buatin aplikasi Kasir (POS) di MiniOS. Ada keranjang belanja, pencarian barang, sama modal cetak struk."
Yang bakal dikerjain otomatis sama AI:
- Bikin kerangka file via
minios:make-app. - Buatin migrasi database + Model Eloquent + jalanin migrasinya.
- Ngoding logic reaktif Livewire-nya.
- Mendesain UI Blade ala desktop yang clean, responsif, dan support mode gelap.
- Nulis testing Pest-nya sekalian!
Cara 3: Bikin Manual (Kalo Lu Gabut & Doyan Ngetik)
1. Bikin Komponen Livewire
Buat file di `app/MiniOS/Todo/Livewire/Todo.php`: ```php namespace App\MiniOS\Todo\Livewire;use Livewire\Component;
class Todo extends Component { public string $newTask = ''; public array $tasks = [];
public function addTask(): void
{
if (trim($this->newTask) !== '') {
$this->tasks[] = trim($this->newTask);
$this->newTask = '';
}
}
public function render()
{
return view('apps.todo');
}
}
Bikin tampilannya di `resources/views/apps/todo.blade.php`:
```blade
<div class="h-full flex flex-col bg-neutral-900 text-white p-4">
<div class="flex gap-2 mb-4">
<input
type="text"
wire:model="newTask"
wire:keydown.enter="addTask"
placeholder="Tulis catatan..."
class="flex-1 bg-neutral-800 border border-neutral-700 rounded-lg px-3 py-2 text-sm text-white focus:outline-none focus:ring-2 focus:ring-indigo-500"
/>
<button wire:click="addTask" class="bg-indigo-600 hover:bg-indigo-500 text-white px-4 py-2 rounded-lg text-sm font-medium transition">
Tambah
</button>
</div>
<ul class="flex-1 overflow-y-auto space-y-2">
@forelse ($tasks as $task)
<li class="bg-neutral-800/60 p-3 rounded-lg text-sm flex items-center justify-between border border-white/5">
<span>{{ $task }}</span>
</li>
@empty
<li class="text-neutral-500 text-sm italic text-center py-8">Belum ada tugas. Santai dulu gak sih?</li>
@endforelse
</ul>
</div>
2. Bikin Manifest Aplikasi (`DesktopApp`)
Buat file di `app/MiniOS/Todo/TodoApp.php`:namespace App\MiniOS\Todo; use App\MiniOS\Todo\Livewire\Todo; use Novay\MiniOS\Contracts\DesktopApp; use Novay\MiniOS\Support\WindowConfig; class TodoApp implements DesktopApp { public function id(): string { return 'todo'; } public function name(): string { return 'Catatan Tugas'; } public function icon(): string { return 'queue-list'; // Nama icon heroicon atau URL gambar } public function entry(): string { return '/todo'; } public function routes(): array { return ['/todo']; } public function isPinned(): bool { return true; // Pin ke dock bawah } public function component(): ?string { return Todo::class; } public function window(): WindowConfig { return WindowConfig::make() ->size(850, 550) // Ukuran default ->min(500, 350) // Minimal resize ->max(1400, 900); // Maksimal resize } }
Selesai! MiniOS otomatis nemuin dan nampilin aplikasi lu di desktop.
๐ Lisensi
MiniOS adalah software open-source berlisensi MIT License. Bebas lu pake, acak-acak, dan kembangin buat project pribadi maupun komersial.
๐ค Pembuat
Dibuat dengan kopi dan cinta oleh Novianto Rahmadi (novay@btekno.id). Kalo ngebantu kerjaan lu, jangan lupa lempar โญ Star di GitHub ya cuy!
