diff --git a/files.html b/files.html
index 0a14cf55766d61c049710877e74ac8e63f085e56..a3476e35c94d0e0a67f35272c521bc6d7e1a0586 100644
--- a/files.html
+++ b/files.html
@@ -19,7 +19,7 @@
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./js/files.js'>files.js</a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./js/load.js'>load.js</a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./js/mods.js'>mods.js</a><br>
-<i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node_modules</i><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./js/modules.js'>modules.js</a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./js/printserver.js'>printserver.js</a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./js/serialserver.js'>serialserver.js</a><br>
 <i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;three.js</i><br>
@@ -99,6 +99,7 @@
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./modules/image/vector%20mask'>vector mask</a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./modules/image/vectorize'>vectorize</a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./modules/index.html'>index.html</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./modules/index.js'>index.js</a><br>
 <i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input</i><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='./modules/input/video'>video</a><br>
 <i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iterate</i><br>
diff --git a/js/mods.js b/js/mods.js
index 3dd63ad4cd34fc441a6d8fdf9e70477bc80b0bd0..c28fb281718f921c05fd9f0cdedbf31caebec208 100644
--- a/js/mods.js
+++ b/js/mods.js
@@ -52,12 +52,19 @@ function optest(opt,link) {
 //
 document.addEventListener('contextmenu',function(evt){
    evt.preventDefault()
+   if (mods.globals.menu != null) {
+      document.body.removeChild(mods.globals.menu)
+      mods.globals.menu = null
+      }
    var div = document.createElement('div')
    make_menu(div)
    add_menu(div,'programs',programs)
    add_menu(div,'modules',modules)
+   add_menu(div,'edit',edit)
+   add_menu(div,'options',options)
    document.body.appendChild(div)
    function make_menu(div) {
+      mods.globals.menu = div
       div.style.position = "absolute"
       div.style.top = evt.clientY+document.body.scrollTop
       div.style.left = evt.clientX+document.body.scrollLeft
@@ -204,6 +211,33 @@ document.addEventListener('contextmenu',function(evt){
          })
       document.body.appendChild(div)
       }
+   function edit(evt) {
+      evt.preventDefault()
+      document.body.removeChild(evt.target.parentNode)
+      set_prompt('editing not yet implemented')
+      }
+   function options(evt) {
+      evt.preventDefault()
+      document.body.removeChild(evt.target.parentNode)
+      var div = document.createElement('div')
+      make_menu(div)
+      //
+      // list files
+      //
+      add_menu(div,'list files',function(evt){
+         document.body.removeChild(evt.target.parentNode)
+         var win = window.open('files.html')
+         })
+      document.body.appendChild(div)
+      //
+      // save files
+      //
+      add_menu(div,'save files',function(evt){
+         document.body.removeChild(evt.target.parentNode)
+         var win = window.open('https://gitlab.cba.mit.edu/pub/mods')
+         })
+      document.body.appendChild(div)
+      }
    })
 //
 // programs menu