diff --git a/ui/app/templates/allocations/allocation/task/logs.hbs b/ui/app/templates/allocations/allocation/task/logs.hbs
index 4b1e74d5272..d52253254e2 100644
--- a/ui/app/templates/allocations/allocation/task/logs.hbs
+++ b/ui/app/templates/allocations/allocation/task/logs.hbs
@@ -1,5 +1,5 @@
{{title "Task " model.name " logs"}}
-{{partial "allocations/allocation/task/subnav"}}
+{{task-subnav task=model}}
{{task-log data-test-task-log allocation=model.allocation task=model.name}}
diff --git a/ui/app/templates/allocations/allocation/task/subnav.hbs b/ui/app/templates/allocations/allocation/task/subnav.hbs
deleted file mode 100644
index 5bacd994071..00000000000
--- a/ui/app/templates/allocations/allocation/task/subnav.hbs
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- {{#link-to "allocations.allocation.task.index" model.allocation model activeClass="is-active"}}Overview{{/link-to}}
- {{#link-to "allocations.allocation.task.logs" model.allocation model activeClass="is-active"}}Logs{{/link-to}}
-
-
diff --git a/ui/app/templates/components/fs-breadcrumbs.hbs b/ui/app/templates/components/fs-breadcrumbs.hbs
new file mode 100644
index 00000000000..97aba6398a5
--- /dev/null
+++ b/ui/app/templates/components/fs-breadcrumbs.hbs
@@ -0,0 +1,14 @@
+
+
+ {{#link-to "allocations.allocation.task.fs-root" task.allocation task activeClass="is-active"}}
+ {{task.name}}
+ {{/link-to}}
+
+ {{#each breadcrumbs as |breadcrumb|}}
+
+ {{#link-to "allocations.allocation.task.fs" task.allocation task breadcrumb.path activeClass="is-active"}}
+ {{breadcrumb.name}}
+ {{/link-to}}
+
+ {{/each}}
+
\ No newline at end of file
diff --git a/ui/app/templates/components/fs-directory-entry.hbs b/ui/app/templates/components/fs-directory-entry.hbs
new file mode 100644
index 00000000000..cc55d30ff6f
--- /dev/null
+++ b/ui/app/templates/components/fs-directory-entry.hbs
@@ -0,0 +1,15 @@
+
+
+ {{#link-to "allocations.allocation.task.fs" task.allocation task pathToEntry activeClass="is-active"}}
+ {{#if entry.IsDir}}
+ {{x-icon "folder-outline"}}
+ {{else}}
+ {{x-icon "file-outline"}}
+ {{/if}}
+
+ {{entry.Name}}
+ {{/link-to}}
+
+ {{#unless entry.IsDir}}{{format-bytes entry.Size}}{{/unless}}
+ {{moment-from entry.ModTime interval=1000}}
+
diff --git a/ui/app/templates/components/image-file.hbs b/ui/app/templates/components/image-file.hbs
new file mode 100644
index 00000000000..9228740d487
--- /dev/null
+++ b/ui/app/templates/components/image-file.hbs
@@ -0,0 +1,11 @@
+
+
+
+
+
+ {{fileName}}
+ {{#if (and width height)}}
+ ({{width}}px × {{height}}px{{#if size}}, {{format-bytes size}}{{/if}})
+ {{/if}}
+
+
\ No newline at end of file
diff --git a/ui/app/templates/components/streaming-file.hbs b/ui/app/templates/components/streaming-file.hbs
new file mode 100644
index 00000000000..fa97a815e2e
--- /dev/null
+++ b/ui/app/templates/components/streaming-file.hbs
@@ -0,0 +1 @@
+
{{logger.output}}
\ No newline at end of file
diff --git a/ui/app/templates/components/task-file.hbs b/ui/app/templates/components/task-file.hbs
new file mode 100644
index 00000000000..bed5c27620f
--- /dev/null
+++ b/ui/app/templates/components/task-file.hbs
@@ -0,0 +1,39 @@
+{{#if noConnection}}
+
+
Cannot fetch file
+
The files for this task are inaccessible. Check the condition of the client the allocation is on.
+
+{{/if}}
+
+ {{yield}}
+
+
+ {{#if (not fileTypeIsUnknown)}}
+ View Raw File
+ {{/if}}
+ {{#if (and isLarge isStreamable)}}
+ Head
+ Tail
+ {{/if}}
+ {{#if isStreamable}}
+
+ {{x-icon (if logger.isStreaming "media-pause" "media-play") class="is-text"}}
+
+ {{/if}}
+
+
+
+ {{#if (eq fileComponent "stream")}}
+ {{streaming-file logger=logger mode=mode isStreaming=isStreaming}}
+ {{else if (eq fileComponent "image")}}
+ {{image-file src=catUrl alt=stat.Name size=stat.Size}}
+ {{else}}
+
+
Unsupported File Type
+
The Nomad UI could not render this file, but you can still view the file directly.
+
+ View Raw File
+
+
+ {{/if}}
+
diff --git a/ui/app/templates/components/task-log.hbs b/ui/app/templates/components/task-log.hbs
index 6c3991a359c..89a363747ae 100644
--- a/ui/app/templates/components/task-log.hbs
+++ b/ui/app/templates/components/task-log.hbs
@@ -10,13 +10,13 @@
stderr
- Head
- Tail
+ Head
+ Tail
{{x-icon (if logger.isStreaming "media-pause" "media-play") class="is-text"}}
-
{{logger.output}}
+ {{streaming-file logger=logger mode=streamMode isStreaming=isStreaming}}
diff --git a/ui/app/templates/components/task-subnav.hbs b/ui/app/templates/components/task-subnav.hbs
new file mode 100644
index 00000000000..4872d032e30
--- /dev/null
+++ b/ui/app/templates/components/task-subnav.hbs
@@ -0,0 +1,7 @@
+