diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9a29059a..50720440 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,18 @@
+Version 189:
+
+* Add CppCon2018 chat server example and video
+
+--------------------------------------------------------------------------------
+
+Version 188:
+
+* Remove extraneous strand from example
+* Add missing include in http/read.ipp
+* Test for gcc warning bug
+* Fix a spurious gcc warning
+
+--------------------------------------------------------------------------------
+
Version 187:
* Add experimental timeout_socket
diff --git a/README.md b/README.md
index d56ad696..23d5b620 100644
--- a/README.md
+++ b/README.md
@@ -43,11 +43,11 @@ This library is designed for:
## Appearances
-| Bishop Fox 2018 |
-| ------------ |
-| |
+| CppCon 2018 | Bishop Fox 2018 |
+| ------------ | ------------ |
+| | |
-| CppCon 2017 | CppCast 2017 | CppCon 2016 |
+| CppCon 2017 | CppCast 2017 | CppCon 2016 |
| ------------ | ------------ | ----------- |
| | | |
diff --git a/doc/qbk/02_examples.qbk b/doc/qbk/02_examples.qbk
index 55363bd9..03eca696 100644
--- a/doc/qbk/02_examples.qbk
+++ b/doc/qbk/02_examples.qbk
@@ -201,6 +201,28 @@ and illustrate the implementation of advanced features.
+[section CppCon 2018]
+
+This talk was given at [@https://cppcon.org CppCon 2018]. In this
+presentation, we develop a multi-user chat server written in C++ using
+Beast WebSocket, which uses a provided chat client written in HTML and
+JavaScript. The source files for this example are located at
+[source_file example/cppcon2018].
+
+
+[block'''
+
+
+
+
+
+''']
+
+[endsect]
+
+
+
[section Common Files]
Some of the examples use one or more shared header files, they are
diff --git a/doc/qbk/06_websocket.qbk b/doc/qbk/06_websocket.qbk
index a5413a8d..5d00e645 100644
--- a/doc/qbk/06_websocket.qbk
+++ b/doc/qbk/06_websocket.qbk
@@ -29,13 +29,13 @@ Boost.Asio with a consistent asynchronous model using a modern C++ approach.
[ws_snippet_1]
]
-[include 06_websocket/1_streams.qbk]
-[include 06_websocket/2_connect.qbk]
-[include 06_websocket/3_client.qbk]
-[include 06_websocket/4_server.qbk]
-[include 06_websocket/5_messages.qbk]
-[include 06_websocket/6_control.qbk]
-[include 06_websocket/7_teardown.qbk]
-[include 06_websocket/8_notes.qbk]
+[include 06_websocket/01_streams.qbk]
+[include 06_websocket/02_connect.qbk]
+[include 06_websocket/03_client.qbk]
+[include 06_websocket/04_server.qbk]
+[include 06_websocket/05_messages.qbk]
+[include 06_websocket/06_control.qbk]
+[include 06_websocket/07_teardown.qbk]
+[include 06_websocket/08_notes.qbk]
[endsect]
diff --git a/doc/qbk/06_websocket/1_streams.qbk b/doc/qbk/06_websocket/01_streams.qbk
similarity index 100%
rename from doc/qbk/06_websocket/1_streams.qbk
rename to doc/qbk/06_websocket/01_streams.qbk
diff --git a/doc/qbk/06_websocket/2_connect.qbk b/doc/qbk/06_websocket/02_connect.qbk
similarity index 100%
rename from doc/qbk/06_websocket/2_connect.qbk
rename to doc/qbk/06_websocket/02_connect.qbk
diff --git a/doc/qbk/06_websocket/3_client.qbk b/doc/qbk/06_websocket/03_client.qbk
similarity index 100%
rename from doc/qbk/06_websocket/3_client.qbk
rename to doc/qbk/06_websocket/03_client.qbk
diff --git a/doc/qbk/06_websocket/4_server.qbk b/doc/qbk/06_websocket/04_server.qbk
similarity index 100%
rename from doc/qbk/06_websocket/4_server.qbk
rename to doc/qbk/06_websocket/04_server.qbk
diff --git a/doc/qbk/06_websocket/5_messages.qbk b/doc/qbk/06_websocket/05_messages.qbk
similarity index 100%
rename from doc/qbk/06_websocket/5_messages.qbk
rename to doc/qbk/06_websocket/05_messages.qbk
diff --git a/doc/qbk/06_websocket/6_control.qbk b/doc/qbk/06_websocket/06_control.qbk
similarity index 100%
rename from doc/qbk/06_websocket/6_control.qbk
rename to doc/qbk/06_websocket/06_control.qbk
diff --git a/doc/qbk/06_websocket/7_teardown.qbk b/doc/qbk/06_websocket/07_teardown.qbk
similarity index 100%
rename from doc/qbk/06_websocket/7_teardown.qbk
rename to doc/qbk/06_websocket/07_teardown.qbk
diff --git a/doc/qbk/06_websocket/8_notes.qbk b/doc/qbk/06_websocket/08_notes.qbk
similarity index 100%
rename from doc/qbk/06_websocket/8_notes.qbk
rename to doc/qbk/06_websocket/08_notes.qbk
diff --git a/doc/qbk/09_releases.qbk b/doc/qbk/09_releases.qbk
index 0684b18e..8dbba163 100644
--- a/doc/qbk/09_releases.qbk
+++ b/doc/qbk/09_releases.qbk
@@ -9,14 +9,27 @@
[section Release Notes]
-
-
[heading Boost 1.69]
+[* New Videos]
+
+[block'''
+
+
+
+
+
+''']
+
[* New Features]
* ([issue 1133]) Add `BOOST_BEAST_USE_STD_STRING_VIEW`
+[* Examples]
+
+* New WebSocket server and browser-based client: [source_file example/cppcon2018]
+
[*Fixes]
* ([issue 1245]) Fix a rare case of incorrect UTF8 validation
diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt
index 950c29db..c2704007 100644
--- a/example/CMakeLists.txt
+++ b/example/CMakeLists.txt
@@ -8,6 +8,7 @@
#
add_subdirectory (advanced)
+add_subdirectory (cppcon2018)
add_subdirectory (http)
add_subdirectory (websocket)
diff --git a/example/Jamfile b/example/Jamfile
index cccbfe4b..be63be5f 100644
--- a/example/Jamfile
+++ b/example/Jamfile
@@ -8,6 +8,7 @@
#
build-project advanced ;
+build-project cppcon2018 ;
build-project http ;
build-project websocket ;
diff --git a/example/cppcon2018/CMakeLists.txt b/example/cppcon2018/CMakeLists.txt
new file mode 100644
index 00000000..c4d938e8
--- /dev/null
+++ b/example/cppcon2018/CMakeLists.txt
@@ -0,0 +1,37 @@
+#
+# Copyright (c) 2016-2017 Vinnie Falco (vinnie dot falco at gmail dot com)
+#
+# Distributed under the Boost Software License, Version 1.0. (See accompanying
+# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#
+# Official repository: https://github.com/boostorg/beast
+#
+
+GroupSources(include/boost/beast beast)
+GroupSources(example/cppcon2018 "/")
+
+file (GLOB APP_FILES
+ beast.hpp
+ http_session.cpp
+ http_session.hpp
+ Jamfile
+ listener.cpp
+ listener.hpp
+ main.cpp
+ net.hpp
+ shared_state.cpp
+ shared_state.hpp
+ websocket_session.cpp
+ websocket_session.hpp
+ chat_client.html
+ README.md
+)
+
+source_group ("" FILES ${APP_FILES})
+
+add_executable (websocket-chat-server
+ ${APP_FILES}
+ ${BOOST_BEAST_FILES}
+)
+
+set_property(TARGET websocket-chat-server PROPERTY FOLDER "example-cppcon2018")
diff --git a/example/cppcon2018/Jamfile b/example/cppcon2018/Jamfile
new file mode 100644
index 00000000..a22014e9
--- /dev/null
+++ b/example/cppcon2018/Jamfile
@@ -0,0 +1,19 @@
+#
+# Copyright (c) 2016-2017 Vinnie Falco (vinnie dot falco at gmail dot com)
+#
+# Distributed under the Boost Software License, Version 1.0. (See accompanying
+# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#
+# Official repository: https://github.com/boostorg/beast
+#
+
+exe websocket-chat-server :
+ http_session.cpp
+ listener.cpp
+ main.cpp
+ shared_state.cpp
+ websocket_session.cpp
+ :
+ coverage:no
+ ubasan:no
+ ;
diff --git a/example/cppcon2018/README.md b/example/cppcon2018/README.md
new file mode 100644
index 00000000..4e62b87a
--- /dev/null
+++ b/example/cppcon2018/README.md
@@ -0,0 +1,23 @@
+*This repository contains the presentation file and compiling
+source code for the CppCon2018 talk.*
+
+# Get Rich Quick! Using Boost.Beast WebSockets and Networking TS
+
+Do you want to make a lot of money? You'll see some examples of free
+browser and server based WebSocket programs which have earned their
+respective individual authors tens of millions of dollars in no time
+at all. Perhaps after seeing this talk in person, you'll write the
+next massively successful WebSocket app!
+
+The WebSocket protocol powers the interactive web by enabling two-way
+messaging between the browser and the web server. The Boost.Beast
+library implements this protocol on top of the industry standard
+Boost.Asio library which models the Networking Technical Specification
+proposed for the ISO C++ Standard.
+
+This presentation introduces Networking TS concepts and algorithms,
+how to read their requirements, and how to use them in your programs.
+We will build from scratch a multi-user chat server in C++11 using
+Beast, and the corresponding browser-based chat client in HTML and
+JavaScript. No prior knowledge or understanding of Beast or Asio is
+required, the talk is suited for everyone.
diff --git a/example/cppcon2018/beast.hpp b/example/cppcon2018/beast.hpp
new file mode 100644
index 00000000..d24e24a5
--- /dev/null
+++ b/example/cppcon2018/beast.hpp
@@ -0,0 +1,19 @@
+//
+// Copyright (c) 2018 Vinnie Falco (vinnie dot falco at gmail dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// Official repository: https://github.com/vinniefalco/CppCon2018
+//
+
+#ifndef CPPCON2018_BEAST_HPP
+#define CPPCON2018_BEAST_HPP
+
+#include
+
+namespace beast = boost::beast;
+namespace http = boost::beast::http; // from
+namespace websocket = boost::beast::websocket; // from
+
+#endif
diff --git a/example/cppcon2018/chat_client.html b/example/cppcon2018/chat_client.html
new file mode 100644
index 00000000..3913a069
--- /dev/null
+++ b/example/cppcon2018/chat_client.html
@@ -0,0 +1,57 @@
+
+
+
+
+ WebSocket Chat - CppCon2018
+
+
+