Mafl is a self-hosted personal dashboard that takes a notably privacy-conscious approach by proxying all third-party API calls through its backend. This design ensures that no tracking or data leakage occurs in the user’s browser while still delivering real-time interactive service cards on the homepage. It is built in TypeScript and configured entirely through YAML, positioning itself as a minimal and flexible alternative to bulkier dashboard solutions.
What Mafl is and how it organizes your homepage
At its core, Mafl is a homepage service aimed at organizing your personal dashboards and frequently used services in one place. Unlike typical dashboards that load external content directly in the browser, Mafl routes all service data requests through its backend proxy. This architecture provides a privacy layer by preventing third-party trackers from seeing your IP or gathering browser fingerprint data.
Mafl is implemented in TypeScript, which brings type safety and modern JavaScript features to both frontend and backend code. Its configuration is YAML-based, meaning your entire dashboard layout, theming, and service cards are defined declaratively in a human-readable format. This makes it easy to version control and edit your setup without touching the codebase.
From a deployment perspective, Mafl supports multiple environments:
- Docker: Official images are published on Docker Hub and GitHub Container Registry.
- Node.js: You can clone the repo, install dependencies, build, and run directly.
- Proxmox LXC: A convenient script exists for setting up Mafl as an LXC container.
The project also supports theming and multiple icon packs including Iconify, enabling a high degree of visual customization.
Privacy-focused proxy design and YAML-driven flexibility
What distinguishes Mafl is its privacy-first proxy architecture. Instead of the browser making direct API calls to external services—which exposes your IP and can leak tracking data—Mafl’s backend makes these calls and serves the aggregated data to the frontend. This means the frontend never directly contacts third-party services, reducing privacy risks.
This architecture does come with tradeoffs. Routing all requests through the backend adds latency and requires the server to handle all API logic and rate limiting. However, for personal dashboards where real-time ultra-low latency is less critical, this tradeoff is reasonable.
The code quality appears solid, leveraging TypeScript for type safety and maintainability. The choice of YAML for configuration is pragmatic: it balances user-friendly declarative setup with enough expressiveness to create complex dashboards without programming.
The project does not aim to be a feature-bloated dashboard with tons of plugins or integrations. Instead, it focuses on a clean, minimalistic UI driven by simple configuration. This keeps the codebase manageable and the overall footprint low.
Quick start with Mafl
You can get Mafl running quickly using Docker, Node.js, or Proxmox LXC. Here is the Docker Compose snippet from the README:
version: '3.8'
services:
mafl:
image: hywax/mafl
restart: unless-stopped
ports:
- '3000:3000'
volumes:
- ./mafl/:/app/data/
Alternatively, to run directly with Node.js:
git clone https://github.com/hywax/mafl.git
yarn install
yarn build
yarn preview
For Proxmox users, a script is provided to create an LXC container and install Mafl:
bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/mafl.sh)"
After installation, configuration is done by editing the config.yml file, which defines your dashboard data sources, layout, theming, and languages.
Verdict
Mafl is a solid choice for developers or privacy-conscious users looking for a lightweight, self-hosted dashboard that minimizes data leakage through privacy-through-proxy architecture. Its YAML configuration model makes it accessible to those who prefer declarative setups without diving into code.
The tradeoff is that Mafl is minimalistic and does not aim to replace heavy, feature-rich dashboards. It requires you to be comfortable managing YAML configs and self-hosting. The proxy approach introduces server load and some latency but shields your browser from third-party tracking.
If you want a simple, privacy-respecting dashboard with real-time interactive cards and easy deployment options, Mafl is worth a look. It hits a niche between barebones bookmark homepages and complex dashboard suites, balancing flexibility, privacy, and maintainability.
# Example service card config snippet from config.yml
services:
- name: GitHub
url: https://github.com
icon: iconify:mdi-github
proxy: true
This example shows how a service card is defined with an icon and proxying enabled, illustrating Mafl’s straightforward YAML-driven design.
Related Articles
- Dashy: A YAML-driven self-hosted dashboard for homelab organization — Dashy uses a single YAML config to unify homelab service access with real-time monitoring, multi-page layouts, and SSO.
- Glance: a minimal self-hosted dashboard with YAML-driven widgets and stateless caching — Glance is a lightweight Go dashboard that aggregates feeds and server stats with YAML config, no database, and minimal J
- Runtipi: Simplifying self-hosted Docker apps with an extensible app store — Runtipi abstracts Docker Compose complexity into a one-click web app store for self-hosting multiple services. Built wit
- How umbrelOS simplifies self-hosting with a modular app framework — umbrelOS offers a TypeScript home server OS with a polished UI and 300+ apps, abstracting complex container management f
- Personal security checklist powered by a single YAML source: architecture and insights — A TypeScript project using one YAML file to drive a static site, REST API, and markdown docs for personal security tips.
→ GitHub Repo: hywax/mafl ⭐ 734 · TypeScript