diff --git a/builddefs/bootloader.mk b/builddefs/bootloader.mk
index 226213297e..f0a6c084a2 100644
--- a/builddefs/bootloader.mk
+++ b/builddefs/bootloader.mk
@@ -202,6 +202,10 @@ ifeq ($(strip $(BOOTLOADER)), md-boot)
OPT_DEFS += -DBOOTLOADER_MD_BOOT
BOOTLOADER_TYPE = md_boot
endif
+ifeq ($(strip $(BOOTLOADER)), wb32-dfu)
+ OPT_DEFS += -DBOOTLOADER_WB32_DFU
+ BOOTLOADER_TYPE = wb32_dfu
+endif
ifeq ($(strip $(BOOTLOADER_TYPE)),)
$(call CATASTROPHIC_ERROR,Invalid BOOTLOADER,No bootloader specified. Please set an appropriate 'BOOTLOADER' in your keyboard's 'rules.mk' file.)
diff --git a/builddefs/mcu_selection.mk b/builddefs/mcu_selection.mk
index ec33ee4446..dba5c404be 100644
--- a/builddefs/mcu_selection.mk
+++ b/builddefs/mcu_selection.mk
@@ -680,7 +680,6 @@ ifneq ($(findstring WB32F3G71, $(MCU)),)
USE_FPU ?= no
# Bootloader address for WB32 DFU
- STM32_BOOTLOADER_ADDRESS ?= 0x1FFFE000
WB32_BOOTLOADER_ADDRESS ?= 0x1FFFE000
endif
diff --git a/keyboards/handwired/dactyl_manuform/5x6_5/keymaps/via/config.h b/keyboards/handwired/dactyl_manuform/5x6_5/keymaps/via/config.h
new file mode 100755
index 0000000000..dc2d3ee111
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x6_5/keymaps/via/config.h
@@ -0,0 +1,24 @@
+/*
+Copyright 2022 David Falkner (falkner@martica.org)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#define USE_SERIAL
+
+#define EE_HANDS
+
+#define KINETIC_SPEED
\ No newline at end of file
diff --git a/keyboards/handwired/dactyl_manuform/5x6_5/keymaps/via/keymap.json b/keyboards/handwired/dactyl_manuform/5x6_5/keymaps/via/keymap.json
new file mode 100755
index 0000000000..90aa13a260
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x6_5/keymaps/via/keymap.json
@@ -0,0 +1,266 @@
+{
+ "version": 1,
+ "notes": "",
+ "author": "David Falkner",
+ "keyboard": "handwired/dactyl_manuform/5x6_5",
+ "keymap": "via",
+ "layout": "LAYOUT_5x6_5",
+ "layers": [
+ [
+ "KC_ESC",
+ "KC_1",
+ "KC_2",
+ "KC_3",
+ "KC_4",
+ "KC_5",
+ "KC_6",
+ "KC_7",
+ "KC_8",
+ "KC_9",
+ "KC_0",
+ "KC_MINS",
+ "MO(1)",
+ "KC_Q",
+ "KC_W",
+ "KC_E",
+ "KC_R",
+ "KC_T",
+ "KC_Y",
+ "KC_U",
+ "KC_I",
+ "KC_O",
+ "KC_P",
+ "MO(1)",
+ "KC_CAPS",
+ "KC_A",
+ "KC_S",
+ "KC_D",
+ "KC_F",
+ "KC_G",
+ "KC_H",
+ "KC_J",
+ "KC_K",
+ "KC_L",
+ "KC_SCLN",
+ "KC_QUOT",
+ "KC_LSFT",
+ "KC_Z",
+ "KC_X",
+ "KC_C",
+ "KC_V",
+ "KC_B",
+ "KC_N",
+ "KC_M",
+ "KC_COMM",
+ "KC_DOT",
+ "KC_SLSH",
+ "KC_RSFT",
+ "KC_EQL",
+ "KC_BSLS",
+ "KC_BSPC",
+ "KC_TAB",
+ "KC_LCTL",
+ "KC_RCTL",
+ "KC_ENT",
+ "KC_SPC",
+ "KC_LBRC",
+ "KC_RBRC",
+ "KC_LGUI",
+ "KC_LALT",
+ "KC_RALT",
+ "MO(2)"
+ ],
+ [
+ "KC_TRNS",
+ "KC_BRID",
+ "KC_BRIU",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_SLEP",
+ "KC_MRWD",
+ "KC_MPLY",
+ "KC_MFFD",
+ "KC_MUTE",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_PSLS",
+ "KC_P7",
+ "KC_P8",
+ "KC_P9",
+ "KC_PMNS",
+ "KC_INS",
+ "KC_PGUP",
+ "KC_UP",
+ "KC_HOME",
+ "KC_TILD",
+ "KC_TRNS",
+ "KC_PCMM",
+ "KC_PAST",
+ "KC_P4",
+ "KC_P5",
+ "KC_P6",
+ "KC_PPLS",
+ "KC_DEL",
+ "KC_LEFT",
+ "KC_DOWN",
+ "KC_RGHT",
+ "KC_GRV",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_PEQL",
+ "KC_P1",
+ "KC_P2",
+ "KC_P3",
+ "KC_PENT",
+ "KC_TRNS",
+ "KC_PGDN",
+ "KC_TRNS",
+ "KC_END",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_P0",
+ "KC_PDOT",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_VOLD",
+ "KC_VOLU",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS"
+ ],
+ [
+ "KC_TRNS",
+ "KC_F1",
+ "KC_F2",
+ "KC_F3",
+ "KC_F4",
+ "KC_F5",
+ "KC_F6",
+ "KC_F7",
+ "KC_F8",
+ "KC_F9",
+ "KC_F10",
+ "KC_PAUS",
+ "KC_TRNS",
+ "KC_F11",
+ "KC_F12",
+ "KC_F13",
+ "KC_F14",
+ "KC_F15",
+ "KC_F16",
+ "KC_F17",
+ "KC_F18",
+ "KC_F19",
+ "KC_F20",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_PSCR",
+ "KC_SLCK",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_WH_U",
+ "KC_WH_D",
+ "KC_APP",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS"
+ ],
+ [
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS"
+ ]
+ ]
+}
\ No newline at end of file
diff --git a/keyboards/handwired/dactyl_manuform/5x6_5/keymaps/via/rules.mk b/keyboards/handwired/dactyl_manuform/5x6_5/keymaps/via/rules.mk
new file mode 100755
index 0000000000..036bd6d1c3
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x6_5/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/handwired/dactyl_manuform/readme.md b/keyboards/handwired/dactyl_manuform/readme.md
index 4882f4ab4b..da4ac2ad68 100644
--- a/keyboards/handwired/dactyl_manuform/readme.md
+++ b/keyboards/handwired/dactyl_manuform/readme.md
@@ -44,6 +44,17 @@ Just a copy of the Impstyle keymap. Feel free to adjust it.
#### Impstyle
A simple QWERTY keymap with 3 Layers. Both sides are connected via serial and the Left ist the master.
+### [Keymaps 5x6_5](/keyboards/handwired/dactyl_manuform/5x6_5/keymaps/)
+
+Similar layout to 5x6 but with only 5 thumb keys per side instead of 6.
+
+#### Default
+QWERTY layout with 7 Layers.
+
+#### Via
+Similar to Default but adds support for the [Via](https://www.caniusevia.com/) keymap configurator. Reduces the number of layers to 4 to comply with Via defaults, and remaps
+some keys to accomodate that constraint.
+
### [Keymaps 5x7 aka almost Ergodox](/keyboards/handwired/dactyl_manuform/5x7/keymaps/)
#### Default
Keymap of Loligagger from geekhack.
diff --git a/platforms/chibios/bootloaders/wb32_dfu.c b/platforms/chibios/bootloaders/wb32_dfu.c
new file mode 100644
index 0000000000..70b18f0228
--- /dev/null
+++ b/platforms/chibios/bootloaders/wb32_dfu.c
@@ -0,0 +1,49 @@
+/* Copyright 2021 QMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "bootloader.h"
+
+#include
+#include
+#include "wait.h"
+
+extern uint32_t __ram0_end__;
+
+/* This code should be checked whether it runs correctly on platforms */
+# define SYMVAL(sym) (uint32_t)(((uint8_t *)&(sym)) - ((uint8_t *)0))
+# define BOOTLOADER_MAGIC 0xDEADBEEF
+# define MAGIC_ADDR (unsigned long *)(SYMVAL(__ram0_end__) - 4)
+
+__attribute__((weak)) void bootloader_jump(void) {
+ *MAGIC_ADDR = BOOTLOADER_MAGIC; // set magic flag => reset handler will jump into boot loader
+ NVIC_SystemReset();
+}
+
+void enter_bootloader_mode_if_requested(void) {
+ unsigned long *check = MAGIC_ADDR;
+ if (*check == BOOTLOADER_MAGIC) {
+ *check = 0;
+ __set_CONTROL(0);
+ __set_MSP(*(__IO uint32_t *)WB32_BOOTLOADER_ADDRESS);
+ __enable_irq();
+
+ typedef void (*BootJump_t)(void);
+ BootJump_t boot_jump = *(BootJump_t *)(WB32_BOOTLOADER_ADDRESS + 4);
+ boot_jump();
+ while (1)
+ ;
+ }
+}