diff --git a/zeppelin-web-angular/src/app/pages/workspace/notebook/note-form-block/note-form-block.component.less b/zeppelin-web-angular/src/app/pages/workspace/notebook/note-form-block/note-form-block.component.less
new file mode 100644
index 00000000000..896b6f8dabf
--- /dev/null
+++ b/zeppelin-web-angular/src/app/pages/workspace/notebook/note-form-block/note-form-block.component.less
@@ -0,0 +1,27 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+@import "theme-mixin";
+
+:host {
+ display: block;
+ padding: 0 4px;
+}
+
+.themeMixin({
+ .forms-wrap {
+ background: @component-background;
+ border: 1px solid @border-color-split;
+ box-shadow: @card-shadow;
+ padding: 12px;
+ position: relative;
+ }
+});
diff --git a/zeppelin-web-angular/src/app/pages/workspace/notebook/note-form-block/note-form-block.component.ts b/zeppelin-web-angular/src/app/pages/workspace/notebook/note-form-block/note-form-block.component.ts
new file mode 100644
index 00000000000..9eb0b721403
--- /dev/null
+++ b/zeppelin-web-angular/src/app/pages/workspace/notebook/note-form-block/note-form-block.component.ts
@@ -0,0 +1,43 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
+import { DynamicForms, DynamicFormParams } from '@zeppelin/sdk';
+
+@Component({
+ selector: 'zeppelin-note-form-block',
+ templateUrl: './note-form-block.component.html',
+ styleUrls: ['./note-form-block.component.less'],
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class NoteFormBlockComponent implements OnInit {
+ @Input() noteTitle: string;
+ @Input() formDefs: DynamicForms;
+ @Input() paramDefs: DynamicFormParams;
+ @Output() readonly noteTitleChange = new EventEmitter();
+ @Output() readonly noteFormChange = new EventEmitter();
+ @Output() readonly noteFormNameRemove = new EventEmitter();
+ constructor() {}
+
+ ngOnInit() {}
+
+ onFormRemove({ name }) {
+ this.noteFormNameRemove.emit(name);
+ }
+
+ onFormChange() {
+ this.noteFormChange.emit(this.paramDefs);
+ }
+
+ setTitle(title: string) {
+ this.noteTitleChange.emit(title);
+ }
+}
diff --git a/zeppelin-web-angular/src/app/pages/workspace/notebook/notebook.component.html b/zeppelin-web-angular/src/app/pages/workspace/notebook/notebook.component.html
index c447a59c39d..d9574db30cd 100644
--- a/zeppelin-web-angular/src/app/pages/workspace/notebook/notebook.component.html
+++ b/zeppelin-web-angular/src/app/pages/workspace/notebook/notebook.component.html
@@ -34,6 +34,14 @@