diff --git a/boards.txt b/boards.txt
index af10552400a..71825b64d45 100644
--- a/boards.txt
+++ b/boards.txt
@@ -2934,6 +2934,124 @@ S_ODI_Ultra.menu.EraseFlash.all.upload.erase_cmd=-e
 
 ##############################################################
 
+lilygo_t_display_s3.name=LilyGo T-Display-S3
+lilygo_t_display_s3.vid.0=0x303a
+lilygo_t_display_s3.pid.0=0x1001
+
+lilygo_t_display_s3.bootloader.tool=esptool_py
+lilygo_t_display_s3.bootloader.tool.default=esptool_py
+
+lilygo_t_display_s3.upload.tool=esptool_py
+lilygo_t_display_s3.upload.tool.default=esptool_py
+lilygo_t_display_s3.upload.tool.network=esp_ota
+
+lilygo_t_display_s3.upload.maximum_size=3145728
+lilygo_t_display_s3.upload.maximum_data_size=327680
+lilygo_t_display_s3.upload.speed=921600
+lilygo_t_display_s3.upload.flags=
+lilygo_t_display_s3.upload.extra_flags=
+lilygo_t_display_s3.upload.use_1200bps_touch=false
+lilygo_t_display_s3.upload.wait_for_upload_port=false
+
+lilygo_t_display_s3.serial.disableDTR=false
+lilygo_t_display_s3.serial.disableRTS=false
+
+lilygo_t_display_s3.build.tarch=xtensa
+lilygo_t_display_s3.build.bootloader_addr=0x0
+lilygo_t_display_s3.build.target=esp32s3
+lilygo_t_display_s3.build.mcu=esp32s3
+lilygo_t_display_s3.build.core=esp32
+lilygo_t_display_s3.build.variant=lilygo_t_display_s3
+lilygo_t_display_s3.build.board=LILYGO_T_DISPLAY_S3
+
+lilygo_t_display_s3.build.usb_mode=1
+lilygo_t_display_s3.build.cdc_on_boot=1
+lilygo_t_display_s3.build.msc_on_boot=0
+lilygo_t_display_s3.build.dfu_on_boot=0
+lilygo_t_display_s3.build.f_cpu=240000000L
+lilygo_t_display_s3.build.flash_size=16MB
+lilygo_t_display_s3.build.flash_freq=80m
+lilygo_t_display_s3.build.flash_mode=dio
+lilygo_t_display_s3.build.boot=qio
+lilygo_t_display_s3.build.boot_freq=80m
+lilygo_t_display_s3.build.partitions=app3M_fat9M_16MB
+lilygo_t_display_s3.build.defines=
+lilygo_t_display_s3.build.loop_core=
+lilygo_t_display_s3.build.event_core=
+lilygo_t_display_s3.build.psram_type=opi
+lilygo_t_display_s3.build.memory_type={build.boot}_{build.psram_type}
+
+## IDE 2.0 Seems to not update the value
+lilygo_t_display_s3.menu.JTAGAdapter.default=Disabled
+lilygo_t_display_s3.menu.JTAGAdapter.default.build.copy_jtag_files=0
+lilygo_t_display_s3.menu.JTAGAdapter.builtin=Integrated USB JTAG
+lilygo_t_display_s3.menu.JTAGAdapter.builtin.build.openocdscript=esp32s3-builtin.cfg
+lilygo_t_display_s3.menu.JTAGAdapter.builtin.build.copy_jtag_files=1
+
+lilygo_t_display_s3.menu.LoopCore.1=Core 1
+lilygo_t_display_s3.menu.LoopCore.1.build.loop_core=-DARDUINO_RUNNING_CORE=1
+lilygo_t_display_s3.menu.LoopCore.0=Core 0
+lilygo_t_display_s3.menu.LoopCore.0.build.loop_core=-DARDUINO_RUNNING_CORE=0
+
+lilygo_t_display_s3.menu.EventsCore.1=Core 1
+lilygo_t_display_s3.menu.EventsCore.1.build.event_core=-DARDUINO_EVENT_RUNNING_CORE=1
+lilygo_t_display_s3.menu.EventsCore.0=Core 0
+lilygo_t_display_s3.menu.EventsCore.0.build.event_core=-DARDUINO_EVENT_RUNNING_CORE=0
+
+lilygo_t_display_s3.menu.USBMode.hwcdc=Hardware CDC and JTAG
+lilygo_t_display_s3.menu.USBMode.hwcdc.build.usb_mode=1
+lilygo_t_display_s3.menu.USBMode.default=USB-OTG (TinyUSB)
+lilygo_t_display_s3.menu.USBMode.default.build.usb_mode=0
+
+lilygo_t_display_s3.menu.CDCOnBoot.cdc=Enabled
+lilygo_t_display_s3.menu.CDCOnBoot.cdc.build.cdc_on_boot=1
+lilygo_t_display_s3.menu.CDCOnBoot.default=Disabled
+lilygo_t_display_s3.menu.CDCOnBoot.default.build.cdc_on_boot=0
+
+lilygo_t_display_s3.menu.MSCOnBoot.default=Disabled
+lilygo_t_display_s3.menu.MSCOnBoot.default.build.msc_on_boot=0
+lilygo_t_display_s3.menu.MSCOnBoot.msc=Enabled (Requires USB-OTG Mode)
+lilygo_t_display_s3.menu.MSCOnBoot.msc.build.msc_on_boot=1
+
+lilygo_t_display_s3.menu.DFUOnBoot.default=Disabled
+lilygo_t_display_s3.menu.DFUOnBoot.default.build.dfu_on_boot=0
+lilygo_t_display_s3.menu.DFUOnBoot.dfu=Enabled (Requires USB-OTG Mode)
+lilygo_t_display_s3.menu.DFUOnBoot.dfu.build.dfu_on_boot=1
+
+lilygo_t_display_s3.menu.UploadMode.default=UART0 / Hardware CDC
+lilygo_t_display_s3.menu.UploadMode.default.upload.use_1200bps_touch=false
+lilygo_t_display_s3.menu.UploadMode.default.upload.wait_for_upload_port=false
+lilygo_t_display_s3.menu.UploadMode.cdc=USB-OTG CDC (TinyUSB)
+lilygo_t_display_s3.menu.UploadMode.cdc.upload.use_1200bps_touch=true
+lilygo_t_display_s3.menu.UploadMode.cdc.upload.wait_for_upload_port=true
+
+lilygo_t_display_s3.menu.PartitionScheme.app3M_fat9M_16MB=16M Flash (3MB APP/9.9MB FATFS)
+lilygo_t_display_s3.menu.PartitionScheme.app3M_fat9M_16MB.build.partitions=app3M_fat9M_16MB
+lilygo_t_display_s3.menu.PartitionScheme.app3M_fat9M_16MB.upload.maximum_size=3145728
+lilygo_t_display_s3.menu.PartitionScheme.rainmaker=RainMaker
+lilygo_t_display_s3.menu.PartitionScheme.rainmaker.build.partitions=rainmaker
+lilygo_t_display_s3.menu.PartitionScheme.rainmaker.upload.maximum_size=3145728
+
+lilygo_t_display_s3.menu.DebugLevel.none=None
+lilygo_t_display_s3.menu.DebugLevel.none.build.code_debug=0
+lilygo_t_display_s3.menu.DebugLevel.error=Error
+lilygo_t_display_s3.menu.DebugLevel.error.build.code_debug=1
+lilygo_t_display_s3.menu.DebugLevel.warn=Warn
+lilygo_t_display_s3.menu.DebugLevel.warn.build.code_debug=2
+lilygo_t_display_s3.menu.DebugLevel.info=Info
+lilygo_t_display_s3.menu.DebugLevel.info.build.code_debug=3
+lilygo_t_display_s3.menu.DebugLevel.debug=Debug
+lilygo_t_display_s3.menu.DebugLevel.debug.build.code_debug=4
+lilygo_t_display_s3.menu.DebugLevel.verbose=Verbose
+lilygo_t_display_s3.menu.DebugLevel.verbose.build.code_debug=5
+
+lilygo_t_display_s3.menu.EraseFlash.none=Disabled
+lilygo_t_display_s3.menu.EraseFlash.none.upload.erase_cmd=
+lilygo_t_display_s3.menu.EraseFlash.all=Enabled
+lilygo_t_display_s3.menu.EraseFlash.all.upload.erase_cmd=-e
+
+##############################################################
+
 micros2.name=microS2
 micros2.vid.0=0x239A
 micros2.pid.0=0x80C5
diff --git a/variants/lilygo_t_display_s3/pins_arduino.h b/variants/lilygo_t_display_s3/pins_arduino.h
new file mode 100644
index 00000000000..099bdad5876
--- /dev/null
+++ b/variants/lilygo_t_display_s3/pins_arduino.h
@@ -0,0 +1,92 @@
+#ifndef Pins_Arduino_h
+#define Pins_Arduino_h
+
+#include <stdint.h>
+#include "soc/soc_caps.h"
+
+#define USB_VID 0x303a
+#define USB_PID 0x1001
+
+#define EXTERNAL_NUM_INTERRUPTS 46
+#define NUM_DIGITAL_PINS        48
+#define NUM_ANALOG_INPUTS       20
+
+#define analogInputToDigitalPin(p)  (((p)<20)?(analogChannelToDigitalPin(p)):-1)
+#define digitalPinToInterrupt(p)    (((p)<48)?(p):-1)
+#define digitalPinHasPWM(p)         (p < 46)
+
+static const uint8_t BUTTON_1 = 0;
+static const uint8_t BUTTON_2 = 14;
+static const uint8_t BAT_VOLT = 4;
+
+static const uint8_t TX = 43;
+static const uint8_t RX = 44;
+
+static const uint8_t SDA = 18;
+static const uint8_t SCL = 17;
+
+static const uint8_t SS    = 10;
+static const uint8_t MOSI  = 11;
+static const uint8_t MISO  = 13;
+static const uint8_t SCK   = 12;
+
+static const uint8_t TP_RESET = 21;
+static const uint8_t TP_INIT = 16;
+
+// ST7789 IPS TFT 170x320
+static const uint8_t LCD_BL = 38;
+static const uint8_t LCD_D0 = 39;
+static const uint8_t LCD_D1 = 40;
+static const uint8_t LCD_D2 = 41;
+static const uint8_t LCD_D3 = 42;
+static const uint8_t LCD_D4 = 45;
+static const uint8_t LCD_D5 = 46;
+static const uint8_t LCD_D6 = 47;
+static const uint8_t LCD_D7 = 48;
+static const uint8_t LCD_WR = 8;
+static const uint8_t LCD_RD = 9;
+static const uint8_t LCD_DC = 7;
+static const uint8_t LCD_CS = 6;
+static const uint8_t LCD_RES = 5;
+static const uint8_t LCD_POWER_ON = 15;
+
+// P1
+static const uint8_t PIN_43 = 43;
+static const uint8_t PIN_44 = 44;
+static const uint8_t PIN_18 = 18;
+static const uint8_t PIN_17 = 17;
+static const uint8_t PIN_21 = 21;
+static const uint8_t PIN_16 = 16;
+
+// P2
+static const uint8_t PIN_1  = 1;
+static const uint8_t PIN_2  = 2;
+static const uint8_t PIN_3  = 3;
+static const uint8_t PIN_10 = 10;
+static const uint8_t PIN_11 = 11;
+static const uint8_t PIN_12 = 12;
+static const uint8_t PIN_13 = 13;
+
+// Analog
+static const uint8_t A0  = 1;
+static const uint8_t A1  = 2;
+static const uint8_t A2  = 3;
+static const uint8_t A9  = 10;
+static const uint8_t A10 = 11;
+static const uint8_t A11 = 12;
+static const uint8_t A12 = 13;
+static const uint8_t A15 = 16;
+static const uint8_t A16 = 17;
+static const uint8_t A17 = 18;
+
+
+// Touch
+static const uint8_t T1  = 1;
+static const uint8_t T2  = 2;
+static const uint8_t T3  = 3;
+static const uint8_t T10 = 10;
+static const uint8_t T11 = 11;
+static const uint8_t T12 = 12;
+static const uint8_t T13 = 13;
+
+#endif /* Pins_Arduino_h */