diff --git a/packages/api/methods.js b/packages/api/methods.js
index 9af541f267041b40a9894a21704b310f0792535d..5ca8226c47f5428f8cf5bbc8eeea22fd48c3b663 100644
--- a/packages/api/methods.js
+++ b/packages/api/methods.js
@@ -79,10 +79,6 @@ export function getTransactions(accountId, startDate, endDate) {
   return send('api/transactions-get', { accountId, startDate, endDate });
 }
 
-export function filterTransactions(accountId, text) {
-  return send('api/transactions-filter', { accountId, text });
-}
-
 export function updateTransaction(id, fields) {
   return send('api/transaction-update', { id, fields });
 }
diff --git a/packages/desktop-client/src/components/modals/ImportTransactions.jsx b/packages/desktop-client/src/components/modals/ImportTransactions.jsx
index db53af089371080bd3746d0fc8d9b3db2395a733..53b289d3fff3e90e8bd5a99ebd90fb79bc6e65d3 100644
--- a/packages/desktop-client/src/components/modals/ImportTransactions.jsx
+++ b/packages/desktop-client/src/components/modals/ImportTransactions.jsx
@@ -132,7 +132,7 @@ function getFileType(filepath) {
   return rawType;
 }
 
-function ParsedDate({ parseDateFormat, showParsed, dateFormat, date }) {
+function ParsedDate({ parseDateFormat, dateFormat, date }) {
   const parsed =
     date &&
     formatDate(
@@ -184,29 +184,29 @@ function getInitialMappings(transactions) {
   }
 
   const dateField = key(
-    fields.find(([name, value]) => name.toLowerCase().includes('date')) ||
-      fields.find(([name, value]) => value.match(/^\d+[-/]\d+[-/]\d+$/)),
+    fields.find(([name]) => name.toLowerCase().includes('date')) ||
+      fields.find(([, value]) => value.match(/^\d+[-/]\d+[-/]\d+$/)),
   );
 
   const amountField = key(
-    fields.find(([name, value]) => name.toLowerCase().includes('amount')) ||
-      fields.find(([name, value]) => value.match(/^-?[.,\d]+$/)),
+    fields.find(([name]) => name.toLowerCase().includes('amount')) ||
+      fields.find(([, value]) => value.match(/^-?[.,\d]+$/)),
   );
 
   const categoryField = key(
-    fields.find(([name, value]) => name.toLowerCase().includes('category')),
+    fields.find(([name]) => name.toLowerCase().includes('category')),
   );
 
   const payeeField = key(
     fields.find(
-      ([name, value]) =>
+      ([name]) =>
         name !== dateField && name !== amountField && name !== categoryField,
     ),
   );
 
   const notesField = key(
     fields.find(
-      ([name, value]) =>
+      ([name]) =>
         name !== dateField &&
         name !== amountField &&
         name !== categoryField &&
@@ -216,7 +216,7 @@ function getInitialMappings(transactions) {
 
   const inOutField = key(
     fields.find(
-      ([name, value]) =>
+      ([name]) =>
         name !== dateField &&
         name !== amountField &&
         name !== payeeField &&
@@ -1019,7 +1019,7 @@ export function ImportTransactions({ modalProps, options }) {
                 </View>
               );
             }}
-            renderItem={({ key, style, item, editing, focusedField }) => (
+            renderItem={({ key, style, item }) => (
               <View key={key} style={style}>
                 <Transaction
                   transaction={item}
diff --git a/packages/desktop-client/src/components/reports/CategorySelector.tsx b/packages/desktop-client/src/components/reports/CategorySelector.tsx
index 21688b2484524e49966fea723bdac377a3fbe1a4..ef096bd8e7c19da4810b9412a9a65a217572fa76 100644
--- a/packages/desktop-client/src/components/reports/CategorySelector.tsx
+++ b/packages/desktop-client/src/components/reports/CategorySelector.tsx
@@ -151,7 +151,7 @@ export function CategorySelector({
                   <Checkbox
                     id={`form_${categoryGroup.id}`}
                     checked={allCategoriesInGroupSelected}
-                    onChange={e => {
+                    onChange={() => {
                       const selectedCategoriesExcludingGroupCategories =
                         selectedCategories.filter(
                           selectedCategory =>
@@ -189,7 +189,7 @@ export function CategorySelector({
                       paddingLeft: 10,
                     }}
                   >
-                    {categoryGroup.categories.map((category, index) => {
+                    {categoryGroup.categories.map(category => {
                       const isChecked = selectedCategories.some(
                         selectedCategory => selectedCategory.id === category.id,
                       );
@@ -206,7 +206,7 @@ export function CategorySelector({
                           <Checkbox
                             id={`form_${category.id}`}
                             checked={isChecked}
-                            onChange={e => {
+                            onChange={() => {
                               if (isChecked) {
                                 setSelectedCategories(
                                   selectedCategories.filter(
diff --git a/packages/desktop-client/src/components/rules/RulesHeader.tsx b/packages/desktop-client/src/components/rules/RulesHeader.tsx
index c4dbfacf7901a7fcf0ff080e3e02a5b2ef99c44a..40ac46cf06cc175e919bc07b64a385f955366a90 100644
--- a/packages/desktop-client/src/components/rules/RulesHeader.tsx
+++ b/packages/desktop-client/src/components/rules/RulesHeader.tsx
@@ -8,7 +8,7 @@ export function RulesHeader() {
   const dispatchSelected = useSelectedDispatch();
 
   return (
-    <TableHeader version="v2" style={{}}>
+    <TableHeader style={{}}>
       <SelectCell
         exposed={true}
         focused={false}
diff --git a/packages/desktop-client/src/components/schedules/SchedulesTable.tsx b/packages/desktop-client/src/components/schedules/SchedulesTable.tsx
index 0f49c983f27bfcc87847f8df173c0e8d7c5187f5..27606034e10576c5bea907368f58eaf7170d43b9 100644
--- a/packages/desktop-client/src/components/schedules/SchedulesTable.tsx
+++ b/packages/desktop-client/src/components/schedules/SchedulesTable.tsx
@@ -346,7 +346,7 @@ export function SchedulesTable({
 
   return (
     <View style={{ flex: 1, ...tableStyle }}>
-      <TableHeader height={ROW_HEIGHT} inset={15} version="v2">
+      <TableHeader height={ROW_HEIGHT} inset={15}>
         <Field width="flex">Name</Field>
         <Field width="flex">Payee</Field>
         <Field width="flex">Account</Field>
@@ -365,7 +365,6 @@ export function SchedulesTable({
       <Table
         rowHeight={ROW_HEIGHT}
         backgroundColor="transparent"
-        version="v2"
         style={{ flex: 1, backgroundColor: 'transparent', ...style }}
         items={items as ScheduleEntity[]}
         renderItem={renderItem}
diff --git a/packages/desktop-client/src/components/select/DateSelect.tsx b/packages/desktop-client/src/components/select/DateSelect.tsx
index 7ac710fb8eabf8afcb0ba25e6367a7a9854cead5..ddc5bfd333ed10978e39a42b0edacd31631ad4d0 100644
--- a/packages/desktop-client/src/components/select/DateSelect.tsx
+++ b/packages/desktop-client/src/components/select/DateSelect.tsx
@@ -344,7 +344,7 @@ export function DateSelect({
         {...inputProps}
         inputRef={inputRef}
         value={value}
-        onPointerUp={e => {
+        onPointerUp={() => {
           if (!embedded) {
             setOpen(true);
           }
diff --git a/packages/desktop-client/src/components/sidebar/Accounts.tsx b/packages/desktop-client/src/components/sidebar/Accounts.tsx
index c77a9ae365c911d91b54bdd31162b32b10ceacaa..cd20ccb58562f69b6de0aef7e9d12e0bb78ad762 100644
--- a/packages/desktop-client/src/components/sidebar/Accounts.tsx
+++ b/packages/desktop-client/src/components/sidebar/Accounts.tsx
@@ -78,7 +78,7 @@ export function Accounts({
     setIsDragging(drag.state === 'start');
   }
 
-  const makeDropPadding = (i, length) => {
+  const makeDropPadding = i => {
     if (i === 0) {
       return {
         paddingTop: isDragging ? 15 : 0,
@@ -118,7 +118,7 @@ export function Accounts({
           query={getBalanceQuery(account)}
           onDragChange={onDragChange}
           onDrop={onReorder}
-          outerStyle={makeDropPadding(i, budgetedAccounts.length)}
+          outerStyle={makeDropPadding(i)}
         />
       ))}
 
@@ -143,7 +143,7 @@ export function Accounts({
           query={getBalanceQuery(account)}
           onDragChange={onDragChange}
           onDrop={onReorder}
-          outerStyle={makeDropPadding(i, offbudgetAccounts.length)}
+          outerStyle={makeDropPadding(i)}
         />
       ))}
 
@@ -157,7 +157,7 @@ export function Accounts({
       )}
 
       {showClosedAccounts &&
-        closedAccounts.map((account, i) => (
+        closedAccounts.map(account => (
           <Account
             key={account.id}
             name={account.name}
diff --git a/packages/desktop-client/src/components/table.tsx b/packages/desktop-client/src/components/table.tsx
index cca4f889d7bf3068cdcb921d3a94171ad0cf36dc..e7b164a84e7dc5579de6876fb1e8d44742d6110d 100644
--- a/packages/desktop-client/src/components/table.tsx
+++ b/packages/desktop-client/src/components/table.tsx
@@ -740,12 +740,10 @@ export function SheetCell({
 
 type TableHeaderProps = ComponentProps<typeof Row> & {
   headers?: Array<ComponentProps<typeof Cell>>;
-  version?: string;
 };
 export function TableHeader({
   headers,
   children,
-  version,
   ...rowProps
 }: TableHeaderProps) {
   return (
@@ -853,7 +851,7 @@ type TableWithNavigatorProps = TableProps & {
 export const TableWithNavigator = forwardRef<
   TableHandleRef<TableItem>,
   TableWithNavigatorProps
->(({ fields, ...props }, ref) => {
+>(({ fields, ...props }) => {
   const navigator = useTableNavigator(props.items, fields);
   return <Table {...props} navigator={navigator} />;
 });
@@ -883,7 +881,6 @@ type TableProps<T extends TableItem = TableItem> = {
   navigator?: ReturnType<typeof useTableNavigator<T>>;
   listRef?: unknown;
   onScroll?: () => void;
-  version?: string;
   allowPopupsEscape?: boolean;
   isSelected?: (id: TableItem['id']) => boolean;
   saveScrollWidth?: (parent, child) => void;
@@ -906,7 +903,6 @@ export const Table = forwardRef(
       style,
       navigator,
       onScroll,
-      version = 'v1',
       allowPopupsEscape,
       isSelected,
       saveScrollWidth,
@@ -1045,7 +1041,7 @@ export const Table = forwardRef(
       );
     }
 
-    function onItemsRendered({ overscanStartIndex, overscanStopIndex }) {
+    function onItemsRendered({ overscanStopIndex }) {
       if (loadMore && overscanStopIndex > items.length - 100) {
         loadMore();
       }
diff --git a/packages/desktop-client/src/components/transactions/SimpleTransactionsTable.jsx b/packages/desktop-client/src/components/transactions/SimpleTransactionsTable.jsx
index bc849565393fa02b573fec347854ba856c00e956..4d6f6610a6d372e5f34955af7350a8bb8d7c46b1 100644
--- a/packages/desktop-client/src/components/transactions/SimpleTransactionsTable.jsx
+++ b/packages/desktop-client/src/components/transactions/SimpleTransactionsTable.jsx
@@ -36,7 +36,6 @@ function serializeTransaction(transaction, dateFormat) {
 const TransactionRow = memo(function TransactionRow({
   transaction,
   fields,
-  payees,
   categories,
   accounts,
   selected,
@@ -137,7 +136,6 @@ const TransactionRow = memo(function TransactionRow({
 
 export function SimpleTransactionsTable({
   transactions,
-  schedules,
   renderEmpty,
   fields = ['date', 'payee', 'amount'],
   style,
diff --git a/packages/desktop-client/src/components/transactions/TransactionsTable.test.jsx b/packages/desktop-client/src/components/transactions/TransactionsTable.test.jsx
index 56bf5d3cf75d77e6abcb69e8c3ebfdc3c907d924..2d1e51c2e9cdd36f86c2e3826dca10c5e33055ef 100644
--- a/packages/desktop-client/src/components/transactions/TransactionsTable.test.jsx
+++ b/packages/desktop-client/src/components/transactions/TransactionsTable.test.jsx
@@ -765,7 +765,7 @@ describe('Transactions', () => {
     updateProps({ transactions });
 
     function expectErrorToNotExist(transactions) {
-      transactions.forEach((transaction, idx) => {
+      transactions.forEach(transaction => {
         expect(transaction.error).toBeFalsy();
       });
     }
diff --git a/packages/desktop-client/src/components/util/AmountInput.tsx b/packages/desktop-client/src/components/util/AmountInput.tsx
index 151936a042b4b76d4821f64392350e528822549e..fd110d6817fd418aa3367512532ccb1aafc41193 100644
--- a/packages/desktop-client/src/components/util/AmountInput.tsx
+++ b/packages/desktop-client/src/components/util/AmountInput.tsx
@@ -46,7 +46,6 @@ export function AmountInput({
   textStyle,
   focused,
   disabled = false,
-  ...props
 }: AmountInputProps) {
   const format = useFormat();
   const negative = (initialValue === 0 && zeroSign === '-') || initialValue < 0;
diff --git a/packages/desktop-electron/security.js b/packages/desktop-electron/security.js
index e961bf7e5fb272cf1b5fb3be16ac97ba98cd1d9a..8e8a9934db573db155c7a747703f2ec694a3c8e0 100644
--- a/packages/desktop-electron/security.js
+++ b/packages/desktop-electron/security.js
@@ -1,7 +1,7 @@
 const electron = require('electron');
 
 electron.app.on('web-contents-created', function (event, contents) {
-  contents.on('will-attach-webview', function (event, webPreferences, params) {
+  contents.on('will-attach-webview', function (event, webPreferences) {
     delete webPreferences.preloadURL;
     delete webPreferences.preload;
 
@@ -15,11 +15,11 @@ electron.app.on('web-contents-created', function (event, contents) {
     event.preventDefault();
   });
 
-  contents.on('will-navigate', (event, navigationUrl) => {
+  contents.on('will-navigate', event => {
     event.preventDefault();
   });
 
-  contents.on('new-window', (event, navigationUrl) => {
+  contents.on('new-window', event => {
     event.preventDefault();
   });
 });
diff --git a/packages/desktop-electron/updater.js b/packages/desktop-electron/updater.js
index 3a9edae4be51cc10daad0d8b1c46cd9813d771e3..5c95e745d1c4524be8d60e4b9b46a8a03294f726 100644
--- a/packages/desktop-electron/updater.js
+++ b/packages/desktop-electron/updater.js
@@ -43,7 +43,7 @@ function fireEvent(type, args) {
   lastEvent = type;
 }
 
-function start(handler) {
+function start() {
   if (updateTimer) {
     return null;
   }
@@ -53,7 +53,7 @@ function start(handler) {
 
     updateTimer = setInterval(() => {
       if (!isCheckingForUpdates) {
-        autoUpdater.checkForUpdates().catch(err => {
+        autoUpdater.checkForUpdates().catch(() => {
           // Do nothing with the error (make sure it's not logged to sentry)
         });
       }
@@ -74,7 +74,7 @@ function stop() {
 
 function check() {
   if (!isDev && !isCheckingForUpdates) {
-    autoUpdater.checkForUpdates().catch(err => {
+    autoUpdater.checkForUpdates().catch(() => {
       // Do nothing with the error (make sure it's not logged to sentry)
     });
   }
diff --git a/packages/loot-core/migrations/1632571489012_remove_cache.js b/packages/loot-core/migrations/1632571489012_remove_cache.js
index bbd3e213849908d93dc1a19b9b5cdb2287dadf65..77fdac7962c51ba29cbfefae1e6191f39a599c3f 100644
--- a/packages/loot-core/migrations/1632571489012_remove_cache.js
+++ b/packages/loot-core/migrations/1632571489012_remove_cache.js
@@ -1,4 +1,4 @@
-export default async function runMigration(db, uuid) {
+export default async function runMigration(db) {
   function getValue(node) {
     return node.expr != null ? node.expr : node.cachedValue;
   }
diff --git a/packages/loot-core/src/client/actions/account.ts b/packages/loot-core/src/client/actions/account.ts
index 8dcdfe599c06ec4fbf1667653170cbd560137c39..3591f96a8661b25fe9af1f809c817472bb582d31 100644
--- a/packages/loot-core/src/client/actions/account.ts
+++ b/packages/loot-core/src/client/actions/account.ts
@@ -200,7 +200,7 @@ export function setLastTransaction(
 }
 
 export function parseTransactions(filepath, options) {
-  return async (dispatch: Dispatch) => {
+  return async () => {
     return await send('transactions-parse-file', {
       filepath,
       options,
diff --git a/packages/loot-core/src/client/actions/queries.ts b/packages/loot-core/src/client/actions/queries.ts
index 1cb86185fa80748ff9f7dfed0aabe79ff09732be..1e2082d1249c944ebdff5b8d45b06bfc5876975d 100644
--- a/packages/loot-core/src/client/actions/queries.ts
+++ b/packages/loot-core/src/client/actions/queries.ts
@@ -221,7 +221,7 @@ export function updateGroup(group) {
 }
 
 export function deleteGroup(id, transferId?) {
-  return async function (dispatch, getState) {
+  return async function (dispatch) {
     await send('category-group-delete', { id, transferId });
     await dispatch(getCategories());
     // See `deleteCategory` for why we need this
diff --git a/packages/loot-core/src/client/query-helpers.test.ts b/packages/loot-core/src/client/query-helpers.test.ts
index a5ab249d2879be28371dd21c7b5854a4d090d6cf..81d703b976f7d488e6d75075284b2d18eb012ee6 100644
--- a/packages/loot-core/src/client/query-helpers.test.ts
+++ b/packages/loot-core/src/client/query-helpers.test.ts
@@ -362,7 +362,7 @@ describe('query helpers', () => {
 
     await tracer.expect('server-query', [{ result: { $count: '*' } }]);
     await tracer.expect('server-query', ['id']);
-    await tracer.expect('data', data => {});
+    await tracer.expect('data', () => {});
 
     paged.fetchNext();
     paged.fetchNext();
@@ -370,7 +370,7 @@ describe('query helpers', () => {
     paged.fetchNext();
 
     await tracer.expect('server-query', ['id']);
-    await tracer.expect('data', data => {});
+    await tracer.expect('data', () => {});
 
     // Wait a bit and make sure nothing comes through
     const p = Promise.race([tracer.expect('server-query'), wait(200)]);
diff --git a/packages/loot-core/src/platform/client/fetch/index.web.ts b/packages/loot-core/src/platform/client/fetch/index.web.ts
index 83fb068843f63a39477c5342b8cdd999ae88efb2..055871e885a2f2b74dc5d41c6dfffbcf0f3d957e 100644
--- a/packages/loot-core/src/platform/client/fetch/index.web.ts
+++ b/packages/loot-core/src/platform/client/fetch/index.web.ts
@@ -134,7 +134,7 @@ export const unlisten: T.Unlisten = function (name) {
 };
 
 async function closeSocket(onClose) {
-  socketClient.onclose = event => {
+  socketClient.onclose = () => {
     socketClient = null;
     onClose();
   };
diff --git a/packages/loot-core/src/platform/exceptions/index.browser.ts b/packages/loot-core/src/platform/exceptions/index.browser.ts
index 56ccc5c37bb4763685ac0ef9b0d5343bf4008d6d..95adc82959a5ec7bd7355a3dc1d92c991d43b04f 100644
--- a/packages/loot-core/src/platform/exceptions/index.browser.ts
+++ b/packages/loot-core/src/platform/exceptions/index.browser.ts
@@ -4,4 +4,4 @@ export const captureException: T.CaptureException = function (exc) {
   console.log('[Exception]', exc);
 };
 
-export const captureBreadcrumb: T.CaptureBreadcrumb = function (breadcrumb) {};
+export const captureBreadcrumb: T.CaptureBreadcrumb = function () {};
diff --git a/packages/loot-core/src/platform/exceptions/index.electron.ts b/packages/loot-core/src/platform/exceptions/index.electron.ts
index 56ccc5c37bb4763685ac0ef9b0d5343bf4008d6d..95adc82959a5ec7bd7355a3dc1d92c991d43b04f 100644
--- a/packages/loot-core/src/platform/exceptions/index.electron.ts
+++ b/packages/loot-core/src/platform/exceptions/index.electron.ts
@@ -4,4 +4,4 @@ export const captureException: T.CaptureException = function (exc) {
   console.log('[Exception]', exc);
 };
 
-export const captureBreadcrumb: T.CaptureBreadcrumb = function (breadcrumb) {};
+export const captureBreadcrumb: T.CaptureBreadcrumb = function () {};
diff --git a/packages/loot-core/src/platform/exceptions/index.testing.ts b/packages/loot-core/src/platform/exceptions/index.testing.ts
index 988d67f8266f73709dc117c894c09227b0f0dc99..82e6c5422d335ceb6c0cee6aa5d6928527629762 100644
--- a/packages/loot-core/src/platform/exceptions/index.testing.ts
+++ b/packages/loot-core/src/platform/exceptions/index.testing.ts
@@ -1,5 +1,5 @@
 import type * as T from '.';
 
-export const captureException: T.CaptureException = function (exc) {};
+export const captureException: T.CaptureException = function () {};
 
-export const captureBreadcrumb: T.CaptureBreadcrumb = function (info) {};
+export const captureBreadcrumb: T.CaptureBreadcrumb = function () {};
diff --git a/packages/loot-core/src/platform/exceptions/index.web.ts b/packages/loot-core/src/platform/exceptions/index.web.ts
index 56ccc5c37bb4763685ac0ef9b0d5343bf4008d6d..95adc82959a5ec7bd7355a3dc1d92c991d43b04f 100644
--- a/packages/loot-core/src/platform/exceptions/index.web.ts
+++ b/packages/loot-core/src/platform/exceptions/index.web.ts
@@ -4,4 +4,4 @@ export const captureException: T.CaptureException = function (exc) {
   console.log('[Exception]', exc);
 };
 
-export const captureBreadcrumb: T.CaptureBreadcrumb = function (breadcrumb) {};
+export const captureBreadcrumb: T.CaptureBreadcrumb = function () {};
diff --git a/packages/loot-core/src/platform/server/asyncStorage/index.web.ts b/packages/loot-core/src/platform/server/asyncStorage/index.web.ts
index 1243f97b666bf9d82aa3525909d67660e676c3cc..c9bc80c7f7a05ccd699f919510120f432fda47bc 100644
--- a/packages/loot-core/src/platform/server/asyncStorage/index.web.ts
+++ b/packages/loot-core/src/platform/server/asyncStorage/index.web.ts
@@ -34,7 +34,7 @@ export const setItem: T.SetItem = async function (key, value) {
   new Promise((resolve, reject) => {
     const req = objectStore.put(value, key);
     req.onerror = e => reject(e);
-    req.onsuccess = e => resolve(undefined);
+    req.onsuccess = () => resolve(undefined);
     commit(transaction);
   });
 };
@@ -48,7 +48,7 @@ export const removeItem: T.RemoveItem = async function (key) {
   return new Promise((resolve, reject) => {
     const req = objectStore.delete(key);
     req.onerror = e => reject(e);
-    req.onsuccess = e => resolve(undefined);
+    req.onsuccess = () => resolve(undefined);
     commit(transaction);
   });
 };
@@ -84,7 +84,7 @@ export const multiSet: T.MultiSet = async function (keyValues) {
       return new Promise((resolve, reject) => {
         const req = objectStore.put(value, key);
         req.onerror = e => reject(e);
-        req.onsuccess = e => resolve(undefined);
+        req.onsuccess = () => resolve(undefined);
       });
     }),
   );
@@ -104,7 +104,7 @@ export const multiRemove: T.MultiRemove = async function (keys) {
       return new Promise((resolve, reject) => {
         const req = objectStore.delete(key);
         req.onerror = e => reject(e);
-        req.onsuccess = e => resolve(undefined);
+        req.onsuccess = () => resolve(undefined);
       });
     }),
   );
diff --git a/packages/loot-core/src/platform/server/connection/index.api.ts b/packages/loot-core/src/platform/server/connection/index.api.ts
index a28c787ae811579fb7597f6d4908123fabf11137..1aacd8372fa5516925e8d096889ab06b976bbbb3 100644
--- a/packages/loot-core/src/platform/server/connection/index.api.ts
+++ b/packages/loot-core/src/platform/server/connection/index.api.ts
@@ -2,7 +2,7 @@ import type * as T from '.';
 
 export const init: T.Init = function () {};
 
-export const send: T.Send = function (type, args) {
+export const send: T.Send = function () {
   // Nothing
 };
 
diff --git a/packages/loot-core/src/platform/server/fs/index.web.ts b/packages/loot-core/src/platform/server/fs/index.web.ts
index 370a087d2d2d74772db4722133523406297fa351..06eebb13ade1b36ababa9d63b580d089ea3e6101 100644
--- a/packages/loot-core/src/platform/server/fs/index.web.ts
+++ b/packages/loot-core/src/platform/server/fs/index.web.ts
@@ -313,7 +313,7 @@ export const removeDirRecursively = async function (dirpath) {
   }
 };
 
-export const getModifiedTime = async function (filepath) {
+export const getModifiedTime = async function () {
   throw new Error(
     'getModifiedTime not supported on the web (only used for backups)',
   );
diff --git a/packages/loot-core/src/platform/server/indexeddb/index.web.ts b/packages/loot-core/src/platform/server/indexeddb/index.web.ts
index 65f2dc7c86ce68b9251ab848d13540f2a8247a8f..f7396545491ee6e232e2e6a6d0c4dcba6394dc62 100644
--- a/packages/loot-core/src/platform/server/indexeddb/index.web.ts
+++ b/packages/loot-core/src/platform/server/indexeddb/index.web.ts
@@ -34,7 +34,7 @@ function _openDatabase() {
 
     openRequest.onblocked = e => console.log('blocked', e);
 
-    openRequest.onerror = event => {
+    openRequest.onerror = () => {
       console.log('openRequest error');
       reject(new Error('indexeddb-failure: Could not open IndexedDB'));
     };
@@ -102,7 +102,7 @@ export const getStore: T.GetStore = function (db, name) {
 export const get: T.Get = async function (store, key, mapper = x => x) {
   return new Promise((resolve, reject) => {
     const req = store.get(key);
-    req.onsuccess = e => {
+    req.onsuccess = () => {
       resolve(mapper(req.result));
     };
     req.onerror = e => reject(e);
@@ -112,7 +112,7 @@ export const get: T.Get = async function (store, key, mapper = x => x) {
 export const set: T.Set = async function (store, item) {
   return new Promise((resolve, reject) => {
     const req = store.put(item);
-    req.onsuccess = e => resolve(undefined);
+    req.onsuccess = () => resolve(undefined);
     req.onerror = e => reject(e);
   });
 };
@@ -120,7 +120,7 @@ export const set: T.Set = async function (store, item) {
 export const del: T.Del = async function (store, key) {
   return new Promise((resolve, reject) => {
     const req = store.delete(key);
-    req.onsuccess = e => resolve(undefined);
+    req.onsuccess = () => resolve(undefined);
     req.onerror = e => reject(e);
   });
 };
diff --git a/packages/loot-core/src/server/__mocks__/post.ts b/packages/loot-core/src/server/__mocks__/post.ts
index 1eb6e4263a6326ef0aef38a0c0451540424e922b..2040820551ad64b8db30a771ee086b442e0ca635 100644
--- a/packages/loot-core/src/server/__mocks__/post.ts
+++ b/packages/loot-core/src/server/__mocks__/post.ts
@@ -4,6 +4,6 @@ export {
   handleRequestBinary as postBinary,
 } from '../tests/mockSyncServer';
 
-export const get = function (url) {
+export const get = function () {
   throw new Error('get unimplemented');
 };
diff --git a/packages/loot-core/src/server/accounts/rules.test.ts b/packages/loot-core/src/server/accounts/rules.test.ts
index 3238952335546144f5f0edd11e9f01caa9aa70e0..8368131e65783ee3365e2c669887d4865aff9b26 100644
--- a/packages/loot-core/src/server/accounts/rules.test.ts
+++ b/packages/loot-core/src/server/accounts/rules.test.ts
@@ -490,7 +490,7 @@ describe('Rule', () => {
     ];
 
     const foundRules = [];
-    iterateIds(rules, 'description', (rule, value) => {
+    iterateIds(rules, 'description', rule => {
       foundRules.push(rule.getId());
     });
     expect(foundRules).toEqual(['first', 'second', 'second', 'third']);
diff --git a/packages/loot-core/src/server/accounts/rules.ts b/packages/loot-core/src/server/accounts/rules.ts
index 0a514f75855a10b2b5a25a448339f9b1f70f0e83..96b33b525126d1957bfa38fd3cc00e749b712690 100644
--- a/packages/loot-core/src/server/accounts/rules.ts
+++ b/packages/loot-core/src/server/accounts/rules.ts
@@ -520,7 +520,7 @@ export class Rule {
     });
   }
 
-  execActions(object) {
+  execActions() {
     const changes = {};
     this.actions.forEach(action => action.exec(changes));
     return changes;
@@ -528,7 +528,7 @@ export class Rule {
 
   exec(object) {
     if (this.evalConditions(object)) {
-      return this.execActions(object);
+      return this.execActions();
     }
     return null;
   }
diff --git a/packages/loot-core/src/server/api.ts b/packages/loot-core/src/server/api.ts
index 9c42e25a6068fc55f26e9004b8a71fe14ecc5e6c..a89625971e9c82a3462a5ac6ce98d438bc7223cc 100644
--- a/packages/loot-core/src/server/api.ts
+++ b/packages/loot-core/src/server/api.ts
@@ -253,7 +253,7 @@ handlers['api/finish-import'] = async function () {
   await handlers['get-budget-bounds']();
   await sheet.waitOnSpreadsheet();
 
-  await cloudStorage.upload().catch(err => {});
+  await cloudStorage.upload().catch(() => {});
 
   connection.send('finish-import');
   IMPORT_MODE = false;
@@ -426,10 +426,6 @@ handlers['api/transactions-get'] = async function ({
   return data;
 };
 
-handlers['api/transactions-filter'] = async function ({ text, accountId }) {
-  throw new Error('`filterTransactions` is deprecated, use `runQuery` instead');
-};
-
 handlers['api/transaction-update'] = withMutation(async function ({
   id,
   fields,
diff --git a/packages/loot-core/src/server/aql/compiler.ts b/packages/loot-core/src/server/aql/compiler.ts
index e5c6397bbc0facd53cadcf1a3ddc13f99fb89402..8c6bb76b7d59a061704b5549bd5872849327221f 100644
--- a/packages/loot-core/src/server/aql/compiler.ts
+++ b/packages/loot-core/src/server/aql/compiler.ts
@@ -1015,7 +1015,7 @@ export function compileQuery(
 
   const {
     tableViews = {},
-    tableFilters = name => [],
+    tableFilters = () => [],
     customizeQuery = queryState => queryState,
   } = schemaConfig;
 
diff --git a/packages/loot-core/src/server/bench.ts b/packages/loot-core/src/server/bench.ts
index ec2ff9fc0e48f1fc4c2a7ac395ceb759c4705579..46074934266dc79fd76619a2d6487ea7147ad0cd 100644
--- a/packages/loot-core/src/server/bench.ts
+++ b/packages/loot-core/src/server/bench.ts
@@ -9,7 +9,7 @@ const queries = fs
   .split('___BOUNDARY')
   .map(q => q.trim());
 
-function runQueries(n?) {
+function runQueries() {
   for (let i = 0; i < queries.length; i++) {
     if (queries[i] !== '') {
       db.runQuery(queries[i], [], true);
diff --git a/packages/loot-core/src/server/cloud-storage.ts b/packages/loot-core/src/server/cloud-storage.ts
index c4735c5ae06cb0be38e6b428b63f181081727419..7be08444ff55c129c70ef9ba8d5b3894bd922fdc 100644
--- a/packages/loot-core/src/server/cloud-storage.ts
+++ b/packages/loot-core/src/server/cloud-storage.ts
@@ -334,7 +334,7 @@ export async function possiblyUpload() {
   }
 
   // Don't block on uploading
-  upload().catch(err => {});
+  upload().catch(() => {});
 }
 
 export async function removeFile(fileId) {
diff --git a/packages/loot-core/src/server/db/index.ts b/packages/loot-core/src/server/db/index.ts
index f662cf3c7a0597aafd35946228497f313da71a6c..3a359f0659093f62b7be827c90252228ec9a40a8 100644
--- a/packages/loot-core/src/server/db/index.ts
+++ b/packages/loot-core/src/server/db/index.ts
@@ -618,15 +618,6 @@ export async function getTransaction(id) {
   return rows[0];
 }
 
-export async function getTransactionsByDate(
-  accountId,
-  startDate,
-  endDate,
-  options = {},
-) {
-  throw new Error('`getTransactionsByDate` is deprecated');
-}
-
 export async function getTransactions(accountId) {
   if (arguments.length > 1) {
     throw new Error(
diff --git a/packages/loot-core/src/server/importers/actual.ts b/packages/loot-core/src/server/importers/actual.ts
index 31a4f40b5900e49edd3055c8895652a3d2f073ea..675b8a1161eb4c3a6be1ae88e4f0fc642a6049cb 100644
--- a/packages/loot-core/src/server/importers/actual.ts
+++ b/packages/loot-core/src/server/importers/actual.ts
@@ -43,5 +43,5 @@ export async function importActual(_filepath: string, buffer: Buffer) {
   await handlers['load-budget']({ id });
   await handlers['get-budget-bounds']();
   await waitOnSpreadsheet();
-  await cloudStorage.upload().catch(err => {});
+  await cloudStorage.upload().catch(() => {});
 }
diff --git a/packages/loot-core/src/server/importers/ynab4.ts b/packages/loot-core/src/server/importers/ynab4.ts
index f285b8047c3cda03167e6cd9b6581c61e153bf46..3fbf27d0a172eed482a4e04c526047071d66a1fc 100644
--- a/packages/loot-core/src/server/importers/ynab4.ts
+++ b/packages/loot-core/src/server/importers/ynab4.ts
@@ -199,7 +199,7 @@ async function importTransactions(
 
             subtransactions:
               transaction.subTransactions &&
-              transaction.subTransactions.map((t, i) => {
+              transaction.subTransactions.map(t => {
                 return {
                   id: entityIdMap.get(t.entityId),
                   amount: amountToInteger(t.amount),
@@ -346,7 +346,7 @@ export async function doImport(data: YNAB4.YFull) {
   console.log('Setting up...');
 }
 
-export function getBudgetName(filepath, _data) {
+export function getBudgetName(filepath) {
   let unixFilepath = normalizePathSep(filepath);
 
   if (!/\.zip/.test(unixFilepath)) {
diff --git a/packages/loot-core/src/server/main.ts b/packages/loot-core/src/server/main.ts
index 3a80926cdc82fd3cfbbe24f19f10cb1b0f870eb7..03d661f06dfd01dd4ce0d0058817ff033750172c 100644
--- a/packages/loot-core/src/server/main.ts
+++ b/packages/loot-core/src/server/main.ts
@@ -1867,7 +1867,7 @@ handlers['delete-budget'] = async function ({ id, cloudFileId }) {
   // If it's a cloud file, you can delete it from the server by
   // passing its cloud id
   if (cloudFileId) {
-    await cloudStorage.removeFile(cloudFileId).catch(err => {});
+    await cloudStorage.removeFile(cloudFileId).catch(() => {});
   }
 
   // If a local file exists, you can delete it by passing its local id
diff --git a/packages/loot-core/src/server/migrate/cli.ts b/packages/loot-core/src/server/migrate/cli.ts
index bc3bdff75106de9821b4c67602efcd69e7e85148..5928b671410d0291e01eb648b7528c5f5b924df5 100755
--- a/packages/loot-core/src/server/migrate/cli.ts
+++ b/packages/loot-core/src/server/migrate/cli.ts
@@ -48,7 +48,7 @@ function create(migrationName) {
 
 async function list(db) {
   const migrationsDir = getMigrationsDir();
-  const applied = await getAppliedMigrations(getDatabase());
+  const applied = await getAppliedMigrations(db);
   const all = await getMigrationList(migrationsDir);
   const pending = getPending(applied, all);
 
diff --git a/packages/loot-core/src/server/schedules/app.ts b/packages/loot-core/src/server/schedules/app.ts
index 0b82e4248ff9f99c967a198ab19ee36da834b7c5..1bd4c0eb01010cdf798c982715025ee3bc868a6b 100644
--- a/packages/loot-core/src/server/schedules/app.ts
+++ b/packages/loot-core/src/server/schedules/app.ts
@@ -563,7 +563,7 @@ app.method('schedule/get-upcoming-dates', getUpcomingDates);
 
 app.service(trackJSONPaths);
 
-app.events.on('sync', ({ type, subtype }) => {
+app.events.on('sync', ({ type }) => {
   const completeEvent =
     type === 'success' || type === 'error' || type === 'unauthorized';
 
diff --git a/packages/loot-core/src/server/schedules/find-schedules.ts b/packages/loot-core/src/server/schedules/find-schedules.ts
index 373a2bbe8ae017b78c2c2934c1cae6e4482beeb4..8b45406138b3212102c45b179975c1e322467e2d 100644
--- a/packages/loot-core/src/server/schedules/find-schedules.ts
+++ b/packages/loot-core/src/server/schedules/find-schedules.ts
@@ -53,7 +53,7 @@ function getRank(day1, day2) {
   return 1 / (dayDiff + 1);
 }
 
-function matchSchedules(allOccurs, config, partialMatchRank = 0.5) {
+function matchSchedules(allOccurs, config) {
   allOccurs = [...allOccurs].reverse();
   const baseOccur = allOccurs[0];
   const occurs = allOccurs.slice(1);
@@ -107,13 +107,7 @@ function matchSchedules(allOccurs, config, partialMatchRank = 0.5) {
   return schedules;
 }
 
-async function schedulesForPattern(
-  baseStart,
-  numDays,
-  baseConfig,
-  accountId,
-  partialMatchRank?: number,
-) {
+async function schedulesForPattern(baseStart, numDays, baseConfig, accountId) {
   let schedules = [];
 
   for (let i = 0; i < numDays; i++) {
@@ -142,9 +136,7 @@ async function schedulesForPattern(
       });
     }
 
-    schedules = schedules.concat(
-      matchSchedules(data, config, partialMatchRank),
-    );
+    schedules = schedules.concat(matchSchedules(data, config));
   }
   return schedules;
 }
@@ -196,9 +188,6 @@ async function monthlyLastDay(startDate, accountId) {
     1,
     { frequency: 'monthly', patterns: [{ type: 'day', value: -1 }] },
     accountId,
-    // Last day patterns should win over day-specific ones that just
-    // happen to match
-    0.75,
   );
 
   const s2 = await schedulesForPattern(
@@ -206,7 +195,6 @@ async function monthlyLastDay(startDate, accountId) {
     1,
     { frequency: 'monthly', patterns: [{ type: 'day', value: -1 }] },
     accountId,
-    0.75,
   );
 
   return s1.concat(s2);
@@ -368,7 +356,7 @@ export async function findSchedules() {
   }
 
   const schedules = [...groupBy(allSchedules, 'payee').entries()].map(
-    ([payeeId, schedules]) => {
+    ([, schedules]) => {
       schedules.sort((s1, s2) => s2.rank - s1.rank);
       const winner = schedules[0];
 
diff --git a/packages/loot-core/src/server/spreadsheet/spreadsheet.ts b/packages/loot-core/src/server/spreadsheet/spreadsheet.ts
index 4fbeacd436f7ccbe9971fd65a21e244d84fdb076..4aff0f00622d767d6d3bd3aab48105654fb11b35 100644
--- a/packages/loot-core/src/server/spreadsheet/spreadsheet.ts
+++ b/packages/loot-core/src/server/spreadsheet/spreadsheet.ts
@@ -78,7 +78,7 @@ export class Spreadsheet {
     return this.nodes.has(name);
   }
 
-  add(name, expr, value) {
+  add(name, expr) {
     this.set(name, expr);
   }
 
diff --git a/packages/loot-core/src/server/sync/index.ts b/packages/loot-core/src/server/sync/index.ts
index c2fa6e30168de253b3208e94c6c638194b3e4a3b..0cd7386bb4b45440638d36778a59ca7948ae33d7 100644
--- a/packages/loot-core/src/server/sync/index.ts
+++ b/packages/loot-core/src/server/sync/index.ts
@@ -131,7 +131,7 @@ async function fetchAll(table, ids) {
     }
 
     sql += ` WHERE `;
-    sql += partIds.map(id => `${column} = ?`).join(' OR ');
+    sql += partIds.map(() => `${column} = ?`).join(' OR ');
 
     try {
       const rows = await db.runQuery(sql, partIds, true);
diff --git a/packages/loot-core/src/server/tests/mockSyncServer.ts b/packages/loot-core/src/server/tests/mockSyncServer.ts
index 79994dc174a2f53269c715b9f06bc85da9801e68..4852c0955078d9fe2d8115d82b3d83d440a9f61b 100644
--- a/packages/loot-core/src/server/tests/mockSyncServer.ts
+++ b/packages/loot-core/src/server/tests/mockSyncServer.ts
@@ -82,7 +82,7 @@ handlers['/plaid/handoff_public_token'] = () => {
   // Do nothing
 };
 
-handlers['/plaid/accounts'] = ({ client_id, group_id, item_id }) => {
+handlers['/plaid/accounts'] = () => {
   // Ignore the parameters and just return the accounts.
   return { accounts: currentMockData.accounts };
 };
diff --git a/packages/loot-core/src/shared/async.test.ts b/packages/loot-core/src/shared/async.test.ts
index 6f3c5e9fff9bf87a20d1e7726fc95b4edf89ade2..4aa9f9000e59267d3ab8f03bac22764f2fd42e10 100644
--- a/packages/loot-core/src/shared/async.test.ts
+++ b/packages/loot-core/src/shared/async.test.ts
@@ -60,7 +60,7 @@ describe('async', () => {
   test('sequential fn should still flush queue when error is thrown', async () => {
     const test = async fn => {
       fn(1);
-      fn(2, { throwError: true }).catch(err => {});
+      fn(2, { throwError: true }).catch(() => {});
       await fn(3);
     };
 
@@ -86,7 +86,7 @@ describe('async', () => {
       // happened in here, it wouldn't effect anything else)
       expect(data).toEqual([1, 1, 1, 2]);
     });
-    fn(2, { throwError: true }).catch(err => {
+    fn(2, { throwError: true }).catch(() => {
       // Same as above
       expect(data).toEqual([1, 1, 1, 2, 3]);
     });
diff --git a/packages/loot-core/src/types/api-handlers.d.ts b/packages/loot-core/src/types/api-handlers.d.ts
index c4e8c2b11b84df750d7e853b2f1fddfbb27838f3..1a667eba3155df313a283fa089750d826b2993b0 100644
--- a/packages/loot-core/src/types/api-handlers.d.ts
+++ b/packages/loot-core/src/types/api-handlers.d.ts
@@ -72,9 +72,6 @@ export interface ApiHandlers {
     endDate;
   }) => Promise<unknown>;
 
-  /** @deprecated `filterTransactions` is deprecated, use `runQuery` instead' */
-  'api/transactions-filter': (arg: { text; accountId }) => Promise<void>;
-
   'api/transaction-update': (arg: { id; fields }) => Promise<unknown>;
 
   'api/transaction-delete': (arg: { id }) => Promise<unknown>;
diff --git a/upcoming-release-notes/2255.md b/upcoming-release-notes/2255.md
new file mode 100644
index 0000000000000000000000000000000000000000..0ab94f27b773a531ebfac0a493aeccdbaae0f89b
--- /dev/null
+++ b/upcoming-release-notes/2255.md
@@ -0,0 +1,6 @@
+---
+category: Maintenance
+authors: [MatissJanis]
+---
+
+Code clean-up: removing unused variables