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 (survives window close in daemon mode)
Cron Scheduling Schedule tasks with standard 5-field cron expressions (survives window close in daemon mode)
🔗 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
🖥️ System Tray Closing the window hides to the tray; use tray Quit to exit fully
📊 Stats Bar Live counts of running / stopped / crashed tasks

🏗️ Architecture

Labalaba is split into two processes: a GUI (Tauri/SvelteKit) and a daemon (labalaba-daemon) that does the actual process management. The GUI is a thin client — it talks to the daemon over a local, token-authenticated HTTP + WebSocket connection on 127.0.0.1. The daemon binary is bundled as a sidecar and launched automatically by the GUI.

┌─────────────────────────────┐        ┌─────────────────────────────────┐
│     Labalaba GUI (Tauri)    │        │    labalaba-daemon (sidecar)     │
│                             │        │                                  │
│  ┌─────────────────────┐   │        │  AppState · Use Cases            │
│  │  SvelteKit UI       │   │  HTTP  │  YAML persistence                │
│  │  (WebView)          │◄──┼────────┤  Log streaming (WebSocket)       │
│  └─────────────────────┘   │   WS   │  Cron scheduler                  │
│                             │        │  Auto-restart loop               │
└─────────────────────────────┘        └──────────────┬───────────────────┘
                                                       │ std::process::Command
                                              ┌────────┼────────┐
                                            Task1    Task2    TaskN  ← OS processes

The daemon can run in two modes:

  • Session only (default): the GUI starts the daemon as a child process and stops it on exit. Cron schedules and auto-restart are active only while the window is open.
  • Daemon mode (Launch at login ON): the daemon is registered as a user-level autostart service (systemd user unit on Linux, LaunchAgent on macOS, registry entry on Windows) and keeps running after the window is closed. Cron and auto-restart survive the GUI closing.

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 + WebSocket server

📦 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 as a background process — nothing else to install or 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
launch_at_login: false     # true = daemon mode; survives window close

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
Daemon Rust + tokio — separate sidecar process
Transport Local HTTP + WebSocket (axum) on 127.0.0.1, token-authenticated
Persistence YAML (serde_yaml)
Scheduling Standard 5-field 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

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors