diff --git a/common/db.js b/common/db.js
index d6f0b3ad90978e8706be5407b78b6b27a304e1c7..21ae66ef180501f60da3a0893adbae94c6c44291 100644
--- a/common/db.js
+++ b/common/db.js
@@ -1,5 +1,6 @@
 const logger = require.main.require('./common/logger.js');
 const config = require.main.require('./common/config.js');
+const MiniSearch = require("minisearch")
 var sqlite3 = require.main.require('sqlite3').verbose();
 
 /* The kara table is defined as follows:
@@ -48,6 +49,26 @@ class KaraDatabase {
         this.m_karaPath = config.content.database.path;
         this.m_db = new sqlite3.Database(this.m_karaPath);
         this.m_db.configure('busyTimeout', 50000);
+        this.m_search_engine = new MiniSearch({
+            fields: [
+                "id",
+                "cat",
+                "type",
+                "language",
+                "author",
+                "title",
+                "source"
+            ], // fields to index for full-text search
+            storeFields: [
+                "id",
+                "cat",
+                "type",
+                "language",
+                "author",
+                "title",
+                "source"
+            ] // fields to return with search results
+          })
         logger.info('db', 'Create database from file ' + config.content.database.path);
     }
 
@@ -64,7 +85,7 @@ class KaraDatabase {
      *  - offset: Int | null -> offset in the search
      * => a promize, callback with [(id: Int, string, cat, type, language, author, title, source)] */
     search(queryString, offset = null, limit = null) {
-        var __ret = [];
+        /*var __ret = [];
         var __sqlQuery = `SELECT id, string,
                             category AS cat,
                             (song_type || song_number) AS type,
@@ -84,28 +105,30 @@ class KaraDatabase {
                     rows.forEach(row => {
                         __ret.push(row);
                     });
-                    resolv(__ret);
+                    resolv([{id:0, string:"a", cat:"cat", type:"type", language:"language", author:"author", title:"title", source:"source"}]);
                 });
             });
-        }
-
-        return __getRecords(this.m_db);
+        }*/
+        let searchResult = this.m_search_engine.search(queryString, {
+            prefix: term => term.length > 3,
+            fuzzy: term => term.length > 3 ? 0.2 : null,
+            combineWith: 'AND'
+           })
+        return searchResult;
     }
 
     /* List all the kara in the db.
      *  - limit: Int | null -> maximal number of results
      *  - offset: Int | null -> offset in the search
      * => a promize, callback with [(id: Int, string, cat, type, language, author, title, source)] */
-    all(offset = null, limit = null) {
+    setup_search_engine() {
         var __ret = [];
-        var __sqlQuery = `SELECT id, string,
+        var __sqlQuery = `SELECT id,
                             category AS cat,
                             (song_type || song_number) AS type,
                             language, author_name AS author,
-                            song_name AS title, source_name AS source, available
+                            song_name AS title, source_name AS source
                           FROM kara`;
-        if (offset != null && limit != null) __sqlQuery += ` LIMIT ${offset}, ${limit}`;
-
         function __getRecords(db) {
             return new Promise(resolv => {
                 db.all(__sqlQuery, [], (err, rows) => {
@@ -121,7 +144,14 @@ class KaraDatabase {
             });
         }
 
-        return __getRecords(this.m_db);
+        function __SetupSE(karas, search_engine = db.m_search_engine){
+            search_engine.removeAll()
+            logger.info("db", karas.length)
+            search_engine.addAll(karas)
+            logger.info("db", search_engine.documentCount)
+        }
+
+        return __getRecords(this.m_db).then(__SetupSE);
     }
 
     /* List all the next karas in the queue.
diff --git a/main.js b/main.js
index 45c7018cd331419d8512ebf0a5eaaa7d310fb2ba..c347745272d87cf1ee217a5f89053295c8eca1e5 100644
--- a/main.js
+++ b/main.js
@@ -165,6 +165,10 @@ function createKurisuWindow() {
     kurisu.once('ready-to-show', () => kurisu.show());
 }
 
+function setupKaraDB(){
+    db.setup_search_engine()
+}
+
 /******************************
  * The end of the application *
  ******************************/
@@ -244,13 +248,15 @@ ipcMain.on('reload-db-request', (event, arg) => {
     if (arg && arg.search && arg.search !== '') {
         __lastFilter = arg.search;
         logger.debug('main', `Reload DB with search '${arg}'`);
-        db.search(__lastFilter, 0, 100).then(callback);
+        karas = db.search(__lastFilter, 0, 150);
+        callback(karas);
     } else if ((arg && arg.search === '') || __lastFilter === '') {
         __lastFilter = '';
         callback([]);
     } else {
         logger.debug('main', `Reload DB with last filter '${__lastFilter}'`);
-        db.search(__lastFilter, 0, 100).then(callback);
+        karas = db.search(__lastFilter, 0, 150);
+        callback(karas);
     }
 });
 
@@ -344,6 +350,7 @@ ipcMain.on('verify-lektord', (event, arg) => {
         });
 
         lkt.reloadState();
+        setupKaraDB();
 
         loopTimeouts.concat([
             setTimeout(() => lkt.idleActualisation(), 1000),
diff --git a/package.json b/package.json
index 7f30cae9ca6ba6a74ea4fcda8d54333b95f55218..463d2f6ca9db057719a1ba49d8d65855c63a6558 100644
--- a/package.json
+++ b/package.json
@@ -12,22 +12,22 @@
     ],
     "license": "ISC",
     "scripts": {
-        "start": "electron -- --trace-uncaught . --trace-uncaught"
+        "start": "electron --no-sandbox -- --trace-uncaught . --trace-uncaught"
     },
     "dependencies": {
         "ejs": "^3.1.5",
-        "electron": "^10.1.1",
+        "electron": "^26.1.1",
         "electron-ejs": "^1.2.1",
+        "electron-prompt": "^1.6.2",
         "express": "^4.17.1",
         "ini": "^2.0.0",
-        "node": "<14.0.0 ",
+        "minisearch": "^6.1.0",
+        "node": ">14.0.0 ",
         "sqlite3": "5.0.0",
         "tail": "^2.0.4",
-        "winston": "^3.3.3",
-        "electron-prompt": "^1.6.2"
+        "winston": "^3.3.3"
     },
     "config": {
-        "port": "8080",
         "kurisu": "https://kurisu.iiens.net/"
     },
     "devDependencies": {