PHPackages                             delaneymethod/craft-meilisearch-editor - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Search &amp; Filtering](/categories/search)
4. /
5. delaneymethod/craft-meilisearch-editor

ActiveCraft-plugin[Search &amp; Filtering](/categories/search)

delaneymethod/craft-meilisearch-editor
======================================

Manage your Meilisearch content without a developer.

1.0.0(5mo ago)115[1 issues](https://github.com/delaneymethod/craft-meilisearch-editor/issues)MITPHPPHP ^8.0

Since Nov 28Pushed 5mo agoCompare

[ Source](https://github.com/delaneymethod/craft-meilisearch-editor)[ Packagist](https://packagist.org/packages/delaneymethod/craft-meilisearch-editor)[ RSS](/packages/delaneymethod-craft-meilisearch-editor/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)Dependencies (10)Versions (2)Used By (0)

Meilisearch Editor (Craft CMS)
==============================

[](#meilisearch-editor-craft-cms)

Manage your Meilisearch content without a developer.

Install
-------

[](#install)

### From the Plugin Store

[](#from-the-plugin-store)

Go to the Plugin Store in your project's Control Panel and search for "meilisearch editor". Then press "Install".

### With Composer

[](#with-composer)

Add the repo to your project and install via Composer:

```
cd /path/to/project

composer require delaneymethod/meilisearch-editor && php craft plugin/install meilisearch-editor
```

Console commands (useful in CI)
-------------------------------

[](#console-commands-useful-in-ci)

```
php craft meilisearch-editor/index/delete --handle=my-index --dryRun=0 		// Deletes index.
php craft meilisearch-editor/index/flush --handle=my-index --dryRun=0		// Flushes index documents.
php craft meilisearch-editor/index/reindex --handle=my-index --dryRun=0		// Rebuilds index.
```

Frontend: minimal example
-------------------------

[](#frontend-minimal-example)

```
{% set siteId = craft.app.sites.currentSite.id %}
{% set index = craft.meilisearchEditor.getIndex('devices') %}

{% set filters = craft.meilisearchEditor.getFilters(index.handle) %}
{% set sortables = craft.meilisearchEditor.getSortables(index.handle) %}

Meilisearch Demo – {{ index.label }}

		Search

	{% if filters|length %}
		{% for filter in filters %}

				{{ filter.name }}

					All
					{% for option in filter.options %}
						{{ option.label }}
					{% endfor %}

		{% endfor %}
	{% endif %}

		Sort

			Relevance
			{% for sortable in sortables %}
				{{ sortable.label }}
			{% endfor %}

	(async () => {
		// Get a short-lived search key
		const response = await fetch('{{ url("meilisearch-editor/keys/issue") }}', {
		method: "POST",
		headers: {
			"Accept": "application/json",
			"Content-Type": "application/json",
			"X-CSRF-Token": "{{ craft.app.request.csrfToken }}",
		},
		body: JSON.stringify({
			name: "Demo Search Key",
			handle: "{{ index.handle }}",
			actions: ["search"],
			ttl: 900,
		})
	});

	const json = await response.json();
	if (!response.ok || !json.key) {
		console.error("Key issue failed:", json);

		return;
	}

	const { key, indexes } = json;
	const indexUid = indexes[0];

	const base = "{{ url("meilisearch") }}";
	const searchUrl = `${base}/indexes/${encodeURIComponent(indexUid)}/search`;

	const headers = {
		"Accept": "application/json",
		"Authorization": `Bearer ${key}`,
		"Content-Type": "application/json",
	};

	const debounce = (fn, ms = 200) => {
		let t;
		return (...args) => {
			clearTimeout(t);
			t = setTimeout(() => fn(...args), ms);
		};
	};

	const results = document.querySelector("#results");
	const queryInput = document.querySelector("#query");
	const sortSelect = document.querySelector("#{{ 'sort-' ~ index.handle }}");
	const filterSelects = Array.from(document.querySelectorAll('select[id^="filter-"]'));

	function buildFilters() {
		const filters = [];

		filterSelects.forEach(select => {
			const attribute = select.dataset.attribute;
			const value = select.value;

			if (!attribute || !value) {
				return;
			}

			const safeValue = value.replace(/"/g, '\\"');
			filters.push(`${attribute} = '${safeValue}'`);
		});

		return filters;
	}

	async function doSearch() {
		const q = queryInput ? (queryInput.value || "") : "";
		const filters = buildFilters();
		const sortValue = sortSelect && sortSelect.value ? [sortSelect.value] : undefined;

		const payload = {
			q,
			limit: 10,
			...(filters.length ? { filter: filters } : {}),
			...(sortValue ? { sort: sortValue } : {}),
		};

		const response = await fetch(searchUrl, {
			method: "POST",
			headers,
			body: JSON.stringify(payload),
		});

		const json = await response.json();
		results.textContent = JSON.stringify(json.hits ?? json, null, 2);
	}

	if (queryInput) {
		queryInput.addEventListener("input", debounce(doSearch, 200));
	}

	filterSelects.forEach(select => select.addEventListener("change", doSearch));

	if (sortSelect) {
		sortSelect.addEventListener("change", doSearch);
	}

	await doSearch();
})();

```

###  Health Score

29

—

LowBetter than 60% of packages

Maintenance56

Moderate activity, may be stable

Popularity10

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity39

Early-stage or recently created project

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

161d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/cfb4e92a4d0600764dcbc0058a37dc46627428e876e3bf806e398a5f1ad1f283?d=identicon)[hello@delaneymethod.com](/maintainers/hello@delaneymethod.com)

---

Tags

meilisearchcmseditorCraftcraftcmscraft-plugincontent-editormeilisearch editor

###  Code Quality

TestsPHPUnit

Code StylePHP CS Fixer

### Embed Badge

![Health badge](/badges/delaneymethod-craft-meilisearch-editor/health.svg)

```
[![Health](https://phpackages.com/badges/delaneymethod-craft-meilisearch-editor/health.svg)](https://phpackages.com/packages/delaneymethod-craft-meilisearch-editor)
```

###  Alternatives

[studioespresso/craft-scout

Craft Scout provides a simple solution for adding full-text search to your entries. Scout will automatically keep your search indexes in sync with your entries.

80136.8k](/packages/studioespresso-craft-scout)[trendyminds/algolia

Easily pull search results from Algolia into your Craft CMS website

1332.2k](/packages/trendyminds-algolia)[la-haute-societe/craft-elasticsearch

Bring the power of Elasticsearch to your Craft CMS projects.

1712.4k](/packages/la-haute-societe-craft-elasticsearch)[swixpop/locate

Harness the power of the Google Autocomplete API inside Craft. Adds an autocomplete search box to Craft entries.

154.8k](/packages/swixpop-locate)[swishdigital/faceted-navigation

Provides faceted navigation of entries, using categories, which allows site users to narrow the list of entries they see by applying multiple filters (think Amazon or eBay left sidebar).

152.4k](/packages/swishdigital-faceted-navigation)[fork/craft-elastica

A plugin to connect to Elasticsearch and persist elements via hooks

101.8k](/packages/fork-craft-elastica)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
