diff --git a/packages/desktop-client/src/browser-preload.browser.js b/packages/desktop-client/src/browser-preload.browser.js
index 4909bd6d946ac3853e78302b85504bdc5ae1e73a..6d9f70521e50ead1de9ed9750bad27babd2c2039 100644
--- a/packages/desktop-client/src/browser-preload.browser.js
+++ b/packages/desktop-client/src/browser-preload.browser.js
@@ -119,12 +119,12 @@ global.Actual = {
 document.addEventListener('keydown', e => {
   if (e.metaKey || e.ctrlKey) {
     // Cmd/Ctrl+o
-    if (e.code === 'KeyO') {
+    if (e.key === 'O') {
       e.preventDefault();
       window.__actionsForMenu.closeBudget();
     }
     // Cmd/Ctrl+z
-    else if (e.code === 'KeyZ') {
+    else if (e.key === 'Z') {
       if (
         e.target.tagName === 'INPUT' ||
         e.target.tagName === 'TEXTAREA' ||
diff --git a/packages/desktop-client/src/components/GlobalKeys.js b/packages/desktop-client/src/components/GlobalKeys.js
index 61b413b1efdbaf459222801286c0f3aee387c3ec..63b6a58fceda57b8118f34ee5c42df08a4892aec 100644
--- a/packages/desktop-client/src/components/GlobalKeys.js
+++ b/packages/desktop-client/src/components/GlobalKeys.js
@@ -12,17 +12,17 @@ export default function GlobalKeys() {
       }
 
       if (e.metaKey) {
-        switch (e.code) {
-          case 'Digit1':
+        switch (e.key) {
+          case '1':
             history.push('/budget');
             break;
-          case 'Digit2':
+          case '2':
             history.push('/reports');
             break;
-          case 'Digit3':
+          case '3':
             history.push('/accounts');
             break;
-          case 'Comma':
+          case ',':
             if (Platform.OS === 'mac') {
               history.push('/settings');
             }
diff --git a/packages/desktop-client/src/components/accounts/TransactionsTable.js b/packages/desktop-client/src/components/accounts/TransactionsTable.js
index fc334eac785dd8677eeb49a00aaae49ce57edf90..37f520618273ad8cce8ddb8d3e07aa0e43c895dc 100644
--- a/packages/desktop-client/src/components/accounts/TransactionsTable.js
+++ b/packages/desktop-client/src/components/accounts/TransactionsTable.js
@@ -1159,7 +1159,7 @@ function NewTransaction({
       }}
       data-testid="new-transaction"
       onKeyDown={e => {
-        if (e.code === 'Escape') {
+        if (e.key === 'Escape') {
           onClose();
         }
       }}
@@ -1590,7 +1590,7 @@ export let TransactionTable = React.forwardRef((props, ref) => {
   }
 
   function onCheckNewEnter(e) {
-    if (e.code === 'Enter') {
+    if (e.key === 'Enter') {
       if (e.metaKey) {
         e.stopPropagation();
         onAddTemporary();
@@ -1634,7 +1634,7 @@ export let TransactionTable = React.forwardRef((props, ref) => {
   }
 
   function onCheckEnter(e) {
-    if (e.code === 'Enter' && !e.shiftKey) {
+    if (e.key === 'Enter' && !e.shiftKey) {
       let { editingId: id, focusedField } = tableNavigator;
 
       afterSave(() => {
diff --git a/packages/desktop-client/src/components/autocomplete/Autocomplete.js b/packages/desktop-client/src/components/autocomplete/Autocomplete.js
index 7a9543630a80532a71fb8c8ad04c131f168c78a5..fee1ea234d470956293f9c9aecd5e0eb2b0dd91b 100644
--- a/packages/desktop-client/src/components/autocomplete/Autocomplete.js
+++ b/packages/desktop-client/src/components/autocomplete/Autocomplete.js
@@ -332,7 +332,7 @@ function onKeyDown(
   // If the dropdown is open, an item is highlighted, and the user
   // pressed enter, always capture that and handle it ourselves
   if (isOpen) {
-    if (e.code === 'Enter') {
+    if (e.key === 'Enter') {
       if (highlightedIndex != null) {
         if (inst.lastChangeType === Downshift.stateChangeTypes.itemMouseEnter) {
           // If the last thing the user did was hover an item, intentionally
@@ -362,7 +362,7 @@ function onKeyDown(
   }
 
   // Handle escape ourselves
-  if (e.code === 'Escape') {
+  if (e.key === 'Escape') {
     e.preventDefault();
 
     if (!embedded) {
diff --git a/packages/desktop-client/src/components/autocomplete/NewAutocomplete.tsx b/packages/desktop-client/src/components/autocomplete/NewAutocomplete.tsx
index 9dc3d56ff25e5f625362f48722820241fc0d2c75..163817958e455c5224533c52fea830dae87edb17 100644
--- a/packages/desktop-client/src/components/autocomplete/NewAutocomplete.tsx
+++ b/packages/desktop-client/src/components/autocomplete/NewAutocomplete.tsx
@@ -112,7 +112,7 @@ const Autocomplete = React.forwardRef<SelectInstance, AutocompleteProps>(
     };
 
     const onKeyDown: AutocompleteProps['onKeyDown'] = event => {
-      if (event.code === 'Escape') {
+      if (event.key === 'Escape') {
         onSelect(
           isSingleValue(initialValue)
             ? initialValue?.value
diff --git a/packages/desktop-client/src/components/budget/misc.js b/packages/desktop-client/src/components/budget/misc.js
index b5dfd75bdebc0c241983855d3467ec751cea0d2b..afaade835935828b1ee631fd03c07220588cfbfb 100644
--- a/packages/desktop-client/src/components/budget/misc.js
+++ b/packages/desktop-client/src/components/budget/misc.js
@@ -138,7 +138,7 @@ export class BudgetTable extends React.Component {
       return null;
     }
 
-    if (e.code === 'Enter' || e.code === 'Tab') {
+    if (e.key === 'Enter' || e.key === 'Tab') {
       e.preventDefault();
       this.moveVertically(e.shiftKey ? -1 : 1);
     }
@@ -392,7 +392,7 @@ export function SidebarCategory({
         style,
       ]}
       onKeyDown={e => {
-        if (e.code === 'Enter') {
+        if (e.key === 'Enter') {
           onEditName(null);
           e.stopPropagation();
         }
@@ -547,7 +547,7 @@ export function SidebarGroup({
         },
       ]}
       onKeyDown={e => {
-        if (e.code === 'Enter') {
+        if (e.key === 'Enter') {
           onEdit(null);
           e.stopPropagation();
         }
diff --git a/packages/desktop-client/src/components/budget/rollover/rollover-components.js b/packages/desktop-client/src/components/budget/rollover/rollover-components.js
index 15533501b243f516d21bb4fd066a541d34839406..57496c283a9700176abe03d470c15c438d789f7d 100644
--- a/packages/desktop-client/src/components/budget/rollover/rollover-components.js
+++ b/packages/desktop-client/src/components/budget/rollover/rollover-components.js
@@ -78,7 +78,7 @@ function CoverTooltip({
             inputProps={{
               inputRef: node,
               onKeyDown: e => {
-                if (e.code === 'Enter') {
+                if (e.key === 'Enter') {
                   submit();
                 }
               },
diff --git a/packages/desktop-client/src/components/common.js b/packages/desktop-client/src/components/common.js
index 9217df639aa86150c73fe72553601b14e39947bd..f3ffc1c38e58ce3e738abbe3429c6dbfcfd615fd 100644
--- a/packages/desktop-client/src/components/common.js
+++ b/packages/desktop-client/src/components/common.js
@@ -349,7 +349,7 @@ export function Input({
       )}
       {...nativeProps}
       onKeyDown={e => {
-        if (e.code === 'Enter' && onEnter) {
+        if (e.key === 'Enter' && onEnter) {
           onEnter(e);
         }
 
@@ -563,7 +563,7 @@ export function Menu({ header, footer, items: allItems, onMenuSelect }) {
 
       let transformIndex = idx => items.indexOf(filteredItems[idx]);
 
-      switch (e.code) {
+      switch (e.key) {
         case 'ArrowUp':
           e.preventDefault();
           setHoveredIndex(
diff --git a/packages/desktop-client/src/components/select/DateSelect.js b/packages/desktop-client/src/components/select/DateSelect.js
index adec9847a0bb96afd1f7766c07d659194323a0df..d857b8cf80157e106fbd59bbad36fe6ec6623906 100644
--- a/packages/desktop-client/src/components/select/DateSelect.js
+++ b/packages/desktop-client/src/components/select/DateSelect.js
@@ -75,7 +75,7 @@ export let DatePicker = React.forwardRef(
       () => ({
         handleInputKeyDown(e) {
           let newDate = null;
-          switch (e.code) {
+          switch (e.key) {
             case 'ArrowLeft':
               e.preventDefault();
               newDate = d.subDays(picker.current.getDate(), 1);
@@ -140,7 +140,7 @@ export let DatePicker = React.forwardRef(
 );
 
 function defaultShouldSaveFromKey(e) {
-  return e.code === 'Enter';
+  return e.key === 'Enter';
 }
 
 export default function DateSelect({
@@ -224,14 +224,14 @@ export default function DateSelect({
 
   function onKeyDown(e) {
     if (
-      ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].includes(e.code) &&
+      ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].includes(e.key) &&
       !e.shiftKey &&
       !e.metaKey &&
       !e.altKey &&
       open
     ) {
       picker.current.handleInputKeyDown(e);
-    } else if (e.code === 'Escape') {
+    } else if (e.key === 'Escape') {
       setValue(parsedDefaultValue);
       setSelectedValue(parsedDefaultValue);
 
diff --git a/packages/desktop-client/src/components/table.js b/packages/desktop-client/src/components/table.js
index 3bb9901356c9d9d641dc39cf4ec9c2b18b37ee27..8bdbc28c76cbff76e6c2d5381a4f8ecadcc36a2f 100644
--- a/packages/desktop-client/src/components/table.js
+++ b/packages/desktop-client/src/components/table.js
@@ -324,11 +324,11 @@ function InputValue({ value: defaultValue, onUpdate, onBlur, ...props }) {
   function onKeyDown(e) {
     // Only enter and tab to escape (which allows the user to move
     // around)
-    if (e.code !== 'Enter' && e.code !== 'Tab') {
+    if (e.key !== 'Enter' && e.key !== 'Tab') {
       e.stopPropagation();
     }
 
-    if (e.code === 'Escape') {
+    if (e.key === 'Escape') {
       if (value !== defaultValue) {
         setValue(defaultValue);
       }
@@ -389,7 +389,7 @@ export function InputCell({
 }
 
 export function shouldSaveFromKey(e) {
-  switch (e.code) {
+  switch (e.key) {
     case 'Tab':
     case 'Enter':
       e.preventDefault();
@@ -486,7 +486,7 @@ export const CellButton = React.forwardRef(
         className="cell-button"
         tabIndex="0"
         onKeyDown={e => {
-          if (e.code === 'KeyX' || e.code === 'Space') {
+          if (e.key === 'X' || e.key === ' ') {
             e.preventDefault();
             if (!disabled) {
               onSelect && onSelect();
@@ -1127,16 +1127,16 @@ export function useTableNavigator(data, fields) {
           return;
         }
 
-        switch (e.code) {
+        switch (e.key) {
           case 'ArrowUp':
-          case 'KeyK':
+          case 'K':
             if (e.target.tagName !== 'INPUT') {
               onMove('up');
             }
             break;
 
           case 'ArrowDown':
-          case 'KeyJ':
+          case 'J':
             if (e.target.tagName !== 'INPUT') {
               onMove('down');
             }
@@ -1148,7 +1148,7 @@ export function useTableNavigator(data, fields) {
             e.stopPropagation();
 
             onMove(
-              e.code === 'Enter'
+              e.key === 'Enter'
                 ? e.shiftKey
                   ? 'up'
                   : 'down'
diff --git a/packages/desktop-client/src/components/tooltips.js b/packages/desktop-client/src/components/tooltips.js
index 561424c5c88184c0b9f3f191938936ba154d6952..6c63cba6f1707c962f09497acd142698fcb547c8 100644
--- a/packages/desktop-client/src/components/tooltips.js
+++ b/packages/desktop-client/src/components/tooltips.js
@@ -60,7 +60,7 @@ export class Tooltip extends React.Component {
     };
 
     let escHandler = e => {
-      if (e.code === 'Escape') {
+      if (e.key === 'Escape') {
         this.props.onClose && this.props.onClose();
       }
     };
diff --git a/upcoming-release-notes/883.md b/upcoming-release-notes/883.md
new file mode 100644
index 0000000000000000000000000000000000000000..0c6aea867ffc785b8e5e35df83154066076fc9e5
--- /dev/null
+++ b/upcoming-release-notes/883.md
@@ -0,0 +1,6 @@
+---
+category: Bugfix
+authors: [j-f1]
+---
+
+Recognize numpad enter key as enter key