Documentation Index
Fetch the complete documentation index at: https://www.meilisearch.com/docs/llms.txt
Use this file to discover all available pages before exploring further.
This guide walks you through setting up Meilisearch with Dart and Flutter.
Prerequisites
- Dart 3.0 or higher (or Flutter 3.0+)
- A Meilisearch instance (Cloud or self-hosted)
1. Install the SDK
Add the dependency to your pubspec.yaml:
dependencies:
meilisearch: ^0.17.1
Then run:
dart pub get
# or for Flutter
flutter pub get
2. Connect to Meilisearch
import 'package:meilisearch/meilisearch.dart';
import 'dart:io';
final client = MeiliSearchClient(
Platform.environment['MEILISEARCH_URL']!,
Platform.environment['MEILISEARCH_KEY'],
);
Set your environment variables:export MEILISEARCH_URL="https://your-instance.meilisearch.io" # or http://localhost:7700
export MEILISEARCH_KEY="your_api_key"
Get a free Cloud instance →
3. Add documents
// Add documents
final movies = [
{'id': 1, 'title': 'The Matrix', 'genres': ['Action', 'Sci-Fi'], 'year': 1999},
{'id': 2, 'title': 'Inception', 'genres': ['Action', 'Thriller'], 'year': 2010},
{'id': 3, 'title': 'Interstellar', 'genres': ['Drama', 'Sci-Fi'], 'year': 2014},
];
final index = client.index('movies');
final task = await index.addDocuments(movies);
// Wait for indexing to complete
await client.waitForTask(task.taskUid);
4. Search
final result = await index.search('matrix');
for (final hit in result.hits) {
print('${hit['title']} (${hit['year']})');
}
// The Matrix (1999)
5. Search with filters
First, configure filterable attributes:
await index.updateFilterableAttributes(['genres', 'year']);
Then search with filters:
final result = await index.search(
'',
SearchQuery(filter: 'genres = "Sci-Fi" AND year > 2000'),
);
Full example
import 'package:meilisearch/meilisearch.dart';
import 'dart:io';
void main() async {
// Connect
final client = MeiliSearchClient(
Platform.environment['MEILISEARCH_URL']!,
Platform.environment['MEILISEARCH_KEY'],
);
// Add documents
final movies = [
{'id': 1, 'title': 'The Matrix', 'year': 1999},
{'id': 2, 'title': 'Inception', 'year': 2010},
{'id': 3, 'title': 'Interstellar', 'year': 2014},
];
final index = client.index('movies');
final task = await index.addDocuments(movies);
await client.waitForTask(task.taskUid);
// Search
final result = await index.search('inter');
for (final hit in result.hits) {
print(hit['title']);
}
}
Flutter example
import 'package:flutter/material.dart';
import 'package:meilisearch/meilisearch.dart';
class SearchScreen extends StatefulWidget {
@override
_SearchScreenState createState() => _SearchScreenState();
}
class _SearchScreenState extends State<SearchScreen> {
final client = MeiliSearchClient('YOUR_MEILISEARCH_URL', 'YOUR_SEARCH_KEY');
List<Map<String, dynamic>> results = [];
Future<void> search(String query) async {
final result = await client.index('movies').search(query);
setState(() {
results = List<Map<String, dynamic>>.from(result.hits);
});
}
@override
Widget build(BuildContext context) {
return Column(
children: [
TextField(onChanged: search),
Expanded(
child: ListView.builder(
itemCount: results.length,
itemBuilder: (context, index) => ListTile(
title: Text(results[index]['title']),
),
),
),
],
);
}
}
Next steps
Full-text search
Configure ranking and relevancy
Filtering
Add filters and facets
AI-powered search
Add semantic search
API reference
Explore all search parameters
Resources