diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7b4b9182b18341f00361c65fd0476eebb948668e..b8584fb6dcecf0468a90758028f766105fb73c50 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,9 @@ Changelog
 current (development) 
 ---------------------
 
+4.0.0
+-----
+
 ### DOM
 - Feature: more styles:
   - `strikethrough`
diff --git a/CMakeLists.txt b/CMakeLists.txt
index adb4ec58c91fc474e34ef1daa9bb0b1613e98254..e58a9be1cb6ee266efc7f4f72795c9e49d0c2237 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.11)
 
 project(ftxui
   LANGUAGES CXX
-  VERSION 3.0.0
+  VERSION 4.0.0
 )
 
 option(FTXUI_BUILD_DOCS "Set to ON to build docs" ON)
@@ -131,12 +131,17 @@ target_link_libraries(dom
   PUBLIC screen
 )
 
-find_package(Threads)
 target_link_libraries(component
   PUBLIC dom
-  PUBLIC Threads::Threads
 )
 
+if (NOT EMSCRIPTEN)
+  find_package(Threads)
+  target_link_libraries(component
+    PUBLIC Threads::Threads
+  )
+endif()
+
 include(cmake/ftxui_set_options.cmake)
 ftxui_set_options(screen)
 ftxui_set_options(dom)
diff --git a/cmake/ftxui_set_options.cmake b/cmake/ftxui_set_options.cmake
index 1294e7d82f10dd2776214b5b7008c33d3ac5c2d6..d60898024e5aafbaa29c853d39a9b533d335c35e 100644
--- a/cmake/ftxui_set_options.cmake
+++ b/cmake/ftxui_set_options.cmake
@@ -44,7 +44,6 @@ function(ftxui_set_options library)
   )
 
   # C++17 is used. We require fold expression at least.
-  target_compile_features(${library} PUBLIC cxx_std_20)
   set_target_properties(${library} PROPERTIES
     CXX_STANDARD 17
     CXX_EXTENSIONS OFF
diff --git a/include/ftxui/screen/screen.hpp b/include/ftxui/screen/screen.hpp
index b6e82fcbca535a5a0e558fb343e971cebafe7b14..d8a5329db2747ce8e78404b633aec5b5b6f3eacc 100644
--- a/include/ftxui/screen/screen.hpp
+++ b/include/ftxui/screen/screen.hpp
@@ -2,7 +2,7 @@
 #define FTXUI_SCREEN_SCREEN_HPP
 
 #include <memory>
-#include <string>  // for allocator, string, basic_string
+#include <string>  // for string, allocator, basic_string
 #include <vector>  // for vector
 
 #include "ftxui/screen/box.hpp"       // for Box
diff --git a/src/ftxui/component/animation.cpp b/src/ftxui/component/animation.cpp
index 1a0a501b98c3b1857f482e3d323e685ecc1fd65a..1a576e756e01e21aea31d962b9017154d5d251cf 100644
--- a/src/ftxui/component/animation.cpp
+++ b/src/ftxui/component/animation.cpp
@@ -1,5 +1,4 @@
 #include <cmath>    // for sin, pow, sqrt, cos
-#include <compare>  // for operator<=, operator>=, partial_ordering
 #include <ratio>    // for ratio
 #include <utility>  // for move
 
diff --git a/src/ftxui/component/screen_interactive.cpp b/src/ftxui/component/screen_interactive.cpp
index f9db0a4e3f7742318147613a1b33a306596eada4..46e2b5b3c2f0d4a6ffbf83e275a543d351cc06d8 100644
--- a/src/ftxui/component/screen_interactive.cpp
+++ b/src/ftxui/component/screen_interactive.cpp
@@ -1,7 +1,6 @@
 #include <algorithm>  // for copy, max, min
 #include <array>      // for array
-#include <chrono>  // for operator-, milliseconds, operator<=>, duration, common_type<>::type, time_point
-#include <compare>  // for operator>=, strong_ordering
+#include <chrono>  // for operator-, milliseconds, operator>=, duration, common_type<>::type, time_point
 #include <csignal>  // for signal, SIGTSTP, SIGABRT, SIGWINCH, raise, SIGFPE, SIGILL, SIGINT, SIGSEGV, SIGTERM, __sighandler_t, size_t
 #include <cstdio>   // for fileno, stdin
 #include <ftxui/component/task.hpp>  // for Task, Closure, AnimationTask