diff --git a/src/web/app/desktop/tags/post-form.tag b/src/web/app/desktop/tags/post-form.tag
index 39b6e0f2023f4979bee08fdd4b0272ea7cb403d5..bc99e0c0a287ade0f7b2421310619ffa1021d88c 100644
--- a/src/web/app/desktop/tags/post-form.tag
+++ b/src/web/app/desktop/tags/post-form.tag
@@ -333,6 +333,12 @@
 
 			this.autocomplete = new this.Autocomplete(this.refs.text);
 			this.autocomplete.attach();
+
+			let draft = localStorage.getItem('post-draft');
+			if (draft) {
+				draft = JSON.parse(draft);
+				this.refs.text.value = draft.text;
+			}
 		});
 
 		this.on('unmount', () => {
@@ -446,6 +452,7 @@
 				reply_to_id: this.inReplyToPost ? this.inReplyToPost.id : undefined,
 				poll: this.poll ? this.refs.poll.get() : undefined
 			}).then(data => {
+				localStorage.removeItem('post-draft');
 				this.trigger('post');
 				this.notify(this.inReplyToPost ? '返信しました!' : '投稿しました!');
 			}).catch(err => {
@@ -460,5 +467,19 @@
 		this.cat = () => {
 			this.refs.text.value += getCat();
 		};
+
+		this.on('update', () => {
+			this.save();
+		});
+
+		this.save = () => {
+			const context = {
+				text: this.refs.text.value,
+				files: this.files,
+				poll: this.poll ? this.refs.poll.get() : undefined
+			};
+
+			localStorage.setItem('post-draft', JSON.stringify(context));
+		};
 	</script>
 </mk-post-form>