diff --git a/.envrc b/.envrc
new file mode 100644
index 0000000000000000000000000000000000000000..6de8a8acd7e0568480ae14eb70819c9036a8666a
--- /dev/null
+++ b/.envrc
@@ -0,0 +1,3 @@
+source_url "https://raw.githubusercontent.com/cachix/devenv/d1f7b48e35e6dee421cfd0f51481d17f77586997/direnvrc" "sha256-YBzqskFZxmNb3kYVoKD9ZixoPXJh1C9ZvTLGFRkauZ0="
+
+use devenv
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index e511b1e051c1a3cb0904419967875aa0fd30cc82..4f27f08467d75ca41396d2e9900145f064616740 100644
--- a/.gitignore
+++ b/.gitignore
@@ -510,3 +510,8 @@ tags
 
 # and uncomment the following lines
 # .pnp.*
+
+# Devenv
+.devenv*
+devenv.local.nix
+.direnv
diff --git a/application/source/dom/updater.mjs b/application/source/dom/updater.mjs
index d1879c7e69c39d94f7f4862c1430f1482ebdebe5..40867df6102a4020e98bf3b14be76af312c331fa 100644
--- a/application/source/dom/updater.mjs
+++ b/application/source/dom/updater.mjs
@@ -18,7 +18,7 @@ import {
     ATTRIBUTE_UPDATER_REMOVE,
     ATTRIBUTE_UPDATER_REPLACE,
     ATTRIBUTE_UPDATER_SELECT_THIS,
-} from "../dom/constants.mjs";
+} from "./constants.mjs";
 
 import { Base } from "../types/base.mjs";
 import { isArray, isInstance, isIterable } from "../types/is.mjs";
diff --git a/application/source/types/proxyobserver.mjs b/application/source/types/proxyobserver.mjs
index 6c7a33f103ef1918b6f9c9f73f1813c2ce706f8e..8043db6a862f324c2d0354152f81fb91c59cf539 100644
--- a/application/source/types/proxyobserver.mjs
+++ b/application/source/types/proxyobserver.mjs
@@ -59,10 +59,6 @@ class ProxyObserver extends Base {
     }
 
     /**
-     * Get the real object
-     *
-     * Changes to this object are not noticed by the observers, so you can make a large number of changes and inform the observers later.
-     *
      * @returns {object}
      */
     getSubject() {
@@ -86,8 +82,10 @@ class ProxyObserver extends Base {
     }
 
     /**
-     * get the proxied object
+     * Get the real object
      *
+     * Changes to this object are not noticed by the observers, so you can make a large number of changes and inform the observers later.
+     * 
      * @returns {object}
      */
     getRealSubject() {
diff --git a/devenv.lock b/devenv.lock
new file mode 100644
index 0000000000000000000000000000000000000000..c15877f3e65c463ea428c5eb5c3b69dcab27a3eb
--- /dev/null
+++ b/devenv.lock
@@ -0,0 +1,156 @@
+{
+  "nodes": {
+    "devenv": {
+      "locked": {
+        "dir": "src/modules",
+        "lastModified": 1686642933,
+        "narHash": "sha256-5Z4uitx27QtZIrG9sOSJlZRNcVQn/TI36nj7o70n5Dw=",
+        "owner": "cachix",
+        "repo": "devenv",
+        "rev": "f5278b5d56e39f86a299a2e1889906933a26f762",
+        "type": "github"
+      },
+      "original": {
+        "dir": "src/modules",
+        "owner": "cachix",
+        "repo": "devenv",
+        "type": "github"
+      }
+    },
+    "flake-compat": {
+      "flake": false,
+      "locked": {
+        "lastModified": 1673956053,
+        "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
+        "owner": "edolstra",
+        "repo": "flake-compat",
+        "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
+        "type": "github"
+      },
+      "original": {
+        "owner": "edolstra",
+        "repo": "flake-compat",
+        "type": "github"
+      }
+    },
+    "flake-utils": {
+      "inputs": {
+        "systems": "systems"
+      },
+      "locked": {
+        "lastModified": 1685518550,
+        "narHash": "sha256-o2d0KcvaXzTrPRIo0kOLV0/QXHhDQ5DTi+OxcjO8xqY=",
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "rev": "a1720a10a6cfe8234c0e93907ffe81be440f4cef",
+        "type": "github"
+      },
+      "original": {
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "type": "github"
+      }
+    },
+    "gitignore": {
+      "inputs": {
+        "nixpkgs": [
+          "pre-commit-hooks",
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1660459072,
+        "narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=",
+        "owner": "hercules-ci",
+        "repo": "gitignore.nix",
+        "rev": "a20de23b925fd8264fd7fad6454652e142fd7f73",
+        "type": "github"
+      },
+      "original": {
+        "owner": "hercules-ci",
+        "repo": "gitignore.nix",
+        "type": "github"
+      }
+    },
+    "nixpkgs": {
+      "locked": {
+        "lastModified": 1686582075,
+        "narHash": "sha256-vtflsfKkHtF8IduxDNtbme4cojiqvlvjp5QNYhvoHXc=",
+        "owner": "NixOS",
+        "repo": "nixpkgs",
+        "rev": "7e63eed145566cca98158613f3700515b4009ce3",
+        "type": "github"
+      },
+      "original": {
+        "owner": "NixOS",
+        "ref": "nixpkgs-unstable",
+        "repo": "nixpkgs",
+        "type": "github"
+      }
+    },
+    "nixpkgs-stable": {
+      "locked": {
+        "lastModified": 1685801374,
+        "narHash": "sha256-otaSUoFEMM+LjBI1XL/xGB5ao6IwnZOXc47qhIgJe8U=",
+        "owner": "NixOS",
+        "repo": "nixpkgs",
+        "rev": "c37ca420157f4abc31e26f436c1145f8951ff373",
+        "type": "github"
+      },
+      "original": {
+        "owner": "NixOS",
+        "ref": "nixos-23.05",
+        "repo": "nixpkgs",
+        "type": "github"
+      }
+    },
+    "pre-commit-hooks": {
+      "inputs": {
+        "flake-compat": "flake-compat",
+        "flake-utils": "flake-utils",
+        "gitignore": "gitignore",
+        "nixpkgs": [
+          "nixpkgs"
+        ],
+        "nixpkgs-stable": "nixpkgs-stable"
+      },
+      "locked": {
+        "lastModified": 1686668298,
+        "narHash": "sha256-AADh9NqHh6X2LOem4BvI7oCkMm+JPCSCE7iIw5nn0VA=",
+        "owner": "cachix",
+        "repo": "pre-commit-hooks.nix",
+        "rev": "5b6b54d3f722aa95cbf4ddbe35390a0af8c0015a",
+        "type": "github"
+      },
+      "original": {
+        "owner": "cachix",
+        "repo": "pre-commit-hooks.nix",
+        "type": "github"
+      }
+    },
+    "root": {
+      "inputs": {
+        "devenv": "devenv",
+        "nixpkgs": "nixpkgs",
+        "pre-commit-hooks": "pre-commit-hooks"
+      }
+    },
+    "systems": {
+      "locked": {
+        "lastModified": 1681028828,
+        "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+        "owner": "nix-systems",
+        "repo": "default",
+        "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nix-systems",
+        "repo": "default",
+        "type": "github"
+      }
+    }
+  },
+  "root": "root",
+  "version": 7
+}
diff --git a/devenv.nix b/devenv.nix
new file mode 100644
index 0000000000000000000000000000000000000000..5b2a5fca0d8bfb7b24854a4dbaf0c075a4a72b5e
--- /dev/null
+++ b/devenv.nix
@@ -0,0 +1,34 @@
+{ pkgs, config, lib, ... }:
+
+{
+  # https://devenv.sh/basics/
+  #env.GREET = "devenv";
+
+  # https://devenv.sh/packages/
+  packages = [
+                pkgs.git
+                pkgs.gnumake
+                pkgs.emacsPackages.pnpm-mode
+                pkgs.nodejs_20
+                ];
+                
+  certificates = [
+      "localhost.monsterjs.org"
+  ];        
+  
+  hosts = {
+    "localhost.monsterjs.org" = "127.0.0.1";
+  };
+          
+ 
+  languages.javascript = {
+    enable = true;
+    package = pkgs.nodejs_20;
+    corepack.enable = true;
+     
+  };
+  
+  # See full reference at https://devenv.sh/reference/options/
+}
+
+
diff --git a/devenv.yaml b/devenv.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..c7cb5cedadc04e17a1703f298db573f43c79cad8
--- /dev/null
+++ b/devenv.yaml
@@ -0,0 +1,3 @@
+inputs:
+  nixpkgs:
+    url: github:NixOS/nixpkgs/nixpkgs-unstable