diff --git a/src/serviceWorker/db.ts b/src/serviceWorker/db.ts
index 4fb8aa5..7e18992 100644
--- a/src/serviceWorker/db.ts
+++ b/src/serviceWorker/db.ts
@@ -18,3 +18,8 @@ export const openDB = () =>
  */
 export const saveBook = async (book: BookT) =>
   (await openDB()).add("Books", book);
+
+/**
+ * Returns all books saved in IndexedDB
+ */
+export const getBooks = async () => (await openDB()).getAll("Books");
diff --git a/src/serviceWorker/fetchHandlers.ts b/src/serviceWorker/fetchHandlers.ts
index d29f578..b21bea7 100644
--- a/src/serviceWorker/fetchHandlers.ts
+++ b/src/serviceWorker/fetchHandlers.ts
@@ -1,4 +1,4 @@
-import { saveBook } from "./db";
+import { getBooks, saveBook } from "./db";
 
 export interface PathHandler {
   /** Path start for handler */
@@ -34,3 +34,12 @@ export const handleBookUpload = async (request: Request) => {
     return new Response(JSON.stringify(err));
   }
 };
+
+/**
+ * Gets all books from database
+ */
+export const handleBooks = async () => {
+  const list = await getBooks();
+
+  return new Response(JSON.stringify(list));
+};
diff --git a/src/serviceWorker/index.ts b/src/serviceWorker/index.ts
index 835c112..48c8189 100644
--- a/src/serviceWorker/index.ts
+++ b/src/serviceWorker/index.ts
@@ -1,6 +1,11 @@
 import { fromCache, precache } from "./cache";
 import { openDB as createDB } from "./db";
-import { handle, handleBookUpload, PathHandler } from "./fetchHandlers";
+import {
+  handle,
+  handleBooks,
+  handleBookUpload,
+  PathHandler,
+} from "./fetchHandlers";
 
 declare const self: ServiceWorkerGlobalScope;
 
@@ -17,6 +22,7 @@ self.addEventListener("fetch", (event) => {
 
   const handlers: PathHandler[] = [
     { path: "/upload", getResponse: () => handleBookUpload(request) },
+    { path: "/list", getResponse: () => handleBooks() },
     { path: "", getResponse: () => fromCache(request) },
   ];