diff --git a/CHANGELOG.fr.md b/CHANGELOG.fr.md
index 1f513f0f18419dc40c84bf3698afd31920aad5fc..a564cc0b27c085739d1df74137fc74b32cb0b78f 100644
--- a/CHANGELOG.fr.md
+++ b/CHANGELOG.fr.md
@@ -9,10 +9,27 @@ et ce projet adhère au [versionnage sémantique](https://semver.org/spec/v2.0.0
 ## Evolutions probable / Roadmap :
 - GraphQL stuff
 - ::: comme séparateur entre identifiant secret et mdp pour la génération de combinaison à tester (usage principal Gsper)
+- supprimer automatiquement le code inutile dans les lib (Tree Shaking)
 
 ## [Non-publié/Non-Stabilisé] (par [1000i100])
 
+## [Version 3.0.2] - 2020-12-10 (par [1000i100])
 ### Ajouté
+- minification des modules g1lib
+- publication automatisé sur npm à la publication de tag (sous réserve que la CI passe)
+
+## [Version 3.0.1] - 2020-12-10 (par [1000i100])
+### Ajouté
+- test unitaire exectué dans la CI
+- couverture de test
+- suivi de la maintenabilité / complexité
+- suivi de la duplication
+
+## [Version 3.0.0] - 2020-12-10 (par [1000i100])
+
+### Ajouté
+- module g1lib.js séparé de Gsper
+
 
 
 ## [Version 2.1.0] - 2018-06-27 (par [1000i100])
@@ -41,8 +58,11 @@ et ce projet adhère au [versionnage sémantique](https://semver.org/spec/v2.0.0
 - intégration des librairies de crypto nécessaires
 - calcul de la clef publique correspondant à chaque combinaison de secrets saisie, et comparaison à la clef publique de référence.
 
-[Non-publié/Non-Stabilisé]: https://framagit.org/1000i100/gsper/-/compare/v2.1.0...master
+[Non-publié/Non-Stabilisé]: https://framagit.org/g1/g1lib.js/-/compare/v3.0.2...master
 
+[Version 3.0.2]: https://framagit.org/g1/g1lib.js/-/compare/v3.0.1...v3.0.2
+[Version 3.0.1]: https://framagit.org/g1/g1lib.js/-/compare/v3.0.0...v3.0.1
+[Version 3.0.0]: https://framagit.org/g1/g1lib.js/-/compare/v2.1.0...v3.0.0
 [Version 2.1.0]: https://framagit.org/1000i100/gsper/-/compare/v2.0.0...v2.1.0
 [Version 2.0.0]: https://framagit.org/1000i100/gsper/-/compare/v1.0.1...v2.0.0
 [Version 1.0.1 (Proof of Concept)]: https://framagit.org/1000i100/gsper/-/tree/v1.0.1
diff --git a/README.fr.md b/README.fr.md
index 95f6f470043f26d8ebe044dbbde74c094db4b9e8..d638797f90dfa0190ff2a9d41f40020859a3d6d9 100644
--- a/README.fr.md
+++ b/README.fr.md
@@ -4,8 +4,6 @@
 
 [![duplication](https://g1.frama.io/g1lib.js/jscpd-badge.svg)](https://g1.frama.io/g1lib.js/jscpd/)
 [![maintainability](https://g1.frama.io/g1lib.js/worst-maintainability.svg)](https://g1.frama.io/g1lib.js/maintainability/)
-[![code lines](https://g1.frama.io/g1lib.js/total-sloc.svg)](https://g1.frama.io/g1lib.js/maintainability/)
-
 
 [![release](https://img.shields.io/npm/v/g1lib.svg)](https://www.npmjs.com/package/g1lib)
 [![usage as download](https://img.shields.io/npm/dy/g1lib.svg)](https://www.npmjs.com/package/g1lib)
diff --git a/README.md b/README.md
index 096bd21b661069771e0072fd60d7d2b7e99da520..6dd02b45cc46965baecc9e5017ee5234fdca2744 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,6 @@
 
 [![duplication](https://g1.frama.io/g1lib.js/jscpd-badge.svg)](https://g1.frama.io/g1lib.js/jscpd/)
 [![maintainability](https://g1.frama.io/g1lib.js/worst-maintainability.svg)](https://g1.frama.io/g1lib.js/maintainability/)
-[![code lines](https://g1.frama.io/g1lib.js/total-sloc.svg)](https://g1.frama.io/g1lib.js/maintainability/)
 
 [![release](https://img.shields.io/npm/v/g1lib.svg)](https://www.npmjs.com/package/g1lib)
 [![usage as download](https://img.shields.io/npm/dy/g1lib.svg)](https://www.npmjs.com/package/g1lib)
diff --git a/npm/package.json b/npm/package.json
index 848b2d98f3880dc31ce8611979b71a8a9c93f0f6..aab622f6e167f11c55cde2efe00a03b96698cf1d 100644
--- a/npm/package.json
+++ b/npm/package.json
@@ -1,6 +1,6 @@
 {
   "name": "g1lib",
-  "version": "3.0.1",
+  "version": "3.0.2",
   "description": "An ubiquitous static javascript toolbox lib for Ǧ1 / Duniter ecosystem with reliability in mind.",
   "main": "all.mjs",
   "author": {
diff --git a/package-lock.json b/package-lock.json
index a91ac4b28e80072567f238ff65906d84df610146..da88facd56c6639794ce4329321038a1c122f8a3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,43 +11,6 @@
         "@babel/highlight": "^7.10.4"
       }
     },
-    "@babel/core": {
-      "version": "7.12.10",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.10.tgz",
-      "integrity": "sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==",
-      "dev": true,
-      "requires": {
-        "@babel/code-frame": "^7.10.4",
-        "@babel/generator": "^7.12.10",
-        "@babel/helper-module-transforms": "^7.12.1",
-        "@babel/helpers": "^7.12.5",
-        "@babel/parser": "^7.12.10",
-        "@babel/template": "^7.12.7",
-        "@babel/traverse": "^7.12.10",
-        "@babel/types": "^7.12.10",
-        "convert-source-map": "^1.7.0",
-        "debug": "^4.1.0",
-        "gensync": "^1.0.0-beta.1",
-        "json5": "^2.1.2",
-        "lodash": "^4.17.19",
-        "semver": "^5.4.1",
-        "source-map": "^0.5.0"
-      },
-      "dependencies": {
-        "semver": {
-          "version": "5.7.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-          "dev": true
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        }
-      }
-    },
     "@babel/generator": {
       "version": "7.12.10",
       "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.10.tgz",
@@ -67,19 +30,6 @@
         }
       }
     },
-    "@babel/helper-create-class-features-plugin": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz",
-      "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-function-name": "^7.10.4",
-        "@babel/helper-member-expression-to-functions": "^7.12.1",
-        "@babel/helper-optimise-call-expression": "^7.10.4",
-        "@babel/helper-replace-supers": "^7.12.1",
-        "@babel/helper-split-export-declaration": "^7.10.4"
-      }
-    },
     "@babel/helper-function-name": {
       "version": "7.10.4",
       "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
@@ -100,77 +50,6 @@
         "@babel/types": "^7.12.10"
       }
     },
-    "@babel/helper-member-expression-to-functions": {
-      "version": "7.12.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz",
-      "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.12.7"
-      }
-    },
-    "@babel/helper-module-imports": {
-      "version": "7.12.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz",
-      "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.12.5"
-      }
-    },
-    "@babel/helper-module-transforms": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz",
-      "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-module-imports": "^7.12.1",
-        "@babel/helper-replace-supers": "^7.12.1",
-        "@babel/helper-simple-access": "^7.12.1",
-        "@babel/helper-split-export-declaration": "^7.11.0",
-        "@babel/helper-validator-identifier": "^7.10.4",
-        "@babel/template": "^7.10.4",
-        "@babel/traverse": "^7.12.1",
-        "@babel/types": "^7.12.1",
-        "lodash": "^4.17.19"
-      }
-    },
-    "@babel/helper-optimise-call-expression": {
-      "version": "7.12.10",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz",
-      "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.12.10"
-      }
-    },
-    "@babel/helper-plugin-utils": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-      "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
-      "dev": true
-    },
-    "@babel/helper-replace-supers": {
-      "version": "7.12.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz",
-      "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-member-expression-to-functions": "^7.12.1",
-        "@babel/helper-optimise-call-expression": "^7.10.4",
-        "@babel/traverse": "^7.12.5",
-        "@babel/types": "^7.12.5"
-      }
-    },
-    "@babel/helper-simple-access": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz",
-      "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.12.1"
-      }
-    },
     "@babel/helper-split-export-declaration": {
       "version": "7.11.0",
       "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz",
@@ -186,17 +65,6 @@
       "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==",
       "dev": true
     },
-    "@babel/helpers": {
-      "version": "7.12.5",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz",
-      "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==",
-      "dev": true,
-      "requires": {
-        "@babel/template": "^7.10.4",
-        "@babel/traverse": "^7.12.5",
-        "@babel/types": "^7.12.5"
-      }
-    },
     "@babel/highlight": {
       "version": "7.10.4",
       "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
@@ -266,26 +134,6 @@
       "integrity": "sha512-PJdRPwyoOqFAWfLytxrWwGrAxghCgh/yTNCYciOz8QgjflA7aZhECPZAa2VUedKg2+QMWkI0L9lynh2SNmNEgA==",
       "dev": true
     },
-    "@babel/plugin-syntax-typescript": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz",
-      "integrity": "sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      }
-    },
-    "@babel/plugin-transform-typescript": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz",
-      "integrity": "sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-create-class-features-plugin": "^7.12.1",
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-typescript": "^7.12.1"
-      }
-    },
     "@babel/template": {
       "version": "7.12.7",
       "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz",
@@ -749,16 +597,6 @@
         "eslint-visitor-keys": "^2.0.0"
       }
     },
-    "@typhonjs/babel-parser": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/@typhonjs/babel-parser/-/babel-parser-0.2.0.tgz",
-      "integrity": "sha512-YKqLZaQAVtOjMiqcJIqex1ezduMefBitoQZjsOqr4US+Yq+cOY/obyloOJ7Ee+XDPaaraVrxWkA3VZjOohtVjQ==",
-      "dev": true,
-      "requires": {
-        "@babel/parser": "^7.0.0",
-        "babel-runtime": "^6.0.0"
-      }
-    },
     "acorn": {
       "version": "8.0.4",
       "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.4.tgz",
@@ -1205,15 +1043,6 @@
       "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
       "dev": true
     },
-    "backbone-esnext-events": {
-      "version": "0.3.5",
-      "resolved": "https://registry.npmjs.org/backbone-esnext-events/-/backbone-esnext-events-0.3.5.tgz",
-      "integrity": "sha1-mgoGjsdQK9O9iSsXl5NHgLC3xbk=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.0.0"
-      }
-    },
     "badgen": {
       "version": "3.2.2",
       "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.2.tgz",
@@ -1908,21 +1737,6 @@
         "convert-to-spaces": "^1.0.1"
       }
     },
-    "codehawk-cli": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/codehawk-cli/-/codehawk-cli-6.0.3.tgz",
-      "integrity": "sha512-EodomyaF3jfTQQGT9kEzMMCbHwCj/gUp/zNsWkPwZPOxywh721rx03U0pUjyeYR8GXfc+uZ6j7vvJycTTaHwgQ==",
-      "dev": true,
-      "requires": {
-        "@babel/core": "^7.7.2",
-        "@babel/plugin-transform-typescript": "^7.7.2",
-        "flow-remove-types": "^2.111.3",
-        "is-dotdir": "^1.0.1",
-        "is-dotfile": "^2.0.0",
-        "slash": "^3.0.0",
-        "typhonjs-escomplex": "^0.1.0"
-      }
-    },
     "collection-visit": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
@@ -2461,24 +2275,17 @@
         "is-obj": "^2.0.0"
       }
     },
-    "dotdir-regex": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/dotdir-regex/-/dotdir-regex-1.0.1.tgz",
-      "integrity": "sha1-kJT1Ey/BrybrOtv3JMMOeVNPE1s=",
-      "dev": true
-    },
-    "dotfile-regex": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/dotfile-regex/-/dotfile-regex-0.1.2.tgz",
-      "integrity": "sha1-JX0MmlBoeP+mN5YUxakuJCZJLZU=",
-      "dev": true
-    },
     "duplexer3": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
       "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
       "dev": true
     },
+    "ecma-nacl": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/ecma-nacl/-/ecma-nacl-2.5.0.tgz",
+      "integrity": "sha512-VrG9jiOTsacP7TCFp8YlbdC2YSQRydo97Jv5feRVa9AJOYI82PWQDhF+8J2ChrWS9RpQ8LnWYhVGZbCNjgCZlA=="
+    },
     "elliptic": {
       "version": "6.5.3",
       "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",
@@ -3021,43 +2828,6 @@
       "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
       "dev": true
     },
-    "escomplex-plugin-metrics-module": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/escomplex-plugin-metrics-module/-/escomplex-plugin-metrics-module-0.1.0.tgz",
-      "integrity": "sha512-lEHGInx1gAfgIRJeSTXggTvfEtIG061G0Kzk4hIq0qN6nd2prXZihAPRuLB9DdxCmxXvLVFqi+Bnun9rDw1/zg==",
-      "dev": true,
-      "requires": {
-        "typhonjs-escomplex-commons": "^0.1.0"
-      }
-    },
-    "escomplex-plugin-metrics-project": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/escomplex-plugin-metrics-project/-/escomplex-plugin-metrics-project-0.1.0.tgz",
-      "integrity": "sha512-/9Nf2UJ77qo3TBuWwvFnuNPziHC50nPOxldTZvCEzvwePp+BdI5whlDnJHV9rh3gT75CFODJDM80mBJI+px6/g==",
-      "dev": true,
-      "requires": {
-        "typhonjs-escomplex-commons": "^0.1.0"
-      }
-    },
-    "escomplex-plugin-syntax-babylon": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/escomplex-plugin-syntax-babylon/-/escomplex-plugin-syntax-babylon-0.1.0.tgz",
-      "integrity": "sha512-KNjE0Rf1jNteb7zwFyv4G3+TIuHqUfnmXpRf5u9iJkrbVXjmbC7Fg5UEA1Net8gvoV9RLVImFFaLZxclaagqAA==",
-      "dev": true,
-      "requires": {
-        "escomplex-plugin-syntax-estree": "^0.1.0",
-        "typhonjs-escomplex-commons": "^0.1.0"
-      }
-    },
-    "escomplex-plugin-syntax-estree": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/escomplex-plugin-syntax-estree/-/escomplex-plugin-syntax-estree-0.1.0.tgz",
-      "integrity": "sha512-uhgBgEhq91rq+1OStjDwpxpS5ehQdq1X/Y7DYCQHplczJN9ZzyoiHostZ4CqywLgDkyicvIyt/8LBYjBaNFc7w==",
-      "dev": true,
-      "requires": {
-        "typhonjs-escomplex-commons": "^0.1.0"
-      }
-    },
     "eslint": {
       "version": "7.15.0",
       "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.15.0.tgz",
@@ -4082,23 +3852,6 @@
       "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==",
       "dev": true
     },
-    "flow-parser": {
-      "version": "0.139.0",
-      "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.139.0.tgz",
-      "integrity": "sha512-yEh5wJIi/BG7JZvWAWxTdfZ1uoh/W3oefJOuvUDosKFIE5H7ad8Eu6k9ba1yr83Lxn5vY6kZMG1IaiiiA/5scg==",
-      "dev": true
-    },
-    "flow-remove-types": {
-      "version": "2.139.0",
-      "resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-2.139.0.tgz",
-      "integrity": "sha512-6LOYfPMjytR2CpEpdsBBD0hsRLORQprTXfLPDOJ8uATmeu3cwdkzGcroaZjBkp3Wp7ahiFlD6qE6nmf64CIFbQ==",
-      "dev": true,
-      "requires": {
-        "flow-parser": "^0.139.0",
-        "pirates": "^3.0.2",
-        "vlq": "^0.2.1"
-      }
-    },
     "for-in": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
@@ -4240,12 +3993,6 @@
         "is-windows": "^1.0.2"
       }
     },
-    "gensync": {
-      "version": "1.0.0-beta.2",
-      "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
-      "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
-      "dev": true
-    },
     "get-caller-file": {
       "version": "2.0.5",
       "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
@@ -4945,24 +4692,6 @@
         }
       }
     },
-    "is-dotdir": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-dotdir/-/is-dotdir-1.0.1.tgz",
-      "integrity": "sha1-iWf2APCd45PdD6Yq5BK+vY+tyh4=",
-      "dev": true,
-      "requires": {
-        "dotdir-regex": "^1.0.1"
-      }
-    },
-    "is-dotfile": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-2.0.0.tgz",
-      "integrity": "sha1-T8JS6q9SyPNYOnlr/6rsyVsqTKQ=",
-      "dev": true,
-      "requires": {
-        "dotfile-regex": "^0.1.2"
-      }
-    },
     "is-error": {
       "version": "2.2.2",
       "resolved": "https://registry.npmjs.org/is-error/-/is-error-2.2.2.tgz",
@@ -5994,12 +5723,6 @@
         }
       }
     },
-    "node-modules-regexp": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
-      "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
-      "dev": true
-    },
     "normalize-package-data": {
       "version": "2.5.0",
       "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
@@ -6566,15 +6289,6 @@
       "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
       "dev": true
     },
-    "pirates": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/pirates/-/pirates-3.0.2.tgz",
-      "integrity": "sha512-c5CgUJq6H2k6MJz72Ak1F5sN9n9wlSlJyEnwvpm9/y3WB4E3pHBDT2c6PEiS1vyJvq2bUxUAIu0EGf8Cx4Ic7Q==",
-      "dev": true,
-      "requires": {
-        "node-modules-regexp": "^1.0.0"
-      }
-    },
     "pkg-conf": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz",
@@ -6821,6 +6535,54 @@
         "pug-walk": "^1.1.8",
         "resolve": "^1.1.6",
         "uglify-js": "^2.6.1"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "1.2.1",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+          "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+          "dev": true
+        },
+        "cliui": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+          "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+          "dev": true,
+          "requires": {
+            "center-align": "^0.1.1",
+            "right-align": "^0.1.1",
+            "wordwrap": "0.0.2"
+          }
+        },
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+          "dev": true
+        },
+        "uglify-js": {
+          "version": "2.8.29",
+          "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
+          "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+          "dev": true,
+          "requires": {
+            "source-map": "~0.5.1",
+            "uglify-to-browserify": "~1.0.0",
+            "yargs": "~3.10.0"
+          }
+        },
+        "yargs": {
+          "version": "3.10.0",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+          "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+          "dev": true,
+          "requires": {
+            "camelcase": "^1.0.2",
+            "cliui": "^2.1.0",
+            "decamelize": "^1.0.0",
+            "window-size": "0.1.0"
+          }
+        }
       }
     },
     "pug-lexer": {
@@ -8069,6 +7831,25 @@
       "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==",
       "dev": true
     },
+    "terser": {
+      "version": "5.5.1",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-5.5.1.tgz",
+      "integrity": "sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ==",
+      "dev": true,
+      "requires": {
+        "commander": "^2.20.0",
+        "source-map": "~0.7.2",
+        "source-map-support": "~0.5.19"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.7.3",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+          "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
+          "dev": true
+        }
+      }
+    },
     "test-exclude": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
@@ -8282,123 +8063,6 @@
       "integrity": "sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ==",
       "dev": true
     },
-    "typhonjs-ast-walker": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/typhonjs-ast-walker/-/typhonjs-ast-walker-0.2.1.tgz",
-      "integrity": "sha1-a+uNuMxFtbxDjIyVhT+NOFQTyz4=",
-      "dev": true
-    },
-    "typhonjs-escomplex": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/typhonjs-escomplex/-/typhonjs-escomplex-0.1.0.tgz",
-      "integrity": "sha512-B2r31mRH/ZuuogZADqOBP4NPnqBH2mzEP+Pjm+5R8/z0iHLwUTRadkDQL4yv33qsHdIHlvnpOHh6iUo69v2mPA==",
-      "dev": true,
-      "requires": {
-        "@typhonjs/babel-parser": "^0.2.0",
-        "commander": "^2.0.0",
-        "typhonjs-escomplex-module": "^0.1.0",
-        "typhonjs-escomplex-project": "^0.1.0"
-      }
-    },
-    "typhonjs-escomplex-commons": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/typhonjs-escomplex-commons/-/typhonjs-escomplex-commons-0.1.1.tgz",
-      "integrity": "sha512-nIeiokmcupP3t34KVhynHi0LrjMM6QzbHiwK8+Kl/GnAq4o/jK+cCiu4Zt9mZgJKUzUGRtW1kqoZI2RlAchkgg==",
-      "dev": true
-    },
-    "typhonjs-escomplex-module": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/typhonjs-escomplex-module/-/typhonjs-escomplex-module-0.1.0.tgz",
-      "integrity": "sha512-ViviuBg7Etrl8HeQcwQ9gui9s0rpnFPXltXUFAvOzeQScb+xrLijBq7Z0cveriKQegne/tGTn4ljZg0prwDyTw==",
-      "dev": true,
-      "requires": {
-        "escomplex-plugin-metrics-module": "^0.1.0",
-        "escomplex-plugin-syntax-babylon": "^0.1.0",
-        "typhonjs-ast-walker": "^0.2.0",
-        "typhonjs-escomplex-commons": "^0.1.0",
-        "typhonjs-plugin-manager": "^0.2.0"
-      }
-    },
-    "typhonjs-escomplex-project": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/typhonjs-escomplex-project/-/typhonjs-escomplex-project-0.1.0.tgz",
-      "integrity": "sha512-2NdkUsDmxcgsNFqn14CYl5Xfzlig7kKtU/ACOLRN6/nP9c3rlHizVr8YdBYRf2H1sOjmjfNmbC6i1RVnnJZxZQ==",
-      "dev": true,
-      "requires": {
-        "escomplex-plugin-metrics-project": "^0.1.0",
-        "typhonjs-escomplex-commons": "^0.1.0",
-        "typhonjs-escomplex-module": "^0.1.0",
-        "typhonjs-plugin-manager": "^0.2.0"
-      }
-    },
-    "typhonjs-object-util": {
-      "version": "0.4.2",
-      "resolved": "https://registry.npmjs.org/typhonjs-object-util/-/typhonjs-object-util-0.4.2.tgz",
-      "integrity": "sha1-HJwqcJ4EeDRdgJh5VicxwwnhpVQ=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.0.0"
-      }
-    },
-    "typhonjs-plugin-manager": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/typhonjs-plugin-manager/-/typhonjs-plugin-manager-0.2.0.tgz",
-      "integrity": "sha1-JgxKzfarvpT9NcoKJSUYOa2eFNM=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.0.0",
-        "backbone-esnext-events": "<1.0.0",
-        "typhonjs-object-util": "^0.4.0"
-      }
-    },
-    "uglify-js": {
-      "version": "2.8.29",
-      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
-      "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
-      "dev": true,
-      "requires": {
-        "source-map": "~0.5.1",
-        "uglify-to-browserify": "~1.0.0",
-        "yargs": "~3.10.0"
-      },
-      "dependencies": {
-        "camelcase": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
-          "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
-          "dev": true
-        },
-        "cliui": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
-          "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
-          "dev": true,
-          "requires": {
-            "center-align": "^0.1.1",
-            "right-align": "^0.1.1",
-            "wordwrap": "0.0.2"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "yargs": {
-          "version": "3.10.0",
-          "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
-          "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
-          "dev": true,
-          "requires": {
-            "camelcase": "^1.0.2",
-            "cliui": "^2.1.0",
-            "decamelize": "^1.0.0",
-            "window-size": "0.1.0"
-          }
-        }
-      }
-    },
     "uglify-to-browserify": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
@@ -8627,12 +8291,6 @@
         "spdx-expression-parse": "^3.0.0"
       }
     },
-    "vlq": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz",
-      "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==",
-      "dev": true
-    },
     "vm-browserify": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
diff --git a/package.json b/package.json
index 15e3034cd0f65331c4c334b997da6fef78172677..2880ce380a9d0d4db81f7867499e3b94d0232848 100644
--- a/package.json
+++ b/package.json
@@ -11,6 +11,10 @@
     "build:npm:all": "rollup src/all.mjs --format esm --file generated/npm/all.mjs",
     "build:npm:crypto": "rollup src/crypto.mjs --format esm --file generated/npm/crypto.mjs",
     "build:npm:dictionaryBuilder": "rollup src/dictionaryBuilder.mjs --format esm --file generated/npm/dictionaryBuilder.mjs",
+    "packaging": "https://github.com/1000i100/latinize-to-ascii/blob/master/package.json",
+    "build:npm:min:all": "terser generated/npm/all.mjs -o generated/npm/all.mjs",
+    "build:npm:min:crypto": "terser generated/npm/crypto.mjs -o generated/npm/crypto.mjs",
+    "build:npm:min:dictionaryBuilder": "terser generated/npm/dictionaryBuilder.mjs -o generated/npm/dictionaryBuilder.mjs",
     "build:npm:cp": "cp npm/* generated/npm/",
     "build:npm:cp:readme": "cp README* generated/npm/",
     "test": "run-s test:dev",
@@ -22,13 +26,14 @@
     "test:production": "run-s test:production:**",
     "test:production:qualityCheck": "xo",
     "test:production:duplication": "jscpd ./",
-		"test:production:complexity": "./node_modules/.bin/es6-plato -r -d generated/maintainability ./src/*",
-		"test:production:complexity:badgesAndThreshold": "node CI/plato-badges.js",
+    "test:production:complexity": "./node_modules/.bin/es6-plato -r -d generated/maintainability ./src/*",
+    "test:production:complexity:badgesAndThreshold": "node CI/plato-badges.js",
     "test:production:test2npm": "cp src/*.test.mjs generated/npm/",
     "test:production:runTests": "cd generated/npm/ && c8 ava",
     "test:production:clean": "rm -rf generated/npm/*.test.mjs generated/npm/node_modules"
   },
   "dependencies": {
+    "ecma-nacl": "^2.5.0",
     "scrypt-async-modern": "^3.0.12",
     "tweetnacl": "^1.0.3"
   },
@@ -42,22 +47,23 @@
     "mkdirp": "^1.0.4",
     "npm-run-all": "^4.1.5",
     "rollup": "^2.34.2",
+    "terser": "^5.5.1",
     "xo": "^0.34.2"
   },
   "disabledDependenciesTODOAddComplexityQualityCheck": {
     "codehawk-cli": "^6.0.3"
   },
   "ava": {},
-	"xo": {
-		"rules": {
-			"curly": 0,
-			"unicorn/no-reduce": 0
-		}
-	},
-	"maintainabilityThreshold": {
-		"global": 75,
-		"file": 50
-	},
+  "xo": {
+    "rules": {
+      "curly": 0,
+      "unicorn/no-reduce": 0
+    }
+  },
+  "maintainabilityThreshold": {
+    "global": 75,
+    "file": 50
+  },
   "jscpd": {
     "threshold": 0.1,
     "reporters": [
diff --git a/src/crypto.mjs b/src/crypto.mjs
index e69ebb99edba0ea8bebd9a9c579cf5f3d2e505a0..30235c19fdf1406c3c74611d79c0103ad87afa58 100644
--- a/src/crypto.mjs
+++ b/src/crypto.mjs
@@ -1,5 +1,8 @@
 export {b58,b16, saltPass2seed, seed2keyPair,idSecPass2rawAll, raw2b58, idSecPass2cleanKeys}
+//import {generate_keypair} from "ecma-nacl/build/lib/signing/sign.d.ts";
+//import {scrypt} from "ecma-nacl/build/lib/scrypt/scrypt.d.ts";
 import nacl from "../generated/vendors/nacl.mjs";
+const generate_keypair = nacl.sign.keyPair.fromSeed;
 import scrypt from "../generated/vendors/scrypt.mjs";
 
 async function idSecPass2rawAll(idSec,pass) {
@@ -21,7 +24,7 @@ async function idSecPass2cleanKeys(idSec,pass){
 	return Object.assign(raw2b58(raw),{idSec,password:pass});
 }
 function seed2keyPair(seed){
-	return nacl.sign.keyPair.fromSeed(seed);
+	return generate_keypair(seed);
 }
 async function saltPass2seed(idSec,pass) {
 	const options = {