Skip to content

rizquuula/Labalaba

Repository files navigation

Labalaba Logo

Labalaba

A modern, cross-platform process manager with a glassmorphism UI

Build Test Release License Stars Issues Made with Rust Tauri


Spawn, monitor, and manage your apps — all from one beautiful desktop GUI. Labalaba keeps your tasks running in the background while you stay in control.


Download · Report Bug · Request Feature



✨ Features

Feature Description
🚀 Process Spawner Launch any .exe, script, or binary with custom args and environment
📋 Task Persistence Tasks saved to tasks.yaml — survive restarts, start manually
📡 Real-time Logs Live terminal-style log viewer with stdout/stderr per task
🔄 Start / Stop / Restart Full lifecycle control with one click
🛡️ Admin Elevation Run tasks as Administrator via UAC (Windows)
🔁 Auto-restart Automatically restart crashed processes
Cron Scheduling Schedule tasks with cron expressions
🔗 Task Dependencies Start tasks in order with configurable delays
🌓 Light / Dark Theme Glassmorphism UI with smooth theme toggle
🔔 Notifications Desktop alerts on crash or unexpected stop
📦 Single Binary One installer — no separate daemon process to manage
📊 Stats Bar Live counts of running / stopped / crashed tasks

🏗️ Architecture

Labalaba runs as a single Tauri process — the daemon logic is embedded directly inside the app. The frontend communicates with the Rust backend via Tauri commands and events (no HTTP, no sockets).

┌─────────────────────────────────────────┐
│           Labalaba (Tauri App)           │
│                                          │
│  ┌───────────────────────────────────┐  │
│  │  SvelteKit UI (WebView)           │  │  ← Svelte + TypeScript
│  │  invoke() · listen()              │  │
│  └──────────────┬────────────────────┘  │
│                 │ Tauri commands/events  │
│  ┌──────────────┴────────────────────┐  │
│  │  Daemon Logic (Rust / tokio)      │  │  ← DDD architecture
│  │  AppState · Use Cases             │  │    Embedded in Tauri process
│  │  YAML persistence · Log streaming │  │
│  └──────────────┬────────────────────┘  │
└─────────────────┼────────────────────────┘
                  │ std::process::Command
         ┌────────┼────────┐
       Task1    Task2    TaskN  ← OS processes, managed by PID

The daemon logic is built with Domain-Driven Design (DDD):

crates/daemon/src/
├── domain/          # Entities, value objects, repository traits
├── application/     # One use case per file (StartTask, StopTask, …)
├── infrastructure/  # YAML persistence, process spawner, log collector
└── interface/       # axum HTTP handlers (used by standalone daemon only)

📦 Installation

Download Binary (recommended)

Grab the latest release for your platform:

Platform Download
Windows (x64) labalaba-windows-x64.msi
Linux (x64) labalaba-linux-x64.AppImage
macOS labalaba-macos.dmg

Build from Source

Prerequisites: Rust 1.75+, Node.js 18+, npm

git clone https://github.com/rizquuula/labalaba.git
cd labalaba

make install   # install frontend npm dependencies
make dev       # dev mode: Tauri app + hot-reload frontend
make build     # release build (produces installer in gui/src-tauri/target/release/bundle/)

🚀 Quick Start

1. Launch the app

Open Labalaba. The daemon starts automatically inside the app — nothing else to run.

2. Add a task

Click New Task → fill in the executable path → Create Task.

3. Start it

Hit ▶ Start on the task card. Logs stream in real time.


⚙️ Configuration

Tasks are stored in tasks.yaml in the working directory (repo root in dev, next to the binary in production):

tasks:
  - id: "550e8400-e29b-41d4-a716-446655440000"
    name: "My API Server"
    executable: "C:\\Apps\\server.exe"
    arguments: ["--port", "8080"]
    working_directory: "C:\\Apps"
    environment:
      NODE_ENV: "production"
    run_as_admin: false
    auto_restart: true
    schedule: null           # or cron: "0 */6 * * *"
    startup_delay_ms: 0
    depends_on: []

App settings are in settings.yaml:

theme: "dark"              # "dark" | "light"
log_buffer_lines: 5000
notifications_enabled: true
auto_check_updates: true

Data directory: set LABALABA_DATA_DIR to override where tasks.yaml, settings.yaml, and logs/ are stored.


🛠️ Tech Stack

Layer Technology
GUI Tauri 2 + SvelteKit 5 + TypeScript
Backend Rust + tokio — embedded in the Tauri process
IPC Tauri commands (invoke) + Tauri events (listen)
Persistence YAML (serde_yaml)
Scheduling Cron expressions (cron crate)
Styling Glassmorphism CSS with CSS custom properties

📈 Star History

Star History Chart

🤝 Contributing

Contributions are welcome! Please read CONTRIBUTING.md first.

# Fork the repo, then:
git clone https://github.com/YOUR_USERNAME/labalaba.git
cd labalaba

# Create a feature branch
git checkout -b feat/my-feature

# Make changes, then run checks
cargo check -p labalaba-daemon
cd gui && npm run check

# Commit and open a PR
git commit -m "feat: add my feature"
git push origin feat/my-feature

Project Structure

labalaba/
├── crates/
│   ├── daemon/        # Process manager logic (Rust, DDD) — lib + standalone bin
│   └── shared/        # Shared types (DTOs, API models)
├── gui/
│   ├── src/           # SvelteKit frontend
│   │   ├── lib/
│   │   │   ├── api/         # Tauri invoke/listen clients
│   │   │   ├── components/  # UI components
│   │   │   └── stores/      # Svelte stores (tasks, theme, settings)
│   │   └── styles/    # Glassmorphism + theme CSS
│   └── src-tauri/     # Tauri app — embeds daemon logic + Tauri commands
└── docs/              # Design documents & assets

📄 License

MIT © M Razif Rizqullah


If Labalaba saves you time, consider giving it a ⭐

Made with ❤️ and a lot of ☕ in Rust

About

A modern, cross-platform process manager

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors