Convert Figma logo to code with AI

MetaCubeX logometacubexd

Mihomo Dashboard, The Official One, XD

4,231
511
4,231
16

Top Related Projects

4,839

Yet Another Clash Dashboard

A Clash GUI based on tauri. Supports Windows, macOS and Linux.

Run sing-box/mihomo as client in shell

Quick Overview

MetaCubeX/metacubexd is a decentralized application (dApp) that allows users to create and trade non-fungible tokens (NFTs) on the Ethereum blockchain. The project aims to provide a user-friendly platform for artists, creators, and collectors to engage with the growing NFT ecosystem.

Pros

  • Decentralized: The project is built on the Ethereum blockchain, ensuring a decentralized and transparent platform for NFT creation and trading.
  • User-friendly: The project aims to provide a simple and intuitive interface for users to create, buy, and sell NFTs.
  • Diverse NFT Offerings: The platform supports a wide range of NFT types, including digital art, collectibles, and in-game assets.
  • Community-driven: The project has an active community of developers and users who contribute to its growth and development.

Cons

  • Ethereum Gas Fees: As the project is built on the Ethereum blockchain, users may be subject to high gas fees for transactions, which can be a barrier to entry for some.
  • Scalability Concerns: The Ethereum network has faced scalability issues in the past, which could potentially impact the performance and user experience of the MetaCubeX platform.
  • Regulatory Uncertainty: The NFT and cryptocurrency space is still subject to evolving regulatory frameworks, which could introduce uncertainty and risk for the project.
  • Potential for Fraud: As with any decentralized platform, there is a risk of fraud and scams, which the project must work to mitigate.

Code Examples

// Example of an NFT contract in Solidity
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";

contract MetaCubeNFT is ERC721 {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIdCounter;

    constructor() ERC721("MetaCubeNFT", "MCNFT") {}

    function safeMint(address to) public {
        uint256 tokenId = _tokenIdCounter.current();
        _tokenIdCounter.increment();
        _safeMint(to, tokenId);
    }
}

This code example demonstrates a basic NFT contract in Solidity, using the OpenZeppelin library for the ERC721 standard. The contract allows users to mint new NFTs and tracks the token IDs using a counter.

// Example of a React component for minting an NFT
import { useState } from 'react';
import { ethers } from 'ethers';
import MetaCubeNFTContract from './MetaCubeNFTContract';

const MintNFT = () => {
  const [loading, setLoading] = useState(false);

  const handleMint = async () => {
    setLoading(true);
    try {
      const provider = new ethers.providers.Web3Provider(window.ethereum);
      const signer = provider.getSigner();
      const contract = new ethers.Contract(
        MetaCubeNFTContract.address,
        MetaCubeNFTContract.abi,
        signer
      );
      await contract.safeMint(await signer.getAddress());
      console.log('NFT minted successfully!');
    } catch (error) {
      console.error('Error minting NFT:', error);
    } finally {
      setLoading(false);
    }
  };

  return (
    <div>
      <button onClick={handleMint} disabled={loading}>
        {loading ? 'Minting...' : 'Mint NFT'}
      </button>
    </div>
  );
};

export default MintNFT;

This React component provides a simple interface for minting an NFT on the MetaCubeX platform. It uses the ethers.js library to interact with the NFT contract and the user's Ethereum wallet.

Getting Started

To get started with the MetaCubeX project, follow these steps:

  1. Install the required dependencies:
    npm install
    

2

Competitor Comparisons

4,839

Yet Another Clash Dashboard

Pros of yacd

  • Lightweight and fast-loading interface
  • Supports multiple languages and themes
  • Well-established project with a longer history

Cons of yacd

  • Less frequent updates compared to metacubexd
  • Fewer advanced features for power users
  • Limited customization options for the dashboard layout

Code Comparison

metacubexd:

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import { VitePWA } from 'vite-plugin-pwa'

export default defineConfig({
  plugins: [react(), VitePWA()],
})

yacd:

const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
  plugins: [new HtmlWebpackPlugin(), new MiniCssExtractPlugin()],
};

Summary

Both metacubexd and yacd are web dashboards for Clash, but they differ in their approach and features. yacd offers a lightweight and multilingual interface with a longer project history, while metacubexd provides more frequent updates and advanced features for power users. The code comparison shows that metacubexd uses Vite with React and PWA support, while yacd relies on webpack for its build process.

A Clash GUI based on tauri. Supports Windows, macOS and Linux.

Pros of clash-verge

  • More mature project with a larger user base and community support
  • Offers a wider range of features and customization options
  • Supports multiple platforms including Windows, macOS, and Linux

Cons of clash-verge

  • May have a steeper learning curve for new users due to its extensive features
  • Potentially higher resource usage compared to metacubexd
  • Less frequent updates and slower bug fixes in recent months

Code Comparison

metacubexd:

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import { VitePWA } from 'vite-plugin-pwa'

export default defineConfig({
  plugins: [react(), VitePWA()],
})

clash-verge:

import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import { VitePWA } from "vite-plugin-pwa";

export default defineConfig({
  plugins: [react(), VitePWA()],
});

Both projects use similar build configurations with Vite, React, and PWA support. The main difference is that clash-verge uses TypeScript, while metacubexd uses JavaScript.

Run sing-box/mihomo as client in shell

Pros of ShellCrash

  • Lightweight and efficient, suitable for resource-constrained devices
  • Extensive shell script support for customization and automation
  • Cross-platform compatibility, including various Linux distributions and routers

Cons of ShellCrash

  • Less user-friendly interface compared to metacubexd's web-based dashboard
  • Limited built-in visualization tools for network traffic analysis
  • Steeper learning curve for users unfamiliar with command-line interfaces

Code Comparison

ShellCrash (shell script):

#!/bin/sh
# ShellCrash installation script
check_sys(){
    if [ -f /etc/redhat-release ]; then
        release="centos"
    elif cat /etc/issue | grep -q -E -i "debian"; then
        release="debian"
    fi
}

metacubexd (JavaScript):

// metacubexd configuration
const config = {
  theme: 'dark',
  language: 'en',
  apiBaseUrl: '/api',
  updateInterval: 3000,
};

The code snippets highlight the different approaches: ShellCrash focuses on shell scripting for system detection and configuration, while metacubexd utilizes JavaScript for web-based interface configuration.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

metacubexd

Mihomo Dashboard, The Official One, XD

A modern, beautiful, and fully-featured web dashboard for Mihomo (Clash Meta).

stars downloads build license pr-closed last-commit

Live Demo · Download Desktop App · Docker Quick Start


⚡ Quick Start

Just want to try it? Open https://d.metacubex.one and enter your mihomo address + secret.

Self-host with Docker in 30 seconds:

docker run -d --name metacubexd -p 8080:80 ghcr.io/metacubex/metacubexd:latest
# Open http://localhost:8080

Full all-in-one (UI + kernel + agent):

curl -O https://raw.githubusercontent.com/metacubex/metacubexd/main/docs/docker-compose.yml
# Edit .env with your secrets, then:
docker compose up -d

✨ Features

  • 📊 Real-time traffic monitoring and statistics
  • 🔄 Proxy group management with latency testing
  • 📡 Connection tracking and management
  • 📋 Rule viewer with search functionality
  • 📝 Live log streaming
  • 🎨 32 selectable themes with user color overrides
  • 📱 Fully responsive design for mobile devices
  • 🌐 Seven languages: English, 简体中文, Русский, 日本語, 한국어, Français, فارسی
  • 🖥️ Cross-platform desktop app with bundled kernel
  • 🐳 All-in-one Docker server with built-in agent

🖼️ Preview

Desktop Screenshots
OverviewProxies
overviewproxies
ConnectionsRules
connectionsrules
LogsConfig
logsconfig
Mobile Screenshots
OverviewProxiesConnections
overviewproxiesconnections
RulesLogsConfig
ruleslogsconfig

🔗 Official Sites

Use one of these official hosted-panel deployments:

SiteURL
Primaryhttps://d.metacubex.one
GitHub Pageshttps://metacubex.github.io/metacubexd
Cloudflare Pageshttps://metacubexd.pages.dev

🚀 Deployment

metacubexd ships in three forms from one codebase:

FormWho hosts the UIWho runs the kernelBest for
Hosted panel (classic)official sites, static files, or the standalone panel containeryour own remote mihomopointing a browser at an existing mihomo
Desktop appthe app (bundled)the app supervises a bundled mihomoa managed runtime on one machine
All-in-one serverthe Docker imagethe container's bundled mihomoa router / NAS / VPS

The classic pure-panel mode still works against any remote mihomo — the kernel-control and profile features simply stay hidden when the dashboard isn't talking to a bundled agent.

1. Hosted Panel (point at your own mihomo)

Enable and protect the external controller in your mihomo config.yaml:

external-controller: 0.0.0.0:9090
secret: 'replace-with-a-strong-secret'

Binding to 0.0.0.0 exposes the controller on every interface. Restrict it with a firewall, use a strong secret, and configure external-controller-cors for the exact dashboard origin.

Then open one of the official hosted sites listed above and enter your mihomo {url, secret}, or self-host the static assets via external-ui:

# Clone the prebuilt gh-pages branch
git clone https://github.com/metacubex/metacubexd.git -b gh-pages /etc/mihomo/ui

# Set external-ui in your config:
#   external-ui: /etc/mihomo/ui

# Update to the latest build later:
git -C /etc/mihomo/ui pull -r

Standalone hosted-panel container

ghcr.io/metacubex/metacubexd is another distribution of the hosted-panel architecture: it serves only the dashboard over HTTP on port 80; it does not bundle or supervise mihomo. Point it at a mihomo instance you run separately. One panel can manage several backends, and HTTP hosting avoids the browser's HTTPS-to-HTTP mixed-content block when the backend is local.

docker run -d --name metacubexd -p 127.0.0.1:8080:80 \
  ghcr.io/metacubex/metacubexd:latest
Pre-fill the backend address

Set DEFAULT_BACKEND_URL to pre-populate the connect form (and skip the "no backend detected" prompt on first load). The container's entrypoint maps it to the Nuxt runtime config, so it ships in every served HTML response without rebuilding the image:

docker run -d --name metacubexd -p 127.0.0.1:8080:80 \
  -e DEFAULT_BACKEND_URL=http://192.168.1.10:9090 \
  ghcr.io/metacubex/metacubexd:latest

The URL is only a default — users can still edit it on the connect screen, and saved endpoints take precedence on later visits.

For a safe starting point for the separately managed kernel, see the minimal Mihomo configuration example. Review its network settings before making the controller available outside the local machine.

2. Desktop App

Download the installer for your platform from the latest release:

OSArchFile
macOS (Apple Silicon)arm64MetaCubeXD-<version>-mac-arm64.dmg
macOS (Intel)x64MetaCubeXD-<version>-mac-x64.dmg
Windowsx64MetaCubeXD-<version>-win-x64.exe
Windowsarm64MetaCubeXD-<version>-win-arm64.exe
Debian / Ubuntux64MetaCubeXD-<version>-linux-amd64.deb
Debian / Ubuntuarm64MetaCubeXD-<version>-linux-arm64.deb
Fedora / RHEL / SUSEx64MetaCubeXD-<version>-linux-x86_64.rpm
Fedora / RHEL / SUSEarm64MetaCubeXD-<version>-linux-aarch64.rpm
Arch Linuxx64MetaCubeXD-<version>-linux-x64.pacman
Arch Linuxarm64MetaCubeXD-<version>-linux-aarch64.pacman
Other Linuxx64MetaCubeXD-<version>-linux-x86_64.AppImage
Other Linuxarm64MetaCubeXD-<version>-linux-arm64.AppImage

The desktop app bundles its own mihomo kernel and auto-configures the local endpoint — you don't enter any address. Manage profiles, edit configs, and start/stop the kernel directly inside the app.

These builds are unsigned. Download them only from this repository's official GitHub releases, verify that the URL and release tag are correct, and decide whether you trust the artifact before bypassing an OS warning. The project does not currently provide publisher identity verification through code signing.

macOS — Gatekeeper blocks unsigned apps ("MetaCubeXD is damaged and can't be opened"). After dragging the app to /Applications, strip the quarantine attribute:

xattr -dr com.apple.quarantine /Applications/MetaCubeXD.app

…or right-click the app → Open → Open in the confirmation dialog.

MetaCubeXD can also be installed through the Homebrew cask in this repository:

brew tap metacubex/metacubexd https://github.com/MetaCubeX/metacubexd.git
brew install --cask metacubexd

Windows — SmartScreen shows "Windows protected your PC". Click More info → Run anyway.

Linux — install the native package for your distribution, or make the AppImage executable and run it:

# Debian / Ubuntu
sudo apt install ./MetaCubeXD-*-linux-*.deb

# Fedora / RHEL
sudo dnf install ./MetaCubeXD-*-linux-*.rpm

# openSUSE
sudo zypper install ./MetaCubeXD-*-linux-*.rpm

# Arch Linux and derivatives
sudo pacman -U ./MetaCubeXD-*-linux-*.pacman

# Distribution-independent AppImage
chmod +x MetaCubeXD-*-linux-*.AppImage
./MetaCubeXD-*-linux-*.AppImage

System proxy and TUN are separate features. System proxy changes the current user's OS proxy settings through platform tools and does not install the privileged helper; platform policy may still request authorization. TUN routes machine traffic at the network layer and requires the one-time helper installation described in TUN mode (desktop).

TUN mode (desktop)

TUN routes traffic at the network layer, including applications that do not honor per-app proxy settings (unlike the mixed proxy port, which only catches apps you point at it). Because system-level routing needs root/admin, the desktop app installs a small privileged helper the first time you enable TUN — a background service that performs the privileged network setup on the app's behalf. Enabling TUN therefore prompts for administrator authorization the first time (the OS elevation dialog). The helper persists across sessions, so later enables don't re-prompt for install.

The helper is installed by an unsigned app. Confirm that you downloaded the app from the official release page before approving its administrator prompt.

Per-OS notes

  • macOS — the helper is registered as a root LaunchDaemon; you approve it through the standard osascript "wants to make changes" administrator prompt. The kernel binds the system's utun interface.
  • Windows — the helper is registered as an auto-start Windows service (UAC prompt). The build ships wintun.dll alongside the kernel, which mihomo's wintun backend needs — no separate download.
  • Linux — the helper is registered as a root systemd unit; the elevation prompt is pkexec (the GNOME/PolicyKit authorization dialog). On a headless box without a Polkit agent you may need to install/enable one.

If TUN takes down your network

TUN reroutes default traffic, so a bad config or a stuck tunnel can drop connectivity. Two recoveries:

  • Click "Recover network" in the app — it tears down the TUN routing and restores normal networking without quitting.
  • Quit the app normally — a normal exit tears down TUN and restores routing. If the app had to be force-quit, reopen it and use Recover network.

If you hit a problem, open an issue with the app version, OS and architecture, the exact prompt or error, and whether Recover network restored connectivity. Do not include secrets or subscription URLs; report security issues through the private security channel.

3. All-in-One Server (Docker)

The metacubexd-server image bundles the dashboard UI, the control agent, and a per-arch mihomo kernel. One container serves the panel, supervises the kernel, and exposes the proxy. The copyable Compose example requires secrets through a local .env file; the inline version below shows the same runtime layout.

# compose.yaml — proxy-only by default; TUN is an advanced override
services:
  metacubexd:
    image: ghcr.io/metacubex/metacubexd-server:latest
    restart: unless-stopped
    environment:
      CONTROL_TOKEN: 'change-me-control'
      CLASH_SECRET: 'change-me-clash'
      GITHUB_TOKEN: '' # optional read-only token for Releases API checks
      # optional: pre-fill the connect form's backend address
      # DEFAULT_BACKEND_URL: 'http://<host>:9090'
      CONTROL_PORT: '8080'
      CLASH_API_PORT: '9090'
      MIXED_PORT: '7890'
      TZ: 'Asia/Shanghai'
    ports:
      - '8080:8080' # dashboard UI + /api/control agent API
      - '9090:9090' # mihomo Clash API + WebSocket (UI endpoint target)
      - '7890:7890' # mixed proxy port
    volumes:
      - 'metacubexd-data:/data'

volumes:
  metacubexd-data: {}
docker compose up -d

# Update
docker compose pull && docker compose up -d

Keep the control surface on a trusted network. Docker publishes the ports above on all host interfaces unless you bind them to a specific address. The server deliberately injects CONTROL_TOKEN into the browser so the same-origin dashboard can call /api/control; consequently, that token is not access control for the dashboard itself. Set CONTROL_TOKEN, but also restrict access with host/network ACLs or an authenticated reverse proxy before exposing the dashboard beyond a trusted LAN. An optional GITHUB_TOKEN is also exposed to the browser for authenticated Releases checks, so use a narrowly scoped token. Protect the Clash API and mixed proxy port too. See Security Policy.

Open http://<host>:8080 for the dashboard. The control agent unlocks the kernel/profile UI automatically: the server injects CONTROL_TOKEN into the same-origin page, so the dashboard authenticates its /api/control probe without you entering the token anywhere.

Point the UI endpoint at the kernel. The dashboard talks to mihomo's Clash API directly (never proxied), so set the endpoint to:

FieldValue
URLhttp://<host>:9090
Secretthe CLASH_SECRET you set above

If the UI and Clash API use different origins, allow the dashboard origin in the active profile's external-controller-cors configuration.

Environment variables

VariableDefaultPurpose
CONTROL_TOKENrequired for controlBearer token for /api/control/**; also accepted as ?token= for SSE. Without it, protected control routes fail closed with 503.
CLASH_SECRET(none)Secret for mihomo's Clash API (external-controller). Set one and use it as the UI endpoint's Secret.
GITHUB_TOKEN(none)Optional read-only token for authenticated GitHub Releases checks. Omit it to keep anonymous requests.
DEFAULT_BACKEND_URL(none)Optional URL that pre-fills the connect form's backend address, e.g. http://<host>:9090. Saved endpoints still take precedence.
CONTROL_PORT8080Port serving the dashboard UI + control agent API.
CLASH_API_PORT9090Port for mihomo's Clash API + WebSocket. The UI endpoint targets this port.
MIXED_PORT7890mihomo mixed (HTTP + SOCKS) proxy port.
DATA_DIR/dataWritable profiles, active configuration, geo data, and runtime caches.
MIHOMO_BIN/usr/local/bin/mihomoAbsolute path to the mihomo executable used by the server.
TZ(container default)Timezone for logs/scheduling, e.g. Asia/Shanghai.

The named volume mounts /data, which holds your profiles, the active config, and the kernel's geo / fake-ip caches. It must be writable — a read-only data dir makes the kernel exit non-zero.

TUN mode (advanced)

TUN needs NET_ADMIN, the /dev/net/tun device, and host networking. Override the service:

services:
  metacubexd:
    image: ghcr.io/metacubex/metacubexd-server:latest
    restart: unless-stopped
    network_mode: host
    cap_add:
      - NET_ADMIN
    devices:
      - '/dev/net/tun:/dev/net/tun'
    environment:
      CONTROL_TOKEN: 'change-me-control'
      CLASH_SECRET: 'change-me-clash'
    volumes:
      - 'metacubexd-data:/data'

volumes:
  metacubexd-data: {}

With network_mode: host the ports: mapping is ignored — the container binds 8080/9090/7890 directly on the host. Enable a tun: block in your profile's mihomo config for the tunnel to come up.

Profiles & Config Editor (desktop / server)

When connected to a bundled agent (desktop app or the server image), the dashboard gains a profile manager:

  • Create, duplicate, rename, and delete multiple profiles.
  • Import a subscription by URL (fetched with User-Agent: clash.meta); the upload / download / total / expire usage from Subscription-Userinfo is shown on a usage card.
  • Edit any profile in an in-browser Monaco editor with mihomo YAML schema completion and validation.
  • Activate a profile to compose it, validate it with mihomo -t, and restart the kernel only after validation succeeds.

Schema diagnostics are advisory and never block saving. Activation's mihomo -t check is the final validation, and the kernel restarts only after it passes. A "disable validation" toggle is available for bleeding-edge mihomo keys the bundled schema doesn't know yet.

Kernel versions and custom binaries

Both the desktop app and the server bundle a pinned mihomo release. The current version is shown in the control UI and tracked in packages/agent/src/kernel/assets.ts. The desktop's kernel-version panel can download and switch among published mihomo versions; it does not expose an arbitrary local binary-path picker. The server accepts an absolute custom path through MIHOMO_BIN, which takes precedence over its bundled binary.

🩺 Troubleshooting

"Unable to connect to backend" when self-hosting (CORS)

If the dashboard loads but cannot connect to the Mihomo backend — even though the External Controller is reachable directly in your browser — the cause is usually CORS.

When you host the dashboard on your own address (e.g. http://192.168.1.2:8080), the browser treats requests to the External Controller (e.g. http://192.168.1.2:9090) as cross-origin. Mihomo only answers cross-origin requests from origins listed in its external-controller-cors allow-list, so requests from your dashboard are rejected and the connection fails.

Add your dashboard's origin to the allow-list in your Mihomo config.yaml:

external-controller-cors:
  allow-private-network: true
  allow-origins:
    - 'http://192.168.1.2:8080' # your dashboard's address
    # or, for trusted local networks only:
    # - '*'

Tip: if you still cannot connect, open your browser's DevTools (F12) → Console and look for CORS-related errors to confirm the cause.

Kernel won't start (desktop / server)

When the bundled kernel fails to reach running:

  • Server port collision. The server defaults to control 8080, Clash API 9090, and mixed proxy 7890. Stop the conflicting process or change the corresponding CONTROL_PORT, CLASH_API_PORT, or MIXED_PORT value and its host port mapping.
  • Desktop port diagnosis. The desktop app chooses separate free loopback ports for its control API, Clash API, and mixed proxy on every launch. Do not assume 9090, and do not send /api/control requests to the Clash endpoint; use the addresses reported by the app and its logs.
  • macOS quarantine kills the bundled binary. An unsigned .app downloaded from the internet has its bundled mihomo quarantined. Run xattr -dr com.apple.quarantine /Applications/MetaCubeXD.app, then reopen it.
  • SIGILL / "illegal instruction" on amd64. Old or virtualized CPUs choke on the generic amd64 build. metacubexd ships the -compatible (GOAMD64=v1) asset specifically to avoid this; if the server uses a custom MIHOMO_BIN, point it at the -compatible mihomo build.

Two log streams — which is which

  • Clash logs (the existing Logs page): mihomo's own log feed over the Clash API WebSocket — proxy decisions, rule matches, DNS, etc.
  • Kernel logs (control agent, SSE): the mihomo subprocess stdout/stderr captured by the supervisor — startup banners, crashes, config-parse errors. Use these when the kernel won't start or exits unexpectedly.

Read-only data directory

The kernel needs a writable home for profiles/, the active config, and geo / fake-ip caches. On the server, ensure DATA_DIR (default /data) is writable. The desktop app stores writable state in Electron's per-user userData directory; its packaged resources directory is not the runtime data home.

Health check (server)

The container's health endpoint is GET /api/control/health on CONTROL_PORT (default 8080). A 200 means the dashboard + control agent are up; it does not assert the kernel is running (check the kernel panel for that).

🛠️ Development

This repository is a pnpm 10 monorepo:

  • packages/ui — Nuxt dashboard and static hosted panel
  • packages/agent — shared profile, kernel, and control-API logic
  • apps/server — Nitro all-in-one server
  • apps/desktop — Electron desktop application

Install dependencies, then choose the surface you are changing:

pnpm install

pnpm dev          # UI only; connect it to an existing mihomo
pnpm dev:server   # build the UI, then run the Nitro server
pnpm dev:desktop  # Nuxt HMR + Electron + bundled mihomo

Build boundaries are intentionally explicit:

pnpm build:ui       # static hosted-panel output: packages/ui/.output/public
pnpm build:server   # Nitro/agent only: apps/server/.output
pnpm build          # build:ui + build:server
pnpm build:desktop  # Electron main/preload/helper bundles only; no installer

pnpm typecheck      # all workspace typechecks
pnpm lint           # workspace lint scripts

Official desktop installers require a generated renderer, the correct mihomo binary for each target architecture, and platform packaging tools; the release workflow assembles those steps. See CONTRIBUTING.md for package tests, local packaging guidance, and required desktop smoke tests.

📚 Project documentation

⭐ Star History

Star History Chart

👥 Contributors

Thanks to all the people who contribute to metacubexd!

Contributors

📄 License

MIT

🙏 Credits

  • Nuxt - The Intuitive Vue Framework
  • Vue.js - The Progressive JavaScript Framework
  • daisyUI - Tailwind CSS components
  • Tailwind CSS - Utility-first CSS framework