diff --git a/src/main/index.js b/src/main/index.js
index e43a71d7f..67e16acca 100644
--- a/src/main/index.js
+++ b/src/main/index.js
@@ -1,52 +1,63 @@
 // Module imports
-const {app, BrowserWindow, ipcMain, Menu, Tray, globalShortcut} = require('electron');
-const path = require('path');
-const url = require('url');
-const jayson = require('jayson');
-const semver = require('semver');
-const https = require('https');
-const keytar = require('keytar');
+const {
+  app,
+  BrowserWindow,
+  ipcMain,
+  Menu,
+  Tray,
+  globalShortcut,
+} = require("electron");
+const path = require("path");
+const url = require("url");
+const jayson = require("jayson");
+const semver = require("semver");
+const https = require("https");
+const keytar = require("keytar");
 // tree-kill has better cross-platform handling of
 // killing a process.  child-process.kill was unreliable
-const kill = require('tree-kill');
-const child_process = require('child_process');
-const assert = require('assert');
+const kill = require("tree-kill");
+const child_process = require("child_process");
+const assert = require("assert");
+
 const localVersion = app.getVersion();
-const setMenu = require('./menu/main-menu.js');
-export const contextMenu = require('./menu/context-menu');
+const setMenu = require("./menu/main-menu.js");
+export const contextMenu = require("./menu/context-menu");
 
 // Debug configs
-const isDevelopment = process.env.NODE_ENV === 'development';
+const isDevelopment = process.env.NODE_ENV === "development";
 if (isDevelopment) {
-  try
-  {
-    const { default: installExtension, REACT_DEVELOPER_TOOLS, REDUX_DEVTOOLS } = require('electron-devtools-installer');
-    app.on('ready', () => {
+  try {
+    const {
+      default: installExtension,
+      REACT_DEVELOPER_TOOLS,
+      REDUX_DEVTOOLS,
+    } = require("electron-devtools-installer");
+    app.on("ready", () => {
       [REACT_DEVELOPER_TOOLS, REDUX_DEVTOOLS].forEach(extension => {
         installExtension(extension)
-          .then((name) => console.log(`Added Extension: ${name}`))
-          .catch((err) => console.log('An error occurred: ', err));
+          .then(name => console.log(`Added Extension: ${name}`))
+          .catch(err => console.log("An error occurred: ", err));
       });
     });
-  }
-  catch (err)
-  {
-    console.error(err)
+  } catch (err) {
+    console.error(err);
   }
 }
 
 // Misc constants
-const LATEST_RELEASE_API_URL = 'https://api.github.com/repos/lbryio/lbry-app/releases/latest';
-const DAEMON_PATH = process.env.LBRY_DAEMON || path.join(__static, 'daemon/lbrynet-daemon');
+const LATEST_RELEASE_API_URL =
+  "https://api.github.com/repos/lbryio/lbry-app/releases/latest";
+const DAEMON_PATH =
+  process.env.LBRY_DAEMON || path.join(__static, "daemon/lbrynet-daemon");
 const rendererUrl = isDevelopment
   ? `http://localhost:${process.env.ELECTRON_WEBPACK_WDS_PORT}`
   : `file://${__dirname}/index.html`;
 
-let client = jayson.client.http({
-  host: 'localhost',
+const client = jayson.client.http({
+  host: "localhost",
   port: 5279,
-  path: '/',
-  timeout: 1000
+  path: "/",
+  timeout: 1000,
 });
 
 // Keep a global reference of the window object, if you don't, the window will
@@ -84,11 +95,10 @@ function processRequestedUri(uri) {
   //     lbry://channel/#claimid. We remove the slash here as well.
   // On Linux and Mac, we just return the URI as given.
 
-  if (process.platform === 'win32') {
-    return uri.replace(/\/$/, '').replace('/#', '#');
-  } else {
-    return uri;
+  if (process.platform === "win32") {
+    return uri.replace(/\/$/, "").replace("/#", "#");
   }
+  return uri;
 }
 
 /*
@@ -97,69 +107,85 @@ function processRequestedUri(uri) {
  * when no windows are open.
  */
 function openItem(fullPath) {
-    const subprocOptions = {
-      detached: true,
-      stdio: 'ignore',
-    };
+  const subprocOptions = {
+    detached: true,
+    stdio: "ignore",
+  };
 
-    let child;
-    if (process.platform === 'darwin') {
-      child = child_process.spawn('open', [fullPath], subprocOptions);
-    } else if (process.platform === 'linux') {
-      child = child_process.spawn('xdg-open', [fullPath], subprocOptions);
-    } else if (process.platform === 'win32') {
-      child = child_process.spawn(fullPath, Object.assign({}, subprocOptions, {shell: true}));
-    }
+  let child;
+  if (process.platform === "darwin") {
+    child = child_process.spawn("open", [fullPath], subprocOptions);
+  } else if (process.platform === "linux") {
+    child = child_process.spawn("xdg-open", [fullPath], subprocOptions);
+  } else if (process.platform === "win32") {
+    child = child_process.spawn(
+      fullPath,
+      Object.assign({}, subprocOptions, { shell: true })
+    );
+  }
 
-    // Causes child process reference to be garbage collected, allowing main process to exit
-    child.unref();
+  // Causes child process reference to be garbage collected, allowing main process to exit
+  child.unref();
 }
 
 function getPidsForProcessName(name) {
-  if (process.platform === 'win32') {
-    const tasklistOut = child_process.execSync(`tasklist /fi "Imagename eq ${name}.exe" /nh`, {encoding: 'utf8'});
-    if (tasklistOut.startsWith('INFO')) {
+  if (process.platform === "win32") {
+    const tasklistOut = child_process.execSync(
+      `tasklist /fi "Imagename eq ${name}.exe" /nh`,
+      { encoding: "utf8" }
+    );
+    if (tasklistOut.startsWith("INFO")) {
       return [];
-    } else {
-      return tasklistOut.match(/[^\r\n]+/g).map((line) => line.split(/\s+/)[1]); // Second column of every non-empty line
     }
-  } else {
-    const pgrepOut = child_process.spawnSync('pgrep', ['-x', name], {encoding: 'utf8'}).stdout;
-    return pgrepOut.match(/\d+/g);
+    return tasklistOut.match(/[^\r\n]+/g).map(line => line.split(/\s+/)[1]); // Second column of every non-empty line
   }
+  const pgrepOut = child_process.spawnSync("pgrep", ["-x", name], {
+    encoding: "utf8",
+  }).stdout;
+  return pgrepOut.match(/\d+/g);
 }
 
-function createWindow () {
+function createWindow() {
   // Disable renderer process's webSecurity on development to enable CORS.
   win = isDevelopment
-    ? new BrowserWindow({backgroundColor: '#155B4A', minWidth: 800, minHeight: 600, webPreferences: {webSecurity: false}})
-    : new BrowserWindow({backgroundColor: '#155B4A', minWidth: 800, minHeight: 600});
+    ? new BrowserWindow({
+        backgroundColor: "#155B4A",
+        minWidth: 800,
+        minHeight: 600,
+        webPreferences: { webSecurity: false },
+      })
+    : new BrowserWindow({
+        backgroundColor: "#155B4A",
+        minWidth: 800,
+        minHeight: 600,
+      });
 
   win.webContents.session.setUserAgent(`LBRY/${localVersion}`);
 
-  win.maximize()
+  win.maximize();
   if (isDevelopment) {
     win.webContents.openDevTools();
   }
-  win.loadURL(rendererUrl)
-  if (openUri) { // We stored and received a URI that an external app requested before we had a window object
-    win.webContents.on('did-finish-load', () => {
-      win.webContents.send('open-uri-requested', openUri);
+  win.loadURL(rendererUrl);
+  if (openUri) {
+    // We stored and received a URI that an external app requested before we had a window object
+    win.webContents.on("did-finish-load", () => {
+      win.webContents.send("open-uri-requested", openUri);
     });
   }
 
   win.removeAllListeners();
 
-  win.on('close', function(event) {
+  win.on("close", event => {
     if (minimize) {
       event.preventDefault();
       win.hide();
     }
-  })
+  });
 
-  win.on('closed', () => {
-    win = null
-  })
+  win.on("closed", () => {
+    win = null;
+  });
 
   win.on("hide", () => {
     // Checks what to show in the tray icon menu
@@ -176,7 +202,7 @@ function createWindow () {
     if (minimize) updateTray();
 
     // Unregisters Alt+F4 shortcut
-    globalShortcut.unregister('Alt+F4');
+    globalShortcut.unregister("Alt+F4");
   });
 
   win.on("focus", () => {
@@ -184,23 +210,22 @@ function createWindow () {
     if (minimize) updateTray();
 
     // Registers shortcut for closing(quitting) the app
-    globalShortcut.register('Alt+F4', () => safeQuit());
+    globalShortcut.register("Alt+F4", () => safeQuit());
 
-    win.webContents.send('window-is-focused', null);
+    win.webContents.send("window-is-focused", null);
   });
 
   // Menu bar
   win.setAutoHideMenuBar(true);
   win.setMenuBarVisibility(isDevelopment);
   setMenu();
+}
 
-};
-
-function createTray () {
+function createTray() {
   // Minimize to tray logic follows:
   // Set the tray icon
   let iconPath;
-  if (process.platform === 'darwin') {
+  if (process.platform === "darwin") {
     // Using @2x for mac retina screens so the icon isn't blurry
     // file name needs to include "Template" at the end for dark menu bar
     iconPath = path.join(__static, "/img/fav/macTemplate@2x.png");
@@ -211,14 +236,14 @@ function createTray () {
   tray = new Tray(iconPath);
   tray.setToolTip("LBRY App");
   tray.setTitle("LBRY");
-  tray.on('double-click', () => {
-    win.show()
-  })
+  tray.on("double-click", () => {
+    win.show();
+  });
 }
 
 // This needs to be done as for linux the context menu doesn't update automatically(docs)
 function updateTray() {
-  let contextMenu = Menu.buildFromTemplate(getMenuTemplate());
+  const contextMenu = Menu.buildFromTemplate(getMenuTemplate());
   if (tray) {
     tray.setContextMenu(contextMenu);
   } else {
@@ -226,28 +251,26 @@ function updateTray() {
   }
 }
 
-function getMenuTemplate () {
+function getMenuTemplate() {
   return [
     getToggleItem(),
     {
       label: "Quit",
       click: () => safeQuit(),
     },
-  ]
+  ];
 
-  function getToggleItem () {
+  function getToggleItem() {
     if (win.isVisible() && win.isFocused()) {
       return {
-        label: 'Hide LBRY App',
-        click: () => win.hide()
-
-      }
-    } else {
-      return {
-        label: 'Show LBRY App',
-        click: () => win.show()
-      }
+        label: "Hide LBRY App",
+        click: () => win.hide(),
+      };
     }
+    return {
+      label: "Show LBRY App",
+      click: () => win.show(),
+    };
   }
 }
 
@@ -256,20 +279,19 @@ function handleOpenUriRequested(uri) {
     // Window not created yet, so store up requested URI for when it is
     openUri = processRequestedUri(uri);
   } else {
-
     if (win.isMinimized()) {
-      win.restore()
+      win.restore();
     } else if (!win.isVisible()) {
-      win.show()
+      win.show();
     }
 
     win.focus();
-    win.webContents.send('open-uri-requested', processRequestedUri(uri));
+    win.webContents.send("open-uri-requested", processRequestedUri(uri));
   }
 }
 
 function handleDaemonSubprocessExited() {
-  console.log('The daemon has exited.');
+  console.log("The daemon has exited.");
   daemonSubprocess = null;
   if (!daemonStopRequested) {
     // We didn't request to stop the daemon, so display a
@@ -277,27 +299,31 @@ function handleDaemonSubprocessExited() {
     //
     // TODO: maybe it would be better to restart the daemon?
     if (win) {
-      console.log('Did not request daemon stop, so quitting in 5 seconds.');
+      console.log("Did not request daemon stop, so quitting in 5 seconds.");
       win.loadURL(`file://${__static}/warning.html`);
       setTimeout(quitNow, 5000);
     } else {
-      console.log('Did not request daemon stop, so quitting.');
+      console.log("Did not request daemon stop, so quitting.");
       quitNow();
     }
   }
 }
 
 function launchDaemon() {
-  assert(!daemonSubprocess, 'Tried to launch daemon twice');
+  assert(!daemonSubprocess, "Tried to launch daemon twice");
 
-  console.log('Launching daemon:', DAEMON_PATH)
-  daemonSubprocess = child_process.spawn(DAEMON_PATH)
+  console.log("Launching daemon:", DAEMON_PATH);
+  daemonSubprocess = child_process.spawn(DAEMON_PATH);
   // Need to handle the data event instead of attaching to
   // process.stdout because the latter doesn't work. I believe on
   // windows it buffers stdout and we don't get any meaningful output
-  daemonSubprocess.stdout.on('data', (buf) => {console.log(String(buf).trim());});
-  daemonSubprocess.stderr.on('data', (buf) => {console.log(String(buf).trim());});
-  daemonSubprocess.on('exit', handleDaemonSubprocessExited);
+  daemonSubprocess.stdout.on("data", buf => {
+    console.log(String(buf).trim());
+  });
+  daemonSubprocess.stderr.on("data", buf => {
+    console.log(String(buf).trim());
+  });
+  daemonSubprocess.on("exit", handleDaemonSubprocessExited);
 }
 
 /*
@@ -318,7 +344,7 @@ function quitNow() {
   safeQuit();
 }
 
-const isSecondaryInstance = app.makeSingleInstance((argv) => {
+const isSecondaryInstance = app.makeSingleInstance(argv => {
   if (argv.length >= 2) {
     handleOpenUriRequested(argv[1]); // This will handle restoring and focusing the window
   } else if (win) {
@@ -331,25 +357,23 @@ const isSecondaryInstance = app.makeSingleInstance((argv) => {
   }
 });
 
-if (isSecondaryInstance) { // We're not in the original process, so quit
+if (isSecondaryInstance) {
+  // We're not in the original process, so quit
   quitNow();
 }
 
 function launchDaemonIfNotRunning() {
   // Check if the daemon is already running. If we get
   // an error its because its not running
-  console.log('Checking for lbrynet daemon');
-  client.request(
-    'status', [],
-    function (err, res) {
-      if (err) {
-        console.log('lbrynet daemon needs to be launched')
-        launchDaemon();
-      } else {
-        console.log('lbrynet daemon is already running')
-      }
+  console.log("Checking for lbrynet daemon");
+  client.request("status", [], (err, res) => {
+    if (err) {
+      console.log("lbrynet daemon needs to be launched");
+      launchDaemon();
+    } else {
+      console.log("lbrynet daemon is already running");
     }
-  );
+  });
 }
 
 /*
@@ -358,21 +382,31 @@ function launchDaemonIfNotRunning() {
  * tries to force kill them.
  */
 function forceKillAllDaemonsAndQuit() {
-  console.log('Attempting to force kill any running lbrynet-daemon instances...');
+  console.log(
+    "Attempting to force kill any running lbrynet-daemon instances..."
+  );
 
-  const daemonPids = getPidsForProcessName('lbrynet-daemon');
+  const daemonPids = getPidsForProcessName("lbrynet-daemon");
   if (!daemonPids) {
-    console.log('No lbrynet-daemon found running.');
+    console.log("No lbrynet-daemon found running.");
     quitNow();
   } else {
-    console.log(`Found ${daemonPids.length} running daemon instances. Attempting to force kill...`);
+    console.log(
+      `Found ${
+        daemonPids.length
+      } running daemon instances. Attempting to force kill...`
+    );
 
     for (const pid of daemonPids) {
       let daemonKillAttemptsComplete = 0;
-      kill(pid, 'SIGKILL', (err) => {
+      kill(pid, "SIGKILL", err => {
         daemonKillAttemptsComplete++;
         if (err) {
-          console.log(`Failed to force kill daemon task with pid ${pid}. Error message: ${err.message}`);
+          console.log(
+            `Failed to force kill daemon task with pid ${pid}. Error message: ${
+              err.message
+            }`
+          );
         } else {
           console.log(`Force killed daemon task with pid ${pid}.`);
         }
@@ -384,15 +418,15 @@ function forceKillAllDaemonsAndQuit() {
   }
 }
 
-app.setAsDefaultProtocolClient('lbry');
+app.setAsDefaultProtocolClient("lbry");
 
-app.on('ready', function() {
+app.on("ready", () => {
   launchDaemonIfNotRunning();
   if (process.platform === "linux") {
-    checkLinuxTraySupport( err => {
+    checkLinuxTraySupport(err => {
       if (!err) createTray();
       else minimize = false;
-    })
+    });
   } else {
     createTray();
   }
@@ -400,36 +434,35 @@ app.on('ready', function() {
 });
 
 // Quit when all windows are closed.
-app.on('window-all-closed', () => {
+app.on("window-all-closed", () => {
   // On macOS it is common for applications and their menu bar
   // to stay active until the user quits explicitly with Cmd + Q
-  if (process.platform !== 'darwin') {
-    app.quit()
+  if (process.platform !== "darwin") {
+    app.quit();
   }
-})
+});
 
-
-app.on('before-quit', (event) => {
+app.on("before-quit", event => {
   if (!readyToQuit) {
     // We need to shutdown the daemon before we're ready to actually quit. This
     // event will be triggered re-entrantly once preparation is done.
     event.preventDefault();
     shutdownDaemonAndQuit();
   } else {
-    console.log('Quitting.')
+    console.log("Quitting.");
   }
 });
 
-app.on('activate', () => {
+app.on("activate", () => {
   // On macOS it's common to re-create a window in the app when the
   // dock icon is clicked and there are no other windows open.
   if (win === null) {
-    createWindow()
+    createWindow();
   }
 });
 
-if (process.platform === 'darwin') {
-  app.on('open-url', (event, uri) => {
+if (process.platform === "darwin") {
+  app.on("open-url", (event, uri) => {
     handleOpenUriRequested(uri);
   });
 } else if (process.argv.length >= 2) {
@@ -440,14 +473,18 @@ if (process.platform === 'darwin') {
 // then calls quitNow() to quit for real.
 function shutdownDaemonAndQuit(evenIfNotStartedByApp = false) {
   function doShutdown() {
-    console.log('Shutting down daemon');
+    console.log("Shutting down daemon");
     daemonStopRequested = true;
-    client.request('daemon_stop', [], (err, res) => {
+    client.request("daemon_stop", [], (err, res) => {
       if (err) {
-        console.log(`received error when stopping lbrynet-daemon. Error message: ${err.message}\n`);
-        console.log('You will need to manually kill the daemon.');
+        console.log(
+          `received error when stopping lbrynet-daemon. Error message: ${
+            err.message
+          }\n`
+        );
+        console.log("You will need to manually kill the daemon.");
       } else {
-        console.log('Successfully stopped daemon via RPC call.')
+        console.log("Successfully stopped daemon via RPC call.");
         quitNow();
       }
     });
@@ -456,7 +493,7 @@ function shutdownDaemonAndQuit(evenIfNotStartedByApp = false) {
   if (daemonSubprocess) {
     doShutdown();
   } else if (!evenIfNotStartedByApp) {
-    console.log('Not killing lbrynet-daemon because app did not start it');
+    console.log("Not killing lbrynet-daemon because app did not start it");
     quitNow();
   } else {
     doShutdown();
@@ -467,24 +504,27 @@ function shutdownDaemonAndQuit(evenIfNotStartedByApp = false) {
 }
 
 // Taken from webtorrent-desktop
-function checkLinuxTraySupport (cb) {
+function checkLinuxTraySupport(cb) {
   // Check that we're on Ubuntu (or another debian system) and that we have
   // libappindicator1.
-  child_process.exec('dpkg --get-selections libappindicator1', function (err, stdout) {
-    if (err) return cb(err)
-    // Unfortunately there's no cleaner way, as far as I can tell, to check
-    // whether a debian package is installed:
-    if (stdout.endsWith('\tinstall\n')) {
-      cb(null)
-    } else {
-      cb(new Error('debian package not installed'))
+  child_process.exec(
+    "dpkg --get-selections libappindicator1",
+    (err, stdout) => {
+      if (err) return cb(err);
+      // Unfortunately there's no cleaner way, as far as I can tell, to check
+      // whether a debian package is installed:
+      if (stdout.endsWith("\tinstall\n")) {
+        cb(null);
+      } else {
+        cb(new Error("debian package not installed"));
+      }
     }
-  })
+  );
 }
 
-ipcMain.on('upgrade', (event, installerPath) => {
-  app.on('quit', () => {
-    console.log('Launching upgrade installer at', installerPath);
+ipcMain.on("upgrade", (event, installerPath) => {
+  app.on("quit", () => {
+    console.log("Launching upgrade installer at", installerPath);
     // This gets triggered called after *all* other quit-related events, so
     // we'll only get here if we're fully prepared and quitting for real.
     openItem(installerPath);
@@ -497,58 +537,77 @@ ipcMain.on('upgrade', (event, installerPath) => {
   shutdownDaemonAndQuit(true);
   // wait for daemon to shut down before upgrading
   // what to do if no shutdown in a long time?
-  console.log('Update downloaded to', installerPath);
-  console.log('The app will close, and you will be prompted to install the latest version of LBRY.');
-  console.log('After the install is complete, please reopen the app.');
+  console.log("Update downloaded to", installerPath);
+  console.log(
+    "The app will close, and you will be prompted to install the latest version of LBRY."
+  );
+  console.log("After the install is complete, please reopen the app.");
 });
 
-ipcMain.on('version-info-requested', () => {
+ipcMain.on("version-info-requested", () => {
   function formatRc(ver) {
     // Adds dash if needed to make RC suffix semver friendly
-    return ver.replace(/([^-])rc/, '$1-rc');
+    return ver.replace(/([^-])rc/, "$1-rc");
   }
 
-  let result = '';
+  let result = "";
   const opts = {
     headers: {
-      'User-Agent': `LBRY/${localVersion}`,
-    }
+      "User-Agent": `LBRY/${localVersion}`,
+    },
   };
 
-  const req = https.get(Object.assign(opts, url.parse(LATEST_RELEASE_API_URL)), (res) => {
-    res.on('data', (data) => {
-      result += data;
-    });
-    res.on('end', () => {
-      const tagName = JSON.parse(result).tag_name;
-      const [_, remoteVersion] = tagName.match(/^v([\d.]+(?:-?rc\d+)?)$/);
-      if (!remoteVersion) {
-        if (win) {
-          win.webContents.send('version-info-received', null);
+  const req = https.get(
+    Object.assign(opts, url.parse(LATEST_RELEASE_API_URL)),
+    res => {
+      res.on("data", data => {
+        result += data;
+      });
+      res.on("end", () => {
+        const tagName = JSON.parse(result).tag_name;
+        const [_, remoteVersion] = tagName.match(/^v([\d.]+(?:-?rc\d+)?)$/);
+        if (!remoteVersion) {
+          if (win) {
+            win.webContents.send("version-info-received", null);
+          }
+        } else {
+          const upgradeAvailable = semver.gt(
+            formatRc(remoteVersion),
+            formatRc(localVersion)
+          );
+          if (win) {
+            win.webContents.send("version-info-received", {
+              remoteVersion,
+              localVersion,
+              upgradeAvailable,
+            });
+          }
         }
-      } else {
-        const upgradeAvailable = semver.gt(formatRc(remoteVersion), formatRc(localVersion));
-        if (win) {
-          win.webContents.send('version-info-received', {remoteVersion, localVersion, upgradeAvailable});
-        }
-      }
-    })
-  });
+      });
+    }
+  );
 
-  req.on('error', (err) => {
-    console.log('Failed to get current version from GitHub. Error:', err);
+  req.on("error", err => {
+    console.log("Failed to get current version from GitHub. Error:", err);
     if (win) {
-      win.webContents.send('version-info-received', null);
+      win.webContents.send("version-info-received", null);
     }
   });
 });
 
-ipcMain.on('get-auth-token', (event) => {
+ipcMain.on("get-auth-token", event => {
   keytar.getPassword("LBRY", "auth_token").then(token => {
-    event.sender.send('auth-token-response', token ? token.toString().trim() : null)
+    event.sender.send(
+      "auth-token-response",
+      token ? token.toString().trim() : null
+    );
   });
 });
 
-ipcMain.on('set-auth-token', (event, token) => {
-  keytar.setPassword("LBRY", "auth_token", token ? token.toString().trim() : null);
+ipcMain.on("set-auth-token", (event, token) => {
+  keytar.setPassword(
+    "LBRY",
+    "auth_token",
+    token ? token.toString().trim() : null
+  );
 });
diff --git a/src/main/menu/context-menu.js b/src/main/menu/context-menu.js
index f38de5d1c..26ed0f7de 100644
--- a/src/main/menu/context-menu.js
+++ b/src/main/menu/context-menu.js
@@ -1,34 +1,33 @@
-const {Menu} = require('electron');
-const electron = require('electron');
+const { Menu } = require("electron");
+const electron = require("electron");
+
 const app = electron.app;
 
 const contextMenuTemplate = [
   {
-    role: 'cut',
+    role: "cut",
   },
   {
-    role: 'copy',
+    role: "copy",
   },
   {
-    role: 'paste',
+    role: "paste",
   },
 ];
 
 module.exports = {
   showContextMenu(win, posX, posY, showDevItems) {
-    let template = contextMenuTemplate.slice();
+    const template = contextMenuTemplate.slice();
     if (showDevItems) {
       template.push({
-        type: 'separator',
+        type: "separator",
+      });
+      template.push({
+        label: "Inspect Element",
+        click() {
+          win.inspectElement(posX, posY);
+        },
       });
-      template.push(
-        {
-          label: 'Inspect Element',
-          click() {
-            win.inspectElement(posX, posY);
-          }
-        }
-      );
     }
 
     Menu.buildFromTemplate(template).popup(win);
diff --git a/src/main/menu/main-menu.js b/src/main/menu/main-menu.js
index 7b5854d75..c26bfd118 100644
--- a/src/main/menu/main-menu.js
+++ b/src/main/menu/main-menu.js
@@ -1,136 +1,136 @@
-const { app, shell, Menu } = require('electron');
-const { safeQuit } = require('../index.js');
+const { app, shell, Menu } = require("electron");
+const { safeQuit } = require("../index.js");
 
 const baseTemplate = [
   {
-    label: 'File',
+    label: "File",
     submenu: [
       {
-        label: 'Quit',
+        label: "Quit",
         accelerator: "CommandOrControl+Q",
         click: () => safeQuit(),
       },
-    ]
+    ],
   },
   {
-    label: 'Edit',
+    label: "Edit",
     submenu: [
       {
-        role: 'undo',
+        role: "undo",
       },
       {
-        role: 'redo',
+        role: "redo",
       },
       {
-        type: 'separator',
+        type: "separator",
       },
       {
-        role: 'cut',
+        role: "cut",
       },
       {
-        role: 'copy',
+        role: "copy",
       },
       {
-        role: 'paste',
+        role: "paste",
       },
       {
-        role: 'selectall',
+        role: "selectall",
       },
-    ]
+    ],
   },
   {
-    label: 'View',
+    label: "View",
     submenu: [
       {
-        role: 'reload'
+        role: "reload",
       },
       {
-        label: 'Developer',
+        label: "Developer",
         submenu: [
           {
-            role: 'forcereload'
+            role: "forcereload",
           },
           {
-            role: 'toggledevtools'
+            role: "toggledevtools",
           },
-        ]
+        ],
       },
       {
-        type: 'separator'
+        type: "separator",
       },
       {
-        role: 'togglefullscreen'
-      }
-    ]
+        role: "togglefullscreen",
+      },
+    ],
   },
   {
-    role: 'help',
+    role: "help",
     submenu: [
       {
-        label: 'Learn More',
+        label: "Learn More",
         click(item, focusedWindow) {
           if (focusedWindow) {
-            focusedWindow.webContents.send('open-menu', '/help');
+            focusedWindow.webContents.send("open-menu", "/help");
           }
-        }
+        },
       },
       {
-        label: 'Frequently Asked Questions',
-        click(item, focusedWindow){
-         shell.openExternal('https://lbry.io/faq')
-      }
+        label: "Frequently Asked Questions",
+        click(item, focusedWindow) {
+          shell.openExternal("https://lbry.io/faq");
+        },
       },
       {
-        type: 'separator'
+        type: "separator",
       },
       {
-        label: 'Report Issue',
-        click(item, focusedWindow){
-          shell.openExternal('https://lbry.io/faq/contributing#report-a-bug');
-        }
+        label: "Report Issue",
+        click(item, focusedWindow) {
+          shell.openExternal("https://lbry.io/faq/contributing#report-a-bug");
+        },
       },
       {
-        type: 'separator'
+        type: "separator",
       },
       {
-        label: 'Developer API Guide',
-        click(item, focusedWindow){
-          shell.openExternal('https://lbry.io/quickstart')
-        }
+        label: "Developer API Guide",
+        click(item, focusedWindow) {
+          shell.openExternal("https://lbry.io/quickstart");
+        },
       },
-    ]
-  }
+    ],
+  },
 ];
 
 const macOSAppMenuTemplate = {
   label: app.getName(),
   submenu: [
     {
-      role: 'about',
+      role: "about",
     },
     {
-      type: 'separator',
+      type: "separator",
     },
     {
-      role: 'hide',
+      role: "hide",
     },
     {
-      role: 'hideothers',
+      role: "hideothers",
     },
     {
-      role: 'unhide',
+      role: "unhide",
     },
     {
-      type: 'separator',
+      type: "separator",
     },
     {
-      role: 'quit',
+      role: "quit",
     },
-  ]
+  ],
 };
 
 module.exports = () => {
-    let template = baseTemplate.slice();
-    (process.platform === 'darwin') && template.unshift(macOSAppMenuTemplate);
-    Menu.setApplicationMenu(Menu.buildFromTemplate(template));
+  const template = baseTemplate.slice();
+  process.platform === "darwin" && template.unshift(macOSAppMenuTemplate);
+  Menu.setApplicationMenu(Menu.buildFromTemplate(template));
 };
diff --git a/src/renderer/app.js b/src/renderer/app.js
index e249810f9..fb64e5a77 100644
--- a/src/renderer/app.js
+++ b/src/renderer/app.js
@@ -6,18 +6,19 @@ const config = {
   ...require(`./config/${env}`),
 };
 const i18n = require("y18n")({
-  directory: remote.app.getAppPath() + "/locales",
+  directory: `${remote.app.getAppPath()}/locales`,
   updateFiles: false,
   locale: "en",
 });
+
 const logs = [];
 const app = {
-  env: env,
-  config: config,
-  store: store,
-  i18n: i18n,
-  logs: logs,
-  log: function(message) {
+  env,
+  config,
+  store,
+  i18n,
+  logs,
+  log(message) {
     logs.push(message);
   },
 };
diff --git a/src/renderer/component/common.js b/src/renderer/component/common.js
index 2be86b00b..681fc8ab1 100644
--- a/src/renderer/component/common.js
+++ b/src/renderer/component/common.js
@@ -3,7 +3,7 @@ import PropTypes from "prop-types";
 import { formatCredits, formatFullPrice } from "util/formatCredits";
 import lbry from "../lbry.js";
 
-//component/icon.js
+// component/icon.js
 export class Icon extends React.PureComponent {
   static propTypes = {
     icon: PropTypes.string.isRequired,
@@ -13,12 +13,9 @@ export class Icon extends React.PureComponent {
 
   render() {
     const { fixed, className } = this.props;
-    const spanClassName =
-      "icon " +
-      ("fixed" in this.props ? "icon-fixed-width " : "") +
-      this.props.icon +
-      " " +
-      (this.props.className || "");
+    const spanClassName = `icon ${
+      "fixed" in this.props ? "icon-fixed-width " : ""
+    }${this.props.icon} ${this.props.className || ""}`;
     return <span className={spanClassName} />;
   }
 }
@@ -90,14 +87,14 @@ export class CreditAmount extends React.PureComponent {
     const { amount, precision, showFullPrice } = this.props;
 
     let formattedAmount;
-    let fullPrice = formatFullPrice(amount, 2);
+    const fullPrice = formatFullPrice(amount, 2);
 
     if (showFullPrice) {
       formattedAmount = fullPrice;
     } else {
       formattedAmount =
         amount > 0 && amount < minimumRenderableAmount
-          ? "<" + minimumRenderableAmount
+          ? `<${minimumRenderableAmount}`
           : formatCredits(amount, precision);
     }
 
@@ -111,12 +108,12 @@ export class CreditAmount extends React.PureComponent {
             ? this.props.label
             : parseFloat(amount) == 1 ? __("credit") : __("credits");
 
-        amountText = formattedAmount + " " + label;
+        amountText = `${formattedAmount} ${label}`;
       } else {
         amountText = formattedAmount;
       }
       if (this.props.showPlus && amount > 0) {
-        amountText = "+" + amountText;
+        amountText = `+${amountText}`;
       }
     }
 
diff --git a/src/renderer/component/file-selector.js b/src/renderer/component/file-selector.js
index adc481782..5b5f06cf6 100644
--- a/src/renderer/component/file-selector.js
+++ b/src/renderer/component/file-selector.js
@@ -2,6 +2,7 @@ import React from "react";
 import PropTypes from "prop-types";
 
 const { remote } = require("electron");
+
 class FileSelector extends React.PureComponent {
   static propTypes = {
     type: PropTypes.oneOf(["file", "directory"]),
@@ -40,7 +41,7 @@ class FileSelector extends React.PureComponent {
 
         const path = paths[0];
         this.setState({
-          path: path,
+          path,
         });
         if (this.props.onFileChosen) {
           this.props.onFileChosen(path);
diff --git a/src/renderer/component/fileActions/index.js b/src/renderer/component/fileActions/index.js
index 53030756f..71589679b 100644
--- a/src/renderer/component/fileActions/index.js
+++ b/src/renderer/component/fileActions/index.js
@@ -8,7 +8,7 @@ import FileActions from "./view";
 
 const select = (state, props) => ({
   fileInfo: makeSelectFileInfoForUri(props.uri)(state),
-  /*availability check is disabled due to poor performance, TBD if it dies forever or requires daemon fix*/
+  /* availability check is disabled due to poor performance, TBD if it dies forever or requires daemon fix */
   costInfo: makeSelectCostInfoForUri(props.uri)(state),
   claimIsMine: makeSelectClaimIsMine(props.uri)(state),
 });
diff --git a/src/renderer/component/fileDownloadLink/index.js b/src/renderer/component/fileDownloadLink/index.js
index d7988c067..9ac3982a4 100644
--- a/src/renderer/component/fileDownloadLink/index.js
+++ b/src/renderer/component/fileDownloadLink/index.js
@@ -13,7 +13,7 @@ import FileDownloadLink from "./view";
 
 const select = (state, props) => ({
   fileInfo: makeSelectFileInfoForUri(props.uri)(state),
-  /*availability check is disabled due to poor performance, TBD if it dies forever or requires daemon fix*/
+  /* availability check is disabled due to poor performance, TBD if it dies forever or requires daemon fix */
   downloading: makeSelectDownloadingForUri(props.uri)(state),
   costInfo: makeSelectCostInfoForUri(props.uri)(state),
   loading: makeSelectLoadingForUri(props.uri)(state),
diff --git a/src/renderer/component/form.js b/src/renderer/component/form.js
index 820ae251c..229668ffe 100644
--- a/src/renderer/component/form.js
+++ b/src/renderer/component/form.js
@@ -8,7 +8,7 @@ let formFieldCounter = 0;
 export const formFieldNestedLabelTypes = ["radio", "checkbox"];
 
 export function formFieldId() {
-  return "form-field-" + ++formFieldCounter;
+  return `form-field-${++formFieldCounter}`;
 }
 
 export class Form extends React.PureComponent {
@@ -129,21 +129,19 @@ export class FormRow extends React.PureComponent {
 
     return (
       <div
-        className={"form-row" + (this.state.isFocus ? " form-row--focus" : "")}
+        className={`form-row${this.state.isFocus ? " form-row--focus" : ""}`}
       >
         {this.props.label && !renderLabelInFormField ? (
           <div
-            className={
-              "form-row__label-row " +
-              (this.props.labelPrefix ? "form-row__label-row--prefix" : "")
-            }
+            className={`form-row__label-row ${
+              this.props.labelPrefix ? "form-row__label-row--prefix" : ""
+            }`}
           >
             <label
               htmlFor={elementId}
-              className={
-                "form-field__label " +
-                (this.state.isError ? "form-field__label--error" : " ")
-              }
+              className={`form-field__label ${
+                this.state.isError ? "form-field__label--error" : " "
+              }`}
             >
               {this.props.label}
             </label>
@@ -178,16 +176,14 @@ export class FormRow extends React.PureComponent {
 export const Submit = props => {
   const { title, label, icon, disabled } = props;
 
-  const className =
-    "button-block" +
+  const className = `${"button-block" +
     " button-primary" +
     " button-set-item" +
-    " button--submit" +
-    (disabled ? " disabled" : "");
+    " button--submit"}${disabled ? " disabled" : ""}`;
 
   const content = (
     <span className="button__content">
-      {"icon" in props ? <Icon icon={icon} fixed={true} /> : null}
+      {"icon" in props ? <Icon icon={icon} fixed /> : null}
       {label ? <span className="button-label">{label}</span> : null}
     </span>
   );
diff --git a/src/renderer/component/load_screen.js b/src/renderer/component/load_screen.js
index 788e42cf1..c730954d7 100644
--- a/src/renderer/component/load_screen.js
+++ b/src/renderer/component/load_screen.js
@@ -37,15 +37,14 @@ class LoadScreen extends React.PureComponent {
             ) : (
               <span>
                 <Icon icon="icon-warning" />
-                {" " + this.props.message}
+                {` ${this.props.message}`}
               </span>
             )}
           </h3>
           <span
-            className={
-              "load-screen__details " +
-              (this.props.isWarning ? "load-screen__details--warning" : "")
-            }
+            className={`load-screen__details ${
+              this.props.isWarning ? "load-screen__details--warning" : ""
+            }`}
           >
             {this.props.details}
           </span>
diff --git a/src/renderer/component/menu.js b/src/renderer/component/menu.js
index d1b533077..7ce07897c 100644
--- a/src/renderer/component/menu.js
+++ b/src/renderer/component/menu.js
@@ -16,7 +16,7 @@ export class DropDownMenuItem extends React.PureComponent {
   };
 
   render() {
-    var icon = this.props.icon ? <Icon icon={this.props.icon} fixed /> : null;
+    const icon = this.props.icon ? <Icon icon={this.props.icon} fixed /> : null;
 
     return (
       <a
@@ -70,7 +70,7 @@ export class DropDownMenu extends React.PureComponent {
     });
   }
 
-  /*this will force "this" to always be the class, even when passed to an event listener*/
+  /* this will force "this" to always be the class, even when passed to an event listener */
   handleWindowClick = e => {
     if (
       this.state.menuOpen &&
diff --git a/src/renderer/component/splash/index.js b/src/renderer/component/splash/index.js
index 82712fa15..1337d9516 100644
--- a/src/renderer/component/splash/index.js
+++ b/src/renderer/component/splash/index.js
@@ -8,12 +8,10 @@ import {
 import { doCheckDaemonVersion } from "redux/actions/app";
 import SplashScreen from "./view";
 
-const select = state => {
-  return {
-    modal: selectCurrentModal(state),
-    daemonVersionMatched: selectDaemonVersionMatched(state),
-  };
-};
+const select = state => ({
+  modal: selectCurrentModal(state),
+  daemonVersionMatched: selectDaemonVersionMatched(state),
+});
 
 const perform = dispatch => ({
   checkDaemonVersion: () => dispatch(doCheckDaemonVersion()),
diff --git a/src/renderer/component/subscribeButton/index.js b/src/renderer/component/subscribeButton/index.js
index d79e53052..ead3c461b 100644
--- a/src/renderer/component/subscribeButton/index.js
+++ b/src/renderer/component/subscribeButton/index.js
@@ -3,7 +3,8 @@ import {
   doChannelSubscribe,
   doChannelUnsubscribe,
 } from "redux/actions/subscriptions";
-import { selectSubscriptions } from "redux/selectors/subscriptions";;
+import { selectSubscriptions } from "redux/selectors/subscriptions";
+
 import SubscribeButton from "./view";
 
 const select = (state, props) => ({
@@ -12,5 +13,5 @@ const select = (state, props) => ({
 
 export default connect(select, {
   doChannelSubscribe,
-  doChannelUnsubscribe
+  doChannelUnsubscribe,
 })(SubscribeButton);
diff --git a/src/renderer/component/tooltip.js b/src/renderer/component/tooltip.js
index 6f1437405..a1fa85349 100644
--- a/src/renderer/component/tooltip.js
+++ b/src/renderer/component/tooltip.js
@@ -29,7 +29,7 @@ export class ToolTip extends React.PureComponent {
 
   render() {
     return (
-      <span className={"tooltip " + (this.props.className || "")}>
+      <span className={`tooltip ${this.props.className || ""}`}>
         <a
           className="tooltip__link"
           onClick={() => {
@@ -39,9 +39,7 @@ export class ToolTip extends React.PureComponent {
           {this.props.label}
         </a>
         <div
-          className={
-            "tooltip__body " + (this.state.showTooltip ? "" : " hidden")
-          }
+          className={`tooltip__body ${this.state.showTooltip ? "" : " hidden"}`}
           onMouseOut={() => {
             this.handleTooltipMouseOut();
           }}
diff --git a/src/renderer/constants/action_types.js b/src/renderer/constants/action_types.js
index f9e8eb836..594aa716a 100644
--- a/src/renderer/constants/action_types.js
+++ b/src/renderer/constants/action_types.js
@@ -141,7 +141,7 @@ export const CLAIM_REWARD_FAILURE = "CLAIM_REWARD_FAILURE";
 export const CLAIM_REWARD_CLEAR_ERROR = "CLAIM_REWARD_CLEAR_ERROR";
 export const FETCH_REWARD_CONTENT_COMPLETED = "FETCH_REWARD_CONTENT_COMPLETED";
 
-//Language
+// Language
 export const DOWNLOAD_LANGUAGE_SUCCEEDED = "DOWNLOAD_LANGUAGE_SUCCEEDED";
 export const DOWNLOAD_LANGUAGE_FAILED = "DOWNLOAD_LANGUAGE_FAILED";
 
diff --git a/src/renderer/constants/settings.js b/src/renderer/constants/settings.js
index c6c0ebd86..e8db70e32 100644
--- a/src/renderer/constants/settings.js
+++ b/src/renderer/constants/settings.js
@@ -1,6 +1,6 @@
-/*hardcoded names still exist for these in reducers/settings.js - only discovered when debugging*/
-/*Many settings are stored in the localStorage by their name -
-    be careful about changing the value of a settings constant, as doing so can invalidate existing settings*/
+/* hardcoded names still exist for these in reducers/settings.js - only discovered when debugging */
+/* Many settings are stored in the localStorage by their name -
+    be careful about changing the value of a settings constant, as doing so can invalidate existing settings */
 export const CREDIT_REQUIRED_ACKNOWLEDGED = "credit_required_acknowledged";
 export const NEW_USER_ACKNOWLEDGED = "welcome_acknowledged";
 export const EMAIL_COLLECTION_ACKNOWLEDGED = "email_collection_acknowledged";
diff --git a/src/renderer/extractLocals.js b/src/renderer/extractLocals.js
index b4437dbf5..328e53294 100644
--- a/src/renderer/extractLocals.js
+++ b/src/renderer/extractLocals.js
@@ -1,18 +1,18 @@
-var extract = require("i18n-extract");
+const extract = require("i18n-extract");
 const fs = require("fs");
 
-var dir = __dirname + "/../../dist/locales";
-var path = dir + "/en.json";
+const dir = `${__dirname}/../../dist/locales`;
+const path = `${dir}/en.json`;
 
 if (!fs.existsSync(dir)) {
   fs.mkdirSync(dir);
 }
 
-fs.writeFile(path, "{}", "utf8", function(err) {
+fs.writeFile(path, "{}", "utf8", err => {
   if (err) {
     return console.log(err);
   }
-  var enLocale = require(path);
+  const enLocale = require(path);
 
   const keys = extract.extractFromFiles(["js/**/*.{js,jsx}"], {
     marker: "__",
@@ -22,21 +22,21 @@ fs.writeFile(path, "{}", "utf8", function(err) {
   reports = reports.concat(extract.findMissing(enLocale, keys));
 
   if (reports.length > 0) {
-    fs.readFile(path, "utf8", function readFileCallback(err, data) {
+    fs.readFile(path, "utf8", (err, data) => {
       if (err) {
         console.log(err);
       } else {
         localeObj = JSON.parse(data);
 
-        for (var i = 0; i < reports.length; i++) {
+        for (let i = 0; i < reports.length; i++) {
           // no need to care for other types than MISSING because starting file will always be empty
           if (reports[i].type === "MISSING") {
             localeObj[reports[i].key] = reports[i].key;
           }
         }
 
-        var json = JSON.stringify(localeObj, null, "\t"); //convert it back to json-string
-        fs.writeFile(path, json, "utf8", function callback(err) {
+        const json = JSON.stringify(localeObj, null, "\t"); // convert it back to json-string
+        fs.writeFile(path, json, "utf8", err => {
           if (err) {
             throw err;
           }
diff --git a/src/renderer/index.js b/src/renderer/index.js
index 155278bda..66d5784e8 100644
--- a/src/renderer/index.js
+++ b/src/renderer/index.js
@@ -15,12 +15,15 @@ import "scss/all.scss";
 
 const env = process.env.NODE_ENV || "production";
 const { remote, ipcRenderer, shell } = require("electron");
+
 const contextMenu = remote.require("./main.js").contextMenu;
 const app = require("./app");
 
 // Workaround for https://github.com/electron-userland/electron-webpack/issues/52
-if (process.env.NODE_ENV !== 'development') {
-  window.staticResourcesPath = require("path").join(remote.app.getAppPath(), "../static").replace(/\\/g, "\\\\");
+if (process.env.NODE_ENV !== "development") {
+  window.staticResourcesPath = require("path")
+    .join(remote.app.getAppPath(), "../static")
+    .replace(/\\/g, "\\\\");
 } else {
   window.staticResourcesPath = "";
 }
@@ -56,12 +59,12 @@ ipcRenderer.on("window-is-focused", (event, data) => {
 });
 
 document.addEventListener("click", event => {
-  var target = event.target;
+  let target = event.target;
   while (target && target !== document) {
     if (target.matches("a") || target.matches("button")) {
       // TODO: Look into using accessiblity labels (this would also make the app more accessible)
-      let hrefParts = window.location.href.split("#");
-      let element = target.title || (target.text && target.text.trim());
+      const hrefParts = window.location.href.split("#");
+      const element = target.title || (target.text && target.text.trim());
       if (element) {
         amplitude.getInstance().logEvent("CLICK", {
           target: element,
@@ -89,7 +92,7 @@ document.addEventListener("click", event => {
 
 const initialState = app.store.getState();
 
-var init = function() {
+const init = function() {
   app.store.dispatch(doDownloadLanguages());
 
   function onDaemonReady() {
@@ -99,8 +102,8 @@ var init = function() {
         "0b130efdcbdbf86ec2f7f9eff354033e",
         info.lbry_id,
         null,
-        function() {
-          window.sessionStorage.setItem("loaded", "y"); //once we've made it here once per session, we don't need to show splash again
+        () => {
+          window.sessionStorage.setItem("loaded", "y"); // once we've made it here once per session, we don't need to show splash again
           app.store.dispatch(doDaemonReady());
 
           ReactDOM.render(
@@ -110,7 +113,7 @@ var init = function() {
                 <SnackBar />
               </div>
             </Provider>,
-            document.getElementById('app')
+            document.getElementById("app")
           );
         }
       );
@@ -124,7 +127,7 @@ var init = function() {
       <Provider store={store}>
         <SplashScreen onReadyToLaunch={onDaemonReady} />
       </Provider>,
-      document.getElementById('app')
+      document.getElementById("app")
     );
   }
 };
diff --git a/src/renderer/jsonrpc.js b/src/renderer/jsonrpc.js
index 00e85f30c..bf812d7ed 100644
--- a/src/renderer/jsonrpc.js
+++ b/src/renderer/jsonrpc.js
@@ -12,8 +12,10 @@ jsonrpc.call = function(
   function checkAndParse(response) {
     if (response.status >= 200 && response.status < 300) {
       return response.json();
-    } else {
-      return response.json().then(json => {
+    }
+    return response
+      .json()
+      .then(json => {
         let error;
         if (json.error) {
           error = new Error(json.error);
@@ -21,10 +23,10 @@ jsonrpc.call = function(
           error = new Error("Protocol error with unknown response signature");
         }
         return Promise.reject(error);
-      }).catch(e => {
+      })
+      .catch(e => {
         console.error(e);
       });
-    }
   }
 
   function makeRequest(url, options) {
@@ -35,9 +37,7 @@ jsonrpc.call = function(
 
       if (timeout) {
         const e = new Error(__("Protocol request timed out"));
-        setTimeout(() => {
-          return reject(e);
-        }, timeout);
+        setTimeout(() => reject(e), timeout);
       }
     });
   }
@@ -48,8 +48,8 @@ jsonrpc.call = function(
     method: "POST",
     body: JSON.stringify({
       jsonrpc: "2.0",
-      method: method,
-      params: params,
+      method,
+      params,
       id: counter,
     }),
   };
@@ -70,11 +70,11 @@ jsonrpc.call = function(
         return errorCallback(error);
       }
 
-      var errorEvent = new CustomEvent("unhandledError", {
+      const errorEvent = new CustomEvent("unhandledError", {
         detail: {
-          connectionString: connectionString,
-          method: method,
-          params: params,
+          connectionString,
+          method,
+          params,
           code: error.code,
           message: error.message || error,
           data: error.data,
@@ -87,11 +87,11 @@ jsonrpc.call = function(
         return connectFailedCallback(e);
       }
 
-      var errorEvent = new CustomEvent("unhandledError", {
+      const errorEvent = new CustomEvent("unhandledError", {
         detail: {
-          connectionString: connectionString,
-          method: method,
-          params: params,
+          connectionString,
+          method,
+          params,
           code: e.response && e.response.status,
           message: __("Connection to API server failed"),
         },
diff --git a/src/renderer/lbry.js b/src/renderer/lbry.js
index 838b3697c..82d701f8a 100644
--- a/src/renderer/lbry.js
+++ b/src/renderer/lbry.js
@@ -39,17 +39,17 @@ function savePendingPublish({ name, channel_name }) {
   if (channel_name) {
     uri = lbryuri.build({ name: channel_name, path: name }, false);
   } else {
-    uri = lbryuri.build({ name: name }, false);
+    uri = lbryuri.build({ name }, false);
   }
   ++pendingId;
   const pendingPublishes = getLocal("pendingPublishes") || [];
   const newPendingPublish = {
     name,
     channel_name,
-    claim_id: "pending-" + pendingId,
-    txid: "pending-" + pendingId,
+    claim_id: `pending-${pendingId}`,
+    txid: `pending-${pendingId}`,
     nout: 0,
-    outpoint: "pending-" + pendingId + ":0",
+    outpoint: `pending-${pendingId}:0`,
     time: Date.now(),
   };
   setLocal("pendingPublishes", [...pendingPublishes, newPendingPublish]);
@@ -119,7 +119,7 @@ function pendingPublishToDummyFileInfo({ name, outpoint, claim_id }) {
   return { name, outpoint, claim_id, metadata: null };
 }
 
-//core
+// core
 lbry._connectPromise = null;
 lbry.connect = function() {
   if (lbry._connectPromise === null) {
@@ -203,19 +203,19 @@ lbry.publishDeprecated = function(
 };
 
 lbry.imagePath = function(file) {
-  return staticResourcesPath + "/img/" + file;
+  return `${staticResourcesPath}/img/${file}`;
 };
 
 lbry.getMediaType = function(contentType, fileName) {
   if (contentType) {
     return /^[^/]+/.exec(contentType)[0];
   } else if (fileName) {
-    var dotIndex = fileName.lastIndexOf(".");
+    const dotIndex = fileName.lastIndexOf(".");
     if (dotIndex == -1) {
       return "unknown";
     }
 
-    var ext = fileName.substr(dotIndex + 1);
+    const ext = fileName.substr(dotIndex + 1);
     if (/^mp4|m4v|webm|flv|f4v|ogv$/i.test(ext)) {
       return "video";
     } else if (/^mp3|m4a|aac|wav|flac|ogg|opus$/i.test(ext)) {
@@ -224,12 +224,10 @@ lbry.getMediaType = function(contentType, fileName) {
       /^html|htm|xml|pdf|odf|doc|docx|md|markdown|txt|epub|org$/i.test(ext)
     ) {
       return "document";
-    } else {
-      return "unknown";
     }
-  } else {
     return "unknown";
   }
+  return "unknown";
 };
 
 lbry.getAppVersionInfo = function() {
@@ -273,7 +271,7 @@ lbry.file_list = function(params = {}) {
       fileInfos => {
         removePendingPublishIfNeeded({ name, channel_name, outpoint });
 
-        //if a naked file_list call, append the pending file infos
+        // if a naked file_list call, append the pending file infos
         if (!name && !channel_name && !outpoint) {
           const dummyFileInfos = lbry
             .getPendingPublishes()
@@ -295,11 +293,11 @@ lbry.claim_list_mine = function(params = {}) {
       "claim_list_mine",
       params,
       claims => {
-        for (let { name, channel_name, txid, nout } of claims) {
+        for (const { name, channel_name, txid, nout } of claims) {
           removePendingPublishIfNeeded({
             name,
             channel_name,
-            outpoint: txid + ":" + nout,
+            outpoint: `${txid}:${nout}`,
           });
         }
 
@@ -318,7 +316,7 @@ lbry.resolve = function(params = {}) {
     apiCall(
       "resolve",
       params,
-      function(data) {
+      data => {
         if ("uri" in params) {
           // If only a single URI was requested, don't nest the results in an object
           resolve(data && data[params.uri] ? data[params.uri] : {});
@@ -332,7 +330,7 @@ lbry.resolve = function(params = {}) {
 };
 
 lbry = new Proxy(lbry, {
-  get: function(target, name) {
+  get(target, name) {
     if (name in target) {
       return target[name];
     }
diff --git a/src/renderer/lbryio.js b/src/renderer/lbryio.js
index ba7a105cd..430dd7f36 100644
--- a/src/renderer/lbryio.js
+++ b/src/renderer/lbryio.js
@@ -48,18 +48,17 @@ lbryio.call = function(resource, action, params = {}, method = "get") {
   function checkAndParse(response) {
     if (response.status >= 200 && response.status < 300) {
       return response.json();
-    } else {
-      return response.json().then(json => {
-        let error;
-        if (json.error) {
-          error = new Error(json.error);
-        } else {
-          error = new Error("Unknown API error signature");
-        }
-        error.response = response; //this is primarily a hack used in actions/user.js
-        return Promise.reject(error);
-      });
     }
+    return response.json().then(json => {
+      let error;
+      if (json.error) {
+        error = new Error(json.error);
+      } else {
+        error = new Error("Unknown API error signature");
+      }
+      error.response = response; // this is primarily a hack used in actions/user.js
+      return Promise.reject(error);
+    });
   }
 
   function makeRequest(url, options) {
@@ -92,8 +91,8 @@ lbryio.call = function(resource, action, params = {}, method = "get") {
 
 lbryio._authToken = null;
 
-lbryio.getAuthToken = () => {
-  return new Promise((resolve, reject) => {
+lbryio.getAuthToken = () =>
+  new Promise((resolve, reject) => {
     if (lbryio._authToken) {
       resolve(lbryio._authToken);
     } else {
@@ -104,16 +103,13 @@ lbryio.getAuthToken = () => {
       ipcRenderer.send("get-auth-token");
     }
   });
-};
 
 lbryio.setAuthToken = token => {
   lbryio._authToken = token ? token.toString().trim() : null;
   ipcRenderer.send("set-auth-token", token);
 };
 
-lbryio.getCurrentUser = () => {
-  return lbryio.call("user", "me");
-};
+lbryio.getCurrentUser = () => lbryio.call("user", "me");
 
 lbryio.authenticate = function() {
   if (!lbryio.enabled) {
@@ -141,12 +137,8 @@ lbryio.authenticate = function() {
           // check that token works
           return lbryio
             .getCurrentUser()
-            .then(() => {
-              return true;
-            })
-            .catch(() => {
-              return false;
-            });
+            .then(() => true)
+            .catch(() => false);
         })
         .then(isTokenValid => {
           if (isTokenValid) {
@@ -155,8 +147,8 @@ lbryio.authenticate = function() {
 
           return lbry
             .status()
-            .then(status => {
-              return lbryio.call(
+            .then(status =>
+              lbryio.call(
                 "user",
                 "new",
                 {
@@ -165,8 +157,8 @@ lbryio.authenticate = function() {
                   app_id: status.installation_id,
                 },
                 "post"
-              );
-            })
+              )
+            )
             .then(response => {
               if (!response.auth_token) {
                 throw new Error(__("auth_token is missing from response"));
@@ -182,10 +174,9 @@ lbryio.authenticate = function() {
   return lbryio._authenticationPromise;
 };
 
-lbryio.getStripeToken = () => {
-  return CONNECTION_STRING.startsWith("http://localhost:")
+lbryio.getStripeToken = () =>
+  CONNECTION_STRING.startsWith("http://localhost:")
     ? "pk_test_NoL1JWL7i1ipfhVId5KfDZgo"
     : "pk_live_e8M4dRNnCCbmpZzduEUZBgJO";
-};
 
 export default lbryio;
diff --git a/src/renderer/lbryuri.js b/src/renderer/lbryuri.js
index 430cc1c30..7d4be33c0 100644
--- a/src/renderer/lbryuri.js
+++ b/src/renderer/lbryuri.js
@@ -103,7 +103,7 @@ lbryuri.parse = function(uri, requireProto = false) {
   if (
     claimId &&
     (claimId.length > CLAIM_ID_MAX_LEN || !claimId.match(/^[0-9a-f]+$/)) &&
-    !claimId.match(/^pending/) //ought to be dropped when savePendingPublish drops hack
+    !claimId.match(/^pending/) // ought to be dropped when savePendingPublish drops hack
   ) {
     throw new Error(__(`Invalid claim ID %s.`, claimId));
   }
@@ -166,7 +166,7 @@ lbryuri.build = function(uriObj, includeProto = true, allowExtraProps = false) {
   if (channelName) {
     const channelNameFormatted = channelName.startsWith("@")
       ? channelName
-      : "@" + channelName;
+      : `@${channelName}`;
     if (!name) {
       name = channelNameFormatted;
     } else if (name !== channelNameFormatted) {
diff --git a/src/renderer/modal/modal.js b/src/renderer/modal/modal.js
index a139698e1..a89f9025b 100644
--- a/src/renderer/modal/modal.js
+++ b/src/renderer/modal/modal.js
@@ -30,7 +30,7 @@ export class Modal extends React.PureComponent {
       <ReactModal
         onCloseRequested={this.props.onAborted || this.props.onConfirmed}
         {...this.props}
-        className={(this.props.className || "") + " modal"}
+        className={`${this.props.className || ""} modal`}
         overlayClassName={
           ![null, undefined, ""].includes(this.props.overlayClassName)
             ? this.props.overlayClassName
diff --git a/src/renderer/modal/modalCreditIntro/index.js b/src/renderer/modal/modalCreditIntro/index.js
index b212a3900..28e49c19d 100644
--- a/src/renderer/modal/modalCreditIntro/index.js
+++ b/src/renderer/modal/modalCreditIntro/index.js
@@ -24,18 +24,16 @@ const select = (state, props) => {
   };
 };
 
-const perform = dispatch => () => {
-  return {
-    addBalance: () => {
-      dispatch(doSetClientSetting(settings.CREDIT_REQUIRED_ACKNOWLEDGED, true));
-      dispatch(doNavigate("/getcredits"));
-      dispatch(doCloseModal());
-    },
-    closeModal: () => {
-      dispatch(doSetClientSetting(settings.CREDIT_REQUIRED_ACKNOWLEDGED, true));
-      dispatch(doCloseModal());
-    },
-  };
-};
+const perform = dispatch => () => ({
+  addBalance: () => {
+    dispatch(doSetClientSetting(settings.CREDIT_REQUIRED_ACKNOWLEDGED, true));
+    dispatch(doNavigate("/getcredits"));
+    dispatch(doCloseModal());
+  },
+  closeModal: () => {
+    dispatch(doSetClientSetting(settings.CREDIT_REQUIRED_ACKNOWLEDGED, true));
+    dispatch(doCloseModal());
+  },
+});
 
 export default connect(select, perform)(ModalCreditIntro);
diff --git a/src/renderer/page/report.js b/src/renderer/page/report.js
index 9bb766aef..489a52d0a 100644
--- a/src/renderer/page/report.js
+++ b/src/renderer/page/report.js
@@ -71,10 +71,9 @@ class ReportPage extends React.Component {
                 onClick={event => {
                   this.submitMessage(event);
                 }}
-                className={
-                  "button-block button-primary " +
-                  (this.state.submitting ? "disabled" : "")
-                }
+                className={`button-block button-primary ${
+                  this.state.submitting ? "disabled" : ""
+                }`}
               >
                 {this.state.submitting
                   ? __("Submitting...")
diff --git a/src/renderer/page/rewards/index.js b/src/renderer/page/rewards/index.js
index 84262e7c2..dd00a2c40 100644
--- a/src/renderer/page/rewards/index.js
+++ b/src/renderer/page/rewards/index.js
@@ -9,13 +9,11 @@ import { doAuthNavigate, doNavigate } from "redux/actions/navigation";
 import { doRewardList } from "redux/actions/rewards";
 import RewardsPage from "./view";
 
-const select = (state, props) => {
-  return {
-    fetching: selectFetchingRewards(state),
-    rewards: selectUnclaimedRewards(state),
-    user: selectUser(state),
-  };
-};
+const select = (state, props) => ({
+  fetching: selectFetchingRewards(state),
+  rewards: selectUnclaimedRewards(state),
+  user: selectUser(state),
+});
 
 const perform = dispatch => ({
   fetchRewards: () => dispatch(doRewardList()),
diff --git a/src/renderer/redux/actions/app.js b/src/renderer/redux/actions/app.js
index 46b2e5fa1..031b129f1 100644
--- a/src/renderer/redux/actions/app.js
+++ b/src/renderer/redux/actions/app.js
@@ -18,9 +18,11 @@ import { selectCurrentModal } from "redux/selectors/app";
 
 const { remote, ipcRenderer, shell } = require("electron");
 const path = require("path");
+
 const { download } = remote.require("electron-dl");
 const fs = remote.require("fs");
 const { lbrySettings: config } = require("package.json");
+
 const CHECK_UPGRADE_INTERVAL = 10 * 60 * 1000;
 
 export function doOpenModal(modal, modalProps = {}) {
@@ -43,7 +45,7 @@ export function doUpdateDownloadProgress(percent) {
   return {
     type: types.UPGRADE_DOWNLOAD_PROGRESSED,
     data: {
-      percent: percent,
+      percent,
     },
   };
 }
@@ -72,7 +74,7 @@ export function doDownloadUpgrade() {
       ),
       upgradeFilename = selectUpgradeFilename(state);
 
-    let options = {
+    const options = {
       onProgress: p => dispatch(doUpdateDownloadProgress(Math.round(p * 100))),
       directory: dir,
     };
diff --git a/src/renderer/redux/actions/content.js b/src/renderer/redux/actions/content.js
index cb0b3d766..10c24791a 100644
--- a/src/renderer/redux/actions/content.js
+++ b/src/renderer/redux/actions/content.js
@@ -42,9 +42,9 @@ export function doResolveUris(uris) {
       data: { uris },
     });
 
-    let resolveInfo = {};
+    const resolveInfo = {};
     lbry.resolve({ uris: urisToResolve }).then(result => {
-      for (let [uri, uriResolveInfo] of Object.entries(result)) {
+      for (const [uri, uriResolveInfo] of Object.entries(result)) {
         const fallbackResolveInfo = {
           claim: null,
           claims_in_channel: null,
@@ -80,7 +80,7 @@ export function doFetchFeaturedUris() {
 
     const success = ({ Uris }) => {
       let urisToResolve = [];
-      for (let category in Uris) {
+      for (const category in Uris) {
         urisToResolve = [...urisToResolve, ...Uris[category]];
       }
 
@@ -144,7 +144,7 @@ export function doUpdateLoadStatus(uri, outpoint) {
 
     lbry
       .file_list({
-        outpoint: outpoint,
+        outpoint,
         full_status: true,
       })
       .then(([fileInfo]) => {
@@ -239,7 +239,7 @@ export function doDownloadFile(uri, streamInfo) {
 
     lbryio
       .call("file", "view", {
-        uri: uri,
+        uri,
         outpoint: streamInfo.outpoint,
         claim_id: streamInfo.claim_id,
       })
@@ -288,7 +288,9 @@ export function doLoadVideo(uri) {
         });
         dispatch(
           doAlertError(
-            `Failed to download ${uri}, please try again. If this problem persists, visit https://lbry.io/faq/support for support.`
+            `Failed to download ${
+              uri
+            }, please try again. If this problem persists, visit https://lbry.io/faq/support for support.`
           )
         );
       });
@@ -511,7 +513,7 @@ export function doAbandonClaim(txid, nout) {
     dispatch({
       type: types.ABANDON_CLAIM_STARTED,
       data: {
-        claimId: claimId,
+        claimId,
       },
     });
 
@@ -524,7 +526,7 @@ export function doAbandonClaim(txid, nout) {
         dispatch({
           type: types.ABANDON_CLAIM_SUCCEEDED,
           data: {
-            claimId: claimId,
+            claimId,
           },
         });
         dispatch(doResolveUri(lbryuri.build({ name, claimId })));
@@ -536,8 +538,8 @@ export function doAbandonClaim(txid, nout) {
 
     lbry
       .claim_abandon({
-        txid: txid,
-        nout: nout,
+        txid,
+        nout,
       })
       .then(successCallback, errorCallback);
   };
diff --git a/src/renderer/redux/actions/file_info.js b/src/renderer/redux/actions/file_info.js
index 2226fd639..68743bd05 100644
--- a/src/renderer/redux/actions/file_info.js
+++ b/src/renderer/redux/actions/file_info.js
@@ -34,17 +34,15 @@ export function doFetchFileInfo(uri) {
         },
       });
 
-      lbry
-        .file_list({ outpoint: outpoint, full_status: true })
-        .then(fileInfos => {
-          dispatch({
-            type: types.FETCH_FILE_INFO_COMPLETED,
-            data: {
-              outpoint,
-              fileInfo: fileInfos && fileInfos.length ? fileInfos[0] : null,
-            },
-          });
+      lbry.file_list({ outpoint, full_status: true }).then(fileInfos => {
+        dispatch({
+          type: types.FETCH_FILE_INFO_COMPLETED,
+          data: {
+            outpoint,
+            fileInfo: fileInfos && fileInfos.length ? fileInfos[0] : null,
+          },
         });
+      });
     }
   };
 }
@@ -91,7 +89,7 @@ export function doDeleteFile(outpoint, deleteFromComputer, abandonClaim) {
     const state = getState();
 
     lbry.file_delete({
-      outpoint: outpoint,
+      outpoint,
       delete_from_download_dir: deleteFromComputer,
     });
 
diff --git a/src/renderer/redux/actions/navigation.js b/src/renderer/redux/actions/navigation.js
index a4cbca615..89028458c 100644
--- a/src/renderer/redux/actions/navigation.js
+++ b/src/renderer/redux/actions/navigation.js
@@ -19,7 +19,7 @@ export function doNavigate(path, params = {}, options = {}) {
 
     let url = path;
     if (params && Object.values(params).length) {
-      url += "?" + toQueryString(params);
+      url += `?${toQueryString(params)}`;
     }
 
     const scrollY = options.scrollY;
diff --git a/src/renderer/redux/actions/rewards.js b/src/renderer/redux/actions/rewards.js
index 4ed2332f3..67200a63e 100644
--- a/src/renderer/redux/actions/rewards.js
+++ b/src/renderer/redux/actions/rewards.js
@@ -39,7 +39,7 @@ export function doClaimRewardType(rewardType) {
       userIsRewardApproved = selectUserIsRewardApproved(state);
 
     if (!reward || reward.transaction_id) {
-      //already claimed or doesn't exist, do nothing
+      // already claimed or doesn't exist, do nothing
       return;
     }
 
diff --git a/src/renderer/redux/actions/search.js b/src/renderer/redux/actions/search.js
index 80c269882..aa881f50d 100644
--- a/src/renderer/redux/actions/search.js
+++ b/src/renderer/redux/actions/search.js
@@ -24,17 +24,18 @@ export function doSearch(rawQuery) {
     });
 
     if (page != "search") {
-      dispatch(doNavigate("search", { query: query }));
+      dispatch(doNavigate("search", { query }));
     } else {
-      fetch("https://lighthouse.lbry.io/search?s=" + query)
-        .then(response => {
-          return response.status === 200
-            ? Promise.resolve(response.json())
-            : Promise.reject(new Error(response.statusText));
-        })
+      fetch(`https://lighthouse.lbry.io/search?s=${query}`)
+        .then(
+          response =>
+            response.status === 200
+              ? Promise.resolve(response.json())
+              : Promise.reject(new Error(response.statusText))
+        )
         .then(data => {
-          let uris = [];
-          let actions = [];
+          const uris = [];
+          const actions = [];
 
           data.forEach(result => {
             const uri = lbryuri.build({
diff --git a/src/renderer/redux/actions/settings.js b/src/renderer/redux/actions/settings.js
index 06b82e9ee..ba8b5ebcd 100644
--- a/src/renderer/redux/actions/settings.js
+++ b/src/renderer/redux/actions/settings.js
@@ -22,7 +22,7 @@ export function doFetchDaemonSettings() {
 
 export function doSetDaemonSetting(key, value) {
   return function(dispatch, getState) {
-    let settings = {};
+    const settings = {};
     settings[key] = value;
     lbry.settings_set(settings).then(settings);
     lbry.settings_get().then(settings => {
@@ -49,19 +49,13 @@ export function doSetClientSetting(key, value) {
 export function doGetThemes() {
   return function(dispatch, getState) {
     const themes = ["light", "dark"];
-    dispatch(
-      doSetClientSetting(
-        settings.THEMES,
-        themes
-      )
-    );
-
+    dispatch(doSetClientSetting(settings.THEMES, themes));
   };
 }
 
 export function doDownloadLanguage(langFile) {
   return function(dispatch, getState) {
-    const destinationPath = app.i18n.directory + "/" + langFile;
+    const destinationPath = `${app.i18n.directory}/${langFile}`;
     const language = langFile.replace(".json", "");
     const req = http.get(
       {
@@ -82,7 +76,7 @@ export function doDownloadLanguage(langFile) {
             // push to our local list
             dispatch({
               type: types.DOWNLOAD_LANGUAGE_SUCCEEDED,
-              data: { language: language },
+              data: { language },
             });
           });
 
@@ -102,7 +96,7 @@ export function doDownloadLanguage(langFile) {
       });
     };
 
-    req.setTimeout(30000, function() {
+    req.setTimeout(30000, () => {
       req.abort();
     });
 
@@ -114,7 +108,7 @@ export function doDownloadLanguage(langFile) {
 
 export function doDownloadLanguages() {
   return function(dispatch, getState) {
-    //temporarily disable i18n so I can get a working build out -- Jeremy
+    // temporarily disable i18n so I can get a working build out -- Jeremy
     return;
 
     if (!fs.existsSync(app.i18n.directory)) {
@@ -124,11 +118,10 @@ export function doDownloadLanguages() {
     function checkStatus(response) {
       if (response.status >= 200 && response.status < 300) {
         return response;
-      } else {
-        throw new Error(
-          __("The list of available languages could not be retrieved.")
-        );
       }
+      throw new Error(
+        __("The list of available languages could not be retrieved.")
+      );
     }
 
     function parseJSON(response) {
diff --git a/src/renderer/redux/actions/shape_shift.js b/src/renderer/redux/actions/shape_shift.js
index 8f3e683f6..520dff9cb 100644
--- a/src/renderer/redux/actions/shape_shift.js
+++ b/src/renderer/redux/actions/shape_shift.js
@@ -106,7 +106,7 @@ export const createShapeShift = (
 
   const pair = `${originCoin.toLowerCase()}_lbc`;
   const options = {
-    returnAddress: returnAddress,
+    returnAddress,
   };
 
   dispatch({ type: types.PREPARE_SHAPE_SHIFT_START });
diff --git a/src/renderer/redux/actions/subscriptions.js b/src/renderer/redux/actions/subscriptions.js
index 6ec76f2bd..6963b95bf 100644
--- a/src/renderer/redux/actions/subscriptions.js
+++ b/src/renderer/redux/actions/subscriptions.js
@@ -1,26 +1,27 @@
 // @flow
 import * as actions from "constants/action_types";
-import type { Subscription, Action, Dispatch } from "redux/reducers/subscriptions";
+import type {
+  Subscription,
+  Action,
+  Dispatch,
+} from "redux/reducers/subscriptions";
 import lbry from "lbry";
 
 export const doChannelSubscribe = (subscription: Subscription) => (
   dispatch: Dispatch
-) => {
-  return dispatch({
+) =>
+  dispatch({
     type: actions.CHANNEL_SUBSCRIBE,
     data: subscription,
   });
-};
 
 export const doChannelUnsubscribe = (subscription: Subscription) => (
   dispatch: Dispatch
-) => {
-  return dispatch({
+) =>
+  dispatch({
     type: actions.CHANNEL_UNSUBSCRIBE,
     data: subscription,
   });
-};
 
-export const setHasFetchedSubscriptions = () => (dispatch: Dispatch) => {
-  return dispatch({ type: actions.HAS_FETCHED_SUBSCRIPTIONS })
-}
+export const setHasFetchedSubscriptions = () => (dispatch: Dispatch) =>
+  dispatch({ type: actions.HAS_FETCHED_SUBSCRIPTIONS });
diff --git a/src/renderer/redux/actions/user.js b/src/renderer/redux/actions/user.js
index 7111369e8..3fb7f8f43 100644
--- a/src/renderer/redux/actions/user.js
+++ b/src/renderer/redux/actions/user.js
@@ -59,7 +59,7 @@ export function doUserEmailNew(email) {
   return function(dispatch, getState) {
     dispatch({
       type: types.USER_EMAIL_NEW_STARTED,
-      email: email,
+      email,
     });
 
     const success = () => {
@@ -68,30 +68,32 @@ export function doUserEmailNew(email) {
         data: { email },
       });
       dispatch(doUserFetch());
-    }
+    };
 
     const failure = error => {
       dispatch({
         type: types.USER_EMAIL_NEW_FAILURE,
         data: { error },
       });
-    }
+    };
 
     lbryio
       .call(
         "user_email",
         "new",
-        { email: email, send_verification_email: true },
+        { email, send_verification_email: true },
         "post"
       )
       .catch(error => {
         if (error.response && error.response.status == 409) {
-          return lbryio.call(
-            "user_email",
-            "resend_token",
-            { email: email, only_if_expired: true },
-            "post"
-          ).then(success, failure);
+          return lbryio
+            .call(
+              "user_email",
+              "resend_token",
+              { email, only_if_expired: true },
+              "post"
+            )
+            .then(success, failure);
         }
         throw error;
       })
@@ -113,7 +115,7 @@ export function doUserEmailVerify(verificationToken) {
       .call(
         "user_email",
         "confirm",
-        { verification_token: verificationToken, email: email },
+        { verification_token: verificationToken, email },
         "post"
       )
       .then(userEmail => {
@@ -125,7 +127,7 @@ export function doUserEmailVerify(verificationToken) {
           dispatch(doClaimRewardType(rewards.TYPE_CONFIRM_EMAIL)),
             dispatch(doUserFetch());
         } else {
-          throw new Error("Your email is still not verified."); //shouldn't happen
+          throw new Error("Your email is still not verified."); // shouldn't happen
         }
       })
       .catch(error => {
@@ -156,7 +158,7 @@ export function doUserIdentityVerify(stripeToken) {
         } else {
           throw new Error(
             "Your identity is still not verified. This should not happen."
-          ); //shouldn't happen
+          ); // shouldn't happen
         }
       })
       .catch(error => {
@@ -214,7 +216,7 @@ export function doUserInviteNew(email) {
     });
 
     lbryio
-      .call("user", "invite", { email: email }, "post")
+      .call("user", "invite", { email }, "post")
       .then(invite => {
         dispatch({
           type: types.USER_INVITE_NEW_SUCCESS,
diff --git a/src/renderer/redux/actions/wallet.js b/src/renderer/redux/actions/wallet.js
index 5db24d939..0d8d44429 100644
--- a/src/renderer/redux/actions/wallet.js
+++ b/src/renderer/redux/actions/wallet.js
@@ -11,14 +11,14 @@ import * as modals from "constants/modal_types";
 
 export function doUpdateBalance() {
   return function(dispatch, getState) {
-    lbry.wallet_balance().then(balance => {
-      return dispatch({
+    lbry.wallet_balance().then(balance =>
+      dispatch({
         type: types.UPDATE_BALANCE,
         data: {
-          balance: balance,
+          balance,
         },
-      });
-    });
+      })
+    );
   };
 }
 
@@ -35,14 +35,16 @@ export function doFetchTransactions(fetch_tip_info = true) {
       type: types.FETCH_TRANSACTIONS_STARTED,
     });
 
-    lbry.transaction_list({ include_tip_info: fetch_tip_info }).then(results => {
-      dispatch({
-        type: types.FETCH_TRANSACTIONS_COMPLETED,
-        data: {
-          transactions: results,
-        },
+    lbry
+      .transaction_list({ include_tip_info: fetch_tip_info })
+      .then(results => {
+        dispatch({
+          type: types.FETCH_TRANSACTIONS_COMPLETED,
+          data: {
+            transactions: results,
+          },
+        });
       });
-    });
   };
 }
 
@@ -63,7 +65,7 @@ export function doGetNewAddress() {
       type: types.GET_NEW_ADDRESS_STARTED,
     });
 
-    lbry.wallet_new_address().then(function(address) {
+    lbry.wallet_new_address().then(address => {
       localStorage.setItem("wallet_address", address);
       dispatch({
         type: types.GET_NEW_ADDRESS_COMPLETED,
@@ -201,8 +203,8 @@ export function doSendSupport(amount, claim_id, uri) {
 
     lbry
       .wallet_send({
-        claim_id: claim_id,
-        amount: amount,
+        claim_id,
+        amount,
       })
       .then(successCallback, errorCallback);
   };
diff --git a/src/renderer/redux/reducers/claims.js b/src/renderer/redux/reducers/claims.js
index 270790d8f..60f5e042b 100644
--- a/src/renderer/redux/reducers/claims.js
+++ b/src/renderer/redux/reducers/claims.js
@@ -9,7 +9,7 @@ reducers[types.RESOLVE_URIS_COMPLETED] = function(state, action) {
   const byUri = Object.assign({}, state.claimsByUri);
   const byId = Object.assign({}, state.byId);
 
-  for (let [uri, { certificate, claim }] of Object.entries(resolveInfo)) {
+  for (const [uri, { certificate, claim }] of Object.entries(resolveInfo)) {
     if (claim) {
       byId[claim.claim_id] = claim;
       byUri[uri] = claim.claim_id;
@@ -51,12 +51,11 @@ reducers[types.FETCH_CLAIM_LIST_MINE_COMPLETED] = function(state, action) {
     .forEach(claim => {
       byId[claim.claim_id] = claim;
 
-      const pending = Object.values(pendingById).find(pendingClaim => {
-        return (
+      const pending = Object.values(pendingById).find(
+        pendingClaim =>
           pendingClaim.name == claim.name &&
           pendingClaim.channel_name == claim.channel_name
-        );
-      });
+      );
 
       if (pending) {
         delete pendingById[pending.claim_id];
@@ -115,7 +114,7 @@ reducers[types.FETCH_CHANNEL_CLAIMS_COMPLETED] = function(state, action) {
 
   const claimsByChannel = Object.assign({}, state.claimsByChannel);
   const byChannel = Object.assign({}, claimsByChannel[uri]);
-  const allClaimIds = new Set(byChannel["all"]);
+  const allClaimIds = new Set(byChannel.all);
   const currentPageClaimIds = [];
   const byId = Object.assign({}, state.byId);
   const fetchingChannelClaims = Object.assign({}, state.fetchingChannelClaims);
@@ -128,7 +127,7 @@ reducers[types.FETCH_CHANNEL_CLAIMS_COMPLETED] = function(state, action) {
     });
   }
 
-  byChannel["all"] = allClaimIds;
+  byChannel.all = allClaimIds;
   byChannel[page] = currentPageClaimIds;
   claimsByChannel[uri] = byChannel;
   delete fetchingChannelClaims[uri];
diff --git a/src/renderer/redux/reducers/content.js b/src/renderer/redux/reducers/content.js
index 0d2b8cd09..9c3dabac5 100644
--- a/src/renderer/redux/reducers/content.js
+++ b/src/renderer/redux/reducers/content.js
@@ -32,12 +32,12 @@ reducers[types.FETCH_REWARD_CONTENT_COMPLETED] = function(state, action) {
 };
 
 reducers[types.RESOLVE_URIS_STARTED] = function(state, action) {
-  let { uris } = action.data;
+  const { uris } = action.data;
 
   const oldResolving = state.resolvingUris || [];
   const newResolving = Object.assign([], oldResolving);
 
-  for (let uri of uris) {
+  for (const uri of uris) {
     if (!newResolving.includes(uri)) {
       newResolving.push(uri);
     }
@@ -52,7 +52,7 @@ reducers[types.RESOLVE_URIS_COMPLETED] = function(state, action) {
   const { resolveInfo } = action.data;
   const channelClaimCounts = Object.assign({}, state.channelClaimCounts);
 
-  for (let [uri, { certificate, claims_in_channel }] of Object.entries(
+  for (const [uri, { certificate, claims_in_channel }] of Object.entries(
     resolveInfo
   )) {
     if (certificate && !isNaN(claims_in_channel)) {
@@ -66,11 +66,10 @@ reducers[types.RESOLVE_URIS_COMPLETED] = function(state, action) {
   });
 };
 
-reducers[types.SET_PLAYING_URI] = (state, action) => {
-  return Object.assign({}, state, {
+reducers[types.SET_PLAYING_URI] = (state, action) =>
+  Object.assign({}, state, {
     playingUri: action.data.uri,
   });
-};
 
 reducers[types.FETCH_CHANNEL_CLAIM_COUNT_COMPLETED] = function(state, action) {
   const channelClaimCounts = Object.assign({}, state.channelClaimCounts);
diff --git a/src/renderer/redux/reducers/navigation.js b/src/renderer/redux/reducers/navigation.js
index 2a4fbabdd..990657df7 100644
--- a/src/renderer/redux/reducers/navigation.js
+++ b/src/renderer/redux/reducers/navigation.js
@@ -4,7 +4,7 @@ import { parseQueryParams } from "util/query_params";
 const currentPath = () => {
   const hash = document.location.hash;
   if (hash !== "") return hash.replace(/^#/, "");
-  else return "/discover";
+  return "/discover";
 };
 
 const reducers = {};
@@ -34,7 +34,7 @@ reducers[types.HISTORY_NAVIGATE] = (state, action) => {
   const { stack, index } = state;
   const { url: path, index: newIndex, scrollY } = action.data;
 
-  let newState = {
+  const newState = {
     currentPath: path,
   };
 
@@ -46,7 +46,7 @@ reducers[types.HISTORY_NAVIGATE] = (state, action) => {
     newState.index = newState.stack.length - 1;
   }
 
-  history.replaceState(null, null, "#" + path); //this allows currentPath() to retain the URL on reload
+  history.replaceState(null, null, `#${path}`); // this allows currentPath() to retain the URL on reload
   return Object.assign({}, state, newState);
 };
 
@@ -61,7 +61,7 @@ reducers[types.WINDOW_SCROLLED] = (state, action) => {
       }
       return {
         ...stackItem,
-        scrollY: scrollY,
+        scrollY,
       };
     }),
   });
diff --git a/src/renderer/redux/reducers/rewards.js b/src/renderer/redux/reducers/rewards.js
index 42279d01d..77d20064e 100644
--- a/src/renderer/redux/reducers/rewards.js
+++ b/src/renderer/redux/reducers/rewards.js
@@ -3,7 +3,7 @@ import * as types from "constants/action_types";
 const reducers = {};
 const defaultState = {
   fetching: false,
-  claimedRewardsById: {}, //id => reward
+  claimedRewardsById: {}, // id => reward
   unclaimedRewardsByType: {},
   claimPendingByType: {},
   claimErrorsByType: {},
@@ -64,7 +64,10 @@ reducers[types.CLAIM_REWARD_STARTED] = function(state, action) {
 reducers[types.CLAIM_REWARD_SUCCESS] = function(state, action) {
   const { reward } = action.data;
 
-  let unclaimedRewardsByType = Object.assign({}, state.unclaimedRewardsByType);
+  const unclaimedRewardsByType = Object.assign(
+    {},
+    state.unclaimedRewardsByType
+  );
   const existingReward = unclaimedRewardsByType[reward.reward_type];
   delete state.unclaimedRewardsByType[reward.reward_type];
 
@@ -73,7 +76,7 @@ reducers[types.CLAIM_REWARD_SUCCESS] = function(state, action) {
     reward_description: existingReward.reward_description,
   });
 
-  let claimedRewardsById = Object.assign({}, state.claimedRewardsById);
+  const claimedRewardsById = Object.assign({}, state.claimedRewardsById);
   claimedRewardsById[reward.id] = newReward;
 
   const newState = Object.assign({}, state, {
diff --git a/src/renderer/redux/reducers/settings.js b/src/renderer/redux/reducers/settings.js
index 99d46a87d..28413c504 100644
--- a/src/renderer/redux/reducers/settings.js
+++ b/src/renderer/redux/reducers/settings.js
@@ -3,7 +3,7 @@ import * as settings from "constants/settings";
 import LANGUAGES from "constants/languages";
 
 function getLocalStorageSetting(setting, fallback) {
-  var localStorageVal = localStorage.getItem("setting_" + setting);
+  const localStorageVal = localStorage.getItem(`setting_${setting}`);
   return localStorageVal === null ? fallback : JSON.parse(localStorageVal);
 }
 
@@ -27,7 +27,7 @@ const defaultState = {
     email_collection_acknowledged: getLocalStorageSetting(
       settings.EMAIL_COLLECTION_ACKNOWLEDGED
     ),
-    credit_required_acknowledged: false, //this needs to be re-acknowledged every run
+    credit_required_acknowledged: false, // this needs to be re-acknowledged every run
     language: getLocalStorageSetting(settings.LANGUAGE, "en"),
     theme: getLocalStorageSetting(settings.THEME, "light"),
     themes: getLocalStorageSetting(settings.THEMES, []),
@@ -47,8 +47,8 @@ reducers[types.CLIENT_SETTING_CHANGED] = function(state, action) {
 
   clientSettings[key] = value;
 
-  //this technically probably shouldn't happen here, and should be fixed when we're no longer using localStorage at all for persistent app state
-  localStorage.setItem("setting_" + key, JSON.stringify(value));
+  // this technically probably shouldn't happen here, and should be fixed when we're no longer using localStorage at all for persistent app state
+  localStorage.setItem(`setting_${key}`, JSON.stringify(value));
 
   return Object.assign({}, state, {
     clientSettings,
@@ -62,8 +62,9 @@ reducers[types.DOWNLOAD_LANGUAGE_SUCCEEDED] = function(state, action) {
   const langCode = language.substring(0, 2);
 
   if (LANGUAGES[langCode]) {
-    languages[language] =
-      LANGUAGES[langCode][0] + " (" + LANGUAGES[langCode][1] + ")";
+    languages[language] = `${LANGUAGES[langCode][0]} (${
+      LANGUAGES[langCode][1]
+    })`;
   } else {
     languages[langCode] = langCode;
   }
diff --git a/src/renderer/redux/reducers/subscriptions.js b/src/renderer/redux/reducers/subscriptions.js
index 23e9ef50e..f0de6819c 100644
--- a/src/renderer/redux/reducers/subscriptions.js
+++ b/src/renderer/redux/reducers/subscriptions.js
@@ -5,7 +5,7 @@ import { handleActions } from "util/redux-utils";
 // Subscription redux types
 export type SubscriptionState = {
   subscriptions: Array<Subscription>,
-  hasFetchedSubscriptions: boolean
+  hasFetchedSubscriptions: boolean,
 };
 
 export type Subscription = {
@@ -25,15 +25,18 @@ type doChannelUnsubscribe = {
 };
 
 type HasFetchedSubscriptions = {
-  type: actions.HAS_FETCHED_SUBSCRIPTIONS
-}
+  type: actions.HAS_FETCHED_SUBSCRIPTIONS,
+};
 
-export type Action = doChannelSubscribe | doChannelUnsubscribe | HasFetchedSubscriptions;
+export type Action =
+  | doChannelSubscribe
+  | doChannelUnsubscribe
+  | HasFetchedSubscriptions;
 export type Dispatch = (action: Action) => any;
 
 const defaultState = {
   subscriptions: [],
-  hasFetchedSubscriptions: false
+  hasFetchedSubscriptions: false,
 };
 
 export default handleActions(
@@ -43,7 +46,7 @@ export default handleActions(
       action: doChannelSubscribe
     ): SubscriptionState => {
       const newSubscription: Subscription = action.data;
-      let newSubscriptions: Array<Subscription> = state.subscriptions.slice();
+      const newSubscriptions: Array<Subscription> = state.subscriptions.slice();
       newSubscriptions.unshift(newSubscription);
 
       return {
@@ -59,9 +62,10 @@ export default handleActions(
 
       const newSubscriptions = state.subscriptions
         .slice()
-        .filter(subscription => {
-          return subscription.channelName !== subscriptionToRemove.channelName;
-        });
+        .filter(
+          subscription =>
+            subscription.channelName !== subscriptionToRemove.channelName
+        );
 
       return {
         ...state,
@@ -73,8 +77,8 @@ export default handleActions(
       action: HasFetchedSubscriptions
     ): SubscriptionState => ({
       ...state,
-      hasFetchedSubscriptions: true
-    })
+      hasFetchedSubscriptions: true,
+    }),
   },
   defaultState
 );
diff --git a/src/renderer/redux/reducers/user.js b/src/renderer/redux/reducers/user.js
index bc19f3464..ef4bd6f87 100644
--- a/src/renderer/redux/reducers/user.js
+++ b/src/renderer/redux/reducers/user.js
@@ -69,17 +69,17 @@ reducers[types.USER_EMAIL_NEW_STARTED] = function(state, action) {
 };
 
 reducers[types.USER_EMAIL_NEW_SUCCESS] = function(state, action) {
-  let user = Object.assign({}, state.user);
+  const user = Object.assign({}, state.user);
   user.primary_email = action.data.email;
   return Object.assign({}, state, {
     emailToVerify: action.data.email,
     emailNewIsPending: false,
-    user: user,
+    user,
   });
 };
 
 reducers[types.USER_EMAIL_NEW_EXISTS] = function(state, action) {
-  let user = Object.assign({}, state.user);
+  const user = Object.assign({}, state.user);
   return Object.assign({}, state, {
     emailToVerify: action.data.email,
     emailNewIsPending: false,
@@ -101,12 +101,12 @@ reducers[types.USER_EMAIL_VERIFY_STARTED] = function(state, action) {
 };
 
 reducers[types.USER_EMAIL_VERIFY_SUCCESS] = function(state, action) {
-  let user = Object.assign({}, state.user);
+  const user = Object.assign({}, state.user);
   user.primary_email = action.data.email;
   return Object.assign({}, state, {
     emailToVerify: "",
     emailVerifyIsPending: false,
-    user: user,
+    user,
   });
 };
 
diff --git a/src/renderer/redux/reducers/wallet.js b/src/renderer/redux/reducers/wallet.js
index a4e25b964..233bcea25 100644
--- a/src/renderer/redux/reducers/wallet.js
+++ b/src/renderer/redux/reducers/wallet.js
@@ -25,7 +25,7 @@ reducers[types.FETCH_TRANSACTIONS_STARTED] = function(state, action) {
 };
 
 reducers[types.FETCH_TRANSACTIONS_COMPLETED] = function(state, action) {
-  let byId = Object.assign({}, state.transactions);
+  const byId = Object.assign({}, state.transactions);
 
   const { transactions } = action.data;
 
diff --git a/src/renderer/redux/selectors/availability.js b/src/renderer/redux/selectors/availability.js
index 99bf63ad9..679f25ca0 100644
--- a/src/renderer/redux/selectors/availability.js
+++ b/src/renderer/redux/selectors/availability.js
@@ -7,21 +7,16 @@ export const selectAvailabilityByUri = createSelector(
   state => state.byUri || {}
 );
 
-export const makeSelectIsAvailableForUri = uri => {
-  return createSelector(
+export const makeSelectIsAvailableForUri = uri =>
+  createSelector(
     selectAvailabilityByUri,
     byUri => (!byUri || byUri[uri] === undefined ? undefined : byUri[uri] > 0)
   );
-};
 
 export const selectFetchingAvailability = createSelector(
   _selectState,
   state => state.fetching || {}
 );
 
-export const makeSelectFetchingAvailabilityForUri = uri => {
-  return createSelector(
-    selectFetchingAvailability,
-    byUri => byUri && byUri[uri]
-  );
-};
+export const makeSelectFetchingAvailabilityForUri = uri =>
+  createSelector(selectFetchingAvailability, byUri => byUri && byUri[uri]);
diff --git a/src/renderer/redux/selectors/claims.js b/src/renderer/redux/selectors/claims.js
index 5b1c7bbc0..3fc571aa0 100644
--- a/src/renderer/redux/selectors/claims.js
+++ b/src/renderer/redux/selectors/claims.js
@@ -40,12 +40,11 @@ export const selectAllClaimsByChannel = createSelector(
   state => state.claimsByChannel || {}
 );
 
-export const makeSelectClaimForUri = uri => {
-  return createSelector(
+export const makeSelectClaimForUri = uri =>
+  createSelector(
     selectClaimsByUri,
     claims => claims && claims[lbryuri.normalize(uri)]
   );
-};
 
 export const makeSelectClaimIsMine = rawUri => {
   const uri = lbryuri.normalize(rawUri);
@@ -65,12 +64,11 @@ export const selectAllFetchingChannelClaims = createSelector(
   state => state.fetchingChannelClaims || {}
 );
 
-export const makeSelectFetchingChannelClaims = uri => {
-  return createSelector(
+export const makeSelectFetchingChannelClaims = uri =>
+  createSelector(
     selectAllFetchingChannelClaims,
     fetching => fetching && fetching[uri]
   );
-};
 
 export const makeSelectClaimsInChannelForCurrentPage = uri => {
   const pageSelector = makeSelectCurrentParam("page");
@@ -90,30 +88,27 @@ export const makeSelectClaimsInChannelForCurrentPage = uri => {
   );
 };
 
-export const makeSelectMetadataForUri = uri => {
-  return createSelector(makeSelectClaimForUri(uri), claim => {
+export const makeSelectMetadataForUri = uri =>
+  createSelector(makeSelectClaimForUri(uri), claim => {
     const metadata =
       claim && claim.value && claim.value.stream && claim.value.stream.metadata;
 
-    const value = metadata ? metadata : claim === undefined ? undefined : null;
+    const value = metadata || (claim === undefined ? undefined : null);
     return value;
   });
-};
 
-export const makeSelectTitleForUri = uri => {
-  return createSelector(
+export const makeSelectTitleForUri = uri =>
+  createSelector(
     makeSelectMetadataForUri(uri),
     metadata => metadata && metadata.title
   );
-};
 
-export const makeSelectContentTypeForUri = uri => {
-  return createSelector(makeSelectClaimForUri(uri), claim => {
+export const makeSelectContentTypeForUri = uri =>
+  createSelector(makeSelectClaimForUri(uri), claim => {
     const source =
       claim && claim.value && claim.value.stream && claim.value.stream.source;
     return source ? source.contentType : undefined;
   });
-};
 
 export const selectIsFetchingClaimListMine = createSelector(
   _selectState,
@@ -203,7 +198,7 @@ export const selectMyChannelClaims = createSelector(
 
     ids.forEach(id => {
       if (byId[id]) {
-        //I'm not sure why this check is necessary, but it ought to be a quick fix for https://github.com/lbryio/lbry-app/issues/544
+        // I'm not sure why this check is necessary, but it ought to be a quick fix for https://github.com/lbryio/lbry-app/issues/544
         claims.push(byId[id]);
       }
     });
diff --git a/src/renderer/redux/selectors/content.js b/src/renderer/redux/selectors/content.js
index a1c98f049..7d7f01ef9 100644
--- a/src/renderer/redux/selectors/content.js
+++ b/src/renderer/redux/selectors/content.js
@@ -22,28 +22,25 @@ export const selectPlayingUri = createSelector(
   state => state.playingUri
 );
 
-export const makeSelectIsUriResolving = uri => {
-  return createSelector(
+export const makeSelectIsUriResolving = uri =>
+  createSelector(
     selectResolvingUris,
     resolvingUris => resolvingUris && resolvingUris.indexOf(uri) != -1
   );
-};
 
 export const selectChannelClaimCounts = createSelector(
   _selectState,
   state => state.channelClaimCounts || {}
 );
 
-export const makeSelectTotalItemsForChannel = uri => {
-  return createSelector(selectChannelClaimCounts, byUri => byUri && byUri[uri]);
-};
+export const makeSelectTotalItemsForChannel = uri =>
+  createSelector(selectChannelClaimCounts, byUri => byUri && byUri[uri]);
 
-export const makeSelectTotalPagesForChannel = uri => {
-  return createSelector(
+export const makeSelectTotalPagesForChannel = uri =>
+  createSelector(
     selectChannelClaimCounts,
     byUri => byUri && byUri[uri] && Math.ceil(byUri[uri] / 10)
   );
-};
 
 export const selectRewardContentClaimIds = createSelector(
   _selectState,
diff --git a/src/renderer/redux/selectors/cost_info.js b/src/renderer/redux/selectors/cost_info.js
index 1bf6c1fe7..20eae1a69 100644
--- a/src/renderer/redux/selectors/cost_info.js
+++ b/src/renderer/redux/selectors/cost_info.js
@@ -8,12 +8,11 @@ export const selectAllCostInfoByUri = createSelector(
   state => state.byUri || {}
 );
 
-export const makeSelectCostInfoForUri = uri => {
-  return createSelector(
+export const makeSelectCostInfoForUri = uri =>
+  createSelector(
     selectAllCostInfoByUri,
     costInfos => costInfos && costInfos[uri]
   );
-};
 
 export const selectCostForCurrentPageUri = createSelector(
   selectAllCostInfoByUri,
@@ -27,9 +26,8 @@ export const selectFetchingCostInfo = createSelector(
   state => state.fetching || {}
 );
 
-export const makeSelectFetchingCostInfoForUri = uri => {
-  return createSelector(
+export const makeSelectFetchingCostInfoForUri = uri =>
+  createSelector(
     selectFetchingCostInfo,
     fetchingByUri => fetchingByUri && fetchingByUri[uri]
   );
-};
diff --git a/src/renderer/redux/selectors/file_info.js b/src/renderer/redux/selectors/file_info.js
index 0bf76ef2f..74482abf0 100644
--- a/src/renderer/redux/selectors/file_info.js
+++ b/src/renderer/redux/selectors/file_info.js
@@ -26,8 +26,8 @@ export const selectIsFetchingFileListDownloadedOrPublished = createSelector(
     isFetchingFileList || isFetchingClaimListMine
 );
 
-export const makeSelectFileInfoForUri = uri => {
-  return createSelector(
+export const makeSelectFileInfoForUri = uri =>
+  createSelector(
     selectClaimsByUri,
     selectFileInfosByOutpoint,
     (claims, byOutpoint) => {
@@ -37,15 +37,14 @@ export const makeSelectFileInfoForUri = uri => {
       return outpoint ? byOutpoint[outpoint] : undefined;
     }
   );
-};
 
 export const selectDownloadingByOutpoint = createSelector(
   _selectState,
   state => state.downloadingByOutpoint || {}
 );
 
-export const makeSelectDownloadingForUri = uri => {
-  return createSelector(
+export const makeSelectDownloadingForUri = uri =>
+  createSelector(
     selectDownloadingByOutpoint,
     makeSelectFileInfoForUri(uri),
     (byOutpoint, fileInfo) => {
@@ -53,16 +52,14 @@ export const makeSelectDownloadingForUri = uri => {
       return byOutpoint[fileInfo.outpoint];
     }
   );
-};
 
 export const selectUrisLoading = createSelector(
   _selectState,
   state => state.urisLoading || {}
 );
 
-export const makeSelectLoadingForUri = uri => {
-  return createSelector(selectUrisLoading, byUri => byUri && byUri[uri]);
-};
+export const makeSelectLoadingForUri = uri =>
+  createSelector(selectUrisLoading, byUri => byUri && byUri[uri]);
 
 export const selectFileInfosPendingPublish = createSelector(
   _selectState,
@@ -72,8 +69,8 @@ export const selectFileInfosPendingPublish = createSelector(
 export const selectFileInfosDownloaded = createSelector(
   selectFileInfosByOutpoint,
   selectMyClaims,
-  (byOutpoint, myClaims) => {
-    return Object.values(byOutpoint).filter(fileInfo => {
+  (byOutpoint, myClaims) =>
+    Object.values(byOutpoint).filter(fileInfo => {
       const myClaimIds = myClaims.map(claim => claim.claim_id);
 
       return (
@@ -81,8 +78,7 @@ export const selectFileInfosDownloaded = createSelector(
         myClaimIds.indexOf(fileInfo.claim_id) === -1 &&
         (fileInfo.completed || fileInfo.written_bytes)
       );
-    });
-  }
+    })
 );
 
 export const selectFileInfosPublished = createSelector(
@@ -157,6 +153,6 @@ export const selectTotalDownloadProgress = createSelector(
     const totalProgress = progress.reduce((a, b) => a + b, 0);
 
     if (fileInfos.length > 0) return totalProgress / fileInfos.length / 100.0;
-    else return -1;
+    return -1;
   }
 );
diff --git a/src/renderer/redux/selectors/navigation.js b/src/renderer/redux/selectors/navigation.js
index 2b1b384c9..7d401127a 100644
--- a/src/renderer/redux/selectors/navigation.js
+++ b/src/renderer/redux/selectors/navigation.js
@@ -13,9 +13,9 @@ export const selectCurrentPath = createSelector(
 export const computePageFromPath = path =>
   path.replace(/^\//, "").split("?")[0];
 
-export const selectCurrentPage = createSelector(selectCurrentPath, path => {
-  return computePageFromPath(path);
-});
+export const selectCurrentPage = createSelector(selectCurrentPath, path =>
+  computePageFromPath(path)
+);
 
 export const selectCurrentParams = createSelector(selectCurrentPath, path => {
   if (path === undefined) return {};
@@ -24,12 +24,11 @@ export const selectCurrentParams = createSelector(selectCurrentPath, path => {
   return parseQueryParams(path.split("?")[1]);
 });
 
-export const makeSelectCurrentParam = param => {
-  return createSelector(
+export const makeSelectCurrentParam = param =>
+  createSelector(
     selectCurrentParams,
     params => (params ? params[param] : undefined)
   );
-};
 
 export const selectHeaderLinks = createSelector(selectCurrentPage, page => {
   // This contains intentional fall throughs
diff --git a/src/renderer/redux/selectors/rewards.js b/src/renderer/redux/selectors/rewards.js
index c481a1977..ed6ef4605 100644
--- a/src/renderer/redux/selectors/rewards.js
+++ b/src/renderer/redux/selectors/rewards.js
@@ -31,12 +31,13 @@ export const selectClaimedRewardsByTransactionId = createSelector(
 export const selectUnclaimedRewards = createSelector(
   selectUnclaimedRewardsByType,
   byType =>
-    Object.values(byType).sort(function(a, b) {
-      return rewards.SORT_ORDER.indexOf(a.reward_type) <
+    Object.values(byType).sort(
+      (a, b) =>
+        rewards.SORT_ORDER.indexOf(a.reward_type) <
         rewards.SORT_ORDER.indexOf(b.reward_type)
-        ? -1
-        : 1;
-    }) || []
+          ? -1
+          : 1
+    ) || []
 );
 
 export const selectIsRewardEligible = createSelector(
@@ -51,10 +52,7 @@ export const selectFetchingRewards = createSelector(
 
 export const selectUnclaimedRewardValue = createSelector(
   selectUnclaimedRewards,
-  rewards =>
-    rewards.reduce((sum, reward) => {
-      return sum + reward.reward_amount;
-    }, 0)
+  rewards => rewards.reduce((sum, reward) => sum + reward.reward_amount, 0)
 );
 
 export const selectHasClaimedReward = (state, props) => {
@@ -62,47 +60,39 @@ export const selectHasClaimedReward = (state, props) => {
   return reward && reward.transaction_id !== "";
 };
 
-export const makeSelectHasClaimedReward = () => {
-  return createSelector(selectHasClaimedReward, claimed => claimed);
-};
+export const makeSelectHasClaimedReward = () =>
+  createSelector(selectHasClaimedReward, claimed => claimed);
 
 export const selectClaimsPendingByType = createSelector(
   _selectState,
   state => state.claimPendingByType
 );
 
-const selectIsClaimRewardPending = (state, props) => {
-  return selectClaimsPendingByType(state, props)[props.reward_type];
-};
+const selectIsClaimRewardPending = (state, props) =>
+  selectClaimsPendingByType(state, props)[props.reward_type];
 
-export const makeSelectIsRewardClaimPending = () => {
-  return createSelector(selectIsClaimRewardPending, isClaiming => isClaiming);
-};
+export const makeSelectIsRewardClaimPending = () =>
+  createSelector(selectIsClaimRewardPending, isClaiming => isClaiming);
 
 export const selectClaimErrorsByType = createSelector(
   _selectState,
   state => state.claimErrorsByType
 );
 
-const selectClaimRewardError = (state, props) => {
-  return selectClaimErrorsByType(state, props)[props.reward_type];
-};
+const selectClaimRewardError = (state, props) =>
+  selectClaimErrorsByType(state, props)[props.reward_type];
 
-export const makeSelectClaimRewardError = () => {
-  return createSelector(selectClaimRewardError, errorMessage => errorMessage);
-};
+export const makeSelectClaimRewardError = () =>
+  createSelector(selectClaimRewardError, errorMessage => errorMessage);
 
-const selectRewardByType = (state, props) => {
-  return selectUnclaimedRewardsByType(state)[props.reward_type];
-};
+const selectRewardByType = (state, props) =>
+  selectUnclaimedRewardsByType(state)[props.reward_type];
 
-export const makeSelectRewardByType = () => {
-  return createSelector(selectRewardByType, reward => reward);
-};
+export const makeSelectRewardByType = () =>
+  createSelector(selectRewardByType, reward => reward);
 
-export const makeSelectRewardAmountByType = () => {
-  return createSelector(
+export const makeSelectRewardAmountByType = () =>
+  createSelector(
     selectRewardByType,
     reward => (reward ? reward.reward_amount : 0)
   );
-};
diff --git a/src/renderer/redux/selectors/search.js b/src/renderer/redux/selectors/search.js
index ad522ec19..8faf0a307 100644
--- a/src/renderer/redux/selectors/search.js
+++ b/src/renderer/redux/selectors/search.js
@@ -23,19 +23,18 @@ export const selectSearchUrisByQuery = createSelector(
   state => state.urisByQuery
 );
 
-export const makeSelectSearchUris = query => {
-  //replace statement below is kind of ugly, and repeated in doSearch action
-  return createSelector(
+export const makeSelectSearchUris = query =>
+  // replace statement below is kind of ugly, and repeated in doSearch action
+  createSelector(
     selectSearchUrisByQuery,
     byQuery => byQuery[query ? query.replace(/^lbry:\/\//i, "") : query]
   );
-};
 
 export const selectWunderBarAddress = createSelector(
   selectCurrentPage,
   selectPageTitle,
   selectSearchQuery,
-  (page, title, query) => (page != "search" ? title : query ? query : title)
+  (page, title, query) => (page != "search" ? title : query || title)
 );
 
 export const selectWunderBarIcon = createSelector(
diff --git a/src/renderer/redux/selectors/settings.js b/src/renderer/redux/selectors/settings.js
index a504e0df6..b0a7325dd 100644
--- a/src/renderer/redux/selectors/settings.js
+++ b/src/renderer/redux/selectors/settings.js
@@ -14,19 +14,18 @@ export const selectClientSettings = createSelector(
   state => state.clientSettings || {}
 );
 
-export const makeSelectClientSetting = setting => {
-  return createSelector(
+export const makeSelectClientSetting = setting =>
+  createSelector(
     selectClientSettings,
     settings => (settings ? settings[setting] : undefined)
   );
-};
 
 export const selectSettingsIsGenerous = createSelector(
   selectDaemonSettings,
   settings => settings && settings.is_generous_host
 );
 
-//refactor me
+// refactor me
 export const selectShowNsfw = makeSelectClientSetting(settings.SHOW_NSFW);
 
 export const selectLanguages = createSelector(
@@ -36,5 +35,5 @@ export const selectLanguages = createSelector(
 
 export const selectThemePath = createSelector(
   makeSelectClientSetting(settings.THEME),
-  theme => staticResourcesPath + "/themes/" + (theme || "light") + ".css"
+  theme => `${staticResourcesPath}/themes/${theme || "light"}.css`
 );
diff --git a/src/renderer/redux/selectors/subscriptions.js b/src/renderer/redux/selectors/subscriptions.js
index 5694c8f47..f3eb78a6e 100644
--- a/src/renderer/redux/selectors/subscriptions.js
+++ b/src/renderer/redux/selectors/subscriptions.js
@@ -21,7 +21,7 @@ export const selectSubscriptionsFromClaims = createSelector(
       return [];
     }
 
-    let fetchedSubscriptions = [];
+    const fetchedSubscriptions = [];
 
     savedSubscriptions.forEach(subscription => {
       let channelClaims = [];
@@ -40,9 +40,9 @@ export const selectSubscriptionsFromClaims = createSelector(
       }
 
       // all we really need is a uri for each claim
-      channelClaims = channelClaims.map(claim => {
-        return `${claim.name}#${claim.claim_id}`;
-      })
+      channelClaims = channelClaims.map(
+        claim => `${claim.name}#${claim.claim_id}`
+      );
 
       fetchedSubscriptions.push({
         claims: channelClaims,
diff --git a/src/renderer/redux/selectors/wallet.js b/src/renderer/redux/selectors/wallet.js
index 15182b743..dca790e5b 100644
--- a/src/renderer/redux/selectors/wallet.js
+++ b/src/renderer/redux/selectors/wallet.js
@@ -20,7 +20,7 @@ export const selectTransactionItems = createSelector(
     Object.keys(byId).forEach(txid => {
       const tx = byId[txid];
 
-      //ignore dust/fees
+      // ignore dust/fees
       // it is fee only txn if all infos are also empty
       if (
         Math.abs(tx.value) === Math.abs(tx.fee) &&
@@ -31,7 +31,7 @@ export const selectTransactionItems = createSelector(
         return;
       }
 
-      let append = [];
+      const append = [];
 
       append.push(
         ...tx.claim_info.map(item =>
@@ -63,16 +63,16 @@ export const selectTransactionItems = createSelector(
 
       items.push(
         ...append.map(item => {
-          //value on transaction, amount on outpoint
-          //amount is always positive, but should match sign of value
+          // value on transaction, amount on outpoint
+          // amount is always positive, but should match sign of value
           const amount = parseFloat(
             item.balance_delta ? item.balance_delta : item.value
           );
 
           return {
-            txid: txid,
+            txid,
             date: tx.timestamp ? new Date(parseInt(tx.timestamp) * 1000) : null,
-            amount: amount,
+            amount,
             fee: amount < 0 ? -1 * tx.fee / append.length : 0,
             claim_id: item.claim_id,
             claim_name: item.claim_name,
@@ -89,19 +89,15 @@ export const selectTransactionItems = createSelector(
 export const selectRecentTransactions = createSelector(
   selectTransactionItems,
   transactions => {
-    let threshold = new Date();
+    const threshold = new Date();
     threshold.setDate(threshold.getDate() - 7);
-    return transactions.filter(transaction => {
-      return transaction.date > threshold;
-    });
+    return transactions.filter(transaction => transaction.date > threshold);
   }
 );
 
 export const selectHasTransactions = createSelector(
   selectTransactionItems,
-  transactions => {
-    return transactions && transactions.length > 0;
-  }
+  transactions => transactions && transactions.length > 0
 );
 
 export const selectIsFetchingTransactions = createSelector(
@@ -146,10 +142,9 @@ export const selectDraftTransactionError = createSelector(
 
 export const selectBlocks = createSelector(_selectState, state => state.blocks);
 
-export const makeSelectBlockDate = block => {
-  return createSelector(
+export const makeSelectBlockDate = block =>
+  createSelector(
     selectBlocks,
     blocks =>
       blocks && blocks[block] ? new Date(blocks[block].time * 1000) : undefined
   );
-};
diff --git a/src/renderer/rewards.js b/src/renderer/rewards.js
index 0fe0121e0..72ca1fb44 100644
--- a/src/renderer/rewards.js
+++ b/src/renderer/rewards.js
@@ -95,15 +95,16 @@ rewards.claimReward = function(type) {
         case rewards.TYPE_FIRST_CHANNEL:
           lbry
             .claim_list_mine()
-            .then(function(claims) {
-              let claim = claims.reverse().find(function(claim) {
-                return (
-                  claim.name.length &&
-                  claim.name[0] == "@" &&
-                  claim.txid.length &&
-                  claim.category == "claim"
+            .then(claims => {
+              const claim = claims
+                .reverse()
+                .find(
+                  claim =>
+                    claim.name.length &&
+                    claim.name[0] == "@" &&
+                    claim.txid.length &&
+                    claim.category == "claim"
                 );
-              });
               if (claim) {
                 params.transaction_id = claim.txid;
                 requestReward(resolve, reject, params);
@@ -120,14 +121,15 @@ rewards.claimReward = function(type) {
           lbry
             .claim_list_mine()
             .then(claims => {
-              let claim = claims.reverse().find(function(claim) {
-                return (
-                  claim.name.length &&
-                  claim.name[0] != "@" &&
-                  claim.txid.length &&
-                  claim.category == "claim"
+              const claim = claims
+                .reverse()
+                .find(
+                  claim =>
+                    claim.name.length &&
+                    claim.name[0] != "@" &&
+                    claim.txid.length &&
+                    claim.category == "claim"
                 );
-              });
               if (claim) {
                 params.transaction_id = claim.txid;
                 requestReward(resolve, reject, params);
diff --git a/src/renderer/util/batchActions.js b/src/renderer/util/batchActions.js
index 19c7ade28..d8cb486a5 100644
--- a/src/renderer/util/batchActions.js
+++ b/src/renderer/util/batchActions.js
@@ -2,7 +2,7 @@
 function batchActions(...actions) {
   return {
     type: "BATCH_ACTIONS",
-    actions: actions,
+    actions,
   };
 }
 
diff --git a/src/renderer/util/formatCredits.js b/src/renderer/util/formatCredits.js
index 30d36ce98..fea63a00a 100644
--- a/src/renderer/util/formatCredits.js
+++ b/src/renderer/util/formatCredits.js
@@ -17,7 +17,7 @@ export function formatFullPrice(amount, precision) {
     const index = decimals.indexOf(first);
 
     // Set format fraction
-    formated = "." + fraction.substring(0, index + precision);
+    formated = `.${fraction.substring(0, index + precision)}`;
   }
 
   return parseFloat(quantity[0] + formated);
diff --git a/src/renderer/util/query_params.js b/src/renderer/util/query_params.js
index 51987755b..76ed1c754 100644
--- a/src/renderer/util/query_params.js
+++ b/src/renderer/util/query_params.js
@@ -4,12 +4,10 @@ export function parseQueryParams(queryString) {
     .split("?")
     .pop()
     .split("&")
-    .map(function(p) {
-      return p.split("=");
-    });
+    .map(p => p.split("="));
 
   const params = {};
-  parts.forEach(function(arr) {
+  parts.forEach(arr => {
     params[arr[0]] = arr[1];
   });
   return params;
@@ -21,7 +19,7 @@ export function toQueryString(params) {
   const parts = [];
   for (const key in params) {
     if (params.hasOwnProperty(key) && params[key]) {
-      parts.push(key + "=" + params[key]);
+      parts.push(`${key}=${params[key]}`);
     }
   }
   return parts.join("&");
diff --git a/src/renderer/util/redux-utils.js b/src/renderer/util/redux-utils.js
index 04aa0c3cc..b50e55812 100644
--- a/src/renderer/util/redux-utils.js
+++ b/src/renderer/util/redux-utils.js
@@ -1,17 +1,18 @@
 // util for creating reducers
 // based off of redux-actions
 // https://redux-actions.js.org/docs/api/handleAction.html#handleactions
-export const handleActions = (actionMap, defaultState) => {
-  return (state = defaultState, action) => {
-    const handler = actionMap[action.type];
+export const handleActions = (actionMap, defaultState) => (
+  state = defaultState,
+  action
+) => {
+  const handler = actionMap[action.type];
 
-    if (handler) {
-      const newState = handler(state, action);
-      return Object.assign({}, state, newState);
-    }
+  if (handler) {
+    const newState = handler(state, action);
+    return Object.assign({}, state, newState);
+  }
 
-    // just return the original state if no handler
-    // returning a copy here breaks redux-persist
-    return state;
-  };
+  // just return the original state if no handler
+  // returning a copy here breaks redux-persist
+  return state;
 };
diff --git a/src/renderer/util/setBadge.js b/src/renderer/util/setBadge.js
index 5d564c434..372b8d4e1 100644
--- a/src/renderer/util/setBadge.js
+++ b/src/renderer/util/setBadge.js
@@ -1,4 +1,5 @@
 const { remote } = require("electron");
+
 const application = remote.app;
 const dock = application.dock;
 const win = remote.BrowserWindow.getFocusedWindow();
diff --git a/src/renderer/util/setProgressBar.js b/src/renderer/util/setProgressBar.js
index b5d869f3d..942d4288c 100644
--- a/src/renderer/util/setProgressBar.js
+++ b/src/renderer/util/setProgressBar.js
@@ -1,4 +1,5 @@
 const { remote } = require("electron");
+
 const application = remote.app;
 const win = remote.getCurrentWindow();
 
diff --git a/src/renderer/util/shape_shift.js b/src/renderer/util/shape_shift.js
index 7adfc1abc..5b04100e3 100644
--- a/src/renderer/util/shape_shift.js
+++ b/src/renderer/util/shape_shift.js
@@ -20,7 +20,7 @@ const validateAddress = (coinType, address) => {
 };
 
 export const validateShapeShiftForm = (vals, props) => {
-  let errors = {};
+  const errors = {};
 
   if (!vals.returnAddress) {
     return errors;
@@ -45,6 +45,4 @@ const exampleCoinAddresses = {
     "466XMeJEcowYGx7RzUJj3VDWBZgRWErVQQX6tHYbsacS5QF6v3tidE6LZZnTJgzeEh6bKEEJ6GC9jHirrUKvJwVKVj9e7jm",
 };
 
-export const getExampleAddress = coin => {
-  return exampleCoinAddresses[coin];
-};
+export const getExampleAddress = coin => exampleCoinAddresses[coin];