Loading repository data…
Loading repository data…
mult1v4c / repository
A grid-based, modular dashboard built entirely from HTML, CSS, and JS with the ability to create your custom API integrations.
Welcome to Project Hestia! This is a modular, grid-based dashboard that runs entirely in the browser (no complex backend required) but includes powerful integrations for your homelab services.
This was made for personal use but as I made more features available, I thought this could be shared with anyone willing to learn how the framework operates.
Inspired by the likes of Homarr, Dash., and Homepage.
localStorage.Hestia comes with a suite of built-in apps. You can add as many as you like!
This is the best way to run Hestia if you plan to use the API integrations (Glances, Pi-hole, etc.), as the included Nginx config handles CORS permissions for you.
Clone the repository:
git clone https://github.com/mult1v4c/hestia-core
cd hestia-core
Build and Run:
docker build -t hestia-core .
docker run -d -p 8080:80 --name hestia hestia-core
Visit http://localhost:8080!
Since Hestia is vanilla JavaScript, you can run it on any web server.
# Example using Python
python3 -m http.server 8000
Note: Without the Nginx proxy included in the Dockerfile, some external APIs (like Deluge or Pi-hole) might block connections due to CORS policies.
To make the integrations work smoothly, Hestia's default.conf sets up internal proxies. When configuring apps in the dashboard, use these relative paths:
/pi-api/admin/api.php (instead of http://192.168.x.x/...)/deluge-api/json/jellyfin-api/Note: You will need to update default.conf to point to your actual server IPs before building the Docker image!
You can export your entire theme and grid layout to a JSON file via the Settings Panel (Gear Icon). This is great for backing up your setup or sharing themes with friends!
[!Warning] CHECK YOUR JSON FILES BEFORE SHARING! The export function will export ALL of the dashboard settings, including themes, color palettes, and app data and settings. Which means API keys, IP addresses, and passwords included. I've included safeguards to clean keys, user IDs, and other sensitive information. But still check to make sure!
Want to build your own widget? Hestia uses a simple class-based system.
js/apps/myApp.jsimport { BaseApp } from "./baseApp.js";
import { registry } from "../registry.js";
class MyApp extends BaseApp {
// 1. Render HTML
async render(app) {
return `
<div class="my-app">
Hello ${app.data.name || 'World'}!
</div>
`;
}
// 2. Logic after DOM insertion
onMount(el, app) {
console.log("I am alive!");
}
}
// 3. Register
registry.register('my-app', MyApp, {
label: 'My Cool App',
category: 'static',
defaultSize: { cols: 2, rows: 1 },
settings: [
{ name: 'name', label: 'Who to greet?', type: 'text' }
],
css: `.my-app { color: var(--brand-primary); font-weight: bold; }`
});
import './myApp.js'; to js/apps/appIndex.js.Project Hestia is open-source and licensed under the MIT License.