diff --git a/docs/reference_keymap_extras.md b/docs/reference_keymap_extras.md
index 44b056af65..a7026a0994 100644
--- a/docs/reference_keymap_extras.md
+++ b/docs/reference_keymap_extras.md
@@ -64,6 +64,7 @@ There are also a few which are not quite language-specific, but useful if you ar
|-------------------|------------------------|
|Colemak |`keymap_colemak.h` |
|Dvorak |`keymap_dvorak.h` |
+|Dvorak (French) |`keymap_dvorak_fr.h` |
|Dvorak (Programmer)|`keymap_dvp.h` |
|Norman |`keymap_norman.h` |
|Plover* |`keymap_plover.h` |
diff --git a/quantum/keymap_extras/keymap_dvorak_fr.h b/quantum/keymap_extras/keymap_dvorak_fr.h
new file mode 100644
index 0000000000..7bb5893d37
--- /dev/null
+++ b/quantum/keymap_extras/keymap_dvorak_fr.h
@@ -0,0 +1,135 @@
+/* Copyright 2020 Guillaume Gérard
+ *
+ * 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 .
+ */
+
+/* Dvorak for the French language
+ * Version: 2
+ *
+ * The layout is designed by Francis Leboutte
+ *
+ * Source: https://algo.be/ergo/dvorak-fr.html
+ */
+
+#pragma once
+
+#include "keymap.h"
+
+// clang-format off
+
+/*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ « │ » │ / │ - │ è │ \ │ ^ │ ( │ ` │ ) │ _ │ [ │ ] │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ : │ ' │ é │ G │ . │ H │ V │ C │ M │ K │ Z │ ¨ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+ * │ │ O │ A │ U │ E │ B │ F │ S │ T │ N │ D │ W │ ~ │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │ │ à │ ; │ Q │ , │ I │ Y │ X │ R │ L │ P │ J │ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+// Row 1
+#define DV_LDAQ KC_GRV // «
+#define DV_RDAQ KC_1 // »
+#define DV_SLSH KC_2 // /
+#define DV_MINS KC_3 // -
+#define DV_EGRV KC_4 // è
+#define DV_BSLS KC_5 // (backslash)
+#define DV_CIRC KC_6 // ^ (dead)
+#define DV_LPRN KC_7 // (
+#define DV_GRV KC_8 // ` (dead)
+#define DV_RPRN KC_9 // )
+#define DV_UNDS KC_0 // _
+#define DV_LBRC KC_MINS // [
+#define DV_RBRC KC_EQL // ]
+// Row 2
+#define DV_COLN KC_Q // :
+#define DV_QUOT KC_W // '
+#define DV_EACU KC_E // é
+#define DV_G KC_R // G
+#define DV_DOT KC_T // .
+#define DV_H KC_Y // H
+#define DV_V KC_U // V
+#define DV_C KC_I // C
+#define DV_M KC_O // M
+#define DV_K KC_P // K
+#define DV_Z KC_LBRC // Z
+#define DV_DIAE KC_RBRC // ¨ (dead)
+// Row 3
+#define DV_O KC_A // O
+#define DV_A KC_S // A
+#define DV_U KC_D // U
+#define DV_E KC_F // E
+#define DV_B KC_G // B
+#define DV_F KC_H // F
+#define DV_S KC_J // S
+#define DV_T KC_K // T
+#define DV_N KC_L // N
+#define DV_D KC_SCLN // D
+#define DV_W KC_QUOT // W
+#define DV_TILD KC_NUHS // ~ (dead)
+// Row 4
+#define DV_AGRV KC_NUBS // à
+#define DV_SCLN KC_Z // ;
+#define DV_Q KC_X // Q
+#define DV_COMM KC_C // ,
+#define DV_I KC_V // I
+#define DV_Y KC_B // Y
+#define DV_X KC_N // X
+#define DV_R KC_M // R
+#define DV_L KC_COMM // L
+#define DV_P KC_DOT // P
+#define DV_J KC_SLSH // J
+
+/* Shifted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ * │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 0 │ 0 │ + │ % │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ ? │ < │ > │ │ ! │ │ │ │ │ │ │ = │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ # │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │ │ ç │ | │ │ @ │ │ │ │ │ │ │ │ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+// Row 1
+#define DV_ASTR S(DV_LDAQ) // *
+#define DV_1 S(DV_RDAQ) // 1
+#define DV_2 S(DV_SLSH) // 2
+#define DV_3 S(DV_MINS) // 3
+#define DV_4 S(DV_EGRV) // 4
+#define DV_5 S(DV_BSLS) // 5
+#define DV_6 S(DV_CIRC) // 6
+#define DV_7 S(DV_LPRN) // 7
+#define DV_8 S(DV_GRV) // 8
+#define DV_9 S(DV_RPRN) // 9
+#define DV_0 S(DV_UNDS) // 0
+#define DV_PLUS S(DV_LBRC) // +
+#define DV_PERC S(DV_RBRC) // %
+// Row 2
+#define DV_QUES S(DV_COLN) // ?
+#define DV_LABK S(DV_QUOT) // <
+#define DV_RABK S(DV_EACU) // >
+#define DV_EXLM S(DV_DOT) // !
+#define DV_EQL S(DV_DIAE) // =
+// Row 3
+#define DV_HASH S(DV_TILD) // #
+// Row 4
+#define DV_CCED S(DV_AGRV) // ç
+#define DV_PIPE S(DV_SCLN) // |
+#define DV_AT S(DV_COMM) // @
diff --git a/quantum/keymap_extras/sendstring_dvorak_fr.h b/quantum/keymap_extras/sendstring_dvorak_fr.h
new file mode 100644
index 0000000000..98d0577afa
--- /dev/null
+++ b/quantum/keymap_extras/sendstring_dvorak_fr.h
@@ -0,0 +1,80 @@
+/* Copyright 2020 Guillaume Gérard
+ *
+ * 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 .
+ */
+
+// Sendstring lookup tables for Dvorak French layouts
+
+#pragma once
+
+#include "keymap_dvorak_fr.h"
+
+// clang-format off
+
+const uint8_t ascii_to_shift_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 1, 0, 1, 0, 1, 0, 0),
+ KCLUT_ENTRY(0, 0, 1, 1, 0, 0, 0, 0),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 0, 0, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 1, 0, 0, 0),
+};
+
+
+const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
+ // NUL SOH STX ETX EOT ENQ ACK BEL
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // BS TAB LF VT FF CR SO SI
+ KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // CAN EM SUB ESC FS GS RS US
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // ! " # $ % & '
+ KC_SPC, DV_DOT, XXXXXXX, DV_TILD, XXXXXXX, DV_RBRC, XXXXXXX, DV_QUOT,
+ // ( ) * + , - . /
+ DV_LPRN, DV_RPRN, DV_LDAQ, DV_LBRC, DV_COMM, DV_MINS, DV_DOT, DV_SLSH,
+ // 0 1 2 3 4 5 6 7
+ DV_UNDS, DV_RDAQ, DV_SLSH, DV_MINS, DV_EGRV, DV_BSLS, DV_CIRC, DV_LPRN,
+ // 8 9 : ; < = > ?
+ DV_GRV, DV_RPRN, DV_COLN, DV_SCLN, DV_QUOT, DV_DIAE, DV_EACU, DV_COLN,
+ // @ A B C D E F G
+ DV_COMM, DV_A, DV_B, DV_C, DV_D, DV_E, DV_F, DV_G,
+ // H I J K L M N O
+ DV_H, DV_I, DV_J, DV_K, DV_L, DV_M, DV_N, DV_O,
+ // P Q R S T U V W
+ DV_P, DV_Q, DV_R, DV_S, DV_T, DV_U, DV_V, DV_W,
+ // X Y Z [ \ ] ^ _
+ DV_X, DV_Y, DV_Z, DV_LBRC, DV_BSLS, DV_RBRC, DV_CIRC, DV_UNDS,
+ // ` a b c d e f g
+ DV_GRV, DV_A, DV_B, DV_C, DV_D, DV_E, DV_F, DV_G,
+ // h i j k l m n o
+ DV_H, DV_I, DV_J, DV_K, DV_L, DV_M, DV_N, DV_O,
+ // p q r s t u v w
+ DV_P, DV_Q, DV_R, DV_S, DV_T, DV_U, DV_V, DV_W,
+ // x y z { | } ~ DEL
+ DV_X, DV_Y, DV_Z, XXXXXXX, DV_SCLN, XXXXXXX, DV_TILD, KC_DEL
+};