diff --git a/app/Main.hs b/app/Main.hs
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -5,7 +5,7 @@
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE TypeOperators       #-}
 
--- TODO(avi|p=3|#cleanup) - break this into modules
+-- TODO(avi|p=3|#cleanup|key=val|k3y=asdf) - break this into modules
 module Main where
 
 import qualified Control.Exception          as E
@@ -71,6 +71,7 @@
   { editIds     :: [Integer]
   , setAssignee :: Maybe T.Text
   , addTags     :: [T.Text]
+  , addKeyVals  :: [(T.Text, T.Text)]
   , setPriority :: Maybe Integer
   } deriving (Show, Generic)
 
@@ -208,7 +209,10 @@
             else assignee entry
           newPriority = if isJust (setPriority editRequest) then setPriority editRequest else priority entry in
 
-        entry {assignee = newAssignee, tags = tags entry ++ addTags editRequest, priority = newPriority}
+        entry {assignee = newAssignee,
+               tags = tags entry ++ addTags editRequest,
+               priority = newPriority,
+               customAttributes = nub $ customAttributes entry ++ addKeyVals editRequest}
 
     recordUpdates :: MonadIO m => TodoEntry -> m ()
     recordUpdates t = void $ updateTodoLinesInFile renderTodo t
diff --git a/toodles.cabal b/toodles.cabal
--- a/toodles.cabal
+++ b/toodles.cabal
@@ -2,10 +2,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: c6c9747348f5840600bc60ca50371441531f0a8aeb8866276836eb133141353a
+-- hash: 770bcef8fdc02da5e012a221275957c0f7b87d287968aa1806ed5ddd1c1c3746
 
 name:           toodles
-version:        0.1.0.5
+version:        0.1.0.6
 synopsis:       Manage the TODO entries in your code
 description:    See the README on GitHub at <https://github.com/aviaviavi/toodles#readme>
 category:       Project Management
diff --git a/web/css/toodles.css b/web/css/toodles.css
--- a/web/css/toodles.css
+++ b/web/css/toodles.css
@@ -132,3 +132,7 @@
 .toodles-nav-title-text {
     padding-left: 5px;
 }
+
+.input-error {
+    color: red;
+}
diff --git a/web/html/index.html b/web/html/index.html
--- a/web/html/index.html
+++ b/web/html/index.html
@@ -59,24 +59,33 @@
                     <div class="field edit-todo-field-input">
                         <label class="label">Set Assignee</label>
                         <div class="control">
-                            <input class="input" type="text" placeholder="Assignee" v-model="setAssignee">
+                            <input class="input" type="text" placeholder="Assignee" v-model="setAssignee" @keyup.enter="submitTodoEdits">
                         </div>
                     </div>
 
                     <div class="field edit-todo-field-input">
                         <label class="label">Add Tag (comma separated)</label>
                         <div class="control">
-                            <input class="input" type="text" placeholder="#bug,#techdebt,..." v-model="addTags">
+                            <input class="input" type="text" placeholder="#bug,#techdebt,..." v-model="addTags" @keyup.enter="submitTodoEdits">
                         </div>
                     </div>
 
                     <div class="field edit-todo-field-input">
+                        <label class="label">Add Custom Attributes (comma separated)</label>
+                        <div class="input-error key-val-parse-error" v-show="addKeyValParseError">Parse error, check your formatting and try again</div>
+                        <div class="control">
+                            <input class="input" type="text" placeholder="key1:val1,key2:val2,..." v-model="addKeyVals" @keyup.enter="submitTodoEdits">
+                        </div>
+                    </div>
+
+                    <div class="field edit-todo-field-input">
                         <label class="label">Set Priority</label>
                         <div class="control">
-                            <input class="input" type="number" placeholder="Number" v-model="setPriority">
+                            <input class="input" type="number" placeholder="Number" v-model="setPriority" @keyup.enter="submitTodoEdits">
                         </div>
                     </div>
 
+                    <div class="input-error nothing-filled-error" v-show="nothingFilledError">Add some changes before submitting</div>
                     <button class="button is-primary submit-todo-edits" v-on:click="submitTodoEdits">Submit</button>
                 </div>
             </div>
diff --git a/web/js/app.js b/web/js/app.js
--- a/web/js/app.js
+++ b/web/js/app.js
@@ -14,6 +14,9 @@
         addTags: "",
         setPriority: null,
         lastSortField: null,
+        addKeyVals: "",
+        addKeyValParseError: false,
+        nothingFilledError: false,
       }
     },
     created: function() {
@@ -167,6 +170,23 @@
       },
 
       submitTodoEdits: function(){
+        this.keyValParseError = false
+        this.nothingFilledError = false
+
+        if (!(this.addKeyVals || this.setAssignee || this.setPriority || this.addTags)) {
+          this.nothingFilledError = true
+          return
+        }
+        const keyVals =
+              this.addKeyVals.trim() === "" ?
+              [] :
+              this.addKeyVals.split(",").map(p => p.split(":").map(t => t.trim()))
+        const keyValError = keyVals.some(p => p && p.length !== 2)
+        if (keyValError) {
+          this.addKeyValParseError = true
+          return
+        }
+
         $.ajax({
           url: "/todos/edit",
           type: "POST",
@@ -182,7 +202,8 @@
                   "#" + tag
 
               }),
-            setPriority: parseInt(this.setPriority)
+            setPriority: parseInt(this.setPriority),
+            addKeyVals: keyVals,
           }),
           success: function(data){
             this.todos.filter(function(t) {
@@ -197,6 +218,12 @@
                 }
                 if (this.setPriority) {
                   t.priority = parseInt(this.setPriority)
+                }
+
+                if (this.addKeyVals) {
+                  for (var i = 0; i < keyVals.length; i++) {
+                    t.customAttributes[keyVals[i][0]] = keyVals[i][1]
+                  }
                 }
              }.bind(this))
             this.closeModal()
