diff --git a/src/workflows/manager/components/WorkflowEditor.js b/src/workflows/manager/components/WorkflowEditor.js
index 7da2a4d..4a8ab90 100644
--- a/src/workflows/manager/components/WorkflowEditor.js
+++ b/src/workflows/manager/components/WorkflowEditor.js
@@ -1,7 +1,9 @@
 import '@material/web/button/outlined-button.js';
+import '@material/web/textfield/filled-text-field.js';
 import './ActionEditor.js';
 
-import {html, LitElement, nothing} from 'lit';
+import {css, html, LitElement, nothing} from 'lit';
+import {createRef, ref} from 'lit/directives/ref.js';
 import {repeat} from 'lit/directives/repeat.js';
 
 import * as pb from '../../proto/main_pb.js';
@@ -12,12 +14,33 @@
     readOnly: {type: Boolean},
   };
 
+  static styles = css`
+    .name {
+      width: 100%;
+      margin-bottom: 20px;
+    }
+  `;
+
+  nameRef = createRef();
+
   constructor() {
     super();
     this.workflow = new pb.workflows.Workflow();
     this.readOnly = false;
   }
 
+  renderName() {
+    return html`
+      <md-filled-text-field ${ref(this.nameRef)}
+          class="name"
+          placeholder="Untitled workflow"
+          value=${this.workflow.getName()}
+          required
+          @input=${this._nameChanged}>
+      </md-filled-text-field>
+    `;
+  }
+
   renderActions() {
     return repeat(this._actions(), (action, i) => html`
       <wf-action-editor
@@ -43,6 +66,7 @@
 
   render() {
     return [
+      this.renderName(),
       this.renderActions(),
       this.renderAddActionBtn(),
     ];
@@ -50,12 +74,16 @@
 
   save() {
     let allValid = true;
+
+    // Check the workflow name is set
+    allValid &&= this.nameRef.value.reportValidity();
+
+    // Check all the actions are well-formed
     const actionEditors = this.renderRoot.querySelectorAll('wf-action-editor');
-    for (const editor of actionEditors) {
-      const isValid = editor.checkValidity();
-      if (!isValid) allValid = false;
-    }
+    for (const editor of actionEditors) allValid &&= editor.checkValidity();
+
     // @TODO: Save if allValid === true
+
     return allValid;
   }
 
@@ -63,6 +91,11 @@
     return this.workflow.getActionsList();
   }
 
+  _nameChanged() {
+    this.workflow.setName(this.nameRef.value.value);
+    this._dispatchUpdateEvent();
+  }
+
   _addAction() {
     let action = new pb.workflows.Action();
     let rAction = new pb.workflows.Action.ReplyWithCRAction();
