Meilisearch Manager

May 4, 2026 ยท View on GitHub

A Nuxt-based web UI for managing Meilisearch instances.

This project is the refactored Nuxt version of the original Vue SPA project: connorabbas/meilisearch-manager.

Features

  • :rocket: Multi-instance mode for local development and testing
  • :lock: Secure single-instance mode for production deployments
  • :bar_chart: Dashboard with stats and version details
  • :open_file_folder: Indexes listing, creation, inspection, primary key updates, and deletion
  • :gear: Index settings full JSON viewer/editor
  • :page_facing_up: Documents import, search (full-text, hybrid, geo), sort, filter, pagination, edit, and delete flows
  • :key: API keys create, view, edit, copy, and delete flows
  • :ballot_box_with_check: Tasks history with filtering, infinite scroll, and optional polling
  • :hourglass: Data backups with dump and snapshot exports
  • :test_tube: Experimental features toggling
  • :iphone: Responsive layout
  • :waning_crescent_moon: Dark mode support

Getting Started

Demo

Check out the live demo (hosted with GitHub pages): https://connorabbas.github.io/meilisearch-manager-next/

Configuration

The app supports two distinct operational modes, each designed for a different use case.

Multi-Instance Mode

Designed for local development, testing, and exploration.

In this mode, the app behaves as a pure client-side SPA. You can add, manage, and switch between multiple Meilisearch instances directly from the browser UI. Instance credentials (host and API key) are stored in the browser's localStorage.

Characteristics:

  • Manage multiple Meilisearch instances from one dashboard
  • Credentials stored in browser localStorage (never sent to any backend server)
  • The Meilisearch JavaScript client runs directly in the browser
  • Your Meilisearch instance must expose appropriate CORS headers
  • Can be deployed statically (GitHub Pages, S3, CDN, etc.)

Note

Credentials in localStorage are isolated to the browser and the app's origin. They are not transmitted to any server. This is generally safe for development and testing, but may not meet organizational security requirements for production use.

Secure Single-Instance Mode (Production)

Designed for production deployments where you want to manage a single Meilisearch instance without exposing admin credentials to the browser.

Caution

The single-instance proxy route has no built-in authentication. The /api/meilisearch/* catch-all proxy injects the admin API key server-side, but the route itself accepts any request that reaches it.

You MUST deploy this behind an authentication layer (e.g., Traefik Basic Auth, VPN, Cloudflare Access) or restrict it to a private network. Exposing the node image directly to the internet without authentication is equivalent to giving public admin access to your Meilisearch instance.

In this mode, the app runs behind a Nitro server. The admin API key lives only in server-side environment variables. All Meilisearch requests are transparently proxied through the app's backend, which injects the real credentials server-side.

NUXT_MEILISEARCH_HOST=https://your-instance-domain.com
NUXT_MEILISEARCH_API_KEY=yourAdminApiKey

Characteristics:

  • Admin API key is server-side only - never exposed to the client
  • All requests proxied through /api/meilisearch/* with credentials injected by Nitro
  • Instance management UI is disabled (single pre-configured instance only)
  • Eliminates CORS concerns (browser talks to same-origin proxy)
  • Requires a running Nitro server (Node environment) - cannot be used with static hosting

Typical deployment: Host the app alongside your Meilisearch instance (same network/VPC, or behind the same reverse proxy) so the Nitro server can reach Meilisearch securely.

Explicit Mode Control

You can explicitly force a mode with NUXT_SECURE_MODE:

NUXT_SECURE_MODE=true   # Force secure mode (throws on startup if credentials missing)
NUXT_SECURE_MODE=false  # Force multi-instance mode (even if credentials are set)

If omitted (default is 'auto'), the app auto-detects: secure mode activates when both NUXT_MEILISEARCH_HOST and NUXT_MEILISEARCH_API_KEY are present.

Static Deployments

For static hosting (GitHub Pages, S3, CDN), set:

NUXT_PUBLIC_STATIC_DEPLOY=true

This skips the server configuration check entirely and boots directly into multi-instance mode. This is automatically set in the GitHub Pages workflow.

Docker Images

Pre-built images are published to Docker Hub for both operational modes.

See DOCKER.md for image tags, Docker Compose examples, Traefik Basic Auth setup, and production security guidance.

Tech Stack