diff --git a/.github/actions/on_device_tests/action.yaml b/.github/actions/on_device_tests/action.yaml
index d07f984..7b9ef1e 100644
--- a/.github/actions/on_device_tests/action.yaml
+++ b/.github/actions/on_device_tests/action.yaml
@@ -43,7 +43,7 @@
           echo "USE_SHARDING=1" >> $GITHUB_ENV
         fi
       shell: bash
-    - name: trigger ${{ env.SHARD_NAME }} tests on ${{ matrix.platform }} platform
+    - name: run ${{ env.SHARD_NAME }} tests on ${{ matrix.platform }} platform
       env:
         GITHUB_SHA: ${{ github.sha }}
         GITHUB_TOKEN: ${{ github.token }}
@@ -59,44 +59,30 @@
         GITHUB_COMMIT_AUTHOR_EMAIL: ${{ github.event.commits[0].author.email }}
       run: |
         set -uxe
-        SESSION_ID=$(
-          python3 tools/on_device_tests_gateway_client.py \
-            --token ${GITHUB_TOKEN} \
-            --change_id "${GITHUB_PR_HEAD_SHA:-$GITHUB_SHA}" \
-            trigger \
-            --test_type ${{ env.TEST_TYPE }} \
-            --platform ${{ matrix.target_platform }} \
-            --config ${{ matrix.config }} \
-            --tag cobalt_github_${GITHUB_EVENT_NAME} \
-            --builder_name github_${{ matrix.platform }}_tests \
-            --build_number ${GITHUB_RUN_NUMBER} \
-            ${LOADER_PLATFORM:+"--loader_config" "$LOADER_CONFIG"} \
-            ${LOADER_PLATFORM:+"--loader_platform" "$LOADER_PLATFORM"} \
-            ${DIMENSION:+"--dimension" "$DIMENSION"} \
-            ${USE_SHARDING:+"--unittest_shard_index" "${{ matrix.shard }}"} \
-            ${ON_DEVICE_TEST_ATTEMPTS:+"--test_attempts" "$ON_DEVICE_TEST_ATTEMPTS"} \
-            --archive_path gs://${PROJECT_NAME}-test-artifacts/${WORKFLOW}/${GITHUB_RUN_NUMBER}/${{ matrix.platform }}_${{ matrix.config }}/artifacts.tar \
-            --label github \
-            --label ${GITHUB_EVENT_NAME} \
-            --label ${WORKFLOW} \
-            --label actor-${GITHUB_ACTOR} \
-            --label actor_id-${GITHUB_ACTOR_ID} \
-            --label triggering_actor-${GITHUB_TRIGGERING_ACTOR} \
-            --label sha-${GITHUB_SHA} \
-            --label repository-${GITHUB_REPO} \
-            --label author-${GITHUB_PR_HEAD_USER_LOGIN:-$GITHUB_COMMIT_AUTHOR_USERNAME} \
-            --label author_id-${GITHUB_PR_HEAD_USER_ID:-$GITHUB_COMMIT_AUTHOR_EMAIL}
-        )
-        echo "SESSION_ID=$SESSION_ID" >> $GITHUB_ENV
-      shell: bash
-    - name: watch ${{ env.SHARD_NAME }} tests on ${{ matrix.platform }} platform
-      env:
-        GITHUB_TOKEN: ${{ github.token }}
-        GITHUB_SHA: ${{ github.sha }}
-      run: |
-        set -uxe
         python3 tools/on_device_tests_gateway_client.py \
-          --token "${GITHUB_TOKEN}" \
-          --change_id "${GITHUB_SHA}" \
-          watch ${{ env.SESSION_ID }}
+          --token ${GITHUB_TOKEN} \
+          --change_id "${GITHUB_PR_HEAD_SHA:-$GITHUB_SHA}" \
+          trigger \
+          --test_type ${{ env.TEST_TYPE }} \
+          --platform ${{ matrix.target_platform }} \
+          --config ${{ matrix.config }} \
+          --tag cobalt_github_${GITHUB_EVENT_NAME} \
+          --builder_name github_${{ matrix.platform }}_tests \
+          --build_number ${GITHUB_RUN_NUMBER} \
+          ${LOADER_PLATFORM:+"--loader_config" "$LOADER_CONFIG"} \
+          ${LOADER_PLATFORM:+"--loader_platform" "$LOADER_PLATFORM"} \
+          ${DIMENSION:+"--dimension" "$DIMENSION"} \
+          ${USE_SHARDING:+"--unittest_shard_index" "${{ matrix.shard }}"} \
+          ${ON_DEVICE_TEST_ATTEMPTS:+"--test_attempts" "$ON_DEVICE_TEST_ATTEMPTS"} \
+          --archive_path gs://${PROJECT_NAME}-test-artifacts/${WORKFLOW}/${GITHUB_RUN_NUMBER}/${{ matrix.platform }}_${{ matrix.config }}/artifacts.tar \
+          --label github \
+          --label ${GITHUB_EVENT_NAME} \
+          --label ${WORKFLOW} \
+          --label actor-${GITHUB_ACTOR} \
+          --label actor_id-${GITHUB_ACTOR_ID} \
+          --label triggering_actor-${GITHUB_TRIGGERING_ACTOR} \
+          --label sha-${GITHUB_SHA} \
+          --label repository-${GITHUB_REPO} \
+          --label author-${GITHUB_PR_HEAD_USER_LOGIN:-$GITHUB_COMMIT_AUTHOR_USERNAME} \
+          --label author_id-${GITHUB_PR_HEAD_USER_ID:-$GITHUB_COMMIT_AUTHOR_EMAIL}
       shell: bash
diff --git a/.github/config/linux-clang-3-9.json b/.github/config/linux-clang-3-9.json
index 59bcc19..f994506 100644
--- a/.github/config/linux-clang-3-9.json
+++ b/.github/config/linux-clang-3-9.json
@@ -10,7 +10,7 @@
       "name":"clang-3-9",
       "platform":"linux-x64x11-clang-3-9",
       "target_platform":"linux-x64x11-clang-3-9",
-      "extra_gn_arguments":"using_old_compiler=true"
+      "extra_gn_arguments":"using_old_compiler=true build_with_separate_cobalt_toolchain=true"
     }
   ]
 }
diff --git a/.github/config/linux-gcc-6-3.json b/.github/config/linux-gcc-6-3.json
index 9b65750..4223ca8 100644
--- a/.github/config/linux-gcc-6-3.json
+++ b/.github/config/linux-gcc-6-3.json
@@ -1,5 +1,7 @@
 {
   "docker_service": "build-linux-gcc",
+  "on_host_test": true,
+  "on_host_test_shards": ["0", "1", "2", "3", "blackbox", "wpt"],
   "platforms": [
     "linux-x64x11-gcc-6-3"
   ],
@@ -8,7 +10,7 @@
       "name":"gcc-6-3",
       "platform":"linux-x64x11-gcc-6-3",
       "target_platform":"linux-x64x11-gcc-6-3",
-      "extra_gn_arguments":"is_clang=false using_old_compiler=true"
+      "extra_gn_arguments":"using_old_compiler=true build_with_separate_cobalt_toolchain=true"
     }
   ]
 }
diff --git a/.github/release.yml b/.github/release.yml
new file mode 100644
index 0000000..d8d6482
--- /dev/null
+++ b/.github/release.yml
@@ -0,0 +1,4 @@
+changelog:
+  exclude:
+    labels:
+      - ignore-for-release
diff --git a/.github/workflows/linux_24.lts.1+.yaml b/.github/workflows/linux_24.lts.1+.yaml
index c5a684a..46a0da6 100644
--- a/.github/workflows/linux_24.lts.1+.yaml
+++ b/.github/workflows/linux_24.lts.1+.yaml
@@ -36,6 +36,7 @@
     with:
       platform: linux-clang-3-9
       nightly: ${{ github.event.inputs.nightly }}
+      modular: true
   linux-gcc-6-3:
     uses: ./.github/workflows/main.yaml
     permissions:
@@ -44,6 +45,7 @@
     with:
       platform: linux-gcc-6-3
       nightly: ${{ github.event.inputs.nightly }}
+      modular: true
   # TODO(b/285632780): Enable blackbox tests for modular linux workflows.
   linux-modular:
     uses: ./.github/workflows/main.yaml
diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml
index b34f41e..9ccebb8 100644
--- a/.github/workflows/main.yaml
+++ b/.github/workflows/main.yaml
@@ -47,7 +47,7 @@
   STARBOARD_TOOLCHAINS_DIR: /root/starboard-toolchains
 
 concurrency:
-  group: '${{ github.workflow }}-${{ github.event_name }}-${{ inputs.platform }} @ ${{ github.event.pull_request.number || github.sha }}'
+  group: '${{ github.workflow }}-${{ github.event_name }}-${{ github.event.action }}-${{ inputs.platform }} @ ${{ github.event.pull_request.number || github.sha }}'
   cancel-in-progress: true
 
 # A workflow run is made up of one or more jobs that can run sequentially or in parallel
@@ -119,7 +119,7 @@
   # Builds, tags, and pushes Cobalt docker build images to ghr.
   docker-build-image:
     needs: [initialize]
-    runs-on: [self-hosted, linux, X64]
+    runs-on: [self-hosted, linux-runner]
     permissions:
       packages: write
     steps:
@@ -154,7 +154,7 @@
     needs: [initialize]
     permissions:
       packages: write
-    runs-on: [self-hosted, linux, X64]
+    runs-on: [self-hosted, linux-runner]
     steps:
       - name: Checkout files
         uses: kaidokert/checkout@v3.5.999
@@ -185,7 +185,7 @@
   build:
     needs: [initialize, docker-build-image]
     permissions: {}
-    runs-on: [self-hosted, linux, X64]
+    runs-on: [self-hosted, linux-runner]
     name: ${{matrix.name}}_${{matrix.config}}
     strategy:
       fail-fast: false
@@ -267,7 +267,7 @@
             inputs.nightly == 'true' || github.event_name == 'schedule') &&
             vars.RUN_ODT_TESTS_ON_NIGHTLY != 'False') ||
           ( github.event_name == 'push' && vars.RUN_ODT_TESTS_ON_POSTSUBMIT != 'False' ) )
-    runs-on: [self-hosted, linux, X64]
+    runs-on: [self-hosted, odt-runner]
     name: ${{ matrix.name }}_on_device_${{ matrix.shard }}
     container: ${{ needs.docker-unittest-image.outputs.docker_unittest_tag }}
     permissions: {}
@@ -296,7 +296,7 @@
     needs: [initialize, docker-unittest-image, build]
     permissions: {}
     if: needs.initialize.outputs.on_host_test == 'true'
-    runs-on: [self-hosted, linux, X64]
+    runs-on: [self-hosted, linux-runner]
     name: ${{matrix.name}}_${{matrix.shard}}_test
     strategy:
       fail-fast: false
diff --git a/.github/workflows/main_win.yaml b/.github/workflows/main_win.yaml
index 798394c..b1a121e 100644
--- a/.github/workflows/main_win.yaml
+++ b/.github/workflows/main_win.yaml
@@ -38,7 +38,7 @@
   STARBOARD_TOOLCHAINS_DIR: /root/starboard-toolchains
 
 concurrency:
-  group: '${{ github.workflow }}-${{ github.event_name }}-${{ inputs.platform }} @ ${{ github.event.pull_request.number || github.sha }}'
+  group: '${{ github.workflow }}-${{ github.event_name }}-${{ github.event.action }}-${{ inputs.platform }} @ ${{ github.event.pull_request.number || github.sha }}'
   cancel-in-progress: true
 
 # A workflow run is made up of one or more jobs that can run sequentially or in parallel
diff --git a/base/BUILD.gn b/base/BUILD.gn
index fbfd6b0..3617d54 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -1562,7 +1562,7 @@
     deps += [
       "//nb",
       "//starboard/common",
-      "//starboard",
+      "//starboard:starboard_group",
       "//starboard/client_porting/eztime",
     ]
     deps -= [
diff --git a/base/files/file.cc b/base/files/file.cc
index 36ae965..db43fad 100644
--- a/base/files/file.cc
+++ b/base/files/file.cc
@@ -64,7 +64,13 @@
       tracing_path_(other.tracing_path_),
       error_details_(other.error_details()),
       created_(other.created()),
-      async_(other.async_) {}
+      async_(other.async_)
+#if defined(STARBOARD)
+      ,
+      append_(other.append_)
+#endif
+{
+}
 
 File::~File() {
   // Go through the AssertIOAllowed logic.
@@ -78,6 +84,9 @@
   error_details_ = other.error_details();
   created_ = other.created();
   async_ = other.async_;
+#if defined(STARBOARD)
+  append_ = other.append_;
+#endif
   return *this;
 }
 
diff --git a/base/files/file.h b/base/files/file.h
index 336fe37..443abf8 100644
--- a/base/files/file.h
+++ b/base/files/file.h
@@ -380,7 +380,7 @@
   bool async_;
 
 #if defined(STARBOARD)
-  bool append_;
+  bool append_ = false;
 #endif
 
   DISALLOW_COPY_AND_ASSIGN(File);
diff --git a/base/i18n/icu_util.cc b/base/i18n/icu_util.cc
index 5a812c7..dccc1ac 100644
--- a/base/i18n/icu_util.cc
+++ b/base/i18n/icu_util.cc
@@ -52,7 +52,7 @@
 #if defined(STARBOARD)
 
 bool InitializeICU() {
-  SbIcuInit();
+  IcuInit();
   return true;
 }
 
diff --git a/base/test/BUILD.gn b/base/test/BUILD.gn
index a4e3b91..dbfb550 100644
--- a/base/test/BUILD.gn
+++ b/base/test/BUILD.gn
@@ -378,7 +378,9 @@
   }
 }
 
-static_library("run_all_unittests") {
+# TODO: b/315170518 - Revert to static library after fixing
+# symbol visibility issues for windows based modular platform builds.
+source_set("run_all_unittests") {
   testonly = true
   sources = [
     "run_all_unittests.cc",
diff --git a/build/toolchain/gcc_toolchain.gni b/build/toolchain/gcc_toolchain.gni
index 2a2cc3c..02218b6 100644
--- a/build/toolchain/gcc_toolchain.gni
+++ b/build/toolchain/gcc_toolchain.gni
@@ -12,6 +12,10 @@
 import("//build/toolchain/rbe.gni")
 import("//build/toolchain/toolchain.gni")
 
+if (use_cobalt_customizations) {
+  import("//starboard/build/config/os_definitions.gni")
+}
+
 if (is_nacl) {
   # To keep NaCl variables out of builds that don't include NaCl, all
   # variables defined in nacl/config.gni referenced here should be protected by
@@ -609,7 +613,12 @@
       if (using_old_compiler) {
         link_command = "$ld {{ldflags}}${extra_ldflags} -o \"$unstripped_outfile\" $start_group_flag @\"$rspfile\" {{solibs}} $end_group_flag {{libs}} $tail_lib_dependencies"
       } else {
-        link_command = "$ld {{ldflags}}${extra_ldflags} {{libs}} -o \"$unstripped_outfile\" $start_group_flag @\"$rspfile\" {{solibs}} $end_group_flag$tail_lib_dependencies"
+        # Windows based platform modular builds dont link directly with the shared library.
+        if (is_host_win && sb_is_modular) {
+          link_command = "$ld {{ldflags}}${extra_ldflags} {{libs}} -o \"$unstripped_outfile\" $start_group_flag @\"$rspfile\"  $end_group_flag$tail_lib_dependencies"
+        } else {
+          link_command = "$ld {{ldflags}}${extra_ldflags} {{libs}} -o \"$unstripped_outfile\" $start_group_flag @\"$rspfile\" {{solibs}} $end_group_flag$tail_lib_dependencies"
+        }
       }
 
       # Generate a map file to be used for binary size analysis.
diff --git a/cobalt/base/BUILD.gn b/cobalt/base/BUILD.gn
index f2652cc..1f78912 100644
--- a/cobalt/base/BUILD.gn
+++ b/cobalt/base/BUILD.gn
@@ -122,7 +122,7 @@
   deps = [
     ":base",
     "//cobalt/test:run_all_unittests",
-    "//starboard",
+    "//starboard:starboard_group",
     "//testing/gmock",
     "//testing/gtest",
   ]
diff --git a/cobalt/bindings/_env.py b/cobalt/bindings/_env.py
deleted file mode 100644
index 4b705c2..0000000
--- a/cobalt/bindings/_env.py
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# Copyright 2017 The Cobalt Authors. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-"""Sets PYTHONPATH for third_party/blink modules to work correctly."""
-
-from os import path
-import sys
-
-_REPO_ROOT = path.abspath(
-    path.join(path.dirname(__file__), path.pardir, path.pardir))
-_BLINK_PATHS = [
-    path.join(_REPO_ROOT, 'third_party', 'blink', 'Tools', 'Scripts'),
-    path.join(_REPO_ROOT, 'third_party', 'blink', 'Source', 'bindings',
-              'scripts'),
-]
-
-if _REPO_ROOT not in sys.path:
-  sys.path.insert(0, _REPO_ROOT)
-
-for path in _BLINK_PATHS:
-  if path not in sys.path:
-    sys.path.append(path)
diff --git a/cobalt/bindings/code_generator_cobalt.py b/cobalt/bindings/code_generator_cobalt.py
index 6756410..18f0a15 100644
--- a/cobalt/bindings/code_generator_cobalt.py
+++ b/cobalt/bindings/code_generator_cobalt.py
@@ -22,7 +22,12 @@
 import os
 import sys
 
-import _env  # pylint: disable=unused-import
+bindings_dir = os.path.join(
+    os.path.dirname(__file__),
+    '../../third_party/blink/Source/bindings/scripts')
+sys.path.insert(0, bindings_dir)
+
+# pylint:disable=wrong-import-position
 from cobalt.bindings import path_generator
 from cobalt.bindings.contexts import ContextBuilder
 from cobalt.bindings.name_conversion import get_interface_name
diff --git a/cobalt/bindings/contexts.py b/cobalt/bindings/contexts.py
index 7cdbea0..4f4543a 100644
--- a/cobalt/bindings/contexts.py
+++ b/cobalt/bindings/contexts.py
@@ -18,7 +18,6 @@
 dicts that will be used by Jinja in JS bindings generation.
 """
 
-import _env  # pylint: disable=unused-import
 from cobalt.bindings.name_conversion import capitalize_function_name
 from cobalt.bindings.name_conversion import convert_to_cobalt_constant_name
 from cobalt.bindings.name_conversion import convert_to_cobalt_enumeration_value
diff --git a/cobalt/bindings/flatten_idls_test.py b/cobalt/bindings/flatten_idls_test.py
index 0401c72..eea743e 100644
--- a/cobalt/bindings/flatten_idls_test.py
+++ b/cobalt/bindings/flatten_idls_test.py
@@ -20,7 +20,6 @@
 import platform
 import unittest
 
-from . import _env  # pylint: disable=unused-import
 from cobalt.bindings import flatten_idls
 
 
diff --git a/cobalt/bindings/generate_conversion_header.py b/cobalt/bindings/generate_conversion_header.py
index 69d0c1e..e7822f0 100644
--- a/cobalt/bindings/generate_conversion_header.py
+++ b/cobalt/bindings/generate_conversion_header.py
@@ -20,7 +20,14 @@
 from optparse import OptionParser  # pylint: disable=deprecated-module
 import os
 import pickle
+import sys
 
+bindings_dir = os.path.join(
+    os.path.dirname(__file__),
+    '../../third_party/blink/Source/bindings/scripts')
+sys.path.insert(0, bindings_dir)
+
+# pylint:disable=wrong-import-position
 from utilities import ComponentInfoProviderCobalt
 from utilities import write_file
 
diff --git a/cobalt/bindings/idl_compiler_cobalt.py b/cobalt/bindings/idl_compiler_cobalt.py
index 6b8c09d..fa2622f 100644
--- a/cobalt/bindings/idl_compiler_cobalt.py
+++ b/cobalt/bindings/idl_compiler_cobalt.py
@@ -21,7 +21,6 @@
 import os
 import pickle
 
-import _env  # pylint: disable=unused-import
 from idl_compiler import IdlCompiler
 from utilities import ComponentInfoProviderCobalt
 from utilities import idl_filename_to_interface_name
diff --git a/cobalt/bindings/path_generator_test.py b/cobalt/bindings/path_generator_test.py
index a6f2ce0..65cacaf 100644
--- a/cobalt/bindings/path_generator_test.py
+++ b/cobalt/bindings/path_generator_test.py
@@ -16,7 +16,6 @@
 
 import unittest
 
-from . import _env  # pylint: disable=unused-import
 from cobalt.bindings.path_generator import PathBuilder
 
 
diff --git a/cobalt/bindings/run_cobalt_bindings_tests.py b/cobalt/bindings/run_cobalt_bindings_tests.py
index b843085..2bcc26b 100755
--- a/cobalt/bindings/run_cobalt_bindings_tests.py
+++ b/cobalt/bindings/run_cobalt_bindings_tests.py
@@ -25,7 +25,6 @@
 import argparse
 import os
 import sys
-import _env  # pylint: disable=unused-import
 
 from cobalt.bindings.idl_compiler_cobalt import IdlCompilerCobalt
 from cobalt.bindings.v8c.code_generator_v8c import CodeGeneratorV8c
diff --git a/cobalt/bindings/v8c/_env.py b/cobalt/bindings/v8c/_env.py
deleted file mode 100644
index ea1f9b1..0000000
--- a/cobalt/bindings/v8c/_env.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# Copyright 2017 The Cobalt Authors. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-"""Ask the parent directory to load the project environment."""
-
-from imp import load_source  # pylint: disable=deprecated-module
-from os import path
-import sys
-
-_ENV = path.abspath(path.join(path.dirname(__file__), path.pardir, '_env.py'))
-if not path.exists(_ENV):
-  print(f'{__file__}: Can\'t find repo root.\nMissing parent: {_ENV}')
-  sys.exit(1)
-load_source('', _ENV)
diff --git a/cobalt/bindings/v8c/generate_conversion_header_v8c.py b/cobalt/bindings/v8c/generate_conversion_header_v8c.py
index c14dea7..4d48b39 100644
--- a/cobalt/bindings/v8c/generate_conversion_header_v8c.py
+++ b/cobalt/bindings/v8c/generate_conversion_header_v8c.py
@@ -15,7 +15,6 @@
 
 import sys
 
-import _env  # pylint: disable=unused-import
 from cobalt.bindings.generate_conversion_header import generate_header
 from cobalt.bindings.v8c.code_generator_v8c import CodeGeneratorV8c
 
diff --git a/cobalt/bindings/v8c/idl_compiler_v8c.py b/cobalt/bindings/v8c/idl_compiler_v8c.py
index 09ca3f4..da13a0e 100644
--- a/cobalt/bindings/v8c/idl_compiler_v8c.py
+++ b/cobalt/bindings/v8c/idl_compiler_v8c.py
@@ -19,8 +19,14 @@
 
 import logging
 import sys
+import os
 
-import _env  #pylint: disable=import-error,unused-import
+bindings_dir = os.path.join(
+    os.path.dirname(__file__),
+    '../../../third_party/blink/Source/bindings/scripts')
+sys.path.insert(0, bindings_dir)
+
+# pylint:disable=wrong-import-position
 from cobalt.bindings.idl_compiler_cobalt import generate_bindings
 from cobalt.bindings.v8c.code_generator_v8c import CodeGeneratorV8c
 
diff --git a/cobalt/black_box_tests/black_box_tests.py b/cobalt/black_box_tests/black_box_tests.py
index 2e86d0f..7dc6fd7 100755
--- a/cobalt/black_box_tests/black_box_tests.py
+++ b/cobalt/black_box_tests/black_box_tests.py
@@ -34,7 +34,6 @@
 from starboard.tools import log_level
 
 _DISABLED_BLACKBOXTEST_CONFIGS = [
-    'android-arm/devel',
     'android-arm64/devel',
     'android-x86/devel',
     'evergreen-arm/devel',
@@ -180,6 +179,9 @@
       loader_out_directory=launcher_params.loader_out_directory)
 
   test_targets = []
+  test_filters = build.GetPlatformConfig(
+      _launcher_params.platform).GetApplicationConfiguration(
+          'cobalt').GetTestFilters()
 
   if test_set in ['all', 'blackbox']:
     test_targets = _TESTS_NO_SIGNAL
@@ -195,8 +197,14 @@
 
   test_suite = unittest.TestSuite()
   for test in test_targets:
-    test_suite.addTest(unittest.TestLoader().loadTestsFromModule(
-        importlib.import_module(_TEST_DIR_PATH + test)))
+    filter_hit = 0
+    for filtered_test in test_filters:
+      if test == filtered_test.test_name:
+        filter_hit = 1
+        continue
+    if filter_hit == 0:
+      test_suite.addTest(unittest.TestLoader().loadTestsFromModule(
+          importlib.import_module(_TEST_DIR_PATH + test)))
   return test_suite
 
 
@@ -252,12 +260,13 @@
 
     # TODO: Remove generation of --dev_servers_listen_ip once executable will
     # be able to bind correctly with incomplete support of IPv6
-    if args.device_id and IsValidIpAddress(args.device_id):
-      _launcher_params.target_params.append(
-          f'--dev_servers_listen_ip={args.device_id}')
-    elif IsValidIpAddress(_server_binding_address):
-      _launcher_params.target_params.append(
-          f'--dev_servers_listen_ip={_server_binding_address}')
+    if _launcher_params.platform not in ['android-arm', 'android-arm64']:
+      if args.device_id and IsValidIpAddress(args.device_id):
+        _launcher_params.target_params.append(
+            f'--dev_servers_listen_ip={args.device_id}')
+      elif IsValidIpAddress(_server_binding_address):
+        _launcher_params.target_params.append(
+            f'--dev_servers_listen_ip={_server_binding_address}')
     _launcher_params.target_params.append(
         f'--web-platform-test-server=http://web-platform.test:{_wpt_http_port}')
 
diff --git a/cobalt/black_box_tests/testdata/persistent_cookie.html b/cobalt/black_box_tests/testdata/persistent_cookie.html
index d7e838f..f141b39 100644
--- a/cobalt/black_box_tests/testdata/persistent_cookie.html
+++ b/cobalt/black_box_tests/testdata/persistent_cookie.html
@@ -18,7 +18,12 @@
   <script>
     document.body.style.backgroundColor = "green";
     const persistent_cookie = "persistent_cookie_status=exists";
-    const persistent_cookie_expire_time = "; expires=Fri, 18 Dec 2023 12:00:00 UTC";
+
+    // Set the cookie expiration date 2 days in the future.
+    var cookie_date = new Date();
+    cookie_date.setDate(cookie_date.getDate() + 2 /*days*/);
+    const persistent_cookie_expire_time = "; expires=" + cookie_date;
+
     const very_old_date = "; expires=Fri, 18 Dec 2003 12:00:00 UTC";
 
     function firstRun() {
@@ -71,4 +76,4 @@
     }
     setupFinished();
   </script>
-</body>
\ No newline at end of file
+</body>
diff --git a/cobalt/browser/BUILD.gn b/cobalt/browser/BUILD.gn
index 9b7b12c..412247a 100644
--- a/cobalt/browser/BUILD.gn
+++ b/cobalt/browser/BUILD.gn
@@ -168,6 +168,7 @@
     "//cobalt/fetch",
     "//cobalt/h5vcc",
     "//cobalt/input",
+    "//cobalt/js_profiler",
     "//cobalt/layout",
     "//cobalt/loader",
     "//cobalt/math",
@@ -200,7 +201,7 @@
     "//crypto",
     "//nb",
     "//net",
-    "//starboard",
+    "//starboard:starboard_group",
     "//starboard/common",
     "//third_party/icu:icui18n",
     "//third_party/protobuf:protobuf_lite",
diff --git a/cobalt/browser/idl_files.gni b/cobalt/browser/idl_files.gni
index 41539c3..4eba479 100644
--- a/cobalt/browser/idl_files.gni
+++ b/cobalt/browser/idl_files.gni
@@ -255,6 +255,9 @@
   "//cobalt/xhr/xml_http_request.idl",
   "//cobalt/xhr/xml_http_request_event_target.idl",
   "//cobalt/xhr/xml_http_request_upload.idl",
+
+  "//cobalt/js_profiler/profiler.idl",
+  "//cobalt/js_profiler/profiler_trace_wrapper.idl",
 ]
 
 if (!is_gold) {
@@ -313,6 +316,11 @@
   "//cobalt/encoding/text_decode_options.idl",
   "//cobalt/encoding/text_decoder_options.idl",
   "//cobalt/encoding/text_encoder_encode_into_result.idl",
+  "//cobalt/js_profiler/profiler_frame.idl",
+  "//cobalt/js_profiler/profiler_init_options.idl",
+  "//cobalt/js_profiler/profiler_sample.idl",
+  "//cobalt/js_profiler/profiler_stack.idl",
+  "//cobalt/js_profiler/profiler_trace.idl",
   "//cobalt/h5vcc/h5vcc_crash_type.idl",
   "//cobalt/h5vcc/h5vcc_metric_type.idl",
   "//cobalt/h5vcc/h5vcc_storage_resource_type_quota_bytes_dictionary.idl",
diff --git a/cobalt/build/build_info.py b/cobalt/build/build_info.py
index 52f4494..51172fa 100755
--- a/cobalt/build/build_info.py
+++ b/cobalt/build/build_info.py
@@ -24,7 +24,7 @@
 FILE_DIR = os.path.dirname(__file__)
 COMMIT_COUNT_BUILD_ID_OFFSET = 1000000
 
-_BUILD_ID_PATTERN = '^BUILD_NUMBER=([1-9][0-9]{6,})$'
+_BUILD_ID_PATTERN = '^(Build-Id: |BUILD_NUMBER=)([1-9][0-9]{6,})$'
 _GIT_REV_PATTERN = '^GitOrigin-RevId: ([0-9a-f]{40})$'
 _COBALT_VERSION_PATTERN = '^#define COBALT_VERSION "(.*)"$'
 
@@ -40,7 +40,7 @@
   match_build_id = compiled_build_id_pattern.search(output)
   if not match_build_id:
     return None, None
-  build_id = match_build_id.group(1)
+  build_id = match_build_id.group(2)
 
   # Gets git rev.
   compiled_git_rev_pattern = re.compile(_GIT_REV_PATTERN, flags=re.MULTILINE)
diff --git a/cobalt/build/cobalt_configuration.py b/cobalt/build/cobalt_configuration.py
index ca1c943..3c499a4 100644
--- a/cobalt/build/cobalt_configuration.py
+++ b/cobalt/build/cobalt_configuration.py
@@ -143,6 +143,7 @@
         'persistent_settings_test',
         'png_utils_test',
         'poem_unittests',
+        'js_profiler_test',
         'renderer_test',
         'render_tree_test',
         'scroll_engine_tests',
@@ -158,3 +159,8 @@
         'xhr_test',
         'zip_unittests',
     ]
+
+  def GetTestBlackBoxTargets(self):
+    return [
+        'blackbox',
+    ]
diff --git a/cobalt/content/ssl/certs/349f2832.0 b/cobalt/content/ssl/certs/349f2832.0
deleted file mode 100644
index 87a13f6..0000000
--- a/cobalt/content/ssl/certs/349f2832.0
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB
-8zELMAkGA1UEBhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2Vy
-dGlmaWNhY2lvIChOSUYgUS0wODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1
-YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYDVQQLEyxWZWdldSBodHRwczovL3d3
-dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UECxMsSmVyYXJxdWlh
-IEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMTBkVD
-LUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQG
-EwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8g
-KE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBD
-ZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQu
-bmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMg
-ZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUNDMIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R
-85iKw5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm
-4CgPukLjbo73FCeTae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaV
-HMf5NLWUhdWZXqBIoH7nF2W4onW4HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNd
-QlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0aE9jD2z3Il3rucO2n5nzbcc8t
-lGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw0JDnJwIDAQAB
-o4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4
-opvpXY0wfwYDVR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBo
-dHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidW
-ZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAwDQYJKoZIhvcN
-AQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJlF7W2u++AVtd0x7Y
-/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNaAl6k
-SBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhy
-Rp/7SNVel+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOS
-Agu+TGbrIP65y7WZf+a2E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xl
-nJ2lYJU6Un/10asIbvPuW/mIPX64b24D5EI=
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/3e44d2f7.0 b/cobalt/content/ssl/certs/3e44d2f7.0
deleted file mode 100644
index aa392ab..0000000
--- a/cobalt/content/ssl/certs/3e44d2f7.0
+++ /dev/null
@@ -1,36 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNV
-BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw
-IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy
-dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEfMB0GA1UEAwwWVHJ1c3RDb3Ig
-Um9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEyMzExNzI2MzlaMIGk
-MQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEg
-Q2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYD
-VQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRy
-dXN0Q29yIFJvb3RDZXJ0IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK
-AoICAQCnIG7CKqJiJJWQdsg4foDSq8GbZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+
-QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9NkRvRUqdw6VC0xK5mC8tkq
-1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1oYxOdqHp
-2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nK
-DOObXUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hape
-az6LMvYHL1cEksr1/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF
-3wP+TfSvPd9cW436cOGlfifHhi5qjxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88
-oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQPeSghYA2FFn3XVDjxklb9tTNM
-g9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+CtgrKAmrhQhJ8Z3
-mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh
-8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAd
-BgNVHQ4EFgQU2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6U
-nrybPZx9mCAZ5YwwYrIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYw
-DQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/hOsh80QA9z+LqBrWyOrsGS2h60COX
-dKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnpkpfbsEZC89NiqpX+
-MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv2wnL
-/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RX
-CI/hOWB3S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYa
-ZH9bDTMJBzN7Bj8RpFxwPIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW
-2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dvDDqPys/cA8GiCcjl/YBeyGBCARsaU1q7
-N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYURpFHmygk71dSTlxCnKr3
-Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANExdqtvArB
-As8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp
-5KeXRKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu
-1uwJ
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/3e45d192.0 b/cobalt/content/ssl/certs/3e45d192.0
deleted file mode 100644
index a28e9a0..0000000
--- a/cobalt/content/ssl/certs/3e45d192.0
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx
-FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg
-Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG
-A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr
-b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ
-jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn
-PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh
-ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9
-nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h
-q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED
-MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC
-mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3
-7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB
-oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs
-EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO
-fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi
-AmvZWg==
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/40547a79.0 b/cobalt/content/ssl/certs/40547a79.0
index 6146dcb..dc99810 100644
--- a/cobalt/content/ssl/certs/40547a79.0
+++ b/cobalt/content/ssl/certs/40547a79.0
@@ -1,9 +1,9 @@
 -----BEGIN CERTIFICATE-----
-MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB
+MIID0DCCArigAwIBAgIQIKTEf93f4cdTYwcTiHdgEjANBgkqhkiG9w0BAQUFADCB
 gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
 A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
-BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw
-MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
+BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xMTAxMDEwMDAw
+MDBaFw0zMDEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
 YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
 RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0
 aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3
@@ -12,14 +12,12 @@
 Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp
 +2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+
 DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O
-nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW
-/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g
-PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u
-QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY
-SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv
-IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
-RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4
-zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd
-BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB
-ZQ==
+nKVIrLsm9wIDAQABo0IwQDAdBgNVHQ4EFgQUC1jli8ZMFTekQKkwqSG+RzZaVv8w
+DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
+ggEBAC/JxBwHO89hAgCx2SFRdXIDMLDEFh9sAIsQrK/xR9SuEDwMGvjUk2ysEDd8
+t6aDZK3N3w6HM503sMZ7OHKx8xoOo/lVem0DZgMXlUrxsXrfViEGQo+x06iF3u6X
+HWLrp+cxEmbDD6ZLLkGC9/3JG6gbr+48zuOcrigHoSybJMIPIyaDMouGDx8rEkYl
+Fo92kANr3ryqImhrjKGsKxE5pttwwn1y6TPn/CbxdFqR5p2ErPioBhlG5qfpqjQi
+pKGfeq23sqSaM4hxAjwu1nqyH6LKwN0vEJT9s4yEIHlG1QXUEOTS22RPuFvuG8Ug
+R1uUq27UlTMdphVx8fiUylQ5PsE=
 -----END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/4304c5e5.0 b/cobalt/content/ssl/certs/4304c5e5.0
deleted file mode 100644
index 11289bc..0000000
--- a/cobalt/content/ssl/certs/4304c5e5.0
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi
-MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
-MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp
-dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV
-UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO
-ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz
-c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP
-OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl
-mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF
-BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4
-qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw
-gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB
-BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu
-bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp
-dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8
-6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/
-h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH
-/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
-wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN
-pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/5860aaa6.0 b/cobalt/content/ssl/certs/5860aaa6.0
new file mode 100644
index 0000000..e52c5ee
--- /dev/null
+++ b/cobalt/content/ssl/certs/5860aaa6.0
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICODCCAb6gAwIBAgIJANZdm7N4gS7rMAoGCCqGSM49BAMDMGExCzAJBgNVBAYT
+AkpQMSUwIwYDVQQKExxTRUNPTSBUcnVzdCBTeXN0ZW1zIENPLixMVEQuMSswKQYD
+VQQDEyJTZWN1cml0eSBDb21tdW5pY2F0aW9uIEVDQyBSb290Q0ExMB4XDTE2MDYx
+NjA1MTUyOFoXDTM4MDExODA1MTUyOFowYTELMAkGA1UEBhMCSlAxJTAjBgNVBAoT
+HFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKzApBgNVBAMTIlNlY3VyaXR5
+IENvbW11bmljYXRpb24gRUNDIFJvb3RDQTEwdjAQBgcqhkjOPQIBBgUrgQQAIgNi
+AASkpW9gAwPDvTH00xecK4R1rOX9PVdu12O/5gSJko6BnOPpR27KkBLIE+Cnnfdl
+dB9sELLo5OnvbYUymUSxXv3MdhDYW72ixvnWQuRXdtyQwjWpS4g8EkdtXP9JTxpK
+ULGjQjBAMB0GA1UdDgQWBBSGHOf+LaVKiwj+KBH6vqNm+GBZLzAOBgNVHQ8BAf8E
+BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjAVXUI9/Lbu
+9zuxNuie9sRGKEkz0FhDKmMpzE2xtHqiuQ04pV1IKv3LsnNdo4gIxwwCMQDAqy0O
+be0YottT6SXbVQjgUMzfRGEWgqtJsLKB7HOHeLRMsmIbEvoWTSVLY70eN9k=
+-----END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/5a7722fb.0 b/cobalt/content/ssl/certs/5a7722fb.0
deleted file mode 100644
index 049a4da..0000000
--- a/cobalt/content/ssl/certs/5a7722fb.0
+++ /dev/null
@@ -1,17 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICpTCCAiqgAwIBAgIUJkYZdzHhT28oNt45UYbm1JeIIsEwCgYIKoZIzj0EAwMw
-gYAxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHEwZBbmthcmExGTAXBgNVBAoTEEUtVHVn
-cmEgRUJHIEEuUy4xHTAbBgNVBAsTFEUtVHVncmEgVHJ1c3QgQ2VudGVyMSYwJAYD
-VQQDEx1FLVR1Z3JhIEdsb2JhbCBSb290IENBIEVDQyB2MzAeFw0yMDAzMTgwOTQ2
-NThaFw00NTAzMTIwOTQ2NThaMIGAMQswCQYDVQQGEwJUUjEPMA0GA1UEBxMGQW5r
-YXJhMRkwFwYDVQQKExBFLVR1Z3JhIEVCRyBBLlMuMR0wGwYDVQQLExRFLVR1Z3Jh
-IFRydXN0IENlbnRlcjEmMCQGA1UEAxMdRS1UdWdyYSBHbG9iYWwgUm9vdCBDQSBF
-Q0MgdjMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASOmCm/xxAeJ9urA8woLNheSBkQ
-KczLWYHMjLiSF4mDKpL2w6QdTGLVn9agRtwcvHbB40fQWxPa56WzZkjnIZpKT4YK
-fWzqTTKACrJ6CZtpS5iB4i7sAnCWH/31Rs7K3IKjYzBhMA8GA1UdEwEB/wQFMAMB
-Af8wHwYDVR0jBBgwFoAU/4Ixcj75xGZsrTie0bBRiKWQzPUwHQYDVR0OBBYEFP+C
-MXI++cRmbK04ntGwUYilkMz1MA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNp
-ADBmAjEA5gVYaWHlLcoNy/EZCL3W/VGSGn5jVASQkZo1kTmZ+gepZpO6yGjUij/6
-7W4WAie3AjEA3VoXK3YdZUKWpqxdinlW2Iob35reX8dQj7FbcQwm32pAAOwzkSFx
-vmjkI6TZraE3
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/5d3033c5.0 b/cobalt/content/ssl/certs/5d3033c5.0
deleted file mode 100644
index 23969fe..0000000
--- a/cobalt/content/ssl/certs/5d3033c5.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYD
-VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk
-MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U
-cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29y
-IFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkxMjMxMTcyMzE2WjCB
-pDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFuYW1h
-IENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUG
-A1UECwweVHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZU
-cnVzdENvciBSb290Q2VydCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAv463leLCJhJrMxnHQFgKq1mqjQCj/IDHUHuO1CAmujIS2CNUSSUQIpid
-RtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4pQa81QBeCQryJ3pS/C3V
-seq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0JEsq1pme
-9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CV
-EY4hgLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorW
-hnAbJN7+KIor0Gqw/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/
-DeOxCbeKyKsZn3MzUOcwHwYDVR0jBBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcw
-DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD
-ggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5mDo4Nvu7Zp5I
-/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf
-ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZ
-yonnMlo2HD6CqFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djts
-L1Ac59v2Z3kf9YKVmgenFK+P3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdN
-zl/HHk484IkzlQsPpTLWPFp5LBk=
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/66445960.0 b/cobalt/content/ssl/certs/66445960.0
deleted file mode 100644
index 9592787..0000000
--- a/cobalt/content/ssl/certs/66445960.0
+++ /dev/null
@@ -1,34 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIF8zCCA9ugAwIBAgIUDU3FzRYilZYIfrgLfxUGNPt5EDQwDQYJKoZIhvcNAQEL
-BQAwgYAxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHEwZBbmthcmExGTAXBgNVBAoTEEUt
-VHVncmEgRUJHIEEuUy4xHTAbBgNVBAsTFEUtVHVncmEgVHJ1c3QgQ2VudGVyMSYw
-JAYDVQQDEx1FLVR1Z3JhIEdsb2JhbCBSb290IENBIFJTQSB2MzAeFw0yMDAzMTgw
-OTA3MTdaFw00NTAzMTIwOTA3MTdaMIGAMQswCQYDVQQGEwJUUjEPMA0GA1UEBxMG
-QW5rYXJhMRkwFwYDVQQKExBFLVR1Z3JhIEVCRyBBLlMuMR0wGwYDVQQLExRFLVR1
-Z3JhIFRydXN0IENlbnRlcjEmMCQGA1UEAxMdRS1UdWdyYSBHbG9iYWwgUm9vdCBD
-QSBSU0EgdjMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCiZvCJt3J7
-7gnJY9LTQ91ew6aEOErxjYG7FL1H6EAX8z3DeEVypi6Q3po61CBxyryfHUuXCscx
-uj7X/iWpKo429NEvx7epXTPcMHD4QGxLsqYxYdE0PD0xesevxKenhOGXpOhL9hd8
-7jwH7eKKV9y2+/hDJVDqJ4GohryPUkqWOmAalrv9c/SF/YP9f4RtNGx/ardLAQO/
-rWm31zLZ9Vdq6YaCPqVmMbMWPcLzJmAy01IesGykNz709a/r4d+ABs8qQedmCeFL
-l+d3vSFtKbZnwy1+7dZ5ZdHPOrbRsV5WYVB6Ws5OUDGAA5hH5+QYfERaxqSzO8bG
-wzrwbMOLyKSRBfP12baqBqG3q+Sx6iEUXIOk/P+2UNOMEiaZdnDpwA+mdPy70Bt4
-znKS4iicvObpCdg604nmvi533wEKb5b25Y08TVJ2Glbhc34XrD2tbKNSEhhw5oBO
-M/J+JjKsBY04pOZ2PJ8QaQ5tndLBeSBrW88zjdGUdjXnXVXHt6woq0bM5zshtQoK
-5EpZ3IE1S0SVEgpnpaH/WwAH0sDM+T/8nzPyAPiMbIedBi3x7+PmBvrFZhNb/FAH
-nnGGstpvdDDPk1Po3CLW3iAfYY2jLqN4MpBs3KwytQXk9TwzDdbgh3cXTJ2w2Amo
-DVf3RIXwyAS+XF1a4xeOVGNpf0l0ZAWMowIDAQABo2MwYTAPBgNVHRMBAf8EBTAD
-AQH/MB8GA1UdIwQYMBaAFLK0ruYt9ybVqnUtdkvAG1Mh0EjvMB0GA1UdDgQWBBSy
-tK7mLfcm1ap1LXZLwBtTIdBI7zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEL
-BQADggIBAImocn+M684uGMQQgC0QDP/7FM0E4BQ8Tpr7nym/Ip5XuYJzEmMmtcyQ
-6dIqKe6cLcwsmb5FJ+Sxce3kOJUxQfJ9emN438o2Fi+CiJ+8EUdPdk3ILY7r3y18
-Tjvarvbj2l0Upq7ohUSdBm6O++96SmotKygY/r+QLHUWnw/qln0F7psTpURs+APQ
-3SPh/QMSEgj0GDSz4DcLdxEBSL9htLX4GdnLTeqjjO/98Aa1bZL0SmFQhO3sSdPk
-vmjmLuMxC1QLGpLWgti2omU8ZgT5Vdps+9u1FGZNlIM7zR6mK7L+d0CGq+ffCsn9
-9t2HVhjYsCxVYJb6CH5SkPVLpi6HfMsg2wY+oF0Dd32iPBMbKaITVaA9FCKvb7jQ
-mhty3QUBjYZgv6Rn7rWlDdF/5horYmbDB7rnoEgcOMPpRfunf/ztAmgayncSd6YA
-VSgU7NbHEqIbZULpkejLPoeJVF3Zr52XnGnnCv8PWniLYypMfUeUP95L6VPQMPHF
-9p5J3zugkaOj/s1YzOrfr28oO6Bpm4/srK4rVJ2bBLFHIK+WEj5jlB0E5y67hscM
-moi/dkfv97ALl2bSRM9gUgfh1SxKOidhd8rXj+eHDjD/DLsE4mHDosiXYY60MGo8
-bcIHX0pzLz/5FooBZu+6kcpSV3uu1OYP3Qt6f4ueJiDPO++BcYNZ
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/7aaf71c0.0 b/cobalt/content/ssl/certs/7aaf71c0.0
deleted file mode 100644
index ba7bddb..0000000
--- a/cobalt/content/ssl/certs/7aaf71c0.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYD
-VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk
-MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U
-cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxFzAVBgNVBAMMDlRydXN0Q29y
-IEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3MjgwN1owgZwxCzAJBgNV
-BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw
-IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy
-dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3Ig
-RUNBLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb
-3w9U73NjKYKtR8aja+3+XzP4Q1HpGjORMRegdMTUpwHmspI+ap3tDvl0mEDTPwOA
-BoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23xFUfJ3zSCNV2HykVh0A5
-3ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmcp0yJF4Ou
-owReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/
-wZ0+fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZF
-ZtS6mFjBAgMBAAGjYzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAf
-BgNVHSMEGDAWgBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/
-MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAQEABT41XBVwm8nHc2Fv
-civUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u/ukZMjgDfxT2
-AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F
-hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50
-soIipX1TH0XsJ5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BI
-WJZpTdwHjFGTot+fDz2LYLSCjaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1Wi
-tJ/X5g==
------END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/9b46e03d.0 b/cobalt/content/ssl/certs/9b46e03d.0
new file mode 100644
index 0000000..b3d6014
--- /dev/null
+++ b/cobalt/content/ssl/certs/9b46e03d.0
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFZDCCA0ygAwIBAgIQU9XP5hmTC/srBRLYwiqipDANBgkqhkiG9w0BAQwFADBM
+MS4wLAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgUlNBIFRMUyAyMDIx
+MQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTIxMTBaFw00
+MTA0MTcwOTIxMDlaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBD
+QSBSU0EgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMIICIjAN
+BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtoAOxHm9BYx9sKOdTSJNy/BBl01Z
+4NH+VoyX8te9j2y3I49f1cTYQcvyAh5x5en2XssIKl4w8i1mx4QbZFc4nXUtVsYv
+Ye+W/CBGvevUez8/fEc4BKkbqlLfEzfTFRVOvV98r61jx3ncCHvVoOX3W3WsgFWZ
+kmGbzSoXfduP9LVq6hdKZChmFSlsAvFr1bqjM9xaZ6cF4r9lthawEO3NUDPJcFDs
+GY6wx/J0W2tExn2WuZgIWWbeKQGb9Cpt0xU6kGpn8bRrZtkh68rZYnxGEFzedUln
+nkL5/nWpo63/dgpnQOPF943HhZpZnmKaau1Fh5hnstVKPNe0OwANwI8f4UDErmwh
+3El+fsqyjW22v5MvoVw+j8rtgI5Y4dtXz4U2OLJxpAmMkokIiEjxQGMYsluMWuPD
+0xeqqxmjLBvk1cbiZnrXghmmOxYsL3GHX0WelXOTwkKBIROW1527k2gV+p2kHYzy
+geBYBr3JtuP2iV2J+axEoctr+hbxx1A9JNr3w+SH1VbxT5Aw+kUJWdo0zuATHAR8
+ANSbhqRAvNncTFd+rrcztl524WWLZt+NyteYr842mIycg5kDcPOvdO3GDjbnvezB
+c6eUWsuSZIKmAMFwoW4sKeFYV+xafJlrJaSQOoD0IJ2azsct+bJLKZWD6TWNp0lI
+pw9MGZHQ9b8Q4HECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU
+dEmZ0f+0emhFdcN+tNzMzjkz2ggwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
+DAUAA4ICAQAjQ1MkYlxt/T7Cz1UAbMVWiLkO3TriJQ2VSpfKgInuKs1l+NsW4AmS
+4BjHeJi78+xCUvuppILXTdiK/ORO/auQxDh1MoSf/7OwKwIzNsAQkG8dnK/haZPs
+o0UvFJ/1TCplQ3IM98P4lYsU84UgYt1UU90s3BiVaU+DR3BAM1h3Egyi61IxHkzJ
+qM7F78PRreBrAwA0JrRUITWXAdxfG/F851X6LWh3e9NpzNMOa7pNdkTWwhWaJuyw
+xfW70Xp0wmzNxbVe9kzmWy2B27O3Opee7c9GslA9hGCZcbUztVdF5kJHdWoOsAgM
+rr3e97sPWD2PAzHoPYJQyi9eDF20l74gNAf0xBLh7tew2VktafcxBPTy+av5EzH4
+AXcOPUIjJsyacmdRIXrMPIWo6iFqO9taPKU0nprALN+AnCng33eU0aKAQv9qTFsR
+0PXNor6uzFFcw9VUewyu1rkGd4Di7wcaaMxZUa1+XGdrudviB0JbuAEFWDlN5LuY
+o7Ey7Nmj1m+UI/87tyll5gfp77YZ6ufCOB0yiJA8EytuzO+rdwY0d4RPcuSBhPm5
+dDTedk+SKlOxJTnbPP/lPqYO5Wue/9vsL3SD3460s6neFE3/MaNFcyT6lSnMEpcE
+oji2jbDwN/zIIX8/syQbPYtuzE2wFg2WHYMfRsCbvUOZ58SWLs5fyQ==
+-----END CERTIFICATE-----
diff --git a/cobalt/content/ssl/certs/fb717492.0 b/cobalt/content/ssl/certs/fb717492.0
new file mode 100644
index 0000000..aa1615f
--- /dev/null
+++ b/cobalt/content/ssl/certs/fb717492.0
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICFTCCAZugAwIBAgIQPZg7pmY9kGP3fiZXOATvADAKBggqhkjOPQQDAzBMMS4w
+LAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgRUNDIFRMUyAyMDIxMQ0w
+CwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTI2MjNaFw00MTA0
+MTcwOTI2MjJaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBDQSBF
+Q0MgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMHYwEAYHKoZI
+zj0CAQYFK4EEACIDYgAEloZYKDcKZ9Cg3iQZGeHkBQcfl+3oZIK59sRxUM6KDP/X
+tXa7oWyTbIOiaG6l2b4siJVBzV3dscqDY4PMwL502eCdpO5KTlbgmClBk1IQ1SQ4
+AjJn8ZQSb+/Xxd4u/RmAo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR2
+KCXWfeBmmnoJsmo7jjPXNtNPojAOBgNVHQ8BAf8EBAMCAYYwCgYIKoZIzj0EAwMD
+aAAwZQIwW5kp85wxtolrbNa9d+F851F+uDrNozZffPc8dz7kUK2o59JZDCaOMDtu
+CCrCp1rIAjEAmeMM56PDr9NJLkaCI2ZdyQAUEv049OGYa3cpetskz2VAv9LcjBHo
+9H1/IISpQuQo
+-----END CERTIFICATE-----
diff --git a/cobalt/css_parser/parser.cc b/cobalt/css_parser/parser.cc
index aaaf474..9b60505 100644
--- a/cobalt/css_parser/parser.cc
+++ b/cobalt/css_parser/parser.cc
@@ -23,7 +23,6 @@
 #include <string>
 
 #include "base/bind.h"
-#include "base/command_line.h"
 #include "base/containers/hash_tables.h"
 #include "base/lazy_instance.h"
 #include "base/optional.h"
@@ -40,7 +39,6 @@
 #include "cobalt/css_parser/ref_counted_util.h"
 #include "cobalt/css_parser/scanner.h"
 #include "cobalt/css_parser/string_pool.h"
-#include "cobalt/css_parser/switches.h"
 #include "cobalt/css_parser/trivial_string_piece.h"
 #include "cobalt/css_parser/trivial_type_pairs.h"
 #include "cobalt/cssom/active_pseudo_class.h"
@@ -90,6 +88,10 @@
 #include "cobalt/cssom/unicode_range_value.h"
 #include "cobalt/cssom/universal_selector.h"
 #include "cobalt/cssom/url_value.h"
+#if !defined(COBALT_BUILD_TYPE_GOLD)
+#include "base/command_line.h"
+#include "cobalt/css_parser/switches.h"
+#endif  // !defined(COBALT_BUILD_TYPE_GOLD)
 
 namespace cobalt {
 namespace css_parser {
@@ -541,19 +543,23 @@
 void LogWarningCallback(const ::base::DebuggerHooks* debugger_hooks,
                         const std::string& message) {
   CLOG(WARNING, *debugger_hooks) << message;
+#if !defined(COBALT_BUILD_TYPE_GOLD)
   ::base::CommandLine* command_line = ::base::CommandLine::ForCurrentProcess();
   if (command_line->GetSwitchValueASCII(switches::kOnCssWarning) == "crash") {
     IMMEDIATE_CRASH() << message;
   }
+#endif  // !defined(COBALT_BUILD_TYPE_GOLD)
 }
 
 void LogErrorCallback(const ::base::DebuggerHooks* debugger_hooks,
                       const std::string& message) {
   CLOG(ERROR, *debugger_hooks) << message;
+#if !defined(COBALT_BUILD_TYPE_GOLD)
   ::base::CommandLine* command_line = ::base::CommandLine::ForCurrentProcess();
   if (command_line->GetSwitchValueASCII(switches::kOnCssError) == "crash") {
     IMMEDIATE_CRASH() << message;
   }
+#endif  // !defined(COBALT_BUILD_TYPE_GOLD)
 }
 
 }  // namespace
diff --git a/cobalt/css_parser/switches.cc b/cobalt/css_parser/switches.cc
index bb4e085..3818593 100644
--- a/cobalt/css_parser/switches.cc
+++ b/cobalt/css_parser/switches.cc
@@ -20,18 +20,21 @@
 namespace css_parser {
 namespace switches {
 
+#if !defined(COBALT_BUILD_TYPE_GOLD)
 const char kOnCssError[] = "on_css_error";
 const char kOnCssErrorHelp[] =
     "If set to \"crash\", crashes on CSS error even when recoverable.";
 
 const char kOnCssWarning[] = "on_css_warning";
 const char kOnCssWarningHelp[] = "If set to \"crash\", crashes on CSS warning.";
+#endif  // !defined(COBALT_BUILD_TYPE_GOLD)
 
 std::string HelpMessage() {
   std::string help_message;
-  std::map<std::string, const char*> help_map{
-      {kOnCssError, kOnCssErrorHelp},
-      {kOnCssWarning, kOnCssWarningHelp},
+  std::map<std::string, const char*> help_map {
+#if !defined(COBALT_BUILD_TYPE_GOLD)
+    {kOnCssError, kOnCssErrorHelp}, {kOnCssWarning, kOnCssWarningHelp},
+#endif  // !defined(COBALT_BUILD_TYPE_GOLD)
   };
 
   for (const auto& switch_message : help_map) {
diff --git a/cobalt/css_parser/switches.h b/cobalt/css_parser/switches.h
index cd3943f..a59ea7a 100644
--- a/cobalt/css_parser/switches.h
+++ b/cobalt/css_parser/switches.h
@@ -21,10 +21,12 @@
 namespace css_parser {
 namespace switches {
 
+#if !defined(COBALT_BUILD_TYPE_GOLD)
 extern const char kOnCssError[];
 extern const char kOnCssErrorHelp[];
 extern const char kOnCssWarning[];
 extern const char kOnCssWarningHelp[];
+#endif  // !defined(COBALT_BUILD_TYPE_GOLD)
 
 std::string HelpMessage();
 
diff --git a/cobalt/debug/BUILD.gn b/cobalt/debug/BUILD.gn
index 0bdf9b5..eb383aa 100644
--- a/cobalt/debug/BUILD.gn
+++ b/cobalt/debug/BUILD.gn
@@ -46,8 +46,8 @@
     "backend/render_overlay.h",
     "backend/script_debugger_agent.cc",
     "backend/script_debugger_agent.h",
-    "backend/tracing_agent.cc",
-    "backend/tracing_agent.h",
+    "backend/tracing_controller.cc",
+    "backend/tracing_controller.h",
     "command.h",
     "console/debug_hub.cc",
     "console/debug_hub.h",
@@ -77,7 +77,7 @@
     "//cobalt/web",
     "//net",
     "//net:http_server",
-    "//starboard",
+    "//starboard:starboard_group",
     "//third_party/devtools:devtools_frontend_resources",
   ]
 }
diff --git a/cobalt/debug/backend/debug_module.cc b/cobalt/debug/backend/debug_module.cc
index ea767af..b1b09c2 100644
--- a/cobalt/debug/backend/debug_module.cc
+++ b/cobalt/debug/backend/debug_module.cc
@@ -30,7 +30,7 @@
 constexpr char kCssAgent[] = "CssAgent";
 constexpr char kOverlayAgent[] = "OverlayAgent";
 constexpr char kPageAgent[] = "PageAgent";
-constexpr char kTracingAgent[] = "TracingAgent";
+constexpr char kTracingController[] = "TracingController";
 
 // Move the state for a particular agent out of the dictionary holding the
 // state for all agents. Returns a NULL JSONObject if either |agents_state| is
@@ -161,8 +161,8 @@
                                     std::move(page_render_layer),
                                     data.resource_provider));
   }
-  tracing_agent_.reset(
-      new TracingAgent(debug_dispatcher_.get(), script_debugger_.get()));
+  tracing_controller_.reset(
+      new TracingController(debug_dispatcher_.get(), script_debugger_.get()));
 
   // Hook up hybrid agent JavaScript to the DebugBackend.
   debug_backend_->BindAgents(css_agent_);
@@ -190,7 +190,7 @@
     overlay_agent_->Thaw(RemoveAgentState(kOverlayAgent, agents_state));
   if (page_agent_)
     page_agent_->Thaw(RemoveAgentState(kPageAgent, agents_state));
-  tracing_agent_->Thaw(RemoveAgentState(kTracingAgent, agents_state));
+  tracing_controller_->Thaw(RemoveAgentState(kTracingController, agents_state));
 
   is_frozen_ = false;
 }
@@ -213,7 +213,8 @@
     StoreAgentState(agents_state, kOverlayAgent, overlay_agent_->Freeze());
   if (page_agent_)
     StoreAgentState(agents_state, kPageAgent, page_agent_->Freeze());
-  StoreAgentState(agents_state, kTracingAgent, tracing_agent_->Freeze());
+  StoreAgentState(agents_state, kTracingController,
+                  tracing_controller_->Freeze());
 
   // Take the clients from the dispatcher last so they still get events that the
   // agents might send as part of being frozen.
diff --git a/cobalt/debug/backend/debug_module.h b/cobalt/debug/backend/debug_module.h
index 4736968..9185a3c 100644
--- a/cobalt/debug/backend/debug_module.h
+++ b/cobalt/debug/backend/debug_module.h
@@ -33,7 +33,7 @@
 #include "cobalt/debug/backend/page_agent.h"
 #include "cobalt/debug/backend/render_overlay.h"
 #include "cobalt/debug/backend/script_debugger_agent.h"
-#include "cobalt/debug/backend/tracing_agent.h"
+#include "cobalt/debug/backend/tracing_controller.h"
 #include "cobalt/debug/json_object.h"
 #include "cobalt/dom/window.h"
 #include "cobalt/render_tree/resource_provider.h"
@@ -142,7 +142,7 @@
   std::unique_ptr<OverlayAgent> overlay_agent_;
   std::unique_ptr<PageAgent> page_agent_;
   std::unique_ptr<ScriptDebuggerAgent> script_debugger_agent_;
-  std::unique_ptr<TracingAgent> tracing_agent_;
+  std::unique_ptr<TracingController> tracing_controller_;
 };
 
 }  // namespace backend
diff --git a/cobalt/debug/backend/tracing_agent.cc b/cobalt/debug/backend/tracing_agent.cc
deleted file mode 100644
index 1e10129..0000000
--- a/cobalt/debug/backend/tracing_agent.cc
+++ /dev/null
@@ -1,162 +0,0 @@
-// Copyright 2019 The Cobalt Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "cobalt/debug/backend/tracing_agent.h"
-
-#include "base/bind.h"
-#include "base/values.h"
-#include "cobalt/script/script_debugger.h"
-
-namespace cobalt {
-namespace debug {
-namespace backend {
-
-namespace {
-// Definitions from the set specified here:
-// https://chromedevtools.github.io/devtools-protocol/tot/Tracing
-constexpr char kInspectorDomain[] = "Tracing";
-
-// State parameters
-constexpr char kStarted[] = "started";
-constexpr char kCategories[] = "categories";
-
-// Size in characters of JSON to batch dataCollected events.
-constexpr size_t kDataCollectedSize = 24 * 1024;
-}  // namespace
-
-TracingAgent::TracingAgent(DebugDispatcher* dispatcher,
-                           script::ScriptDebugger* script_debugger)
-    : dispatcher_(dispatcher),
-      script_debugger_(script_debugger),
-      tracing_started_(false),
-      collected_size_(0),
-      commands_(kInspectorDomain) {
-  DCHECK(dispatcher_);
-
-  commands_["end"] = base::Bind(&TracingAgent::End, base::Unretained(this));
-  commands_["start"] = base::Bind(&TracingAgent::Start, base::Unretained(this));
-}
-
-void TracingAgent::Thaw(JSONObject agent_state) {
-  dispatcher_->AddDomain(kInspectorDomain, commands_.Bind());
-  if (!agent_state) return;
-
-  // Restore state
-  categories_.clear();
-  for (const auto& category : agent_state->FindKey(kCategories)->GetList()) {
-    categories_.emplace_back(category.GetString());
-  }
-  tracing_started_ = agent_state->FindKey(kStarted)->GetBool();
-  if (tracing_started_) {
-    script_debugger_->StartTracing(categories_, this);
-  }
-}
-
-JSONObject TracingAgent::Freeze() {
-  if (tracing_started_) {
-    script_debugger_->StopTracing();
-  }
-
-  dispatcher_->RemoveDomain(kInspectorDomain);
-
-  // Save state
-  JSONObject agent_state(new base::DictionaryValue());
-  agent_state->SetKey(kStarted, base::Value(tracing_started_));
-  base::Value::ListStorage categories_list;
-  for (const auto& category : categories_) {
-    categories_list.emplace_back(category);
-  }
-  agent_state->SetKey(kCategories, base::Value(std::move(categories_list)));
-
-  return agent_state;
-}
-
-void TracingAgent::End(Command command) {
-  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  if (!tracing_started_) {
-    command.SendErrorResponse(Command::kInvalidRequest, "Tracing not started");
-    return;
-  }
-  tracing_started_ = false;
-  categories_.clear();
-  command.SendResponse();
-
-  script_debugger_->StopTracing();
-}
-
-void TracingAgent::Start(Command command) {
-  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  if (tracing_started_) {
-    command.SendErrorResponse(Command::kInvalidRequest,
-                              "Tracing already started");
-    return;
-  }
-
-  JSONObject params = JSONParse(command.GetParams());
-
-  // Parse comma-separated tracing categories parameter.
-  categories_.clear();
-  std::string category_param;
-  if (params->GetString("categories", &category_param)) {
-    for (size_t pos = 0, comma; pos < category_param.size(); pos = comma + 1) {
-      comma = category_param.find(',', pos);
-      if (comma == std::string::npos) comma = category_param.size();
-      std::string category = category_param.substr(pos, comma - pos);
-      categories_.push_back(category);
-    }
-  }
-
-  tracing_started_ = true;
-  script_debugger_->StartTracing(categories_, this);
-
-  command.SendResponse();
-}
-
-void TracingAgent::AppendTraceEvent(const std::string& trace_event_json) {
-  // We initialize a new list into which we collect events both when we start,
-  // and after each time it's released in |SendDataCollectedEvent|.
-  if (!collected_events_) {
-    collected_events_.reset(new base::ListValue());
-  }
-
-  JSONObject event = JSONParse(trace_event_json);
-  if (event) {
-    collected_events_->Append(std::move(event));
-    collected_size_ += trace_event_json.size();
-  }
-
-  if (collected_size_ >= kDataCollectedSize) {
-    SendDataCollectedEvent();
-  }
-}
-
-void TracingAgent::FlushTraceEvents() {
-  SendDataCollectedEvent();
-  dispatcher_->SendEvent(std::string(kInspectorDomain) + ".tracingComplete");
-}
-
-void TracingAgent::SendDataCollectedEvent() {
-  if (collected_events_) {
-    collected_size_ = 0;
-    JSONObject params(new base::DictionaryValue());
-    // Releasing the list into the value param avoids copying it.
-    params->Set("value", std::move(collected_events_));
-    dispatcher_->SendEvent(std::string(kInspectorDomain) + ".dataCollected",
-                           params);
-  }
-}
-
-}  // namespace backend
-}  // namespace debug
-}  // namespace cobalt
diff --git a/cobalt/debug/backend/tracing_agent.h b/cobalt/debug/backend/tracing_agent.h
deleted file mode 100644
index a9c0bda..0000000
--- a/cobalt/debug/backend/tracing_agent.h
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2019 The Cobalt Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef COBALT_DEBUG_BACKEND_TRACING_AGENT_H_
-#define COBALT_DEBUG_BACKEND_TRACING_AGENT_H_
-
-#include <string>
-#include <vector>
-
-#include "base/threading/thread_checker.h"
-#include "base/time/time.h"
-#include "cobalt/debug/backend/command_map.h"
-#include "cobalt/debug/backend/debug_dispatcher.h"
-#include "cobalt/debug/command.h"
-#include "cobalt/script/script_debugger.h"
-
-namespace cobalt {
-namespace debug {
-namespace backend {
-
-// There aren't enable/disable commands in the Tracing domain, so the
-// TracingAgent doesn't use AgentBase.
-//
-// https://chromedevtools.github.io/devtools-protocol/tot/Tracing
-class TracingAgent : public script::ScriptDebugger::TraceDelegate  {
- public:
-  explicit TracingAgent(DebugDispatcher* dispatcher,
-                        script::ScriptDebugger* script_debugger);
-
-  void Thaw(JSONObject agent_state);
-  JSONObject Freeze();
-
-  // TraceDelegate
-  void AppendTraceEvent(const std::string& trace_event_json) override;
-  void FlushTraceEvents() override;
-
- private:
-  void End(Command command);
-  void Start(Command command);
-
-  void SendDataCollectedEvent();
-
-  DebugDispatcher* dispatcher_;
-  script::ScriptDebugger* script_debugger_;
-
-  THREAD_CHECKER(thread_checker_);
-
-  bool tracing_started_;
-  std::vector<std::string> categories_;
-  size_t collected_size_;
-  JSONList collected_events_;
-
-  // Map of member functions implementing commands.
-  CommandMap commands_;
-};
-
-}  // namespace backend
-}  // namespace debug
-}  // namespace cobalt
-
-#endif  // COBALT_DEBUG_BACKEND_TRACING_AGENT_H_
diff --git a/cobalt/debug/backend/tracing_controller.cc b/cobalt/debug/backend/tracing_controller.cc
new file mode 100644
index 0000000..e67c749
--- /dev/null
+++ b/cobalt/debug/backend/tracing_controller.cc
@@ -0,0 +1,291 @@
+// Copyright 2023 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "cobalt/debug/backend/tracing_controller.h"
+
+#include <iostream>
+#include <memory>
+#include <utility>
+
+#include "base/bind.h"
+#include "base/threading/thread.h"
+#include "base/trace_event/trace_event.h"
+#include "base/values.h"
+#include "cobalt/script/script_debugger.h"
+#include "starboard/common/string.h"
+
+namespace cobalt {
+namespace debug {
+namespace backend {
+
+namespace {
+// Definitions from the set specified here:
+// https://chromedevtools.github.io/devtools-protocol/tot/Tracing
+constexpr char kInspectorDomain[] = "Tracing";
+
+// State parameters
+constexpr char kStarted[] = "started";
+constexpr char kCategories[] = "categories";
+
+}  // namespace
+
+
+///////////////// TRACE EVENT AGENT ///////////////////////////////////
+
+void TraceEventAgent::StartAgentTracing(
+    const TraceConfig& trace_config,
+    StartAgentTracingCallback on_start_callback) {
+  json_output_.json_output.clear();
+  trace_buffer_.SetOutputCallback(json_output_.GetCallback());
+
+  base::trace_event::TraceLog* tracelog =
+      base::trace_event::TraceLog::GetInstance();
+  DCHECK(!tracelog->IsEnabled());
+
+  tracelog->SetEnabled(trace_config,
+                       base::trace_event::TraceLog::RECORDING_MODE);
+
+  std::move(on_start_callback).Run(agent_name_, true);
+}
+
+void TraceEventAgent::StopAgentTracing(
+    StopAgentTracingCallback on_stop_callback) {
+  base::trace_event::TraceLog* trace_log =
+      base::trace_event::TraceLog::GetInstance();
+
+  DCHECK(trace_log->IsEnabled());
+  trace_log->SetDisabled(base::trace_event::TraceLog::RECORDING_MODE);
+
+  base::Thread thread("json_outputter");
+  thread.Start();
+
+  trace_buffer_.Start();
+  base::WaitableEvent waitable_event;
+  auto collect_data_callback =
+      base::Bind(&TraceEventAgent::CollectTraceData, base::Unretained(this),
+                 base::BindRepeating(&base::WaitableEvent::Signal,
+                                     base::Unretained(&waitable_event)));
+  //  Write out the actual data by calling Flush().  Within Flush(), this
+  //  will call OutputTraceData(), possibly multiple times.  We have to do this
+  //  on a thread as there will be tasks posted to the current thread for data
+  //  writing.
+  thread.message_loop()->task_runner()->PostTask(
+      FROM_HERE, base::BindRepeating(&base::trace_event::TraceLog::Flush,
+                                     base::Unretained(trace_log),
+                                     collect_data_callback, false));
+  waitable_event.Wait();
+  trace_buffer_.Finish();
+
+  std::move(on_stop_callback)
+      .Run(agent_name_, agent_event_label_,
+           base::RefCountedString::TakeString(&json_output_.json_output));
+}
+
+
+void TraceEventAgent::CollectTraceData(
+    base::OnceClosure finished_cb,
+    const scoped_refptr<base::RefCountedString>& event_string,
+    bool has_more_events) {
+  trace_buffer_.AddFragment(event_string->data());
+  if (!has_more_events) {
+    std::move(finished_cb).Run();
+  }
+}
+
+///////////////// TRACE V8 AGENT ///////////////////////////////////
+TraceV8Agent::TraceV8Agent(script::ScriptDebugger* script_debugger)
+    : script_debugger_(script_debugger) {}
+
+void TraceV8Agent::AppendTraceEvent(const std::string& trace_event_json) {
+  trace_buffer_.AddFragment(trace_event_json);
+}
+
+void TraceV8Agent::FlushTraceEvents() {
+  trace_buffer_.Finish();
+  std::move(on_stop_callback_)
+      .Run(agent_name_, agent_event_label_,
+           base::RefCountedString::TakeString(&json_output_.json_output));
+}
+
+void TraceV8Agent::StartAgentTracing(const TraceConfig& trace_config,
+                                     StartAgentTracingCallback callback) {
+  json_output_.json_output.clear();
+  trace_buffer_.SetOutputCallback(json_output_.GetCallback());
+  trace_buffer_.Start();
+
+  std::vector<std::string> categories = {"v8", "v8.wasm", "v8.compile",
+                                         "v8.stack_trace"};
+  script_debugger_->StartTracing(categories, this);
+  std::move(callback).Run(agent_name_, true);
+}
+
+void TraceV8Agent::StopAgentTracing(StopAgentTracingCallback callback) {
+  on_stop_callback_ = std::move(callback);
+  script_debugger_->StopTracing();
+}
+
+///////////////// TRACING CONTROLLER //////////////////////////////////
+TracingController::TracingController(DebugDispatcher* dispatcher,
+                                     script::ScriptDebugger* script_debugger)
+    : dispatcher_(dispatcher),
+      tracing_started_(false),
+      collected_size_(0),
+      commands_(kInspectorDomain) {
+  DCHECK(dispatcher_);
+
+  commands_["end"] =
+      base::Bind(&TracingController::End, base::Unretained(this));
+  commands_["start"] =
+      base::Bind(&TracingController::Start, base::Unretained(this));
+
+  agents_.push_back(std::make_unique<TraceEventAgent>());
+  agents_.push_back(std::make_unique<TraceV8Agent>(script_debugger));
+}
+
+void TracingController::Thaw(JSONObject agent_state) {
+  dispatcher_->AddDomain(kInspectorDomain, commands_.Bind());
+  if (!agent_state) return;
+
+  // Restore state
+  categories_.clear();
+  for (const auto& category : agent_state->FindKey(kCategories)->GetList()) {
+    categories_.emplace_back(category.GetString());
+  }
+  tracing_started_ = agent_state->FindKey(kStarted)->GetBool();
+  if (tracing_started_) {
+    agents_responded_ = 0;
+    auto config = base::trace_event::TraceConfig();
+    for (const auto& a : agents_) {
+      a->StartAgentTracing(config,
+                           base::BindOnce(&TracingController::OnStartTracing,
+                                          base::Unretained(this)));
+    }
+  }
+}
+
+JSONObject TracingController::Freeze() {
+  if (tracing_started_) {
+    for (const auto& a : agents_) {
+      a->StopAgentTracing(base::BindOnce(&TracingController::OnCancelTracing,
+                                         base::Unretained(this)));
+    }
+  }
+
+  dispatcher_->RemoveDomain(kInspectorDomain);
+
+  // Save state
+  JSONObject agent_state(new base::DictionaryValue());
+  agent_state->SetKey(kStarted, base::Value(tracing_started_));
+  base::Value::ListStorage categories_list;
+  for (const auto& category : categories_) {
+    categories_list.emplace_back(category);
+  }
+  agent_state->SetKey(kCategories, base::Value(std::move(categories_list)));
+
+  return agent_state;
+}
+
+void TracingController::End(Command command) {
+  if (!tracing_started_) {
+    command.SendErrorResponse(Command::kInvalidRequest, "Tracing not started");
+    return;
+  }
+  tracing_started_ = false;
+  categories_.clear();
+  command.SendResponse();
+
+  for (const auto& a : agents_) {
+    a->StopAgentTracing(base::BindOnce(&TracingController::OnStopTracing,
+                                       base::Unretained(this)));
+  }
+}
+
+void TracingController::Start(Command command) {
+  if (tracing_started_) {
+    command.SendErrorResponse(Command::kInvalidRequest,
+                              "Tracing already started");
+    return;
+  }
+  JSONObject params = JSONParse(command.GetParams());
+  // Parse comma-separated tracing categories parameter.
+  categories_.clear();
+  std::string category_param;
+  if (params->GetString("categories", &category_param)) {
+    for (size_t pos = 0, comma; pos < category_param.size(); pos = comma + 1) {
+      comma = category_param.find(',', pos);
+      if (comma == std::string::npos) comma = category_param.size();
+      std::string category = category_param.substr(pos, comma - pos);
+      categories_.push_back(category);
+    }
+  }
+
+  collected_events_.reset(new base::ListValue());
+
+  agents_responded_ = 0;
+  auto config = base::trace_event::TraceConfig();
+  for (const auto& a : agents_) {
+    a->StartAgentTracing(config,
+                         base::BindOnce(&TracingController::OnStartTracing,
+                                        base::Unretained(this)));
+  }
+  tracing_started_ = true;
+  command.SendResponse();
+}
+
+void TracingController::OnStartTracing(const std::string& agent_name,
+                                       bool success) {
+  LOG(INFO) << "Tracing Agent:" << agent_name << " Start tracing successful? "
+            << (success ? "true" : "false");
+}
+
+void TracingController::OnStopTracing(
+    const std::string& agent_name, const std::string& events_label,
+    const scoped_refptr<base::RefCountedString>& events_str_ptr) {
+  LOG(INFO) << "Tracing Agent:" << agent_name << " Stop tracing.";
+
+  collected_events_ = base::ListValue::From(
+      base::JSONReader::Read(events_str_ptr->data(), base::JSON_PARSE_RFC));
+  FlushTraceEvents();
+}
+
+void TracingController::OnCancelTracing(
+    const std::string& agent_name, const std::string& events_label,
+    const scoped_refptr<base::RefCountedString>& events_str_ptr) {
+  LOG(INFO) << "Tracing Agent:" << agent_name << " Cancel tracing.";
+}
+
+void TracingController::SendDataCollectedEvent() {
+  if (collected_events_) {
+    std::string events;
+    collected_events_->GetString(0, &events);
+    JSONObject params(new base::DictionaryValue());
+    // Releasing the list into the value param avoids copying it.
+    params->Set("value", std::move(collected_events_));
+    dispatcher_->SendEvent(std::string(kInspectorDomain) + ".dataCollected",
+                           params);
+    collected_size_ = 0;
+  }
+}
+
+void TracingController::FlushTraceEvents() {
+  SendDataCollectedEvent();
+  agents_responded_++;
+  if (agents_responded_ == static_cast<int>(agents_.size())) {
+    dispatcher_->SendEvent(std::string(kInspectorDomain) + ".tracingComplete");
+  }
+}
+
+}  // namespace backend
+}  // namespace debug
+}  // namespace cobalt
diff --git a/cobalt/debug/backend/tracing_controller.h b/cobalt/debug/backend/tracing_controller.h
new file mode 100644
index 0000000..63b6735
--- /dev/null
+++ b/cobalt/debug/backend/tracing_controller.h
@@ -0,0 +1,153 @@
+// Copyright 2023 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef COBALT_DEBUG_BACKEND_TRACING_CONTROLLER_H_
+#define COBALT_DEBUG_BACKEND_TRACING_CONTROLLER_H_
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "base/callback.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/ref_counted_memory.h"
+#include "base/threading/thread_checker.h"
+#include "base/time/time.h"
+#include "base/trace_event/trace_buffer.h"
+#include "base/trace_event/tracing_agent.h"
+#include "cobalt/debug/backend/command_map.h"
+#include "cobalt/debug/backend/debug_dispatcher.h"
+#include "cobalt/debug/command.h"
+#include "cobalt/script/script_debugger.h"
+
+namespace cobalt {
+namespace debug {
+namespace backend {
+
+
+using base::trace_event::TraceConfig;
+using base::trace_event::TracingAgent;
+
+//////////////////////////////////////////////////////////////////////////////
+
+class TraceEventAgent : public TracingAgent {
+ public:
+  TraceEventAgent() = default;
+  ~TraceEventAgent() = default;
+
+  // TracingAgent Interface
+  std::string GetTracingAgentName() override { return agent_name_; }
+  std::string GetTraceEventLabel() override { return agent_event_label_; }
+  void StartAgentTracing(const TraceConfig& trace_config,
+                         StartAgentTracingCallback callback) override;
+  void StopAgentTracing(StopAgentTracingCallback callback) override;
+
+  void CancelTracing();
+
+ private:
+  void CollectTraceData(
+      base::OnceClosure finished_cb,
+      const scoped_refptr<base::RefCountedString>& event_string,
+      bool has_more_events);
+
+ private:
+  std::string agent_name_{"TraceEventAgent"};
+  std::string agent_event_label_{"Performance Tracing"};
+
+  base::trace_event::TraceResultBuffer trace_buffer_;
+  base::trace_event::TraceResultBuffer::SimpleOutput json_output_;
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+class TraceV8Agent : public TracingAgent,
+                     public script::ScriptDebugger::TraceDelegate {
+ public:
+  explicit TraceV8Agent(script::ScriptDebugger* script_debugger);
+  ~TraceV8Agent() = default;
+
+  // TraceDelegate Interface
+  void AppendTraceEvent(const std::string& trace_event_json) override;
+  void FlushTraceEvents() override;
+
+  // TracingAgent Interface
+  std::string GetTracingAgentName() override { return agent_name_; }
+  std::string GetTraceEventLabel() override { return agent_event_label_; }
+  void StartAgentTracing(const TraceConfig& trace_config,
+                         StartAgentTracingCallback callback) override;
+  void StopAgentTracing(StopAgentTracingCallback callback) override;
+
+ private:
+  std::string agent_name_{"TraceV8Agent"};
+  std::string agent_event_label_{"Performance Tracing"};
+
+  StopAgentTracingCallback on_stop_callback_;
+
+  THREAD_CHECKER(thread_checker_);
+  script::ScriptDebugger* script_debugger_;
+
+  // size_t collected_size_;
+  // JSONList collected_events_;
+  base::trace_event::TraceResultBuffer trace_buffer_;
+  base::trace_event::TraceResultBuffer::SimpleOutput json_output_;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// https://chromedevtools.github.io/devtools-protocol/tot/Tracing
+class TracingController {
+ public:
+  explicit TracingController(DebugDispatcher* dispatcher,
+                             script::ScriptDebugger* script_debugger);
+  ~TracingController() = default;
+
+  void Thaw(JSONObject agent_state);
+  JSONObject Freeze();
+
+ private:
+  void End(Command command);
+  void Start(Command command);
+
+  void OnStartTracing(const std::string& agent_name, bool success);
+  void OnStopTracing(
+      const std::string& agent_name, const std::string& events_label,
+      const scoped_refptr<base::RefCountedString>& events_str_ptr);
+  void OnCancelTracing(
+      const std::string& agent_name, const std::string& events_label,
+      const scoped_refptr<base::RefCountedString>& events_str_ptr);
+
+
+ private:
+  void SendDataCollectedEvent();
+  void FlushTraceEvents();
+
+ private:
+  DebugDispatcher* dispatcher_;
+  std::vector<std::unique_ptr<TracingAgent>> agents_;
+  std::atomic_int agents_responded_{0};
+
+  bool tracing_started_;
+  std::vector<std::string> categories_;
+
+  size_t collected_size_;
+  JSONList collected_events_;
+
+  // Map of member functions implementing commands.
+  CommandMap commands_;
+};
+
+}  // namespace backend
+}  // namespace debug
+}  // namespace cobalt
+
+#endif  // COBALT_DEBUG_BACKEND_TRACING_CONTROLLER_H_
diff --git a/cobalt/demos/content/configure-max-video-input-size/configure-max-video-input-size.html b/cobalt/demos/content/configure-max-video-input-size/configure-max-video-input-size.html
new file mode 100644
index 0000000..a1d0615
--- /dev/null
+++ b/cobalt/demos/content/configure-max-video-input-size/configure-max-video-input-size.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<!--
+ | Copyright 2024 The Cobalt Authors. All Rights Reserved.
+ |
+ | Licensed under the Apache License, Version 2.0 (the "License");
+ | you may not use this file except in compliance with the License.
+ | You may obtain a copy of the License at
+ |
+ |     http://www.apache.org/licenses/LICENSE-2.0
+ |
+ | Unless required by applicable law or agreed to in writing, software
+ | distributed under the License is distributed on an "AS IS" BASIS,
+ | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ | See the License for the specific language governing permissions and
+ | limitations under the License.
+ -->
+
+<html>
+<head>
+  <title>Configure Max Video Input Size</title>
+  <style>
+    body {
+      background-color: #0f0;
+    }
+    video {
+      height: 240px;
+      width: 426px;
+    }
+  </style>
+</head>
+<body>
+  <script type="text/javascript" src="configure-max-video-input-size.js"></script>
+  <div id="ui-layer">
+    <div class="item">
+      <video id="video1"></video>
+    </div>
+    <div class="item">
+      <video id="video2" muted="1" style="background-color: #4285F4">
+      </video>
+    </div>
+  </div>
+  <br>
+  <div id="status"></div>
+</body>
+</html>
diff --git a/cobalt/demos/content/configure-max-video-input-size/configure-max-video-input-size.js b/cobalt/demos/content/configure-max-video-input-size/configure-max-video-input-size.js
new file mode 100644
index 0000000..405854b
--- /dev/null
+++ b/cobalt/demos/content/configure-max-video-input-size/configure-max-video-input-size.js
@@ -0,0 +1,98 @@
+// Copyright 2024 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+var audioData;
+var videoData;
+
+let status_div;
+
+function downloadMediaData(downloadedCallback) {
+  var xhr = new XMLHttpRequest;
+
+  xhr.onload = function() {
+    audioData = xhr.response;
+    console.log("Downloaded " + audioData.byteLength + " of audio data.");
+
+    xhr.onload = function() {
+      videoData = xhr.response;
+      console.log("Downloaded " + videoData.byteLength + " of video data.");
+      downloadedCallback();
+    }
+
+    xhr.open("GET", "vp9-720p.webm", true);
+    xhr.send();
+  }
+
+  xhr.open("GET", "dash-audio.mp4", true);
+  xhr.responseType = "arraybuffer";
+  xhr.send();
+}
+
+function playVideoOn(videoElement) {
+  var ms = new MediaSource;
+  ms.addEventListener('sourceopen', function() {
+    console.log("Creating SourceBuffer objects.");
+    var audioBuffer = ms.addSourceBuffer('audio/mp4; codecs="mp4a.40.2"');
+    var videoBuffer = ms.addSourceBuffer('video/webm; codecs="vp9"');
+    audioBuffer.addEventListener("updateend", function() {
+      audioBuffer.abort();
+      videoBuffer.addEventListener("updateend", function() {
+        setTimeout(function() {
+          videoBuffer.addEventListener("updateend", function() {
+            videoBuffer.abort();
+            ms.endOfStream();
+            videoElement.ontimeupdate = function() {
+              if (videoElement.currentTime > 10) {
+                console.log("Stop playback.");
+                videoElement.src = '';
+                videoElement.load();
+                videoElement.ontimeupdate = null;
+              }
+            }
+            console.log("Start playback.");
+            videoElement.play();
+          });
+          videoBuffer.appendBuffer(videoData.slice(1024));
+        }, 5000);
+      });
+      videoBuffer.appendBuffer(videoData.slice(0, 1024));
+    });
+    audioBuffer.appendBuffer(audioData);
+  });
+
+  console.log("Attaching MediaSource to video element.");
+  videoElement.src = URL.createObjectURL(ms);
+}
+
+function setupPlayerHandler() {
+  // Setup one primary player and one sub player.
+  // i = 0: primary player, buffer size is 3110500
+  // i = 1: sub player, buffer size is 777000
+  const maxVideoInputSizes = [3110500, 777000];
+  videoElements = document.getElementsByTagName('video');
+  status_div = document.getElementById('status');
+  status_div.innerHTML += 'Video Get Element By Id...<br>';
+  for(let i = 0; i < maxVideoInputSizes.length; i++) {
+    if (videoElements[i].setMaxVideoInputSize && i < videoElements.length) {
+      videoElements[i].setMaxVideoInputSize(maxVideoInputSizes[i]);
+      status_div.innerHTML += 'Set Max Video Input Size of Video Element '+ i + ' to '+ maxVideoInputSizes[i] + '<br>';
+    }
+    if (i == 1 && videoElements[i].setMaxVideoCapabilities) {
+      videoElements[i].setMaxVideoCapabilities("width=1920; height=1080");
+    }
+    playVideoOn(videoElements[i]);
+  }
+}
+
+downloadMediaData(setupPlayerHandler);
diff --git a/cobalt/demos/content/configure-max-video-input-size/dash-audio.mp4 b/cobalt/demos/content/configure-max-video-input-size/dash-audio.mp4
new file mode 100644
index 0000000..b26721c
--- /dev/null
+++ b/cobalt/demos/content/configure-max-video-input-size/dash-audio.mp4
Binary files differ
diff --git a/cobalt/demos/content/configure-max-video-input-size/vp9-720p.webm b/cobalt/demos/content/configure-max-video-input-size/vp9-720p.webm
new file mode 100644
index 0000000..08a670e
--- /dev/null
+++ b/cobalt/demos/content/configure-max-video-input-size/vp9-720p.webm
Binary files differ
diff --git a/cobalt/demos/content/enable-background-playback/enable-background-playback-test.html b/cobalt/demos/content/enable-background-playback/enable-background-playback-test.html
new file mode 100644
index 0000000..a00216b
--- /dev/null
+++ b/cobalt/demos/content/enable-background-playback/enable-background-playback-test.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+
+<head>
+    <title>Test Enable Background Playback</title>
+</head>
+
+<body style="color: white;">
+    <script>
+    function main() {
+        if (window.h5vcc && window.h5vcc.settings) {
+            h5vcc.settings.set('Media.BackgroundPlaybackEnabled', 1);
+        }
+    }
+    main();
+    </script>
+</body>
diff --git a/cobalt/doc/memory_tuning.md b/cobalt/doc/memory_tuning.md
index 662fb59..297a7e4 100644
--- a/cobalt/doc/memory_tuning.md
+++ b/cobalt/doc/memory_tuning.md
@@ -1,4 +1,4 @@
-# Memory Tuning #
+# Memory Tuning
 
 Cobalt is designed to choose sensible parameters for memory-related options and
 parameters through a system called "AutoMem".
@@ -16,7 +16,7 @@
 *Setting `--max_cobalt_cpu_usage` and `--max_cobalt_gpu_usage` on the
 command line is a beta feature.*
 
-### Memory Settings Table ###
+### Memory Settings Table
 
 A table similar to the one below, will be printed on startup.
 
@@ -79,7 +79,7 @@
       * This value was AutoSet to a default value, but then was reduced in
       response to `max_cobalt_cpu_usage` or `max_cobalt_gpu_usage being` set too low.
 
-### Maximum Memory Table ###
+### Maximum Memory Table
 
 This second table is also printed at startup and details the sum of memory and
 maximum memory limits as reported by cobalt.
@@ -128,13 +128,13 @@
 will reduce their memory consumption. When this happens, look for the string
 *`AutoSet (Constrained)`* in the first table.
 
-## Setting Maximum Memory Values ##
+## Setting Maximum Memory Values
 
 The max cpu and gpu memory of the system can be set by command line:
   * `--max_cobalt_cpu_usage=160MB`
   * `--max_cobalt_gpu_usage=160MB`
 
-### Memory Scaling ###
+### Memory Scaling
 
 There are two primary ways in which the memory consumption settings will scale down.
 One is by specifying `--max_cobalt_cpu_usage` (or `max_cobalt_gpu_usage`) to a
@@ -152,7 +152,7 @@
  `--image_cache_size_in_bytes=auto` will allow `image_cache_size_in_bytes` to be
 flexible by disabling the value being set by a build setting.
 
-### Memory Warnings ###
+### Memory Warnings
 
 Cobalt will periodically check to see if the memory consumed by the application
 is less than the `--max_cobalt_cpu_usage` and `--max_cobalt_gpu_usage` amount.
@@ -160,7 +160,7 @@
 once to stdout for cpu and/or gpu memory systems.
 
 
-### Example 1 - Configuring for a memory restricted platform ###
+### Example 1 - Configuring for a memory restricted platform
 
 Let's say that we are configuring platform called "XXX":
 
@@ -186,7 +186,7 @@
 
   * `cobalt --max_cobalt_cpu_usage=160MB`
 
-### Example 2 - Configuring for a memory-plentiful platform ###
+### Example 2 - Configuring for a memory-plentiful platform
 
 The following command line will give a lot of memory to image cache and give
 500MB to `max_cobalt_cpu_usage` and `max_cobalt_gpu_usage`.
@@ -196,9 +196,9 @@
 --image_cache_size_in_bytes=80MB
 ~~~
 
-## API Reference ##
+## API Reference
 
-#### Memory System API ####
+#### Memory System API
 
   * `max_cobalt_cpu_usage`
     * This setting will set the maximum cpu memory that the app will consume.
@@ -218,7 +218,7 @@
       for `max_cobalt_gpu_usage` in commandline/starboard settings then no
       GPU memory checking is performed.
 
-#### Memory Setting API ####
+#### Memory Setting API
 
   * `image_cache_size_in_bytes`
     * See documentation *Image cache capacity* in `performance_tuning.md` for what
@@ -252,7 +252,7 @@
       for what this setting does.
     * Set via command line, or else Cobalt extension, or else automatically by Cobalt.
 
-#### Units for Command Line Settings ####
+#### Units for Command Line Settings
 
 Memory values passed into Cobalt via command line arguments support units such
 kb, mb, and gb for kilo-byte, megabyte, gigabytes. These units are case insensitive.
diff --git a/cobalt/doc/voice_search.md b/cobalt/doc/voice_search.md
index 6a72bee..d002a27 100644
--- a/cobalt/doc/voice_search.md
+++ b/cobalt/doc/voice_search.md
@@ -23,15 +23,15 @@
 
 In `starboard/linux/shared/soft_mic_platform_service.cc` there is an example
 stub implementation of the SoftMicPlatformService. Platforms can optionally
-implement this [CobaltPlatformService](https://cobalt.dev/gen/cobalt/doc/\
-platform_services.html) to specify if they support the `soft mic` and/or `hard mic`
-for voice search. The `soft mic` refers to the software activation of the microphone
-for voice search through the UI microphone button on the Youtube Web Application
-search page. The `hard mic` refers to hardware button activation of the microphone
-for voice search. Platforms can also specify the optional `micGesture`. This
-specifies the type of UI prompt the YouTube Web Application should display to guide
-the user to start voice search. The options include an empty or `null` value for no
-prompt, `"TAP"` for tap the `soft mic` and/or `hard mic` to start voice search, or
+implement this [CobaltPlatformService](platform_services.md) to specify if they
+support the `soft mic` and/or `hard mic` for voice search. The `soft mic` refers
+to the software activation of the microphone for voice search through the UI
+microphone button on the Youtube Web Application search page. The `hard mic`
+refers to hardware button activation of the microphone for voice search.
+Platforms can also specify the optional `micGesture`. This specifies the type of
+UI prompt the YouTube Web Application should display to guide the user to start
+voice search. The options include an empty or `null` value for no prompt,
+`"TAP"` for tap the `soft mic` and/or `hard mic` to start voice search, or
 `"HOLD"` for hold the `soft mic` and/or the `hard mic` to start voice search.
 
 The Web Application messages to the platform will be singular strings, encoded with
diff --git a/cobalt/dom/html_media_element.cc b/cobalt/dom/html_media_element.cc
index da10b2e..45a49ca 100644
--- a/cobalt/dom/html_media_element.cc
+++ b/cobalt/dom/html_media_element.cc
@@ -130,6 +130,7 @@
 
 HTMLMediaElement::HTMLMediaElement(Document* document, base::Token tag_name)
     : HTMLElement(document, tag_name),
+      max_video_input_size_(0),
       load_state_(kWaitingForSource),
       ALLOW_THIS_IN_INITIALIZER_LIST(event_queue_(this)),
       playback_rate_(1.f),
@@ -984,11 +985,6 @@
     MediaEngineError(new MediaError(
         MediaError::kMediaErrDecode,
         message.empty() ? "Media loading failed with decode error." : message));
-  } else if (error == WebMediaPlayer::kNetworkStateCapabilityChangedError) {
-    MediaEngineError(new MediaError(
-        MediaError::kMediaErrCapabilityChanged,
-        message.empty() ? "Media loading failed with capability changed error."
-                        : message));
   } else if ((error == WebMediaPlayer::kNetworkStateFormatError ||
               error == WebMediaPlayer::kNetworkStateNetworkError) &&
              load_state_ == kLoadingFromSrcAttr) {
@@ -1232,7 +1228,6 @@
     case WebMediaPlayer::kNetworkStateFormatError:
     case WebMediaPlayer::kNetworkStateNetworkError:
     case WebMediaPlayer::kNetworkStateDecodeError:
-    case WebMediaPlayer::kNetworkStateCapabilityChangedError:
       NOTREACHED() << "Passed SetNetworkState an error state";
       break;
   }
@@ -1246,7 +1241,6 @@
     case WebMediaPlayer::kNetworkStateFormatError:
     case WebMediaPlayer::kNetworkStateNetworkError:
     case WebMediaPlayer::kNetworkStateDecodeError:
-    case WebMediaPlayer::kNetworkStateCapabilityChangedError:
       MediaLoadingFailed(state, message);
       break;
     case WebMediaPlayer::kNetworkStateEmpty:
@@ -1667,6 +1661,10 @@
   return max_video_capabilities_;
 }
 
+int HTMLMediaElement::MaxVideoInputSize() const {
+  return max_video_input_size_;
+}
+
 bool HTMLMediaElement::PreferDecodeToTexture() {
   TRACE_EVENT0("cobalt::dom", "HTMLMediaElement::PreferDecodeToTexture()");
 
@@ -1762,5 +1760,20 @@
   max_video_capabilities_ = max_video_capabilities;
 }
 
+void HTMLMediaElement::SetMaxVideoInputSize(
+    unsigned int max_video_input_size,
+    script::ExceptionState* exception_state) {
+  if (GetAttribute("src").value_or("").length() > 0) {
+    LOG(WARNING) << "Cannot set max_video_input_size after src is defined.";
+    web::DOMException::Raise(web::DOMException::kInvalidStateErr,
+                             exception_state);
+    return;
+  }
+
+  LOG(INFO) << "max_video_input_size is changed from " << max_video_input_size_
+            << " to " << max_video_input_size;
+  max_video_input_size_ = static_cast<int>(max_video_input_size);
+}
+
 }  // namespace dom
 }  // namespace cobalt
diff --git a/cobalt/dom/html_media_element.h b/cobalt/dom/html_media_element.h
index 612e21c..559c72a 100644
--- a/cobalt/dom/html_media_element.h
+++ b/cobalt/dom/html_media_element.h
@@ -159,6 +159,10 @@
     return !max_video_capabilities_.empty();
   }
 
+  // Set max video input size.
+  void SetMaxVideoInputSize(unsigned int max_video_input_size,
+                            script::ExceptionState* exception_state);
+
   DEFINE_WRAPPABLE_TYPE(HTMLMediaElement);
   void TraceMembers(script::Tracer* tracer) override;
 
@@ -240,6 +244,7 @@
   void SourceOpened(ChunkDemuxer* chunk_demuxer) override;
   std::string SourceURL() const override;
   std::string MaxVideoCapabilities() const override;
+  int MaxVideoInputSize() const override;
   bool PreferDecodeToTexture() override;
   void EncryptedMediaInitDataEncountered(
       const char* init_data_type, const unsigned char* init_data,
@@ -252,6 +257,8 @@
 
   std::string max_video_capabilities_;
 
+  int max_video_input_size_;
+
   // Loading state.
   enum LoadState { kWaitingForSource, kLoadingFromSrcAttr };
   LoadState load_state_;
diff --git a/cobalt/dom/html_video_element.idl b/cobalt/dom/html_video_element.idl
index c54a9f4..565cd62 100644
--- a/cobalt/dom/html_video_element.idl
+++ b/cobalt/dom/html_video_element.idl
@@ -33,4 +33,12 @@
   // is the same as the format for the string passed in to
   // HTMLMediaElement.canPlayType().
   [RaisesException] void setMaxVideoCapabilities(DOMString max_video_capabilities);
+
+  // Non standard interface (b/176923480). Set the maximum size in bytes of an
+  // input buffer for video. This communicates to the platform that the size of
+  // a single input buffer will not exceed the size passed in this function.
+  // This function must be called before the src attribute is set on the element,
+  // otherwise an INVALID_STATE_ERR exception is raised. Use default buffer size
+  // if set to 0.
+  [RaisesException] void setMaxVideoInputSize(unsigned long maxVideoInputSize);
 };
diff --git a/cobalt/dom/media_error.h b/cobalt/dom/media_error.h
index 898af55..c4d9e4e 100644
--- a/cobalt/dom/media_error.h
+++ b/cobalt/dom/media_error.h
@@ -36,7 +36,6 @@
     kMediaErrDecode = 3,
     kMediaErrSrcNotSupported = 4,
     kMediaErrEncrypted = 5,
-    kMediaErrCapabilityChanged = 1000,
   };
 
   // Custom, not in any spec.
diff --git a/cobalt/h5vcc/BUILD.gn b/cobalt/h5vcc/BUILD.gn
index 1de4356..40fccd4 100644
--- a/cobalt/h5vcc/BUILD.gn
+++ b/cobalt/h5vcc/BUILD.gn
@@ -87,7 +87,7 @@
     "//cobalt/web:dom_exception",
     "//cobalt/worker",
     "//net",
-    "//starboard",
+    "//starboard:starboard_group",
     "//third_party/protobuf:protobuf_lite",
   ]
   if (enable_in_app_dial) {
diff --git a/cobalt/h5vcc/h5vcc_settings.cc b/cobalt/h5vcc/h5vcc_settings.cc
index 4c47039..59d76c8 100644
--- a/cobalt/h5vcc/h5vcc_settings.cc
+++ b/cobalt/h5vcc/h5vcc_settings.cc
@@ -104,5 +104,22 @@
   return false;
 }
 
+void H5vccSettings::SetPersistentSettingAsInt(const std::string& key,
+                                              int value) const {
+  if (persistent_settings_) {
+    persistent_settings_->SetPersistentSetting(
+        key, std::make_unique<base::Value>(value));
+  }
+}
+
+int H5vccSettings::GetPersistentSettingAsInt(const std::string& key,
+                                             int default_setting) const {
+  if (persistent_settings_) {
+    return persistent_settings_->GetPersistentSettingAsInt(key,
+                                                           default_setting);
+  }
+  return default_setting;
+}
+
 }  // namespace h5vcc
 }  // namespace cobalt
diff --git a/cobalt/h5vcc/h5vcc_settings.h b/cobalt/h5vcc/h5vcc_settings.h
index f7e10cf..d958c72 100644
--- a/cobalt/h5vcc/h5vcc_settings.h
+++ b/cobalt/h5vcc/h5vcc_settings.h
@@ -58,6 +58,11 @@
   // invalid or not set to the expected value.
   bool Set(const std::string& name, SetValueType value) const;
 
+  void SetPersistentSettingAsInt(const std::string& key, int value) const;
+
+  int GetPersistentSettingAsInt(const std::string& key,
+                                int default_setting) const;
+
   DEFINE_WRAPPABLE_TYPE(H5vccSettings);
 
  private:
diff --git a/cobalt/h5vcc/h5vcc_settings.idl b/cobalt/h5vcc/h5vcc_settings.idl
index 34650a9..703e483 100644
--- a/cobalt/h5vcc/h5vcc_settings.idl
+++ b/cobalt/h5vcc/h5vcc_settings.idl
@@ -14,4 +14,6 @@
 
 interface H5vccSettings {
   boolean set(DOMString name, (long or DOMString) value);
+  void setPersistentSettingAsInt(DOMString name, long value);
+  long getPersistentSettingAsInt(DOMString name, long default_setting);
 };
diff --git a/cobalt/input/BUILD.gn b/cobalt/input/BUILD.gn
index 912eb83..978550d 100644
--- a/cobalt/input/BUILD.gn
+++ b/cobalt/input/BUILD.gn
@@ -51,6 +51,6 @@
     "//cobalt/overlay_info",
     "//cobalt/speech",
     "//cobalt/system_window",
-    "//starboard",
+    "//starboard:starboard_group",
   ]
 }
diff --git a/cobalt/js_profiler/BUILD.gn b/cobalt/js_profiler/BUILD.gn
new file mode 100644
index 0000000..2a025d1
--- /dev/null
+++ b/cobalt/js_profiler/BUILD.gn
@@ -0,0 +1,53 @@
+# Copyright 2023 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+static_library("js_profiler") {
+  sources = [
+    "profiler.cc",
+    "profiler.h",
+    "profiler_trace_builder.cc",
+    "profiler_trace_builder.h",
+    "profiler_trace_wrapper.h",
+  ]
+
+  deps = [
+    "//cobalt/base",
+    "//cobalt/browser:generated_bindings",
+    "//cobalt/browser:generated_types",
+    "//cobalt/dom",
+    "//cobalt/script",
+    "//cobalt/script/v8c:engine",
+    "//cobalt/web",
+    "//third_party/chromium/media:media",
+    "//third_party/v8:cppgc",
+  ]
+}
+
+target(gtest_target_type, "js_profiler_test") {
+  testonly = true
+
+  sources = [ "js_profiler_test.cc" ]
+
+  deps = [
+    ":js_profiler",
+    "//cobalt/dom",
+    "//cobalt/dom/testing:dom_testing",
+    "//cobalt/dom/testing:dom_testing",
+    "//cobalt/script",
+    "//cobalt/test:run_all_unittests",
+    "//cobalt/web:dom_exception",
+    "//testing/gmock",
+    "//testing/gtest",
+  ]
+}
diff --git a/cobalt/js_profiler/js_profiler_test.cc b/cobalt/js_profiler/js_profiler_test.cc
new file mode 100644
index 0000000..98bb584
--- /dev/null
+++ b/cobalt/js_profiler/js_profiler_test.cc
@@ -0,0 +1,115 @@
+// Copyright 2023 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "base/callback.h"
+#include "base/memory/ref_counted.h"
+#include "cobalt/dom/testing/stub_environment_settings.h"
+#include "cobalt/dom/testing/stub_window.h"
+#include "cobalt/dom/testing/test_with_javascript.h"
+#include "cobalt/js_profiler/profiler.h"
+#include "cobalt/js_profiler/profiler_trace_wrapper.h"
+#include "cobalt/script/testing/mock_exception_state.h"
+#include "cobalt/web/dom_exception.h"
+#include "cobalt/web/environment_settings_helper.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using ::testing::_;
+using ::testing::Return;
+using ::testing::StrictMock;
+
+namespace cobalt {
+namespace js_profiler {
+
+class ProfilerTest : public dom::testing::TestWithJavaScript {
+ public:
+  ProfilerTest() {}
+
+ protected:
+  dom::testing::StubWindow window_;
+  StrictMock<script::testing::MockExceptionState> exception_state_;
+};
+
+TEST_F(ProfilerTest, ProfilerStop) {
+  v8::HandleScope scope(web::get_isolate(window_.environment_settings()));
+  ProfilerInitOptions init_options;
+  init_options.set_sample_interval(10);
+  init_options.set_max_buffer_size(1000);
+
+  scoped_refptr<Profiler> profiler_(new Profiler(
+      window_.environment_settings(), init_options, &exception_state_));
+
+  auto promise = profiler_->Stop(window_.environment_settings());
+  EXPECT_EQ(profiler_->stopped(), true);
+  EXPECT_TRUE(promise->State() == cobalt::script::PromiseState::kPending);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_TRUE(promise->State() == cobalt::script::PromiseState::kFulfilled);
+}
+
+TEST_F(ProfilerTest, ProfilerAlreadyStopped) {
+  v8::HandleScope scope(web::get_isolate(window_.environment_settings()));
+  ProfilerInitOptions init_options;
+  init_options.set_sample_interval(10);
+  init_options.set_max_buffer_size(0);
+
+  scoped_refptr<Profiler> profiler_(new Profiler(
+      window_.environment_settings(), init_options, &exception_state_));
+
+  auto promise = profiler_->Stop(window_.environment_settings());
+  EXPECT_EQ(profiler_->stopped(), true);
+  EXPECT_TRUE(promise->State() == cobalt::script::PromiseState::kPending);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_TRUE(promise->State() == cobalt::script::PromiseState::kFulfilled);
+  auto promise2 = profiler_->Stop(window_.environment_settings());
+  EXPECT_TRUE(promise2->State() == cobalt::script::PromiseState::kRejected);
+}
+
+TEST_F(ProfilerTest, ProfilerZeroSampleInterval) {
+  v8::HandleScope scope(web::get_isolate(window_.environment_settings()));
+  ProfilerInitOptions init_options;
+  init_options.set_sample_interval(0);
+  init_options.set_max_buffer_size(0);
+
+  scoped_refptr<Profiler> profiler_(new Profiler(
+      window_.environment_settings(), init_options, &exception_state_));
+  EXPECT_EQ(profiler_->sample_interval(), 10);
+  auto promise = profiler_->Stop(window_.environment_settings());
+  EXPECT_EQ(profiler_->stopped(), true);
+  EXPECT_TRUE(promise->State() == cobalt::script::PromiseState::kPending);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_TRUE(promise->State() == cobalt::script::PromiseState::kFulfilled);
+}
+
+TEST_F(ProfilerTest, ProfilerOutRangeSampleInterval) {
+  v8::HandleScope scope(web::get_isolate(window_.environment_settings()));
+  ProfilerInitOptions init_options;
+  init_options.set_sample_interval(-1);
+  init_options.set_max_buffer_size(0);
+
+  scoped_refptr<Profiler> profiler_(new Profiler(
+      window_.environment_settings(), init_options, &exception_state_));
+  EXPECT_EQ(profiler_->sample_interval(), 10);
+  auto promise = profiler_->Stop(window_.environment_settings());
+  EXPECT_EQ(profiler_->stopped(), true);
+  EXPECT_TRUE(promise->State() == cobalt::script::PromiseState::kPending);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_TRUE(promise->State() == cobalt::script::PromiseState::kFulfilled);
+}
+
+TEST_F(ProfilerTest, ProfilerJSCode) {
+  std::string result;
+  EXPECT_TRUE(EvaluateScript("Profiler", &result));
+  EXPECT_EQ(result, "function Profiler() { [native code] }");
+}
+}  // namespace js_profiler
+}  // namespace cobalt
diff --git a/cobalt/js_profiler/profiler.cc b/cobalt/js_profiler/profiler.cc
new file mode 100644
index 0000000..c380aed
--- /dev/null
+++ b/cobalt/js_profiler/profiler.cc
@@ -0,0 +1,158 @@
+// Copyright 2023 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "cobalt/js_profiler/profiler.h"
+
+#include <iostream>
+#include <limits>
+#include <memory>
+#include <string>
+#include <utility>
+
+#include "cobalt/base/polymorphic_downcast.h"
+#include "cobalt/js_profiler/profiler_trace_builder.h"
+#include "cobalt/js_profiler/profiler_trace_wrapper.h"
+#include "cobalt/web/cache_utils.h"
+#include "cobalt/web/context.h"
+#include "cobalt/web/dom_exception.h"
+#include "cobalt/web/environment_settings.h"
+#include "cobalt/web/environment_settings_helper.h"
+
+namespace {
+v8::Local<v8::String> toV8String(v8::Isolate* isolate,
+                                 const std::string& string) {
+  if (string.empty()) return v8::String::Empty(isolate);
+  return v8::String::NewFromUtf8(isolate, string.c_str(),
+                                 v8::NewStringType::kNormal, string.length())
+      .ToLocalChecked();
+}
+}  // namespace
+
+namespace cobalt {
+namespace js_profiler {
+
+volatile uint32_t s_lastProfileId = 0;
+
+static constexpr int kBaseSampleIntervalMs = 10;
+
+Profiler::Profiler(script::EnvironmentSettings* settings,
+                   ProfilerInitOptions options,
+                   script::ExceptionState* exception_state)
+    : cobalt::web::EventTarget(settings),
+      stopped_(false),
+      time_origin_{base::TimeTicks::Now()} {
+  profiler_id_ = nextProfileId();
+
+  const base::TimeDelta sample_interval =
+      base::Milliseconds(options.sample_interval());
+
+  int64_t sample_interval_us = sample_interval.InMicroseconds();
+
+  if (sample_interval_us < 0 ||
+      sample_interval_us > std::numeric_limits<int>::max()) {
+    sample_interval_us = 0;
+  }
+
+  int effective_sample_interval_ms =
+      static_cast<int>(sample_interval.InMilliseconds());
+  if (effective_sample_interval_ms % kBaseSampleIntervalMs != 0 ||
+      effective_sample_interval_ms == 0) {
+    effective_sample_interval_ms +=
+        (kBaseSampleIntervalMs -
+         effective_sample_interval_ms % kBaseSampleIntervalMs);
+  }
+  sample_interval_ = effective_sample_interval_ms;
+
+  auto isolate = web::get_isolate(settings);
+
+  auto status = ImplProfilingStart(
+      profiler_id_,
+      v8::CpuProfilingOptions(v8::kLeafNodeLineNumbers,
+                              options.max_buffer_size(), sample_interval_us),
+      settings);
+
+  if (status == v8::CpuProfilingStatus::kAlreadyStarted) {
+    web::DOMException::Raise(web::DOMException::kInvalidStateErr,
+                             "Profiler Already started", exception_state);
+  } else if (status == v8::CpuProfilingStatus::kErrorTooManyProfilers) {
+    web::DOMException::Raise(web::DOMException::kInvalidStateErr,
+                             "Too Many Profilers", exception_state);
+  }
+}
+
+Profiler::~Profiler() {
+  if (cpu_profiler_) {
+    cpu_profiler_->Dispose();
+    cpu_profiler_ = nullptr;
+  }
+}
+
+v8::CpuProfilingStatus Profiler::ImplProfilingStart(
+    std::string profiler_id, v8::CpuProfilingOptions options,
+    script::EnvironmentSettings* settings) {
+  auto isolate = web::get_isolate(settings);
+  cpu_profiler_ = v8::CpuProfiler::New(isolate);
+  cpu_profiler_->SetSamplingInterval(kBaseSampleIntervalMs *
+                                     base::Time::kMicrosecondsPerMillisecond);
+  return cpu_profiler_->StartProfiling(
+      toV8String(isolate, profiler_id), options,
+      std::make_unique<ProfilerMaxSamplesDelegate>(this));
+}
+
+std::string Profiler::nextProfileId() {
+  s_lastProfileId++;
+  return "cobalt::profiler[" + std::to_string(s_lastProfileId) + "]";
+}
+
+void Profiler::PerformStop(
+    script::EnvironmentSettings* environment_settings,
+    std::unique_ptr<script::ValuePromiseWrappable::Reference> promise_reference,
+    base::TimeTicks time_origin, std::string profiler_id) {
+  auto isolate = web::get_isolate(environment_settings);
+  auto profile =
+      cpu_profiler_->StopProfiling(toV8String(isolate, profiler_id_));
+  auto trace = ProfilerTraceBuilder::FromProfile(profile, time_origin_);
+  scoped_refptr<ProfilerTraceWrapper> result(new ProfilerTraceWrapper(trace));
+  cpu_profiler_->Dispose();
+  cpu_profiler_ = nullptr;
+  promise_reference->value().Resolve(result);
+}
+
+Profiler::ProfilerTracePromise Profiler::Stop(
+    script::EnvironmentSettings* environment_settings) {
+  script::HandlePromiseWrappable promise =
+      web::get_script_value_factory(environment_settings)
+          ->CreateInterfacePromise<scoped_refptr<ProfilerTraceWrapper>>();
+  if (!stopped()) {
+    stopped_ = true;
+    auto* global_wrappable = web::get_global_wrappable(environment_settings);
+    auto* context = web::get_context(environment_settings);
+    std::unique_ptr<script::ValuePromiseWrappable::Reference> promise_reference(
+        new script::ValuePromiseWrappable::Reference(global_wrappable,
+                                                     promise));
+
+    context->message_loop()->task_runner()->PostTask(
+        FROM_HERE,
+        base::BindOnce(&Profiler::PerformStop, base::Unretained(this),
+                       environment_settings, std::move(promise_reference),
+                       std::move(time_origin_), std::move(profiler_id_)));
+  } else {
+    promise->Reject(new web::DOMException(web::DOMException::kInvalidStateErr,
+                                          "Profiler already stopped."));
+  }
+  return promise;
+}
+
+}  // namespace js_profiler
+}  // namespace cobalt
diff --git a/cobalt/js_profiler/profiler.h b/cobalt/js_profiler/profiler.h
new file mode 100644
index 0000000..a6da1e7
--- /dev/null
+++ b/cobalt/js_profiler/profiler.h
@@ -0,0 +1,85 @@
+// Copyright 2023 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef COBALT_JS_PROFILER_PROFILER_H_
+#define COBALT_JS_PROFILER_PROFILER_H_
+
+#include <memory>
+#include <string>
+
+#include "cobalt/dom/performance_high_resolution_time.h"
+#include "cobalt/js_profiler/profiler_init_options.h"
+#include "cobalt/js_profiler/profiler_trace.h"
+#include "cobalt/script/promise.h"
+#include "cobalt/script/value_handle.h"
+#include "cobalt/script/wrappable.h"
+#include "cobalt/web/event_target.h"
+#include "third_party/v8/include/cppgc/member.h"
+#include "third_party/v8/include/v8-profiler.h"
+
+namespace cobalt {
+namespace js_profiler {
+
+class Profiler : public cobalt::web::EventTarget {
+ public:
+  using ProfilerTracePromise = script::HandlePromiseWrappable;
+
+  Profiler(script::EnvironmentSettings* settings, ProfilerInitOptions options,
+           script::ExceptionState* exception_state);
+  ~Profiler();
+
+  ProfilerTracePromise Stop(script::EnvironmentSettings* environment_settings);
+
+  bool stopped() const { return stopped_; }
+
+  dom::DOMHighResTimeStamp sample_interval() const { return sample_interval_; }
+
+  DEFINE_WRAPPABLE_TYPE(Profiler);
+
+  virtual v8::CpuProfilingStatus ImplProfilingStart(
+      std::string profiler_id, v8::CpuProfilingOptions options,
+      script::EnvironmentSettings* settings);
+
+ private:
+  void PerformStop(script::EnvironmentSettings* environment_settings,
+                   std::unique_ptr<script::ValuePromiseWrappable::Reference>
+                       promise_reference,
+                   base::TimeTicks time_origin, std::string profiler_id);
+
+  std::string nextProfileId();
+
+  bool stopped_;
+  dom::DOMHighResTimeStamp sample_interval_;
+  v8::CpuProfiler* cpu_profiler_ = nullptr;
+  base::TimeTicks time_origin_;
+  std::string profiler_id_;
+};
+
+class ProfilerMaxSamplesDelegate : public v8::DiscardedSamplesDelegate {
+ public:
+  explicit ProfilerMaxSamplesDelegate(Profiler* profiler)
+      : profiler_(profiler) {}
+  void Notify() override {
+    if (profiler_.Get()) {
+      profiler_->DispatchEvent(new web::Event("samplebufferfull"));
+    }
+  }
+
+ private:
+  cppgc::WeakMember<Profiler> profiler_;
+};
+
+}  // namespace js_profiler
+}  // namespace cobalt
+#endif  // COBALT_JS_PROFILER_PROFILER_H_
diff --git a/cobalt/js_profiler/profiler.idl b/cobalt/js_profiler/profiler.idl
new file mode 100644
index 0000000..6f37933
--- /dev/null
+++ b/cobalt/js_profiler/profiler.idl
@@ -0,0 +1,28 @@
+// Copyright 2023 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// https://wicg.github.io/js-self-profiling/#the-profiler-interface
+
+[
+  Exposed=Window,
+  Constructor(ProfilerInitOptions options),
+  ConstructorCallWith=EnvironmentSettings,
+  RaisesException = Constructor,
+]
+interface Profiler : EventTarget {
+  readonly attribute DOMHighResTimeStamp sampleInterval;
+  readonly attribute boolean stopped;
+
+  [CallWith=EnvironmentSettings] Promise<ProfilerTraceWrapper> stop();
+};
diff --git a/cobalt/js_profiler/profiler_frame.idl b/cobalt/js_profiler/profiler_frame.idl
new file mode 100644
index 0000000..84c5e6b
--- /dev/null
+++ b/cobalt/js_profiler/profiler_frame.idl
@@ -0,0 +1,22 @@
+// Copyright 2023 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// https://wicg.github.io/js-self-profiling/#the-profilerframe-dictionary
+
+dictionary ProfilerFrame {
+  required DOMString name;
+  unsigned long long resourceId;
+  unsigned long long line;
+  unsigned long long column;
+};
diff --git a/cobalt/js_profiler/profiler_init_options.idl b/cobalt/js_profiler/profiler_init_options.idl
new file mode 100644
index 0000000..7086803
--- /dev/null
+++ b/cobalt/js_profiler/profiler_init_options.idl
@@ -0,0 +1,20 @@
+// Copyright 2023 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// https://wicg.github.io/js-self-profiling/#dom-profilerinitoptions
+
+dictionary ProfilerInitOptions {
+  required DOMHighResTimeStamp sampleInterval;
+  required unsigned long maxBufferSize;
+};
diff --git a/cobalt/js_profiler/profiler_sample.idl b/cobalt/js_profiler/profiler_sample.idl
new file mode 100644
index 0000000..0b50acc
--- /dev/null
+++ b/cobalt/js_profiler/profiler_sample.idl
@@ -0,0 +1,20 @@
+// Copyright 2023 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// https://wicg.github.io/js-self-profiling/#the-profilersample-dictionary
+
+dictionary ProfilerSample {
+  required DOMHighResTimeStamp timestamp;
+  unsigned long long stackId;
+};
diff --git a/cobalt/js_profiler/profiler_stack.idl b/cobalt/js_profiler/profiler_stack.idl
new file mode 100644
index 0000000..073bf00
--- /dev/null
+++ b/cobalt/js_profiler/profiler_stack.idl
@@ -0,0 +1,20 @@
+// Copyright 2023 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// https://wicg.github.io/js-self-profiling/#the-profilerstack-dictionary
+
+dictionary ProfilerStack {
+  unsigned long long parentId;
+  required unsigned long long frameId;
+};
diff --git a/cobalt/js_profiler/profiler_trace.idl b/cobalt/js_profiler/profiler_trace.idl
new file mode 100644
index 0000000..199f339
--- /dev/null
+++ b/cobalt/js_profiler/profiler_trace.idl
@@ -0,0 +1,22 @@
+// Copyright 2023 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// https://wicg.github.io/js-self-profiling/#the-profilertrace-dictionary
+
+dictionary ProfilerTrace {
+  required sequence<DOMString> resources;
+  required sequence<ProfilerFrame> frames;
+  required sequence<ProfilerStack> stacks;
+  required sequence<ProfilerSample> samples;
+};
diff --git a/cobalt/js_profiler/profiler_trace_builder.cc b/cobalt/js_profiler/profiler_trace_builder.cc
new file mode 100644
index 0000000..5f8c06d
--- /dev/null
+++ b/cobalt/js_profiler/profiler_trace_builder.cc
@@ -0,0 +1,172 @@
+// Copyright 2023 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "cobalt/js_profiler/profiler_trace_builder.h"
+
+#include "base/time/time.h"
+#include "cobalt/dom/performance.h"
+#include "cobalt/js_profiler/profiler_frame.h"
+#include "cobalt/js_profiler/profiler_sample.h"
+#include "cobalt/js_profiler/profiler_stack.h"
+#include "cobalt/js_profiler/profiler_trace.h"
+#include "v8/include/v8.h"
+
+namespace cobalt {
+namespace js_profiler {
+
+ProfilerTrace ProfilerTraceBuilder::FromProfile(const v8::CpuProfile* profile,
+                                                base::TimeTicks time_origin) {
+  ProfilerTraceBuilder builder(time_origin);
+  if (profile) {
+    for (int i = 0; i < profile->GetSamplesCount(); i++) {
+      const auto* node = profile->GetSample(i);
+      auto timestamp = base::TimeTicks() +
+                       base::Microseconds(profile->GetSampleTimestamp(i));
+      builder.AddSample(node, timestamp);
+    }
+  }
+  return builder.GetTrace();
+}
+
+ProfilerTraceBuilder::ProfilerTraceBuilder(base::TimeTicks time_origin)
+    : time_origin_(time_origin) {}
+
+void ProfilerTraceBuilder::AddSample(const v8::CpuProfileNode* node,
+                                     base::TimeTicks timestamp) {
+  ProfilerSample sample;
+
+  auto relative_timestamp =
+      dom::Performance::MonotonicTimeToDOMHighResTimeStamp(time_origin_,
+                                                           timestamp);
+
+  sample.set_timestamp(relative_timestamp);
+  absl::optional<uint64_t> stack_id = GetOrInsertStackId(node);
+  if (stack_id.has_value()) sample.set_stack_id(stack_id.value());
+
+  samples_.push_back(sample);
+}
+
+absl::optional<uint64_t> ProfilerTraceBuilder::GetOrInsertStackId(
+    const v8::CpuProfileNode* node) {
+  if (!node) return absl::nullopt;
+
+  if (!ShouldIncludeStackFrame(node))
+    return GetOrInsertStackId(node->GetParent());
+
+  auto existing_stack_id = node_to_stack_map_.find(node);
+  if (existing_stack_id != node_to_stack_map_.end()) {
+    // If we found a stack entry for this node ID, the subpath to the root
+    // already exists in the trace, and we may coalesce.
+    return existing_stack_id->second;
+  }
+
+  ProfilerStack stack;
+  uint64_t frame_id = GetOrInsertFrameId(node);
+  stack.set_frame_id(frame_id);
+  absl::optional<int> parent_stack_id = GetOrInsertStackId(node->GetParent());
+  if (parent_stack_id.has_value()) stack.set_parent_id(parent_stack_id.value());
+
+  uint64_t stack_id = stacks_.size();
+  stacks_.push_back(stack);
+  node_to_stack_map_[node] = stack_id;
+  return stack_id;
+}
+
+uint64_t ProfilerTraceBuilder::GetOrInsertFrameId(
+    const v8::CpuProfileNode* node) {
+  auto existing_frame_id = node_to_frame_map_.find(node);
+
+  if (existing_frame_id != node_to_frame_map_.end())
+    return existing_frame_id->second;
+
+  ProfilerFrame frame;
+  std::string function_name(node->GetFunctionNameStr());
+  frame.set_name(function_name);
+  if (*node->GetScriptResourceNameStr() != '\0') {
+    uint64_t resource_id =
+        GetOrInsertResourceId(node->GetScriptResourceNameStr());
+    frame.set_resource_id(resource_id);
+  }
+  if (node->GetLineNumber() != v8::CpuProfileNode::kNoLineNumberInfo)
+    frame.set_line(node->GetLineNumber());
+  if (node->GetColumnNumber() != v8::CpuProfileNode::kNoColumnNumberInfo)
+    frame.set_column(node->GetColumnNumber());
+
+  uint64_t frame_id = frames_.size();
+  frames_.push_back(frame);
+  node_to_frame_map_[node] = frame_id;
+
+  return frame_id;
+}
+
+uint64_t ProfilerTraceBuilder::GetOrInsertResourceId(
+    const char* resource_name) {
+  auto existing_resource_id = resource_indices_.find(resource_name);
+
+  if (existing_resource_id != resource_indices_.end())
+    return existing_resource_id->second;
+
+  uint64_t resource_id = resources_.size();
+  resources_.push_back(resource_name);
+
+  resource_indices_[resource_name] = resource_id;
+
+  return resource_id;
+}
+
+ProfilerTrace ProfilerTraceBuilder::GetTrace() const {
+  ProfilerTrace trace;
+  trace.set_resources(resources_);
+  trace.set_frames(frames_);
+  trace.set_stacks(stacks_);
+  trace.set_samples(samples_);
+  return trace;
+}
+
+bool ProfilerTraceBuilder::ShouldIncludeStackFrame(
+    const v8::CpuProfileNode* node) {
+  DCHECK(node);
+
+  // Omit V8 metadata frames.
+  const v8::CpuProfileNode::SourceType source_type = node->GetSourceType();
+  if (source_type != v8::CpuProfileNode::kScript &&
+      source_type != v8::CpuProfileNode::kBuiltin &&
+      source_type != v8::CpuProfileNode::kCallback) {
+    return false;
+  }
+
+  // Attempt to attribute each stack frame to a script.
+  // - For JS functions, this is their own script.
+  // - For builtins, this is the first attributable caller script.
+  const v8::CpuProfileNode* resource_node = node;
+  if (source_type != v8::CpuProfileNode::kScript) {
+    while (resource_node &&
+           resource_node->GetScriptId() == v8::UnboundScript::kNoScriptId) {
+      resource_node = resource_node->GetParent();
+    }
+  }
+  if (!resource_node) return false;
+
+  int script_id = resource_node->GetScriptId();
+
+  // If we already tested whether or not this script was cross-origin, return
+  // the cached results.
+  auto it = script_same_origin_cache_.find(script_id);
+  if (it != script_same_origin_cache_.end()) return it->second;
+  // insert in pair script_same_origin_cache_ (script_id, true)
+  script_same_origin_cache_[script_id] = true;
+  return true;
+}
+}  // namespace js_profiler
+}  // namespace cobalt
diff --git a/cobalt/js_profiler/profiler_trace_builder.h b/cobalt/js_profiler/profiler_trace_builder.h
new file mode 100644
index 0000000..adf88bf
--- /dev/null
+++ b/cobalt/js_profiler/profiler_trace_builder.h
@@ -0,0 +1,82 @@
+// Copyright 2023 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef COBALT_JS_PROFILER_PROFILER_TRACE_BUILDER_H_
+#define COBALT_JS_PROFILER_PROFILER_TRACE_BUILDER_H_
+
+#include <map>
+#include <string>
+
+#include "base/time/time.h"
+#include "cobalt/script/sequence.h"
+#include "third_party/chromium/media/cobalt/third_party/abseil-cpp/absl/types/optional.h"
+#include "v8/include/v8-profiler.h"
+
+namespace cobalt {
+namespace js_profiler {
+
+class ProfilerFrame;
+class ProfilerSample;
+class ProfilerStack;
+class ProfilerTrace;
+
+class ProfilerTraceBuilder {
+ public:
+  static ProfilerTrace FromProfile(const v8::CpuProfile* profile,
+                                   base::TimeTicks time_origin);
+
+  explicit ProfilerTraceBuilder(base::TimeTicks time_origin);
+
+  ProfilerTraceBuilder(const ProfilerTraceBuilder&) = delete;
+  ProfilerTraceBuilder& operator=(const ProfilerTraceBuilder&) = delete;
+
+ private:
+  // Adds a stack sample from V8 to the trace, performing necessary filtering
+  // and coalescing.
+  void AddSample(const v8::CpuProfileNode* node, base::TimeTicks timestamp);
+
+  // Obtains the stack ID of the substack with the given node as its leaf,
+  // performing origin-based filtering.
+  absl::optional<uint64_t> GetOrInsertStackId(const v8::CpuProfileNode* node);
+
+  // Obtains the frame ID of the stack frame represented by the given node.
+  uint64_t GetOrInsertFrameId(const v8::CpuProfileNode* node);
+
+  // Obtains the resource ID for the given resource name.
+  uint64_t GetOrInsertResourceId(const char* resource_name);
+
+  ProfilerTrace GetTrace() const;
+
+  // Discards metadata frames and performs an origin check on the given stack
+  // frame, returning true if it either has the same origin as the profiler, or
+  // if it should be shared cross origin.
+  bool ShouldIncludeStackFrame(const v8::CpuProfileNode* node);
+
+  base::TimeTicks time_origin_;
+
+  script::Sequence<std::string> resources_;
+  script::Sequence<ProfilerFrame> frames_;
+  script::Sequence<ProfilerStack> stacks_;
+  script::Sequence<ProfilerSample> samples_;
+
+  // Maps V8-managed resource strings to their indices in the resources table.
+  std::map<const char*, uint64_t> resource_indices_;
+  std::map<const v8::CpuProfileNode*, uint64_t> node_to_stack_map_;
+  std::map<const v8::CpuProfileNode*, uint64_t> node_to_frame_map_;
+
+  std::map<int, bool> script_same_origin_cache_;
+};
+}  // namespace js_profiler
+}  // namespace cobalt
+#endif  // COBALT_JS_PROFILER_PROFILER_TRACE_BUILDER_H_
diff --git a/cobalt/js_profiler/profiler_trace_wrapper.h b/cobalt/js_profiler/profiler_trace_wrapper.h
new file mode 100644
index 0000000..9968527
--- /dev/null
+++ b/cobalt/js_profiler/profiler_trace_wrapper.h
@@ -0,0 +1,48 @@
+// Copyright 2023 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef COBALT_JS_PROFILER_PROFILER_TRACE_WRAPPER_H_
+#define COBALT_JS_PROFILER_PROFILER_TRACE_WRAPPER_H_
+
+#include <string>
+
+#include "cobalt/js_profiler/profiler_trace.h"
+
+namespace cobalt {
+namespace js_profiler {
+class ProfilerTraceWrapper : public script::Wrappable {
+ public:
+  DEFINE_WRAPPABLE_TYPE(ProfilerTraceWrapper);
+  explicit ProfilerTraceWrapper(ProfilerTrace trace) {
+    resources_ = trace.resources();
+    frames_ = trace.frames();
+    stacks_ = trace.stacks();
+    samples_ = trace.samples();
+  }
+  ProfilerTraceWrapper() {}
+  script::Sequence<std::string> resources() const { return resources_; }
+  script::Sequence<ProfilerFrame> frames() const { return frames_; }
+  script::Sequence<ProfilerStack> stacks() const { return stacks_; }
+  script::Sequence<ProfilerSample> samples() const { return samples_; }
+
+ private:
+  script::Sequence<std::string> resources_;
+  script::Sequence<ProfilerFrame> frames_;
+  script::Sequence<ProfilerStack> stacks_;
+  script::Sequence<ProfilerSample> samples_;
+};
+}  // namespace js_profiler
+}  // namespace cobalt
+
+#endif  // COBALT_JS_PROFILER_PROFILER_TRACE_WRAPPER_H_
diff --git a/cobalt/js_profiler/profiler_trace_wrapper.idl b/cobalt/js_profiler/profiler_trace_wrapper.idl
new file mode 100644
index 0000000..b564ab2
--- /dev/null
+++ b/cobalt/js_profiler/profiler_trace_wrapper.idl
@@ -0,0 +1,24 @@
+// Copyright 2023 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Custom, not in spec. Interface wrapper for ProfilerTrace to make
+// compatible with Promises implementation in Cobalt.
+
+[Constructor(optional ProfilerTrace trace)]
+interface ProfilerTraceWrapper {
+    readonly attribute sequence<DOMString> resources;
+    readonly attribute sequence<ProfilerFrame> frames;
+    readonly attribute sequence<ProfilerStack> stacks;
+    readonly attribute sequence<ProfilerSample> samples;
+};
diff --git a/cobalt/loader/fetcher_cache.cc b/cobalt/loader/fetcher_cache.cc
index 1e6adb5..d797c27 100644
--- a/cobalt/loader/fetcher_cache.cc
+++ b/cobalt/loader/fetcher_cache.cc
@@ -348,6 +348,9 @@
 
   total_size_ += entry->capacity();
   ++count_resources_cached_;
+  // TODO(b/270993319): For debugging cache integrity issues in production
+  //                    only, remove after identifying the root cause.
+  CHECK_EQ(count_resources_cached_, static_cast<int>(cache_entries_.size()));
 
   while (total_size_ > capacity_) {
     // TODO(b/270993319): For debugging cache integrity issues in production
diff --git a/cobalt/media/BUILD.gn b/cobalt/media/BUILD.gn
index bde4beb..11bc212 100644
--- a/cobalt/media/BUILD.gn
+++ b/cobalt/media/BUILD.gn
@@ -107,7 +107,7 @@
     "//cobalt/system_window:system_window",
     "//nb",
     "//net",
-    "//starboard",
+    "//starboard:starboard_group",
     "//third_party/chromium/media",
     "//third_party/protobuf:protobuf_lite",
     "//url",
@@ -121,6 +121,7 @@
     "base/cval_stats_test.cc",
     "base/decoder_buffer_cache_test.cc",
     "file_data_source_test.cc",
+    "media_module_test.cc",
     "progressive/demuxer_extension_wrapper_test.cc",
     "progressive/mock_data_source_reader.h",
     "progressive/mp4_map_unittest.cc",
diff --git a/cobalt/media/base/pipeline.h b/cobalt/media/base/pipeline.h
index d0f9175..265743a 100644
--- a/cobalt/media/base/pipeline.h
+++ b/cobalt/media/base/pipeline.h
@@ -126,7 +126,8 @@
                      const base::Closure& duration_change_cb,
                      const base::Closure& output_mode_change_cb,
                      const base::Closure& content_size_change_cb,
-                     const std::string& max_video_capabilities) = 0;
+                     const std::string& max_video_capabilities,
+                     const int max_video_input_size) = 0;
 
 #if SB_HAS(PLAYER_WITH_URL)
   // Build a pipeline with an url-base player.
diff --git a/cobalt/media/base/sbplayer_bridge.cc b/cobalt/media/base/sbplayer_bridge.cc
index 0f3ec4c..c22512e 100644
--- a/cobalt/media/base/sbplayer_bridge.cc
+++ b/cobalt/media/base/sbplayer_bridge.cc
@@ -30,6 +30,7 @@
 #include "starboard/common/player.h"
 #include "starboard/common/string.h"
 #include "starboard/configuration.h"
+#include "starboard/extension/player_set_max_video_input_size.h"
 #include "starboard/memory.h"
 #include "starboard/once.h"
 #include "third_party/chromium/media/base/starboard_utils.h"
@@ -226,7 +227,8 @@
     SbPlayerSetBoundsHelper* set_bounds_helper, bool allow_resume_after_suspend,
     SbPlayerOutputMode default_output_mode,
     DecodeTargetProvider* const decode_target_provider,
-    const std::string& max_video_capabilities, std::string pipeline_identifier)
+    const std::string& max_video_capabilities, int max_video_input_size,
+    std::string pipeline_identifier)
     : sbplayer_interface_(interface),
       task_runner_(task_runner),
       get_decode_target_graphics_context_provider_func_(
@@ -242,6 +244,7 @@
       video_config_(video_config),
       decode_target_provider_(decode_target_provider),
       max_video_capabilities_(max_video_capabilities),
+      max_video_input_size_(max_video_input_size),
       cval_stats_(&interface->cval_stats_),
       pipeline_identifier_(pipeline_identifier)
 #if SB_HAS(PLAYER_WITH_URL)
@@ -731,6 +734,15 @@
 
   is_creating_player_ = true;
 
+  if (output_mode_ == kSbPlayerOutputModeInvalid) {
+    PlayerErrorCB(kSbPlayerInvalid, this, kSbPlayerErrorDecode,
+                  "Invalid output mode returned by "
+                  "SbPlayerBridge::ComputeSbPlayerOutputMode()");
+    is_creating_player_ = false;
+    player_ = kSbPlayerInvalid;
+    return;
+  }
+
   if (max_video_capabilities_.empty()) {
     FormatSupportQueryMetrics::PrintAndResetMetrics();
   }
@@ -760,6 +772,18 @@
   DCHECK_EQ(sbplayer_interface_->GetPreferredOutputMode(&creation_param),
             output_mode_);
   cval_stats_->StartTimer(MediaTiming::SbPlayerCreate, pipeline_identifier_);
+  const StarboardExtensionPlayerSetMaxVideoInputSizeApi*
+      player_set_max_video_input_size_extension =
+          static_cast<const StarboardExtensionPlayerSetMaxVideoInputSizeApi*>(
+              SbSystemGetExtension(
+                  kStarboardExtensionPlayerSetMaxVideoInputSizeName));
+  if (player_set_max_video_input_size_extension &&
+      strcmp(player_set_max_video_input_size_extension->name,
+             kStarboardExtensionPlayerSetMaxVideoInputSizeName) == 0 &&
+      player_set_max_video_input_size_extension->version >= 1) {
+    player_set_max_video_input_size_extension
+        ->SetMaxVideoInputSizeForCurrentThread(max_video_input_size_);
+  }
   player_ = sbplayer_interface_->Create(
       window_, &creation_param, &SbPlayerBridge::DeallocateSampleCB,
       &SbPlayerBridge::DecoderStatusCB, &SbPlayerBridge::PlayerStatusCB,
@@ -1268,7 +1292,6 @@
 
   LOG(INFO) << "Output mode is set to " << GetPlayerOutputModeName(output_mode);
 
-  CHECK_NE(kSbPlayerOutputModeInvalid, output_mode);
   return output_mode;
 }
 
diff --git a/cobalt/media/base/sbplayer_bridge.h b/cobalt/media/base/sbplayer_bridge.h
index a48e53c..d8a2abc 100644
--- a/cobalt/media/base/sbplayer_bridge.h
+++ b/cobalt/media/base/sbplayer_bridge.h
@@ -94,7 +94,7 @@
                  SbPlayerOutputMode default_output_mode,
                  DecodeTargetProvider* const decode_target_provider,
                  const std::string& max_video_capabilities,
-                 std::string pipeline_identifier);
+                 int max_video_input_size, std::string pipeline_identifier);
 
   ~SbPlayerBridge();
 
@@ -301,6 +301,9 @@
   // A string of video maximum capabilities.
   std::string max_video_capabilities_;
 
+  // Set the maximum size in bytes of an input buffer for video.
+  int max_video_input_size_;
+
   // Keep track of errors during player creation.
   bool is_creating_player_ = false;
   std::string player_creation_error_message_;
diff --git a/cobalt/media/base/sbplayer_pipeline.cc b/cobalt/media/base/sbplayer_pipeline.cc
index 8b29628..994f7b9 100644
--- a/cobalt/media/base/sbplayer_pipeline.cc
+++ b/cobalt/media/base/sbplayer_pipeline.cc
@@ -229,7 +229,8 @@
                              const base::Closure& duration_change_cb,
                              const base::Closure& output_mode_change_cb,
                              const base::Closure& content_size_change_cb,
-                             const std::string& max_video_capabilities) {
+                             const std::string& max_video_capabilities,
+                             const int max_video_input_size) {
   TRACE_EVENT0("cobalt::media", "SbPlayerPipeline::Start");
 
   DCHECK(!ended_cb.is_null());
@@ -252,6 +253,7 @@
   parameters.output_mode_change_cb = output_mode_change_cb;
   parameters.content_size_change_cb = content_size_change_cb;
   parameters.max_video_capabilities = max_video_capabilities;
+  parameters.max_video_input_size = max_video_input_size;
 #if SB_HAS(PLAYER_WITH_URL)
   parameters.is_url_based = false;
 #endif  // SB_HAS(PLAYER_WITH_URL)
@@ -640,6 +642,7 @@
   output_mode_change_cb_ = parameters.output_mode_change_cb;
   content_size_change_cb_ = parameters.content_size_change_cb;
   max_video_capabilities_ = parameters.max_video_capabilities;
+  max_video_input_size_ = parameters.max_video_input_size;
 #if SB_HAS(PLAYER_WITH_URL)
   is_url_based_ = parameters.is_url_based;
   if (is_url_based_) {
@@ -837,7 +840,7 @@
         audio_mime_type, video_config, video_mime_type, window_, drm_system,
         this, set_bounds_helper_.get(), allow_resume_after_suspend_,
         default_output_mode_, decode_target_provider_, max_video_capabilities_,
-        pipeline_identifier_));
+        max_video_input_size_, pipeline_identifier_));
     if (player_bridge_->IsValid()) {
 #if SB_API_VERSION >= 15
       // TODO(b/267678497): When `player_bridge_->GetAudioConfigurations()`
@@ -1229,7 +1232,12 @@
       CallErrorCB(::media::PIPELINE_ERROR_DECODE, message);
       break;
     case kSbPlayerErrorCapabilityChanged:
-      CallErrorCB(::media::PLAYBACK_CAPABILITY_CHANGED, message);
+      CallErrorCB(::media::PIPELINE_ERROR_DECODE,
+                  message.empty()
+                      ? kSbPlayerCapabilityChangedErrorMessage
+                      : ::starboard::FormatString(
+                            "%s: %s", kSbPlayerCapabilityChangedErrorMessage,
+                            message.c_str()));
       break;
     case kSbPlayerErrorMax:
       NOTREACHED();
diff --git a/cobalt/media/base/sbplayer_pipeline.h b/cobalt/media/base/sbplayer_pipeline.h
index dc851c8..9b793f5 100644
--- a/cobalt/media/base/sbplayer_pipeline.h
+++ b/cobalt/media/base/sbplayer_pipeline.h
@@ -82,7 +82,8 @@
              const base::Closure& duration_change_cb,
              const base::Closure& output_mode_change_cb,
              const base::Closure& content_size_change_cb,
-             const std::string& max_video_capabilities) override;
+             const std::string& max_video_capabilities,
+             const int max_video_input_size) override;
 #if SB_HAS(PLAYER_WITH_URL)
   void Start(const SetDrmSystemReadyCB& set_drm_system_ready_cb,
              const OnEncryptedMediaInitDataEncounteredCB&
@@ -133,6 +134,7 @@
     base::Closure output_mode_change_cb;
     base::Closure content_size_change_cb;
     std::string max_video_capabilities;
+    int max_video_input_size;
 #if SB_HAS(PLAYER_WITH_URL)
     std::string source_url;
     bool is_url_based;
@@ -344,6 +346,8 @@
   size_t retrograde_media_time_counter_ = 0;
   // The maximum video playback capabilities required for the playback.
   base::CVal<std::string> max_video_capabilities_;
+  // Set the maximum size in bytes of an input buffer for video.
+  int max_video_input_size_;
 
   PlaybackStatistics playback_statistics_;
 
@@ -351,6 +355,12 @@
 
   SbTimeMonotonic set_drm_system_ready_cb_time_ = -1;
 
+  // Message to signal a capability changed error.
+  // "MEDIA_ERR_CAPABILITY_CHANGED" must be in the error message to be
+  // understood as a capability changed error. Do not change this message.
+  static constexpr const char* kSbPlayerCapabilityChangedErrorMessage =
+      "MEDIA_ERR_CAPABILITY_CHANGED";
+
   DISALLOW_COPY_AND_ASSIGN(SbPlayerPipeline);
 };
 
diff --git a/cobalt/media/media_module.cc b/cobalt/media/media_module.cc
index 06e7e26..024c660 100644
--- a/cobalt/media/media_module.cc
+++ b/cobalt/media/media_module.cc
@@ -26,6 +26,7 @@
 #include "base/synchronization/waitable_event.h"
 #include "cobalt/media/base/format_support_query_metrics.h"
 #include "starboard/common/string.h"
+#include "starboard/extension/h5vcc_config.h"
 #include "starboard/media.h"
 #include "starboard/window.h"
 #include "third_party/chromium/media/base/mime_util.h"
@@ -198,6 +199,20 @@
     LOG(INFO) << (value ? "Enabling" : "Disabling")
               << " media metrics collection.";
     return true;
+  } else if (name == "BackgroundPlaybackEnabled") {
+    const StarboardExtensionH5vccConfigApi* h5vcc_config_api =
+        static_cast<const StarboardExtensionH5vccConfigApi*>(
+            SbSystemGetExtension(kStarboardExtensionH5vccConfigName));
+    if (h5vcc_config_api &&
+        strcmp(h5vcc_config_api->name, kStarboardExtensionH5vccConfigName) ==
+            0 &&
+        h5vcc_config_api->version >= 1) {
+      bool enable_background_playback = value;
+      LOG(INFO) << "Set BackgroundPlaybackEnabled to "
+                << (enable_background_playback ? "enabled" : "disabled");
+      h5vcc_config_api->EnableBackgroundPlayback(enable_background_playback);
+    }
+    return true;
 #if SB_API_VERSION >= 15
   } else if (name == "AudioWriteDurationLocal" && value > 0) {
     audio_write_duration_local_ = value;
diff --git a/cobalt/media/media_module_test.cc b/cobalt/media/media_module_test.cc
new file mode 100644
index 0000000..af3c93f
--- /dev/null
+++ b/cobalt/media/media_module_test.cc
@@ -0,0 +1,29 @@
+// Copyright 2024 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "cobalt/media/media_module.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace cobalt {
+namespace media {
+
+TEST(MediaModuleTest, SetConfiguration) {
+  MediaModule mediaModule(nullptr, nullptr);
+
+  EXPECT_EQ(mediaModule.SetConfiguration("BackgroundPlaybackEnabled", 1), true);
+  EXPECT_EQ(mediaModule.SetConfiguration("BackgroundPlaybackEnabled", 0), true);
+}
+}  // namespace media
+}  // namespace cobalt
diff --git a/cobalt/media/player/web_media_player.h b/cobalt/media/player/web_media_player.h
index 459ec6e..a850cc7 100644
--- a/cobalt/media/player/web_media_player.h
+++ b/cobalt/media/player/web_media_player.h
@@ -51,7 +51,6 @@
     kNetworkStateFormatError,
     kNetworkStateNetworkError,
     kNetworkStateDecodeError,
-    kNetworkStateCapabilityChangedError,
   };
 
   enum ReadyState {
@@ -217,6 +216,7 @@
   virtual void SourceOpened(::media::ChunkDemuxer* chunk_demuxer) = 0;
   virtual std::string SourceURL() const = 0;
   virtual std::string MaxVideoCapabilities() const = 0;
+  virtual int MaxVideoInputSize() const = 0;
 
   // Clients should implement this in order to indicate a preference for whether
   // a video should be decoded to a texture or through a punch out system.  If
diff --git a/cobalt/media/player/web_media_player_impl.cc b/cobalt/media/player/web_media_player_impl.cc
index 6941c04..e773474 100644
--- a/cobalt/media/player/web_media_player_impl.cc
+++ b/cobalt/media/player/web_media_player_impl.cc
@@ -762,11 +762,6 @@
       SetNetworkError(WebMediaPlayer::kNetworkStateDecodeError,
                       message.empty() ? "Hardware context reset." : message);
       break;
-
-    case ::media::PLAYBACK_CAPABILITY_CHANGED:
-      SetNetworkError(WebMediaPlayer::kNetworkStateCapabilityChangedError,
-                      message.empty() ? "Capability changed." : message);
-      break;
     default:
       NOTREACHED();
       break;
@@ -851,7 +846,7 @@
       BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnDurationChanged),
       BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnOutputModeChanged),
       BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnContentSizeChanged),
-      GetClient()->MaxVideoCapabilities());
+      GetClient()->MaxVideoCapabilities(), GetClient()->MaxVideoInputSize());
 }
 
 void WebMediaPlayerImpl::SetNetworkState(WebMediaPlayer::NetworkState state) {
diff --git a/cobalt/media/sandbox/BUILD.gn b/cobalt/media/sandbox/BUILD.gn
index 84d2620..5edbfc4 100644
--- a/cobalt/media/sandbox/BUILD.gn
+++ b/cobalt/media/sandbox/BUILD.gn
@@ -24,7 +24,7 @@
     "//cobalt/base",
     "//cobalt/math",
     "//cobalt/media",
-    "//starboard",
+    "//starboard:starboard_group",
     "//third_party/chromium/media",
   ]
 }
@@ -57,7 +57,7 @@
     "//cobalt/storage",
     "//cobalt/system_window",
     "//cobalt/trace_event",
-    "//starboard",
+    "//starboard:starboard_group",
     "//third_party/chromium/media",
     "//url",
   ]
diff --git a/cobalt/media/sandbox/web_media_player_helper.cc b/cobalt/media/sandbox/web_media_player_helper.cc
index c2364a5..0cb8447 100644
--- a/cobalt/media/sandbox/web_media_player_helper.cc
+++ b/cobalt/media/sandbox/web_media_player_helper.cc
@@ -54,6 +54,7 @@
   }
   std::string SourceURL() const override { return ""; }
   std::string MaxVideoCapabilities() const override { return std::string(); };
+  int MaxVideoInputSize() const override { return 0; };
 
   void EncryptedMediaInitDataEncountered(const char*, const unsigned char*,
                                          unsigned) override {}
diff --git a/cobalt/media_capture/BUILD.gn b/cobalt/media_capture/BUILD.gn
index 9e7ffc9..df692af 100644
--- a/cobalt/media_capture/BUILD.gn
+++ b/cobalt/media_capture/BUILD.gn
@@ -49,7 +49,7 @@
     "//cobalt/script:engine",
     "//cobalt/speech",
     "//cobalt/web:dom_exception",
-    "//starboard",
+    "//starboard:starboard_group",
   ]
 }
 
diff --git a/cobalt/media_stream/BUILD.gn b/cobalt/media_stream/BUILD.gn
index b10e1fc..058ee06 100644
--- a/cobalt/media_stream/BUILD.gn
+++ b/cobalt/media_stream/BUILD.gn
@@ -47,7 +47,7 @@
     "//cobalt/media",
     "//cobalt/script",
     "//cobalt/speech",
-    "//starboard",
+    "//starboard:starboard_group",
   ]
 }
 
diff --git a/cobalt/network/BUILD.gn b/cobalt/network/BUILD.gn
index 73e33ca..e0ef901 100644
--- a/cobalt/network/BUILD.gn
+++ b/cobalt/network/BUILD.gn
@@ -12,6 +12,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import("//cobalt/network/certs.gni")
+
 static_library("network") {
   has_pedantic_warnings = true
 
@@ -84,146 +86,7 @@
 
 copy("copy_ssl_certificates") {
   install_content = true
-  sources = [
-    "//cobalt/content/ssl/certs/002c0b4f.0",
-    "//cobalt/content/ssl/certs/02265526.0",
-    "//cobalt/content/ssl/certs/062cdee6.0",
-    "//cobalt/content/ssl/certs/064e0aa9.0",
-    "//cobalt/content/ssl/certs/06dc52d5.0",
-    "//cobalt/content/ssl/certs/09789157.0",
-    "//cobalt/content/ssl/certs/0a775a30.0",
-    "//cobalt/content/ssl/certs/0b1b94ef.0",
-    "//cobalt/content/ssl/certs/0b9bc432.0",
-    "//cobalt/content/ssl/certs/0bf05006.0",
-    "//cobalt/content/ssl/certs/0f5dc4f3.0",
-    "//cobalt/content/ssl/certs/0f6fa695.0",
-    "//cobalt/content/ssl/certs/1001acf7.0",
-    "//cobalt/content/ssl/certs/106f3e4d.0",
-    "//cobalt/content/ssl/certs/14bc7599.0",
-    "//cobalt/content/ssl/certs/18856ac4.0",
-    "//cobalt/content/ssl/certs/1d3472b9.0",
-    "//cobalt/content/ssl/certs/1e08bfd1.0",
-    "//cobalt/content/ssl/certs/1e09d511.0",
-    "//cobalt/content/ssl/certs/244b5494.0",
-    "//cobalt/content/ssl/certs/2923b3f9.0",
-    "//cobalt/content/ssl/certs/2ae6433e.0",
-    "//cobalt/content/ssl/certs/2b349938.0",
-    "//cobalt/content/ssl/certs/32888f65.0",
-    "//cobalt/content/ssl/certs/349f2832.0",
-    "//cobalt/content/ssl/certs/3513523f.0",
-    "//cobalt/content/ssl/certs/3bde41ac.0",
-    "//cobalt/content/ssl/certs/3e44d2f7.0",
-    "//cobalt/content/ssl/certs/3e45d192.0",
-    "//cobalt/content/ssl/certs/3fb36b73.0",
-    "//cobalt/content/ssl/certs/40193066.0",
-    "//cobalt/content/ssl/certs/4042bcee.0",
-    "//cobalt/content/ssl/certs/40547a79.0",
-    "//cobalt/content/ssl/certs/406c9bb1.0",
-    "//cobalt/content/ssl/certs/4304c5e5.0",
-    "//cobalt/content/ssl/certs/48bec511.0",
-    "//cobalt/content/ssl/certs/4b718d9b.0",
-    "//cobalt/content/ssl/certs/4bfab552.0",
-    "//cobalt/content/ssl/certs/4f316efb.0",
-    "//cobalt/content/ssl/certs/5443e9e3.0",
-    "//cobalt/content/ssl/certs/54657681.0",
-    "//cobalt/content/ssl/certs/57bcb2da.0",
-    "//cobalt/content/ssl/certs/5931b5bc.0",
-    "//cobalt/content/ssl/certs/5a7722fb.0",
-    "//cobalt/content/ssl/certs/5ad8a5d6.0",
-    "//cobalt/content/ssl/certs/5cd81ad7.0",
-    "//cobalt/content/ssl/certs/5d3033c5.0",
-    "//cobalt/content/ssl/certs/5e98733a.0",
-    "//cobalt/content/ssl/certs/5f15c80c.0",
-    "//cobalt/content/ssl/certs/5f618aec.0",
-    "//cobalt/content/ssl/certs/607986c7.0",
-    "//cobalt/content/ssl/certs/626dceaf.0",
-    "//cobalt/content/ssl/certs/653b494a.0",
-    "//cobalt/content/ssl/certs/66445960.0",
-    "//cobalt/content/ssl/certs/68dd7389.0",
-    "//cobalt/content/ssl/certs/6b99d060.0",
-    "//cobalt/content/ssl/certs/6d41d539.0",
-    "//cobalt/content/ssl/certs/6fa5da56.0",
-    "//cobalt/content/ssl/certs/706f604c.0",
-    "//cobalt/content/ssl/certs/749e9e03.0",
-    "//cobalt/content/ssl/certs/75d1b2ed.0",
-    "//cobalt/content/ssl/certs/76faf6c0.0",
-    "//cobalt/content/ssl/certs/7719f463.0",
-    "//cobalt/content/ssl/certs/773e07ad.0",
-    "//cobalt/content/ssl/certs/7a3adc42.0",
-    "//cobalt/content/ssl/certs/7a780d93.0",
-    "//cobalt/content/ssl/certs/7aaf71c0.0",
-    "//cobalt/content/ssl/certs/7f3d5d1d.0",
-    "//cobalt/content/ssl/certs/8160b96c.0",
-    "//cobalt/content/ssl/certs/8508e720.0",
-    "//cobalt/content/ssl/certs/8cb5ee0f.0",
-    "//cobalt/content/ssl/certs/8d86cdd1.0",
-    "//cobalt/content/ssl/certs/8d89cda1.0",
-    "//cobalt/content/ssl/certs/8f103249.0",
-    "//cobalt/content/ssl/certs/90c5a3c8.0",
-    "//cobalt/content/ssl/certs/930ac5d2.0",
-    "//cobalt/content/ssl/certs/93bc0acc.0",
-    "//cobalt/content/ssl/certs/9482e63a.0",
-    "//cobalt/content/ssl/certs/9846683b.0",
-    "//cobalt/content/ssl/certs/988a38cb.0",
-    "//cobalt/content/ssl/certs/9b5697b0.0",
-    "//cobalt/content/ssl/certs/9c8dfbd4.0",
-    "//cobalt/content/ssl/certs/9d04f354.0",
-    "//cobalt/content/ssl/certs/9ef4a08a.0",
-    "//cobalt/content/ssl/certs/9f727ac7.0",
-    "//cobalt/content/ssl/certs/a3418fda.0",
-    "//cobalt/content/ssl/certs/a94d09e5.0",
-    "//cobalt/content/ssl/certs/aee5f10d.0",
-    "//cobalt/content/ssl/certs/b0e59380.0",
-    "//cobalt/content/ssl/certs/b1159c4c.0",
-    "//cobalt/content/ssl/certs/b433981b.0",
-    "//cobalt/content/ssl/certs/b66938e9.0",
-    "//cobalt/content/ssl/certs/b727005e.0",
-    "//cobalt/content/ssl/certs/b7a5b843.0",
-    "//cobalt/content/ssl/certs/b81b93f0.0",
-    "//cobalt/content/ssl/certs/bf53fb88.0",
-    "//cobalt/content/ssl/certs/c01eb047.0",
-    "//cobalt/content/ssl/certs/c28a8a30.0",
-    "//cobalt/content/ssl/certs/ca6e4ad9.0",
-    "//cobalt/content/ssl/certs/cbf06781.0",
-    "//cobalt/content/ssl/certs/cc450945.0",
-    "//cobalt/content/ssl/certs/cd58d51e.0",
-    "//cobalt/content/ssl/certs/cd8c0d63.0",
-    "//cobalt/content/ssl/certs/ce5e74ef.0",
-    "//cobalt/content/ssl/certs/d4dae3dd.0",
-    "//cobalt/content/ssl/certs/d52c538d.0",
-    "//cobalt/content/ssl/certs/d6325660.0",
-    "//cobalt/content/ssl/certs/d7e8dc79.0",
-    "//cobalt/content/ssl/certs/d887a5bb.0",
-    "//cobalt/content/ssl/certs/dc4d6a89.0",
-    "//cobalt/content/ssl/certs/dd8e9d41.0",
-    "//cobalt/content/ssl/certs/de6d66f3.0",
-    "//cobalt/content/ssl/certs/e113c810.0",
-    "//cobalt/content/ssl/certs/e18bfb83.0",
-    "//cobalt/content/ssl/certs/e35234b1.0",
-    "//cobalt/content/ssl/certs/e36a6752.0",
-    "//cobalt/content/ssl/certs/e73d606e.0",
-    "//cobalt/content/ssl/certs/e868b802.0",
-    "//cobalt/content/ssl/certs/e8de2f56.0",
-    "//cobalt/content/ssl/certs/ecccd8db.0",
-    "//cobalt/content/ssl/certs/ed858448.0",
-    "//cobalt/content/ssl/certs/ee64a828.0",
-    "//cobalt/content/ssl/certs/eed8c118.0",
-    "//cobalt/content/ssl/certs/ef954a4e.0",
-    "//cobalt/content/ssl/certs/f081611a.0",
-    "//cobalt/content/ssl/certs/f0c70a8d.0",
-    "//cobalt/content/ssl/certs/f249de83.0",
-    "//cobalt/content/ssl/certs/f30dd6ad.0",
-    "//cobalt/content/ssl/certs/f3377b1b.0",
-    "//cobalt/content/ssl/certs/f387163d.0",
-    "//cobalt/content/ssl/certs/f39fc864.0",
-    "//cobalt/content/ssl/certs/f51bb24c.0",
-    "//cobalt/content/ssl/certs/fa5da96b.0",
-    "//cobalt/content/ssl/certs/fc5a8f99.0",
-    "//cobalt/content/ssl/certs/fd64f3fc.0",
-    "//cobalt/content/ssl/certs/fe8a2cd8.0",
-    "//cobalt/content/ssl/certs/feffd413.0",
-    "//cobalt/content/ssl/certs/ff34af3f.0",
-  ]
+  sources = network_certs
   outputs =
       [ "$sb_static_contents_output_data_dir/ssl/certs/{{source_file_part}}" ]
 }
diff --git a/cobalt/network/certs.gni b/cobalt/network/certs.gni
new file mode 100644
index 0000000..a8be5b3
--- /dev/null
+++ b/cobalt/network/certs.gni
@@ -0,0 +1,135 @@
+network_certs = [
+  "//cobalt/content/ssl/certs/002c0b4f.0",
+  "//cobalt/content/ssl/certs/02265526.0",
+  "//cobalt/content/ssl/certs/062cdee6.0",
+  "//cobalt/content/ssl/certs/064e0aa9.0",
+  "//cobalt/content/ssl/certs/06dc52d5.0",
+  "//cobalt/content/ssl/certs/09789157.0",
+  "//cobalt/content/ssl/certs/0a775a30.0",
+  "//cobalt/content/ssl/certs/0b1b94ef.0",
+  "//cobalt/content/ssl/certs/0b9bc432.0",
+  "//cobalt/content/ssl/certs/0bf05006.0",
+  "//cobalt/content/ssl/certs/0f5dc4f3.0",
+  "//cobalt/content/ssl/certs/0f6fa695.0",
+  "//cobalt/content/ssl/certs/1001acf7.0",
+  "//cobalt/content/ssl/certs/106f3e4d.0",
+  "//cobalt/content/ssl/certs/14bc7599.0",
+  "//cobalt/content/ssl/certs/18856ac4.0",
+  "//cobalt/content/ssl/certs/1d3472b9.0",
+  "//cobalt/content/ssl/certs/1e08bfd1.0",
+  "//cobalt/content/ssl/certs/1e09d511.0",
+  "//cobalt/content/ssl/certs/244b5494.0",
+  "//cobalt/content/ssl/certs/2923b3f9.0",
+  "//cobalt/content/ssl/certs/2ae6433e.0",
+  "//cobalt/content/ssl/certs/2b349938.0",
+  "//cobalt/content/ssl/certs/32888f65.0",
+  "//cobalt/content/ssl/certs/3513523f.0",
+  "//cobalt/content/ssl/certs/3bde41ac.0",
+  "//cobalt/content/ssl/certs/3fb36b73.0",
+  "//cobalt/content/ssl/certs/40193066.0",
+  "//cobalt/content/ssl/certs/4042bcee.0",
+  "//cobalt/content/ssl/certs/40547a79.0",
+  "//cobalt/content/ssl/certs/406c9bb1.0",
+  "//cobalt/content/ssl/certs/48bec511.0",
+  "//cobalt/content/ssl/certs/4b718d9b.0",
+  "//cobalt/content/ssl/certs/4bfab552.0",
+  "//cobalt/content/ssl/certs/4f316efb.0",
+  "//cobalt/content/ssl/certs/5443e9e3.0",
+  "//cobalt/content/ssl/certs/54657681.0",
+  "//cobalt/content/ssl/certs/57bcb2da.0",
+  "//cobalt/content/ssl/certs/5860aaa6.0",
+  "//cobalt/content/ssl/certs/5931b5bc.0",
+  "//cobalt/content/ssl/certs/5ad8a5d6.0",
+  "//cobalt/content/ssl/certs/5cd81ad7.0",
+  "//cobalt/content/ssl/certs/5e98733a.0",
+  "//cobalt/content/ssl/certs/5f15c80c.0",
+  "//cobalt/content/ssl/certs/5f618aec.0",
+  "//cobalt/content/ssl/certs/607986c7.0",
+  "//cobalt/content/ssl/certs/626dceaf.0",
+  "//cobalt/content/ssl/certs/653b494a.0",
+  "//cobalt/content/ssl/certs/68dd7389.0",
+  "//cobalt/content/ssl/certs/6b99d060.0",
+  "//cobalt/content/ssl/certs/6d41d539.0",
+  "//cobalt/content/ssl/certs/6fa5da56.0",
+  "//cobalt/content/ssl/certs/706f604c.0",
+  "//cobalt/content/ssl/certs/749e9e03.0",
+  "//cobalt/content/ssl/certs/75d1b2ed.0",
+  "//cobalt/content/ssl/certs/76faf6c0.0",
+  "//cobalt/content/ssl/certs/7719f463.0",
+  "//cobalt/content/ssl/certs/773e07ad.0",
+  "//cobalt/content/ssl/certs/7a3adc42.0",
+  "//cobalt/content/ssl/certs/7a780d93.0",
+  "//cobalt/content/ssl/certs/7f3d5d1d.0",
+  "//cobalt/content/ssl/certs/8160b96c.0",
+  "//cobalt/content/ssl/certs/8508e720.0",
+  "//cobalt/content/ssl/certs/8cb5ee0f.0",
+  "//cobalt/content/ssl/certs/8d86cdd1.0",
+  "//cobalt/content/ssl/certs/8d89cda1.0",
+  "//cobalt/content/ssl/certs/8f103249.0",
+  "//cobalt/content/ssl/certs/90c5a3c8.0",
+  "//cobalt/content/ssl/certs/930ac5d2.0",
+  "//cobalt/content/ssl/certs/93bc0acc.0",
+  "//cobalt/content/ssl/certs/9482e63a.0",
+  "//cobalt/content/ssl/certs/9846683b.0",
+  "//cobalt/content/ssl/certs/988a38cb.0",
+  "//cobalt/content/ssl/certs/9b46e03d.0",
+  "//cobalt/content/ssl/certs/9b5697b0.0",
+  "//cobalt/content/ssl/certs/9c8dfbd4.0",
+  "//cobalt/content/ssl/certs/9d04f354.0",
+  "//cobalt/content/ssl/certs/9ef4a08a.0",
+  "//cobalt/content/ssl/certs/9f727ac7.0",
+  "//cobalt/content/ssl/certs/a3418fda.0",
+  "//cobalt/content/ssl/certs/a94d09e5.0",
+  "//cobalt/content/ssl/certs/aee5f10d.0",
+  "//cobalt/content/ssl/certs/b0e59380.0",
+  "//cobalt/content/ssl/certs/b1159c4c.0",
+  "//cobalt/content/ssl/certs/b433981b.0",
+  "//cobalt/content/ssl/certs/b66938e9.0",
+  "//cobalt/content/ssl/certs/b727005e.0",
+  "//cobalt/content/ssl/certs/b7a5b843.0",
+  "//cobalt/content/ssl/certs/b81b93f0.0",
+  "//cobalt/content/ssl/certs/bf53fb88.0",
+  "//cobalt/content/ssl/certs/c01eb047.0",
+  "//cobalt/content/ssl/certs/c28a8a30.0",
+  "//cobalt/content/ssl/certs/ca6e4ad9.0",
+  "//cobalt/content/ssl/certs/cbf06781.0",
+  "//cobalt/content/ssl/certs/cc450945.0",
+  "//cobalt/content/ssl/certs/cd58d51e.0",
+  "//cobalt/content/ssl/certs/cd8c0d63.0",
+  "//cobalt/content/ssl/certs/ce5e74ef.0",
+  "//cobalt/content/ssl/certs/d4dae3dd.0",
+  "//cobalt/content/ssl/certs/d52c538d.0",
+  "//cobalt/content/ssl/certs/d6325660.0",
+  "//cobalt/content/ssl/certs/d7e8dc79.0",
+  "//cobalt/content/ssl/certs/d887a5bb.0",
+  "//cobalt/content/ssl/certs/dc4d6a89.0",
+  "//cobalt/content/ssl/certs/dd8e9d41.0",
+  "//cobalt/content/ssl/certs/de6d66f3.0",
+  "//cobalt/content/ssl/certs/e113c810.0",
+  "//cobalt/content/ssl/certs/e18bfb83.0",
+  "//cobalt/content/ssl/certs/e35234b1.0",
+  "//cobalt/content/ssl/certs/e36a6752.0",
+  "//cobalt/content/ssl/certs/e73d606e.0",
+  "//cobalt/content/ssl/certs/e868b802.0",
+  "//cobalt/content/ssl/certs/e8de2f56.0",
+  "//cobalt/content/ssl/certs/ecccd8db.0",
+  "//cobalt/content/ssl/certs/ed858448.0",
+  "//cobalt/content/ssl/certs/ee64a828.0",
+  "//cobalt/content/ssl/certs/eed8c118.0",
+  "//cobalt/content/ssl/certs/ef954a4e.0",
+  "//cobalt/content/ssl/certs/f081611a.0",
+  "//cobalt/content/ssl/certs/f0c70a8d.0",
+  "//cobalt/content/ssl/certs/f249de83.0",
+  "//cobalt/content/ssl/certs/f30dd6ad.0",
+  "//cobalt/content/ssl/certs/f3377b1b.0",
+  "//cobalt/content/ssl/certs/f387163d.0",
+  "//cobalt/content/ssl/certs/f39fc864.0",
+  "//cobalt/content/ssl/certs/f51bb24c.0",
+  "//cobalt/content/ssl/certs/fa5da96b.0",
+  "//cobalt/content/ssl/certs/fb717492.0",
+  "//cobalt/content/ssl/certs/fc5a8f99.0",
+  "//cobalt/content/ssl/certs/fd64f3fc.0",
+  "//cobalt/content/ssl/certs/fe8a2cd8.0",
+  "//cobalt/content/ssl/certs/feffd413.0",
+  "//cobalt/content/ssl/certs/ff34af3f.0",
+]
diff --git a/cobalt/network/network_module.cc b/cobalt/network/network_module.cc
index 0c8f67e..343d7a4 100644
--- a/cobalt/network/network_module.cc
+++ b/cobalt/network/network_module.cc
@@ -37,6 +37,7 @@
 const char kCaptureModeIncludeSocketBytes[] = "IncludeSocketBytes";
 const char kDefaultNetLogName[] = "cobalt_netlog.json";
 #endif
+constexpr size_t kNetworkModuleStackSize = 512 * 1024;
 }  // namespace
 
 NetworkModule::NetworkModule(const Options& options) : options_(options) {
@@ -175,7 +176,10 @@
   // Launch the IO thread.
   base::Thread::Options thread_options;
   thread_options.message_loop_type = base::MessageLoop::TYPE_IO;
-  thread_options.stack_size = 256 * 1024;
+  // Without setting a stack size here, the system default will be used
+  // which can be quite a bit larger (e.g. 4MB on Linux)
+  // Setting it manually keeps it managed.
+  thread_options.stack_size = kNetworkModuleStackSize;
   thread_options.priority = base::ThreadPriority::NORMAL;
   thread_->StartWithOptions(thread_options);
 
diff --git a/cobalt/renderer/BUILD.gn b/cobalt/renderer/BUILD.gn
index 54d2187..41633ef 100644
--- a/cobalt/renderer/BUILD.gn
+++ b/cobalt/renderer/BUILD.gn
@@ -25,7 +25,7 @@
     "//base",
     "//cobalt/render_tree",
     "//cobalt/render_tree:animations",
-    "//starboard",
+    "//starboard:starboard_group",
   ]
 }
 
diff --git a/cobalt/site/README.md b/cobalt/site/README.md
new file mode 100644
index 0000000..4a17edb
--- /dev/null
+++ b/cobalt/site/README.md
@@ -0,0 +1,22 @@
+# Regenerating developer site contents
+
+1.  Update documents and images. Note that files in `cobalt/site/gen` and
+    `cobalt/site/reference` are autogenerated and changes in these directories
+    will be overwritten by the steps below.
+
+2.  From the root of your repository run the following to build the docsite
+    Docker image.
+
+    ```shell
+    $ docker build -t docsite --build-arg UID=$(id -u) --build-arg GID=$(id -g) cobalt/site/docker
+    ```
+
+3.  Run it to regenerate the site.
+
+    ```shell
+    $ docker run -it --mount type=bind,source=$(pwd),target=/code docsite
+    ```
+
+4.  (Optional) To preview the changes you must commit the generated files and
+    create a Pull Request. That pull request can be previewed in staging by
+    following the direction for deploying the developer site.
diff --git a/cobalt/site/docker/Dockerfile b/cobalt/site/docker/Dockerfile
new file mode 100644
index 0000000..b22bc09
--- /dev/null
+++ b/cobalt/site/docker/Dockerfile
@@ -0,0 +1,65 @@
+# Copyright 2021 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+ARG FROM_IMAGE
+FROM ${FROM_IMAGE:-gcr.io/cloud-marketplace-containers/google/debian10}
+
+RUN apt update -qqy \
+    && apt install -qqy --no-install-recommends \
+        curl \
+        doxygen \
+        git \
+        python3 \
+        unzip \
+    && apt-get clean autoclean \
+    && apt-get autoremove -y --purge \
+    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
+    && rm -rf /var/lib/{apt,dpkg,cache,log}
+
+# Tell GN that we are building with Docker.
+ENV IS_DOCKER=1
+
+# Set python path for gn.
+ENV PYTHONPATH=/code
+
+# Mark the source directory safe.
+RUN git config --global --add safe.directory /code
+
+# === Get GN via CIPD
+ARG GN_SHA256SUM="af7b2dcb3905bca56655e12131b365f1cba8e159db80d2022330c4f522fab2ef  /tmp/gn.zip"
+ARG GN_HASH=r3styzkFvKVmVeEhMbNl8cuo4VnbgNICIzDE9SL6su8C
+RUN curl --location --silent --output /tmp/gn.zip \
+    "https://chrome-infra-packages.appspot.com/dl/gn/gn/linux-amd64/+/${GN_HASH}" \
+    && echo ${GN_SHA256SUM} | sha256sum --check \
+    && unzip /tmp/gn.zip -d /usr/local/bin \
+    && rm /tmp/gn.zip
+RUN chmod a+x /usr/local/bin/gn
+
+# We create and use a non-root user explicitly so that the generated and
+# modified files maintain the same permissions as the user that launched the
+# Docker container.
+ARG USER
+ARG UID
+ARG GID
+RUN addgroup --group --gid "${GID}" defaultgroup \
+    && adduser --disabled-password --gecos '' --uid "${UID}" --gid "${GID}" defaultuser
+
+# Create an out directory for gn. Its name is hardcoded in the docsite script.
+RUN mkdir /project_out_dir \
+    && chown ${USER:-defaultuser}:defaultgroup /project_out_dir
+
+# Once the directory has been created we can switch to the new user.
+USER ${USER:-defaultuser}
+
+CMD /code/cobalt/site/scripts/generate_site.py
diff --git a/cobalt/site/docs/blog/index.md b/cobalt/site/docs/blog/index.md
deleted file mode 100644
index 7a9b5c2..0000000
--- a/cobalt/site/docs/blog/index.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-layout: postlist
-title: Posts
-bodyclass: postslist
-tocDepth: h2
-tocHeader: Blog posts
----
-
-{% for post in site.posts %}
-
-  {% if site.blog.posts_before_list and forloop.index > site.blog.posts_before_list %}
-
-{% if forloop.index0 == site.blog.posts_before_list %}
-## {{ site.blog.previous_post_text }}
-{% endif %}
-
-* [{{ post.title }}]({{ post.url | prepend: site.baseurl }}), {{ post.date | date_to_string }}
-
-  {% elsif site.excerpt_separator %}
-
-<p style="font-size: 0.8em; margin: 0;"><b>{{ post.date | date_to_string }}{% if post.attribution %}, {{ post.attribution }}{% endif %}</b></p>
-
-## {{ post.title }} <span>({{ post.date | date: "%b.&nbsp;%d&nbsp;%Y" }})</span>
-
-<p>{{ post.excerpt | remove: '<p>' | remove: '</p>' }} <a href="{{ post.url | prepend: site.baseurl }}">[read more]</a></p>
-
-{% unless forloop.last %}<hr>{% endunless %}
-
-  {% else %}
-
-## {{ post.title }} <span>({{ post.date | date: "%b.&nbsp;%d&nbsp;%Y" }})</span>
-
-<div class="postdate">
-Posted on {{ post.date | date: "%A, %B %d %Y" }} (<a href="{{ post.url }}">permanent link</a>)
-</div>
-{{ post.content }}
-
-{% unless forloop.last %}<hr>{% endunless %}
-
-  {% endif  %}
-
-{% endfor %}
diff --git a/cobalt/site/docs/codelabs/starboard_extensions/codelab.md b/cobalt/site/docs/codelabs/starboard_extensions/codelab.md
index 09e2870..63e3cee 100644
--- a/cobalt/site/docs/codelabs/starboard_extensions/codelab.md
+++ b/cobalt/site/docs/codelabs/starboard_extensions/codelab.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Extensions codelab"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Extensions codelab
 
 The Starboard Extension framework provides a way to add optional, platform-specific
 features to the Starboard application. A Starboard Extension is an optional interface
@@ -17,13 +17,13 @@
 
 Because it's helpful to build and run Cobalt during the exercises, you'll first
 want to set up your environment and make sure you can build Cobalt. You can
-follow <a href="/development/setup-linux.html">Set up your environment -
+follow <a href="../../development/setup-linux.md">Set up your environment -
 Linux</a> to do this if you're a Linux user. Please note that the exercise
 solutions assume you're using Linux but should be comparable to implementations
 for other platforms.
 
 Also note that while this codelab doesn't require it, you'll need to
-<a href="/starboard/porting.html">Port Cobalt to your platform</a> before you
+<a href="../../starboard/porting.md">Port Cobalt to your platform</a> before you
 can actually use a Starboard Extension to customize it for your platform.
 
 Finally, the exercises assume the ability to program in C and C++.
@@ -785,5 +785,5 @@
 team will review the proposal accordingly. If the Cobalt team approves of the
 use case and design then a member of the team will assign the feature request
 back to you for implementation. At this point, please follow the
-<a href="/contributors/index.html">Contributing to Cobalt</a> guide to ensure
+<a href="../../contributors/index.md">Contributing to Cobalt</a> guide to ensure
 your code is compliant and can be reviewed and submitted.
diff --git a/cobalt/site/docs/communication.md b/cobalt/site/docs/communication.md
index d8d4d40..fc26c2b 100644
--- a/cobalt/site/docs/communication.md
+++ b/cobalt/site/docs/communication.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "How to Communicate with the Cobalt Team"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# How to Communicate with the Cobalt Team
 
 We have several communication channels that we actively support, each for
 different purposes.
diff --git a/cobalt/site/docs/contributors/index.md b/cobalt/site/docs/contributors/index.md
index 3eb235f..f576f5f 100644
--- a/cobalt/site/docs/contributors/index.md
+++ b/cobalt/site/docs/contributors/index.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Contributing to Cobalt"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Contributing to Cobalt
 
 We'd love to hear about how you would like to contribute to Cobalt!
 
diff --git a/cobalt/site/docs/development/reference/supported-features.md b/cobalt/site/docs/development/reference/supported-features.md
index d4e41e4..ef52f0c 100644
--- a/cobalt/site/docs/development/reference/supported-features.md
+++ b/cobalt/site/docs/development/reference/supported-features.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Cobalt Support Quick Reference"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Cobalt Support Quick Reference
 
 ## HTML elements
 
diff --git a/cobalt/site/docs/development/setup-android.md b/cobalt/site/docs/development/setup-android.md
index 82e26aa..08fc953 100644
--- a/cobalt/site/docs/development/setup-android.md
+++ b/cobalt/site/docs/development/setup-android.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Set up your environment - Android"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Set up your environment - Android
 
 These instructions explain how to set up Cobalt for your workstation and Android
 device. The package being built here is referred to as CoAT (Cobalt on Android TV).
@@ -98,11 +98,11 @@
     Android Studio, you can add the roots, or if not then choose to ignore them.
 1.  If you didn't already get prompted to install the SDK, do it now by going to
     Tools -> SDK Manager (or
-    <img src="/images/android-sdk-manager-icon.png" style="display:inline;"></img>
+    <img src="../../images/android-sdk-manager-icon.png" style="display:inline;"></img>
     ) on the toolbar) and making the same choices as shown in step 4.
 1.  Make a new virtual device (= emulator) via
     Tools -> AVD Manager (or
-    <img src="/images/android-avd-manager-icon.png" style="display: inline;"></img>
+    <img src="../../images/android-avd-manager-icon.png" style="display: inline;"></img>
     on the toolbar).
       *   Category: TV -> Android TV (720p)
       *   System image: Pie (API 28) x86 (you'll have to download the image)
@@ -178,7 +178,7 @@
 1.  In the sidebar on the left, you should see `app` appear as bolded top-level
     item.  If you don't see this, restart Android Studio.
 1.  To run the app and attach the debugger: Run -> Debug 'app' (or
-    <img src="/images/android-debug-icon.png" style="display: inline;"></img>
+    <img src="../../images/android-debug-icon.png" style="display: inline;"></img>
     in the toolbar)
 1.  If it's taking awhile, it's probably the ninja build. You can see that it is
     still processing by looking for a rotating spinner labeled "Gradle Build
diff --git a/cobalt/site/docs/development/setup-docker.md b/cobalt/site/docs/development/setup-docker.md
index ae9c1b1..3632e75 100644
--- a/cobalt/site/docs/development/setup-docker.md
+++ b/cobalt/site/docs/development/setup-docker.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Set up your environment - Docker"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Set up your environment - Docker
 
 We provide <a
 href="https://github.com/youtube/cobalt/tree/main/docker/linux/">Docker image definitions</a> to simplify managing build environments.
diff --git a/cobalt/site/docs/development/setup-linux.md b/cobalt/site/docs/development/setup-linux.md
index 124a3d0..889c4d0 100644
--- a/cobalt/site/docs/development/setup-linux.md
+++ b/cobalt/site/docs/development/setup-linux.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Set up your environment - Linux"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Set up your environment - Linux
 
 These instructions explain how Linux users set up their Cobalt development
 environment, clone a copy of the Cobalt code repository, and build a Cobalt
@@ -133,7 +133,7 @@
     The previous command contains three variables:
 
     1.  `<platform>` is the [platform
-        configuration](/starboard/porting.html#1-enumerate-and-name-your-platform-configurations)
+        configuration](../starboard/porting.md#1-enumerate-and-name-your-platform-configurations)
         that identifies the platform. As described in the Starboard porting
         guide, it contains a `family name` (like `linux`) and a
         `binary variant` (like `x64x11`), separated by a hyphen.
diff --git a/cobalt/site/docs/development/setup-raspi.md b/cobalt/site/docs/development/setup-raspi.md
index 84952f3..8a3acdc 100644
--- a/cobalt/site/docs/development/setup-raspi.md
+++ b/cobalt/site/docs/development/setup-raspi.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Set up your environment - Raspberry Pi"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Set up your environment - Raspberry Pi
 
 These instructions explain how to set up Cobalt for your workstation and your
 Raspberry Pi device. They have been tested with Ubuntu:20.04 and a Raspberry Pi
@@ -40,7 +40,7 @@
 
 <aside class="note">
 <b>Note:</b> Before proceeding further, refer to the documentation for
-<a href="setup-linux.html">"Set up your environment - Linux"</a>. Complete the
+<a href="setup-linux.md">"Set up your environment - Linux"</a>. Complete the
 sections <b>Set up your workstation</b> and <b>Set up developer tools</b>, then
 return and complete the following steps.
 </aside>
diff --git a/cobalt/site/docs/development/setup-rdk.md b/cobalt/site/docs/development/setup-rdk.md
index 6a16461..21ec792 100644
--- a/cobalt/site/docs/development/setup-rdk.md
+++ b/cobalt/site/docs/development/setup-rdk.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Set up your environment - RDK"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Set up your environment - RDK
 
 The detailed documentation for building and using RDK-V reference port is
 provided by the RDK project. Please see details in
diff --git a/cobalt/site/docs/development/setup-windows.md b/cobalt/site/docs/development/setup-windows.md
index 47a98cc..6da9189 100644
--- a/cobalt/site/docs/development/setup-windows.md
+++ b/cobalt/site/docs/development/setup-windows.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Set up your environment - Windows"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Set up your environment - Windows
 
 These instructions explain how Windows users can set up their Cobalt development
 environment, clone a copy of the Cobalt code repository, and build a Cobalt
@@ -138,7 +138,7 @@
     The previous command contains three variables:
 
     1.  `<platform>` is the [platform
-        configuration](/starboard/porting.html#1-enumerate-and-name-your-platform-configurations)
+        configuration](../starboard/porting.md#1-enumerate-and-name-your-platform-configurations)
         that identifies the platform. As described in the Starboard porting
         guide, it contains a `family name` (like `linux`) and a
         `binary variant` (like `x64x11`), separated by a hyphen. For Windows
diff --git a/cobalt/site/docs/gen/cobalt/doc/branching.md b/cobalt/site/docs/gen/cobalt/doc/branching.md
index c3b9cd9..42b8b34 100644
--- a/cobalt/site/docs/gen/cobalt/doc/branching.md
+++ b/cobalt/site/docs/gen/cobalt/doc/branching.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Cobalt Branching"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Cobalt Branching
 
 *(This document assumes you are already familiar
diff --git a/cobalt/site/docs/gen/cobalt/doc/clients_performance_guide.md b/cobalt/site/docs/gen/cobalt/doc/clients_performance_guide.md
index bfed2e7..65676a8 100644
--- a/cobalt/site/docs/gen/cobalt/doc/clients_performance_guide.md
+++ b/cobalt/site/docs/gen/cobalt/doc/clients_performance_guide.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Cobalt Clients Performance Guide"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Cobalt Clients Performance Guide
 
 This document contains a list of hints and tricks for using web technologies
diff --git a/cobalt/site/docs/gen/cobalt/doc/cvals.md b/cobalt/site/docs/gen/cobalt/doc/cvals.md
index 665c6a1..d8d870a 100644
--- a/cobalt/site/docs/gen/cobalt/doc/cvals.md
+++ b/cobalt/site/docs/gen/cobalt/doc/cvals.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Cobalt CVals"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Cobalt CVals
 
 ## Overview
@@ -123,6 +122,18 @@
     compatibility violations encountered.
 *   **Count.XHR** - The total number of xhr::XMLHttpRequest in existence
     globally.
+*   **Count.MainWebModule.AnimatedImage.Active** - The total number of currently
+    active animated image decoders. Same image from a single URL source rendered
+    multiple times across the content counts as one decoder.
+*   **Count.MainWebModule.AnimatedImage.DecodedFrames** - Total number of decoded
+    frames across all active image decoders. This number resets only when
+    WebModule gets re-created - e.g. page reload, navigation.
+*   **Count.MainWebModule.AnimatedImage.DecodingUnderruns** - Total number of
+    frames when animated image decoding has fallen behind real-time, as defined
+    by image frame exposure times. This indicates a CPU bottleneck.
+*   **Count.MainWebModule.AnimatedImage.DecodingOverruns** - Total number of
+    frames when animated image decoding has been attempted too early, before
+    next frame exposure time. This indicates a timing issue in platform.
 
 ### Event
 
diff --git a/cobalt/site/docs/gen/cobalt/doc/deep_links.md b/cobalt/site/docs/gen/cobalt/doc/deep_links.md
index c73491f..cdf20f8 100644
--- a/cobalt/site/docs/gen/cobalt/doc/deep_links.md
+++ b/cobalt/site/docs/gen/cobalt/doc/deep_links.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Cobalt Deep Links"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Cobalt Deep Links
 
 - [Cobalt Deep Links](#cobalt-deep-links)
diff --git a/cobalt/site/docs/gen/cobalt/doc/device_authentication.md b/cobalt/site/docs/gen/cobalt/doc/device_authentication.md
index c7dcb7c..8d9f7e2 100644
--- a/cobalt/site/docs/gen/cobalt/doc/device_authentication.md
+++ b/cobalt/site/docs/gen/cobalt/doc/device_authentication.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Device Authentication"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Device Authentication
 
 Starting in Cobalt 20, initial URL requests will now have query parameters
diff --git a/cobalt/site/docs/gen/cobalt/doc/docker_build.md b/cobalt/site/docs/gen/cobalt/doc/docker_build.md
index 9f49f2d..06a183f 100644
--- a/cobalt/site/docs/gen/cobalt/doc/docker_build.md
+++ b/cobalt/site/docs/gen/cobalt/doc/docker_build.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Cobalt Docker builds"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Cobalt Docker builds
 
 Cobalt includes [Docker image][docker.com](https://www.docker.com/)
diff --git a/cobalt/site/docs/gen/cobalt/doc/lifecycle.md b/cobalt/site/docs/gen/cobalt/doc/lifecycle.md
index d945ff1..a07d1a5 100644
--- a/cobalt/site/docs/gen/cobalt/doc/lifecycle.md
+++ b/cobalt/site/docs/gen/cobalt/doc/lifecycle.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Application Lifecycle"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Application Lifecycle
 
 In order to meet common needs of applications running on CE devices, Cobalt
diff --git a/cobalt/site/docs/gen/cobalt/doc/memory_tuning.md b/cobalt/site/docs/gen/cobalt/doc/memory_tuning.md
index 1c09787..eaf8f58 100644
--- a/cobalt/site/docs/gen/cobalt/doc/memory_tuning.md
+++ b/cobalt/site/docs/gen/cobalt/doc/memory_tuning.md
@@ -1,8 +1,7 @@
----
-layout: doc
-title: ""
----
-# Memory Tuning #
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Memory Tuning
 
 Cobalt is designed to choose sensible parameters for memory-related options and
 parameters through a system called "AutoMem".
@@ -20,7 +19,7 @@
 *Setting `--max_cobalt_cpu_usage` and `--max_cobalt_gpu_usage` on the
 command line is a beta feature.*
 
-### Memory Settings Table ###
+### Memory Settings Table
 
 A table similar to the one below, will be printed on startup.
 
@@ -83,7 +82,7 @@
       * This value was AutoSet to a default value, but then was reduced in
       response to `max_cobalt_cpu_usage` or `max_cobalt_gpu_usage being` set too low.
 
-### Maximum Memory Table ###
+### Maximum Memory Table
 
 This second table is also printed at startup and details the sum of memory and
 maximum memory limits as reported by cobalt.
@@ -132,13 +131,13 @@
 will reduce their memory consumption. When this happens, look for the string
 *`AutoSet (Constrained)`* in the first table.
 
-## Setting Maximum Memory Values ##
+## Setting Maximum Memory Values
 
 The max cpu and gpu memory of the system can be set by command line:
   * `--max_cobalt_cpu_usage=160MB`
   * `--max_cobalt_gpu_usage=160MB`
 
-### Memory Scaling ###
+### Memory Scaling
 
 There are two primary ways in which the memory consumption settings will scale down.
 One is by specifying `--max_cobalt_cpu_usage` (or `max_cobalt_gpu_usage`) to a
@@ -156,7 +155,7 @@
  `--image_cache_size_in_bytes=auto` will allow `image_cache_size_in_bytes` to be
 flexible by disabling the value being set by a build setting.
 
-### Memory Warnings ###
+### Memory Warnings
 
 Cobalt will periodically check to see if the memory consumed by the application
 is less than the `--max_cobalt_cpu_usage` and `--max_cobalt_gpu_usage` amount.
@@ -164,7 +163,7 @@
 once to stdout for cpu and/or gpu memory systems.
 
 
-### Example 1 - Configuring for a memory restricted platform ###
+### Example 1 - Configuring for a memory restricted platform
 
 Let's say that we are configuring platform called "XXX":
 
@@ -190,7 +189,7 @@
 
   * `cobalt --max_cobalt_cpu_usage=160MB`
 
-### Example 2 - Configuring for a memory-plentiful platform ###
+### Example 2 - Configuring for a memory-plentiful platform
 
 The following command line will give a lot of memory to image cache and give
 500MB to `max_cobalt_cpu_usage` and `max_cobalt_gpu_usage`.
@@ -200,9 +199,9 @@
 --image_cache_size_in_bytes=80MB
 ~~~
 
-## API Reference ##
+## API Reference
 
-#### Memory System API ####
+#### Memory System API
 
   * `max_cobalt_cpu_usage`
     * This setting will set the maximum cpu memory that the app will consume.
@@ -222,7 +221,7 @@
       for `max_cobalt_gpu_usage` in commandline/starboard settings then no
       GPU memory checking is performed.
 
-#### Memory Setting API ####
+#### Memory Setting API
 
   * `image_cache_size_in_bytes`
     * See documentation *Image cache capacity* in `performance_tuning.md` for what
@@ -256,7 +255,7 @@
       for what this setting does.
     * Set via command line, or else Cobalt extension, or else automatically by Cobalt.
 
-#### Units for Command Line Settings ####
+#### Units for Command Line Settings
 
 Memory values passed into Cobalt via command line arguments support units such
 kb, mb, and gb for kilo-byte, megabyte, gigabytes. These units are case insensitive.
diff --git a/cobalt/site/docs/gen/cobalt/doc/net_log.md b/cobalt/site/docs/gen/cobalt/doc/net_log.md
index 0dbea4c..2358f81 100644
--- a/cobalt/site/docs/gen/cobalt/doc/net_log.md
+++ b/cobalt/site/docs/gen/cobalt/doc/net_log.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Cobalt NetLog"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Cobalt NetLog
 
 Chromium has a very useful network diagnostic tool called the NetLog and Cobalt
diff --git a/cobalt/site/docs/gen/cobalt/doc/performance_tuning.md b/cobalt/site/docs/gen/cobalt/doc/performance_tuning.md
index 90936c3..ea27a56 100644
--- a/cobalt/site/docs/gen/cobalt/doc/performance_tuning.md
+++ b/cobalt/site/docs/gen/cobalt/doc/performance_tuning.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Performance Tuning"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Performance Tuning
 
 Cobalt is designed to choose sensible parameters for all performance-related
diff --git a/cobalt/site/docs/gen/cobalt/doc/platform_services.md b/cobalt/site/docs/gen/cobalt/doc/platform_services.md
index 2228aa7..84d3e2e 100644
--- a/cobalt/site/docs/gen/cobalt/doc/platform_services.md
+++ b/cobalt/site/docs/gen/cobalt/doc/platform_services.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Cobalt Platform Services"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Cobalt Platform Services
 
 _NOTE: The Cobalt Platform Services API replaces the deprecated Cobalt Custom Web API Extensions_
diff --git a/cobalt/site/docs/gen/cobalt/doc/spherical_video.md b/cobalt/site/docs/gen/cobalt/doc/spherical_video.md
index b82de1e..ecdd5b1 100644
--- a/cobalt/site/docs/gen/cobalt/doc/spherical_video.md
+++ b/cobalt/site/docs/gen/cobalt/doc/spherical_video.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Enabling Spherical Video in Cobalt"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Enabling Spherical Video in Cobalt
 
 Cobalt supports playback of 360 spherical videos.  Cobalt does not expose
diff --git a/cobalt/site/docs/gen/cobalt/doc/splash_screen.md b/cobalt/site/docs/gen/cobalt/doc/splash_screen.md
index 16651c3..9181758 100644
--- a/cobalt/site/docs/gen/cobalt/doc/splash_screen.md
+++ b/cobalt/site/docs/gen/cobalt/doc/splash_screen.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Cobalt Splash Screen"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Cobalt Splash Screen
 
 ## Startup splash screen sequence
diff --git a/cobalt/site/docs/gen/cobalt/doc/versioning.md b/cobalt/site/docs/gen/cobalt/doc/versioning.md
index 020d607..4cf9e66 100644
--- a/cobalt/site/docs/gen/cobalt/doc/versioning.md
+++ b/cobalt/site/docs/gen/cobalt/doc/versioning.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Cobalt Versioning"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Cobalt Versioning
 
 Cobalt versions, as they appear in the user agent, have the following structure:
diff --git a/cobalt/site/docs/gen/cobalt/doc/voice_search.md b/cobalt/site/docs/gen/cobalt/doc/voice_search.md
index 503428f..e0eabb7 100644
--- a/cobalt/site/docs/gen/cobalt/doc/voice_search.md
+++ b/cobalt/site/docs/gen/cobalt/doc/voice_search.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Enabling voice search in Cobalt"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Enabling voice search in Cobalt
 
 Cobalt enables voice search through a subset of the
@@ -27,15 +26,15 @@
 
 In `starboard/linux/shared/soft_mic_platform_service.cc` there is an example
 stub implementation of the SoftMicPlatformService. Platforms can optionally
-implement this [CobaltPlatformService](https://cobalt.dev/gen/cobalt/doc/\
-platform_services.html) to specify if they support the `soft mic` and/or `hard mic`
-for voice search. The `soft mic` refers to the software activation of the microphone
-for voice search through the UI microphone button on the Youtube Web Application
-search page. The `hard mic` refers to hardware button activation of the microphone
-for voice search. Platforms can also specify the optional `micGesture`. This
-specifies the type of UI prompt the YouTube Web Application should display to guide
-the user to start voice search. The options include an empty or `null` value for no
-prompt, `"TAP"` for tap the `soft mic` and/or `hard mic` to start voice search, or
+implement this [CobaltPlatformService](platform_services.md) to specify if they
+support the `soft mic` and/or `hard mic` for voice search. The `soft mic` refers
+to the software activation of the microphone for voice search through the UI
+microphone button on the Youtube Web Application search page. The `hard mic`
+refers to hardware button activation of the microphone for voice search.
+Platforms can also specify the optional `micGesture`. This specifies the type of
+UI prompt the YouTube Web Application should display to guide the user to start
+voice search. The options include an empty or `null` value for no prompt,
+`"TAP"` for tap the `soft mic` and/or `hard mic` to start voice search, or
 `"HOLD"` for hold the `soft mic` and/or the `hard mic` to start voice search.
 
 The Web Application messages to the platform will be singular strings, encoded with
diff --git a/cobalt/site/docs/gen/cobalt/doc/web_debugging.md b/cobalt/site/docs/gen/cobalt/doc/web_debugging.md
index 63ff1af..185faca 100644
--- a/cobalt/site/docs/gen/cobalt/doc/web_debugging.md
+++ b/cobalt/site/docs/gen/cobalt/doc/web_debugging.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Cobalt Web Debugging"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Cobalt Web Debugging
 
 ## Overview
diff --git a/cobalt/site/docs/gen/starboard/build/doc/gn_migrate_stub_to_platform.md b/cobalt/site/docs/gen/starboard/build/doc/gn_migrate_stub_to_platform.md
index 12c9356..15bfcaa 100644
--- a/cobalt/site/docs/gen/starboard/build/doc/gn_migrate_stub_to_platform.md
+++ b/cobalt/site/docs/gen/starboard/build/doc/gn_migrate_stub_to_platform.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Stub to Platform GN Migration"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Stub to Platform GN Migration
 
 This document outlines a step by step process for converting the stub platform's
diff --git a/cobalt/site/docs/gen/starboard/build/doc/migrating_gyp_to_gn.md b/cobalt/site/docs/gen/starboard/build/doc/migrating_gyp_to_gn.md
index 5645ced..c0e46b5 100644
--- a/cobalt/site/docs/gen/starboard/build/doc/migrating_gyp_to_gn.md
+++ b/cobalt/site/docs/gen/starboard/build/doc/migrating_gyp_to_gn.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Migrating GYP to GN"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Migrating GYP to GN
 
 Cobalt is currently in the process of migrating from our current build system
@@ -205,7 +204,7 @@
 ### Validating a Target
 
 If you're migrating a single target, it's simple to check: just configure the
-build using the the necessary arguments then build that target with `ninja`,
+build using the necessary arguments then build that target with `ninja`,
 i.e.:
 
 ```
@@ -267,8 +266,8 @@
 process for converting the stub platform's GN files to GN files that will be
 able to be built for your platform.
 
-[cobalt_porting_guide]: https://cobalt.dev/starboard/porting.html
-[dev_setup_linux]: https://cobalt.dev/development/setup-linux.html
+[cobalt_porting_guide]: https://developers.google.com/youtube/cobalt/docs/starboard/porting
+[dev_setup_linux]: https://developers.google.com/youtube/cobalt/docs/development/setup-linux
 [gn_check_tool]: https://cobalt.googlesource.com/third_party/gn/+/refs/heads/main/docs/reference.md#cmd_check
 [gn_doc_home]: https://cobalt.googlesource.com/third_party/gn/+/refs/heads/main/docs
 [gn_format_tool]: https://cobalt.googlesource.com/third_party/gn/+/refs/heads/main/docs/reference.md#cmd_format
diff --git a/cobalt/site/docs/gen/starboard/build/doc/migration_changes.md b/cobalt/site/docs/gen/starboard/build/doc/migration_changes.md
index 468de10..dd5419c 100644
--- a/cobalt/site/docs/gen/starboard/build/doc/migration_changes.md
+++ b/cobalt/site/docs/gen/starboard/build/doc/migration_changes.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "GYP to GN Migration Changes"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # GYP to GN Migration Changes
 
 This file tracks changes to configuration meta build configuration variables in
@@ -46,7 +45,7 @@
 ## Notes:
 
 *   *Starboard Implementation:* If your platform defined
-    `STARBOARD_IMPLENTATION` in its implementation, you would now add the above
+    `STARBOARD_IMPLEMENTATION` in its implementation, you would now add the above
     config with `configs +=
     ["//starboard/build/config:starboard_implementation"]`.
 
diff --git a/cobalt/site/docs/gen/starboard/doc/api_process.md b/cobalt/site/docs/gen/starboard/doc/api_process.md
index 0d699d2..37023ad 100644
--- a/cobalt/site/docs/gen/starboard/doc/api_process.md
+++ b/cobalt/site/docs/gen/starboard/doc/api_process.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Starboard API Review Process"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Starboard API Review Process
 
 ## Why do we need a process?
diff --git a/cobalt/site/docs/gen/starboard/doc/building.md b/cobalt/site/docs/gen/starboard/doc/building.md
index 99fecd9..306b2c5 100644
--- a/cobalt/site/docs/gen/starboard/doc/building.md
+++ b/cobalt/site/docs/gen/starboard/doc/building.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Building Starboard"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Building Starboard
 
 Starboard currently uses GYP as the basis of its build system, though there is
diff --git a/cobalt/site/docs/gen/starboard/doc/c99.md b/cobalt/site/docs/gen/starboard/doc/c99.md
index 0c32d93..5fb5f90 100644
--- a/cobalt/site/docs/gen/starboard/doc/c99.md
+++ b/cobalt/site/docs/gen/starboard/doc/c99.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Starboard and C99"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Starboard and C99
 
 ## Background
diff --git a/cobalt/site/docs/gen/starboard/doc/crash_handlers.md b/cobalt/site/docs/gen/starboard/doc/crash_handlers.md
index 36ba542..93d3de5 100644
--- a/cobalt/site/docs/gen/starboard/doc/crash_handlers.md
+++ b/cobalt/site/docs/gen/starboard/doc/crash_handlers.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Installing Crash Handlers in Cobalt"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Installing Crash Handlers in Cobalt
 
 Partners can install Crashpad's crash handlers to create crash reports in the
diff --git a/cobalt/site/docs/gen/starboard/doc/evergreen/cobalt_evergreen_lite.md b/cobalt/site/docs/gen/starboard/doc/evergreen/cobalt_evergreen_lite.md
index 93ff983..55b54e2 100644
--- a/cobalt/site/docs/gen/starboard/doc/evergreen/cobalt_evergreen_lite.md
+++ b/cobalt/site/docs/gen/starboard/doc/evergreen/cobalt_evergreen_lite.md
@@ -1,9 +1,7 @@
----
-layout: doc
-title: "Evergreen Lite Partner Doc"
----
-Evergreen Lite Partner Doc
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
 
+# Evergreen Lite Partner Doc
 
 ## What is Cobalt Evergreen Lite?
 
diff --git a/cobalt/site/docs/gen/starboard/doc/evergreen/cobalt_evergreen_overview.md b/cobalt/site/docs/gen/starboard/doc/evergreen/cobalt_evergreen_overview.md
index 98de330..75f2ac7 100644
--- a/cobalt/site/docs/gen/starboard/doc/evergreen/cobalt_evergreen_overview.md
+++ b/cobalt/site/docs/gen/starboard/doc/evergreen/cobalt_evergreen_overview.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Cobalt Evergreen Overview"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Cobalt Evergreen Overview
 
 ![Cobalt non-Evergreen vs
@@ -94,38 +93,46 @@
 
 ### Building Cobalt Evergreen Components
 
-Cobalt Evergreen requires that there are two separate build(`gyp`)
-configurations used due to the separation of the Cobalt core(`libcobalt.so`) and
-the platform-specific Starboard layer(`loader_app`). As a result, you will have
-to initiate a separate gyp process for each. This is required since the Cobalt
-core binary is built with the Google toolchain settings and the
-platform-specific Starboard layer is built with partner toolchain
-configurations.
+Because of its separation of the Cobalt core (`libcobalt.so`) and platform-
+specific Starboard layers, Cobalt Evergreen requires two build configurations.
+This means there are two relevant GN platforms defined in the build code, and
+that `gn gen` must be run twice to generate ninja files for two separate
+platforms.
 
-Cobalt Evergreen is built by a separate gyp platform using the Google toolchain:
+#### Configuring your port for Evergreen
+
+The Evergreen platforms for the different supported architectures, which are
+used to build Cobalt core (`libcobalt.so`), are maintained by Google. So, no
+changes are needed by the partner here.
+
+However, a few small changes are needed in the partner's port, which is used to
+build the partner-built components, to make it compatible with Evergreen.
+
+First, partners should set `sb_is_evergreen_compatible = true` in the platform's
+`platform_configuration/configuration.gni` file. (Please DO NOT set
+`sb_is_evergreen` to `true`, as this should only be set in the Evergreen
+platforms that are maintained by Google and used to build Cobalt core.)
+
+Second, in the platform's `toolchain/BUILD.gn` file partners should copy their
+"target" toolchain to add a "native_target" toolchain that is identical except
+that it sets `is_starboard = false` and `is_native_target_build = true`.
+
+For example:
 
 ```
-$ cobalt/build/gn.py -p evergreen-arm-softfp -c qa
-$ ninja -C out/evergreen-arm-softfp_qa cobalt
+gcc_toolchain("target") {
+  ...
+}
+
+gcc_toolchain("native_target") {
+  ...
+  is_starboard = false
+  is_native_target_build = true
+}
 ```
 
-Which produces a shared library `libcobalt.so` targeted for specific
-architecture, ABI and Starboard version.
-
-The gyp variable `sb_evergreen` is set to 1 when building `libcobalt.so`.
-
-The partner port of Starboard is built with the partner’s toolchain and is
-linked into the `loader_app` which knows how to dynamically load
-`libcobalt.so`, and the `crashpad_handler` which handles crashes.
-
-```
-$ cobalt/build/gn.py -p <partner_port_name> -c qa
-$ ninja -C out/<partner_port_name>_qa loader_app crashpad_handler
-```
-
-Partners should set `sb_evergreen_compatible` to 1 in their gyp platform config.
-DO NOT set the `sb_evergreen` to 1 in your platform-specific configuration as it
-is used only by Cobalt when building with the Google toolchain.
+This "native_target" toolchain is required in order to build the
+`crashpad_handler` binary, which should NOT use the Starboard porting layer.
 
 Additionally, partners should install crash handlers as instructed in the
 [Installing Crash Handlers for Cobalt guide](../crash_handlers.md).
@@ -135,7 +142,7 @@
 
 *   `kSbSystemPathStorageDirectory`
     *   Dedicated location for storing Cobalt Evergreen-related binaries
-    *   This path must be writable and have at least 96MB of reserved space for
+    *   This path must be writable and have at least 64MB of reserved space for
         Evergreen updates. Please see the “Platforms Requirements” section below
         for more details.
 *   `kSbMemoryMapProtectExec`
@@ -156,7 +163,36 @@
 If your target architecture falls outside the support list above, please reach
 out to us for guidance.
 
-#### Adding Crash Handlers to Evergreen
+#### Build commands
+
+As mentioned, the Google-maintained Evergreen toolchain is used to build Cobalt
+core (`libcobalt.so`). For example:
+
+```
+$ gn gen out/evergreen-arm-softfp_qa --args="target_platform=\"evergreen-arm-softfp\" build_type=\"qa\" target_cpu=\"arm\" target_os=\"linux\" sb_api_version=15"
+$ ninja -C out/evergreen-arm-softfp_qa cobalt_install
+```
+
+This produces a `libcobalt.so` shared library targeted for a specific
+architecture, ABI, and Starboard version.
+
+Note: `sb_api_version` defaults to the latest supported Starboard version in the
+current branch.
+
+
+The partner port of Starboard is built with the partner’s "target" toolchain and
+is linked into the `loader_app`, which knows how to dynamically load
+`libcobalt.so`. And the `crashpad_handler` binary is built with the partner's
+"native_target" toolchain. For example:
+
+```
+$ gn gen out/<partner_port_name>_qa --args='target_platform="<partner_port_name>" build_type="qa" sb_api_version=15'
+$ ninja -C out/<partner_port_name>_qa loader_app
+$ ninja -C out/<partner_port_name>_qa native_target/crashpad_handler
+```
+
+Note that when building `crashpad_handler`, a special prefix is used to have
+Ninja compile the target in the non-default, "native_target" toolchain.
 
 ### What is an example for how this would help me?
 
@@ -199,12 +235,12 @@
 
 *   V8
 
-Additional reserved storage (96MB) is required for Evergreen binaries. We expect
+Additional reserved storage (64MB) is required for Evergreen binaries. We expect
 Evergreen implementations to have an initial Cobalt preloaded on the device and
 an additional reserved space for additional Cobalt update storage.
 
 *   Initial Cobalt binary deployment - 64MB
-*   Additional Cobalt update storage - 96MB
+*   Additional Cobalt update storage - 64MB
     *   Required for 2 update slots under `kSbSystemPathStorageDirectory`
 
 As Cobalt Evergreen is intended to be updated from Google Cloud architecture
@@ -272,8 +308,8 @@
 
 1. Build the `crashpad_database_util` target and deploy it onto the device.
 ```
-$ cobalt/build/gn.py -p <partner_port_name> -c qa
-$ ninja -C out/<partner_port_name>_qa crashpad_database_util
+$ gn gen out/<partner_port_name>_qa --args='target_platform="<partner_port_name>" build_type="qa"'
+$ ninja -C out/<partner_port_name>_qa native_target/crashpad_database_util
 ```
 2. Remove the existing state for crashpad as it throttles uploads to 1 per hour:
 ```
diff --git a/cobalt/site/docs/gen/starboard/doc/evergreen/cobalt_evergreen_reference_port_raspi2.md b/cobalt/site/docs/gen/starboard/doc/evergreen/cobalt_evergreen_reference_port_raspi2.md
index 549fe70..b9c3d45 100644
--- a/cobalt/site/docs/gen/starboard/doc/evergreen/cobalt_evergreen_reference_port_raspi2.md
+++ b/cobalt/site/docs/gen/starboard/doc/evergreen/cobalt_evergreen_reference_port_raspi2.md
@@ -1,14 +1,12 @@
----
-layout: doc
-title: "Cobalt Evergreen Raspi-2 Reference Port"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Cobalt Evergreen Raspi-2 Reference Port
 
 ## Requirements
 
-*   Raspberry Pi 2 (image configured per
-    [instructions](https://cobalt.dev/development/setup-raspi.html) on
-    cobalt.dev)
+*   Raspberry Pi environment setup per
+    [instructions](https://developers.google.com/youtube/cobalt/docs/development/setup-raspi).
 
 ## Build instructions
 
diff --git a/cobalt/site/docs/gen/starboard/doc/evergreen/cobalt_update_framework.md b/cobalt/site/docs/gen/starboard/doc/evergreen/cobalt_update_framework.md
index f1b1cf8..bd27bce 100644
--- a/cobalt/site/docs/gen/starboard/doc/evergreen/cobalt_update_framework.md
+++ b/cobalt/site/docs/gen/starboard/doc/evergreen/cobalt_update_framework.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Cobalt Update Framework"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Cobalt Update Framework
 
 ## Background
diff --git a/cobalt/site/docs/gen/starboard/doc/evergreen/evergreen_binary_compression.md b/cobalt/site/docs/gen/starboard/doc/evergreen/evergreen_binary_compression.md
index 3d37997..568eb8a 100644
--- a/cobalt/site/docs/gen/starboard/doc/evergreen/evergreen_binary_compression.md
+++ b/cobalt/site/docs/gen/starboard/doc/evergreen/evergreen_binary_compression.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Evergreen Binary Compression"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Evergreen Binary Compression
 
 ## What is Evergreen Binary Compression?
diff --git a/cobalt/site/docs/gen/starboard/doc/evergreen/symbolizing_minidumps.md b/cobalt/site/docs/gen/starboard/doc/evergreen/symbolizing_minidumps.md
index df7a502..08e8d39 100644
--- a/cobalt/site/docs/gen/starboard/doc/evergreen/symbolizing_minidumps.md
+++ b/cobalt/site/docs/gen/starboard/doc/evergreen/symbolizing_minidumps.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "How to Symbolize Dumps"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # How to Symbolize Dumps
 
 Evergreen will store the minidumps (`.dmp` files) from the 2 most recent
diff --git a/cobalt/site/docs/gen/starboard/doc/howto_decode_to_texture.md b/cobalt/site/docs/gen/starboard/doc/howto_decode_to_texture.md
index b15eb5e..fd6bbd5 100644
--- a/cobalt/site/docs/gen/starboard/doc/howto_decode_to_texture.md
+++ b/cobalt/site/docs/gen/starboard/doc/howto_decode_to_texture.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "**HOWTO:** Decode to Texture"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # **HOWTO:** Decode to Texture
 
 Starboard declares the interfaces necessary to allow applications to query for
diff --git a/cobalt/site/docs/gen/starboard/doc/principles.md b/cobalt/site/docs/gen/starboard/doc/principles.md
index 04e039c..3c96a19 100644
--- a/cobalt/site/docs/gen/starboard/doc/principles.md
+++ b/cobalt/site/docs/gen/starboard/doc/principles.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Starboard Design Principles"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Starboard Design Principles
 
 An overview of the goals and design principles of Starboard with the perspective
diff --git a/cobalt/site/docs/gen/starboard/doc/starboard_abi.md b/cobalt/site/docs/gen/starboard/doc/starboard_abi.md
index 9272001..6d99001 100644
--- a/cobalt/site/docs/gen/starboard/doc/starboard_abi.md
+++ b/cobalt/site/docs/gen/starboard/doc/starboard_abi.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Starboard ABI"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Starboard ABI
 
 The Starboard ABI was introduced to provide a single, consistent method for
diff --git a/cobalt/site/docs/gen/starboard/doc/starboard_split.md b/cobalt/site/docs/gen/starboard/doc/starboard_split.md
index 6eeaf95..b5f6720 100644
--- a/cobalt/site/docs/gen/starboard/doc/starboard_split.md
+++ b/cobalt/site/docs/gen/starboard/doc/starboard_split.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Separation of Starboard from Cobalt"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Separation of Starboard from Cobalt
 
 ### Background
diff --git a/cobalt/site/docs/gen/starboard/doc/style.md b/cobalt/site/docs/gen/starboard/doc/style.md
index c837ed1..6c0358b 100644
--- a/cobalt/site/docs/gen/starboard/doc/style.md
+++ b/cobalt/site/docs/gen/starboard/doc/style.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Starboard C and C++ Style Guide"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Starboard C and C++ Style Guide
 
 A description of the coding conventions for Starboard code and API headers.
diff --git a/cobalt/site/docs/gen/starboard/doc/versioning.md b/cobalt/site/docs/gen/starboard/doc/versioning.md
index c3e07f1..b33e73b 100644
--- a/cobalt/site/docs/gen/starboard/doc/versioning.md
+++ b/cobalt/site/docs/gen/starboard/doc/versioning.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Starboard Versioning"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Starboard Versioning
 
 ## Motivation
diff --git a/cobalt/site/docs/gen/starboard/tools/doc/abstract_launcher.md b/cobalt/site/docs/gen/starboard/tools/doc/abstract_launcher.md
index d75ba45..c156602 100644
--- a/cobalt/site/docs/gen/starboard/tools/doc/abstract_launcher.md
+++ b/cobalt/site/docs/gen/starboard/tools/doc/abstract_launcher.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "App Launchers"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # App Launchers
 
 The app launcher framework is used to run an executable on a given platform,
diff --git a/cobalt/site/docs/gen/starboard/tools/doc/testing.md b/cobalt/site/docs/gen/starboard/tools/doc/testing.md
index 12d372b..6a74af5 100644
--- a/cobalt/site/docs/gen/starboard/tools/doc/testing.md
+++ b/cobalt/site/docs/gen/starboard/tools/doc/testing.md
@@ -1,7 +1,6 @@
----
-layout: doc
-title: "Test Runner Documentation"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
 # Test Runner Documentation
 
 The scripts in this folder comprise a cross-platform unit test runner. The
diff --git a/cobalt/site/docs/index.md b/cobalt/site/docs/index.md
deleted file mode 100644
index 6a981fc..0000000
--- a/cobalt/site/docs/index.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-layout: home
----
-
-<div class="row">
-  <div class="col-md-4">
-    <h2><i class="material-icons">sd_card</i>&nbsp;Efficient</h2>
-    <p class="desc">Cobalt's small binary is optimized for memory, reducing the likelihood of out-of-memory crashes.</p>
-  </div>
-  <div class="col-md-4">
-    <h2><i class="material-icons">security</i>&nbsp;Secure</h2>
-    <p class="desc">Cobalt ensures strong security by requiring use of HTTPS and CSP.</p>
-  </div>
-  <div class="col-md-4">
-    <h2><i class="material-icons">devices_other</i>&nbsp;Cross-platform</h2>
-    <p class="desc">Cobalt's targeted, streamlined porting process supports a wide range of platforms and device types.</p>
-  </div>
-</div>
diff --git a/cobalt/site/docs/overview.md b/cobalt/site/docs/overview.md
index 2f02f5c..fcb2349 100644
--- a/cobalt/site/docs/overview.md
+++ b/cobalt/site/docs/overview.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Getting started"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Getting started
 
 Cobalt is a lightweight HTML5/CSS/JS application container that is designed
 to provide a rich application development environment with minimal resource
@@ -69,20 +69,20 @@
 
 ### Porters
 
-Porters should begin with the [porting guide](/starboard/porting.html),
+Porters should begin with the [porting guide](starboard/porting.md),
 which explains how to use Starboard, Cobalt's porting layer, to customize the
 platform-specific functionality that Cobalt uses. There are several reference
 documents to help porters customize configuration files and to implement
 module-specific functionality. The [Testing with
-NPLB](/starboard/testing.html) document provides an overview of
+NPLB](starboard/testing.md) document provides an overview of
 Starboard's compliance test suite.
 
 ### Developers
 
 Developers can follow the setup instructions for
-[Linux](/development/setup-linux.html) or
-[RasPi](/development/setup-raspi.html) to set up their Cobalt development
+[Linux](development/setup-linux.md) or
+[RasPi](development/setup-raspi.md) to set up their Cobalt development
 environment, clone a copy of the Cobalt code repository, and build a Cobalt
-binary. The [Cobalt support](/development/reference/supported-features.html)
+binary. The [Cobalt support](development/reference/supported-features.md)
 guide lists the HTML elements, CSS properties, CSS selectors, and JavaScript Web
 APIs that developers can use in their Cobalt applications.
diff --git a/cobalt/site/docs/reference/starboard/configuration-public.md b/cobalt/site/docs/reference/starboard/configuration-public.md
index 44659a2..cf083d9 100644
--- a/cobalt/site/docs/reference/starboard/configuration-public.md
+++ b/cobalt/site/docs/reference/starboard/configuration-public.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Configuration Reference Guide"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Configuration Reference Guide
 
 ## Architecture Configuration
 
diff --git a/cobalt/site/docs/reference/starboard/gn-configuration.md b/cobalt/site/docs/reference/starboard/gn-configuration.md
index 18db1ee..7675560 100644
--- a/cobalt/site/docs/reference/starboard/gn-configuration.md
+++ b/cobalt/site/docs/reference/starboard/gn-configuration.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard: configuration.gni Reference Guide"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard: configuration.gni Reference Guide
 
 | Variables |
 | :--- |
@@ -25,7 +25,7 @@
 | **`path_to_nasm`**<br><br> Where yasm can be found on the host device.<br><br>The default value is `"nasm"`. |
 | **`platform_tests_path`**<br><br> Set to the starboard_platform_tests target if the platform implements them.<br><br>The default value is `""`. |
 | **`sabi_path`**<br><br> Where the Starboard ABI file for this platform can be found.<br><br>The default value is `"starboard/sabi/default/sabi.json"`. |
-| **`sb_api_version`**<br><br> The Starboard API version of the current build configuration. The default value is meant to be overridden by a Starboard ABI file.<br><br>The default value is `16`. |
+| **`sb_api_version`**<br><br> The Starboard API version of the current build configuration. The default value is meant to be overridden by a Starboard ABI file.<br><br>The default value is `15`. |
 | **`sb_enable_benchmark`**<br><br> Used to enable benchmarks.<br><br>The default value is `false`. |
 | **`sb_enable_cpp17_audit`**<br><br> Enables an NPLB audit of C++17 support.<br><br>The default value is `true`. |
 | **`sb_enable_lib`**<br><br> Enables embedding Cobalt as a shared library within another app. This requires a 'lib' starboard implementation for the corresponding platform.<br><br>The default value is `false`. |
@@ -33,6 +33,7 @@
 | **`sb_evergreen_compatible_package`**<br><br> Whether to generate the whole package containing both Loader app and Cobalt core on the Evergreen compatible platform.<br><br>The default value is `false`. |
 | **`sb_evergreen_compatible_use_libunwind`**<br><br> Whether to use the libunwind library on Evergreen compatible platform.<br><br>The default value is `false`. |
 | **`sb_filter_based_player`**<br><br> Used to indicate that the player is filter based.<br><br>The default value is `true`. |
+| **`sb_has_unused_symbol_issue`**<br><br> Set this to true if the modular toolchain linker doesn't strip all unused symbols and nplb fails to link.<br><br>The default value is `false`. |
 | **`sb_is_evergreen`**<br><br> Whether this is an Evergreen build.<br><br>The default value is `false`. |
 | **`sb_is_evergreen_compatible`**<br><br> Whether this is an Evergreen compatible platform. A compatible platform can run the elf_loader and launch the Evergreen build.<br><br>The default value is `false`. |
 | **`sb_libevent_method`**<br><br> The event polling mechanism available on this platform to support libevent. Platforms may redefine to 'poll' if necessary. Other mechanisms, e.g. devpoll, kqueue, select, are not yet supported.<br><br>The default value is `"epoll"`. |
diff --git a/cobalt/site/docs/reference/starboard/modules/13/accessibility.md b/cobalt/site/docs/reference/starboard/modules/13/accessibility.md
index a6c8460..8f2a652 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/accessibility.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/accessibility.md
@@ -1,17 +1,17 @@
----
-layout: doc
-title: "Starboard Module Reference: accessibility.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `accessibility.h`
 
 Provides access to the system options and settings related to accessibility.
 
-## Enums ##
+## Enums
 
-### SbAccessibilityCaptionCharacterEdgeStyle ###
+### SbAccessibilityCaptionCharacterEdgeStyle
 
 Enum for possible closed captioning character edge styles.
 
-#### Values ####
+#### Values
 
 *   `kSbAccessibilityCaptionCharacterEdgeStyleNone`
 *   `kSbAccessibilityCaptionCharacterEdgeStyleRaised`
@@ -19,11 +19,11 @@
 *   `kSbAccessibilityCaptionCharacterEdgeStyleUniform`
 *   `kSbAccessibilityCaptionCharacterEdgeStyleDropShadow`
 
-### SbAccessibilityCaptionColor ###
+### SbAccessibilityCaptionColor
 
 Enum for possible closed captioning colors.
 
-#### Values ####
+#### Values
 
 *   `kSbAccessibilityCaptionColorBlue`
 *   `kSbAccessibilityCaptionColorBlack`
@@ -34,11 +34,11 @@
 *   `kSbAccessibilityCaptionColorWhite`
 *   `kSbAccessibilityCaptionColorYellow`
 
-### SbAccessibilityCaptionFontFamily ###
+### SbAccessibilityCaptionFontFamily
 
 Enum for possible closed captioning font families
 
-#### Values ####
+#### Values
 
 *   `kSbAccessibilityCaptionFontFamilyCasual`
 *   `kSbAccessibilityCaptionFontFamilyCursive`
@@ -48,11 +48,11 @@
 *   `kSbAccessibilityCaptionFontFamilyProportionalSerif`
 *   `kSbAccessibilityCaptionFontFamilySmallCapitals`
 
-### SbAccessibilityCaptionFontSizePercentage ###
+### SbAccessibilityCaptionFontSizePercentage
 
 Enum for possible closed captioning font size percentages.
 
-#### Values ####
+#### Values
 
 *   `kSbAccessibilityCaptionFontSizePercentage25`
 *   `kSbAccessibilityCaptionFontSizePercentage50`
@@ -67,11 +67,11 @@
 *   `kSbAccessibilityCaptionFontSizePercentage275`
 *   `kSbAccessibilityCaptionFontSizePercentage300`
 
-### SbAccessibilityCaptionOpacityPercentage ###
+### SbAccessibilityCaptionOpacityPercentage
 
 Enum for possible closed captioning opacity percentages.
 
-#### Values ####
+#### Values
 
 *   `kSbAccessibilityCaptionOpacityPercentage0`
 *   `kSbAccessibilityCaptionOpacityPercentage25`
@@ -79,11 +79,11 @@
 *   `kSbAccessibilityCaptionOpacityPercentage75`
 *   `kSbAccessibilityCaptionOpacityPercentage100`
 
-### SbAccessibilityCaptionState ###
+### SbAccessibilityCaptionState
 
 Enum for possible states of closed captioning properties.
 
-#### Values ####
+#### Values
 
 *   `kSbAccessibilityCaptionStateUnsupported`
 
@@ -115,14 +115,14 @@
     SbAccessibilityCaptionSettings.supportsOverride contains false, then no
     fields of SbAccessibilityCaptionSettings will ever contain this value.
 
-## Structs ##
+## Structs
 
-### SbAccessibilityCaptionSettings ###
+### SbAccessibilityCaptionSettings
 
 A group of settings related to system-level closed captioning settings, for
 platforms that expose closed captioning settings.
 
-#### Members ####
+#### Members
 
 *   `SbAccessibilityCaptionColor background_color`
 *   `SbAccessibilityCaptionState background_color_state`
@@ -166,9 +166,9 @@
     false, the values of `SbAccessibilityCaptionState` should be interpreted
     differently.
 
-### SbAccessibilityDisplaySettings ###
+### SbAccessibilityDisplaySettings
 
-#### Members ####
+#### Members
 
 *   `bool has_high_contrast_text_setting`
 
@@ -177,12 +177,12 @@
 
     Whether the high contrast text setting is enabled or not.
 
-### SbAccessibilityTextToSpeechSettings ###
+### SbAccessibilityTextToSpeechSettings
 
 A group of settings related to text-to-speech functionality, for platforms that
 expose system settings for text-to-speech.
 
-#### Members ####
+#### Members
 
 *   `bool has_text_to_speech_setting`
 
@@ -192,9 +192,9 @@
     Whether the text-to-speech setting is enabled or not. This setting is only
     valid if `has_text_to_speech_setting` is set to true.
 
-## Functions ##
+## Functions
 
-### SbAccessibilityGetCaptionSettings ###
+### SbAccessibilityGetCaptionSettings
 
 Get the platform's settings for system-level closed captions. This function
 returns false if `caption_settings` is NULL or if it is not zero-initialized.
@@ -202,13 +202,13 @@
 `caption_settings`: A pointer to a zero-initialized
 SbAccessibilityTextToSpeechSettings struct.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAccessibilityGetCaptionSettings(SbAccessibilityCaptionSettings *caption_settings)
 ```
 
-### SbAccessibilityGetDisplaySettings ###
+### SbAccessibilityGetDisplaySettings
 
 Get the platform settings related to high contrast text. This function returns
 false if `out_settings` is NULL or if it is not zero-initialized.
@@ -216,13 +216,13 @@
 `out_settings`: A pointer to a zero-initialized SbAccessibilityDisplaySettings*
 struct.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAccessibilityGetDisplaySettings(SbAccessibilityDisplaySettings *out_settings)
 ```
 
-### SbAccessibilityGetTextToSpeechSettings ###
+### SbAccessibilityGetTextToSpeechSettings
 
 Get the platform settings related to the text-to-speech accessibility feature.
 This function returns false if `out_settings` is NULL or if it is not zero-
@@ -231,13 +231,13 @@
 `out_settings`: A pointer to a zero-initialized
 SbAccessibilityTextToSpeechSettings struct.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAccessibilityGetTextToSpeechSettings(SbAccessibilityTextToSpeechSettings *out_settings)
 ```
 
-### SbAccessibilitySetCaptionsEnabled ###
+### SbAccessibilitySetCaptionsEnabled
 
 Modifies whether closed captions are enabled at a system level. This function
 returns false if this feature is not supported by the platform, or if changing
@@ -246,7 +246,7 @@
 `enabled`: A boolean indicating whether captions should be turned on (true) or
 off (false).
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAccessibilitySetCaptionsEnabled(bool enabled)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/atomic.md b/cobalt/site/docs/reference/starboard/modules/13/atomic.md
index 5f79990..9653e53 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/atomic.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/atomic.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: atomic.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `atomic.h`
 
 Defines a set of atomic integer operations that can be used as lightweight
 synchronization or as building blocks for heavier synchronization primitives.
@@ -9,32 +9,32 @@
 supported architectures, so their direct use is not recommended except when
 rigorously deemed absolutely necessary for performance reasons.
 
-## Typedefs ##
+## Typedefs
 
-### SbAtomic64 ###
+### SbAtomic64
 
 64-bit atomic operations (only available on 64-bit processors).
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int64_t SbAtomic64
 ```
 
-### SbAtomicPtr ###
+### SbAtomicPtr
 
 Pointer-sized atomic operations. Forwards to either 32-bit or 64-bit functions
 as appropriate.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbAtomic32 SbAtomicPtr
 ```
 
-## Functions ##
+## Functions
 
-### SbAtomicAcquire_CompareAndSwap ###
+### SbAtomicAcquire_CompareAndSwap
 
 These following lower-level operations are typically useful only to people
 implementing higher-level synchronization operations like spinlocks, mutexes,
@@ -45,23 +45,23 @@
 operation. "Barrier" operations have both "Acquire" and "Release" semantics. A
 SbAtomicMemoryBarrier() has "Barrier" semantics, but does no memory access.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbAtomic32 SbAtomicAcquire_CompareAndSwap(volatile SbAtomic32 *ptr, SbAtomic32 old_value, SbAtomic32 new_value)
 ```
 
-### SbAtomicBarrier_Increment ###
+### SbAtomicBarrier_Increment
 
 Same as SbAtomicNoBarrier_Increment, but with a memory barrier.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbAtomic32 SbAtomicBarrier_Increment(volatile SbAtomic32 *ptr, SbAtomic32 increment)
 ```
 
-### SbAtomicNoBarrier_CompareAndSwap ###
+### SbAtomicNoBarrier_CompareAndSwap
 
 Atomically execute: result = *ptr; if (*ptr == old_value) *ptr = new_value;
 return result;
@@ -71,39 +71,39 @@
 
 This routine implies no memory barriers.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbAtomic32 SbAtomicNoBarrier_CompareAndSwap(volatile SbAtomic32 *ptr, SbAtomic32 old_value, SbAtomic32 new_value)
 ```
 
-### SbAtomicNoBarrier_Exchange ###
+### SbAtomicNoBarrier_Exchange
 
 Atomically store new_value into *ptr, returning the previous value held in *ptr.
 This routine implies no memory barriers.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbAtomic32 SbAtomicNoBarrier_Exchange(volatile SbAtomic32 *ptr, SbAtomic32 new_value)
 ```
 
-### SbAtomicNoBarrier_Increment ###
+### SbAtomicNoBarrier_Increment
 
 Atomically increment *ptr by "increment". Returns the new value of *ptr with the
 increment applied. This routine implies no memory barriers.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbAtomic32 SbAtomicNoBarrier_Increment(volatile SbAtomic32 *ptr, SbAtomic32 increment)
 ```
 
-### SbAtomicRelease_CompareAndSwap8 ###
+### SbAtomicRelease_CompareAndSwap8
 
 Overloaded functions for Atomic8.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbAtomic8 SbAtomicRelease_CompareAndSwap8(volatile SbAtomic8 *ptr, SbAtomic8 old_value, SbAtomic8 new_value)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/audio_sink.md b/cobalt/site/docs/reference/starboard/modules/13/audio_sink.md
index b0e652f..9277c70 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/audio_sink.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/audio_sink.md
@@ -1,53 +1,53 @@
----
-layout: doc
-title: "Starboard Module Reference: audio_sink.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `audio_sink.h`
 
 Provides an interface to output raw audio data.
 
-## Macros ##
+## Macros
 
-### kSbAudioSinkInvalid ###
+### kSbAudioSinkInvalid
 
 Well-defined value for an invalid audio sink.
 
-## Typedefs ##
+## Typedefs
 
-### SbAudioSink ###
+### SbAudioSink
 
 An opaque handle to an implementation-private structure representing an audio
 sink.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbAudioSinkPrivate* SbAudioSink
 ```
 
-### SbAudioSinkConsumeFramesFunc ###
+### SbAudioSinkConsumeFramesFunc
 
 Callback used to report frames consumed. The consumed frames will be removed
 from the source frame buffer to free space for new audio frames.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbAudioSinkConsumeFramesFunc) (int frames_consumed, void *context)
 ```
 
-### SbAudioSinkFrameBuffers ###
+### SbAudioSinkFrameBuffers
 
 An array of frame buffers. For interleaved audio streams, there will be only one
 element in the array. For planar audio streams, the number of elements in the
 array equal to the number of channels.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void** SbAudioSinkFrameBuffers
 ```
 
-### SbAudioSinkUpdateSourceStatusFunc ###
+### SbAudioSinkUpdateSourceStatusFunc
 
 Callback being called periodically to retrieve the status of the audio source.
 The first two output parameters indicating the filling level of the audio frame
@@ -64,15 +64,15 @@
 NULL. Note that this function only reports the status of the source, it doesn't
 remove audio data from the source frame buffer.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbAudioSinkUpdateSourceStatusFunc) (int *frames_in_buffer, int *offset_in_frames, bool *is_playing, bool *is_eos_reached, void *context)
 ```
 
-## Functions ##
+## Functions
 
-### SbAudioSinkCreate ###
+### SbAudioSinkCreate
 
 Creates an audio sink for the specified `channels` and `sampling_frequency_hz`,
 acquires all resources needed to operate the audio sink, and returns an opaque
@@ -113,13 +113,13 @@
     value that is passed back to all callbacks and is generally used to point at
     a class or struct that contains state associated with the audio sink.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbAudioSink SbAudioSinkCreate(int channels, int sampling_frequency_hz, SbMediaAudioSampleType audio_sample_type, SbMediaAudioFrameStorageType audio_frame_storage_type, SbAudioSinkFrameBuffers frame_buffers, int frames_per_channel, SbAudioSinkUpdateSourceStatusFunc update_source_status_func, SbAudioSinkConsumeFramesFunc consume_frames_func, void *context)
 ```
 
-### SbAudioSinkDestroy ###
+### SbAudioSinkDestroy
 
 Destroys `audio_sink`, freeing all associated resources. Before returning, the
 function waits until all callbacks that are in progress have finished. After the
@@ -132,24 +132,24 @@
 
 `audio_sink`: The audio sink to destroy.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbAudioSinkDestroy(SbAudioSink audio_sink)
 ```
 
-### SbAudioSinkGetMaxChannels ###
+### SbAudioSinkGetMaxChannels
 
 Returns the maximum number of channels supported on the platform. For example,
 the number would be `2` if the platform only supports stereo.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbAudioSinkGetMaxChannels()
 ```
 
-### SbAudioSinkGetMinBufferSizeInFrames ###
+### SbAudioSinkGetMinBufferSizeInFrames
 
 Returns the minimum frames required by audio sink to play without underflows.
 Returns -1, if `channels`, `sample_type` or `sampling_frequency_hz` is not
@@ -162,52 +162,52 @@
 audio data being streamed. For example, 22,000 Hz means 22,000 sample elements
 represents one second of audio data.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbAudioSinkGetMinBufferSizeInFrames(int channels, SbMediaAudioSampleType sample_type, int sampling_frequency_hz)
 ```
 
-### SbAudioSinkGetNearestSupportedSampleFrequency ###
+### SbAudioSinkGetNearestSupportedSampleFrequency
 
 Returns the supported sample rate closest to `sampling_frequency_hz`. On
 platforms that don't support all sample rates, it is the caller's responsibility
 to resample the audio frames into the supported sample rate returned by this
 function.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbAudioSinkGetNearestSupportedSampleFrequency(int sampling_frequency_hz)
 ```
 
-### SbAudioSinkIsAudioFrameStorageTypeSupported ###
+### SbAudioSinkIsAudioFrameStorageTypeSupported
 
 Indicates whether `audio_frame_storage_type` is supported on this platform.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAudioSinkIsAudioFrameStorageTypeSupported(SbMediaAudioFrameStorageType audio_frame_storage_type)
 ```
 
-### SbAudioSinkIsAudioSampleTypeSupported ###
+### SbAudioSinkIsAudioSampleTypeSupported
 
 Indicates whether `audio_sample_type` is supported on this platform.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAudioSinkIsAudioSampleTypeSupported(SbMediaAudioSampleType audio_sample_type)
 ```
 
-### SbAudioSinkIsValid ###
+### SbAudioSinkIsValid
 
 Indicates whether the given audio sink handle is valid.
 
 `audio_sink`: The audio sink handle to check.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAudioSinkIsValid(SbAudioSink audio_sink)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/byte_swap.md b/cobalt/site/docs/reference/starboard/modules/13/byte_swap.md
index 580bc5d..4b2cab30 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/byte_swap.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/byte_swap.md
@@ -1,74 +1,74 @@
----
-layout: doc
-title: "Starboard Module Reference: byte_swap.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `byte_swap.h`
 
 Specifies functions for swapping byte order. These functions are used to deal
 with endianness when performing I/O.
 
-## Functions ##
+## Functions
 
-### SbByteSwapS16 ###
+### SbByteSwapS16
 
 Unconditionally swaps the byte order in signed 16-bit `value`. `value`: The
 value for which the byte order will be swapped.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int16_t SbByteSwapS16(int16_t value)
 ```
 
-### SbByteSwapS32 ###
+### SbByteSwapS32
 
 Unconditionally swaps the byte order in signed 32-bit `value`. `value`: The
 value for which the byte order will be swapped.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int32_t SbByteSwapS32(int32_t value)
 ```
 
-### SbByteSwapS64 ###
+### SbByteSwapS64
 
 Unconditionally swaps the byte order in signed 64-bit `value`. `value`: The
 value for which the byte order will be swapped.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbByteSwapS64(int64_t value)
 ```
 
-### SbByteSwapU16 ###
+### SbByteSwapU16
 
 Unconditionally swaps the byte order in unsigned 16-bit `value`. `value`: The
 value for which the byte order will be swapped.
 
-#### Declaration ####
+#### Declaration
 
 ```
 uint16_t SbByteSwapU16(uint16_t value)
 ```
 
-### SbByteSwapU32 ###
+### SbByteSwapU32
 
 Unconditionally swaps the byte order in unsigned 32-bit `value`. `value`: The
 value for which the byte order will be swapped.
 
-#### Declaration ####
+#### Declaration
 
 ```
 uint32_t SbByteSwapU32(uint32_t value)
 ```
 
-### SbByteSwapU64 ###
+### SbByteSwapU64
 
 Unconditionally swaps the byte order in unsigned 64-bit `value`. `value`: The
 value for which the byte order will be swapped.
 
-#### Declaration ####
+#### Declaration
 
 ```
 uint64_t SbByteSwapU64(uint64_t value)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/condition_variable.md b/cobalt/site/docs/reference/starboard/modules/13/condition_variable.md
index 836c4b8..a665a24 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/condition_variable.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/condition_variable.md
@@ -1,23 +1,23 @@
----
-layout: doc
-title: "Starboard Module Reference: condition_variable.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `condition_variable.h`
 
 Defines an interface for condition variables.
 
-## Macros ##
+## Macros
 
-### SB_CONDITION_VARIABLE_MAX_SIZE ###
+### SB_CONDITION_VARIABLE_MAX_SIZE
 
 Max size of the SbConditionVariable type.
 
-## Enums ##
+## Enums
 
-### SbConditionVariableResult ###
+### SbConditionVariableResult
 
 Enumeration of possible results from waiting on a condvar.
 
-#### Values ####
+#### Values
 
 *   `kSbConditionVariableSignaled`
 
@@ -30,22 +30,22 @@
     The wait failed, either because a parameter wasn't valid, or the condition
     variable has already been destroyed, or something similar.
 
-## Typedefs ##
+## Typedefs
 
-### SbConditionVariable ###
+### SbConditionVariable
 
 An opaque handle to a condition variable type with reserved memory buffer of
 size SB_CONDITION_VARIABLE_MAX_SIZE and aligned at void pointer type.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef union SbConditionVariable  SbConditionVariable
 ```
 
-## Functions ##
+## Functions
 
-### SbConditionVariableBroadcast ###
+### SbConditionVariableBroadcast
 
 Broadcasts to all current waiters of `condition` to stop waiting. This function
 wakes all of the threads waiting on `condition` while SbConditionVariableSignal
@@ -53,26 +53,26 @@
 
 `condition`: The condition that should no longer be waited for.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbConditionVariableBroadcast(SbConditionVariable *condition)
 ```
 
-### SbConditionVariableCreate ###
+### SbConditionVariableCreate
 
 Creates a new condition variable to work with `opt_mutex`, which may be null,
 placing the newly created condition variable in `out_condition`.
 
 The return value indicates whether the condition variable could be created.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbConditionVariableCreate(SbConditionVariable *out_condition, SbMutex *opt_mutex)
 ```
 
-### SbConditionVariableDestroy ###
+### SbConditionVariableDestroy
 
 Destroys the specified SbConditionVariable . The return value indicates whether
 the destruction was successful. The behavior is undefined if other threads are
@@ -81,23 +81,23 @@
 `condition`: The SbConditionVariable to be destroyed. This invalidates the
 condition variable.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbConditionVariableDestroy(SbConditionVariable *condition)
 ```
 
-### SbConditionVariableIsSignaled ###
+### SbConditionVariableIsSignaled
 
 Returns whether the given result is a success.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbConditionVariableIsSignaled(SbConditionVariableResult result)
 ```
 
-### SbConditionVariableSignal ###
+### SbConditionVariableSignal
 
 Signals the next waiter of `condition` to stop waiting. This function wakes a
 single thread waiting on `condition` while SbConditionVariableBroadcast wakes
@@ -105,24 +105,24 @@
 
 `condition`: The condition that the waiter should stop waiting for.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbConditionVariableSignal(SbConditionVariable *condition)
 ```
 
-### SbConditionVariableWait ###
+### SbConditionVariableWait
 
 Waits for `condition`, releasing the held lock `mutex`, blocking indefinitely,
 and returning the result. Behavior is undefined if `mutex` is not held.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbConditionVariableResult SbConditionVariableWait(SbConditionVariable *condition, SbMutex *mutex)
 ```
 
-### SbConditionVariableWaitTimed ###
+### SbConditionVariableWaitTimed
 
 Waits for `condition`, releasing the held lock `mutex`, blocking up to
 `timeout_duration`, and returning the acquisition result. Behavior is undefined
@@ -133,7 +133,7 @@
 function returns as quickly as possible with a kSbConditionVariableTimedOut
 result.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbConditionVariableResult SbConditionVariableWaitTimed(SbConditionVariable *condition, SbMutex *mutex, SbTime timeout_duration)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/configuration.md b/cobalt/site/docs/reference/starboard/modules/13/configuration.md
index 630f1cf..d0ba3c7 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/configuration.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/configuration.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: configuration.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `configuration.h`
 
 Provides a description of the current platform in lurid detail so that common
 code never needs to actually know what the current operating system and
@@ -13,117 +13,117 @@
 narrowly-defined configuration features, but it retains porting control in
 Starboard.
 
-## Macros ##
+## Macros
 
-### SB_ALIGNAS(byte_alignment) ###
+### SB_ALIGNAS(byte_alignment)
 
 Specifies the alignment for a class, struct, union, enum, class/struct field, or
 stack variable.
 
-### SB_ALIGNOF(type) ###
+### SB_ALIGNOF(type)
 
 Returns the alignment required for any instance of the type indicated by `type`.
 
-### SB_ARRAY_SIZE(array) ###
+### SB_ARRAY_SIZE(array)
 
 A constant expression that evaluates to the size_t size of a statically-sized
 array.
 
-### SB_ARRAY_SIZE_INT(array) ###
+### SB_ARRAY_SIZE_INT(array)
 
 A constant expression that evaluates to the int size of a statically-sized
 array.
 
-### SB_CAN(SB_FEATURE) ###
+### SB_CAN(SB_FEATURE)
 
 Determines a compile-time capability of the system.
 
-### SB_COMPILE_ASSERT(expr, msg) ###
+### SB_COMPILE_ASSERT(expr, msg)
 
 Will cause a compiler error with `msg` if `expr` is false. `msg` must be a valid
 identifier, and must be a unique type in the scope of the declaration.
 
-### SB_DEPRECATED(FUNC) ###
+### SB_DEPRECATED(FUNC)
 
 SB_DEPRECATED(int Foo(int bar)); Annotates the function as deprecated, which
 will trigger a compiler warning when referenced.
 
-### SB_DEPRECATED_EXTERNAL(FUNC) ###
+### SB_DEPRECATED_EXTERNAL(FUNC)
 
 SB_DEPRECATED_EXTERNAL(...) annotates the function as deprecated for external
 clients, but not deprecated for starboard.
 
-### SB_EXPERIMENTAL_API_VERSION ###
+### SB_EXPERIMENTAL_API_VERSION
 
 The API version that is currently open for changes, and therefore is not stable
 or frozen. Production-oriented ports should avoid declaring that they implement
 the experimental Starboard API version.
 
-### SB_FUNCTION ###
+### SB_FUNCTION
 
 Whether we use **PRETTY_FUNCTION** PRETTY_FUNCTION or **FUNCTION** FUNCTION for
 logging.
 
-### SB_HAS(SB_FEATURE) ###
+### SB_HAS(SB_FEATURE)
 
 Determines at compile-time whether this platform has a standard feature or
 header available.
 
-### SB_HAS_64_BIT_ATOMICS ###
+### SB_HAS_64_BIT_ATOMICS
 
 Whether the current platform has 64-bit atomic operations.
 
-### SB_HAS_GLES2 ###
+### SB_HAS_GLES2
 
 Specifies whether this platform has a performant OpenGL ES 2 implementation,
 which allows client applications to use GL rendering paths. Derived from the gyp
 variable `gl_type` gl_type which indicates what kind of GL implementation is
 available.
 
-### SB_HAS_QUIRK(SB_FEATURE) ###
+### SB_HAS_QUIRK(SB_FEATURE)
 
 Determines at compile-time whether this platform has a quirk.
 
-### SB_INT64_C(x) ###
+### SB_INT64_C(x)
 
 Declare numeric literals of signed 64-bit type.
 
-### SB_IS(SB_FEATURE) ###
+### SB_IS(SB_FEATURE)
 
 Determines at compile-time an inherent aspect of this platform.
 
-### SB_LIKELY(x) ###
+### SB_LIKELY(x)
 
 Macro for hinting that an expression is likely to be true.
 
-### SB_MAXIMUM_API_VERSION ###
+### SB_MAXIMUM_API_VERSION
 
 The maximum API version allowed by this version of the Starboard headers,
 inclusive.
 
-### SB_MINIMUM_API_VERSION ###
+### SB_MINIMUM_API_VERSION
 
 The minimum API version allowed by this version of the Starboard headers,
 inclusive.
 
-### SB_NORETURN ###
+### SB_NORETURN
 
 Macro to annotate a function as noreturn, which signals to the compiler that the
 function cannot return.
 
-### SB_OVERRIDE ###
+### SB_OVERRIDE
 
 Declares a function as overriding a virtual function on compilers that support
 it.
 
-### SB_PREFERRED_RGBA_BYTE_ORDER_RGBA ###
+### SB_PREFERRED_RGBA_BYTE_ORDER_RGBA
 
 An enumeration of values for the kSbPreferredByteOrder configuration variable.
 Setting this up properly means avoiding slow color swizzles when passing pixel
 data from one library to another. Note that these definitions are in byte-order
 and so are endianness-independent.
 
-### SB_PRINTF_FORMAT(format_param, dots_param) ###
+### SB_PRINTF_FORMAT(format_param, dots_param)
 
 Tells the compiler a function is using a printf-style format string.
 `format_param` is the one-based index of the format string parameter;
@@ -132,7 +132,7 @@
 but matches what the system C headers do.) (Partially taken from
 base/compiler_specific.h)
 
-### SB_RESTRICT ###
+### SB_RESTRICT
 
 Include the platform-specific configuration. This macro is set by GN in
 starboard/build/config/BUILD.gn and passed in on the command line for all
@@ -140,29 +140,29 @@
 that the compiler can make certain optimizations because it knows the pointers
 are unique.
 
-### SB_SIZE_OF(DATATYPE) ###
+### SB_SIZE_OF(DATATYPE)
 
 Determines at compile-time the size of a data type, or 0 if the data type that
 was specified was invalid.
 
-### SB_STRINGIFY(x) ###
+### SB_STRINGIFY(x)
 
 Standard CPP trick to stringify an evaluated macro definition.
 
-### SB_UINT64_C(x) ###
+### SB_UINT64_C(x)
 
 Declare numeric literals of unsigned 64-bit type.
 
-### SB_UNLIKELY(x) ###
+### SB_UNLIKELY(x)
 
 Macro for hinting that an expression is likely to be false.
 
-### SB_UNREFERENCED_PARAMETER(x) ###
+### SB_UNREFERENCED_PARAMETER(x)
 
 Trivially references a parameter that is otherwise unreferenced, preventing a
 compiler warning on some platforms.
 
-### SB_WARN_UNUSED_RESULT ###
+### SB_WARN_UNUSED_RESULT
 
 Causes the annotated (at the end) function to generate a warning if the result
 is not accessed.
diff --git a/cobalt/site/docs/reference/starboard/modules/13/configuration_constants.md b/cobalt/site/docs/reference/starboard/modules/13/configuration_constants.md
index b380f62..012754b 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/configuration_constants.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/configuration_constants.md
@@ -1,113 +1,113 @@
----
-layout: doc
-title: "Starboard Module Reference: configuration_constants.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `configuration_constants.h`
 
 Declares all configuration variables we will need to use at runtime. These
 variables describe the current platform in detail to allow cobalt to make
 runtime decisions based on per platform configurations.
 
-## Variables ##
+## Variables
 
-### kSbDefaultMmapThreshold ###
+### kSbDefaultMmapThreshold
 
 Determines the threshold of allocation size that should be done with mmap (if
 available), rather than allocated within the core heap.
 
-### kSbFileAltSepChar ###
+### kSbFileAltSepChar
 
 The current platform's alternate file path component separator character. This
 is like SB_FILE_SEP_CHAR, except if your platform supports an alternate
 character, then you can place that here. For example, on windows machines, the
 primary separator character is probably '\', but the alternate is '/'.
 
-### kSbFileAltSepString ###
+### kSbFileAltSepString
 
 The string form of SB_FILE_ALT_SEP_CHAR.
 
-### kSbFileMaxName ###
+### kSbFileMaxName
 
 The current platform's maximum length of the name of a single directory entry,
 not including the absolute path.
 
-### kSbFileMaxOpen ###
+### kSbFileMaxOpen
 
 The current platform's maximum number of files that can be opened at the same
 time by one process.
 
-### kSbFileMaxPath ###
+### kSbFileMaxPath
 
 The current platform's maximum length of an absolute path.
 
-### kSbFileSepChar ###
+### kSbFileSepChar
 
 The current platform's file path component separator character. This is the
 character that appears after a directory in a file path. For example, the
 absolute canonical path of the file "/path/to/a/file.txt" uses '/' as a path
 component separator character.
 
-### kSbFileSepString ###
+### kSbFileSepString
 
 The string form of SB_FILE_SEP_CHAR.
 
-### kSbHasAc3Audio ###
+### kSbHasAc3Audio
 
 Allow ac3 and ec3 support
 
-### kSbHasMediaWebmVp9Support ###
+### kSbHasMediaWebmVp9Support
 
 Specifies whether this platform has webm/vp9 support. This should be set to non-
 zero on platforms with webm/vp9 support.
 
-### kSbHasThreadPrioritySupport ###
+### kSbHasThreadPrioritySupport
 
 Whether the current platform supports thread priorities.
 
-### kSbMallocAlignment ###
+### kSbMallocAlignment
 
 Determines the alignment that allocations should have on this platform.
 
-### kSbMaxThreadLocalKeys ###
+### kSbMaxThreadLocalKeys
 
 The maximum number of thread local storage keys supported by this platform. This
 comes from _POSIX_THREAD_KEYS_MAX. The value of PTHREAD_KEYS_MAX is higher, but
 unit tests show that the implementation doesn't support nearly as many keys.
 
-### kSbMaxThreadNameLength ###
+### kSbMaxThreadNameLength
 
 The maximum length of the name for a thread, including the NULL-terminator.
 
-### kSbMaxThreads ###
+### kSbMaxThreads
 
 Defines the maximum number of simultaneous threads for this platform. Some
 platforms require sharing thread handles with other kinds of system handles,
 like mutexes, so we want to keep this manageable.
 
-### kSbMediaMaxAudioBitrateInBitsPerSecond ###
+### kSbMediaMaxAudioBitrateInBitsPerSecond
 
 The maximum audio bitrate the platform can decode. The following value equals to
 5M bytes per seconds which is more than enough for compressed audio.
 
-### kSbMediaMaxVideoBitrateInBitsPerSecond ###
+### kSbMediaMaxVideoBitrateInBitsPerSecond
 
 The maximum video bitrate the platform can decode. The following value equals to
 8M bytes per seconds which is more than enough for compressed video.
 
-### kSbMediaVideoFrameAlignment ###
+### kSbMediaVideoFrameAlignment
 
 Specifies how video frame buffers must be aligned on this platform.
 
-### kSbMemoryLogPath ###
+### kSbMemoryLogPath
 
 Defines the path where memory debugging logs should be written to.
 
-### kSbMemoryPageSize ###
+### kSbMemoryPageSize
 
 The memory page size, which controls the size of chunks on memory that
 allocators deal with, and the alignment of those chunks. This doesn't have to be
 the hardware-defined physical page size, but it should be a multiple of it.
 
-### kSbNetworkReceiveBufferSize ###
+### kSbNetworkReceiveBufferSize
 
 Specifies the network receive buffer size in bytes, set via
 SbSocketSetReceiveBufferSize().
@@ -122,7 +122,7 @@
 If your platform does not have a good TCP auto-tuning mechanism, a setting of
 (128 * 1024) here is recommended.
 
-### kSbPathSepChar ###
+### kSbPathSepChar
 
 The current platform's search path component separator character. When
 specifying an ordered list of absolute paths of directories to search for a
@@ -130,16 +130,16 @@
 the search path of "/etc/search/first:/etc/search/second" uses ':' as a search
 path component separator character.
 
-### kSbPathSepString ###
+### kSbPathSepString
 
 The string form of SB_PATH_SEP_CHAR.
 
-### kSbPreferredRgbaByteOrder ###
+### kSbPreferredRgbaByteOrder
 
 Specifies the preferred byte order of color channels in a pixel. Refer to
 starboard/configuration.h for the possible values. EGL/GLES platforms should
 generally prefer a byte order of RGBA, regardless of endianness.
 
-### kSbUserMaxSignedIn ###
+### kSbUserMaxSignedIn
 
 The maximum number of users that can be signed in at the same time.
diff --git a/cobalt/site/docs/reference/starboard/modules/13/cpu_features.md b/cobalt/site/docs/reference/starboard/modules/13/cpu_features.md
index ee12e71..e2aa35f 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/cpu_features.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/cpu_features.md
@@ -1,13 +1,13 @@
----
-layout: doc
-title: "Starboard Module Reference: cpu_features.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
 
-## Structs ##
+# Starboard Module Reference: `cpu_features.h`
 
-### SbCPUFeatures ###
+## Structs
 
-#### Members ####
+### SbCPUFeatures
+
+#### Members
 
 *   `SbCPUFeaturesArchitecture architecture`
 
@@ -54,9 +54,9 @@
     defined as a macro.
 *   `SbCPUFeaturesX86 x86`
 
-### SbCPUFeaturesARM ###
+### SbCPUFeaturesARM
 
-#### Members ####
+#### Members
 
 *   `int16_t implementer`
 
@@ -98,7 +98,7 @@
     SDIV and UDIV hardware division in ARM mode.
 *   `bool has_aes`
 
-    ###### Arm 64 feature flags  ######
+    ###### Arm 64 feature flags
 
     AES instructions.
 *   `bool has_crc32`
@@ -114,17 +114,17 @@
 
     64-bit PMULL and PMULL2 instructions.
 
-### SbCPUFeaturesMIPS ###
+### SbCPUFeaturesMIPS
 
-#### Members ####
+#### Members
 
 *   `bool has_msa`
 
     MIPS SIMD Architecture (MSA).
 
-### SbCPUFeaturesX86 ###
+### SbCPUFeaturesX86
 
-#### Members ####
+#### Members
 
 *   `const char * vendor`
 
@@ -244,9 +244,9 @@
 
     SAHF in long mode.
 
-## Functions ##
+## Functions
 
-### SbCPUFeaturesGet ###
+### SbCPUFeaturesGet
 
 Retrieve the underlying CPU features and place it in `features`, which must not
 be NULL.
@@ -254,9 +254,8 @@
 If this function returns false, it means the CPU architecture is unknown and all
 fields in `features` are invalid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbCPUFeaturesGet(SbCPUFeatures *features)
 ```
-
diff --git a/cobalt/site/docs/reference/starboard/modules/13/decode_target.md b/cobalt/site/docs/reference/starboard/modules/13/decode_target.md
index 23ed59d..d1ebd71 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/decode_target.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/decode_target.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: decode_target.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `decode_target.h`
 
 A target for decoding image and video data into. This corresponds roughly to an
 EGLImage, but that extension may not be fully supported on all GL platforms.
@@ -12,7 +12,7 @@
 decoding done directly into this memory, avoiding unnecessary memory copies, and
 also avoiding pushing data between CPU and GPU memory unnecessarily.
 
-## SbDecodeTargetFormat ##
+## SbDecodeTargetFormat
 
 SbDecodeTargets support several different formats that can be used to decode
 into and render from. Some formats may be easier to decode into, and others may
@@ -21,7 +21,7 @@
 Each decoder provides a way to check if a given SbDecodeTargetFormat is
 supported by that decoder.
 
-## SbDecodeTargetGraphicsContextProvider ##
+## SbDecodeTargetGraphicsContextProvider
 
 Some components may need to acquire SbDecodeTargets compatible with a certain
 rendering context, which may need to be created on a particular thread. The
@@ -33,10 +33,9 @@
 EGLContext held current. This may be useful if your SbDecodeTarget creation code
 needs to execute GLES commands like, for example, glGenTextures().
 
-The primary usage is likely to be the the SbPlayer implementation on some
-platforms.
+The primary usage is likely to be the SbPlayer implementation on some platforms.
 
-## SbDecodeTarget Example ##
+## SbDecodeTarget Example
 
 Let's say that we are an application and we would like to use the interface
 defined in starboard/image.h to decode an imaginary "image/foo" image type.
@@ -79,15 +78,15 @@
     info.planes[kSbDecodeTargetPlaneRGBA].texture;
 ```
 
-## Macros ##
+## Macros
 
-### kSbDecodeTargetInvalid ###
+### kSbDecodeTargetInvalid
 
 Well-defined value for an invalid decode target handle.
 
-## Enums ##
+## Enums
 
-### SbDecodeTargetFormat ###
+### SbDecodeTargetFormat
 
 The list of all possible decoder target formats. An SbDecodeTarget consists of
 one or more planes of data, each plane corresponding with a surface. For some
@@ -96,7 +95,7 @@
 NOTE: For enumeration entries with an alpha component, the alpha will always be
 premultiplied unless otherwise explicitly specified.
 
-#### Values ####
+#### Values
 
 *   `kSbDecodeTargetFormat1PlaneRGBA`
 
@@ -132,11 +131,11 @@
 
     An invalid decode target format.
 
-### SbDecodeTargetPlane ###
+### SbDecodeTargetPlane
 
 All the planes supported by SbDecodeTarget.
 
-#### Values ####
+#### Values
 
 *   `kSbDecodeTargetPlaneRGBA`
 
@@ -157,45 +156,45 @@
 
     The V plane for 3-plane YUV formats.
 
-## Typedefs ##
+## Typedefs
 
-### SbDecodeTarget ###
+### SbDecodeTarget
 
 A handle to a target for image data decoding.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbDecodeTargetPrivate* SbDecodeTarget
 ```
 
-### SbDecodeTargetGlesContextRunner ###
+### SbDecodeTargetGlesContextRunner
 
 Signature for a function provided by the application to the Starboard
 implementation that will let the Starboard implementation run arbitrary code on
 the application's renderer thread with the application's EGLContext held
 current.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDecodeTargetGlesContextRunner) (struct SbDecodeTargetGraphicsContextProvider *graphics_context_provider, SbDecodeTargetGlesContextRunnerTarget target_function, void *target_function_context)
 ```
 
-### SbDecodeTargetGlesContextRunnerTarget ###
+### SbDecodeTargetGlesContextRunnerTarget
 
 Signature for a Starboard implementation function that is to be run by a
 SbDecodeTargetGlesContextRunner callback.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDecodeTargetGlesContextRunnerTarget) (void *gles_context_runner_target_context)
 ```
 
-## Structs ##
+## Structs
 
-### SbDecodeTargetGraphicsContextProvider ###
+### SbDecodeTargetGraphicsContextProvider
 
 In general, the SbDecodeTargetGraphicsContextProvider structure provides
 information about the graphics context that will be used to render
@@ -205,7 +204,7 @@
 to all Starboard functions that might create SbDecodeTargets (e.g.
 SbImageDecode()).
 
-#### Members ####
+#### Members
 
 *   `void * egl_display`
 
@@ -228,12 +227,12 @@
     Context data that is to be passed in to `gles_context_runner` when it is
     invoked.
 
-### SbDecodeTargetInfo ###
+### SbDecodeTargetInfo
 
 Contains all information about a decode target, including all of its planes.
 This can be queried via calls to SbDecodeTargetGetInfo().
 
-#### Members ####
+#### Members
 
 *   `SbDecodeTargetFormat format`
 
@@ -262,11 +261,11 @@
     kSbDecodeTargetPlaneU, kSbDecodeTargetPlaneV} associated with this decode
     target.
 
-### SbDecodeTargetInfoContentRegion ###
+### SbDecodeTargetInfoContentRegion
 
 Defines a rectangular content region within a SbDecodeTargetInfoPlane structure.
 
-#### Members ####
+#### Members
 
 *   `float left`
 
@@ -278,11 +277,11 @@
 *   `float right`
 *   `float bottom`
 
-### SbDecodeTargetInfoPlane ###
+### SbDecodeTargetInfoPlane
 
 Defines an image plane within a SbDecodeTargetInfo object.
 
-#### Members ####
+#### Members
 
 *   `uint32_t texture`
 
@@ -312,53 +311,53 @@
     these parameters are number of pixels. The range for left/right is [0,
     width], and for top/bottom it is [0, height].
 
-## Functions ##
+## Functions
 
-### PrivateDecodeTargetReleaser ###
+### PrivateDecodeTargetReleaser
 
 This function is just an implementation detail of
 SbDecodeTargetReleaseInGlesContext() and should not be called directly.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static void PrivateDecodeTargetReleaser(void *context)
 ```
 
-### SbDecodeTargetGetInfo ###
+### SbDecodeTargetGetInfo
 
 Writes all information about `decode_target` into `out_info`. The
 `decode_target` must not be kSbDecodeTargetInvalid. The `out_info` pointer must
 not be NULL. Returns false if the provided `out_info` structure is not zero
 initialized.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbDecodeTargetGetInfo(SbDecodeTarget decode_target, SbDecodeTargetInfo *out_info)
 ```
 
-### SbDecodeTargetIsFormatValid ###
+### SbDecodeTargetIsFormatValid
 
 Returns whether a given format is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbDecodeTargetIsFormatValid(SbDecodeTargetFormat format)
 ```
 
-### SbDecodeTargetIsValid ###
+### SbDecodeTargetIsValid
 
 Returns whether the given file handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbDecodeTargetIsValid(SbDecodeTarget handle)
 ```
 
-### SbDecodeTargetRelease ###
+### SbDecodeTargetRelease
 
 Returns ownership of `decode_target` to the Starboard implementation. This
 function will likely result in the destruction of the SbDecodeTarget and all its
@@ -366,31 +365,31 @@
 reference count. In the case where SB_HAS(GLES2), this function must be called
 on a thread with the context
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbDecodeTargetRelease(SbDecodeTarget decode_target)
 ```
 
-### SbDecodeTargetReleaseInGlesContext ###
+### SbDecodeTargetReleaseInGlesContext
 
 Helper function that is possibly useful to Starboard implementations that will
 release a decode target on the thread with the GLES context current.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static void SbDecodeTargetReleaseInGlesContext(SbDecodeTargetGraphicsContextProvider *provider, SbDecodeTarget decode_target)
 ```
 
-### SbDecodeTargetRunInGlesContext ###
+### SbDecodeTargetRunInGlesContext
 
 Inline convenience function to run an arbitrary
 SbDecodeTargetGlesContextRunnerTarget function through a
 SbDecodeTargetGraphicsContextProvider . This is intended to be called by
 Starboard implementations, if it is necessary.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static void SbDecodeTargetRunInGlesContext(SbDecodeTargetGraphicsContextProvider *provider, SbDecodeTargetGlesContextRunnerTarget target, void *target_context)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/directory.md b/cobalt/site/docs/reference/starboard/modules/13/directory.md
index d46c9a1..1c0f904 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/directory.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/directory.md
@@ -1,56 +1,56 @@
----
-layout: doc
-title: "Starboard Module Reference: directory.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `directory.h`
 
 Provides directory listing functions.
 
-## Macros ##
+## Macros
 
-### kSbDirectoryInvalid ###
+### kSbDirectoryInvalid
 
 Well-defined value for an invalid directory stream handle.
 
-## Typedefs ##
+## Typedefs
 
-### SbDirectory ###
+### SbDirectory
 
 A handle to an open directory stream.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbDirectoryPrivate* SbDirectory
 ```
 
-## Functions ##
+## Functions
 
-### SbDirectoryCanOpen ###
+### SbDirectoryCanOpen
 
 Indicates whether SbDirectoryOpen is allowed for the given `path`.
 
 `path`: The path to be checked.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbDirectoryCanOpen(const char *path)
 ```
 
-### SbDirectoryClose ###
+### SbDirectoryClose
 
 Closes an open directory stream handle. The return value indicates whether the
 directory was closed successfully.
 
 `directory`: The directory stream handle to close.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbDirectoryClose(SbDirectory directory)
 ```
 
-### SbDirectoryCreate ###
+### SbDirectoryCreate
 
 Creates the directory `path`, assuming the parent directory already exists. This
 function returns `true` if the directory now exists (even if it existed before)
@@ -58,13 +58,13 @@
 
 `path`: The path to be created.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbDirectoryCreate(const char *path)
 ```
 
-### SbDirectoryGetNext ###
+### SbDirectoryGetNext
 
 Populates `out_entry` with the next entry in the specified directory stream, and
 moves the stream forward by one entry.
@@ -83,23 +83,23 @@
 `out_entry_size`: The size of the space allocated for `out_entry`. This should
 be at least equal to kSbFileMaxName.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbDirectoryGetNext(SbDirectory directory, char *out_entry, size_t out_entry_size)
 ```
 
-### SbDirectoryIsValid ###
+### SbDirectoryIsValid
 
 Returns whether the given directory stream handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbDirectoryIsValid(SbDirectory directory)
 ```
 
-### SbDirectoryOpen ###
+### SbDirectoryOpen
 
 Opens the given existing directory for listing. This function returns
 kSbDirectoryInvalidHandle if it is not successful.
@@ -110,7 +110,7 @@
 `out_error`: An output parameter that, in case of an error, is set to the reason
 that the directory could not be opened.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbDirectory SbDirectoryOpen(const char *path, SbFileError *out_error)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/drm.md b/cobalt/site/docs/reference/starboard/modules/13/drm.md
index fbb92f9..f42e43b 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/drm.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/drm.md
@@ -1,37 +1,37 @@
----
-layout: doc
-title: "Starboard Module Reference: drm.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `drm.h`
 
 Provides definitions that allow for DRM support, which are common between Player
 and Decoder interfaces.
 
-## Macros ##
+## Macros
 
-### kSbDrmSystemInvalid ###
+### kSbDrmSystemInvalid
 
 An invalid SbDrmSystem.
 
-### kSbDrmTicketInvalid ###
+### kSbDrmTicketInvalid
 
 A ticket for callback invocations initiated by the DRM system.
 
-## Enums ##
+## Enums
 
-### SbDrmEncryptionScheme ###
+### SbDrmEncryptionScheme
 
 Encryption scheme of the input sample, as defined in ISO/IEC 23001 part 7.
 
-#### Values ####
+#### Values
 
 *   `kSbDrmEncryptionSchemeAesCtr`
 *   `kSbDrmEncryptionSchemeAesCbc`
 
-### SbDrmKeyStatus ###
+### SbDrmKeyStatus
 
 Status of a particular media key. [https://w3c.github.io/encrypted-media/#idl-def-MediaKeyStatus](https://w3c.github.io/encrypted-media/#idl-def-MediaKeyStatus)
 
-#### Values ####
+#### Values
 
 *   `kSbDrmKeyStatusUsable`
 *   `kSbDrmKeyStatusExpired`
@@ -41,24 +41,24 @@
 *   `kSbDrmKeyStatusPending`
 *   `kSbDrmKeyStatusError`
 
-### SbDrmSessionRequestType ###
+### SbDrmSessionRequestType
 
 The type of the session request. [https://www.w3.org/TR/encrypted-media/#idl-def-mediakeymessagetype](https://www.w3.org/TR/encrypted-media/#idl-def-mediakeymessagetype)
 
-#### Values ####
+#### Values
 
 *   `kSbDrmSessionRequestTypeLicenseRequest`
 *   `kSbDrmSessionRequestTypeLicenseRenewal`
 *   `kSbDrmSessionRequestTypeLicenseRelease`
 *   `kSbDrmSessionRequestTypeIndividualizationRequest`
 
-### SbDrmStatus ###
+### SbDrmStatus
 
 The status of session related operations. Used by
 `SbDrmSessionUpdateRequestFunc`, `SbDrmSessionUpdatedFunc`, and
 `SbDrmServerCertificateUpdatedFunc` to indicate the status of the operation. [https://w3c.github.io/encrypted-media/#error-names](https://w3c.github.io/encrypted-media/#error-names)
 
-#### Values ####
+#### Values
 
 *   `kSbDrmStatusSuccess`
 *   `kSbDrmStatusTypeError`
@@ -70,42 +70,42 @@
     The following error can be used when the error status cannot be mapped to
     one of the above errors.
 
-## Typedefs ##
+## Typedefs
 
-### SbDrmServerCertificateUpdatedFunc ###
+### SbDrmServerCertificateUpdatedFunc
 
 A callback to notify the caller of SbDrmUpdateServerCertificate() whether the
 update has been successfully updated or not.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDrmServerCertificateUpdatedFunc) (SbDrmSystem drm_system, void *context, int ticket, SbDrmStatus status, const char *error_message)
 ```
 
-### SbDrmSessionClosedFunc ###
+### SbDrmSessionClosedFunc
 
 A callback for signalling that a session has been closed by the SbDrmSystem
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDrmSessionClosedFunc) (SbDrmSystem drm_system, void *context, const void *session_id, int session_id_size)
 ```
 
-### SbDrmSessionKeyStatusesChangedFunc ###
+### SbDrmSessionKeyStatusesChangedFunc
 
 A callback for notifications that the status of one or more keys in a session
 has been changed. All keys of the session and their new status will be passed
 along. Any keys not in the list is considered as deleted.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDrmSessionKeyStatusesChangedFunc) (SbDrmSystem drm_system, void *context, const void *session_id, int session_id_size, int number_of_keys, const SbDrmKeyId *key_ids, const SbDrmKeyStatus *key_statuses)
 ```
 
-### SbDrmSessionUpdateRequestFunc ###
+### SbDrmSessionUpdateRequestFunc
 
 A callback that will receive generated session update request when requested
 from a SbDrmSystem. `drm_system` will be the DRM system that
@@ -128,13 +128,13 @@
 the correct Promise corresponding to the associated
 SbDrmGenerateSessionUpdateRequest().
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDrmSessionUpdateRequestFunc) (SbDrmSystem drm_system, void *context, int ticket, SbDrmStatus status, SbDrmSessionRequestType type, const char *error_message, const void *session_id, int session_id_size, const void *content, int content_size, const char *url)
 ```
 
-### SbDrmSessionUpdatedFunc ###
+### SbDrmSessionUpdatedFunc
 
 A callback for notifications that a session has been added, and subsequent
 encrypted samples are actively ready to be decoded. `drm_system` will be the DRM
@@ -150,37 +150,37 @@
 `status` is `kSbDrmStatusSuccess` or if no error message can be provided.
 `succeeded` is whether the session was successfully updated or not.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDrmSessionUpdatedFunc) (SbDrmSystem drm_system, void *context, int ticket, SbDrmStatus status, const char *error_message, const void *session_id, int session_id_size)
 ```
 
-### SbDrmSystem ###
+### SbDrmSystem
 
 A handle to a DRM system which can be used with either an SbDecoder or an
 SbPlayer.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbDrmSystemPrivate* SbDrmSystem
 ```
 
-## Structs ##
+## Structs
 
-### SbDrmEncryptionPattern ###
+### SbDrmEncryptionPattern
 
 Encryption pattern of the input sample, as defined in ISO/IEC 23001 part 7.
 
-#### Members ####
+#### Members
 
 *   `uint32_t crypt_byte_block`
 *   `uint32_t skip_byte_block`
 
-### SbDrmKeyId ###
+### SbDrmKeyId
 
-#### Members ####
+#### Members
 
 *   `uint8_t identifier`
 
@@ -188,11 +188,11 @@
     PlayReady, this is the license GUID in packed little-endian binary form.
 *   `int identifier_size`
 
-### SbDrmSampleInfo ###
+### SbDrmSampleInfo
 
 All the optional information needed per sample for encrypted samples.
 
-#### Members ####
+#### Members
 
 *   `SbDrmEncryptionScheme encryption_scheme`
 
@@ -217,13 +217,13 @@
     The clear/encrypted mapping of each subsample in this sample. This must be
     an array of `subsample_count` mappings.
 
-### SbDrmSubSampleMapping ###
+### SbDrmSubSampleMapping
 
 A mapping of clear and encrypted bytes for a single subsample. All subsamples
 within a sample must be encrypted with the same encryption parameters. The clear
 bytes always appear first in the sample.
 
-#### Members ####
+#### Members
 
 *   `int32_t clear_byte_count`
 
@@ -232,21 +232,21 @@
 
     How many bytes of the corresponding subsample are encrypted.
 
-## Functions ##
+## Functions
 
-### SbDrmCloseSession ###
+### SbDrmCloseSession
 
 Clear any internal states/resources related to the specified `session_id`.
 
 `drm_system` must not be `kSbDrmSystemInvalid`. `session_id` must not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbDrmCloseSession(SbDrmSystem drm_system, const void *session_id, int session_id_size)
 ```
 
-### SbDrmDestroySystem ###
+### SbDrmDestroySystem
 
 Destroys `drm_system`, which implicitly removes all keys installed in it and
 invalidates all outstanding session update requests. A DRM system cannot be
@@ -258,13 +258,13 @@
 
 `drm_system`: The DRM system to be destroyed. Must not be `kSbDrmSystemInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbDrmDestroySystem(SbDrmSystem drm_system)
 ```
 
-### SbDrmGenerateSessionUpdateRequest ###
+### SbDrmGenerateSessionUpdateRequest
 
 Asynchronously generates a session update request payload for
 `initialization_data`, of `initialization_data_size`, in case sensitive `type`,
@@ -296,13 +296,13 @@
 payload is created. Must not be NULL. `initialization_data_size`: The size of
 the session update request payload.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbDrmGenerateSessionUpdateRequest(SbDrmSystem drm_system, int ticket, const char *type, const void *initialization_data, int initialization_data_size)
 ```
 
-### SbDrmGetMetrics ###
+### SbDrmGetMetrics
 
 Get the metrics of the underlying drm system.
 
@@ -326,13 +326,13 @@
 
 `drm_system` must not be `kSbDrmSystemInvalid`. `size` must not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 const void* SbDrmGetMetrics(SbDrmSystem drm_system, int *size)
 ```
 
-### SbDrmIsServerCertificateUpdatable ###
+### SbDrmIsServerCertificateUpdatable
 
 Returns true if server certificate of `drm_system` can be updated via
 SbDrmUpdateServerCertificate(). The return value should remain the same during
@@ -341,33 +341,33 @@
 `drm_system`: The DRM system to check if its server certificate is updatable.
 Must not be `kSbDrmSystemInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbDrmIsServerCertificateUpdatable(SbDrmSystem drm_system)
 ```
 
-### SbDrmSystemIsValid ###
+### SbDrmSystemIsValid
 
 Indicates whether `drm_system` is a valid SbDrmSystem.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbDrmSystemIsValid(SbDrmSystem drm)
 ```
 
-### SbDrmTicketIsValid ###
+### SbDrmTicketIsValid
 
 Indicates whether `ticket` is a valid ticket.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbDrmTicketIsValid(int ticket)
 ```
 
-### SbDrmUpdateServerCertificate ###
+### SbDrmUpdateServerCertificate
 
 Update the server certificate of `drm_system`. The function can be called
 multiple times. It is possible that a call to it happens before the callback of
@@ -384,13 +384,13 @@
 certificate data. Must not be NULL. `certificate_size`: Size of the server
 certificate data.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbDrmUpdateServerCertificate(SbDrmSystem drm_system, int ticket, const void *certificate, int certificate_size)
 ```
 
-### SbDrmUpdateSession ###
+### SbDrmUpdateSession
 
 Update session with `key`, in `drm_system`'s key system, from the license server
 response. Calls `session_updated_callback` with `context` and whether the update
@@ -410,7 +410,7 @@
 thread before this function returns or from another thread. The `session_id`
 must not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbDrmUpdateSession(SbDrmSystem drm_system, int ticket, const void *key, int key_size, const void *session_id, int session_id_size)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/egl.md b/cobalt/site/docs/reference/starboard/modules/13/egl.md
index b1e120b..87deff2 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/egl.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/egl.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: egl.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `egl.h`
 
 The EGL API provides an interface with accompanying type declarations and
 defines that together provide a single consistent method of EGL usage across
@@ -11,67 +11,67 @@
 versions on different systems, and to remove the requirement for any other code
 to directly pull in and use these system libraries.
 
-## EGL Version ##
+## EGL Version
 
 This API has the ability to support EGL 1.5, however it is not required to
 support anything beyond EGL 1.4. The user is responsible for ensuring that the
 functions from EGL 1.5 they are calling from the interface are valid.
 
-## Macros ##
+## Macros
 
-### SB_EGL_ALPHA_FORMAT ###
+### SB_EGL_ALPHA_FORMAT
 
 EGL_VERSION_1_2
 
-### SB_EGL_ALPHA_SIZE ###
+### SB_EGL_ALPHA_SIZE
 
 EGL_VERSION_1_0
 
-### SB_EGL_BACK_BUFFER ###
+### SB_EGL_BACK_BUFFER
 
 EGL_VERSION_1_1
 
-### SB_EGL_CONFORMANT ###
+### SB_EGL_CONFORMANT
 
 EGL_VERSION_1_3
 
-### SB_EGL_CONTEXT_MAJOR_VERSION ###
+### SB_EGL_CONTEXT_MAJOR_VERSION
 
 EGL_VERSION_1_5
 
-### SB_EGL_DEFAULT_DISPLAY ###
+### SB_EGL_DEFAULT_DISPLAY
 
 EGL_VERSION_1_4
 
-## Typedefs ##
+## Typedefs
 
-### SbEglCastsToProperFunctionPointerType ###
+### SbEglCastsToProperFunctionPointerType
 
 The following type definitions were adapted from the types declared in [https://www.khronos.org/registry/EGL/api/EGL/egl.h](https://www.khronos.org/registry/EGL/api/EGL/egl.h)
 .
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbEglCastsToProperFunctionPointerType) (void)
 ```
 
-### SbEglInt32 ###
+### SbEglInt32
 
 The following type definitions were adapted from the types declared in [https://www.khronos.org/registry/EGL/api/EGL/eglplatform.h](https://www.khronos.org/registry/EGL/api/EGL/eglplatform.h)
 .
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int32_t SbEglInt32
 ```
 
-## Structs ##
+## Structs
 
-### SbEglInterface ###
+### SbEglInterface
 
-#### Members ####
+#### Members
 
 *   `SbEglBoolean(*eglChooseConfig)(SbEglDisplay dpy, const SbEglInt32
     *attrib_list, SbEglConfig *configs, SbEglInt32 config_size, SbEglInt32
diff --git a/cobalt/site/docs/reference/starboard/modules/13/event.md b/cobalt/site/docs/reference/starboard/modules/13/event.md
index 01a9d24..7887d8d 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/event.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/event.md
@@ -1,11 +1,11 @@
----
-layout: doc
-title: "Starboard Module Reference: event.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `event.h`
 
 Defines the event system that wraps the Starboard main loop and entry point.
 
-## The Starboard Application Lifecycle ##
+## The Starboard Application Lifecycle
 
 ```
                * ----------
@@ -78,15 +78,15 @@
 Note that the application is always expected to transition through `BLURRED`,
 `CONCEALED` to `FROZEN` before receiving `Stop` or being killed.
 
-## Enums ##
+## Enums
 
-### SbEventType ###
+### SbEventType
 
 An enumeration of all possible event types dispatched directly by the system.
 Each event is accompanied by a void* data argument, and each event must define
 the type of the value pointed to by that data argument, if any.
 
-#### Values ####
+#### Values
 
 *   `kSbEventTypePreload`
 
@@ -273,55 +273,55 @@
     change in the timezone setting). This should trigger the application to re-
     query the relevant APIs to update the date and time.
 
-## Typedefs ##
+## Typedefs
 
-### SbEventCallback ###
+### SbEventCallback
 
 A function that can be called back from the main Starboard event pump.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbEventCallback) (void *context)
 ```
 
-### SbEventDataDestructor ###
+### SbEventDataDestructor
 
 A function that will cleanly destroy an event data instance of a specific type.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbEventDataDestructor) (void *data)
 ```
 
-### SbEventId ###
+### SbEventId
 
 An ID that can be used to refer to a scheduled event.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef uint32_t SbEventId
 ```
 
-## Structs ##
+## Structs
 
-### SbEvent ###
+### SbEvent
 
 Structure representing a Starboard event and its data.
 
-#### Members ####
+#### Members
 
 *   `SbEventType type`
 *   `SbTimeMonotonic timestamp`
 *   `void * data`
 
-### SbEventStartData ###
+### SbEventStartData
 
 Event data for kSbEventTypeStart events.
 
-#### Members ####
+#### Members
 
 *   `char ** argument_values`
 
@@ -333,31 +333,31 @@
 
     The startup link, if any.
 
-### SbEventWindowSizeChangedData ###
+### SbEventWindowSizeChangedData
 
 Event data for kSbEventTypeWindowSizeChanged events.
 
-#### Members ####
+#### Members
 
 *   `SbWindow window`
 *   `SbWindowSize size`
 
-## Functions ##
+## Functions
 
-### SbEventCancel ###
+### SbEventCancel
 
 Cancels the specified `event_id`. Note that this function is a no-op if the
 event already fired. This function can be safely called from any thread, but the
 only way to guarantee that the event does not run anyway is to call it from the
 main Starboard event loop thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbEventCancel(SbEventId event_id)
 ```
 
-### SbEventHandle ###
+### SbEventHandle
 
 The entry point that Starboard applications MUST implement. Any memory pointed
 at by `event` or the `data` field inside `event` is owned by the system, and
@@ -370,23 +370,23 @@
 application should generally do as little work as possible on this thread, and
 just dispatch it over to another thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SB_IMPORT void SbEventHandle(const SbEvent *event)
 ```
 
-### SbEventIsIdValid ###
+### SbEventIsIdValid
 
 Returns whether the given event handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbEventIsIdValid(SbEventId handle)
 ```
 
-### SbEventSchedule ###
+### SbEventSchedule
 
 Schedules an event `callback` into the main Starboard event loop. This function
 may be called from any thread, but `callback` is always called from the main
@@ -397,7 +397,7 @@
 of microseconds to wait before calling the `callback` function. Set `delay` to
 `0` to call the callback as soon as possible.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbEventId SbEventSchedule(SbEventCallback callback, void *context, SbTime delay)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/export.md b/cobalt/site/docs/reference/starboard/modules/13/export.md
index ff79777..a398d4a 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/export.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/export.md
@@ -1,24 +1,24 @@
----
-layout: doc
-title: "Starboard Module Reference: export.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `export.h`
 
 Provides macros for properly exporting or importing symbols from shared
 libraries.
 
-## Macros ##
+## Macros
 
-### SB_EXPORT ###
+### SB_EXPORT
 
 Specification for a symbol that should be exported when building the DLL and
 imported when building code that uses the DLL.
 
-### SB_EXPORT_PRIVATE ###
+### SB_EXPORT_PRIVATE
 
 Specification for a symbol that should be exported or imported for testing
 purposes only.
 
-### SB_IMPORT ###
+### SB_IMPORT
 
 Specification for a symbol that is expected to be defined externally to this
 module.
diff --git a/cobalt/site/docs/reference/starboard/modules/13/file.md b/cobalt/site/docs/reference/starboard/modules/13/file.md
index e22edeb..02c7863 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/file.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/file.md
@@ -1,25 +1,25 @@
----
-layout: doc
-title: "Starboard Module Reference: file.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `file.h`
 
 Defines file system input/output functions.
 
-## Macros ##
+## Macros
 
-### kSbFileInvalid ###
+### kSbFileInvalid
 
 Well-defined value for an invalid file handle.
 
-## Enums ##
+## Enums
 
-### SbFileError ###
+### SbFileError
 
 kSbFileErrorAccessDenied is returned when a call fails because of a filesystem
 restriction. kSbFileErrorSecurity is returned when a security policy doesn't
 allow the operation to be executed.
 
-#### Values ####
+#### Values
 
 *   `kSbFileOk`
 *   `kSbFileErrorFailed`
@@ -40,7 +40,7 @@
 *   `kSbFileErrorIO`
 *   `kSbFileErrorMax`
 
-### SbFileFlags ###
+### SbFileFlags
 
 Flags that define how a file is used in the application. These flags should be
 or'd together when passed to SbFileOpen to open or create a file.
@@ -66,7 +66,7 @@
 
 The `kSbFileAsync` flag is optional.
 
-#### Values ####
+#### Values
 
 *   `kSbFileOpenOnly`
 *   `kSbFileCreateOnly`
@@ -85,35 +85,35 @@
 *   `kSbFileWrite`
 *   `kSbFileAsync`
 
-### SbFileWhence ###
+### SbFileWhence
 
 This explicit mapping matches both FILE_ on Windows and SEEK_ on Linux.
 
-#### Values ####
+#### Values
 
 *   `kSbFileFromBegin`
 *   `kSbFileFromCurrent`
 *   `kSbFileFromEnd`
 
-## Typedefs ##
+## Typedefs
 
-### SbFile ###
+### SbFile
 
 A handle to an open file.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbFilePrivate* SbFile
 ```
 
-## Structs ##
+## Structs
 
-### SbFileInfo ###
+### SbFileInfo
 
 Used to hold information about a file.
 
-#### Members ####
+#### Members
 
 *   `int64_t size`
 
@@ -134,9 +134,9 @@
 
     The creation time of a file.
 
-## Functions ##
+## Functions
 
-### SbFileAtomicReplace ###
+### SbFileAtomicReplace
 
 Replaces the content of the file at `path` with `data`. Returns whether the
 contents of the file were replaced. The replacement of the content is an atomic
@@ -146,39 +146,39 @@
 to replace the file contents with. `data_size`: The amount of `data`, in bytes,
 to be written to the file.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileAtomicReplace(const char *path, const char *data, int64_t data_size)
 ```
 
-### SbFileCanOpen ###
+### SbFileCanOpen
 
 Indicates whether SbFileOpen() with the given `flags` is allowed for `path`.
 
 `path`: The absolute path to be checked. `flags`: The flags that are being
 evaluated for the given `path`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileCanOpen(const char *path, int flags)
 ```
 
-### SbFileClose ###
+### SbFileClose
 
 Closes `file`. The return value indicates whether the file was closed
 successfully.
 
 `file`: The absolute path of the file to be closed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileClose(SbFile file)
 ```
 
-### SbFileDelete ###
+### SbFileDelete
 
 Deletes the regular file, symlink, or empty directory at `path`. This function
 is used primarily to clean up after unit tests. On some platforms, this function
@@ -186,38 +186,38 @@
 
 `path`: The absolute path of the file, symlink, or directory to be deleted.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileDelete(const char *path)
 ```
 
-### SbFileExists ###
+### SbFileExists
 
 Indicates whether a file or directory exists at `path`.
 
 `path`: The absolute path of the file or directory being checked.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileExists(const char *path)
 ```
 
-### SbFileFlush ###
+### SbFileFlush
 
 Flushes the write buffer to `file`. Data written via SbFileWrite is not
 necessarily committed until the SbFile is flushed or closed.
 
 `file`: The SbFile to which the write buffer is flushed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileFlush(SbFile file)
 ```
 
-### SbFileGetInfo ###
+### SbFileGetInfo
 
 Retrieves information about `file`. The return value indicates whether the file
 information was retrieved successfully.
@@ -226,13 +226,13 @@
 into which the retrieved data is placed. This variable is not touched if the
 operation is not successful.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileGetInfo(SbFile file, SbFileInfo *out_info)
 ```
 
-### SbFileGetPathInfo ###
+### SbFileGetPathInfo
 
 Retrieves information about the file at `path`. The return value indicates
 whether the file information was retrieved successfully.
@@ -241,36 +241,36 @@
 `out_info`: The variable into which the retrieved data is placed. This variable
 is not touched if the operation is not successful.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileGetPathInfo(const char *path, SbFileInfo *out_info)
 ```
 
-### SbFileIsValid ###
+### SbFileIsValid
 
 Returns whether the given file handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbFileIsValid(SbFile file)
 ```
 
-### SbFileModeStringToFlags ###
+### SbFileModeStringToFlags
 
 Converts an ISO `fopen()` mode string into flags that can be equivalently passed
 into SbFileOpen().
 
 `mode`: The mode string to be converted into flags.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbFileModeStringToFlags(const char *mode)
 ```
 
-### SbFileOpen ###
+### SbFileOpen
 
 Opens the file at `path`, which must be absolute, creating it if specified by
 `flags`. The read/write position is at the beginning of the file.
@@ -287,13 +287,13 @@
 sets this value to `false`. `out_error`: If `path` cannot be created, this is
 set to `kSbFileInvalid`. Otherwise, it is `NULL`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbFile SbFileOpen(const char *path, int flags, bool *out_created, SbFileError *out_error)
 ```
 
-### SbFileRead ###
+### SbFileRead
 
 Reads `size` bytes (or until EOF is reached) from `file` into `data`, starting
 at the file's current position.
@@ -306,13 +306,13 @@
 `file`: The SbFile from which to read data. `data`: The variable to which data
 is read. `size`: The amount of data (in bytes) to read.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbFileRead(SbFile file, char *data, int size)
 ```
 
-### SbFileReadAll ###
+### SbFileReadAll
 
 Reads `size` bytes (or until EOF is reached) from `file` into `data`, starting
 at the file's current position.
@@ -326,13 +326,13 @@
 `file`: The SbFile from which to read data. `data`: The variable to which data
 is read. `size`: The amount of data (in bytes) to read.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int SbFileReadAll(SbFile file, char *data, int size)
 ```
 
-### SbFileSeek ###
+### SbFileSeek
 
 Changes the current read/write position in `file`. The return value identifies
 the resultant current read/write position in the file (relative to the start) or
@@ -344,13 +344,13 @@
 value. `offset`: The amount that the read/write position is changed, relative to
 `whence`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbFileSeek(SbFile file, SbFileWhence whence, int64_t offset)
 ```
 
-### SbFileTruncate ###
+### SbFileTruncate
 
 Truncates the given `file` to the given `length`. The return value indicates
 whether the file was truncated successfully.
@@ -360,13 +360,13 @@
 then the file is extended with zeros. If `length` is negative, then the function
 is a no-op and returns `false`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileTruncate(SbFile file, int64_t length)
 ```
 
-### SbFileWrite ###
+### SbFileWrite
 
 Writes the given buffer into `file` at the file's current position, overwriting
 any data that was previously there.
@@ -380,13 +380,13 @@
 `file`: The SbFile to which data will be written. `data`: The data to be
 written. `size`: The amount of data (in bytes) to write.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbFileWrite(SbFile file, const char *data, int size)
 ```
 
-### SbFileWriteAll ###
+### SbFileWriteAll
 
 Writes the given buffer into `file`, starting at the beginning of the file, and
 overwriting any data that was previously there. Unlike SbFileWrite, this
@@ -397,7 +397,7 @@
 `file`: The file to which data will be written. `data`: The data to be written.
 `size`: The amount of data (in bytes) to write.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int SbFileWriteAll(SbFile file, const char *data, int size)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/gles.md b/cobalt/site/docs/reference/starboard/modules/13/gles.md
index 7a9108a..049838f 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/gles.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/gles.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: gles.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `gles.h`
 
 The GLES API provides an interface with accompanying type declarations and
 defines that together provide a single consistent method of GLES usage across
@@ -11,37 +11,37 @@
 and versions on different systems, and to remove the requirement for any other
 code to directly pull in and use these system libraries.
 
-## GLES Version ##
+## GLES Version
 
 This API has the ability to support GLES 3.0, however platforms are not required
 to support anything beyond GLES 2.0. The caller is responsible for ensuring that
 the functions from GLES 3.0 they are calling from the interface are valid.
 
-## Macros ##
+## Macros
 
-### SB_GL_DEPTH_BUFFER_BIT ###
+### SB_GL_DEPTH_BUFFER_BIT
 
 Previously defined in [https://www.khronos.org/registry/OpenGL/api/GLES2/gl2.h](https://www.khronos.org/registry/OpenGL/api/GLES2/gl2.h)
 
-### SB_GL_READ_BUFFER ###
+### SB_GL_READ_BUFFER
 
 Previously defined in [https://www.khronos.org/registry/OpenGL/api/GLES3/gl3.h](https://www.khronos.org/registry/OpenGL/api/GLES3/gl3.h)
 .
 
-## Typedefs ##
+## Typedefs
 
-### SbGlBoolean ###
+### SbGlBoolean
 
 The following type definitions were adapted from the types declared in [https://www.khronos.org/registry/OpenGL/api/GLES2/gl2.h](https://www.khronos.org/registry/OpenGL/api/GLES2/gl2.h)
 .
 
-#### Definition ####
+#### Definition
 
 ```
 typedef uint8_t SbGlBoolean
 ```
 
-### SbGlIntPtr ###
+### SbGlIntPtr
 
 Some compilers will transform the intptr_t to an int transparently behind the
 scenes, which is not equivalent to a long int, or long long int, as far as the
@@ -49,17 +49,17 @@
 those exact types used by OpenGL ES 2.0 ( [https://www.khronos.org/registry/OpenGL/api/GLES2/gl2ext.h](https://www.khronos.org/registry/OpenGL/api/GLES2/gl2ext.h)
 ).
 
-#### Definition ####
+#### Definition
 
 ```
 typedef long int SbGlIntPtr
 ```
 
-## Structs ##
+## Structs
 
-### SbGlesInterface ###
+### SbGlesInterface
 
-#### Members ####
+#### Members
 
 *   `void(*glActiveTexture)(SbGlEnum texture)`
 
diff --git a/cobalt/site/docs/reference/starboard/modules/13/image.md b/cobalt/site/docs/reference/starboard/modules/13/image.md
index 1427d39..945938a 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/image.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/image.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: image.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `image.h`
 
 API for hardware accelerated image decoding. This module allows for the client
 to feed in raw, encoded data to be decoded directly into an SbDecodeTarget. It
@@ -11,7 +11,7 @@
 All functions in this module are safe to call from any thread at any point in
 time.
 
-## SbImageIsDecodeSupported and SbImageDecode Example ##
+## SbImageIsDecodeSupported and SbImageDecode Example
 
 ```
 SbDecodeTargetProvider* provider = GetProviderFromSomewhere();
@@ -28,9 +28,9 @@
                                              mime_type, format);
 ```
 
-## Functions ##
+## Functions
 
-### SbImageDecode ###
+### SbImageDecode
 
 Attempt to decode encoded `mime_type` image data `data` of size `data_size` into
 an SbDecodeTarget of SbDecodeFormatType `format`, possibly using
@@ -56,13 +56,13 @@
     kSbDecodeTargetInvalid will be returned, with any intermediate allocations
     being cleaned up in the implementation.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbDecodeTarget SbImageDecode(SbDecodeTargetGraphicsContextProvider *context_provider, void *data, int data_size, const char *mime_type, SbDecodeTargetFormat format)
 ```
 
-### SbImageIsDecodeSupported ###
+### SbImageIsDecodeSupported
 
 Whether the current platform supports hardware accelerated decoding an image of
 mime type `mime_type` into SbDecodeTargetFormat `format`. The `mime_type` must
@@ -70,7 +70,7 @@
 program, which means that the results of this function may be cached
 indefinitely.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbImageIsDecodeSupported(const char *mime_type, SbDecodeTargetFormat format)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/input.md b/cobalt/site/docs/reference/starboard/modules/13/input.md
index e8df816..d2dd2db 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/input.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/input.md
@@ -1,18 +1,18 @@
----
-layout: doc
-title: "Starboard Module Reference: input.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `input.h`
 
 Defines input events and associated data types.
 
-## Enums ##
+## Enums
 
-### SbInputDeviceType ###
+### SbInputDeviceType
 
 Identifies possible input subsystem types. The types of events that each device
 type produces correspond to `SbInputEventType` values.
 
-#### Values ####
+#### Values
 
 *   `kSbInputDeviceTypeGesture`
 
@@ -57,11 +57,11 @@
 
     Produces `Input` events.
 
-### SbInputEventType ###
+### SbInputEventType
 
 The action that an input event represents.
 
-#### Values ####
+#### Values
 
 *   `kSbInputEventTypeMove`
 
@@ -86,13 +86,13 @@
 
     [https://w3c.github.io/uievents/#event-type-input](https://w3c.github.io/uievents/#event-type-input)
 
-## Structs ##
+## Structs
 
-### SbInputData ###
+### SbInputData
 
 Event data for `kSbEventTypeInput` events.
 
-#### Members ####
+#### Members
 
 *   `SbWindow window`
 
@@ -160,11 +160,11 @@
 
     Set to true if the input event is part of a composition event.
 
-### SbInputVector ###
+### SbInputVector
 
 A 2-dimensional vector used to represent points and motion vectors.
 
-#### Members ####
+#### Members
 
 *   `float x`
 *   `float y`
diff --git a/cobalt/site/docs/reference/starboard/modules/13/key.md b/cobalt/site/docs/reference/starboard/modules/13/key.md
index 16be3c1..853f820 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/key.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/key.md
@@ -1,19 +1,19 @@
----
-layout: doc
-title: "Starboard Module Reference: key.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `key.h`
 
 Defines the canonical set of Starboard key codes.
 
-## Enums ##
+## Enums
 
-### SbKey ###
+### SbKey
 
 A standard set of key codes, ordered by value, that represent each possible
 input key across all kinds of devices. Starboard uses the semi-standard Windows
 virtual key codes documented at: [https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.aspx](https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.aspx)
 
-#### Values ####
+#### Values
 
 *   `kSbKeyUnknown`
 *   `kSbKeyCancel`
@@ -274,11 +274,11 @@
 *   `kSbKeyGamepadRightStickLeft`
 *   `kSbKeyGamepadRightStickRight`
 
-### SbKeyModifiers ###
+### SbKeyModifiers
 
 Bit-mask of key modifiers.
 
-#### Values ####
+#### Values
 
 *   `kSbKeyModifiersNone`
 *   `kSbKeyModifiersAlt`
diff --git a/cobalt/site/docs/reference/starboard/modules/13/log.md b/cobalt/site/docs/reference/starboard/modules/13/log.md
index 42de513..6cf3a49 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/log.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/log.md
@@ -1,18 +1,18 @@
----
-layout: doc
-title: "Starboard Module Reference: log.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `log.h`
 
 Defines core debug logging functions.
 
-## Enums ##
+## Enums
 
-### SbLogPriority ###
+### SbLogPriority
 
 The priority at which a message should be logged. The platform may be configured
 to filter logs by priority, or render them differently.
 
-#### Values ####
+#### Values
 
 *   `kSbLogPriorityUnknown`
 *   `kSbLogPriorityInfo`
@@ -20,9 +20,9 @@
 *   `kSbLogPriorityError`
 *   `kSbLogPriorityFatal`
 
-## Functions ##
+## Functions
 
-### SbLog ###
+### SbLog
 
 Writes `message` to the platform's debug output log. This method is thread-safe,
 and responsible for ensuring that the output from multiple threads is not mixed.
@@ -35,55 +35,55 @@
 termination. That said, platforms can adjust the message to be more suitable for
 their output method by wrapping the text, stripping unprintable characters, etc.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbLog(SbLogPriority priority, const char *message)
 ```
 
-### SbLogFlush ###
+### SbLogFlush
 
 Flushes the log buffer on some platforms. This method is safe to call from
 multiple threads.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbLogFlush()
 ```
 
-### SbLogFormat ###
+### SbLogFormat
 
 A log output method that additionally performs a string format on the data being
 logged.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbLogFormat(const char *format, va_list args) SB_PRINTF_FORMAT(1
 ```
 
-### SbLogFormatF ###
+### SbLogFormatF
 
 Inline wrapper of SbLogFormat that converts from ellipsis to va_args.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void static void static void SbLogFormatF(const char *format,...) SB_PRINTF_FORMAT(1
 ```
 
-### SbLogIsTty ###
+### SbLogIsTty
 
 Indicates whether the log output goes to a TTY or is being redirected.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbLogIsTty()
 ```
 
-### SbLogRaw ###
+### SbLogRaw
 
 A bare-bones log output method that is async-signal-safe, i.e. safe to call from
 an asynchronous signal handler (e.g. a `SIGSEGV` handler). It should not do any
@@ -91,13 +91,13 @@
 
 `message`: The message to be logged. Must not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbLogRaw(const char *message)
 ```
 
-### SbLogRawDumpStack ###
+### SbLogRawDumpStack
 
 Dumps the stack of the current thread to the log in an async-signal-safe manner,
 i.e. safe to call from an asynchronous signal handler (e.g. a `SIGSEGV`
@@ -108,28 +108,28 @@
 helper functions that might end up on top of every stack dump so that the stack
 dump is just the relevant function stack where the problem occurred.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbLogRawDumpStack(int frames_to_skip)
 ```
 
-### SbLogRawFormat ###
+### SbLogRawFormat
 
 A formatted log output method that is async-signal-safe, i.e. safe to call from
 an asynchronous signal handler (e.g. a `SIGSEGV` handler).
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbLogRawFormat(const char *format, va_list args) SB_PRINTF_FORMAT(1
 ```
 
-### SbLogRawFormatF ###
+### SbLogRawFormatF
 
 Inline wrapper of SbLogFormat to convert from ellipsis to va_args.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void static void static void SbLogRawFormatF(const char *format,...) SB_PRINTF_FORMAT(1
diff --git a/cobalt/site/docs/reference/starboard/modules/13/media.md b/cobalt/site/docs/reference/starboard/modules/13/media.md
index 968db5b..c138c00 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/media.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/media.md
@@ -1,28 +1,28 @@
----
-layout: doc
-title: "Starboard Module Reference: media.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `media.h`
 
 Provides media definitions that are common between the Decoder and Player
 interfaces.
 
-## Macros ##
+## Macros
 
-### kSbMediaBitsPerPixelInvalid ###
+### kSbMediaBitsPerPixelInvalid
 
 Value used when a video's bits per pixel is not known.
 
-### kSbMediaVideoResolutionDimensionInvalid ###
+### kSbMediaVideoResolutionDimensionInvalid
 
 Value used when a video's resolution is not known.
 
-## Enums ##
+## Enums
 
-### SbMediaAudioCodec ###
+### SbMediaAudioCodec
 
 Types of audio elementary streams that can be supported.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaAudioCodecNone`
 *   `kSbMediaAudioCodecAac`
@@ -31,11 +31,11 @@
 *   `kSbMediaAudioCodecOpus`
 *   `kSbMediaAudioCodecVorbis`
 
-### SbMediaAudioCodingType ###
+### SbMediaAudioCodingType
 
 Possible audio coding types.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaAudioCodingTypeNone`
 *   `kSbMediaAudioCodingTypeAac`
@@ -49,11 +49,11 @@
 *   `kSbMediaAudioCodingTypeMpeg3`
 *   `kSbMediaAudioCodingTypePcm`
 
-### SbMediaAudioConnector ###
+### SbMediaAudioConnector
 
 Possible audio connector types.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaAudioConnectorNone`
 *   `kSbMediaAudioConnectorAnalog`
@@ -63,11 +63,11 @@
 *   `kSbMediaAudioConnectorSpdif`
 *   `kSbMediaAudioConnectorUsb`
 
-### SbMediaAudioFrameStorageType ###
+### SbMediaAudioFrameStorageType
 
 Possible audio frame storage types.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaAudioFrameStorageTypeInterleaved`
 
@@ -83,22 +83,22 @@
     with timestamps 0, 1, 2, etc., the samples are stored in two buffers "L0 L1
     L2 ..." and "R0 R1 R2 ...".
 
-### SbMediaAudioSampleType ###
+### SbMediaAudioSampleType
 
 Possible audio sample types.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaAudioSampleTypeInt16Deprecated`
 *   `kSbMediaAudioSampleTypeFloat32`
 
-### SbMediaRangeId ###
+### SbMediaRangeId
 
 This corresponds to the WebM Range enum which is part of WebM color data (see [http://www.webmproject.org/docs/container/#Range](http://www.webmproject.org/docs/container/#Range)
 ). H.264 only uses a bool, which corresponds to the LIMITED/FULL values. Chrome-
 specific values start at 1000.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaRangeIdUnspecified`
 
@@ -114,13 +114,13 @@
     Range is defined by TransferId/MatrixId.
 *   `kSbMediaRangeIdLast`
 
-### SbMediaSupportType ###
+### SbMediaSupportType
 
 Indicates how confident the device is that it can play media resources of the
 given type. The values are a direct map of the canPlayType() method specified at
 the following link: [https://www.w3.org/TR/2011/WD-html5-20110113/video.html#dom-navigator-canplaytype](https://www.w3.org/TR/2011/WD-html5-20110113/video.html#dom-navigator-canplaytype)
 
-#### Values ####
+#### Values
 
 *   `kSbMediaSupportTypeNotSupported`
 
@@ -132,11 +132,11 @@
 
     The media type seems to be playable.
 
-### SbMediaType ###
+### SbMediaType
 
 Types of media component streams.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaTypeAudio`
 
@@ -145,11 +145,11 @@
 
     Value used for video streams.
 
-### SbMediaVideoCodec ###
+### SbMediaVideoCodec
 
 Types of video elementary streams that could be supported.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaVideoCodecNone`
 *   `kSbMediaVideoCodecH264`
@@ -161,14 +161,14 @@
 *   `kSbMediaVideoCodecVp8`
 *   `kSbMediaVideoCodecVp9`
 
-## Structs ##
+## Structs
 
-### SbMediaAudioConfiguration ###
+### SbMediaAudioConfiguration
 
 A structure describing the audio configuration parameters of a single audio
 output.
 
-#### Members ####
+#### Members
 
 *   `int index`
 
@@ -190,7 +190,7 @@
     `0` if this device cannot provide this information, in which case the caller
     can probably assume stereo output.
 
-### SbMediaAudioSampleInfo ###
+### SbMediaAudioSampleInfo
 
 An audio sample info, which is a description of a given audio sample. This acts
 as a set of instructions to the audio decoder.
@@ -200,7 +200,7 @@
 Audio-specific configuration field. The `WAVEFORMATEX` structure is specified at
 [http://msdn.microsoft.com/en-us/library/dd390970(v=vs.85).aspx](http://msdn.microsoft.com/en-us/library/dd390970(v=vs.85).aspx)x) .
 
-#### Members ####
+#### Members
 
 *   `SbMediaAudioCodec codec`
 
@@ -224,7 +224,7 @@
     The number of bytes per second expected with this format.
 *   `uint16_t block_alignment`
 
-    Byte block alignment, e.g, 4.
+    Byte block alignment, e.g., 4.
 *   `uint16_t bits_per_sample`
 
     The bit depth for the stream this represents, e.g. `8` or `16`.
@@ -235,14 +235,14 @@
 
     The AudioSpecificConfig, as specified in ISO/IEC-14496-3, section 1.6.2.1: [http://read.pudn.com/downloads98/doc/comm/401153/14496/ISO_IEC_14496-3%20Part%203%20Audio/C036083E_SUB1.PDF](http://read.pudn.com/downloads98/doc/comm/401153/14496/ISO_IEC_14496-3%20Part%203%20Audio/C036083E_SUB1.PDF)
 
-### SbMediaColorMetadata ###
+### SbMediaColorMetadata
 
 HDR (High Dynamic Range) Metadata common for HDR10 and WebM/VP9-based HDR
 formats, together with the ColorSpace. HDR reproduces a greater dynamic range of
 luminosity than is possible with standard digital imaging. See the Consumer
 Electronics Association press release: [https://www.cta.tech/News/Press-Releases/2015/August/CEA-Defines-%E2%80%98HDR-Compatible%E2%80%99-Displays.aspx](https://www.cta.tech/News/Press-Releases/2015/August/CEA-Defines-%E2%80%98HDR-Compatible%E2%80%99-Displays.aspx)
 
-#### Members ####
+#### Members
 
 *   `unsigned int bits_per_channel`
 
@@ -323,7 +323,7 @@
     a row-major ordered 3 x 4 submatrix of the 4 x 4 transform matrix. The 4th
     row is completed as (0, 0, 0, 1).
 
-### SbMediaMasteringMetadata ###
+### SbMediaMasteringMetadata
 
 SMPTE 2086 mastering data [http://ieeexplore.ieee.org/document/7291707/](http://ieeexplore.ieee.org/document/7291707/)
 This standard specifies the metadata items to specify the color volume (the
@@ -332,7 +332,7 @@
 independent of any specific digital representation. Also see the WebM container
 guidelines: [https://www.webmproject.org/docs/container/](https://www.webmproject.org/docs/container/)
 
-#### Members ####
+#### Members
 
 *   `float primary_r_chromaticity_x`
 
@@ -367,11 +367,11 @@
     Minimum luminance. Shall be represented in candelas per square meter
     (cd/m^2). In range [0, 9999.99].
 
-### SbMediaVideoSampleInfo ###
+### SbMediaVideoSampleInfo
 
 The set of information required by the decoder or player for each video sample.
 
-#### Members ####
+#### Members
 
 *   `SbMediaVideoCodec codec`
 
@@ -417,9 +417,9 @@
     . This will only be specified on frames where the HDR metadata and color /
     color space might have changed (e.g. keyframes).
 
-## Functions ##
+## Functions
 
-### SbMediaCanPlayMimeAndKeySystem ###
+### SbMediaCanPlayMimeAndKeySystem
 
 Returns information about whether the playback of the specific media described
 by `mime` and encrypted using `key_system` can be played.
@@ -463,13 +463,13 @@
 implementation supports key system with attributes on one key system, it has to
 support key system with attributes on all key systems supported.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbMediaSupportType SbMediaCanPlayMimeAndKeySystem(const char *mime, const char *key_system)
 ```
 
-### SbMediaGetAudioBufferBudget ###
+### SbMediaGetAudioBufferBudget
 
 Specifies the maximum amount of memory used by audio buffers of media source
 before triggering a garbage collection. A large value will cause more memory
@@ -477,13 +477,13 @@
 download audio data. Note that the app may experience significant difficulty if
 this value is too low.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetAudioBufferBudget()
 ```
 
-### SbMediaGetAudioConfiguration ###
+### SbMediaGetAudioConfiguration
 
 Retrieves the current physical audio configuration of audio output
 `output_index` on this device and places it in `out_configuration`, which must
@@ -495,38 +495,38 @@
 `out_configuration`: The variable that holds the audio configuration
 information.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMediaGetAudioConfiguration(int output_index, SbMediaAudioConfiguration *out_configuration)
 ```
 
-### SbMediaGetAudioOutputCount ###
+### SbMediaGetAudioOutputCount
 
 Returns the number of audio outputs currently available on this device. Even if
 the number of outputs or their audio configurations can't be determined, it is
 expected that the platform will at least return a single output that supports at
 least stereo.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetAudioOutputCount()
 ```
 
-### SbMediaGetBufferAlignment ###
+### SbMediaGetBufferAlignment
 
 The media buffer will be allocated using the returned alignment. Set this to a
 larger value may increase the memory consumption of media buffers.`type`: the
 media type of the stream (audio or video).
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetBufferAlignment(SbMediaType type)
 ```
 
-### SbMediaGetBufferAllocationUnit ###
+### SbMediaGetBufferAllocationUnit
 
 When the media stack needs more memory to store media buffers, it will allocate
 extra memory in units returned by SbMediaGetBufferAllocationUnit. This can
@@ -534,13 +534,13 @@
 When SbMediaGetInitialBufferCapacity and this function both return 0, the media
 stack will allocate individual buffers directly using SbMemory functions.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetBufferAllocationUnit()
 ```
 
-### SbMediaGetBufferGarbageCollectionDurationThreshold ###
+### SbMediaGetBufferGarbageCollectionDurationThreshold
 
 Specifies the duration threshold of media source garbage collection. When the
 accumulated duration in a source buffer exceeds this value, the media source
@@ -551,54 +551,54 @@
 return 170 seconds for most of the platforms. But it can be further reduced on
 systems with extremely low memory.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbTime SbMediaGetBufferGarbageCollectionDurationThreshold()
 ```
 
-### SbMediaGetBufferPadding ###
+### SbMediaGetBufferPadding
 
 Extra bytes allocated at the end of a media buffer to ensure that the buffer can
 be use optimally by specific instructions like SIMD. Set to 0 to remove any
 padding.`type`: the media type of the stream (audio or video).
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetBufferPadding(SbMediaType type)
 ```
 
-### SbMediaGetBufferStorageType ###
+### SbMediaGetBufferStorageType
 
 Returns SbMediaBufferStorageType of type `SbMediaStorageTypeMemory` or
 `SbMediaStorageTypeFile`. For memory storage, the media buffers will be stored
 in main memory allocated by SbMemory functions. For file storage, the media
 buffers will be stored in a temporary file in the system cache folder acquired
 by calling SbSystemGetPath() with "kSbSystemPathCacheDirectory". Note that when
-its value is "file" the media stack will still allocate memory to cache the the
+its value is "file" the media stack will still allocate memory to cache the
 buffers in use.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbMediaBufferStorageType SbMediaGetBufferStorageType()
 ```
 
-### SbMediaGetInitialBufferCapacity ###
+### SbMediaGetInitialBufferCapacity
 
 The amount of memory that will be used to store media buffers allocated during
 system startup. To allocate a large chunk at startup helps with reducing
 fragmentation and can avoid failures to allocate incrementally. This can return
 0.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetInitialBufferCapacity()
 ```
 
-### SbMediaGetMaxBufferCapacity ###
+### SbMediaGetMaxBufferCapacity
 
 The maximum amount of memory that will be used to store media buffers. This must
 be larger than sum of the video budget and audio budget. This is a soft limit
@@ -613,13 +613,13 @@
 resolution. `bits_per_pixel`: the bits per pixel. This value is larger for HDR
 than non- HDR video.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetMaxBufferCapacity(SbMediaVideoCodec codec, int resolution_width, int resolution_height, int bits_per_pixel)
 ```
 
-### SbMediaGetProgressiveBufferBudget ###
+### SbMediaGetProgressiveBufferBudget
 
 The memory used when playing mp4 videos that is not in DASH format. The
 resolution of such videos shouldn't go beyond 1080p. Its value should be less
@@ -631,13 +631,13 @@
 resolution. `bits_per_pixel`: the bits per pixel. This value is larger for HDR
 than non- HDR video.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetProgressiveBufferBudget(SbMediaVideoCodec codec, int resolution_width, int resolution_height, int bits_per_pixel)
 ```
 
-### SbMediaGetVideoBufferBudget ###
+### SbMediaGetVideoBufferBudget
 
 Specifies the maximum amount of memory used by video buffers of media source
 before triggering a garbage collection. A large value will cause more memory
@@ -650,13 +650,13 @@
 resolution. `bits_per_pixel`: the bits per pixel. This value is larger for HDR
 than non- HDR video.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetVideoBufferBudget(SbMediaVideoCodec codec, int resolution_width, int resolution_height, int bits_per_pixel)
 ```
 
-### SbMediaIsBufferPoolAllocateOnDemand ###
+### SbMediaIsBufferPoolAllocateOnDemand
 
 When either SbMediaGetInitialBufferCapacity or SbMediaGetBufferAllocationUnit
 isn't zero, media buffers will be allocated using a memory pool. Set the
@@ -667,24 +667,24 @@
 release any media buffer memory back to the system even if there is no media
 buffers allocated.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMediaIsBufferPoolAllocateOnDemand()
 ```
 
-### SbMediaIsBufferUsingMemoryPool ###
+### SbMediaIsBufferUsingMemoryPool
 
 If SbMediaGetBufferUsingMemoryPool returns true, it indicates that media buffer
 pools should be allocated on demand, as opposed to using SbMemory* functions.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMediaIsBufferUsingMemoryPool()
 ```
 
-### SbMediaSetAudioWriteDuration ###
+### SbMediaSetAudioWriteDuration
 
 Communicate to the platform how far past `current_playback_position` the app
 will write audio samples. The app will write all samples between
@@ -696,7 +696,7 @@
 as transient or indefinite hanging). The platform may assume `duration` >= 0.5
 seconds.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMediaSetAudioWriteDuration(SbTime duration)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/memory.md b/cobalt/site/docs/reference/starboard/modules/13/memory.md
index e09dbc3..3905f6f 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/memory.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/memory.md
@@ -1,17 +1,17 @@
----
-layout: doc
-title: "Starboard Module Reference: memory.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `memory.h`
 
 Defines functions for memory allocation, alignment, copying, and comparing.
 
-## Porters ##
+## Porters
 
 All of the "Unchecked" and "Free" functions must be implemented, but they should
 not be called directly. The Starboard platform wraps them with extra accounting
 under certain circumstances.
 
-## Porters and Application Developers ##
+## Porters and Application Developers
 
 Nobody should call the "Checked", "Unchecked" or "Free" functions directly
 because that evades Starboard's memory tracking. In both port implementations
@@ -26,14 +26,14 @@
 
 *   The "free" functions are SbMemoryFree() and SbMemoryFreeAligned().
 
-## Enums ##
+## Enums
 
-### SbMemoryMapFlags ###
+### SbMemoryMapFlags
 
 The bitwise OR of these flags should be passed to SbMemoryMap to indicate how
 the mapped memory can be used.
 
-#### Values ####
+#### Values
 
 *   `kSbMemoryMapProtectReserved`
 
@@ -44,9 +44,9 @@
 *   `kSbMemoryMapProtectExec`
 *   `kSbMemoryMapProtectReadWrite`
 
-## Functions ##
+## Functions
 
-### SbMemoryAllocate ###
+### SbMemoryAllocate
 
 Allocates and returns a chunk of memory of at least `size` bytes. This function
 should be called from the client codebase. It is intended to be a drop-in
@@ -58,13 +58,13 @@
 return `NULL` or it may return a unique pointer value that can be passed to
 SbMemoryDeallocate.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocate(size_t size)
 ```
 
-### SbMemoryAllocateAligned ###
+### SbMemoryAllocateAligned
 
 Allocates and returns a chunk of memory of at least `size` bytes, aligned to
 `alignment`. This function should be called from the client codebase. It is
@@ -78,87 +78,87 @@
 `size` is `0`, the function may return `NULL` or it may return a unique aligned
 pointer value that can be passed to SbMemoryDeallocateAligned.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocateAligned(size_t alignment, size_t size)
 ```
 
-### SbMemoryAllocateAlignedChecked ###
+### SbMemoryAllocateAlignedChecked
 
 Same as SbMemoryAllocateAlignedUnchecked, but will abort() in the case of an
 allocation failure.
 
 DO NOT CALL. Call SbMemoryAllocateAligned(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocateAlignedChecked(size_t alignment, size_t size)
 ```
 
-### SbMemoryAllocateAlignedUnchecked ###
+### SbMemoryAllocateAlignedUnchecked
 
 This is the implementation of SbMemoryAllocateAligned that must be provided by
 Starboard ports.
 
 DO NOT CALL. Call SbMemoryAllocateAligned(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocateAlignedUnchecked(size_t alignment, size_t size)
 ```
 
-### SbMemoryAllocateChecked ###
+### SbMemoryAllocateChecked
 
 Same as SbMemoryAllocateUnchecked, but will abort() in the case of an allocation
 failure.
 
 DO NOT CALL. Call SbMemoryAllocate(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocateChecked(size_t size)
 ```
 
-### SbMemoryAllocateNoReport ###
+### SbMemoryAllocateNoReport
 
 Same as SbMemoryAllocate() but will not report memory to the tracker. Avoid
 using this unless absolutely necessary.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocateNoReport(size_t size)
 ```
 
-### SbMemoryAllocateUnchecked ###
+### SbMemoryAllocateUnchecked
 
 This is the implementation of SbMemoryAllocate that must be provided by
 Starboard ports.
 
 DO NOT CALL. Call SbMemoryAllocate(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocateUnchecked(size_t size)
 ```
 
-### SbMemoryCalloc ###
+### SbMemoryCalloc
 
 A wrapper that implements a drop-in replacement for `calloc`, which is used in
 some packages.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static void* SbMemoryCalloc(size_t count, size_t size)
 ```
 
-### SbMemoryDeallocate ###
+### SbMemoryDeallocate
 
 Frees a previously allocated chunk of memory. If `memory` is NULL, then the
 operation is a no-op. This function should be called from the client codebase.
@@ -166,87 +166,87 @@
 
 `memory`: The chunk of memory to be freed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryDeallocate(void *memory)
 ```
 
-### SbMemoryDeallocateAligned ###
+### SbMemoryDeallocateAligned
 
 `memory`: The chunk of memory to be freed. If `memory` is NULL, then the
 function is a no-op.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryDeallocateAligned(void *memory)
 ```
 
-### SbMemoryDeallocateNoReport ###
+### SbMemoryDeallocateNoReport
 
 Same as SbMemoryDeallocate() but will not report memory deallocation to the
 tracker. This function must be matched with SbMemoryAllocateNoReport().
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryDeallocateNoReport(void *memory)
 ```
 
-### SbMemoryFlush ###
+### SbMemoryFlush
 
 Flushes any data in the given virtual address range that is cached locally in
 the current processor core to physical memory, ensuring that data and
 instruction caches are cleared. This is required to be called on executable
 memory that has been written to and might be executed in the future.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryFlush(void *virtual_address, int64_t size_bytes)
 ```
 
-### SbMemoryFree ###
+### SbMemoryFree
 
 This is the implementation of SbMemoryDeallocate that must be provided by
 Starboard ports.
 
 DO NOT CALL. Call SbMemoryDeallocate(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryFree(void *memory)
 ```
 
-### SbMemoryFreeAligned ###
+### SbMemoryFreeAligned
 
 This is the implementation of SbMemoryFreeAligned that must be provided by
 Starboard ports.
 
 DO NOT CALL. Call SbMemoryDeallocateAligned(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryFreeAligned(void *memory)
 ```
 
-### SbMemoryGetStackBounds ###
+### SbMemoryGetStackBounds
 
 Gets the stack bounds for the current thread.
 
 `out_high`: The highest addressable byte + 1 for the current thread. `out_low`:
 The lowest addressable byte for the current thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryGetStackBounds(void **out_high, void **out_low)
 ```
 
-### SbMemoryMap ###
+### SbMemoryMap
 
 Allocates `size_bytes` worth of physical memory pages and maps them into an
 available virtual region. This function returns `SB_MEMORY_MAP_FAILED` on
@@ -261,24 +261,24 @@
 should not count it against any memory budget. `name`: A value that appears in
 the debugger on some platforms. The value can be up to 32 bytes.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryMap(int64_t size_bytes, int flags, const char *name)
 ```
 
-### SbMemoryProtect ###
+### SbMemoryProtect
 
 Change the protection of `size_bytes` of memory regions, starting from
 `virtual_address`, to `flags`, returning `true` on success.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMemoryProtect(void *virtual_address, int64_t size_bytes, int flags)
 ```
 
-### SbMemoryReallocate ###
+### SbMemoryReallocate
 
 Attempts to resize `memory` to be at least `size` bytes, without touching the
 contents of memory.
@@ -298,39 +298,39 @@
 `memory` will be resized. If `size` is `0`, the function may return `NULL` or it
 may return a unique pointer value that can be passed to SbMemoryDeallocate.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryReallocate(void *memory, size_t size)
 ```
 
-### SbMemoryReallocateChecked ###
+### SbMemoryReallocateChecked
 
 Same as SbMemoryReallocateUnchecked, but will abort() in the case of an
 allocation failure.
 
 DO NOT CALL. Call SbMemoryReallocate(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryReallocateChecked(void *memory, size_t size)
 ```
 
-### SbMemoryReallocateUnchecked ###
+### SbMemoryReallocateUnchecked
 
 This is the implementation of SbMemoryReallocate that must be provided by
 Starboard ports.
 
 DO NOT CALL. Call SbMemoryReallocate(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryReallocateUnchecked(void *memory, size_t size)
 ```
 
-### SbMemoryUnmap ###
+### SbMemoryUnmap
 
 Unmap `size_bytes` of physical pages starting from `virtual_address`, returning
 `true` on success. After this function completes, [virtual_address,
@@ -340,7 +340,7 @@
 `(void*)0xA000`, and another call to `SbMemoryMap(0x1000)` returns
 `(void*)0xB000`, `SbMemoryUnmap(0xA000, 0x2000)` should free both regions.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMemoryUnmap(void *virtual_address, int64_t size_bytes)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/memory_reporter.md b/cobalt/site/docs/reference/starboard/modules/13/memory_reporter.md
index 4b4a539..433d004 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/memory_reporter.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/memory_reporter.md
@@ -1,57 +1,57 @@
----
-layout: doc
-title: "Starboard Module Reference: memory_reporter.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `memory_reporter.h`
 
 Provides an interface for memory reporting.
 
-## Typedefs ##
+## Typedefs
 
-### SbMemoryReporterOnAlloc ###
+### SbMemoryReporterOnAlloc
 
 A function to report a memory allocation from SbMemoryAllocate(). Note that
 operator new calls SbMemoryAllocate which will delegate to this callback.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbMemoryReporterOnAlloc) (void *context, const void *memory, size_t size)
 ```
 
-### SbMemoryReporterOnDealloc ###
+### SbMemoryReporterOnDealloc
 
 A function to report a memory deallocation from SbMemoryDeallcoate(). Note that
 operator delete calls SbMemoryDeallocate which will delegate to this callback.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbMemoryReporterOnDealloc) (void *context, const void *memory)
 ```
 
-### SbMemoryReporterOnMapMemory ###
+### SbMemoryReporterOnMapMemory
 
 A function to report a memory mapping from SbMemoryMap().
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbMemoryReporterOnMapMemory) (void *context, const void *memory, size_t size)
 ```
 
-### SbMemoryReporterOnUnMapMemory ###
+### SbMemoryReporterOnUnMapMemory
 
 A function to report a memory unmapping from SbMemoryUnmap().
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbMemoryReporterOnUnMapMemory) (void *context, const void *memory, size_t size)
 ```
 
-## Structs ##
+## Structs
 
-### SbMemoryReporter ###
+### SbMemoryReporter
 
 SbMemoryReporter allows memory reporting via user-supplied functions. The void*
 context is passed to every call back. It's strongly recommended that C-Style
@@ -59,7 +59,7 @@
 compiler. For example, SbMemoryReporter mem_reporter = { MallocCallback, ....
 context };
 
-#### Members ####
+#### Members
 
 *   `SbMemoryReporterOnAlloc on_alloc_cb`
 
@@ -77,9 +77,9 @@
 
     Optional, is passed to callbacks as first argument.
 
-## Functions ##
+## Functions
 
-### SbMemorySetReporter ###
+### SbMemorySetReporter
 
 Sets the MemoryReporter. Any previous memory reporter is unset. No lifetime
 management is done internally on input pointer.
@@ -96,7 +96,7 @@
 SbMemoryReporter* mem_reporter = new ...; SbMemorySetReporter(&mem_reporter);
 ... SbMemorySetReporter(NULL); delete mem_reporter; // May crash.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMemorySetReporter(struct SbMemoryReporter *tracker)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/microphone.md b/cobalt/site/docs/reference/starboard/modules/13/microphone.md
index 1379f86..497cbe9 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/microphone.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/microphone.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: microphone.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `microphone.h`
 
 Defines functions for microphone creation, control, audio data fetching, and
 destruction. This module supports multiple calls to `SbMicrophoneOpen` and
@@ -31,23 +31,23 @@
 
 1.  Destroy the microphone with `SbMicrophoneDestroy`.
 
-## Macros ##
+## Macros
 
-### kSbMicrophoneIdInvalid ###
+### kSbMicrophoneIdInvalid
 
 Well-defined value for an invalid microphone ID handle.
 
-### kSbMicrophoneInvalid ###
+### kSbMicrophoneInvalid
 
 Well-defined value for an invalid microphone handle.
 
-## Enums ##
+## Enums
 
-### SbMicrophoneType ###
+### SbMicrophoneType
 
 All possible microphone types.
 
-#### Values ####
+#### Values
 
 *   `kSbMicrophoneCamera`
 
@@ -66,37 +66,37 @@
     Unknown microphone type. The microphone could be different than the other
     enum descriptions or could fall under one of those descriptions.
 
-## Typedefs ##
+## Typedefs
 
-### SbMicrophone ###
+### SbMicrophone
 
 An opaque handle to an implementation-private structure that represents a
 microphone.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbMicrophonePrivate* SbMicrophone
 ```
 
-### SbMicrophoneId ###
+### SbMicrophoneId
 
 An opaque handle to an implementation-private structure that represents a
 microphone ID.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbMicrophoneIdPrivate* SbMicrophoneId
 ```
 
-## Structs ##
+## Structs
 
-### SbMicrophoneInfo ###
+### SbMicrophoneInfo
 
 Microphone information.
 
-#### Members ####
+#### Members
 
 *   `SbMicrophoneId id`
 
@@ -116,9 +116,9 @@
     of the microphone type. For example, "Headset Microphone". The string must
     be null terminated.
 
-## Functions ##
+## Functions
 
-### SbMicrophoneClose ###
+### SbMicrophoneClose
 
 Closes the microphone port, stops recording audio on `microphone`, and clears
 the unread buffer if it is not empty. If the microphone has already been
@@ -127,13 +127,13 @@
 
 `microphone`: The microphone to close.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMicrophoneClose(SbMicrophone microphone)
 ```
 
-### SbMicrophoneCreate ###
+### SbMicrophoneCreate
 
 Creates a microphone with the specified ID, audio sample rate, and cached audio
 buffer size. Starboard only requires support for creating one microphone at a
@@ -153,25 +153,25 @@
 this buffer in smaller chunks than this size. This parameter must be set to a
 value greater than zero and the ideal size is `2^n`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbMicrophone SbMicrophoneCreate(SbMicrophoneId id, int sample_rate_in_hz, int buffer_size_bytes)
 ```
 
-### SbMicrophoneDestroy ###
+### SbMicrophoneDestroy
 
 Destroys a microphone. If the microphone is in started state, it is first
 stopped and then destroyed. Any data that has been recorded and not read is
 thrown away.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMicrophoneDestroy(SbMicrophone microphone)
 ```
 
-### SbMicrophoneGetAvailable ###
+### SbMicrophoneGetAvailable
 
 Retrieves all currently available microphone information and stores it in
 `out_info_array`. The return value is the number of the available microphones.
@@ -184,43 +184,43 @@
 placed into this output parameter. `info_array_size`: The size of
 `out_info_array`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMicrophoneGetAvailable(SbMicrophoneInfo *out_info_array, int info_array_size)
 ```
 
-### SbMicrophoneIdIsValid ###
+### SbMicrophoneIdIsValid
 
 Indicates whether the given microphone ID is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbMicrophoneIdIsValid(SbMicrophoneId id)
 ```
 
-### SbMicrophoneIsSampleRateSupported ###
+### SbMicrophoneIsSampleRateSupported
 
 Indicates whether the microphone supports the sample rate.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMicrophoneIsSampleRateSupported(SbMicrophoneId id, int sample_rate_in_hz)
 ```
 
-### SbMicrophoneIsValid ###
+### SbMicrophoneIsValid
 
 Indicates whether the given microphone is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbMicrophoneIsValid(SbMicrophone microphone)
 ```
 
-### SbMicrophoneOpen ###
+### SbMicrophoneOpen
 
 Opens the microphone port and starts recording audio on `microphone`.
 
@@ -230,13 +230,13 @@
 open. `microphone`: The microphone that will be opened and will start recording
 audio.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMicrophoneOpen(SbMicrophone microphone)
 ```
 
-### SbMicrophoneRead ###
+### SbMicrophoneRead
 
 Retrieves the recorded audio data from the microphone and writes that data to
 `out_audio_data`.
@@ -255,7 +255,7 @@
 smaller than `min_read_size` of `SbMicrophoneInfo`, the extra audio data that
 has already been read from the device is discarded.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMicrophoneRead(SbMicrophone microphone, void *out_audio_data, int audio_data_size)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/mutex.md b/cobalt/site/docs/reference/starboard/modules/13/mutex.md
index 58f1907..9c18999 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/mutex.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/mutex.md
@@ -1,24 +1,24 @@
----
-layout: doc
-title: "Starboard Module Reference: mutex.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `mutex.h`
 
 Defines a mutually exclusive lock that can be used to coordinate with other
 threads.
 
-## Macros ##
+## Macros
 
-### SB_MUTEX_MAX_SIZE ###
+### SB_MUTEX_MAX_SIZE
 
 Max size of the SbMutex type.
 
-## Enums ##
+## Enums
 
-### SbMutexResult ###
+### SbMutexResult
 
 Enumeration of possible results from acquiring a mutex.
 
-#### Values ####
+#### Values
 
 *   `kSbMutexAcquired`
 
@@ -30,22 +30,22 @@
 
     The mutex has already been destroyed.
 
-## Typedefs ##
+## Typedefs
 
-### SbMutex ###
+### SbMutex
 
 An opaque handle to a mutex type with reserved memory buffer of size
 SB_MUTEX_MAX_SIZE and aligned at void pointer type.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef union SbMutex  SbMutex
 ```
 
-## Functions ##
+## Functions
 
-### SbMutexAcquire ###
+### SbMutexAcquire
 
 Acquires `mutex`, blocking indefinitely. The return value identifies the
 acquisition result. SbMutexes are not reentrant, so a recursive acquisition
@@ -53,13 +53,13 @@
 
 `mutex`: The mutex to be acquired.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbMutexResult SbMutexAcquire(SbMutex *mutex)
 ```
 
-### SbMutexAcquireTry ###
+### SbMutexAcquireTry
 
 Acquires `mutex`, without blocking. The return value identifies the acquisition
 result. SbMutexes are not reentrant, so a recursive acquisition has undefined
@@ -67,52 +67,52 @@
 
 `mutex`: The mutex to be acquired.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbMutexResult SbMutexAcquireTry(SbMutex *mutex)
 ```
 
-### SbMutexCreate ###
+### SbMutexCreate
 
 Creates a new mutex. The return value indicates whether the function was able to
 create a new mutex.
 
 `out_mutex`: The handle to the newly created mutex.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMutexCreate(SbMutex *out_mutex)
 ```
 
-### SbMutexDestroy ###
+### SbMutexDestroy
 
 Destroys a mutex. The return value indicates whether the destruction was
 successful. Destroying a locked mutex results in undefined behavior.
 
 `mutex`: The mutex to be invalidated.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMutexDestroy(SbMutex *mutex)
 ```
 
-### SbMutexIsSuccess ###
+### SbMutexIsSuccess
 
 Indicates whether the given result is a success. A value of `true` indicates
 that the mutex was acquired.
 
 `result`: The result being checked.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbMutexIsSuccess(SbMutexResult result)
 ```
 
-### SbMutexRelease ###
+### SbMutexRelease
 
 Releases `mutex` held by the current thread. The return value indicates whether
 the release was successful. Releases should always be successful if `mutex` is
@@ -120,7 +120,7 @@
 
 `mutex`: The mutex to be released.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMutexRelease(SbMutex *mutex)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/once.md b/cobalt/site/docs/reference/starboard/modules/13/once.md
index ce3c4d6..3088cd9 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/once.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/once.md
@@ -1,43 +1,43 @@
----
-layout: doc
-title: "Starboard Module Reference: once.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `once.h`
 
 Onces represent initializations that should only ever happen once per process,
 in a thread-safe way.
 
-## Macros ##
+## Macros
 
-### SB_ONCE_MAX_SIZE ###
+### SB_ONCE_MAX_SIZE
 
 Max size of the SbOnceControl type.
 
-## Typedefs ##
+## Typedefs
 
-### SbOnceControl ###
+### SbOnceControl
 
 An opaque handle to a once control type with reserved memory buffer of size
 SB_ONCE_MAX_SIZE and aligned at void pointer type.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef union SbOnceControl  SbOnceControl
 ```
 
-### SbOnceInitRoutine ###
+### SbOnceInitRoutine
 
 Function pointer type for methods that can be called via the SbOnce() system.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbOnceInitRoutine) (void)
 ```
 
-## Functions ##
+## Functions
 
-### SbOnce ###
+### SbOnce
 
 Thread-safely runs `init_routine` only once.
 
@@ -50,7 +50,7 @@
 *   If `once_control` or `init_routine` is invalid, the function returns
     `false`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbOnce(SbOnceControl *once_control, SbOnceInitRoutine init_routine)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/player.md b/cobalt/site/docs/reference/starboard/modules/13/player.md
index 3fd955d..0dab908 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/player.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/player.md
@@ -1,45 +1,45 @@
----
-layout: doc
-title: "Starboard Module Reference: player.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `player.h`
 
 Defines an interface for controlling playback of media elementary streams.
 
-## Macros ##
+## Macros
 
-### SB_PLAYER_INITIAL_TICKET ###
+### SB_PLAYER_INITIAL_TICKET
 
 The value of the initial ticket held by the player before the first seek. The
 player will use this ticket value to make the first call to SbPlayerStatusFunc
 with kSbPlayerStateInitialized.
 
-### SB_PLAYER_NO_DURATION ###
+### SB_PLAYER_NO_DURATION
 
 The value to pass into SbPlayerCreate's `duration_pts` argument for cases where
 the duration is unknown, such as for live streams.
 
-### kSbPlayerInvalid ###
+### kSbPlayerInvalid
 
 Well-defined value for an invalid player.
 
-## Enums ##
+## Enums
 
-### SbPlayerDecoderState ###
+### SbPlayerDecoderState
 
 An indicator of whether the decoder can accept more samples.
 
-#### Values ####
+#### Values
 
 *   `kSbPlayerDecoderStateNeedsData`
 
     The decoder is asking for one more sample.
 
-### SbPlayerSampleSideDataType ###
+### SbPlayerSampleSideDataType
 
 Identify the type of side data accompanied with `SbPlayerSampleInfo`, as side
 data may come from multiple sources.
 
-#### Values ####
+#### Values
 
 *   `kMatroskaBlockAdditional`
 
@@ -48,11 +48,11 @@
     . The first 8 bytes of the data contains the value of BlockAddID in big
     endian format, followed by the content of BlockAdditional.
 
-### SbPlayerState ###
+### SbPlayerState
 
 An indicator of the general playback state.
 
-#### Values ####
+#### Values
 
 *   `kSbPlayerStateInitialized`
 
@@ -76,31 +76,31 @@
 
     The player has been destroyed, and will send no more callbacks.
 
-## Typedefs ##
+## Typedefs
 
-### SbPlayer ###
+### SbPlayer
 
 An opaque handle to an implementation-private structure representing a player.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbPlayerPrivate* SbPlayer
 ```
 
-### SbPlayerDeallocateSampleFunc ###
+### SbPlayerDeallocateSampleFunc
 
 Callback to free the given sample buffer data. When more than one buffer are
 sent in SbPlayerWriteSample(), the implementation only has to call this callback
-with `sample_buffer` points to the the first buffer.
+with `sample_buffer` points to the first buffer.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbPlayerDeallocateSampleFunc) (SbPlayer player, void *context, const void *sample_buffer)
 ```
 
-### SbPlayerDecoderStatusFunc ###
+### SbPlayerDecoderStatusFunc
 
 Callback for decoder status updates, called in response to a call to
 SbPlayerSeek() or SbPlayerWriteSample(). This callback will never be called
@@ -114,45 +114,45 @@
 SbPlayerWriteEndOfStream(). The player implementation should update the decoder
 status again after such call to notify its user to continue writing more frames.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbPlayerDecoderStatusFunc) (SbPlayer player, void *context, SbMediaType type, SbPlayerDecoderState state, int ticket)
 ```
 
-### SbPlayerErrorFunc ###
+### SbPlayerErrorFunc
 
 Callback for player errors, that may set a `message`. `error`: indicates the
 error code. `message`: provides specific informative diagnostic message about
 the error condition encountered. It is ok for the message to be an empty string
 or NULL if no information is available.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbPlayerErrorFunc) (SbPlayer player, void *context, SbPlayerError error, const char *message)
 ```
 
-### SbPlayerStatusFunc ###
+### SbPlayerStatusFunc
 
 Callback for player status updates. These callbacks will happen on a different
 thread than the calling thread, and it is not valid to call SbPlayer functions
 from within this callback.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbPlayerStatusFunc) (SbPlayer player, void *context, SbPlayerState state, int ticket)
 ```
 
-## Structs ##
+## Structs
 
-### SbPlayerCreationParam ###
+### SbPlayerCreationParam
 
 The playback related parameters to pass into SbPlayerCreate() and
 SbPlayerGetPreferredOutputMode().
 
-#### Members ####
+#### Members
 
 *   `SbDrmSystem drm_system`
 
@@ -178,11 +178,11 @@
     should be made available for the application to pull via calls to
     SbPlayerGetCurrentFrame().
 
-### SbPlayerInfo2 ###
+### SbPlayerInfo2
 
 Information about the current media playback state.
 
-#### Members ####
+#### Members
 
 *   `SbTime current_media_timestamp`
 
@@ -229,11 +229,11 @@
     faster than normal speed. When it is less than one, the video is played in a
     slower than normal speed. Negative speeds are not supported.
 
-### SbPlayerSampleInfo ###
+### SbPlayerSampleInfo
 
 Information about the samples to be written into SbPlayerWriteSamples().
 
-#### Members ####
+#### Members
 
 *   `SbMediaType type`
 *   `const void * buffer`
@@ -266,12 +266,12 @@
     The DRM system related info for the media sample. This value is required for
     encrypted samples. Otherwise, it must be `NULL`.
 
-### SbPlayerSampleSideData ###
+### SbPlayerSampleSideData
 
 Side data accompanied with `SbPlayerSampleInfo`, it can be arbitrary binary data
 coming from multiple sources.
 
-#### Members ####
+#### Members
 
 *   `SbPlayerSampleSideDataType type`
 *   `const uint8_t * data`
@@ -282,9 +282,9 @@
 
     The size of the data pointed by `data`, in bytes.
 
-## Functions ##
+## Functions
 
-### SbPlayerDestroy ###
+### SbPlayerDestroy
 
 Destroys `player`, freeing all associated resources.
 
@@ -299,13 +299,13 @@
     SbPlayerDestroy has been called on that player. `player`: The player to be
     destroyed. Must not be `kSbPlayerInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbPlayerDestroy(SbPlayer player)
 ```
 
-### SbPlayerGetCurrentFrame ###
+### SbPlayerGetCurrentFrame
 
 Given a player created with the kSbPlayerOutputModeDecodeToTexture output mode,
 it will return a SbDecodeTarget representing the current frame to be rasterized.
@@ -317,13 +317,13 @@
 
 `player` must not be `kSbPlayerInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbDecodeTarget SbPlayerGetCurrentFrame(SbPlayer player)
 ```
 
-### SbPlayerGetMaximumNumberOfSamplesPerWrite ###
+### SbPlayerGetMaximumNumberOfSamplesPerWrite
 
 Writes a single sample of the given media type to `player`'s input stream. Its
 data may be passed in via more than one buffers. The lifetime of
@@ -337,13 +337,13 @@
 of sample for which the number is retrieved. See the `SbMediaType` enum in
 media.h.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbPlayerGetMaximumNumberOfSamplesPerWrite(SbPlayer player, SbMediaType sample_type)
 ```
 
-### SbPlayerGetPreferredOutputMode ###
+### SbPlayerGetPreferredOutputMode
 
 Returns the preferred output mode of the implementation when a video described
 by `creation_param` is played. It is assumed that it is okay to call
@@ -361,23 +361,23 @@
 and the implementation should try its best effort to return a valid output mode.
 `creation_param` must not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbPlayerOutputMode SbPlayerGetPreferredOutputMode(const SbPlayerCreationParam *creation_param)
 ```
 
-### SbPlayerIsValid ###
+### SbPlayerIsValid
 
 Returns whether the given player handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbPlayerIsValid(SbPlayer player)
 ```
 
-### SbPlayerSetBounds ###
+### SbPlayerSetBounds
 
 Sets the player bounds to the given graphics plane coordinates. The changes do
 not take effect until the next graphics frame buffer swap. The default bounds
@@ -398,13 +398,13 @@
 `y`: The y-coordinate of the upper-left corner of the player. `width`: The width
 of the player, in pixels. `height`: The height of the player, in pixels.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbPlayerSetBounds(SbPlayer player, int z_index, int x, int y, int width, int height)
 ```
 
-### SbPlayerSetPlaybackRate ###
+### SbPlayerSetPlaybackRate
 
 Set the playback rate of the `player`. `rate` is default to 1.0 which indicates
 the playback is at its original speed. A `rate` greater than one will make the
@@ -419,13 +419,13 @@
 
 `player` must not be `kSbPlayerInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbPlayerSetPlaybackRate(SbPlayer player, double playback_rate)
 ```
 
-### SbPlayerSetVolume ###
+### SbPlayerSetVolume
 
 Sets the player's volume.
 
@@ -434,13 +434,13 @@
 `0.0` and `1.0`, inclusive. A value of `0.0` means that the audio should be
 muted, and a value of `1.0` means that it should be played at full volume.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbPlayerSetVolume(SbPlayer player, double volume)
 ```
 
-### SbPlayerWriteEndOfStream ###
+### SbPlayerWriteEndOfStream
 
 Writes a marker to `player`'s input stream of `stream_type` indicating that
 there are no more samples for that media type for the remainder of this media
@@ -450,13 +450,13 @@
 `player`: The player to which the marker is written. `stream_type`: The type of
 stream for which the marker is written.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbPlayerWriteEndOfStream(SbPlayer player, SbMediaType stream_type)
 ```
 
-### SbPlayerWriteSample2 ###
+### SbPlayerWriteSample2
 
 `sample_type`: The type of sample being written. See the `SbMediaType` enum in
 media.h. `sample_infos`: A pointer to an array of SbPlayerSampleInfo with
@@ -468,7 +468,7 @@
 `sample_infos`. It has to be at least one, and less than the return value of
 SbPlayerGetMaximumNumberOfSamplesPerWrite().
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbPlayerWriteSample2(SbPlayer player, SbMediaType sample_type, const SbPlayerSampleInfo *sample_infos, int number_of_sample_infos)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/socket.md b/cobalt/site/docs/reference/starboard/modules/13/socket.md
index 9e0f81b..744c04e 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/socket.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/socket.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: socket.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `socket.h`
 
 Defines Starboard socket I/O functions. Starboard supports IPv4 and IPv6, TCP
 and UDP, server and client sockets. Some platforms may not support IPv6, some
@@ -18,19 +18,19 @@
 TODO: For platforms that do not support sockets at all, they must support at
 least a high-level HTTP client API (to be defined later).
 
-## Macros ##
+## Macros
 
-### kSbSocketInvalid ###
+### kSbSocketInvalid
 
 Well-defined value for an invalid socket handle.
 
-## Enums ##
+## Enums
 
-### SbSocketAddressType ###
+### SbSocketAddressType
 
 All possible address types.
 
-#### Values ####
+#### Values
 
 *   `kSbSocketAddressTypeIpv4`
 
@@ -39,13 +39,13 @@
 
     An IPv6 address, which uses 16 entries of the address buffer.
 
-### SbSocketError ###
+### SbSocketError
 
 Enumeration of all Starboard socket operation results. Despite the enum name,
 note that the value actually describes the outcome of an operation, which is not
 always an error.
 
-#### Values ####
+#### Values
 
 *   `kSbSocketOk`
 
@@ -63,11 +63,11 @@
 
     The operation failed for some other reason not specified above.
 
-### SbSocketProtocol ###
+### SbSocketProtocol
 
 All possible IP socket types.
 
-#### Values ####
+#### Values
 
 *   `kSbSocketProtocolTcp`
 
@@ -77,11 +77,11 @@
     The UDP/IP protocol, an unreliable, connectionless, discrete packet
     (datagram) protocol.
 
-### SbSocketResolveFilter ###
+### SbSocketResolveFilter
 
 Bits that can be set when calling SbSocketResolve to filter the results.
 
-#### Values ####
+#### Values
 
 *   `kSbSocketResolveFilterNone`
 
@@ -93,25 +93,25 @@
 
     Include Ipv6 addresses.
 
-## Typedefs ##
+## Typedefs
 
-### SbSocket ###
+### SbSocket
 
 A handle to a socket.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbSocketPrivate* SbSocket
 ```
 
-## Structs ##
+## Structs
 
-### SbSocketAddress ###
+### SbSocketAddress
 
 A representation of any possible supported address type.
 
-#### Members ####
+#### Members
 
 *   `uint8_t address`
 
@@ -126,11 +126,11 @@
     The port component of this socket address. If not specified, it will be
     zero, which is officially undefined.
 
-### SbSocketResolution ###
+### SbSocketResolution
 
 The result of a host name resolution.
 
-#### Members ####
+#### Members
 
 *   `SbSocketAddress* addresses`
 
@@ -139,9 +139,9 @@
 
     The length of the `addresses` array.
 
-## Functions ##
+## Functions
 
-### SbSocketAccept ###
+### SbSocketAccept
 
 Accepts a pending connection on `socket` and returns a new SbSocket representing
 that connection. This function sets the error on `socket` and returns
@@ -149,13 +149,13 @@
 
 `socket`: The SbSocket that is accepting a pending connection.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocket SbSocketAccept(SbSocket socket)
 ```
 
-### SbSocketBind ###
+### SbSocketBind
 
 Binds `socket` to a specific local interface and port specified by
 `local_address`. This function sets and returns the socket error if it is unable
@@ -170,24 +170,24 @@
 *   Setting the IP address to `0.0.0.0` means that the socket should be bound to
     all interfaces.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketError SbSocketBind(SbSocket socket, const SbSocketAddress *local_address)
 ```
 
-### SbSocketClearLastError ###
+### SbSocketClearLastError
 
 Clears the last error set on `socket`. The return value indicates whether the
 socket error was cleared.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketClearLastError(SbSocket socket)
 ```
 
-### SbSocketConnect ###
+### SbSocketConnect
 
 Opens a connection of `socket`'s type to the host and port specified by
 `address`. This function sets and returns the socket error if it is unable to
@@ -197,13 +197,13 @@
 `socket`: The type of connection that should be opened. `address`: The host and
 port to which the socket should connect.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketError SbSocketConnect(SbSocket socket, const SbSocketAddress *address)
 ```
 
-### SbSocketCreate ###
+### SbSocketCreate
 
 Creates a new non-blocking socket for protocol `protocol` using address family
 `address_type`.
@@ -216,13 +216,13 @@
 `address_type`: The type of IP address to use for the socket. `protocol`: The
 protocol to use for the socket.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocket SbSocketCreate(SbSocketAddressType address_type, SbSocketProtocol protocol)
 ```
 
-### SbSocketDestroy ###
+### SbSocketDestroy
 
 Destroys the `socket` by flushing it, closing any connection that may be active
 on it, and reclaiming any resources associated with it, including any
@@ -234,25 +234,25 @@
 
 `socket`: The SbSocket to be destroyed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketDestroy(SbSocket socket)
 ```
 
-### SbSocketFreeResolution ###
+### SbSocketFreeResolution
 
 Frees a resolution allocated by SbSocketResolve.
 
 `resolution`: The resolution to be freed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSocketFreeResolution(SbSocketResolution *resolution)
 ```
 
-### SbSocketGetInterfaceAddress ###
+### SbSocketGetInterfaceAddress
 
 Gets the source address and the netmask that would be used to connect to the
 destination. The netmask parameter is optional, and only populated if a non-NULL
@@ -288,26 +288,26 @@
 value is passed in, this function places the netmask associated with the source
 address in this output variable.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketGetInterfaceAddress(const SbSocketAddress *const destination, SbSocketAddress *out_source_address, SbSocketAddress *out_netmask)
 ```
 
-### SbSocketGetLastError ###
+### SbSocketGetLastError
 
 Returns the last error set on `socket`. If `socket` is not valid, this function
 returns `kSbSocketErrorFailed`.
 
 `socket`: The SbSocket that the last error is returned for.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketError SbSocketGetLastError(SbSocket socket)
 ```
 
-### SbSocketGetLocalAddress ###
+### SbSocketGetLocalAddress
 
 Gets the address that this socket is bound to locally, if the socket is
 connected. The return value indicates whether the address was retrieved
@@ -316,59 +316,59 @@
 `socket`: The SbSocket for which the local address is retrieved. `out_address`:
 The SbSocket's local address.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketGetLocalAddress(SbSocket socket, SbSocketAddress *out_address)
 ```
 
-### SbSocketIsConnected ###
+### SbSocketIsConnected
 
 Indicates whether `socket` is connected to anything. Invalid sockets are not
 connected.
 
 `socket`: The SbSocket to be checked.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketIsConnected(SbSocket socket)
 ```
 
-### SbSocketIsConnectedAndIdle ###
+### SbSocketIsConnectedAndIdle
 
 Returns whether `socket` is connected to anything, and, if so, whether it is
 receiving any data.
 
 `socket`: The SbSocket to be checked.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketIsConnectedAndIdle(SbSocket socket)
 ```
 
-### SbSocketIsIpv6Supported ###
+### SbSocketIsIpv6Supported
 
 Returns whether IPV6 is supported on the current platform.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketIsIpv6Supported()
 ```
 
-### SbSocketIsValid ###
+### SbSocketIsValid
 
 Returns whether the given socket handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbSocketIsValid(SbSocket socket)
 ```
 
-### SbSocketJoinMulticastGroup ###
+### SbSocketJoinMulticastGroup
 
 Joins `socket` to an IP multicast group identified by `address`. The equivalent
 of IP_ADD_MEMBERSHIP. The return value indicates whether the socket was joined
@@ -377,13 +377,13 @@
 `socket`: The SbSocket to be joined to the IP multicast group. `address`: The
 location of the IP multicast group.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketJoinMulticastGroup(SbSocket socket, const SbSocketAddress *address)
 ```
 
-### SbSocketListen ###
+### SbSocketListen
 
 Causes `socket` to listen on the local address that `socket` was previously
 bound to by SbSocketBind. This function sets and returns the socket error if it
@@ -392,13 +392,13 @@
 
 `socket`: The SbSocket on which the function operates.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketError SbSocketListen(SbSocket socket)
 ```
 
-### SbSocketReceiveFrom ###
+### SbSocketReceiveFrom
 
 Reads up to `data_size` bytes from `socket` into `out_data` and places the
 source address of the packet in `out_source` if out_source is not NULL. Returns
@@ -420,13 +420,13 @@
 the socket. Must not be NULL. `data_size`: The number of bytes to read.
 `out_source`: The source address of the packet.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbSocketReceiveFrom(SbSocket socket, char *out_data, int data_size, SbSocketAddress *out_source)
 ```
 
-### SbSocketResolve ###
+### SbSocketResolve
 
 Synchronously resolves `hostname` into the returned SbSocketResolution , which
 must be freed with SbSocketFreeResolution. The function returns `NULL` if it is
@@ -438,13 +438,13 @@
 However, if one IP address family filter is specified, only that address family
 is included. The function ignores unrecognized filter bits.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketResolution* SbSocketResolve(const char *hostname, int filters)
 ```
 
-### SbSocketSendTo ###
+### SbSocketSendTo
 
 Writes up to `data_size` bytes of `data` to `destination` via `socket`. Returns
 the number of bytes written, or a negative number if there is an error, in which
@@ -466,13 +466,13 @@
 connected persistently, so setting `destination` when sending to a TCP socket
 will cause an error.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbSocketSendTo(SbSocket socket, const char *data, int data_size, const SbSocketAddress *destination)
 ```
 
-### SbSocketSetBroadcast ###
+### SbSocketSetBroadcast
 
 Sets the `SO_BROADCAST`, or equivalent, option to `value` on `socket`. The
 return value indicates whether the option was actually set.
@@ -483,13 +483,13 @@
 `socket`: The SbSocket for which the option is set. `value`: The new value for
 the option.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetBroadcast(SbSocket socket, bool value)
 ```
 
-### SbSocketSetReceiveBufferSize ###
+### SbSocketSetReceiveBufferSize
 
 Sets the `SO_RCVBUF`, or equivalent, option to `size` on `socket`. The return
 value indicates whether the option was actually set.
@@ -497,13 +497,13 @@
 `socket`: The SbSocket for which the option is set. `size`: The value for the
 option.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetReceiveBufferSize(SbSocket socket, int32_t size)
 ```
 
-### SbSocketSetReuseAddress ###
+### SbSocketSetReuseAddress
 
 Sets the `SO_REUSEADDR`, or equivalent, option to `value` on `socket`. The
 return value indicates whether the option was actually set.
@@ -514,13 +514,13 @@
 `socket`: The SbSocket for which the option is set. `value`: The new value for
 the option.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetReuseAddress(SbSocket socket, bool value)
 ```
 
-### SbSocketSetSendBufferSize ###
+### SbSocketSetSendBufferSize
 
 Sets the `SO_SNDBUF`, or equivalent, option to `size` on `socket`. The return
 value indicates whether the option was actually set.
@@ -528,13 +528,13 @@
 `socket`: The SbSocket for which the option is set. `size`: The value for the
 option.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetSendBufferSize(SbSocket socket, int32_t size)
 ```
 
-### SbSocketSetTcpKeepAlive ###
+### SbSocketSetTcpKeepAlive
 
 Sets the `SO_KEEPALIVE`, or equivalent, option to `value` on `socket`. The
 return value indicates whether the option was actually set.
@@ -545,13 +545,13 @@
 The time between keep-alive packets. This value is only relevant if `value` is
 `true`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetTcpKeepAlive(SbSocket socket, bool value, SbTime period)
 ```
 
-### SbSocketSetTcpNoDelay ###
+### SbSocketSetTcpNoDelay
 
 Sets the `TCP_NODELAY`, or equivalent, option to `value` on `socket`. The return
 value indicates whether the option was actually set.
@@ -564,13 +564,13 @@
 `socket`: The SbSocket for which the option is set. `value`: Indicates whether
 the Nagle algorithm should be disabled (`value`=`true`).
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetTcpNoDelay(SbSocket socket, bool value)
 ```
 
-### SbSocketSetTcpWindowScaling ###
+### SbSocketSetTcpWindowScaling
 
 Sets the `SO_WINSCALE`, or equivalent, option to `value` on `socket`. The return
 value indicates whether the option was actually set.
@@ -578,7 +578,7 @@
 `socket`: The SbSocket for which the option is set. `value`: The value for the
 option.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetTcpWindowScaling(SbSocket socket, bool value)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/socket_waiter.md b/cobalt/site/docs/reference/starboard/modules/13/socket_waiter.md
index 738fafb..146938c 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/socket_waiter.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/socket_waiter.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: socket_waiter.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `socket_waiter.h`
 
 Allows a thread to wait on many sockets at once. The standard usage pattern
 would be for a single I/O thread to:
@@ -26,19 +26,19 @@
 queuing the work item, or the SbSocketWaiter is not otherwise guaranteed to wake
 up.
 
-## Macros ##
+## Macros
 
-### kSbSocketWaiterInvalid ###
+### kSbSocketWaiterInvalid
 
 Well-defined value for an invalid socket watcher handle.
 
-## Enums ##
+## Enums
 
-### SbSocketWaiterInterest ###
+### SbSocketWaiterInterest
 
 All the interests that a socket may register for on a waiter.
 
-#### Values ####
+#### Values
 
 *   `kSbSocketWaiterInterestNone`
 
@@ -50,11 +50,11 @@
 
     An interest in or readiness to write to a socket without blocking.
 
-### SbSocketWaiterResult ###
+### SbSocketWaiterResult
 
 Possible reasons why a call to SbSocketWaiterWaitTimed returned.
 
-#### Values ####
+#### Values
 
 *   `kSbSocketWaiterResultInvalid`
 
@@ -66,31 +66,31 @@
 
     The wait stopped because a call to SbSocketWaiterWakeUp was consumed.
 
-## Typedefs ##
+## Typedefs
 
-### SbSocketWaiter ###
+### SbSocketWaiter
 
 A handle to a socket waiter.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbSocketWaiterPrivate* SbSocketWaiter
 ```
 
-### SbSocketWaiterCallback ###
+### SbSocketWaiterCallback
 
 Function pointer for socket waiter callbacks.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbSocketWaiterCallback) (SbSocketWaiter waiter, SbSocket socket, void *context, int ready_interests)
 ```
 
-## Functions ##
+## Functions
 
-### SbSocketWaiterAdd ###
+### SbSocketWaiterAdd
 
 Adds a new socket to be waited on by the `waiter` with a bitfield of
 `interests`. This function should only be called on the thread that waits on
@@ -120,25 +120,25 @@
     `callback`, even if not all registered `interests` became ready, which
     allows for adding it again in the `callback`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketWaiterAdd(SbSocketWaiter waiter, SbSocket socket, void *context, SbSocketWaiterCallback callback, int interests, bool persistent)
 ```
 
-### SbSocketWaiterCreate ###
+### SbSocketWaiterCreate
 
 The results of two threads waiting on the same waiter is undefined and will not
 work. Except for the SbSocketWaiterWakeUp() function, SbSocketWaiters are not
 thread-safe and don't expect to be modified concurrently.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketWaiter SbSocketWaiterCreate()
 ```
 
-### SbSocketWaiterDestroy ###
+### SbSocketWaiterDestroy
 
 Destroys `waiter` and removes all sockets still registered by way of
 SbSocketWaiterAdd. This function may be called on any thread as long as there is
@@ -146,23 +146,23 @@
 
 `waiter`: The SbSocketWaiter to be destroyed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketWaiterDestroy(SbSocketWaiter waiter)
 ```
 
-### SbSocketWaiterIsValid ###
+### SbSocketWaiterIsValid
 
 Returns whether the given socket handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbSocketWaiterIsValid(SbSocketWaiter watcher)
 ```
 
-### SbSocketWaiterRemove ###
+### SbSocketWaiterRemove
 
 Removes a socket, previously added with SbSocketWaiterAdd(), from a waiter. This
 function should only be called on the thread that waits on this waiter.
@@ -174,26 +174,26 @@
 `waiter`: The waiter from which the socket is removed. `socket`: The socket to
 remove from the waiter.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketWaiterRemove(SbSocketWaiter waiter, SbSocket socket)
 ```
 
-### SbSocketWaiterWait ###
+### SbSocketWaiterWait
 
 Waits on all registered sockets, calling the registered callbacks if and when
 the corresponding sockets become ready for an interested operation. This version
 exits only after SbSocketWaiterWakeUp() is called. This function should only be
 called on the thread that waits on this waiter.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSocketWaiterWait(SbSocketWaiter waiter)
 ```
 
-### SbSocketWaiterWaitTimed ###
+### SbSocketWaiterWaitTimed
 
 Behaves similarly to SbSocketWaiterWait(), but this function also causes
 `waiter` to exit on its own after at least `duration` has passed if
@@ -207,13 +207,13 @@
 function may wait longer than `duration`, such as if the timeout expires while a
 callback is being fired.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketWaiterResult SbSocketWaiterWaitTimed(SbSocketWaiter waiter, SbTime duration)
 ```
 
-### SbSocketWaiterWakeUp ###
+### SbSocketWaiterWakeUp
 
 Wakes up `waiter` once. This is the only thread-safe waiter function. It can can
 be called from a SbSocketWaiterCallback to wake up its own waiter, and it can
@@ -230,7 +230,7 @@
 
 `waiter`: The socket waiter to be woken up.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSocketWaiterWakeUp(SbSocketWaiter waiter)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/speech_synthesis.md b/cobalt/site/docs/reference/starboard/modules/13/speech_synthesis.md
index e46a2ca..ea4ad46 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/speech_synthesis.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/speech_synthesis.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: speech_synthesis.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `speech_synthesis.h`
 
 A basic text-to-speech API intended to be used for audio accessibility.
 
@@ -11,29 +11,29 @@
 Note that these functions do not have to be thread-safe. They must only be
 called from a single application thread.
 
-## Functions ##
+## Functions
 
-### SbSpeechSynthesisCancel ###
+### SbSpeechSynthesisCancel
 
 Cancels all speaking and queued speech synthesis audio. Must return immediately.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSpeechSynthesisCancel()
 ```
 
-### SbSpeechSynthesisIsSupported ###
+### SbSpeechSynthesisIsSupported
 
 Returns whether the platform supports speech synthesis
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSpeechSynthesisIsSupported()
 ```
 
-### SbSpeechSynthesisSpeak ###
+### SbSpeechSynthesisSpeak
 
 Enqueues `text`, a UTF-8 string, to be spoken. Returns immediately.
 
@@ -44,7 +44,7 @@
 the current speaking should continue and this new text should be queued to play
 when the previous utterances are complete.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSpeechSynthesisSpeak(const char *text)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/storage.md b/cobalt/site/docs/reference/starboard/modules/13/storage.md
index c98207b..b486ac8 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/storage.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/storage.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: storage.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `storage.h`
 
 Defines a user-based Storage API. This is a simple, all-at-once BLOB storage and
 retrieval API that is intended for robust long-term, per-user storage. Some
@@ -15,27 +15,27 @@
 These APIs are NOT expected to be thread-safe, so either call them from a single
 thread, or perform proper synchronization around all calls.
 
-## Macros ##
+## Macros
 
-### kSbStorageInvalidRecord ###
+### kSbStorageInvalidRecord
 
 Well-defined value for an invalid storage record handle.
 
-## Typedefs ##
+## Typedefs
 
-### SbStorageRecord ###
+### SbStorageRecord
 
 A handle to an open storage record.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbStorageRecordPrivate* SbStorageRecord
 ```
 
-## Functions ##
+## Functions
 
-### SbStorageCloseRecord ###
+### SbStorageCloseRecord
 
 Closes `record`, synchronously ensuring that all written data is flushed. This
 function performs blocking I/O on the calling thread.
@@ -47,13 +47,13 @@
 `record`: The storage record to close. `record` is invalid after this point, and
 subsequent calls referring to `record` will fail.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbStorageCloseRecord(SbStorageRecord record)
 ```
 
-### SbStorageDeleteRecord ###
+### SbStorageDeleteRecord
 
 Deletes the `SbStorageRecord` for `user` named `name`. The return value
 indicates whether the record existed and was successfully deleted. If the record
@@ -68,36 +68,36 @@
 `user`: The user for whom the record will be deleted. `name`: The filesystem-
 safe name of the record to open.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbStorageDeleteRecord(SbUser user, const char *name)
 ```
 
-### SbStorageGetRecordSize ###
+### SbStorageGetRecordSize
 
 Returns the size of `record`, or `-1` if there is an error. This function
 performs blocking I/O on the calling thread.
 
 `record`: The record to retrieve the size of.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbStorageGetRecordSize(SbStorageRecord record)
 ```
 
-### SbStorageIsValidRecord ###
+### SbStorageIsValidRecord
 
 Returns whether the given storage record handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbStorageIsValidRecord(SbStorageRecord record)
 ```
 
-### SbStorageOpenRecord ###
+### SbStorageOpenRecord
 
 Opens and returns the SbStorageRecord for `user` named `name`, blocking I/O on
 the calling thread until the open is completed. If `user` is not a valid
@@ -111,13 +111,13 @@
 `user`: The user for which the storage record will be opened. `name`: The
 filesystem-safe name of the record to open.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbStorageRecord SbStorageOpenRecord(SbUser user, const char *name)
 ```
 
-### SbStorageReadRecord ###
+### SbStorageReadRecord
 
 Reads up to `data_size` bytes from `record`, starting at the beginning of the
 record. The function returns the actual number of bytes read, which must be <=
@@ -128,13 +128,13 @@
 `record`: The record to be read. `out_data`: The data read from the record.
 `data_size`: The amount of data, in bytes, to read.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbStorageReadRecord(SbStorageRecord record, char *out_data, int64_t data_size)
 ```
 
-### SbStorageWriteRecord ###
+### SbStorageWriteRecord
 
 Replaces the data in `record` with `data_size` bytes from `data`. This function
 always deletes any previous data in that record. The return value indicates
@@ -151,7 +151,7 @@
 `record`: The record to be written to. `data`: The data to write to the record.
 `data_size`: The amount of `data`, in bytes, to write to the record.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbStorageWriteRecord(SbStorageRecord record, const char *data, int64_t data_size)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/string.md b/cobalt/site/docs/reference/starboard/modules/13/string.md
index 95790d4..5e97968 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/string.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/string.md
@@ -1,13 +1,13 @@
----
-layout: doc
-title: "Starboard Module Reference: string.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `string.h`
 
 Defines functions for interacting with c-style strings.
 
-## Functions ##
+## Functions
 
-### SbStringCompareNoCase ###
+### SbStringCompareNoCase
 
 Compares two strings, ignoring differences in case. The return value is:
 
@@ -21,13 +21,13 @@
 
 `string1`: The first string to compare. `string2`: The second string to compare.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbStringCompareNoCase(const char *string1, const char *string2)
 ```
 
-### SbStringCompareNoCaseN ###
+### SbStringCompareNoCaseN
 
 Compares the first `count` characters of two strings, ignoring differences in
 case. The return value is:
@@ -43,13 +43,13 @@
 `string1`: The first string to compare. `string2`: The second string to compare.
 `count`: The number of characters to compare.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbStringCompareNoCaseN(const char *string1, const char *string2, size_t count)
 ```
 
-### SbStringDuplicate ###
+### SbStringDuplicate
 
 Copies `source` into a buffer that is allocated by this function and that can be
 freed with SbMemoryDeallocate. This function is meant to be a drop-in
@@ -57,13 +57,13 @@
 
 `source`: The string to be copied.
 
-#### Declaration ####
+#### Declaration
 
 ```
 char* SbStringDuplicate(const char *source)
 ```
 
-### SbStringFormat ###
+### SbStringFormat
 
 Produces a string formatted with `format` and `arguments`, placing as much of
 the result that will fit into `out_buffer`. The return value specifies the
@@ -76,13 +76,13 @@
 The size of `out_buffer`. `format`: A string that specifies how the data should
 be formatted. `arguments`: Variable arguments used in the string.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbStringFormat(char *out_buffer, size_t buffer_size, const char *format, va_list arguments) SB_PRINTF_FORMAT(3
 ```
 
-### SbStringFormatF ###
+### SbStringFormatF
 
 An inline wrapper of SbStringFormat that converts from ellipsis to va_args. This
 function is meant to be a drop-in replacement for `snprintf`.
@@ -91,13 +91,13 @@
 The size of `out_buffer`. `format`: A string that specifies how the data should
 be formatted. `...`: Arguments used in the string.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int static int static int SbStringFormatF(char *out_buffer, size_t buffer_size, const char *format,...) SB_PRINTF_FORMAT(3
 ```
 
-### SbStringFormatUnsafeF ###
+### SbStringFormatUnsafeF
 
 An inline wrapper of SbStringFormat that is meant to be a drop-in replacement
 for the unsafe but commonly used `sprintf`.
@@ -106,13 +106,13 @@
 string that specifies how the data should be formatted. `...`: Arguments used in
 the string.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int static int SbStringFormatUnsafeF(char *out_buffer, const char *format,...) SB_PRINTF_FORMAT(2
 ```
 
-### SbStringFormatWide ###
+### SbStringFormatWide
 
 This function is identical to SbStringFormat, but is for wide characters. It is
 meant to be a drop-in replacement for `vswprintf`.
@@ -121,13 +121,13 @@
 The size of `out_buffer`. `format`: A string that specifies how the data should
 be formatted. `arguments`: Variable arguments used in the string.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbStringFormatWide(wchar_t *out_buffer, size_t buffer_size, const wchar_t *format, va_list arguments)
 ```
 
-### SbStringFormatWideF ###
+### SbStringFormatWideF
 
 An inline wrapper of SbStringFormatWide that converts from ellipsis to
 `va_args`.
@@ -136,13 +136,13 @@
 The size of `out_buffer`. `format`: A string that specifies how the data should
 be formatted. `...`: Arguments used in the string.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int SbStringFormatWideF(wchar_t *out_buffer, size_t buffer_size, const wchar_t *format,...)
 ```
 
-### SbStringScan ###
+### SbStringScan
 
 Scans `buffer` for `pattern`, placing the extracted values in `arguments`. The
 return value specifies the number of successfully matched items, which may be
@@ -154,20 +154,20 @@
 for in `buffer`. `arguments`: Values matching `pattern` that were extracted from
 `buffer`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbStringScan(const char *buffer, const char *pattern, va_list arguments)
 ```
 
-### SbStringScanF ###
+### SbStringScanF
 
 An inline wrapper of SbStringScan that converts from ellipsis to `va_args`. This
 function is meant to be a drop-in replacement for `sscanf`. `buffer`: The string
 to scan for the pattern. `pattern`: The string to search for in `buffer`. `...`:
 Values matching `pattern` that were extracted from `buffer`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int SbStringScanF(const char *buffer, const char *pattern,...)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/system.md b/cobalt/site/docs/reference/starboard/modules/13/system.md
index b02dc01..d3052d1 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/system.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/system.md
@@ -1,21 +1,21 @@
----
-layout: doc
-title: "Starboard Module Reference: system.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `system.h`
 
 Defines a broad set of APIs that allow the client application to query build and
 runtime properties of the enclosing system.
 
-## Enums ##
+## Enums
 
-### SbSystemCapabilityId ###
+### SbSystemCapabilityId
 
 Runtime capabilities are boolean properties of a platform that can't be
 determined at compile-time. They may vary from device to device, but they will
 not change over the course of a single execution. They often specify particular
 behavior of other APIs within the bounds of their operating range.
 
-#### Values ####
+#### Values
 
 *   `kSbSystemCapabilityReversedEnterAndBack`
 
@@ -26,11 +26,11 @@
     only if) a system has this capability will SbSystemGetTotalGPUMemory() and
     SbSystemGetUsedGPUMemory() be valid to call.
 
-### SbSystemConnectionType ###
+### SbSystemConnectionType
 
 Enumeration of network connection types.
 
-#### Values ####
+#### Values
 
 *   `kSbSystemConnectionTypeWired`
 
@@ -42,11 +42,11 @@
 
     The system connection type is unknown.
 
-### SbSystemDeviceType ###
+### SbSystemDeviceType
 
 Enumeration of device types.
 
-#### Values ####
+#### Values
 
 *   `kSbSystemDeviceTypeBlueRayDiskPlayer`
 
@@ -76,11 +76,11 @@
 
     Unknown device.
 
-### SbSystemPathId ###
+### SbSystemPathId
 
 Enumeration of special paths that the platform can define.
 
-#### Values ####
+#### Values
 
 *   `kSbSystemPathContentDirectory`
 
@@ -119,22 +119,22 @@
     for storing the updates. See
     starboard/doc/evergreen/cobalt_evergreen_overview.md
 
-### SbSystemPlatformErrorResponse ###
+### SbSystemPlatformErrorResponse
 
 Possible responses for `SbSystemPlatformErrorCallback`.
 
-#### Values ####
+#### Values
 
 *   `kSbSystemPlatformErrorResponsePositive`
 *   `kSbSystemPlatformErrorResponseNegative`
 *   `kSbSystemPlatformErrorResponseCancel`
 
-### SbSystemPlatformErrorType ###
+### SbSystemPlatformErrorType
 
 Enumeration of possible values for the `type` parameter passed to the
 `SbSystemRaisePlatformError` function.
 
-#### Values ####
+#### Values
 
 *   `kSbSystemPlatformErrorTypeConnectionError`
 
@@ -143,12 +143,12 @@
     `kSbSystemPlatformErrorResponsePositive` then the request should be retried,
     otherwise the app should be stopped.
 
-### SbSystemPropertyId ###
+### SbSystemPropertyId
 
 System properties that can be queried for. Many of these are used in User-Agent
 string generation.
 
-#### Values ####
+#### Values
 
 *   `kSbSystemPropertyCertificationScope`
 
@@ -196,9 +196,9 @@
 
     A field that, if available, is appended to the user agent
 
-## Typedefs ##
+## Typedefs
 
-### SbSystemComparator ###
+### SbSystemComparator
 
 Pointer to a function to compare two items. The return value uses standard
 `*cmp` semantics:
@@ -211,23 +211,23 @@
 
 `a`: The first value to compare. `b`: The second value to compare.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int(* SbSystemComparator) (const void *a, const void *b)
 ```
 
-### SbSystemError ###
+### SbSystemError
 
 A type that can represent a system error code across all Starboard platforms.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int SbSystemError
 ```
 
-### SbSystemPlatformErrorCallback ###
+### SbSystemPlatformErrorCallback
 
 Type of callback function that may be called in response to an error
 notification from `SbSystemRaisePlatformError`. `response` is a code to indicate
@@ -235,56 +235,56 @@
 the error. `user_data` is the opaque pointer that was passed to the call to
 `SbSystemRaisePlatformError`.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbSystemPlatformErrorCallback) (SbSystemPlatformErrorResponse response, void *user_data)
 ```
 
-## Functions ##
+## Functions
 
-### SbSystemBreakIntoDebugger ###
+### SbSystemBreakIntoDebugger
 
 Breaks the current program into the debugger, if a debugger is attached. If a
 debugger is not attached, this function aborts the program.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SB_NORETURN void SbSystemBreakIntoDebugger()
 ```
 
-### SbSystemClearLastError ###
+### SbSystemClearLastError
 
 Clears the last error set by a Starboard call in the current thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemClearLastError()
 ```
 
-### SbSystemGetConnectionType ###
+### SbSystemGetConnectionType
 
 Returns the device's current network connection type.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSystemConnectionType SbSystemGetConnectionType()
 ```
 
-### SbSystemGetDeviceType ###
+### SbSystemGetDeviceType
 
 Returns the type of the device.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSystemDeviceType SbSystemGetDeviceType()
 ```
 
-### SbSystemGetErrorString ###
+### SbSystemGetErrorString
 
 Generates a human-readable string for an error. The return value specifies the
 total desired length of the string.
@@ -293,13 +293,13 @@
 The generated string. This value may be null, and it is always terminated with a
 null byte. `string_length`: The maximum length of the error string.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbSystemGetErrorString(SbSystemError error, char *out_string, int string_length)
 ```
 
-### SbSystemGetExtension ###
+### SbSystemGetExtension
 
 Returns pointer to a constant global struct implementing the extension named
 `name`, if it is implemented. Otherwise return NULL. The `name` string must not
@@ -321,25 +321,25 @@
 ignored. As the version of extensions are incremented, fields may be added to
 the end of the struct, but never removed (only deprecated).
 
-#### Declaration ####
+#### Declaration
 
 ```
 const void* SbSystemGetExtension(const char *name)
 ```
 
-### SbSystemGetLastError ###
+### SbSystemGetLastError
 
 Gets the last platform-specific error code produced by any Starboard call in the
 current thread for diagnostic purposes. Semantic reactions to Starboard function
 call results should be modeled explicitly.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSystemError SbSystemGetLastError()
 ```
 
-### SbSystemGetLocaleId ###
+### SbSystemGetLocaleId
 
 Gets the system's current POSIX-style Locale ID. The locale represents the
 location, language, and cultural conventions that the system wants to use, which
@@ -356,25 +356,25 @@
 
 For more information than you probably want about POSIX locales, see: [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html](http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html)
 
-#### Declaration ####
+#### Declaration
 
 ```
 const char* SbSystemGetLocaleId()
 ```
 
-### SbSystemGetNumberOfProcessors ###
+### SbSystemGetNumberOfProcessors
 
 Returns the number of processor cores available to this application. If the
 process is sandboxed to a subset of the physical cores, the function returns
 that sandboxed limit.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbSystemGetNumberOfProcessors()
 ```
 
-### SbSystemGetProperty ###
+### SbSystemGetProperty
 
 Retrieves the platform-defined system property specified by `property_id` and
 places its value as a zero-terminated string into the user-allocated `out_value`
@@ -395,13 +395,13 @@
 defined system property specified by `property_id`. `value_length`: The length
 of the system property.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemGetProperty(SbSystemPropertyId property_id, char *out_value, int value_length)
 ```
 
-### SbSystemGetRandomData ###
+### SbSystemGetRandomData
 
 A cryptographically secure random number generator that produces an arbitrary,
 non-negative number of `buffer_size` random, non-negative bytes. The generated
@@ -410,24 +410,24 @@
 `out_buffer`: A pointer for the generated random number. This value must not be
 null. `buffer_size`: The size of the random number, in bytes.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemGetRandomData(void *out_buffer, int buffer_size)
 ```
 
-### SbSystemGetRandomUInt64 ###
+### SbSystemGetRandomUInt64
 
 A cryptographically secure random number generator that gets 64 random bits and
 returns them as an `uint64_t`. This function does not require manual seeding.
 
-#### Declaration ####
+#### Declaration
 
 ```
 uint64_t SbSystemGetRandomUInt64()
 ```
 
-### SbSystemGetStack ###
+### SbSystemGetStack
 
 Places up to `stack_size` instruction pointer addresses of the current execution
 stack into `out_stack`. The return value specifies the number of entries added.
@@ -444,62 +444,62 @@
 `stack_size`: The maximum number of instruction pointer addresses to be placed
 into `out_stack` from the current execution stack.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbSystemGetStack(void **out_stack, int stack_size)
 ```
 
-### SbSystemGetTotalCPUMemory ###
+### SbSystemGetTotalCPUMemory
 
 Returns the total CPU memory (in bytes) potentially available to this
 application. If the process is sandboxed to a maximum allowable limit, the
 function returns the lesser of the physical and sandbox limits.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbSystemGetTotalCPUMemory()
 ```
 
-### SbSystemGetTotalGPUMemory ###
+### SbSystemGetTotalGPUMemory
 
 Returns the total GPU memory (in bytes) available for use by this application.
 This function may only be called the return value for calls to
 SbSystemHasCapability(kSbSystemCapabilityCanQueryGPUMemoryStats) is `true`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbSystemGetTotalGPUMemory()
 ```
 
-### SbSystemGetUsedCPUMemory ###
+### SbSystemGetUsedCPUMemory
 
 Returns the total physical CPU memory (in bytes) used by this application. This
 value should always be less than (or, in particularly exciting situations, equal
 to) SbSystemGetTotalCPUMemory().
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbSystemGetUsedCPUMemory()
 ```
 
-### SbSystemGetUsedGPUMemory ###
+### SbSystemGetUsedGPUMemory
 
 Returns the current amount of GPU memory (in bytes) that is currently being used
 by this application. This function may only be called if the return value for
 calls to SbSystemHasCapability(kSbSystemCapabilityCanQueryGPUMemoryStats) is
 `true`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbSystemGetUsedGPUMemory()
 ```
 
-### SbSystemHasCapability ###
+### SbSystemHasCapability
 
 Returns whether the platform has the runtime capability specified by
 `capability_id`. Returns false for any unknown capabilities. This implementation
@@ -507,48 +507,48 @@
 
 `capability_id`: The runtime capability to check.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemHasCapability(SbSystemCapabilityId capability_id)
 ```
 
-### SbSystemHideSplashScreen ###
+### SbSystemHideSplashScreen
 
 Hides the system splash screen on systems that support a splash screen that is
 displayed while the application is loading. This function may be called from any
 thread and must be idempotent.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemHideSplashScreen()
 ```
 
-### SbSystemIsDebuggerAttached ###
+### SbSystemIsDebuggerAttached
 
 Attempts to determine whether the current program is running inside or attached
 to a debugger. The function returns `false` if neither of those cases is true.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemIsDebuggerAttached()
 ```
 
-### SbSystemNetworkIsDisconnected ###
+### SbSystemNetworkIsDisconnected
 
 Returns if the device is disconnected from network. "Disconnected" is chosen
 over connected because disconnection can be determined with more certainty than
 connection usually.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemNetworkIsDisconnected()
 ```
 
-### SbSystemRaisePlatformError ###
+### SbSystemRaisePlatformError
 
 Cobalt calls this function to notify the platform that an error has occurred in
 the application that the platform may need to handle. The platform is expected
@@ -570,13 +570,13 @@
 pointer that the platform should pass as an argument to the callback function,
 if it is called.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemRaisePlatformError(SbSystemPlatformErrorType type, SbSystemPlatformErrorCallback callback, void *user_data)
 ```
 
-### SbSystemRequestBlur ###
+### SbSystemRequestBlur
 
 Requests that the application move into the Blurred state at the next convenient
 point. This should roughly correspond to "unfocused application" in a
@@ -586,13 +586,13 @@
 the application. Before the `kSbEventTypeBlur` event is dispatched, some work
 may continue to be done, and unrelated system events may be dispatched.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemRequestBlur()
 ```
 
-### SbSystemRequestConceal ###
+### SbSystemRequestConceal
 
 Requests that the application move into the Concealed state at the next
 convenient point. This should roughly correspond to "minimization" in a
@@ -607,13 +607,13 @@
 running background tasks. The expectation is that an external system event will
 bring the application out of the Concealed state.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemRequestConceal()
 ```
 
-### SbSystemRequestFocus ###
+### SbSystemRequestFocus
 
 Requests that the application move into the Started state at the next convenient
 point. This should roughly correspond to a "focused application" in a
@@ -624,13 +624,13 @@
 the application. Before `kSbEventTypeFocus` is dispatched, some work may
 continue to be done, and unrelated system events may be dispatched.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemRequestFocus()
 ```
 
-### SbSystemRequestFreeze ###
+### SbSystemRequestFreeze
 
 Requests that the application move into the Frozen state at the next convenient
 point.
@@ -643,13 +643,13 @@
 The expectation is that an external system event will bring the application out
 of the Frozen state.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemRequestFreeze()
 ```
 
-### SbSystemRequestReveal ###
+### SbSystemRequestReveal
 
 Requests that the application move into the Blurred state at the next convenient
 point. This should roughly correspond to a "focused application" in a
@@ -660,13 +660,13 @@
 the application. Before the `kSbEventTypeReveal` event is dispatched, some work
 may continue to be done, and unrelated system events may be dispatched.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemRequestReveal()
 ```
 
-### SbSystemRequestStop ###
+### SbSystemRequestStop
 
 Requests that the application be terminated gracefully at the next convenient
 point. In the meantime, some work may continue to be done, and unrelated system
@@ -677,13 +677,13 @@
 `error_level`: An integer that serves as the return value for the process that
 is eventually terminated as a result of a call to this function.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemRequestStop(int error_level)
 ```
 
-### SbSystemSignWithCertificationSecretKey ###
+### SbSystemSignWithCertificationSecretKey
 
 Computes a HMAC-SHA256 digest of `message` into `digest` using the application's
 certification secret. The `message` and the `digest` pointers must not be NULL.
@@ -693,13 +693,13 @@
 an error, or if it is not implemented. In this case the contents of `digest`
 will be undefined.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemSignWithCertificationSecretKey(const uint8_t *message, size_t message_size_in_bytes, uint8_t *digest, size_t digest_size_in_bytes)
 ```
 
-### SbSystemSupportsResume ###
+### SbSystemSupportsResume
 
 Returns false if the platform doesn't need resume after suspend support. In such
 case Cobalt will free up the resource it retains for resume after suspend. Note
@@ -707,13 +707,13 @@
 kSbEventTypeResume to the event handler. The return value of this function
 cannot change over the life time of the application.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemSupportsResume()
 ```
 
-### SbSystemSymbolize ###
+### SbSystemSymbolize
 
 Looks up `address` as an instruction pointer and places up to (`buffer_size -
 1`) characters of the symbol associated with it in `out_buffer`, which must not
@@ -725,7 +725,7 @@
 This function is used in crash signal handlers and, therefore, it must be async-
 signal-safe on platforms that support signals.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemSymbolize(const void *address, char *out_buffer, int buffer_size)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/thread.md b/cobalt/site/docs/reference/starboard/modules/13/thread.md
index 8440477..81a8697 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/thread.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/thread.md
@@ -1,35 +1,35 @@
----
-layout: doc
-title: "Starboard Module Reference: thread.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `thread.h`
 
 Defines functionality related to thread creation and cleanup.
 
-## Macros ##
+## Macros
 
-### kSbThreadContextInvalid ###
+### kSbThreadContextInvalid
 
 Well-defined value for an invalid thread context.
 
-### kSbThreadInvalidId ###
+### kSbThreadInvalidId
 
 Well-defined constant value to mean "no thread ID."
 
-### kSbThreadLocalKeyInvalid ###
+### kSbThreadLocalKeyInvalid
 
 Well-defined constant value to mean "no thread local key."
 
-### kSbThreadNoAffinity ###
+### kSbThreadNoAffinity
 
 Well-defined constant value to mean "no affinity."
 
-### kSbThreadSamplerInvalid ###
+### kSbThreadSamplerInvalid
 
 Well-defined value for an invalid thread sampler.
 
-## Enums ##
+## Enums
 
-### SbThreadPriority ###
+### SbThreadPriority
 
 A spectrum of thread priorities. Platforms map them appropriately to their own
 priority system. Note that scheduling is platform-specific, and what these
@@ -39,7 +39,7 @@
 a given platform. The only guarantee is that each lower priority should be
 treated less-than-or-equal-to a higher priority.
 
-#### Values ####
+#### Values
 
 *   `kSbThreadPriorityLowest`
 
@@ -79,116 +79,116 @@
     inherit the priority of the spawning thread, or it may mean a specific
     default priority, or it may mean something else, depending on the platform.
 
-## Typedefs ##
+## Typedefs
 
-### SbThread ###
+### SbThread
 
 An opaque handle to a thread type.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void* SbThread
 ```
 
-### SbThreadAffinity ###
+### SbThreadAffinity
 
 Type for thread core affinity. This generally will be a single cpu (or core or
 hyperthread) identifier. Some platforms may not support affinity, and some may
 have specific rules about how it must be used.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int32_t SbThreadAffinity
 ```
 
-### SbThreadContext ###
+### SbThreadContext
 
 A handle to the context of a frozen thread.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbThreadContextPrivate* SbThreadContext
 ```
 
-### SbThreadEntryPoint ###
+### SbThreadEntryPoint
 
 Function pointer type for SbThreadCreate. `context` is a pointer-sized bit of
 data passed in from the calling thread.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void*(* SbThreadEntryPoint) (void *context)
 ```
 
-### SbThreadId ###
+### SbThreadId
 
 An ID type that is unique per thread.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int32_t SbThreadId
 ```
 
-### SbThreadLocalDestructor ###
+### SbThreadLocalDestructor
 
 Function pointer type for Thread-Local destructors.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbThreadLocalDestructor) (void *value)
 ```
 
-### SbThreadLocalKey ###
+### SbThreadLocalKey
 
 A handle to a thread-local key.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbThreadLocalKeyPrivate* SbThreadLocalKey
 ```
 
-### SbThreadSampler ###
+### SbThreadSampler
 
 A handle to a thread sampler.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbThreadSamplerPrivate* SbThreadSampler
 ```
 
-## Functions ##
+## Functions
 
-### SbThreadContextGetPointer ###
+### SbThreadContextGetPointer
 
 Gets the specified pointer-type `property` from the specified `context`. Returns
 `true` if successful and `out_value` has been modified, otherwise returns
 `false` and `out_value` is not modified.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbThreadContextGetPointer(SbThreadContext context, SbThreadContextProperty property, void **out_value)
 ```
 
-### SbThreadContextIsValid ###
+### SbThreadContextIsValid
 
 Returns whether the given thread context is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadContextIsValid(SbThreadContext context)
 ```
 
-### SbThreadCreate ###
+### SbThreadCreate
 
 Creates a new thread, which starts immediately.
 
@@ -214,13 +214,13 @@
 executed on the newly created thread. `context`: This value will be passed to
 the `entry_point` function.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbThread SbThreadCreate(int64_t stack_size, SbThreadPriority priority, SbThreadAffinity affinity, bool joinable, const char *name, SbThreadEntryPoint entry_point, void *context)
 ```
 
-### SbThreadCreateLocalKey ###
+### SbThreadCreateLocalKey
 
 Creates and returns a new, unique key for thread local data. If the function
 does not succeed, the function returns `kSbThreadLocalKeyInvalid`.
@@ -233,13 +233,13 @@
 `destructor`: A pointer to a function. The value may be NULL if no clean up is
 needed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbThreadLocalKey SbThreadCreateLocalKey(SbThreadLocalDestructor destructor)
 ```
 
-### SbThreadDestroyLocalKey ###
+### SbThreadDestroyLocalKey
 
 Destroys thread local data for the specified key. The function is a no-op if the
 key is invalid (kSbThreadLocalKeyInvalid`) or has already been destroyed. This
@@ -247,13 +247,13 @@
 
 `key`: The key for which to destroy thread local data.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadDestroyLocalKey(SbThreadLocalKey key)
 ```
 
-### SbThreadDetach ###
+### SbThreadDetach
 
 Detaches `thread`, which prevents it from being joined. This is sort of like a
 non-blocking join. This function is a no-op if the thread is already detached or
@@ -261,33 +261,33 @@
 
 `thread`: The thread to be detached.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadDetach(SbThread thread)
 ```
 
-### SbThreadGetCurrent ###
+### SbThreadGetCurrent
 
 Returns the handle of the currently executing thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbThread SbThreadGetCurrent()
 ```
 
-### SbThreadGetId ###
+### SbThreadGetId
 
 Returns the Thread ID of the currently executing thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbThreadId SbThreadGetId()
 ```
 
-### SbThreadGetLocalValue ###
+### SbThreadGetLocalValue
 
 Returns the pointer-sized value for `key` in the currently executing thread's
 local storage. Returns `NULL` if key is `kSbThreadLocalKeyInvalid` or if the key
@@ -295,97 +295,97 @@
 
 `key`: The key for which to return the value.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbThreadGetLocalValue(SbThreadLocalKey key)
 ```
 
-### SbThreadGetName ###
+### SbThreadGetName
 
 Returns the debug name of the currently executing thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadGetName(char *buffer, int buffer_size)
 ```
 
-### SbThreadIsCurrent ###
+### SbThreadIsCurrent
 
 Returns whether `thread` is the current thread.
 
 `thread`: The thread to check.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadIsCurrent(SbThread thread)
 ```
 
-### SbThreadIsEqual ###
+### SbThreadIsEqual
 
 Indicates whether `thread1` and `thread2` refer to the same thread.
 
 `thread1`: The first thread to compare. `thread2`: The second thread to compare.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbThreadIsEqual(SbThread thread1, SbThread thread2)
 ```
 
-### SbThreadIsValid ###
+### SbThreadIsValid
 
 Returns whether the given thread handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadIsValid(SbThread thread)
 ```
 
-### SbThreadIsValidAffinity ###
+### SbThreadIsValidAffinity
 
 Returns whether the given thread affinity is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadIsValidAffinity(SbThreadAffinity affinity)
 ```
 
-### SbThreadIsValidId ###
+### SbThreadIsValidId
 
 Returns whether the given thread ID is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadIsValidId(SbThreadId id)
 ```
 
-### SbThreadIsValidLocalKey ###
+### SbThreadIsValidLocalKey
 
 Returns whether the given thread local variable key is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadIsValidLocalKey(SbThreadLocalKey key)
 ```
 
-### SbThreadIsValidPriority ###
+### SbThreadIsValidPriority
 
 Returns whether the given thread priority is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadIsValidPriority(SbThreadPriority priority)
 ```
 
-### SbThreadJoin ###
+### SbThreadJoin
 
 Joins the thread on which this function is called with joinable `thread`. This
 function blocks the caller until the designated thread exits, and then cleans up
@@ -403,36 +403,36 @@
 then the SbThreadJoin function populates it with the return value of the
 thread's `main` function.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbThreadJoin(SbThread thread, void **out_return)
 ```
 
-### SbThreadSamplerCreate ###
+### SbThreadSamplerCreate
 
 Creates a new thread sampler for the specified `thread`.
 
 If successful, this function returns the newly created handle. If unsuccessful,
 this function returns `kSbThreadSamplerInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbThreadSampler SbThreadSamplerCreate(SbThread thread)
 ```
 
-### SbThreadSamplerDestroy ###
+### SbThreadSamplerDestroy
 
 Destroys the `sampler` and frees whatever resources it was using.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadSamplerDestroy(SbThreadSampler sampler)
 ```
 
-### SbThreadSamplerFreeze ###
+### SbThreadSamplerFreeze
 
 Suspends execution of the thread that `sampler` was created for.
 
@@ -440,47 +440,47 @@
 from which properties may be read while the thread remains frozen. If
 unsuccessful, this function returns `kSbThreadContextInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbThreadContext SbThreadSamplerFreeze(SbThreadSampler sampler)
 ```
 
-### SbThreadSamplerIsSupported ###
+### SbThreadSamplerIsSupported
 
 Whether the current platform supports thread sampling. The result of this
 function must not change over the course of the program, which means that the
 results of this function may be cached indefinitely. If this returns false,
 `SbThreadSamplerCreate` will return an invalid sampler.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbThreadSamplerIsSupported()
 ```
 
-### SbThreadSamplerIsValid ###
+### SbThreadSamplerIsValid
 
 Returns whether the given thread sampler is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadSamplerIsValid(SbThreadSampler sampler)
 ```
 
-### SbThreadSamplerThaw ###
+### SbThreadSamplerThaw
 
 Resumes execution of the thread that `sampler` was created for. This invalidates
 the context returned from `SbThreadSamplerFreeze`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbThreadSamplerThaw(SbThreadSampler sampler)
 ```
 
-### SbThreadSetLocalValue ###
+### SbThreadSetLocalValue
 
 Sets the pointer-sized value for `key` in the currently executing thread's local
 storage. The return value indicates whether `key` is valid and has not already
@@ -489,26 +489,26 @@
 `key`: The key for which to set the key value. `value`: The new pointer-sized
 key value.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbThreadSetLocalValue(SbThreadLocalKey key, void *value)
 ```
 
-### SbThreadSetName ###
+### SbThreadSetName
 
 Sets the debug name of the currently executing thread by copying the specified
 name string.
 
 `name`: The name to assign to the thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadSetName(const char *name)
 ```
 
-### SbThreadSleep ###
+### SbThreadSleep
 
 Sleeps the currently executing thread.
 
@@ -516,17 +516,17 @@
 executing thread should sleep. The function is a no-op if this value is negative
 or `0`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadSleep(SbTime duration)
 ```
 
-### SbThreadYield ###
+### SbThreadYield
 
 Yields the currently executing thread, so another thread has a chance to run.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadYield()
diff --git a/cobalt/site/docs/reference/starboard/modules/13/time.md b/cobalt/site/docs/reference/starboard/modules/13/time.md
index 17ea6ad..e5c8cd2 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/time.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/time.md
@@ -1,59 +1,59 @@
----
-layout: doc
-title: "Starboard Module Reference: time.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `time.h`
 
 Provides access to system time and timers.
 
-## Macros ##
+## Macros
 
-### kSbTimeDay ###
+### kSbTimeDay
 
 One day in SbTime units (microseconds).
 
-### kSbTimeHour ###
+### kSbTimeHour
 
 One hour in SbTime units (microseconds).
 
-### kSbTimeMax ###
+### kSbTimeMax
 
 The maximum value of an SbTime.
 
-### kSbTimeMillisecond ###
+### kSbTimeMillisecond
 
 One millisecond in SbTime units (microseconds).
 
-### kSbTimeMinute ###
+### kSbTimeMinute
 
 One minute in SbTime units (microseconds).
 
-### kSbTimeNanosecondsPerMicrosecond ###
+### kSbTimeNanosecondsPerMicrosecond
 
 How many nanoseconds in one SbTime unit (microseconds).
 
-### kSbTimeSecond ###
+### kSbTimeSecond
 
 One second in SbTime units (microseconds).
 
-### kSbTimeToPosixDelta ###
+### kSbTimeToPosixDelta
 
 A term that can be added to an SbTime to convert it into the number of
 microseconds since the POSIX epoch.
 
-## Typedefs ##
+## Typedefs
 
-### SbTime ###
+### SbTime
 
 The number of microseconds since the epoch of January 1, 1601 UTC, or the number
 of microseconds between two times. Always microseconds, ALWAYS UTC.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int64_t SbTime
 ```
 
-### SbTimeMonotonic ###
+### SbTimeMonotonic
 
 A number of microseconds from some point. The main property of this time is that
 it increases monotonically. It should also be as high-resolution a timer as we
@@ -61,38 +61,38 @@
 without worrying about a system clock adjustment. It's not good for getting the
 wall clock time.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int64_t SbTimeMonotonic
 ```
 
-## Functions ##
+## Functions
 
-### SbTimeFromPosix ###
+### SbTimeFromPosix
 
 Converts microseconds from the POSIX epoch into an `SbTime`.
 
 `time`: A time that measures the number of microseconds since January 1, 1970,
 00:00:00, UTC.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbTime SbTimeFromPosix(int64_t time)
 ```
 
-### SbTimeGetMonotonicNow ###
+### SbTimeGetMonotonicNow
 
 Gets a monotonically increasing time representing right now.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbTimeMonotonic SbTimeGetMonotonicNow()
 ```
 
-### SbTimeGetMonotonicThreadNow ###
+### SbTimeGetMonotonicThreadNow
 
 Gets a monotonically increasing time representing how long the current thread
 has been in the executing state (i.e. not pre-empted nor waiting on an event).
@@ -100,44 +100,44 @@
 execution time between two timestamps. If this is not available then
 SbTimeGetMonotonicNow() should be used.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbTimeMonotonic SbTimeGetMonotonicThreadNow()
 ```
 
-### SbTimeGetNow ###
+### SbTimeGetNow
 
 Gets the current system time as an `SbTime`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbTime SbTimeGetNow()
 ```
 
-### SbTimeIsTimeThreadNowSupported ###
+### SbTimeIsTimeThreadNowSupported
 
 Returns whether the current platform supports time thread now
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbTimeIsTimeThreadNowSupported()
 ```
 
-### SbTimeNarrow ###
+### SbTimeNarrow
 
 Safely narrows a number from a more precise unit to a less precise one. This
 function rounds negative values toward negative infinity.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int64_t SbTimeNarrow(int64_t time, int64_t divisor)
 ```
 
-### SbTimeToPosix ###
+### SbTimeToPosix
 
 Converts `SbTime` into microseconds from the POSIX epoch.
 
@@ -145,7 +145,7 @@
 January 1, 1601, UTC, or that measures the number of microseconds between two
 times.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int64_t SbTimeToPosix(SbTime time)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/time_zone.md b/cobalt/site/docs/reference/starboard/modules/13/time_zone.md
index 5768bc3..baad375 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/time_zone.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/time_zone.md
@@ -1,48 +1,47 @@
----
-layout: doc
-title: "Starboard Module Reference: time_zone.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `time_zone.h`
 
 Provides access to the system time zone information.
 
-## Typedefs ##
+## Typedefs
 
-### SbTimeZone ###
+### SbTimeZone
 
 The number of minutes west of the Greenwich Prime Meridian, NOT including
 Daylight Savings Time adjustments.
 
-For example: PST/PDT is 480 minutes (28800 seconds, 8 hours).
+For example: America/Los_Angeles is 480 minutes (28800 seconds, 8 hours).
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int SbTimeZone
 ```
 
-## Functions ##
+## Functions
 
-### SbTimeZoneGetCurrent ###
+### SbTimeZoneGetCurrent
 
 Gets the system's current SbTimeZone in minutes.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbTimeZone SbTimeZoneGetCurrent()
 ```
 
-### SbTimeZoneGetName ###
+### SbTimeZoneGetName
 
-Gets a string representation of the current timezone. Note that the string
-representation can either be standard or daylight saving time. The output can be
-of the form: 1) A three-letter abbreviation such as "PST" or "PDT" (preferred).
-2) A time zone identifier such as "America/Los_Angeles" 3) An un-abbreviated
-name such as "Pacific Standard Time".
+Gets a string representation of the current timezone. The format should be in
+the IANA format [https://data.iana.org/time-zones/theory.html#naming](https://data.iana.org/time-zones/theory.html#naming)) .
+Names normally have the form AREA/LOCATION, where AREA is a continent or ocean,
+and LOCATION is a specific location within the area. Typical names are
+'Africa/Cairo', 'America/New_York', and 'Pacific/Honolulu'.
 
-#### Declaration ####
+#### Declaration
 
 ```
 const char* SbTimeZoneGetName()
 ```
-
diff --git a/cobalt/site/docs/reference/starboard/modules/13/types.md b/cobalt/site/docs/reference/starboard/modules/13/types.md
index 90867a6..e1f372c 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/types.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/types.md
@@ -1,15 +1,15 @@
----
-layout: doc
-title: "Starboard Module Reference: types.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `types.h`
 
 Provides a suite of standard types that should be universally available on all
 platforms, specifically focused on explicitly-sized integer types and booleans.
 This module also includes some related ubiquitous definitions like limits of the
 explicitly-sized integer types, and standard pointer and int32 sentinel values.
 
-## Macros ##
+## Macros
 
-### kSbInvalidInt ###
+### kSbInvalidInt
 
 A value that represents an int that is probably invalid.
diff --git a/cobalt/site/docs/reference/starboard/modules/13/ui_navigation.md b/cobalt/site/docs/reference/starboard/modules/13/ui_navigation.md
index a0ecfb1..cb41767 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/ui_navigation.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/ui_navigation.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: ui_navigation.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `ui_navigation.h`
 
 API to allow applications to take advantage of the platform's native UI engine.
 This is mainly to drive the animation of visual elements and to signal which of
@@ -19,20 +19,20 @@
 user interaction. If the navigation item is a container, then the content offset
 will also be queried to determine the placement of its content items.
 
-## Macros ##
+## Macros
 
-### kSbUiNavItemInvalid ###
+### kSbUiNavItemInvalid
 
 Well-defined value for an invalid navigation item.
 
-## Enums ##
+## Enums
 
-### SbUiNavItemType ###
+### SbUiNavItemType
 
 Navigation items may be one of the following types. This must be specified upon
 item creation and may not change during the item's lifespan.
 
-#### Values ####
+#### Values
 
 *   `kSbUiNavItemTypeFocus`
 
@@ -42,29 +42,29 @@
     This is a container of navigation items which can also be containers
     themselves or focusable items. Containers themselves cannot be focused.
 
-## Typedefs ##
+## Typedefs
 
-### SbUiNavItem ###
+### SbUiNavItem
 
 An opaque handle to an implementation-private structure representing a
 navigation item.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbUiNavItemPrivate* SbUiNavItem
 ```
 
-## Structs ##
+## Structs
 
-### SbUiNavCallbacks ###
+### SbUiNavCallbacks
 
 This structure specifies all the callbacks which the platform UI engine should
 invoke for various interaction events on navigation items. These callbacks may
 be invoked from any thread at any frequency. The `callback_context` is the value
 that was passed on creation of the relevant SbUiNavItem.
 
-#### Members ####
+#### Members
 
 *   `void(*onblur)(SbUiNavItem item, void *callback_context)`
 
@@ -77,12 +77,12 @@
     Invoke when an item's content offset is changed. This is only used with
     container items.
 
-### SbUiNavInterface ###
+### SbUiNavInterface
 
 This structure declares the interface to the UI navigation implementation. All
 function pointers must be specified if the platform supports UI navigation.
 
-#### Members ####
+#### Members
 
 *   `SbUiNavItem(*create_item)(SbUiNavItemType type, const SbUiNavCallbacks
     *callbacks, void *callback_context)`
@@ -237,7 +237,7 @@
     Call `update_function` with `context` to perform a series of UI navigation
     changes atomically before returning.
 
-### SbUiNavItemDir ###
+### SbUiNavItemDir
 
 Navigation items of type kSbUiNavItemTypeContainer have directionality. If
 directionality is not specified for a container, it should default to left-to-
@@ -270,12 +270,12 @@
   Bottom-to-top is similar to right-to-left, but for the Y position.
 ```
 
-#### Members ####
+#### Members
 
 *   `bool is_left_to_right`
 *   `bool is_top_to_bottom`
 
-### SbUiNavMatrix2x3 ###
+### SbUiNavMatrix2x3
 
 This represents a 2x3 transform matrix in row-major order.
 
@@ -284,38 +284,38 @@
 ///   | c d ty |
 ```
 
-#### Members ####
+#### Members
 
 *   `float m`
 
-### SbUiNavMatrix4 ###
+### SbUiNavMatrix4
 
 This represents a 4x4 transform matrix in row-major order.
 
-#### Members ####
+#### Members
 
 *   `float m`
 
-## Functions ##
+## Functions
 
-### SbUiNavGetInterface ###
+### SbUiNavGetInterface
 
 Retrieve the platform's UI navigation implementation. If the platform does not
 provide one, then return false without modifying `out_interface`. Otherwise,
 initialize all members of `out_interface` and return true. The `out_interface`
 pointer must not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbUiNavGetInterface(SbUiNavInterface *out_interface)
 ```
 
-### SbUiNavItemIsValid ###
+### SbUiNavItemIsValid
 
 Returns whether the given navigation item handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbUiNavItemIsValid(SbUiNavItem item)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/user.md b/cobalt/site/docs/reference/starboard/modules/13/user.md
index a30cc95..9442ced 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/user.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/user.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: user.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `user.h`
 
 Defines a user management API. This module defines functions only for managing
 signed-in users. Platforms that do not have users must still implement this API,
@@ -10,19 +10,19 @@
 These APIs are NOT expected to be thread-safe, so either call them from a single
 thread, or perform proper synchronization around all calls.
 
-## Macros ##
+## Macros
 
-### kSbUserInvalid ###
+### kSbUserInvalid
 
 Well-defined value for an invalid user.
 
-## Enums ##
+## Enums
 
-### SbUserPropertyId ###
+### SbUserPropertyId
 
 A set of string properties that can be queried on a user.
 
-#### Values ####
+#### Values
 
 *   `kSbUserPropertyAvatarUrl`
 
@@ -38,21 +38,21 @@
 
     A unique user ID of a user.
 
-## Typedefs ##
+## Typedefs
 
-### SbUser ###
+### SbUser
 
 A handle to a user.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbUserPrivate* SbUser
 ```
 
-## Functions ##
+## Functions
 
-### SbUserGetCurrent ###
+### SbUserGetCurrent
 
 Gets the current primary user, if one exists. This is the user that is
 determined, in a platform-specific way, to be the primary user controlling the
@@ -63,13 +63,13 @@
 It is expected that there will be a unique SbUser per signed-in user, and that
 the referenced objects will persist for the lifetime of the app.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbUser SbUserGetCurrent()
 ```
 
-### SbUserGetProperty ###
+### SbUserGetProperty
 
 Retrieves the value of `property_id` for `user` and places it in `out_value`.
 The function returns:
@@ -83,13 +83,13 @@
 The property for which the data is requested. `out_value`: The retrieved
 property value. `value_size`: The size of the retrieved property value.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbUserGetProperty(SbUser user, SbUserPropertyId property_id, char *out_value, int value_size)
 ```
 
-### SbUserGetPropertySize ###
+### SbUserGetPropertySize
 
 Returns the size of the value of `property_id` for `user`, INCLUDING the
 terminating null character. The function returns `0` if `user` is invalid or if
@@ -98,13 +98,13 @@
 `user`: The user for which property size data is being retrieved. `property_id`:
 The property for which the data is requested.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbUserGetPropertySize(SbUser user, SbUserPropertyId property_id)
 ```
 
-### SbUserGetSignedIn ###
+### SbUserGetSignedIn
 
 Gets a list of up to `users_size` signed-in users and places the results in
 `out_users`. The return value identifies the actual number of signed-in users,
@@ -116,17 +116,17 @@
 `out_users`: Handles for the retrieved users. `users_size`: The maximum number
 of signed-in users to retrieve.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbUserGetSignedIn(SbUser *out_users, int users_size)
 ```
 
-### SbUserIsValid ###
+### SbUserIsValid
 
 Returns whether the given user handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbUserIsValid(SbUser user)
diff --git a/cobalt/site/docs/reference/starboard/modules/13/window.md b/cobalt/site/docs/reference/starboard/modules/13/window.md
index 53cda4a..af49c22 100644
--- a/cobalt/site/docs/reference/starboard/modules/13/window.md
+++ b/cobalt/site/docs/reference/starboard/modules/13/window.md
@@ -1,40 +1,40 @@
----
-layout: doc
-title: "Starboard Module Reference: window.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `window.h`
 
 Provides functionality to handle Window creation and management.
 
-## Macros ##
+## Macros
 
-### kSbEventOnScreenKeyboardInvalidTicket ###
+### kSbEventOnScreenKeyboardInvalidTicket
 
 System-triggered OnScreenKeyboard events have ticket value
 kSbEventOnScreenKeyboardInvalidTicket.
 
-### kSbWindowInvalid ###
+### kSbWindowInvalid
 
 Well-defined value for an invalid window handle.
 
-## Typedefs ##
+## Typedefs
 
-### SbWindow ###
+### SbWindow
 
 A handle to a window.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbWindowPrivate* SbWindow
 ```
 
-## Structs ##
+## Structs
 
-### SbWindowOptions ###
+### SbWindowOptions
 
 Options that can be requested at window creation time.
 
-#### Members ####
+#### Members
 
 *   `SbWindowSize size`
 
@@ -48,25 +48,25 @@
 
     The name of the window to create.
 
-### SbWindowRect ###
+### SbWindowRect
 
 Defines a rectangle via a point `(x, y)` and a size `(width, height)`. This
 structure is used as output for SbWindowGetOnScreenKeyboardBoundingRect.
 
-#### Members ####
+#### Members
 
 *   `float x`
 *   `float y`
 *   `float width`
 *   `float height`
 
-### SbWindowSize ###
+### SbWindowSize
 
 The size of a window in graphics rendering coordinates. The width and height of
 a window should correspond to the size of the graphics surface used for drawing
 that would be created to back that window.
 
-#### Members ####
+#### Members
 
 *   `int width`
 
@@ -93,9 +93,9 @@
     A value of 0.0f means the ratio could not be determined, it should be
     assumed to be the same as the graphics resolution (i.e. 1.0f).
 
-## Functions ##
+## Functions
 
-### SbWindowBlurOnScreenKeyboard ###
+### SbWindowBlurOnScreenKeyboard
 
 Blur the on screen keyboard. Fire kSbEventTypeOnScreenKeyboardBlurred.
 kSbEventTypeOnScreenKeyboardBlurred has data `ticket`. Calling
@@ -103,13 +103,13 @@
 permitted. Calling SbWindowBlurOnScreenKeyboard while the on screen keyboard is
 not showing does nothing and does not fire any event.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowBlurOnScreenKeyboard(SbWindow window, int ticket)
 ```
 
-### SbWindowCreate ###
+### SbWindowCreate
 
 Creates and returns a new system window with the given `options`, which may be
 `NULL`. The function returns `kSbWindowInvalid` if it cannot create the
@@ -131,25 +131,25 @@
 
 `options`: Options that specify parameters for the window being created.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbWindow SbWindowCreate(const SbWindowOptions *options)
 ```
 
-### SbWindowDestroy ###
+### SbWindowDestroy
 
 Destroys `window`, reclaiming associated resources.
 
 `window`: The `SbWindow` to destroy.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbWindowDestroy(SbWindow window)
 ```
 
-### SbWindowFocusOnScreenKeyboard ###
+### SbWindowFocusOnScreenKeyboard
 
 Focus the on screen keyboard. Fire kSbEventTypeOnScreenKeyboardFocused.
 kSbEventTypeOnScreenKeyboardFocused has data `ticket`. Calling
@@ -157,38 +157,38 @@
 permitted. Calling SbWindowFocusOnScreenKeyboard while the on screen keyboard is
 not showing does nothing and does not fire any event.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowFocusOnScreenKeyboard(SbWindow window, int ticket)
 ```
 
-### SbWindowGetDiagonalSizeInInches ###
+### SbWindowGetDiagonalSizeInInches
 
 Gets the size of the diagonal between two opposing screen corners.
 
 A return value of 0 means that starboard does not know what the screen diagonal
 is.
 
-#### Declaration ####
+#### Declaration
 
 ```
 float SbWindowGetDiagonalSizeInInches(SbWindow window)
 ```
 
-### SbWindowGetOnScreenKeyboardBoundingRect ###
+### SbWindowGetOnScreenKeyboardBoundingRect
 
 Get the rectangle of the on screen keyboard in screen pixel coordinates. Return
 `true` if successful. Return `false` if the on screen keyboard is not showing.
 If the function returns `false`, then `rect` will not have been modified.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbWindowGetOnScreenKeyboardBoundingRect(SbWindow window, SbWindowRect *bounding_rect)
 ```
 
-### SbWindowGetPlatformHandle ###
+### SbWindowGetPlatformHandle
 
 Gets the platform-specific handle for `window`, which can be passed as an
 EGLNativeWindowType to initialize EGL/GLES. This return value is entirely
@@ -196,13 +196,13 @@
 
 `window`: The SbWindow to retrieve the platform handle for.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbWindowGetPlatformHandle(SbWindow window)
 ```
 
-### SbWindowGetSize ###
+### SbWindowGetSize
 
 Retrieves the dimensions of `window` and sets `size` accordingly. This function
 returns `true` if it completes successfully. If the function returns `false`,
@@ -210,81 +210,81 @@
 
 `window`: The SbWindow to retrieve the size of. `size`: The retrieved size.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbWindowGetSize(SbWindow window, SbWindowSize *size)
 ```
 
-### SbWindowHideOnScreenKeyboard ###
+### SbWindowHideOnScreenKeyboard
 
 Hide the on screen keyboard. Fire kSbEventTypeWindowSizeChange and
 kSbEventTypeOnScreenKeyboardHidden if necessary.
 kSbEventTypeOnScreenKeyboardHidden has data `ticket`. Calling
 SbWindowHideOnScreenKeyboard() when the keyboard is already hidden is permitted.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowHideOnScreenKeyboard(SbWindow window, int ticket)
 ```
 
-### SbWindowIsOnScreenKeyboardShown ###
+### SbWindowIsOnScreenKeyboardShown
 
 Determine if the on screen keyboard is shown.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbWindowIsOnScreenKeyboardShown(SbWindow window)
 ```
 
-### SbWindowIsValid ###
+### SbWindowIsValid
 
 Returns whether the given window handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbWindowIsValid(SbWindow window)
 ```
 
-### SbWindowOnScreenKeyboardIsSupported ###
+### SbWindowOnScreenKeyboardIsSupported
 
 Return whether the current platform supports an on screen keyboard
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbWindowOnScreenKeyboardIsSupported()
 ```
 
-### SbWindowOnScreenKeyboardSuggestionsSupported ###
+### SbWindowOnScreenKeyboardSuggestionsSupported
 
 Determine if the on screen keyboard has suggestions implemented. If this returns
 false, then calling SbWindowUpdateOnScreenKeyboardSuggestions() will be
 undefined.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbWindowOnScreenKeyboardSuggestionsSupported(SbWindow window)
 ```
 
-### SbWindowSetDefaultOptions ###
+### SbWindowSetDefaultOptions
 
 Sets the default options for system windows.
 
 `options`: The option values to use as default values. This object must not be
 `NULL`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowSetDefaultOptions(SbWindowOptions *options)
 ```
 
-### SbWindowSetOnScreenKeyboardKeepFocus ###
+### SbWindowSetOnScreenKeyboardKeepFocus
 
 Notify the system that `keepFocus` has been set for the OnScreenKeyboard.
 `keepFocus` true indicates that the user may not navigate focus off of the
@@ -293,13 +293,13 @@
 OnScreenKeyboard via input. `keepFocus` is initialized to false in the
 OnScreenKeyboard constructor.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowSetOnScreenKeyboardKeepFocus(SbWindow window, bool keep_focus)
 ```
 
-### SbWindowShowOnScreenKeyboard ###
+### SbWindowShowOnScreenKeyboard
 
 Show the on screen keyboard and populate the input with text `input_text`. Fire
 kSbEventTypeWindowSizeChange and kSbEventTypeOnScreenKeyboardShown if necessary.
@@ -309,13 +309,13 @@
 and the input will be replaced with `input_text`. Showing the on screen keyboard
 does not give it focus.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowShowOnScreenKeyboard(SbWindow window, const char *input_text, int ticket)
 ```
 
-### SbWindowUpdateOnScreenKeyboardSuggestions ###
+### SbWindowUpdateOnScreenKeyboardSuggestions
 
 Update the on screen keyboard custom suggestions. Fire
 kSbEventTypeOnScreenKeyboardSuggestionsUpdated.
@@ -323,7 +323,7 @@
 suggestions should remain up-to-date when the keyboard is shown after being
 hidden.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowUpdateOnScreenKeyboardSuggestions(SbWindow window, const char *suggestions[], int num_suggestions, int ticket)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/accessibility.md b/cobalt/site/docs/reference/starboard/modules/14/accessibility.md
index 1a5adcb..5c66ba4 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/accessibility.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/accessibility.md
@@ -1,17 +1,17 @@
----
-layout: doc
-title: "Starboard Module Reference: accessibility.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `accessibility.h`
 
 Provides access to the system options and settings related to accessibility.
 
-## Enums ##
+## Enums
 
-### SbAccessibilityCaptionCharacterEdgeStyle ###
+### SbAccessibilityCaptionCharacterEdgeStyle
 
 Enum for possible closed captioning character edge styles.
 
-#### Values ####
+#### Values
 
 *   `kSbAccessibilityCaptionCharacterEdgeStyleNone`
 *   `kSbAccessibilityCaptionCharacterEdgeStyleRaised`
@@ -19,11 +19,11 @@
 *   `kSbAccessibilityCaptionCharacterEdgeStyleUniform`
 *   `kSbAccessibilityCaptionCharacterEdgeStyleDropShadow`
 
-### SbAccessibilityCaptionColor ###
+### SbAccessibilityCaptionColor
 
 Enum for possible closed captioning colors.
 
-#### Values ####
+#### Values
 
 *   `kSbAccessibilityCaptionColorBlue`
 *   `kSbAccessibilityCaptionColorBlack`
@@ -34,11 +34,11 @@
 *   `kSbAccessibilityCaptionColorWhite`
 *   `kSbAccessibilityCaptionColorYellow`
 
-### SbAccessibilityCaptionFontFamily ###
+### SbAccessibilityCaptionFontFamily
 
 Enum for possible closed captioning font families
 
-#### Values ####
+#### Values
 
 *   `kSbAccessibilityCaptionFontFamilyCasual`
 *   `kSbAccessibilityCaptionFontFamilyCursive`
@@ -48,11 +48,11 @@
 *   `kSbAccessibilityCaptionFontFamilyProportionalSerif`
 *   `kSbAccessibilityCaptionFontFamilySmallCapitals`
 
-### SbAccessibilityCaptionFontSizePercentage ###
+### SbAccessibilityCaptionFontSizePercentage
 
 Enum for possible closed captioning font size percentages.
 
-#### Values ####
+#### Values
 
 *   `kSbAccessibilityCaptionFontSizePercentage25`
 *   `kSbAccessibilityCaptionFontSizePercentage50`
@@ -67,11 +67,11 @@
 *   `kSbAccessibilityCaptionFontSizePercentage275`
 *   `kSbAccessibilityCaptionFontSizePercentage300`
 
-### SbAccessibilityCaptionOpacityPercentage ###
+### SbAccessibilityCaptionOpacityPercentage
 
 Enum for possible closed captioning opacity percentages.
 
-#### Values ####
+#### Values
 
 *   `kSbAccessibilityCaptionOpacityPercentage0`
 *   `kSbAccessibilityCaptionOpacityPercentage25`
@@ -79,11 +79,11 @@
 *   `kSbAccessibilityCaptionOpacityPercentage75`
 *   `kSbAccessibilityCaptionOpacityPercentage100`
 
-### SbAccessibilityCaptionState ###
+### SbAccessibilityCaptionState
 
 Enum for possible states of closed captioning properties.
 
-#### Values ####
+#### Values
 
 *   `kSbAccessibilityCaptionStateUnsupported`
 
@@ -115,14 +115,14 @@
     SbAccessibilityCaptionSettings.supportsOverride contains false, then no
     fields of SbAccessibilityCaptionSettings will ever contain this value.
 
-## Structs ##
+## Structs
 
-### SbAccessibilityCaptionSettings ###
+### SbAccessibilityCaptionSettings
 
 A group of settings related to system-level closed captioning settings, for
 platforms that expose closed captioning settings.
 
-#### Members ####
+#### Members
 
 *   `SbAccessibilityCaptionColor background_color`
 *   `SbAccessibilityCaptionState background_color_state`
@@ -166,9 +166,9 @@
     false, the values of `SbAccessibilityCaptionState` should be interpreted
     differently.
 
-### SbAccessibilityDisplaySettings ###
+### SbAccessibilityDisplaySettings
 
-#### Members ####
+#### Members
 
 *   `bool has_high_contrast_text_setting`
 
@@ -177,12 +177,12 @@
 
     Whether the high contrast text setting is enabled or not.
 
-### SbAccessibilityTextToSpeechSettings ###
+### SbAccessibilityTextToSpeechSettings
 
 A group of settings related to text-to-speech functionality, for platforms that
 expose system settings for text-to-speech.
 
-#### Members ####
+#### Members
 
 *   `bool has_text_to_speech_setting`
 
@@ -192,9 +192,9 @@
     Whether the text-to-speech setting is enabled or not. This setting is only
     valid if `has_text_to_speech_setting` is set to true.
 
-## Functions ##
+## Functions
 
-### SbAccessibilityGetCaptionSettings ###
+### SbAccessibilityGetCaptionSettings
 
 Get the platform's settings for system-level closed captions. This function
 returns false if `caption_settings` is NULL or if it is not zero-initialized.
@@ -202,13 +202,13 @@
 `caption_settings`: A pointer to a zero-initialized
 SbAccessibilityTextToSpeechSettings struct.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAccessibilityGetCaptionSettings(SbAccessibilityCaptionSettings *caption_settings)
 ```
 
-### SbAccessibilityGetDisplaySettings ###
+### SbAccessibilityGetDisplaySettings
 
 Get the platform settings related to high contrast text. This function returns
 false if `out_settings` is NULL or if it is not zero-initialized.
@@ -216,13 +216,13 @@
 `out_settings`: A pointer to a zero-initialized SbAccessibilityDisplaySettings*
 struct.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAccessibilityGetDisplaySettings(SbAccessibilityDisplaySettings *out_settings)
 ```
 
-### SbAccessibilityGetTextToSpeechSettings ###
+### SbAccessibilityGetTextToSpeechSettings
 
 Get the platform settings related to the text-to-speech accessibility feature.
 This function returns false if `out_settings` is NULL or if it is not zero-
@@ -231,13 +231,13 @@
 `out_settings`: A pointer to a zero-initialized
 SbAccessibilityTextToSpeechSettings struct.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAccessibilityGetTextToSpeechSettings(SbAccessibilityTextToSpeechSettings *out_settings)
 ```
 
-### SbAccessibilitySetCaptionsEnabled ###
+### SbAccessibilitySetCaptionsEnabled
 
 Modifies whether closed captions are enabled at a system level. This function
 returns false if this feature is not supported by the platform, or if changing
@@ -246,7 +246,7 @@
 `enabled`: A boolean indicating whether captions should be turned on (true) or
 off (false).
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAccessibilitySetCaptionsEnabled(bool enabled)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/atomic.md b/cobalt/site/docs/reference/starboard/modules/14/atomic.md
index 9741f3c..0ed31cb 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/atomic.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/atomic.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: atomic.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `atomic.h`
 
 Defines a set of atomic integer operations that can be used as lightweight
 synchronization or as building blocks for heavier synchronization primitives.
@@ -9,32 +9,32 @@
 supported architectures, so their direct use is not recommended except when
 rigorously deemed absolutely necessary for performance reasons.
 
-## Typedefs ##
+## Typedefs
 
-### SbAtomic64 ###
+### SbAtomic64
 
 64-bit atomic operations (only available on 64-bit processors).
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int64_t SbAtomic64
 ```
 
-### SbAtomicPtr ###
+### SbAtomicPtr
 
 Pointer-sized atomic operations. Forwards to either 32-bit or 64-bit functions
 as appropriate.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbAtomic32 SbAtomicPtr
 ```
 
-## Functions ##
+## Functions
 
-### SbAtomicAcquire_CompareAndSwap ###
+### SbAtomicAcquire_CompareAndSwap
 
 These following lower-level operations are typically useful only to people
 implementing higher-level synchronization operations like spinlocks, mutexes,
@@ -45,23 +45,23 @@
 operation. "Barrier" operations have both "Acquire" and "Release" semantics. A
 SbAtomicMemoryBarrier() has "Barrier" semantics, but does no memory access.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbAtomic32 SbAtomicAcquire_CompareAndSwap(volatile SbAtomic32 *ptr, SbAtomic32 old_value, SbAtomic32 new_value)
 ```
 
-### SbAtomicBarrier_Increment ###
+### SbAtomicBarrier_Increment
 
 Same as SbAtomicNoBarrier_Increment, but with a memory barrier.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbAtomic32 SbAtomicBarrier_Increment(volatile SbAtomic32 *ptr, SbAtomic32 increment)
 ```
 
-### SbAtomicNoBarrier_CompareAndSwap ###
+### SbAtomicNoBarrier_CompareAndSwap
 
 Atomically execute: result = *ptr; if (*ptr == old_value) *ptr = new_value;
 return result;
@@ -71,39 +71,39 @@
 
 This routine implies no memory barriers.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbAtomic32 SbAtomicNoBarrier_CompareAndSwap(volatile SbAtomic32 *ptr, SbAtomic32 old_value, SbAtomic32 new_value)
 ```
 
-### SbAtomicNoBarrier_Exchange ###
+### SbAtomicNoBarrier_Exchange
 
 Atomically store new_value into *ptr, returning the previous value held in *ptr.
 This routine implies no memory barriers.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbAtomic32 SbAtomicNoBarrier_Exchange(volatile SbAtomic32 *ptr, SbAtomic32 new_value)
 ```
 
-### SbAtomicNoBarrier_Increment ###
+### SbAtomicNoBarrier_Increment
 
 Atomically increment *ptr by "increment". Returns the new value of *ptr with the
 increment applied. This routine implies no memory barriers.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbAtomic32 SbAtomicNoBarrier_Increment(volatile SbAtomic32 *ptr, SbAtomic32 increment)
 ```
 
-### SbAtomicRelease_CompareAndSwap8 ###
+### SbAtomicRelease_CompareAndSwap8
 
 Overloaded functions for Atomic8.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbAtomic8 SbAtomicRelease_CompareAndSwap8(volatile SbAtomic8 *ptr, SbAtomic8 old_value, SbAtomic8 new_value)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/audio_sink.md b/cobalt/site/docs/reference/starboard/modules/14/audio_sink.md
index b0e652f..9277c70 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/audio_sink.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/audio_sink.md
@@ -1,53 +1,53 @@
----
-layout: doc
-title: "Starboard Module Reference: audio_sink.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `audio_sink.h`
 
 Provides an interface to output raw audio data.
 
-## Macros ##
+## Macros
 
-### kSbAudioSinkInvalid ###
+### kSbAudioSinkInvalid
 
 Well-defined value for an invalid audio sink.
 
-## Typedefs ##
+## Typedefs
 
-### SbAudioSink ###
+### SbAudioSink
 
 An opaque handle to an implementation-private structure representing an audio
 sink.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbAudioSinkPrivate* SbAudioSink
 ```
 
-### SbAudioSinkConsumeFramesFunc ###
+### SbAudioSinkConsumeFramesFunc
 
 Callback used to report frames consumed. The consumed frames will be removed
 from the source frame buffer to free space for new audio frames.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbAudioSinkConsumeFramesFunc) (int frames_consumed, void *context)
 ```
 
-### SbAudioSinkFrameBuffers ###
+### SbAudioSinkFrameBuffers
 
 An array of frame buffers. For interleaved audio streams, there will be only one
 element in the array. For planar audio streams, the number of elements in the
 array equal to the number of channels.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void** SbAudioSinkFrameBuffers
 ```
 
-### SbAudioSinkUpdateSourceStatusFunc ###
+### SbAudioSinkUpdateSourceStatusFunc
 
 Callback being called periodically to retrieve the status of the audio source.
 The first two output parameters indicating the filling level of the audio frame
@@ -64,15 +64,15 @@
 NULL. Note that this function only reports the status of the source, it doesn't
 remove audio data from the source frame buffer.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbAudioSinkUpdateSourceStatusFunc) (int *frames_in_buffer, int *offset_in_frames, bool *is_playing, bool *is_eos_reached, void *context)
 ```
 
-## Functions ##
+## Functions
 
-### SbAudioSinkCreate ###
+### SbAudioSinkCreate
 
 Creates an audio sink for the specified `channels` and `sampling_frequency_hz`,
 acquires all resources needed to operate the audio sink, and returns an opaque
@@ -113,13 +113,13 @@
     value that is passed back to all callbacks and is generally used to point at
     a class or struct that contains state associated with the audio sink.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbAudioSink SbAudioSinkCreate(int channels, int sampling_frequency_hz, SbMediaAudioSampleType audio_sample_type, SbMediaAudioFrameStorageType audio_frame_storage_type, SbAudioSinkFrameBuffers frame_buffers, int frames_per_channel, SbAudioSinkUpdateSourceStatusFunc update_source_status_func, SbAudioSinkConsumeFramesFunc consume_frames_func, void *context)
 ```
 
-### SbAudioSinkDestroy ###
+### SbAudioSinkDestroy
 
 Destroys `audio_sink`, freeing all associated resources. Before returning, the
 function waits until all callbacks that are in progress have finished. After the
@@ -132,24 +132,24 @@
 
 `audio_sink`: The audio sink to destroy.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbAudioSinkDestroy(SbAudioSink audio_sink)
 ```
 
-### SbAudioSinkGetMaxChannels ###
+### SbAudioSinkGetMaxChannels
 
 Returns the maximum number of channels supported on the platform. For example,
 the number would be `2` if the platform only supports stereo.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbAudioSinkGetMaxChannels()
 ```
 
-### SbAudioSinkGetMinBufferSizeInFrames ###
+### SbAudioSinkGetMinBufferSizeInFrames
 
 Returns the minimum frames required by audio sink to play without underflows.
 Returns -1, if `channels`, `sample_type` or `sampling_frequency_hz` is not
@@ -162,52 +162,52 @@
 audio data being streamed. For example, 22,000 Hz means 22,000 sample elements
 represents one second of audio data.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbAudioSinkGetMinBufferSizeInFrames(int channels, SbMediaAudioSampleType sample_type, int sampling_frequency_hz)
 ```
 
-### SbAudioSinkGetNearestSupportedSampleFrequency ###
+### SbAudioSinkGetNearestSupportedSampleFrequency
 
 Returns the supported sample rate closest to `sampling_frequency_hz`. On
 platforms that don't support all sample rates, it is the caller's responsibility
 to resample the audio frames into the supported sample rate returned by this
 function.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbAudioSinkGetNearestSupportedSampleFrequency(int sampling_frequency_hz)
 ```
 
-### SbAudioSinkIsAudioFrameStorageTypeSupported ###
+### SbAudioSinkIsAudioFrameStorageTypeSupported
 
 Indicates whether `audio_frame_storage_type` is supported on this platform.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAudioSinkIsAudioFrameStorageTypeSupported(SbMediaAudioFrameStorageType audio_frame_storage_type)
 ```
 
-### SbAudioSinkIsAudioSampleTypeSupported ###
+### SbAudioSinkIsAudioSampleTypeSupported
 
 Indicates whether `audio_sample_type` is supported on this platform.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAudioSinkIsAudioSampleTypeSupported(SbMediaAudioSampleType audio_sample_type)
 ```
 
-### SbAudioSinkIsValid ###
+### SbAudioSinkIsValid
 
 Indicates whether the given audio sink handle is valid.
 
 `audio_sink`: The audio sink handle to check.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAudioSinkIsValid(SbAudioSink audio_sink)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/byte_swap.md b/cobalt/site/docs/reference/starboard/modules/14/byte_swap.md
index c83927d..72dc932 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/byte_swap.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/byte_swap.md
@@ -1,74 +1,74 @@
----
-layout: doc
-title: "Starboard Module Reference: byte_swap.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `byte_swap.h`
 
 Specifies functions for swapping byte order. These functions are used to deal
 with endianness when performing I/O.
 
-## Functions ##
+## Functions
 
-### SbByteSwapS16 ###
+### SbByteSwapS16
 
 Unconditionally swaps the byte order in signed 16-bit `value`. `value`: The
 value for which the byte order will be swapped.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int16_t SbByteSwapS16(int16_t value)
 ```
 
-### SbByteSwapS32 ###
+### SbByteSwapS32
 
 Unconditionally swaps the byte order in signed 32-bit `value`. `value`: The
 value for which the byte order will be swapped.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int32_t SbByteSwapS32(int32_t value)
 ```
 
-### SbByteSwapS64 ###
+### SbByteSwapS64
 
 Unconditionally swaps the byte order in signed 64-bit `value`. `value`: The
 value for which the byte order will be swapped.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbByteSwapS64(int64_t value)
 ```
 
-### SbByteSwapU16 ###
+### SbByteSwapU16
 
 Unconditionally swaps the byte order in unsigned 16-bit `value`. `value`: The
 value for which the byte order will be swapped.
 
-#### Declaration ####
+#### Declaration
 
 ```
 uint16_t SbByteSwapU16(uint16_t value)
 ```
 
-### SbByteSwapU32 ###
+### SbByteSwapU32
 
 Unconditionally swaps the byte order in unsigned 32-bit `value`. `value`: The
 value for which the byte order will be swapped.
 
-#### Declaration ####
+#### Declaration
 
 ```
 uint32_t SbByteSwapU32(uint32_t value)
 ```
 
-### SbByteSwapU64 ###
+### SbByteSwapU64
 
 Unconditionally swaps the byte order in unsigned 64-bit `value`. `value`: The
 value for which the byte order will be swapped.
 
-#### Declaration ####
+#### Declaration
 
 ```
 uint64_t SbByteSwapU64(uint64_t value)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/condition_variable.md b/cobalt/site/docs/reference/starboard/modules/14/condition_variable.md
index e58e106..2d8f30b 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/condition_variable.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/condition_variable.md
@@ -1,23 +1,23 @@
----
-layout: doc
-title: "Starboard Module Reference: condition_variable.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `condition_variable.h`
 
 Defines an interface for condition variables.
 
-## Macros ##
+## Macros
 
-### SB_CONDITION_VARIABLE_MAX_SIZE ###
+### SB_CONDITION_VARIABLE_MAX_SIZE
 
 Max size of the SbConditionVariable type.
 
-## Enums ##
+## Enums
 
-### SbConditionVariableResult ###
+### SbConditionVariableResult
 
 Enumeration of possible results from waiting on a condvar.
 
-#### Values ####
+#### Values
 
 *   `kSbConditionVariableSignaled`
 
@@ -30,22 +30,22 @@
     The wait failed, either because a parameter wasn't valid, or the condition
     variable has already been destroyed, or something similar.
 
-## Typedefs ##
+## Typedefs
 
-### SbConditionVariable ###
+### SbConditionVariable
 
 An opaque handle to a condition variable type with reserved memory buffer of
 size SB_CONDITION_VARIABLE_MAX_SIZE and aligned at void pointer type.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef union SbConditionVariable  SbConditionVariable
 ```
 
-## Functions ##
+## Functions
 
-### SbConditionVariableBroadcast ###
+### SbConditionVariableBroadcast
 
 Broadcasts to all current waiters of `condition` to stop waiting. This function
 wakes all of the threads waiting on `condition` while SbConditionVariableSignal
@@ -53,26 +53,26 @@
 
 `condition`: The condition that should no longer be waited for.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbConditionVariableBroadcast(SbConditionVariable *condition)
 ```
 
-### SbConditionVariableCreate ###
+### SbConditionVariableCreate
 
 Creates a new condition variable to work with `opt_mutex`, which may be null,
 placing the newly created condition variable in `out_condition`.
 
 The return value indicates whether the condition variable could be created.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbConditionVariableCreate(SbConditionVariable *out_condition, SbMutex *opt_mutex)
 ```
 
-### SbConditionVariableDestroy ###
+### SbConditionVariableDestroy
 
 Destroys the specified SbConditionVariable . The return value indicates whether
 the destruction was successful. The behavior is undefined if other threads are
@@ -81,23 +81,23 @@
 `condition`: The SbConditionVariable to be destroyed. This invalidates the
 condition variable.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbConditionVariableDestroy(SbConditionVariable *condition)
 ```
 
-### SbConditionVariableIsSignaled ###
+### SbConditionVariableIsSignaled
 
 Returns whether the given result is a success.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbConditionVariableIsSignaled(SbConditionVariableResult result)
 ```
 
-### SbConditionVariableSignal ###
+### SbConditionVariableSignal
 
 Signals the next waiter of `condition` to stop waiting. This function wakes a
 single thread waiting on `condition` while SbConditionVariableBroadcast wakes
@@ -105,24 +105,24 @@
 
 `condition`: The condition that the waiter should stop waiting for.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbConditionVariableSignal(SbConditionVariable *condition)
 ```
 
-### SbConditionVariableWait ###
+### SbConditionVariableWait
 
 Waits for `condition`, releasing the held lock `mutex`, blocking indefinitely,
 and returning the result. Behavior is undefined if `mutex` is not held.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbConditionVariableResult SbConditionVariableWait(SbConditionVariable *condition, SbMutex *mutex)
 ```
 
-### SbConditionVariableWaitTimed ###
+### SbConditionVariableWaitTimed
 
 Waits for `condition`, releasing the held lock `mutex`, blocking up to
 `timeout_duration`, and returning the acquisition result. Behavior is undefined
@@ -133,7 +133,7 @@
 function returns as quickly as possible with a kSbConditionVariableTimedOut
 result.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbConditionVariableResult SbConditionVariableWaitTimed(SbConditionVariable *condition, SbMutex *mutex, SbTime timeout_duration)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/configuration.md b/cobalt/site/docs/reference/starboard/modules/14/configuration.md
index 630f1cf..d0ba3c7 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/configuration.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/configuration.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: configuration.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `configuration.h`
 
 Provides a description of the current platform in lurid detail so that common
 code never needs to actually know what the current operating system and
@@ -13,117 +13,117 @@
 narrowly-defined configuration features, but it retains porting control in
 Starboard.
 
-## Macros ##
+## Macros
 
-### SB_ALIGNAS(byte_alignment) ###
+### SB_ALIGNAS(byte_alignment)
 
 Specifies the alignment for a class, struct, union, enum, class/struct field, or
 stack variable.
 
-### SB_ALIGNOF(type) ###
+### SB_ALIGNOF(type)
 
 Returns the alignment required for any instance of the type indicated by `type`.
 
-### SB_ARRAY_SIZE(array) ###
+### SB_ARRAY_SIZE(array)
 
 A constant expression that evaluates to the size_t size of a statically-sized
 array.
 
-### SB_ARRAY_SIZE_INT(array) ###
+### SB_ARRAY_SIZE_INT(array)
 
 A constant expression that evaluates to the int size of a statically-sized
 array.
 
-### SB_CAN(SB_FEATURE) ###
+### SB_CAN(SB_FEATURE)
 
 Determines a compile-time capability of the system.
 
-### SB_COMPILE_ASSERT(expr, msg) ###
+### SB_COMPILE_ASSERT(expr, msg)
 
 Will cause a compiler error with `msg` if `expr` is false. `msg` must be a valid
 identifier, and must be a unique type in the scope of the declaration.
 
-### SB_DEPRECATED(FUNC) ###
+### SB_DEPRECATED(FUNC)
 
 SB_DEPRECATED(int Foo(int bar)); Annotates the function as deprecated, which
 will trigger a compiler warning when referenced.
 
-### SB_DEPRECATED_EXTERNAL(FUNC) ###
+### SB_DEPRECATED_EXTERNAL(FUNC)
 
 SB_DEPRECATED_EXTERNAL(...) annotates the function as deprecated for external
 clients, but not deprecated for starboard.
 
-### SB_EXPERIMENTAL_API_VERSION ###
+### SB_EXPERIMENTAL_API_VERSION
 
 The API version that is currently open for changes, and therefore is not stable
 or frozen. Production-oriented ports should avoid declaring that they implement
 the experimental Starboard API version.
 
-### SB_FUNCTION ###
+### SB_FUNCTION
 
 Whether we use **PRETTY_FUNCTION** PRETTY_FUNCTION or **FUNCTION** FUNCTION for
 logging.
 
-### SB_HAS(SB_FEATURE) ###
+### SB_HAS(SB_FEATURE)
 
 Determines at compile-time whether this platform has a standard feature or
 header available.
 
-### SB_HAS_64_BIT_ATOMICS ###
+### SB_HAS_64_BIT_ATOMICS
 
 Whether the current platform has 64-bit atomic operations.
 
-### SB_HAS_GLES2 ###
+### SB_HAS_GLES2
 
 Specifies whether this platform has a performant OpenGL ES 2 implementation,
 which allows client applications to use GL rendering paths. Derived from the gyp
 variable `gl_type` gl_type which indicates what kind of GL implementation is
 available.
 
-### SB_HAS_QUIRK(SB_FEATURE) ###
+### SB_HAS_QUIRK(SB_FEATURE)
 
 Determines at compile-time whether this platform has a quirk.
 
-### SB_INT64_C(x) ###
+### SB_INT64_C(x)
 
 Declare numeric literals of signed 64-bit type.
 
-### SB_IS(SB_FEATURE) ###
+### SB_IS(SB_FEATURE)
 
 Determines at compile-time an inherent aspect of this platform.
 
-### SB_LIKELY(x) ###
+### SB_LIKELY(x)
 
 Macro for hinting that an expression is likely to be true.
 
-### SB_MAXIMUM_API_VERSION ###
+### SB_MAXIMUM_API_VERSION
 
 The maximum API version allowed by this version of the Starboard headers,
 inclusive.
 
-### SB_MINIMUM_API_VERSION ###
+### SB_MINIMUM_API_VERSION
 
 The minimum API version allowed by this version of the Starboard headers,
 inclusive.
 
-### SB_NORETURN ###
+### SB_NORETURN
 
 Macro to annotate a function as noreturn, which signals to the compiler that the
 function cannot return.
 
-### SB_OVERRIDE ###
+### SB_OVERRIDE
 
 Declares a function as overriding a virtual function on compilers that support
 it.
 
-### SB_PREFERRED_RGBA_BYTE_ORDER_RGBA ###
+### SB_PREFERRED_RGBA_BYTE_ORDER_RGBA
 
 An enumeration of values for the kSbPreferredByteOrder configuration variable.
 Setting this up properly means avoiding slow color swizzles when passing pixel
 data from one library to another. Note that these definitions are in byte-order
 and so are endianness-independent.
 
-### SB_PRINTF_FORMAT(format_param, dots_param) ###
+### SB_PRINTF_FORMAT(format_param, dots_param)
 
 Tells the compiler a function is using a printf-style format string.
 `format_param` is the one-based index of the format string parameter;
@@ -132,7 +132,7 @@
 but matches what the system C headers do.) (Partially taken from
 base/compiler_specific.h)
 
-### SB_RESTRICT ###
+### SB_RESTRICT
 
 Include the platform-specific configuration. This macro is set by GN in
 starboard/build/config/BUILD.gn and passed in on the command line for all
@@ -140,29 +140,29 @@
 that the compiler can make certain optimizations because it knows the pointers
 are unique.
 
-### SB_SIZE_OF(DATATYPE) ###
+### SB_SIZE_OF(DATATYPE)
 
 Determines at compile-time the size of a data type, or 0 if the data type that
 was specified was invalid.
 
-### SB_STRINGIFY(x) ###
+### SB_STRINGIFY(x)
 
 Standard CPP trick to stringify an evaluated macro definition.
 
-### SB_UINT64_C(x) ###
+### SB_UINT64_C(x)
 
 Declare numeric literals of unsigned 64-bit type.
 
-### SB_UNLIKELY(x) ###
+### SB_UNLIKELY(x)
 
 Macro for hinting that an expression is likely to be false.
 
-### SB_UNREFERENCED_PARAMETER(x) ###
+### SB_UNREFERENCED_PARAMETER(x)
 
 Trivially references a parameter that is otherwise unreferenced, preventing a
 compiler warning on some platforms.
 
-### SB_WARN_UNUSED_RESULT ###
+### SB_WARN_UNUSED_RESULT
 
 Causes the annotated (at the end) function to generate a warning if the result
 is not accessed.
diff --git a/cobalt/site/docs/reference/starboard/modules/14/configuration_constants.md b/cobalt/site/docs/reference/starboard/modules/14/configuration_constants.md
index 51212e9..0f61ebf 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/configuration_constants.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/configuration_constants.md
@@ -1,117 +1,117 @@
----
-layout: doc
-title: "Starboard Module Reference: configuration_constants.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `configuration_constants.h`
 
 Declares all configuration variables we will need to use at runtime. These
 variables describe the current platform in detail to allow cobalt to make
 runtime decisions based on per platform configurations.
 
-## Variables ##
+## Variables
 
-### kSbDefaultMmapThreshold ###
+### kSbDefaultMmapThreshold
 
 Determines the threshold of allocation size that should be done with mmap (if
 available), rather than allocated within the core heap.
 
-### kSbFileAltSepChar ###
+### kSbFileAltSepChar
 
 The current platform's alternate file path component separator character. This
 is like SB_FILE_SEP_CHAR, except if your platform supports an alternate
 character, then you can place that here. For example, on windows machines, the
 primary separator character is probably '\', but the alternate is '/'.
 
-### kSbFileAltSepString ###
+### kSbFileAltSepString
 
 The string form of SB_FILE_ALT_SEP_CHAR.
 
-### kSbFileMaxName ###
+### kSbFileMaxName
 
 The current platform's maximum length of the name of a single directory entry,
 not including the absolute path.
 
-### kSbFileMaxOpen ###
+### kSbFileMaxOpen
 
 The current platform's maximum number of files that can be opened at the same
 time by one process.
 
-### kSbFileMaxPath ###
+### kSbFileMaxPath
 
 The current platform's maximum length of an absolute path.
 
-### kSbFileSepChar ###
+### kSbFileSepChar
 
 The current platform's file path component separator character. This is the
 character that appears after a directory in a file path. For example, the
 absolute canonical path of the file "/path/to/a/file.txt" uses '/' as a path
 component separator character.
 
-### kSbFileSepString ###
+### kSbFileSepString
 
 The string form of SB_FILE_SEP_CHAR.
 
-### kSbHasAc3Audio ###
+### kSbHasAc3Audio
 
 Allow ac3 and ec3 support
 
-### kSbHasMediaWebmVp9Support ###
+### kSbHasMediaWebmVp9Support
 
 Specifies whether this platform has webm/vp9 support. This should be set to non-
 zero on platforms with webm/vp9 support.
 
-### kSbHasThreadPrioritySupport ###
+### kSbHasThreadPrioritySupport
 
 Whether the current platform supports thread priorities.
 
-### kSbMallocAlignment ###
+### kSbMallocAlignment
 
 Determines the alignment that allocations should have on this platform.
 
-### kSbMaxSystemPathCacheDirectorySize ###
+### kSbMaxSystemPathCacheDirectorySize
 
 The maximum size the cache directory is allowed to use in bytes.
 
-### kSbMaxThreadLocalKeys ###
+### kSbMaxThreadLocalKeys
 
 The maximum number of thread local storage keys supported by this platform. This
 comes from _POSIX_THREAD_KEYS_MAX. The value of PTHREAD_KEYS_MAX is higher, but
 unit tests show that the implementation doesn't support nearly as many keys.
 
-### kSbMaxThreadNameLength ###
+### kSbMaxThreadNameLength
 
 The maximum length of the name for a thread, including the NULL-terminator.
 
-### kSbMaxThreads ###
+### kSbMaxThreads
 
 Defines the maximum number of simultaneous threads for this platform. Some
 platforms require sharing thread handles with other kinds of system handles,
 like mutexes, so we want to keep this manageable.
 
-### kSbMediaMaxAudioBitrateInBitsPerSecond ###
+### kSbMediaMaxAudioBitrateInBitsPerSecond
 
 The maximum audio bitrate the platform can decode. The following value equals to
 5M bytes per seconds which is more than enough for compressed audio.
 
-### kSbMediaMaxVideoBitrateInBitsPerSecond ###
+### kSbMediaMaxVideoBitrateInBitsPerSecond
 
 The maximum video bitrate the platform can decode. The following value equals to
 8M bytes per seconds which is more than enough for compressed video.
 
-### kSbMediaVideoFrameAlignment ###
+### kSbMediaVideoFrameAlignment
 
 Specifies how video frame buffers must be aligned on this platform.
 
-### kSbMemoryLogPath ###
+### kSbMemoryLogPath
 
 Defines the path where memory debugging logs should be written to.
 
-### kSbMemoryPageSize ###
+### kSbMemoryPageSize
 
 The memory page size, which controls the size of chunks on memory that
 allocators deal with, and the alignment of those chunks. This doesn't have to be
 the hardware-defined physical page size, but it should be a multiple of it.
 
-### kSbNetworkReceiveBufferSize ###
+### kSbNetworkReceiveBufferSize
 
 Specifies the network receive buffer size in bytes, set via
 SbSocketSetReceiveBufferSize().
@@ -126,7 +126,7 @@
 If your platform does not have a good TCP auto-tuning mechanism, a setting of
 (128 * 1024) here is recommended.
 
-### kSbPathSepChar ###
+### kSbPathSepChar
 
 The current platform's search path component separator character. When
 specifying an ordered list of absolute paths of directories to search for a
@@ -134,16 +134,16 @@
 the search path of "/etc/search/first:/etc/search/second" uses ':' as a search
 path component separator character.
 
-### kSbPathSepString ###
+### kSbPathSepString
 
 The string form of SB_PATH_SEP_CHAR.
 
-### kSbPreferredRgbaByteOrder ###
+### kSbPreferredRgbaByteOrder
 
 Specifies the preferred byte order of color channels in a pixel. Refer to
 starboard/configuration.h for the possible values. EGL/GLES platforms should
 generally prefer a byte order of RGBA, regardless of endianness.
 
-### kSbUserMaxSignedIn ###
+### kSbUserMaxSignedIn
 
 The maximum number of users that can be signed in at the same time.
diff --git a/cobalt/site/docs/reference/starboard/modules/14/cpu_features.md b/cobalt/site/docs/reference/starboard/modules/14/cpu_features.md
index 7a4bcc0..e2aa35f 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/cpu_features.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/cpu_features.md
@@ -1,13 +1,13 @@
----
-layout: doc
-title: "Starboard Module Reference: cpu_features.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
 
-## Structs ##
+# Starboard Module Reference: `cpu_features.h`
 
-### SbCPUFeatures ###
+## Structs
 
-#### Members ####
+### SbCPUFeatures
+
+#### Members
 
 *   `SbCPUFeaturesArchitecture architecture`
 
@@ -54,9 +54,9 @@
     defined as a macro.
 *   `SbCPUFeaturesX86 x86`
 
-### SbCPUFeaturesARM ###
+### SbCPUFeaturesARM
 
-#### Members ####
+#### Members
 
 *   `int16_t implementer`
 
@@ -98,7 +98,7 @@
     SDIV and UDIV hardware division in ARM mode.
 *   `bool has_aes`
 
-    ###### Arm 64 feature flags  ######
+    ###### Arm 64 feature flags
 
     AES instructions.
 *   `bool has_crc32`
@@ -114,17 +114,17 @@
 
     64-bit PMULL and PMULL2 instructions.
 
-### SbCPUFeaturesMIPS ###
+### SbCPUFeaturesMIPS
 
-#### Members ####
+#### Members
 
 *   `bool has_msa`
 
     MIPS SIMD Architecture (MSA).
 
-### SbCPUFeaturesX86 ###
+### SbCPUFeaturesX86
 
-#### Members ####
+#### Members
 
 *   `const char * vendor`
 
@@ -244,9 +244,9 @@
 
     SAHF in long mode.
 
-## Functions ##
+## Functions
 
-### SbCPUFeaturesGet ###
+### SbCPUFeaturesGet
 
 Retrieve the underlying CPU features and place it in `features`, which must not
 be NULL.
@@ -254,7 +254,7 @@
 If this function returns false, it means the CPU architecture is unknown and all
 fields in `features` are invalid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbCPUFeaturesGet(SbCPUFeatures *features)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/decode_target.md b/cobalt/site/docs/reference/starboard/modules/14/decode_target.md
index a237ad9..56c7afa 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/decode_target.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/decode_target.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: decode_target.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `decode_target.h`
 
 A target for decoding image and video data into. This corresponds roughly to an
 EGLImage, but that extension may not be fully supported on all GL platforms.
@@ -12,7 +12,7 @@
 decoding done directly into this memory, avoiding unnecessary memory copies, and
 also avoiding pushing data between CPU and GPU memory unnecessarily.
 
-## SbDecodeTargetFormat ##
+## SbDecodeTargetFormat
 
 SbDecodeTargets support several different formats that can be used to decode
 into and render from. Some formats may be easier to decode into, and others may
@@ -21,7 +21,7 @@
 Each decoder provides a way to check if a given SbDecodeTargetFormat is
 supported by that decoder.
 
-## SbDecodeTargetGraphicsContextProvider ##
+## SbDecodeTargetGraphicsContextProvider
 
 Some components may need to acquire SbDecodeTargets compatible with a certain
 rendering context, which may need to be created on a particular thread. The
@@ -33,10 +33,9 @@
 EGLContext held current. This may be useful if your SbDecodeTarget creation code
 needs to execute GLES commands like, for example, glGenTextures().
 
-The primary usage is likely to be the the SbPlayer implementation on some
-platforms.
+The primary usage is likely to be the SbPlayer implementation on some platforms.
 
-## SbDecodeTarget Example ##
+## SbDecodeTarget Example
 
 Let's say that we are an application and we would like to use the interface
 defined in starboard/image.h to decode an imaginary "image/foo" image type.
@@ -79,15 +78,15 @@
     info.planes[kSbDecodeTargetPlaneRGBA].texture;
 ```
 
-## Macros ##
+## Macros
 
-### kSbDecodeTargetInvalid ###
+### kSbDecodeTargetInvalid
 
 Well-defined value for an invalid decode target handle.
 
-## Enums ##
+## Enums
 
-### SbDecodeTargetFormat ###
+### SbDecodeTargetFormat
 
 The list of all possible decoder target formats. An SbDecodeTarget consists of
 one or more planes of data, each plane corresponding with a surface. For some
@@ -96,7 +95,7 @@
 NOTE: For enumeration entries with an alpha component, the alpha will always be
 premultiplied unless otherwise explicitly specified.
 
-#### Values ####
+#### Values
 
 *   `kSbDecodeTargetFormat1PlaneRGBA`
 
@@ -137,11 +136,11 @@
 
     An invalid decode target format.
 
-### SbDecodeTargetPlane ###
+### SbDecodeTargetPlane
 
 All the planes supported by SbDecodeTarget.
 
-#### Values ####
+#### Values
 
 *   `kSbDecodeTargetPlaneRGBA`
 
@@ -162,45 +161,45 @@
 
     The V plane for 3-plane YUV formats.
 
-## Typedefs ##
+## Typedefs
 
-### SbDecodeTarget ###
+### SbDecodeTarget
 
 A handle to a target for image data decoding.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbDecodeTargetPrivate* SbDecodeTarget
 ```
 
-### SbDecodeTargetGlesContextRunner ###
+### SbDecodeTargetGlesContextRunner
 
 Signature for a function provided by the application to the Starboard
 implementation that will let the Starboard implementation run arbitrary code on
 the application's renderer thread with the application's EGLContext held
 current.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDecodeTargetGlesContextRunner) (struct SbDecodeTargetGraphicsContextProvider *graphics_context_provider, SbDecodeTargetGlesContextRunnerTarget target_function, void *target_function_context)
 ```
 
-### SbDecodeTargetGlesContextRunnerTarget ###
+### SbDecodeTargetGlesContextRunnerTarget
 
 Signature for a Starboard implementation function that is to be run by a
 SbDecodeTargetGlesContextRunner callback.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDecodeTargetGlesContextRunnerTarget) (void *gles_context_runner_target_context)
 ```
 
-## Structs ##
+## Structs
 
-### SbDecodeTargetGraphicsContextProvider ###
+### SbDecodeTargetGraphicsContextProvider
 
 In general, the SbDecodeTargetGraphicsContextProvider structure provides
 information about the graphics context that will be used to render
@@ -210,7 +209,7 @@
 to all Starboard functions that might create SbDecodeTargets (e.g.
 SbImageDecode()).
 
-#### Members ####
+#### Members
 
 *   `void * egl_display`
 
@@ -233,12 +232,12 @@
     Context data that is to be passed in to `gles_context_runner` when it is
     invoked.
 
-### SbDecodeTargetInfo ###
+### SbDecodeTargetInfo
 
 Contains all information about a decode target, including all of its planes.
 This can be queried via calls to SbDecodeTargetGetInfo().
 
-#### Members ####
+#### Members
 
 *   `SbDecodeTargetFormat format`
 
@@ -267,11 +266,11 @@
     kSbDecodeTargetPlaneU, kSbDecodeTargetPlaneV} associated with this decode
     target.
 
-### SbDecodeTargetInfoContentRegion ###
+### SbDecodeTargetInfoContentRegion
 
 Defines a rectangular content region within a SbDecodeTargetInfoPlane structure.
 
-#### Members ####
+#### Members
 
 *   `float left`
 
@@ -283,11 +282,11 @@
 *   `float right`
 *   `float bottom`
 
-### SbDecodeTargetInfoPlane ###
+### SbDecodeTargetInfoPlane
 
 Defines an image plane within a SbDecodeTargetInfo object.
 
-#### Members ####
+#### Members
 
 *   `uint32_t texture`
 
@@ -317,53 +316,53 @@
     these parameters are number of pixels. The range for left/right is [0,
     width], and for top/bottom it is [0, height].
 
-## Functions ##
+## Functions
 
-### PrivateDecodeTargetReleaser ###
+### PrivateDecodeTargetReleaser
 
 This function is just an implementation detail of
 SbDecodeTargetReleaseInGlesContext() and should not be called directly.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static void PrivateDecodeTargetReleaser(void *context)
 ```
 
-### SbDecodeTargetGetInfo ###
+### SbDecodeTargetGetInfo
 
 Writes all information about `decode_target` into `out_info`. The
 `decode_target` must not be kSbDecodeTargetInvalid. The `out_info` pointer must
 not be NULL. Returns false if the provided `out_info` structure is not zero
 initialized.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbDecodeTargetGetInfo(SbDecodeTarget decode_target, SbDecodeTargetInfo *out_info)
 ```
 
-### SbDecodeTargetIsFormatValid ###
+### SbDecodeTargetIsFormatValid
 
 Returns whether a given format is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbDecodeTargetIsFormatValid(SbDecodeTargetFormat format)
 ```
 
-### SbDecodeTargetIsValid ###
+### SbDecodeTargetIsValid
 
 Returns whether the given file handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbDecodeTargetIsValid(SbDecodeTarget handle)
 ```
 
-### SbDecodeTargetRelease ###
+### SbDecodeTargetRelease
 
 Returns ownership of `decode_target` to the Starboard implementation. This
 function will likely result in the destruction of the SbDecodeTarget and all its
@@ -371,31 +370,31 @@
 reference count. In the case where SB_HAS(GLES2), this function must be called
 on a thread with the context
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbDecodeTargetRelease(SbDecodeTarget decode_target)
 ```
 
-### SbDecodeTargetReleaseInGlesContext ###
+### SbDecodeTargetReleaseInGlesContext
 
 Helper function that is possibly useful to Starboard implementations that will
 release a decode target on the thread with the GLES context current.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static void SbDecodeTargetReleaseInGlesContext(SbDecodeTargetGraphicsContextProvider *provider, SbDecodeTarget decode_target)
 ```
 
-### SbDecodeTargetRunInGlesContext ###
+### SbDecodeTargetRunInGlesContext
 
 Inline convenience function to run an arbitrary
 SbDecodeTargetGlesContextRunnerTarget function through a
 SbDecodeTargetGraphicsContextProvider . This is intended to be called by
 Starboard implementations, if it is necessary.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static void SbDecodeTargetRunInGlesContext(SbDecodeTargetGraphicsContextProvider *provider, SbDecodeTargetGlesContextRunnerTarget target, void *target_context)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/directory.md b/cobalt/site/docs/reference/starboard/modules/14/directory.md
index dcdf48a..6f845f6 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/directory.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/directory.md
@@ -1,56 +1,56 @@
----
-layout: doc
-title: "Starboard Module Reference: directory.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `directory.h`
 
 Provides directory listing functions.
 
-## Macros ##
+## Macros
 
-### kSbDirectoryInvalid ###
+### kSbDirectoryInvalid
 
 Well-defined value for an invalid directory stream handle.
 
-## Typedefs ##
+## Typedefs
 
-### SbDirectory ###
+### SbDirectory
 
 A handle to an open directory stream.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbDirectoryPrivate* SbDirectory
 ```
 
-## Functions ##
+## Functions
 
-### SbDirectoryCanOpen ###
+### SbDirectoryCanOpen
 
 Indicates whether SbDirectoryOpen is allowed for the given `path`.
 
 `path`: The path to be checked.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbDirectoryCanOpen(const char *path)
 ```
 
-### SbDirectoryClose ###
+### SbDirectoryClose
 
 Closes an open directory stream handle. The return value indicates whether the
 directory was closed successfully.
 
 `directory`: The directory stream handle to close.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbDirectoryClose(SbDirectory directory)
 ```
 
-### SbDirectoryCreate ###
+### SbDirectoryCreate
 
 Creates the directory `path`, assuming the parent directory already exists. This
 function returns `true` if the directory now exists (even if it existed before)
@@ -58,13 +58,13 @@
 
 `path`: The path to be created.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbDirectoryCreate(const char *path)
 ```
 
-### SbDirectoryGetNext ###
+### SbDirectoryGetNext
 
 Populates `out_entry` with the next entry in the specified directory stream, and
 moves the stream forward by one entry.
@@ -83,23 +83,23 @@
 `out_entry_size`: The size of the space allocated for `out_entry`. This should
 be at least equal to kSbFileMaxName.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbDirectoryGetNext(SbDirectory directory, char *out_entry, size_t out_entry_size)
 ```
 
-### SbDirectoryIsValid ###
+### SbDirectoryIsValid
 
 Returns whether the given directory stream handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbDirectoryIsValid(SbDirectory directory)
 ```
 
-### SbDirectoryOpen ###
+### SbDirectoryOpen
 
 Opens the given existing directory for listing. This function returns
 kSbDirectoryInvalidHandle if it is not successful.
@@ -110,7 +110,7 @@
 `out_error`: An output parameter that, in case of an error, is set to the reason
 that the directory could not be opened.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbDirectory SbDirectoryOpen(const char *path, SbFileError *out_error)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/drm.md b/cobalt/site/docs/reference/starboard/modules/14/drm.md
index fbb92f9..f42e43b 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/drm.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/drm.md
@@ -1,37 +1,37 @@
----
-layout: doc
-title: "Starboard Module Reference: drm.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `drm.h`
 
 Provides definitions that allow for DRM support, which are common between Player
 and Decoder interfaces.
 
-## Macros ##
+## Macros
 
-### kSbDrmSystemInvalid ###
+### kSbDrmSystemInvalid
 
 An invalid SbDrmSystem.
 
-### kSbDrmTicketInvalid ###
+### kSbDrmTicketInvalid
 
 A ticket for callback invocations initiated by the DRM system.
 
-## Enums ##
+## Enums
 
-### SbDrmEncryptionScheme ###
+### SbDrmEncryptionScheme
 
 Encryption scheme of the input sample, as defined in ISO/IEC 23001 part 7.
 
-#### Values ####
+#### Values
 
 *   `kSbDrmEncryptionSchemeAesCtr`
 *   `kSbDrmEncryptionSchemeAesCbc`
 
-### SbDrmKeyStatus ###
+### SbDrmKeyStatus
 
 Status of a particular media key. [https://w3c.github.io/encrypted-media/#idl-def-MediaKeyStatus](https://w3c.github.io/encrypted-media/#idl-def-MediaKeyStatus)
 
-#### Values ####
+#### Values
 
 *   `kSbDrmKeyStatusUsable`
 *   `kSbDrmKeyStatusExpired`
@@ -41,24 +41,24 @@
 *   `kSbDrmKeyStatusPending`
 *   `kSbDrmKeyStatusError`
 
-### SbDrmSessionRequestType ###
+### SbDrmSessionRequestType
 
 The type of the session request. [https://www.w3.org/TR/encrypted-media/#idl-def-mediakeymessagetype](https://www.w3.org/TR/encrypted-media/#idl-def-mediakeymessagetype)
 
-#### Values ####
+#### Values
 
 *   `kSbDrmSessionRequestTypeLicenseRequest`
 *   `kSbDrmSessionRequestTypeLicenseRenewal`
 *   `kSbDrmSessionRequestTypeLicenseRelease`
 *   `kSbDrmSessionRequestTypeIndividualizationRequest`
 
-### SbDrmStatus ###
+### SbDrmStatus
 
 The status of session related operations. Used by
 `SbDrmSessionUpdateRequestFunc`, `SbDrmSessionUpdatedFunc`, and
 `SbDrmServerCertificateUpdatedFunc` to indicate the status of the operation. [https://w3c.github.io/encrypted-media/#error-names](https://w3c.github.io/encrypted-media/#error-names)
 
-#### Values ####
+#### Values
 
 *   `kSbDrmStatusSuccess`
 *   `kSbDrmStatusTypeError`
@@ -70,42 +70,42 @@
     The following error can be used when the error status cannot be mapped to
     one of the above errors.
 
-## Typedefs ##
+## Typedefs
 
-### SbDrmServerCertificateUpdatedFunc ###
+### SbDrmServerCertificateUpdatedFunc
 
 A callback to notify the caller of SbDrmUpdateServerCertificate() whether the
 update has been successfully updated or not.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDrmServerCertificateUpdatedFunc) (SbDrmSystem drm_system, void *context, int ticket, SbDrmStatus status, const char *error_message)
 ```
 
-### SbDrmSessionClosedFunc ###
+### SbDrmSessionClosedFunc
 
 A callback for signalling that a session has been closed by the SbDrmSystem
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDrmSessionClosedFunc) (SbDrmSystem drm_system, void *context, const void *session_id, int session_id_size)
 ```
 
-### SbDrmSessionKeyStatusesChangedFunc ###
+### SbDrmSessionKeyStatusesChangedFunc
 
 A callback for notifications that the status of one or more keys in a session
 has been changed. All keys of the session and their new status will be passed
 along. Any keys not in the list is considered as deleted.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDrmSessionKeyStatusesChangedFunc) (SbDrmSystem drm_system, void *context, const void *session_id, int session_id_size, int number_of_keys, const SbDrmKeyId *key_ids, const SbDrmKeyStatus *key_statuses)
 ```
 
-### SbDrmSessionUpdateRequestFunc ###
+### SbDrmSessionUpdateRequestFunc
 
 A callback that will receive generated session update request when requested
 from a SbDrmSystem. `drm_system` will be the DRM system that
@@ -128,13 +128,13 @@
 the correct Promise corresponding to the associated
 SbDrmGenerateSessionUpdateRequest().
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDrmSessionUpdateRequestFunc) (SbDrmSystem drm_system, void *context, int ticket, SbDrmStatus status, SbDrmSessionRequestType type, const char *error_message, const void *session_id, int session_id_size, const void *content, int content_size, const char *url)
 ```
 
-### SbDrmSessionUpdatedFunc ###
+### SbDrmSessionUpdatedFunc
 
 A callback for notifications that a session has been added, and subsequent
 encrypted samples are actively ready to be decoded. `drm_system` will be the DRM
@@ -150,37 +150,37 @@
 `status` is `kSbDrmStatusSuccess` or if no error message can be provided.
 `succeeded` is whether the session was successfully updated or not.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDrmSessionUpdatedFunc) (SbDrmSystem drm_system, void *context, int ticket, SbDrmStatus status, const char *error_message, const void *session_id, int session_id_size)
 ```
 
-### SbDrmSystem ###
+### SbDrmSystem
 
 A handle to a DRM system which can be used with either an SbDecoder or an
 SbPlayer.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbDrmSystemPrivate* SbDrmSystem
 ```
 
-## Structs ##
+## Structs
 
-### SbDrmEncryptionPattern ###
+### SbDrmEncryptionPattern
 
 Encryption pattern of the input sample, as defined in ISO/IEC 23001 part 7.
 
-#### Members ####
+#### Members
 
 *   `uint32_t crypt_byte_block`
 *   `uint32_t skip_byte_block`
 
-### SbDrmKeyId ###
+### SbDrmKeyId
 
-#### Members ####
+#### Members
 
 *   `uint8_t identifier`
 
@@ -188,11 +188,11 @@
     PlayReady, this is the license GUID in packed little-endian binary form.
 *   `int identifier_size`
 
-### SbDrmSampleInfo ###
+### SbDrmSampleInfo
 
 All the optional information needed per sample for encrypted samples.
 
-#### Members ####
+#### Members
 
 *   `SbDrmEncryptionScheme encryption_scheme`
 
@@ -217,13 +217,13 @@
     The clear/encrypted mapping of each subsample in this sample. This must be
     an array of `subsample_count` mappings.
 
-### SbDrmSubSampleMapping ###
+### SbDrmSubSampleMapping
 
 A mapping of clear and encrypted bytes for a single subsample. All subsamples
 within a sample must be encrypted with the same encryption parameters. The clear
 bytes always appear first in the sample.
 
-#### Members ####
+#### Members
 
 *   `int32_t clear_byte_count`
 
@@ -232,21 +232,21 @@
 
     How many bytes of the corresponding subsample are encrypted.
 
-## Functions ##
+## Functions
 
-### SbDrmCloseSession ###
+### SbDrmCloseSession
 
 Clear any internal states/resources related to the specified `session_id`.
 
 `drm_system` must not be `kSbDrmSystemInvalid`. `session_id` must not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbDrmCloseSession(SbDrmSystem drm_system, const void *session_id, int session_id_size)
 ```
 
-### SbDrmDestroySystem ###
+### SbDrmDestroySystem
 
 Destroys `drm_system`, which implicitly removes all keys installed in it and
 invalidates all outstanding session update requests. A DRM system cannot be
@@ -258,13 +258,13 @@
 
 `drm_system`: The DRM system to be destroyed. Must not be `kSbDrmSystemInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbDrmDestroySystem(SbDrmSystem drm_system)
 ```
 
-### SbDrmGenerateSessionUpdateRequest ###
+### SbDrmGenerateSessionUpdateRequest
 
 Asynchronously generates a session update request payload for
 `initialization_data`, of `initialization_data_size`, in case sensitive `type`,
@@ -296,13 +296,13 @@
 payload is created. Must not be NULL. `initialization_data_size`: The size of
 the session update request payload.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbDrmGenerateSessionUpdateRequest(SbDrmSystem drm_system, int ticket, const char *type, const void *initialization_data, int initialization_data_size)
 ```
 
-### SbDrmGetMetrics ###
+### SbDrmGetMetrics
 
 Get the metrics of the underlying drm system.
 
@@ -326,13 +326,13 @@
 
 `drm_system` must not be `kSbDrmSystemInvalid`. `size` must not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 const void* SbDrmGetMetrics(SbDrmSystem drm_system, int *size)
 ```
 
-### SbDrmIsServerCertificateUpdatable ###
+### SbDrmIsServerCertificateUpdatable
 
 Returns true if server certificate of `drm_system` can be updated via
 SbDrmUpdateServerCertificate(). The return value should remain the same during
@@ -341,33 +341,33 @@
 `drm_system`: The DRM system to check if its server certificate is updatable.
 Must not be `kSbDrmSystemInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbDrmIsServerCertificateUpdatable(SbDrmSystem drm_system)
 ```
 
-### SbDrmSystemIsValid ###
+### SbDrmSystemIsValid
 
 Indicates whether `drm_system` is a valid SbDrmSystem.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbDrmSystemIsValid(SbDrmSystem drm)
 ```
 
-### SbDrmTicketIsValid ###
+### SbDrmTicketIsValid
 
 Indicates whether `ticket` is a valid ticket.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbDrmTicketIsValid(int ticket)
 ```
 
-### SbDrmUpdateServerCertificate ###
+### SbDrmUpdateServerCertificate
 
 Update the server certificate of `drm_system`. The function can be called
 multiple times. It is possible that a call to it happens before the callback of
@@ -384,13 +384,13 @@
 certificate data. Must not be NULL. `certificate_size`: Size of the server
 certificate data.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbDrmUpdateServerCertificate(SbDrmSystem drm_system, int ticket, const void *certificate, int certificate_size)
 ```
 
-### SbDrmUpdateSession ###
+### SbDrmUpdateSession
 
 Update session with `key`, in `drm_system`'s key system, from the license server
 response. Calls `session_updated_callback` with `context` and whether the update
@@ -410,7 +410,7 @@
 thread before this function returns or from another thread. The `session_id`
 must not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbDrmUpdateSession(SbDrmSystem drm_system, int ticket, const void *key, int key_size, const void *session_id, int session_id_size)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/egl.md b/cobalt/site/docs/reference/starboard/modules/14/egl.md
index c8c2120..4afff1a 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/egl.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/egl.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: egl.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `egl.h`
 
 The EGL API provides an interface with accompanying type declarations and
 defines that together provide a single consistent method of EGL usage across
@@ -11,67 +11,67 @@
 versions on different systems, and to remove the requirement for any other code
 to directly pull in and use these system libraries.
 
-## EGL Version ##
+## EGL Version
 
 This API has the ability to support EGL 1.5, however it is not required to
 support anything beyond EGL 1.4. The user is responsible for ensuring that the
 functions from EGL 1.5 they are calling from the interface are valid.
 
-## Macros ##
+## Macros
 
-### SB_EGL_ALPHA_FORMAT ###
+### SB_EGL_ALPHA_FORMAT
 
 EGL_VERSION_1_2
 
-### SB_EGL_ALPHA_SIZE ###
+### SB_EGL_ALPHA_SIZE
 
 EGL_VERSION_1_0
 
-### SB_EGL_BACK_BUFFER ###
+### SB_EGL_BACK_BUFFER
 
 EGL_VERSION_1_1
 
-### SB_EGL_CONFORMANT ###
+### SB_EGL_CONFORMANT
 
 EGL_VERSION_1_3
 
-### SB_EGL_CONTEXT_MAJOR_VERSION ###
+### SB_EGL_CONTEXT_MAJOR_VERSION
 
 EGL_VERSION_1_5
 
-### SB_EGL_DEFAULT_DISPLAY ###
+### SB_EGL_DEFAULT_DISPLAY
 
 EGL_VERSION_1_4
 
-## Typedefs ##
+## Typedefs
 
-### SbEglCastsToProperFunctionPointerType ###
+### SbEglCastsToProperFunctionPointerType
 
 The following type definitions were adapted from the types declared in [https://www.khronos.org/registry/EGL/api/EGL/egl.h](https://www.khronos.org/registry/EGL/api/EGL/egl.h)
 .
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbEglCastsToProperFunctionPointerType) (void)
 ```
 
-### SbEglInt32 ###
+### SbEglInt32
 
 The following type definitions were adapted from the types declared in [https://www.khronos.org/registry/EGL/api/EGL/eglplatform.h](https://www.khronos.org/registry/EGL/api/EGL/eglplatform.h)
 .
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int32_t SbEglInt32
 ```
 
-## Structs ##
+## Structs
 
-### SbEglInterface ###
+### SbEglInterface
 
-#### Members ####
+#### Members
 
 *   `SbEglBoolean(*eglChooseConfig)(SbEglDisplay dpy, const SbEglInt32
     *attrib_list, SbEglConfig *configs, SbEglInt32 config_size, SbEglInt32
diff --git a/cobalt/site/docs/reference/starboard/modules/14/event.md b/cobalt/site/docs/reference/starboard/modules/14/event.md
index 01a9d24..7887d8d 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/event.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/event.md
@@ -1,11 +1,11 @@
----
-layout: doc
-title: "Starboard Module Reference: event.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `event.h`
 
 Defines the event system that wraps the Starboard main loop and entry point.
 
-## The Starboard Application Lifecycle ##
+## The Starboard Application Lifecycle
 
 ```
                * ----------
@@ -78,15 +78,15 @@
 Note that the application is always expected to transition through `BLURRED`,
 `CONCEALED` to `FROZEN` before receiving `Stop` or being killed.
 
-## Enums ##
+## Enums
 
-### SbEventType ###
+### SbEventType
 
 An enumeration of all possible event types dispatched directly by the system.
 Each event is accompanied by a void* data argument, and each event must define
 the type of the value pointed to by that data argument, if any.
 
-#### Values ####
+#### Values
 
 *   `kSbEventTypePreload`
 
@@ -273,55 +273,55 @@
     change in the timezone setting). This should trigger the application to re-
     query the relevant APIs to update the date and time.
 
-## Typedefs ##
+## Typedefs
 
-### SbEventCallback ###
+### SbEventCallback
 
 A function that can be called back from the main Starboard event pump.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbEventCallback) (void *context)
 ```
 
-### SbEventDataDestructor ###
+### SbEventDataDestructor
 
 A function that will cleanly destroy an event data instance of a specific type.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbEventDataDestructor) (void *data)
 ```
 
-### SbEventId ###
+### SbEventId
 
 An ID that can be used to refer to a scheduled event.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef uint32_t SbEventId
 ```
 
-## Structs ##
+## Structs
 
-### SbEvent ###
+### SbEvent
 
 Structure representing a Starboard event and its data.
 
-#### Members ####
+#### Members
 
 *   `SbEventType type`
 *   `SbTimeMonotonic timestamp`
 *   `void * data`
 
-### SbEventStartData ###
+### SbEventStartData
 
 Event data for kSbEventTypeStart events.
 
-#### Members ####
+#### Members
 
 *   `char ** argument_values`
 
@@ -333,31 +333,31 @@
 
     The startup link, if any.
 
-### SbEventWindowSizeChangedData ###
+### SbEventWindowSizeChangedData
 
 Event data for kSbEventTypeWindowSizeChanged events.
 
-#### Members ####
+#### Members
 
 *   `SbWindow window`
 *   `SbWindowSize size`
 
-## Functions ##
+## Functions
 
-### SbEventCancel ###
+### SbEventCancel
 
 Cancels the specified `event_id`. Note that this function is a no-op if the
 event already fired. This function can be safely called from any thread, but the
 only way to guarantee that the event does not run anyway is to call it from the
 main Starboard event loop thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbEventCancel(SbEventId event_id)
 ```
 
-### SbEventHandle ###
+### SbEventHandle
 
 The entry point that Starboard applications MUST implement. Any memory pointed
 at by `event` or the `data` field inside `event` is owned by the system, and
@@ -370,23 +370,23 @@
 application should generally do as little work as possible on this thread, and
 just dispatch it over to another thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SB_IMPORT void SbEventHandle(const SbEvent *event)
 ```
 
-### SbEventIsIdValid ###
+### SbEventIsIdValid
 
 Returns whether the given event handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbEventIsIdValid(SbEventId handle)
 ```
 
-### SbEventSchedule ###
+### SbEventSchedule
 
 Schedules an event `callback` into the main Starboard event loop. This function
 may be called from any thread, but `callback` is always called from the main
@@ -397,7 +397,7 @@
 of microseconds to wait before calling the `callback` function. Set `delay` to
 `0` to call the callback as soon as possible.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbEventId SbEventSchedule(SbEventCallback callback, void *context, SbTime delay)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/export.md b/cobalt/site/docs/reference/starboard/modules/14/export.md
index ff79777..a398d4a 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/export.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/export.md
@@ -1,24 +1,24 @@
----
-layout: doc
-title: "Starboard Module Reference: export.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `export.h`
 
 Provides macros for properly exporting or importing symbols from shared
 libraries.
 
-## Macros ##
+## Macros
 
-### SB_EXPORT ###
+### SB_EXPORT
 
 Specification for a symbol that should be exported when building the DLL and
 imported when building code that uses the DLL.
 
-### SB_EXPORT_PRIVATE ###
+### SB_EXPORT_PRIVATE
 
 Specification for a symbol that should be exported or imported for testing
 purposes only.
 
-### SB_IMPORT ###
+### SB_IMPORT
 
 Specification for a symbol that is expected to be defined externally to this
 module.
diff --git a/cobalt/site/docs/reference/starboard/modules/14/file.md b/cobalt/site/docs/reference/starboard/modules/14/file.md
index 56eb415..103af47 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/file.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/file.md
@@ -1,25 +1,25 @@
----
-layout: doc
-title: "Starboard Module Reference: file.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `file.h`
 
 Defines file system input/output functions.
 
-## Macros ##
+## Macros
 
-### kSbFileInvalid ###
+### kSbFileInvalid
 
 Well-defined value for an invalid file handle.
 
-## Enums ##
+## Enums
 
-### SbFileError ###
+### SbFileError
 
 kSbFileErrorAccessDenied is returned when a call fails because of a filesystem
 restriction. kSbFileErrorSecurity is returned when a security policy doesn't
 allow the operation to be executed.
 
-#### Values ####
+#### Values
 
 *   `kSbFileOk`
 *   `kSbFileErrorFailed`
@@ -40,7 +40,7 @@
 *   `kSbFileErrorIO`
 *   `kSbFileErrorMax`
 
-### SbFileFlags ###
+### SbFileFlags
 
 Flags that define how a file is used in the application. These flags should be
 or'd together when passed to SbFileOpen to open or create a file.
@@ -66,7 +66,7 @@
 
 The `kSbFileAsync` flag is optional.
 
-#### Values ####
+#### Values
 
 *   `kSbFileOpenOnly`
 *   `kSbFileCreateOnly`
@@ -85,35 +85,35 @@
 *   `kSbFileWrite`
 *   `kSbFileAsync`
 
-### SbFileWhence ###
+### SbFileWhence
 
 This explicit mapping matches both FILE_ on Windows and SEEK_ on Linux.
 
-#### Values ####
+#### Values
 
 *   `kSbFileFromBegin`
 *   `kSbFileFromCurrent`
 *   `kSbFileFromEnd`
 
-## Typedefs ##
+## Typedefs
 
-### SbFile ###
+### SbFile
 
 A handle to an open file.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbFilePrivate* SbFile
 ```
 
-## Structs ##
+## Structs
 
-### SbFileInfo ###
+### SbFileInfo
 
 Used to hold information about a file.
 
-#### Members ####
+#### Members
 
 *   `int64_t size`
 
@@ -134,9 +134,9 @@
 
     The creation time of a file.
 
-## Functions ##
+## Functions
 
-### SbFileAtomicReplace ###
+### SbFileAtomicReplace
 
 Replaces the content of the file at `path` with `data`. Returns whether the
 contents of the file were replaced. The replacement of the content is an atomic
@@ -146,39 +146,39 @@
 to replace the file contents with. `data_size`: The amount of `data`, in bytes,
 to be written to the file.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileAtomicReplace(const char *path, const char *data, int64_t data_size)
 ```
 
-### SbFileCanOpen ###
+### SbFileCanOpen
 
 Indicates whether SbFileOpen() with the given `flags` is allowed for `path`.
 
 `path`: The absolute path to be checked. `flags`: The flags that are being
 evaluated for the given `path`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileCanOpen(const char *path, int flags)
 ```
 
-### SbFileClose ###
+### SbFileClose
 
 Closes `file`. The return value indicates whether the file was closed
 successfully.
 
 `file`: The absolute path of the file to be closed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileClose(SbFile file)
 ```
 
-### SbFileDelete ###
+### SbFileDelete
 
 Deletes the regular file, symlink, or empty directory at `path`. This function
 is used primarily to clean up after unit tests. On some platforms, this function
@@ -186,38 +186,38 @@
 
 `path`: The absolute path of the file, symlink, or directory to be deleted.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileDelete(const char *path)
 ```
 
-### SbFileExists ###
+### SbFileExists
 
 Indicates whether a file or directory exists at `path`.
 
 `path`: The absolute path of the file or directory being checked.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileExists(const char *path)
 ```
 
-### SbFileFlush ###
+### SbFileFlush
 
 Flushes the write buffer to `file`. Data written via SbFileWrite is not
 necessarily committed until the SbFile is flushed or closed.
 
 `file`: The SbFile to which the write buffer is flushed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileFlush(SbFile file)
 ```
 
-### SbFileGetInfo ###
+### SbFileGetInfo
 
 Retrieves information about `file`. The return value indicates whether the file
 information was retrieved successfully.
@@ -226,13 +226,13 @@
 into which the retrieved data is placed. This variable is not touched if the
 operation is not successful.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileGetInfo(SbFile file, SbFileInfo *out_info)
 ```
 
-### SbFileGetPathInfo ###
+### SbFileGetPathInfo
 
 Retrieves information about the file at `path`. The return value indicates
 whether the file information was retrieved successfully.
@@ -241,36 +241,36 @@
 `out_info`: The variable into which the retrieved data is placed. This variable
 is not touched if the operation is not successful.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileGetPathInfo(const char *path, SbFileInfo *out_info)
 ```
 
-### SbFileIsValid ###
+### SbFileIsValid
 
 Returns whether the given file handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbFileIsValid(SbFile file)
 ```
 
-### SbFileModeStringToFlags ###
+### SbFileModeStringToFlags
 
 Converts an ISO `fopen()` mode string into flags that can be equivalently passed
 into SbFileOpen().
 
 `mode`: The mode string to be converted into flags.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbFileModeStringToFlags(const char *mode)
 ```
 
-### SbFileOpen ###
+### SbFileOpen
 
 Opens the file at `path`, which must be absolute, creating it if specified by
 `flags`. The read/write position is at the beginning of the file.
@@ -287,13 +287,13 @@
 sets this value to `false`. `out_error`: If `path` cannot be created, this is
 set to `kSbFileInvalid`. Otherwise, it is `NULL`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbFile SbFileOpen(const char *path, int flags, bool *out_created, SbFileError *out_error)
 ```
 
-### SbFileRead ###
+### SbFileRead
 
 Reads `size` bytes (or until EOF is reached) from `file` into `data`, starting
 at the file's current position.
@@ -306,13 +306,13 @@
 `file`: The SbFile from which to read data. `data`: The variable to which data
 is read. `size`: The amount of data (in bytes) to read.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbFileRead(SbFile file, char *data, int size)
 ```
 
-### SbFileReadAll ###
+### SbFileReadAll
 
 Reads `size` bytes (or until EOF is reached) from `file` into `data`, starting
 at the file's current position.
@@ -326,13 +326,13 @@
 `file`: The SbFile from which to read data. `data`: The variable to which data
 is read. `size`: The amount of data (in bytes) to read.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int SbFileReadAll(SbFile file, char *data, int size)
 ```
 
-### SbFileSeek ###
+### SbFileSeek
 
 Changes the current read/write position in `file`. The return value identifies
 the resultant current read/write position in the file (relative to the start) or
@@ -344,13 +344,13 @@
 value. `offset`: The amount that the read/write position is changed, relative to
 `whence`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbFileSeek(SbFile file, SbFileWhence whence, int64_t offset)
 ```
 
-### SbFileTruncate ###
+### SbFileTruncate
 
 Truncates the given `file` to the given `length`. The return value indicates
 whether the file was truncated successfully.
@@ -360,13 +360,13 @@
 then the file is extended with zeros. If `length` is negative, then the function
 is a no-op and returns `false`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileTruncate(SbFile file, int64_t length)
 ```
 
-### SbFileWrite ###
+### SbFileWrite
 
 Writes the given buffer into `file` at the file's current position, overwriting
 any data that was previously there.
@@ -380,13 +380,13 @@
 `file`: The SbFile to which data will be written. `data`: The data to be
 written. `size`: The amount of data (in bytes) to write.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbFileWrite(SbFile file, const char *data, int size)
 ```
 
-### SbFileWriteAll ###
+### SbFileWriteAll
 
 Writes the given buffer into `file`, starting at the beginning of the file, and
 overwriting any data that was previously there. Unlike SbFileWrite, this
@@ -397,7 +397,7 @@
 `file`: The file to which data will be written. `data`: The data to be written.
 `size`: The amount of data (in bytes) to write.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int SbFileWriteAll(SbFile file, const char *data, int size)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/gles.md b/cobalt/site/docs/reference/starboard/modules/14/gles.md
index 163d8d7..77bc07e 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/gles.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/gles.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: gles.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `gles.h`
 
 The GLES API provides an interface with accompanying type declarations and
 defines that together provide a single consistent method of GLES usage across
@@ -11,37 +11,37 @@
 and versions on different systems, and to remove the requirement for any other
 code to directly pull in and use these system libraries.
 
-## GLES Version ##
+## GLES Version
 
 This API has the ability to support GLES 3.0, however platforms are not required
 to support anything beyond GLES 2.0. The caller is responsible for ensuring that
 the functions from GLES 3.0 they are calling from the interface are valid.
 
-## Macros ##
+## Macros
 
-### SB_GL_DEPTH_BUFFER_BIT ###
+### SB_GL_DEPTH_BUFFER_BIT
 
 Previously defined in [https://www.khronos.org/registry/OpenGL/api/GLES2/gl2.h](https://www.khronos.org/registry/OpenGL/api/GLES2/gl2.h)
 
-### SB_GL_READ_BUFFER ###
+### SB_GL_READ_BUFFER
 
 Previously defined in [https://www.khronos.org/registry/OpenGL/api/GLES3/gl3.h](https://www.khronos.org/registry/OpenGL/api/GLES3/gl3.h)
 .
 
-## Typedefs ##
+## Typedefs
 
-### SbGlBoolean ###
+### SbGlBoolean
 
 The following type definitions were adapted from the types declared in [https://www.khronos.org/registry/OpenGL/api/GLES2/gl2.h](https://www.khronos.org/registry/OpenGL/api/GLES2/gl2.h)
 .
 
-#### Definition ####
+#### Definition
 
 ```
 typedef uint8_t SbGlBoolean
 ```
 
-### SbGlIntPtr ###
+### SbGlIntPtr
 
 Some compilers will transform the intptr_t to an int transparently behind the
 scenes, which is not equivalent to a long int, or long long int, as far as the
@@ -49,17 +49,17 @@
 those exact types used by OpenGL ES 2.0 ( [https://www.khronos.org/registry/OpenGL/api/GLES2/gl2ext.h](https://www.khronos.org/registry/OpenGL/api/GLES2/gl2ext.h)
 ).
 
-#### Definition ####
+#### Definition
 
 ```
 typedef long int SbGlIntPtr
 ```
 
-## Structs ##
+## Structs
 
-### SbGlesInterface ###
+### SbGlesInterface
 
-#### Members ####
+#### Members
 
 *   `void(*glActiveTexture)(SbGlEnum texture)`
 
diff --git a/cobalt/site/docs/reference/starboard/modules/14/image.md b/cobalt/site/docs/reference/starboard/modules/14/image.md
index 1427d39..945938a 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/image.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/image.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: image.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `image.h`
 
 API for hardware accelerated image decoding. This module allows for the client
 to feed in raw, encoded data to be decoded directly into an SbDecodeTarget. It
@@ -11,7 +11,7 @@
 All functions in this module are safe to call from any thread at any point in
 time.
 
-## SbImageIsDecodeSupported and SbImageDecode Example ##
+## SbImageIsDecodeSupported and SbImageDecode Example
 
 ```
 SbDecodeTargetProvider* provider = GetProviderFromSomewhere();
@@ -28,9 +28,9 @@
                                              mime_type, format);
 ```
 
-## Functions ##
+## Functions
 
-### SbImageDecode ###
+### SbImageDecode
 
 Attempt to decode encoded `mime_type` image data `data` of size `data_size` into
 an SbDecodeTarget of SbDecodeFormatType `format`, possibly using
@@ -56,13 +56,13 @@
     kSbDecodeTargetInvalid will be returned, with any intermediate allocations
     being cleaned up in the implementation.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbDecodeTarget SbImageDecode(SbDecodeTargetGraphicsContextProvider *context_provider, void *data, int data_size, const char *mime_type, SbDecodeTargetFormat format)
 ```
 
-### SbImageIsDecodeSupported ###
+### SbImageIsDecodeSupported
 
 Whether the current platform supports hardware accelerated decoding an image of
 mime type `mime_type` into SbDecodeTargetFormat `format`. The `mime_type` must
@@ -70,7 +70,7 @@
 program, which means that the results of this function may be cached
 indefinitely.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbImageIsDecodeSupported(const char *mime_type, SbDecodeTargetFormat format)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/input.md b/cobalt/site/docs/reference/starboard/modules/14/input.md
index ec86793..a858c73 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/input.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/input.md
@@ -1,18 +1,18 @@
----
-layout: doc
-title: "Starboard Module Reference: input.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `input.h`
 
 Defines input events and associated data types.
 
-## Enums ##
+## Enums
 
-### SbInputDeviceType ###
+### SbInputDeviceType
 
 Identifies possible input subsystem types. The types of events that each device
 type produces correspond to `SbInputEventType` values.
 
-#### Values ####
+#### Values
 
 *   `kSbInputDeviceTypeGesture`
 
@@ -57,11 +57,11 @@
 
     Produces `Input` events.
 
-### SbInputEventType ###
+### SbInputEventType
 
 The action that an input event represents.
 
-#### Values ####
+#### Values
 
 *   `kSbInputEventTypeMove`
 
@@ -86,13 +86,13 @@
 
     [https://w3c.github.io/uievents/#event-type-input](https://w3c.github.io/uievents/#event-type-input)
 
-## Structs ##
+## Structs
 
-### SbInputData ###
+### SbInputData
 
 Event data for `kSbEventTypeInput` events.
 
-#### Members ####
+#### Members
 
 *   `SbWindow window`
 
@@ -160,11 +160,11 @@
 
     Set to true if the input event is part of a composition event.
 
-### SbInputVector ###
+### SbInputVector
 
 A 2-dimensional vector used to represent points and motion vectors.
 
-#### Members ####
+#### Members
 
 *   `float x`
 *   `float y`
diff --git a/cobalt/site/docs/reference/starboard/modules/14/key.md b/cobalt/site/docs/reference/starboard/modules/14/key.md
index bf8583c..dd7712f 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/key.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/key.md
@@ -1,19 +1,19 @@
----
-layout: doc
-title: "Starboard Module Reference: key.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `key.h`
 
 Defines the canonical set of Starboard key codes.
 
-## Enums ##
+## Enums
 
-### SbKey ###
+### SbKey
 
 A standard set of key codes, ordered by value, that represent each possible
 input key across all kinds of devices. Starboard uses the semi-standard Windows
 virtual key codes documented at: [https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.aspx](https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.aspx)
 
-#### Values ####
+#### Values
 
 *   `kSbKeyUnknown`
 *   `kSbKeyCancel`
@@ -274,11 +274,11 @@
 *   `kSbKeyGamepadRightStickLeft`
 *   `kSbKeyGamepadRightStickRight`
 
-### SbKeyModifiers ###
+### SbKeyModifiers
 
 Bit-mask of key modifiers.
 
-#### Values ####
+#### Values
 
 *   `kSbKeyModifiersNone`
 *   `kSbKeyModifiersAlt`
diff --git a/cobalt/site/docs/reference/starboard/modules/14/log.md b/cobalt/site/docs/reference/starboard/modules/14/log.md
index 42de513..6cf3a49 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/log.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/log.md
@@ -1,18 +1,18 @@
----
-layout: doc
-title: "Starboard Module Reference: log.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `log.h`
 
 Defines core debug logging functions.
 
-## Enums ##
+## Enums
 
-### SbLogPriority ###
+### SbLogPriority
 
 The priority at which a message should be logged. The platform may be configured
 to filter logs by priority, or render them differently.
 
-#### Values ####
+#### Values
 
 *   `kSbLogPriorityUnknown`
 *   `kSbLogPriorityInfo`
@@ -20,9 +20,9 @@
 *   `kSbLogPriorityError`
 *   `kSbLogPriorityFatal`
 
-## Functions ##
+## Functions
 
-### SbLog ###
+### SbLog
 
 Writes `message` to the platform's debug output log. This method is thread-safe,
 and responsible for ensuring that the output from multiple threads is not mixed.
@@ -35,55 +35,55 @@
 termination. That said, platforms can adjust the message to be more suitable for
 their output method by wrapping the text, stripping unprintable characters, etc.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbLog(SbLogPriority priority, const char *message)
 ```
 
-### SbLogFlush ###
+### SbLogFlush
 
 Flushes the log buffer on some platforms. This method is safe to call from
 multiple threads.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbLogFlush()
 ```
 
-### SbLogFormat ###
+### SbLogFormat
 
 A log output method that additionally performs a string format on the data being
 logged.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbLogFormat(const char *format, va_list args) SB_PRINTF_FORMAT(1
 ```
 
-### SbLogFormatF ###
+### SbLogFormatF
 
 Inline wrapper of SbLogFormat that converts from ellipsis to va_args.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void static void static void SbLogFormatF(const char *format,...) SB_PRINTF_FORMAT(1
 ```
 
-### SbLogIsTty ###
+### SbLogIsTty
 
 Indicates whether the log output goes to a TTY or is being redirected.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbLogIsTty()
 ```
 
-### SbLogRaw ###
+### SbLogRaw
 
 A bare-bones log output method that is async-signal-safe, i.e. safe to call from
 an asynchronous signal handler (e.g. a `SIGSEGV` handler). It should not do any
@@ -91,13 +91,13 @@
 
 `message`: The message to be logged. Must not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbLogRaw(const char *message)
 ```
 
-### SbLogRawDumpStack ###
+### SbLogRawDumpStack
 
 Dumps the stack of the current thread to the log in an async-signal-safe manner,
 i.e. safe to call from an asynchronous signal handler (e.g. a `SIGSEGV`
@@ -108,28 +108,28 @@
 helper functions that might end up on top of every stack dump so that the stack
 dump is just the relevant function stack where the problem occurred.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbLogRawDumpStack(int frames_to_skip)
 ```
 
-### SbLogRawFormat ###
+### SbLogRawFormat
 
 A formatted log output method that is async-signal-safe, i.e. safe to call from
 an asynchronous signal handler (e.g. a `SIGSEGV` handler).
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbLogRawFormat(const char *format, va_list args) SB_PRINTF_FORMAT(1
 ```
 
-### SbLogRawFormatF ###
+### SbLogRawFormatF
 
 Inline wrapper of SbLogFormat to convert from ellipsis to va_args.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void static void static void SbLogRawFormatF(const char *format,...) SB_PRINTF_FORMAT(1
diff --git a/cobalt/site/docs/reference/starboard/modules/14/media.md b/cobalt/site/docs/reference/starboard/modules/14/media.md
index f7ccacd..c0ada4a 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/media.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/media.md
@@ -1,28 +1,28 @@
----
-layout: doc
-title: "Starboard Module Reference: media.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `media.h`
 
 Provides media definitions that are common between the Decoder and Player
 interfaces.
 
-## Macros ##
+## Macros
 
-### kSbMediaBitsPerPixelInvalid ###
+### kSbMediaBitsPerPixelInvalid
 
 Value used when a video's bits per pixel is not known.
 
-### kSbMediaVideoResolutionDimensionInvalid ###
+### kSbMediaVideoResolutionDimensionInvalid
 
 Value used when a video's resolution is not known.
 
-## Enums ##
+## Enums
 
-### SbMediaAudioCodec ###
+### SbMediaAudioCodec
 
 Types of audio elementary streams that can be supported.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaAudioCodecNone`
 *   `kSbMediaAudioCodecAac`
@@ -34,11 +34,11 @@
 *   `kSbMediaAudioCodecFlac`
 *   `kSbMediaAudioCodecPcm`
 
-### SbMediaAudioCodingType ###
+### SbMediaAudioCodingType
 
 Possible audio coding types.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaAudioCodingTypeNone`
 *   `kSbMediaAudioCodingTypeAac`
@@ -52,11 +52,11 @@
 *   `kSbMediaAudioCodingTypeMpeg3`
 *   `kSbMediaAudioCodingTypePcm`
 
-### SbMediaAudioConnector ###
+### SbMediaAudioConnector
 
 Possible audio connector types.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaAudioConnectorNone`
 *   `kSbMediaAudioConnectorAnalog`
@@ -66,11 +66,11 @@
 *   `kSbMediaAudioConnectorSpdif`
 *   `kSbMediaAudioConnectorUsb`
 
-### SbMediaAudioFrameStorageType ###
+### SbMediaAudioFrameStorageType
 
 Possible audio frame storage types.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaAudioFrameStorageTypeInterleaved`
 
@@ -86,22 +86,22 @@
     with timestamps 0, 1, 2, etc., the samples are stored in two buffers "L0 L1
     L2 ..." and "R0 R1 R2 ...".
 
-### SbMediaAudioSampleType ###
+### SbMediaAudioSampleType
 
 Possible audio sample types.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaAudioSampleTypeInt16Deprecated`
 *   `kSbMediaAudioSampleTypeFloat32`
 
-### SbMediaRangeId ###
+### SbMediaRangeId
 
 This corresponds to the WebM Range enum which is part of WebM color data (see [http://www.webmproject.org/docs/container/#Range](http://www.webmproject.org/docs/container/#Range)
 ). H.264 only uses a bool, which corresponds to the LIMITED/FULL values. Chrome-
 specific values start at 1000.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaRangeIdUnspecified`
 
@@ -117,13 +117,13 @@
     Range is defined by TransferId/MatrixId.
 *   `kSbMediaRangeIdLast`
 
-### SbMediaSupportType ###
+### SbMediaSupportType
 
 Indicates how confident the device is that it can play media resources of the
 given type. The values are a direct map of the canPlayType() method specified at
 the following link: [https://www.w3.org/TR/2011/WD-html5-20110113/video.html#dom-navigator-canplaytype](https://www.w3.org/TR/2011/WD-html5-20110113/video.html#dom-navigator-canplaytype)
 
-#### Values ####
+#### Values
 
 *   `kSbMediaSupportTypeNotSupported`
 
@@ -135,11 +135,11 @@
 
     The media type seems to be playable.
 
-### SbMediaType ###
+### SbMediaType
 
 Types of media component streams.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaTypeAudio`
 
@@ -148,11 +148,11 @@
 
     Value used for video streams.
 
-### SbMediaVideoCodec ###
+### SbMediaVideoCodec
 
 Types of video elementary streams that could be supported.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaVideoCodecNone`
 *   `kSbMediaVideoCodecH264`
@@ -164,14 +164,14 @@
 *   `kSbMediaVideoCodecVp8`
 *   `kSbMediaVideoCodecVp9`
 
-## Structs ##
+## Structs
 
-### SbMediaAudioConfiguration ###
+### SbMediaAudioConfiguration
 
 A structure describing the audio configuration parameters of a single audio
 output.
 
-#### Members ####
+#### Members
 
 *   `int index`
 
@@ -193,7 +193,7 @@
     `0` if this device cannot provide this information, in which case the caller
     can probably assume stereo output.
 
-### SbMediaAudioSampleInfo ###
+### SbMediaAudioSampleInfo
 
 An audio sample info, which is a description of a given audio sample. This acts
 as a set of instructions to the audio decoder.
@@ -203,7 +203,7 @@
 Audio-specific configuration field. The `WAVEFORMATEX` structure is specified at
 [http://msdn.microsoft.com/en-us/library/dd390970(v=vs.85).aspx](http://msdn.microsoft.com/en-us/library/dd390970(v=vs.85).aspx)x) .
 
-#### Members ####
+#### Members
 
 *   `SbMediaAudioCodec codec`
 
@@ -227,7 +227,7 @@
     The number of bytes per second expected with this format.
 *   `uint16_t block_alignment`
 
-    Byte block alignment, e.g, 4.
+    Byte block alignment, e.g., 4.
 *   `uint16_t bits_per_sample`
 
     The bit depth for the stream this represents, e.g. `8` or `16`.
@@ -238,14 +238,14 @@
 
     The AudioSpecificConfig, as specified in ISO/IEC-14496-3, section 1.6.2.1: [http://read.pudn.com/downloads98/doc/comm/401153/14496/ISO_IEC_14496-3%20Part%203%20Audio/C036083E_SUB1.PDF](http://read.pudn.com/downloads98/doc/comm/401153/14496/ISO_IEC_14496-3%20Part%203%20Audio/C036083E_SUB1.PDF)
 
-### SbMediaColorMetadata ###
+### SbMediaColorMetadata
 
 HDR (High Dynamic Range) Metadata common for HDR10 and WebM/VP9-based HDR
 formats, together with the ColorSpace. HDR reproduces a greater dynamic range of
 luminosity than is possible with standard digital imaging. See the Consumer
 Electronics Association press release: [https://www.cta.tech/News/Press-Releases/2015/August/CEA-Defines-%E2%80%98HDR-Compatible%E2%80%99-Displays.aspx](https://www.cta.tech/News/Press-Releases/2015/August/CEA-Defines-%E2%80%98HDR-Compatible%E2%80%99-Displays.aspx)
 
-#### Members ####
+#### Members
 
 *   `unsigned int bits_per_channel`
 
@@ -326,7 +326,7 @@
     a row-major ordered 3 x 4 submatrix of the 4 x 4 transform matrix. The 4th
     row is completed as (0, 0, 0, 1).
 
-### SbMediaMasteringMetadata ###
+### SbMediaMasteringMetadata
 
 SMPTE 2086 mastering data [http://ieeexplore.ieee.org/document/7291707/](http://ieeexplore.ieee.org/document/7291707/)
 This standard specifies the metadata items to specify the color volume (the
@@ -335,7 +335,7 @@
 independent of any specific digital representation. Also see the WebM container
 guidelines: [https://www.webmproject.org/docs/container/](https://www.webmproject.org/docs/container/)
 
-#### Members ####
+#### Members
 
 *   `float primary_r_chromaticity_x`
 
@@ -370,11 +370,11 @@
     Minimum luminance. Shall be represented in candelas per square meter
     (cd/m^2). In range [0, 9999.99].
 
-### SbMediaVideoSampleInfo ###
+### SbMediaVideoSampleInfo
 
 The set of information required by the decoder or player for each video sample.
 
-#### Members ####
+#### Members
 
 *   `SbMediaVideoCodec codec`
 
@@ -420,9 +420,9 @@
     . This will only be specified on frames where the HDR metadata and color /
     color space might have changed (e.g. keyframes).
 
-## Functions ##
+## Functions
 
-### SbMediaCanPlayMimeAndKeySystem ###
+### SbMediaCanPlayMimeAndKeySystem
 
 Returns information about whether the playback of the specific media described
 by `mime` and encrypted using `key_system` can be played.
@@ -466,13 +466,13 @@
 implementation supports key system with attributes on one key system, it has to
 support key system with attributes on all key systems supported.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbMediaSupportType SbMediaCanPlayMimeAndKeySystem(const char *mime, const char *key_system)
 ```
 
-### SbMediaGetAudioBufferBudget ###
+### SbMediaGetAudioBufferBudget
 
 Specifies the maximum amount of memory used by audio buffers of media source
 before triggering a garbage collection. A large value will cause more memory
@@ -480,13 +480,13 @@
 download audio data. Note that the app may experience significant difficulty if
 this value is too low.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetAudioBufferBudget()
 ```
 
-### SbMediaGetAudioConfiguration ###
+### SbMediaGetAudioConfiguration
 
 Retrieves the current physical audio configuration of audio output
 `output_index` on this device and places it in `out_configuration`, which must
@@ -498,37 +498,37 @@
 `out_configuration`: The variable that holds the audio configuration
 information.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMediaGetAudioConfiguration(int output_index, SbMediaAudioConfiguration *out_configuration)
 ```
 
-### SbMediaGetAudioOutputCount ###
+### SbMediaGetAudioOutputCount
 
 Returns the number of audio outputs currently available on this device. Even if
 the number of outputs or their audio configurations can't be determined, it is
 expected that the platform will at least return a single output that supports at
 least stereo.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetAudioOutputCount()
 ```
 
-### SbMediaGetBufferAlignment ###
+### SbMediaGetBufferAlignment
 
 The media buffer will be allocated using the returned alignment. Set this to a
 larger value may increase the memory consumption of media buffers.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetBufferAlignment()
 ```
 
-### SbMediaGetBufferAllocationUnit ###
+### SbMediaGetBufferAllocationUnit
 
 When the media stack needs more memory to store media buffers, it will allocate
 extra memory in units returned by SbMediaGetBufferAllocationUnit. This can
@@ -536,13 +536,13 @@
 When SbMediaGetInitialBufferCapacity and this function both return 0, the media
 stack will allocate individual buffers directly using SbMemory functions.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetBufferAllocationUnit()
 ```
 
-### SbMediaGetBufferGarbageCollectionDurationThreshold ###
+### SbMediaGetBufferGarbageCollectionDurationThreshold
 
 Specifies the duration threshold of media source garbage collection. When the
 accumulated duration in a source buffer exceeds this value, the media source
@@ -553,54 +553,54 @@
 return 170 seconds for most of the platforms. But it can be further reduced on
 systems with extremely low memory.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbTime SbMediaGetBufferGarbageCollectionDurationThreshold()
 ```
 
-### SbMediaGetBufferPadding ###
+### SbMediaGetBufferPadding
 
 Extra bytes allocated at the end of a media buffer to ensure that the buffer can
 be use optimally by specific instructions like SIMD. Set to 0 to remove any
 padding.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetBufferPadding()
 ```
 
-### SbMediaGetBufferStorageType ###
+### SbMediaGetBufferStorageType
 
 Returns SbMediaBufferStorageType of type `SbMediaStorageTypeMemory` or
 `SbMediaStorageTypeFile`. For memory storage, the media buffers will be stored
 in main memory allocated by SbMemory functions. For file storage, the media
 buffers will be stored in a temporary file in the system cache folder acquired
 by calling SbSystemGetPath() with "kSbSystemPathCacheDirectory". Note that when
-its value is "file" the media stack will still allocate memory to cache the the
+its value is "file" the media stack will still allocate memory to cache the
 buffers in use.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbMediaBufferStorageType SbMediaGetBufferStorageType()
 ```
 
-### SbMediaGetInitialBufferCapacity ###
+### SbMediaGetInitialBufferCapacity
 
 The amount of memory that will be used to store media buffers allocated during
 system startup. To allocate a large chunk at startup helps with reducing
 fragmentation and can avoid failures to allocate incrementally. This can return
 0.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetInitialBufferCapacity()
 ```
 
-### SbMediaGetMaxBufferCapacity ###
+### SbMediaGetMaxBufferCapacity
 
 The maximum amount of memory that will be used to store media buffers. This must
 be larger than sum of the video budget and audio budget. This is a soft limit
@@ -615,13 +615,13 @@
 resolution. `bits_per_pixel`: the bits per pixel. This value is larger for HDR
 than non- HDR video.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetMaxBufferCapacity(SbMediaVideoCodec codec, int resolution_width, int resolution_height, int bits_per_pixel)
 ```
 
-### SbMediaGetProgressiveBufferBudget ###
+### SbMediaGetProgressiveBufferBudget
 
 The memory used when playing mp4 videos that is not in DASH format. The
 resolution of such videos shouldn't go beyond 1080p. Its value should be less
@@ -633,13 +633,13 @@
 resolution. `bits_per_pixel`: the bits per pixel. This value is larger for HDR
 than non- HDR video.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetProgressiveBufferBudget(SbMediaVideoCodec codec, int resolution_width, int resolution_height, int bits_per_pixel)
 ```
 
-### SbMediaGetVideoBufferBudget ###
+### SbMediaGetVideoBufferBudget
 
 Specifies the maximum amount of memory used by video buffers of media source
 before triggering a garbage collection. A large value will cause more memory
@@ -652,13 +652,13 @@
 resolution. `bits_per_pixel`: the bits per pixel. This value is larger for HDR
 than non- HDR video.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetVideoBufferBudget(SbMediaVideoCodec codec, int resolution_width, int resolution_height, int bits_per_pixel)
 ```
 
-### SbMediaIsBufferPoolAllocateOnDemand ###
+### SbMediaIsBufferPoolAllocateOnDemand
 
 When either SbMediaGetInitialBufferCapacity or SbMediaGetBufferAllocationUnit
 isn't zero, media buffers will be allocated using a memory pool. Set the
@@ -669,24 +669,24 @@
 release any media buffer memory back to the system even if there is no media
 buffers allocated.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMediaIsBufferPoolAllocateOnDemand()
 ```
 
-### SbMediaIsBufferUsingMemoryPool ###
+### SbMediaIsBufferUsingMemoryPool
 
 If SbMediaGetBufferUsingMemoryPool returns true, it indicates that media buffer
 pools should be allocated on demand, as opposed to using SbMemory* functions.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMediaIsBufferUsingMemoryPool()
 ```
 
-### SbMediaSetAudioWriteDuration ###
+### SbMediaSetAudioWriteDuration
 
 Communicate to the platform how far past `current_playback_position` the app
 will write audio samples. The app will write all samples between
@@ -698,7 +698,7 @@
 as transient or indefinite hanging). The platform may assume `duration` >= 0.5
 seconds.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMediaSetAudioWriteDuration(SbTime duration)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/memory.md b/cobalt/site/docs/reference/starboard/modules/14/memory.md
index a094a66..22b8016 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/memory.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/memory.md
@@ -1,17 +1,17 @@
----
-layout: doc
-title: "Starboard Module Reference: memory.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `memory.h`
 
 Defines functions for memory allocation, alignment, copying, and comparing.
 
-## Porters ##
+## Porters
 
 All of the "Unchecked" and "Free" functions must be implemented, but they should
 not be called directly. The Starboard platform wraps them with extra accounting
 under certain circumstances.
 
-## Porters and Application Developers ##
+## Porters and Application Developers
 
 Nobody should call the "Checked", "Unchecked" or "Free" functions directly
 because that evades Starboard's memory tracking. In both port implementations
@@ -26,14 +26,14 @@
 
 *   The "free" functions are SbMemoryFree() and SbMemoryFreeAligned().
 
-## Enums ##
+## Enums
 
-### SbMemoryMapFlags ###
+### SbMemoryMapFlags
 
 The bitwise OR of these flags should be passed to SbMemoryMap to indicate how
 the mapped memory can be used.
 
-#### Values ####
+#### Values
 
 *   `kSbMemoryMapProtectReserved`
 
@@ -44,9 +44,9 @@
 *   `kSbMemoryMapProtectExec`
 *   `kSbMemoryMapProtectReadWrite`
 
-## Functions ##
+## Functions
 
-### SbMemoryAllocate ###
+### SbMemoryAllocate
 
 Allocates and returns a chunk of memory of at least `size` bytes. This function
 should be called from the client codebase. It is intended to be a drop-in
@@ -58,13 +58,13 @@
 return `NULL` or it may return a unique pointer value that can be passed to
 SbMemoryDeallocate.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocate(size_t size)
 ```
 
-### SbMemoryAllocateAligned ###
+### SbMemoryAllocateAligned
 
 Allocates and returns a chunk of memory of at least `size` bytes, aligned to
 `alignment`. This function should be called from the client codebase. It is
@@ -78,87 +78,87 @@
 `size` is `0`, the function may return `NULL` or it may return a unique aligned
 pointer value that can be passed to SbMemoryDeallocateAligned.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocateAligned(size_t alignment, size_t size)
 ```
 
-### SbMemoryAllocateAlignedChecked ###
+### SbMemoryAllocateAlignedChecked
 
 Same as SbMemoryAllocateAlignedUnchecked, but will abort() in the case of an
 allocation failure.
 
 DO NOT CALL. Call SbMemoryAllocateAligned(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocateAlignedChecked(size_t alignment, size_t size)
 ```
 
-### SbMemoryAllocateAlignedUnchecked ###
+### SbMemoryAllocateAlignedUnchecked
 
 This is the implementation of SbMemoryAllocateAligned that must be provided by
 Starboard ports.
 
 DO NOT CALL. Call SbMemoryAllocateAligned(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocateAlignedUnchecked(size_t alignment, size_t size)
 ```
 
-### SbMemoryAllocateChecked ###
+### SbMemoryAllocateChecked
 
 Same as SbMemoryAllocateUnchecked, but will abort() in the case of an allocation
 failure.
 
 DO NOT CALL. Call SbMemoryAllocate(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocateChecked(size_t size)
 ```
 
-### SbMemoryAllocateNoReport ###
+### SbMemoryAllocateNoReport
 
 Same as SbMemoryAllocate() but will not report memory to the tracker. Avoid
 using this unless absolutely necessary.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocateNoReport(size_t size)
 ```
 
-### SbMemoryAllocateUnchecked ###
+### SbMemoryAllocateUnchecked
 
 This is the implementation of SbMemoryAllocate that must be provided by
 Starboard ports.
 
 DO NOT CALL. Call SbMemoryAllocate(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocateUnchecked(size_t size)
 ```
 
-### SbMemoryCalloc ###
+### SbMemoryCalloc
 
 A wrapper that implements a drop-in replacement for `calloc`, which is used in
 some packages.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static void* SbMemoryCalloc(size_t count, size_t size)
 ```
 
-### SbMemoryDeallocate ###
+### SbMemoryDeallocate
 
 Frees a previously allocated chunk of memory. If `memory` is NULL, then the
 operation is a no-op. This function should be called from the client codebase.
@@ -166,87 +166,87 @@
 
 `memory`: The chunk of memory to be freed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryDeallocate(void *memory)
 ```
 
-### SbMemoryDeallocateAligned ###
+### SbMemoryDeallocateAligned
 
 `memory`: The chunk of memory to be freed. If `memory` is NULL, then the
 function is a no-op.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryDeallocateAligned(void *memory)
 ```
 
-### SbMemoryDeallocateNoReport ###
+### SbMemoryDeallocateNoReport
 
 Same as SbMemoryDeallocate() but will not report memory deallocation to the
 tracker. This function must be matched with SbMemoryAllocateNoReport().
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryDeallocateNoReport(void *memory)
 ```
 
-### SbMemoryFlush ###
+### SbMemoryFlush
 
 Flushes any data in the given virtual address range that is cached locally in
 the current processor core to physical memory, ensuring that data and
 instruction caches are cleared. This is required to be called on executable
 memory that has been written to and might be executed in the future.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryFlush(void *virtual_address, int64_t size_bytes)
 ```
 
-### SbMemoryFree ###
+### SbMemoryFree
 
 This is the implementation of SbMemoryDeallocate that must be provided by
 Starboard ports.
 
 DO NOT CALL. Call SbMemoryDeallocate(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryFree(void *memory)
 ```
 
-### SbMemoryFreeAligned ###
+### SbMemoryFreeAligned
 
 This is the implementation of SbMemoryFreeAligned that must be provided by
 Starboard ports.
 
 DO NOT CALL. Call SbMemoryDeallocateAligned(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryFreeAligned(void *memory)
 ```
 
-### SbMemoryGetStackBounds ###
+### SbMemoryGetStackBounds
 
 Gets the stack bounds for the current thread.
 
 `out_high`: The highest addressable byte + 1 for the current thread. `out_low`:
 The lowest addressable byte for the current thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryGetStackBounds(void **out_high, void **out_low)
 ```
 
-### SbMemoryMap ###
+### SbMemoryMap
 
 Allocates `size_bytes` worth of physical memory pages and maps them into an
 available virtual region. This function returns `SB_MEMORY_MAP_FAILED` on
@@ -261,24 +261,24 @@
 should not count it against any memory budget. `name`: A value that appears in
 the debugger on some platforms. The value can be up to 32 bytes.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryMap(int64_t size_bytes, int flags, const char *name)
 ```
 
-### SbMemoryProtect ###
+### SbMemoryProtect
 
 Change the protection of `size_bytes` of memory regions, starting from
 `virtual_address`, to `flags`, returning `true` on success.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMemoryProtect(void *virtual_address, int64_t size_bytes, int flags)
 ```
 
-### SbMemoryReallocate ###
+### SbMemoryReallocate
 
 Attempts to resize `memory` to be at least `size` bytes, without touching the
 contents of memory.
@@ -298,39 +298,39 @@
 `memory` will be resized. If `size` is `0`, the function may return `NULL` or it
 may return a unique pointer value that can be passed to SbMemoryDeallocate.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryReallocate(void *memory, size_t size)
 ```
 
-### SbMemoryReallocateChecked ###
+### SbMemoryReallocateChecked
 
 Same as SbMemoryReallocateUnchecked, but will abort() in the case of an
 allocation failure.
 
 DO NOT CALL. Call SbMemoryReallocate(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryReallocateChecked(void *memory, size_t size)
 ```
 
-### SbMemoryReallocateUnchecked ###
+### SbMemoryReallocateUnchecked
 
 This is the implementation of SbMemoryReallocate that must be provided by
 Starboard ports.
 
 DO NOT CALL. Call SbMemoryReallocate(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryReallocateUnchecked(void *memory, size_t size)
 ```
 
-### SbMemoryUnmap ###
+### SbMemoryUnmap
 
 Unmap `size_bytes` of physical pages starting from `virtual_address`, returning
 `true` on success. After this function completes, [virtual_address,
@@ -340,7 +340,7 @@
 `(void*)0xA000`, and another call to `SbMemoryMap(0x1000)` returns
 `(void*)0xB000`, `SbMemoryUnmap(0xA000, 0x2000)` should free both regions.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMemoryUnmap(void *virtual_address, int64_t size_bytes)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/memory_reporter.md b/cobalt/site/docs/reference/starboard/modules/14/memory_reporter.md
index d67ef1a..d1273c6 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/memory_reporter.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/memory_reporter.md
@@ -1,57 +1,57 @@
----
-layout: doc
-title: "Starboard Module Reference: memory_reporter.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `memory_reporter.h`
 
 Provides an interface for memory reporting.
 
-## Typedefs ##
+## Typedefs
 
-### SbMemoryReporterOnAlloc ###
+### SbMemoryReporterOnAlloc
 
 A function to report a memory allocation from SbMemoryAllocate(). Note that
 operator new calls SbMemoryAllocate which will delegate to this callback.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbMemoryReporterOnAlloc) (void *context, const void *memory, size_t size)
 ```
 
-### SbMemoryReporterOnDealloc ###
+### SbMemoryReporterOnDealloc
 
 A function to report a memory deallocation from SbMemoryDeallcoate(). Note that
 operator delete calls SbMemoryDeallocate which will delegate to this callback.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbMemoryReporterOnDealloc) (void *context, const void *memory)
 ```
 
-### SbMemoryReporterOnMapMemory ###
+### SbMemoryReporterOnMapMemory
 
 A function to report a memory mapping from SbMemoryMap().
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbMemoryReporterOnMapMemory) (void *context, const void *memory, size_t size)
 ```
 
-### SbMemoryReporterOnUnMapMemory ###
+### SbMemoryReporterOnUnMapMemory
 
 A function to report a memory unmapping from SbMemoryUnmap().
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbMemoryReporterOnUnMapMemory) (void *context, const void *memory, size_t size)
 ```
 
-## Structs ##
+## Structs
 
-### SbMemoryReporter ###
+### SbMemoryReporter
 
 SbMemoryReporter allows memory reporting via user-supplied functions. The void*
 context is passed to every call back. It's strongly recommended that C-Style
@@ -59,7 +59,7 @@
 compiler. For example, SbMemoryReporter mem_reporter = { MallocCallback, ....
 context };
 
-#### Members ####
+#### Members
 
 *   `SbMemoryReporterOnAlloc on_alloc_cb`
 
@@ -77,9 +77,9 @@
 
     Optional, is passed to callbacks as first argument.
 
-## Functions ##
+## Functions
 
-### SbMemorySetReporter ###
+### SbMemorySetReporter
 
 Sets the MemoryReporter. Any previous memory reporter is unset. No lifetime
 management is done internally on input pointer.
@@ -96,7 +96,7 @@
 SbMemoryReporter* mem_reporter = new ...; SbMemorySetReporter(&mem_reporter);
 ... SbMemorySetReporter(NULL); delete mem_reporter; // May crash.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMemorySetReporter(struct SbMemoryReporter *tracker)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/microphone.md b/cobalt/site/docs/reference/starboard/modules/14/microphone.md
index d760e1e..bcf9e43 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/microphone.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/microphone.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: microphone.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `microphone.h`
 
 Defines functions for microphone creation, control, audio data fetching, and
 destruction. This module supports multiple calls to `SbMicrophoneOpen` and
@@ -31,23 +31,23 @@
 
 1.  Destroy the microphone with `SbMicrophoneDestroy`.
 
-## Macros ##
+## Macros
 
-### kSbMicrophoneIdInvalid ###
+### kSbMicrophoneIdInvalid
 
 Well-defined value for an invalid microphone ID handle.
 
-### kSbMicrophoneInvalid ###
+### kSbMicrophoneInvalid
 
 Well-defined value for an invalid microphone handle.
 
-## Enums ##
+## Enums
 
-### SbMicrophoneType ###
+### SbMicrophoneType
 
 All possible microphone types.
 
-#### Values ####
+#### Values
 
 *   `kSbMicrophoneCamera`
 
@@ -66,37 +66,37 @@
     Unknown microphone type. The microphone could be different than the other
     enum descriptions or could fall under one of those descriptions.
 
-## Typedefs ##
+## Typedefs
 
-### SbMicrophone ###
+### SbMicrophone
 
 An opaque handle to an implementation-private structure that represents a
 microphone.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbMicrophonePrivate* SbMicrophone
 ```
 
-### SbMicrophoneId ###
+### SbMicrophoneId
 
 An opaque handle to an implementation-private structure that represents a
 microphone ID.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbMicrophoneIdPrivate* SbMicrophoneId
 ```
 
-## Structs ##
+## Structs
 
-### SbMicrophoneInfo ###
+### SbMicrophoneInfo
 
 Microphone information.
 
-#### Members ####
+#### Members
 
 *   `SbMicrophoneId id`
 
@@ -116,9 +116,9 @@
     of the microphone type. For example, "Headset Microphone". The string must
     be null terminated.
 
-## Functions ##
+## Functions
 
-### SbMicrophoneClose ###
+### SbMicrophoneClose
 
 Closes the microphone port, stops recording audio on `microphone`, and clears
 the unread buffer if it is not empty. If the microphone has already been
@@ -127,13 +127,13 @@
 
 `microphone`: The microphone to close.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMicrophoneClose(SbMicrophone microphone)
 ```
 
-### SbMicrophoneCreate ###
+### SbMicrophoneCreate
 
 Creates a microphone with the specified ID, audio sample rate, and cached audio
 buffer size. Starboard only requires support for creating one microphone at a
@@ -153,25 +153,25 @@
 this buffer in smaller chunks than this size. This parameter must be set to a
 value greater than zero and the ideal size is `2^n`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbMicrophone SbMicrophoneCreate(SbMicrophoneId id, int sample_rate_in_hz, int buffer_size_bytes)
 ```
 
-### SbMicrophoneDestroy ###
+### SbMicrophoneDestroy
 
 Destroys a microphone. If the microphone is in started state, it is first
 stopped and then destroyed. Any data that has been recorded and not read is
 thrown away.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMicrophoneDestroy(SbMicrophone microphone)
 ```
 
-### SbMicrophoneGetAvailable ###
+### SbMicrophoneGetAvailable
 
 Retrieves all currently available microphone information and stores it in
 `out_info_array`. The return value is the number of the available microphones.
@@ -184,43 +184,43 @@
 placed into this output parameter. `info_array_size`: The size of
 `out_info_array`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMicrophoneGetAvailable(SbMicrophoneInfo *out_info_array, int info_array_size)
 ```
 
-### SbMicrophoneIdIsValid ###
+### SbMicrophoneIdIsValid
 
 Indicates whether the given microphone ID is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbMicrophoneIdIsValid(SbMicrophoneId id)
 ```
 
-### SbMicrophoneIsSampleRateSupported ###
+### SbMicrophoneIsSampleRateSupported
 
 Indicates whether the microphone supports the sample rate.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMicrophoneIsSampleRateSupported(SbMicrophoneId id, int sample_rate_in_hz)
 ```
 
-### SbMicrophoneIsValid ###
+### SbMicrophoneIsValid
 
 Indicates whether the given microphone is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbMicrophoneIsValid(SbMicrophone microphone)
 ```
 
-### SbMicrophoneOpen ###
+### SbMicrophoneOpen
 
 Opens the microphone port and starts recording audio on `microphone`.
 
@@ -230,13 +230,13 @@
 open. `microphone`: The microphone that will be opened and will start recording
 audio.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMicrophoneOpen(SbMicrophone microphone)
 ```
 
-### SbMicrophoneRead ###
+### SbMicrophoneRead
 
 Retrieves the recorded audio data from the microphone and writes that data to
 `out_audio_data`.
@@ -255,7 +255,7 @@
 smaller than `min_read_size` of `SbMicrophoneInfo`, the extra audio data that
 has already been read from the device is discarded.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMicrophoneRead(SbMicrophone microphone, void *out_audio_data, int audio_data_size)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/mutex.md b/cobalt/site/docs/reference/starboard/modules/14/mutex.md
index 05dd810..82ff850 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/mutex.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/mutex.md
@@ -1,24 +1,24 @@
----
-layout: doc
-title: "Starboard Module Reference: mutex.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `mutex.h`
 
 Defines a mutually exclusive lock that can be used to coordinate with other
 threads.
 
-## Macros ##
+## Macros
 
-### SB_MUTEX_MAX_SIZE ###
+### SB_MUTEX_MAX_SIZE
 
 Max size of the SbMutex type.
 
-## Enums ##
+## Enums
 
-### SbMutexResult ###
+### SbMutexResult
 
 Enumeration of possible results from acquiring a mutex.
 
-#### Values ####
+#### Values
 
 *   `kSbMutexAcquired`
 
@@ -30,22 +30,22 @@
 
     The mutex has already been destroyed.
 
-## Typedefs ##
+## Typedefs
 
-### SbMutex ###
+### SbMutex
 
 An opaque handle to a mutex type with reserved memory buffer of size
 SB_MUTEX_MAX_SIZE and aligned at void pointer type.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef union SbMutex  SbMutex
 ```
 
-## Functions ##
+## Functions
 
-### SbMutexAcquire ###
+### SbMutexAcquire
 
 Acquires `mutex`, blocking indefinitely. The return value identifies the
 acquisition result. SbMutexes are not reentrant, so a recursive acquisition
@@ -53,13 +53,13 @@
 
 `mutex`: The mutex to be acquired.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbMutexResult SbMutexAcquire(SbMutex *mutex)
 ```
 
-### SbMutexAcquireTry ###
+### SbMutexAcquireTry
 
 Acquires `mutex`, without blocking. The return value identifies the acquisition
 result. SbMutexes are not reentrant, so a recursive acquisition has undefined
@@ -67,52 +67,52 @@
 
 `mutex`: The mutex to be acquired.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbMutexResult SbMutexAcquireTry(SbMutex *mutex)
 ```
 
-### SbMutexCreate ###
+### SbMutexCreate
 
 Creates a new mutex. The return value indicates whether the function was able to
 create a new mutex.
 
 `out_mutex`: The handle to the newly created mutex.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMutexCreate(SbMutex *out_mutex)
 ```
 
-### SbMutexDestroy ###
+### SbMutexDestroy
 
 Destroys a mutex. The return value indicates whether the destruction was
 successful. Destroying a locked mutex results in undefined behavior.
 
 `mutex`: The mutex to be invalidated.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMutexDestroy(SbMutex *mutex)
 ```
 
-### SbMutexIsSuccess ###
+### SbMutexIsSuccess
 
 Indicates whether the given result is a success. A value of `true` indicates
 that the mutex was acquired.
 
 `result`: The result being checked.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbMutexIsSuccess(SbMutexResult result)
 ```
 
-### SbMutexRelease ###
+### SbMutexRelease
 
 Releases `mutex` held by the current thread. The return value indicates whether
 the release was successful. Releases should always be successful if `mutex` is
@@ -120,7 +120,7 @@
 
 `mutex`: The mutex to be released.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMutexRelease(SbMutex *mutex)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/once.md b/cobalt/site/docs/reference/starboard/modules/14/once.md
index 2ad1959..d773024 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/once.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/once.md
@@ -1,43 +1,43 @@
----
-layout: doc
-title: "Starboard Module Reference: once.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `once.h`
 
 Onces represent initializations that should only ever happen once per process,
 in a thread-safe way.
 
-## Macros ##
+## Macros
 
-### SB_ONCE_MAX_SIZE ###
+### SB_ONCE_MAX_SIZE
 
 Max size of the SbOnceControl type.
 
-## Typedefs ##
+## Typedefs
 
-### SbOnceControl ###
+### SbOnceControl
 
 An opaque handle to a once control type with reserved memory buffer of size
 SB_ONCE_MAX_SIZE and aligned at void pointer type.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef union SbOnceControl  SbOnceControl
 ```
 
-### SbOnceInitRoutine ###
+### SbOnceInitRoutine
 
 Function pointer type for methods that can be called via the SbOnce() system.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbOnceInitRoutine) (void)
 ```
 
-## Functions ##
+## Functions
 
-### SbOnce ###
+### SbOnce
 
 Thread-safely runs `init_routine` only once.
 
@@ -50,7 +50,7 @@
 *   If `once_control` or `init_routine` is invalid, the function returns
     `false`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbOnce(SbOnceControl *once_control, SbOnceInitRoutine init_routine)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/player.md b/cobalt/site/docs/reference/starboard/modules/14/player.md
index 3fd955d..0dab908 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/player.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/player.md
@@ -1,45 +1,45 @@
----
-layout: doc
-title: "Starboard Module Reference: player.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `player.h`
 
 Defines an interface for controlling playback of media elementary streams.
 
-## Macros ##
+## Macros
 
-### SB_PLAYER_INITIAL_TICKET ###
+### SB_PLAYER_INITIAL_TICKET
 
 The value of the initial ticket held by the player before the first seek. The
 player will use this ticket value to make the first call to SbPlayerStatusFunc
 with kSbPlayerStateInitialized.
 
-### SB_PLAYER_NO_DURATION ###
+### SB_PLAYER_NO_DURATION
 
 The value to pass into SbPlayerCreate's `duration_pts` argument for cases where
 the duration is unknown, such as for live streams.
 
-### kSbPlayerInvalid ###
+### kSbPlayerInvalid
 
 Well-defined value for an invalid player.
 
-## Enums ##
+## Enums
 
-### SbPlayerDecoderState ###
+### SbPlayerDecoderState
 
 An indicator of whether the decoder can accept more samples.
 
-#### Values ####
+#### Values
 
 *   `kSbPlayerDecoderStateNeedsData`
 
     The decoder is asking for one more sample.
 
-### SbPlayerSampleSideDataType ###
+### SbPlayerSampleSideDataType
 
 Identify the type of side data accompanied with `SbPlayerSampleInfo`, as side
 data may come from multiple sources.
 
-#### Values ####
+#### Values
 
 *   `kMatroskaBlockAdditional`
 
@@ -48,11 +48,11 @@
     . The first 8 bytes of the data contains the value of BlockAddID in big
     endian format, followed by the content of BlockAdditional.
 
-### SbPlayerState ###
+### SbPlayerState
 
 An indicator of the general playback state.
 
-#### Values ####
+#### Values
 
 *   `kSbPlayerStateInitialized`
 
@@ -76,31 +76,31 @@
 
     The player has been destroyed, and will send no more callbacks.
 
-## Typedefs ##
+## Typedefs
 
-### SbPlayer ###
+### SbPlayer
 
 An opaque handle to an implementation-private structure representing a player.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbPlayerPrivate* SbPlayer
 ```
 
-### SbPlayerDeallocateSampleFunc ###
+### SbPlayerDeallocateSampleFunc
 
 Callback to free the given sample buffer data. When more than one buffer are
 sent in SbPlayerWriteSample(), the implementation only has to call this callback
-with `sample_buffer` points to the the first buffer.
+with `sample_buffer` points to the first buffer.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbPlayerDeallocateSampleFunc) (SbPlayer player, void *context, const void *sample_buffer)
 ```
 
-### SbPlayerDecoderStatusFunc ###
+### SbPlayerDecoderStatusFunc
 
 Callback for decoder status updates, called in response to a call to
 SbPlayerSeek() or SbPlayerWriteSample(). This callback will never be called
@@ -114,45 +114,45 @@
 SbPlayerWriteEndOfStream(). The player implementation should update the decoder
 status again after such call to notify its user to continue writing more frames.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbPlayerDecoderStatusFunc) (SbPlayer player, void *context, SbMediaType type, SbPlayerDecoderState state, int ticket)
 ```
 
-### SbPlayerErrorFunc ###
+### SbPlayerErrorFunc
 
 Callback for player errors, that may set a `message`. `error`: indicates the
 error code. `message`: provides specific informative diagnostic message about
 the error condition encountered. It is ok for the message to be an empty string
 or NULL if no information is available.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbPlayerErrorFunc) (SbPlayer player, void *context, SbPlayerError error, const char *message)
 ```
 
-### SbPlayerStatusFunc ###
+### SbPlayerStatusFunc
 
 Callback for player status updates. These callbacks will happen on a different
 thread than the calling thread, and it is not valid to call SbPlayer functions
 from within this callback.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbPlayerStatusFunc) (SbPlayer player, void *context, SbPlayerState state, int ticket)
 ```
 
-## Structs ##
+## Structs
 
-### SbPlayerCreationParam ###
+### SbPlayerCreationParam
 
 The playback related parameters to pass into SbPlayerCreate() and
 SbPlayerGetPreferredOutputMode().
 
-#### Members ####
+#### Members
 
 *   `SbDrmSystem drm_system`
 
@@ -178,11 +178,11 @@
     should be made available for the application to pull via calls to
     SbPlayerGetCurrentFrame().
 
-### SbPlayerInfo2 ###
+### SbPlayerInfo2
 
 Information about the current media playback state.
 
-#### Members ####
+#### Members
 
 *   `SbTime current_media_timestamp`
 
@@ -229,11 +229,11 @@
     faster than normal speed. When it is less than one, the video is played in a
     slower than normal speed. Negative speeds are not supported.
 
-### SbPlayerSampleInfo ###
+### SbPlayerSampleInfo
 
 Information about the samples to be written into SbPlayerWriteSamples().
 
-#### Members ####
+#### Members
 
 *   `SbMediaType type`
 *   `const void * buffer`
@@ -266,12 +266,12 @@
     The DRM system related info for the media sample. This value is required for
     encrypted samples. Otherwise, it must be `NULL`.
 
-### SbPlayerSampleSideData ###
+### SbPlayerSampleSideData
 
 Side data accompanied with `SbPlayerSampleInfo`, it can be arbitrary binary data
 coming from multiple sources.
 
-#### Members ####
+#### Members
 
 *   `SbPlayerSampleSideDataType type`
 *   `const uint8_t * data`
@@ -282,9 +282,9 @@
 
     The size of the data pointed by `data`, in bytes.
 
-## Functions ##
+## Functions
 
-### SbPlayerDestroy ###
+### SbPlayerDestroy
 
 Destroys `player`, freeing all associated resources.
 
@@ -299,13 +299,13 @@
     SbPlayerDestroy has been called on that player. `player`: The player to be
     destroyed. Must not be `kSbPlayerInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbPlayerDestroy(SbPlayer player)
 ```
 
-### SbPlayerGetCurrentFrame ###
+### SbPlayerGetCurrentFrame
 
 Given a player created with the kSbPlayerOutputModeDecodeToTexture output mode,
 it will return a SbDecodeTarget representing the current frame to be rasterized.
@@ -317,13 +317,13 @@
 
 `player` must not be `kSbPlayerInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbDecodeTarget SbPlayerGetCurrentFrame(SbPlayer player)
 ```
 
-### SbPlayerGetMaximumNumberOfSamplesPerWrite ###
+### SbPlayerGetMaximumNumberOfSamplesPerWrite
 
 Writes a single sample of the given media type to `player`'s input stream. Its
 data may be passed in via more than one buffers. The lifetime of
@@ -337,13 +337,13 @@
 of sample for which the number is retrieved. See the `SbMediaType` enum in
 media.h.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbPlayerGetMaximumNumberOfSamplesPerWrite(SbPlayer player, SbMediaType sample_type)
 ```
 
-### SbPlayerGetPreferredOutputMode ###
+### SbPlayerGetPreferredOutputMode
 
 Returns the preferred output mode of the implementation when a video described
 by `creation_param` is played. It is assumed that it is okay to call
@@ -361,23 +361,23 @@
 and the implementation should try its best effort to return a valid output mode.
 `creation_param` must not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbPlayerOutputMode SbPlayerGetPreferredOutputMode(const SbPlayerCreationParam *creation_param)
 ```
 
-### SbPlayerIsValid ###
+### SbPlayerIsValid
 
 Returns whether the given player handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbPlayerIsValid(SbPlayer player)
 ```
 
-### SbPlayerSetBounds ###
+### SbPlayerSetBounds
 
 Sets the player bounds to the given graphics plane coordinates. The changes do
 not take effect until the next graphics frame buffer swap. The default bounds
@@ -398,13 +398,13 @@
 `y`: The y-coordinate of the upper-left corner of the player. `width`: The width
 of the player, in pixels. `height`: The height of the player, in pixels.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbPlayerSetBounds(SbPlayer player, int z_index, int x, int y, int width, int height)
 ```
 
-### SbPlayerSetPlaybackRate ###
+### SbPlayerSetPlaybackRate
 
 Set the playback rate of the `player`. `rate` is default to 1.0 which indicates
 the playback is at its original speed. A `rate` greater than one will make the
@@ -419,13 +419,13 @@
 
 `player` must not be `kSbPlayerInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbPlayerSetPlaybackRate(SbPlayer player, double playback_rate)
 ```
 
-### SbPlayerSetVolume ###
+### SbPlayerSetVolume
 
 Sets the player's volume.
 
@@ -434,13 +434,13 @@
 `0.0` and `1.0`, inclusive. A value of `0.0` means that the audio should be
 muted, and a value of `1.0` means that it should be played at full volume.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbPlayerSetVolume(SbPlayer player, double volume)
 ```
 
-### SbPlayerWriteEndOfStream ###
+### SbPlayerWriteEndOfStream
 
 Writes a marker to `player`'s input stream of `stream_type` indicating that
 there are no more samples for that media type for the remainder of this media
@@ -450,13 +450,13 @@
 `player`: The player to which the marker is written. `stream_type`: The type of
 stream for which the marker is written.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbPlayerWriteEndOfStream(SbPlayer player, SbMediaType stream_type)
 ```
 
-### SbPlayerWriteSample2 ###
+### SbPlayerWriteSample2
 
 `sample_type`: The type of sample being written. See the `SbMediaType` enum in
 media.h. `sample_infos`: A pointer to an array of SbPlayerSampleInfo with
@@ -468,7 +468,7 @@
 `sample_infos`. It has to be at least one, and less than the return value of
 SbPlayerGetMaximumNumberOfSamplesPerWrite().
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbPlayerWriteSample2(SbPlayer player, SbMediaType sample_type, const SbPlayerSampleInfo *sample_infos, int number_of_sample_infos)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/socket.md b/cobalt/site/docs/reference/starboard/modules/14/socket.md
index 9e0f81b..744c04e 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/socket.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/socket.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: socket.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `socket.h`
 
 Defines Starboard socket I/O functions. Starboard supports IPv4 and IPv6, TCP
 and UDP, server and client sockets. Some platforms may not support IPv6, some
@@ -18,19 +18,19 @@
 TODO: For platforms that do not support sockets at all, they must support at
 least a high-level HTTP client API (to be defined later).
 
-## Macros ##
+## Macros
 
-### kSbSocketInvalid ###
+### kSbSocketInvalid
 
 Well-defined value for an invalid socket handle.
 
-## Enums ##
+## Enums
 
-### SbSocketAddressType ###
+### SbSocketAddressType
 
 All possible address types.
 
-#### Values ####
+#### Values
 
 *   `kSbSocketAddressTypeIpv4`
 
@@ -39,13 +39,13 @@
 
     An IPv6 address, which uses 16 entries of the address buffer.
 
-### SbSocketError ###
+### SbSocketError
 
 Enumeration of all Starboard socket operation results. Despite the enum name,
 note that the value actually describes the outcome of an operation, which is not
 always an error.
 
-#### Values ####
+#### Values
 
 *   `kSbSocketOk`
 
@@ -63,11 +63,11 @@
 
     The operation failed for some other reason not specified above.
 
-### SbSocketProtocol ###
+### SbSocketProtocol
 
 All possible IP socket types.
 
-#### Values ####
+#### Values
 
 *   `kSbSocketProtocolTcp`
 
@@ -77,11 +77,11 @@
     The UDP/IP protocol, an unreliable, connectionless, discrete packet
     (datagram) protocol.
 
-### SbSocketResolveFilter ###
+### SbSocketResolveFilter
 
 Bits that can be set when calling SbSocketResolve to filter the results.
 
-#### Values ####
+#### Values
 
 *   `kSbSocketResolveFilterNone`
 
@@ -93,25 +93,25 @@
 
     Include Ipv6 addresses.
 
-## Typedefs ##
+## Typedefs
 
-### SbSocket ###
+### SbSocket
 
 A handle to a socket.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbSocketPrivate* SbSocket
 ```
 
-## Structs ##
+## Structs
 
-### SbSocketAddress ###
+### SbSocketAddress
 
 A representation of any possible supported address type.
 
-#### Members ####
+#### Members
 
 *   `uint8_t address`
 
@@ -126,11 +126,11 @@
     The port component of this socket address. If not specified, it will be
     zero, which is officially undefined.
 
-### SbSocketResolution ###
+### SbSocketResolution
 
 The result of a host name resolution.
 
-#### Members ####
+#### Members
 
 *   `SbSocketAddress* addresses`
 
@@ -139,9 +139,9 @@
 
     The length of the `addresses` array.
 
-## Functions ##
+## Functions
 
-### SbSocketAccept ###
+### SbSocketAccept
 
 Accepts a pending connection on `socket` and returns a new SbSocket representing
 that connection. This function sets the error on `socket` and returns
@@ -149,13 +149,13 @@
 
 `socket`: The SbSocket that is accepting a pending connection.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocket SbSocketAccept(SbSocket socket)
 ```
 
-### SbSocketBind ###
+### SbSocketBind
 
 Binds `socket` to a specific local interface and port specified by
 `local_address`. This function sets and returns the socket error if it is unable
@@ -170,24 +170,24 @@
 *   Setting the IP address to `0.0.0.0` means that the socket should be bound to
     all interfaces.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketError SbSocketBind(SbSocket socket, const SbSocketAddress *local_address)
 ```
 
-### SbSocketClearLastError ###
+### SbSocketClearLastError
 
 Clears the last error set on `socket`. The return value indicates whether the
 socket error was cleared.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketClearLastError(SbSocket socket)
 ```
 
-### SbSocketConnect ###
+### SbSocketConnect
 
 Opens a connection of `socket`'s type to the host and port specified by
 `address`. This function sets and returns the socket error if it is unable to
@@ -197,13 +197,13 @@
 `socket`: The type of connection that should be opened. `address`: The host and
 port to which the socket should connect.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketError SbSocketConnect(SbSocket socket, const SbSocketAddress *address)
 ```
 
-### SbSocketCreate ###
+### SbSocketCreate
 
 Creates a new non-blocking socket for protocol `protocol` using address family
 `address_type`.
@@ -216,13 +216,13 @@
 `address_type`: The type of IP address to use for the socket. `protocol`: The
 protocol to use for the socket.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocket SbSocketCreate(SbSocketAddressType address_type, SbSocketProtocol protocol)
 ```
 
-### SbSocketDestroy ###
+### SbSocketDestroy
 
 Destroys the `socket` by flushing it, closing any connection that may be active
 on it, and reclaiming any resources associated with it, including any
@@ -234,25 +234,25 @@
 
 `socket`: The SbSocket to be destroyed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketDestroy(SbSocket socket)
 ```
 
-### SbSocketFreeResolution ###
+### SbSocketFreeResolution
 
 Frees a resolution allocated by SbSocketResolve.
 
 `resolution`: The resolution to be freed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSocketFreeResolution(SbSocketResolution *resolution)
 ```
 
-### SbSocketGetInterfaceAddress ###
+### SbSocketGetInterfaceAddress
 
 Gets the source address and the netmask that would be used to connect to the
 destination. The netmask parameter is optional, and only populated if a non-NULL
@@ -288,26 +288,26 @@
 value is passed in, this function places the netmask associated with the source
 address in this output variable.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketGetInterfaceAddress(const SbSocketAddress *const destination, SbSocketAddress *out_source_address, SbSocketAddress *out_netmask)
 ```
 
-### SbSocketGetLastError ###
+### SbSocketGetLastError
 
 Returns the last error set on `socket`. If `socket` is not valid, this function
 returns `kSbSocketErrorFailed`.
 
 `socket`: The SbSocket that the last error is returned for.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketError SbSocketGetLastError(SbSocket socket)
 ```
 
-### SbSocketGetLocalAddress ###
+### SbSocketGetLocalAddress
 
 Gets the address that this socket is bound to locally, if the socket is
 connected. The return value indicates whether the address was retrieved
@@ -316,59 +316,59 @@
 `socket`: The SbSocket for which the local address is retrieved. `out_address`:
 The SbSocket's local address.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketGetLocalAddress(SbSocket socket, SbSocketAddress *out_address)
 ```
 
-### SbSocketIsConnected ###
+### SbSocketIsConnected
 
 Indicates whether `socket` is connected to anything. Invalid sockets are not
 connected.
 
 `socket`: The SbSocket to be checked.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketIsConnected(SbSocket socket)
 ```
 
-### SbSocketIsConnectedAndIdle ###
+### SbSocketIsConnectedAndIdle
 
 Returns whether `socket` is connected to anything, and, if so, whether it is
 receiving any data.
 
 `socket`: The SbSocket to be checked.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketIsConnectedAndIdle(SbSocket socket)
 ```
 
-### SbSocketIsIpv6Supported ###
+### SbSocketIsIpv6Supported
 
 Returns whether IPV6 is supported on the current platform.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketIsIpv6Supported()
 ```
 
-### SbSocketIsValid ###
+### SbSocketIsValid
 
 Returns whether the given socket handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbSocketIsValid(SbSocket socket)
 ```
 
-### SbSocketJoinMulticastGroup ###
+### SbSocketJoinMulticastGroup
 
 Joins `socket` to an IP multicast group identified by `address`. The equivalent
 of IP_ADD_MEMBERSHIP. The return value indicates whether the socket was joined
@@ -377,13 +377,13 @@
 `socket`: The SbSocket to be joined to the IP multicast group. `address`: The
 location of the IP multicast group.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketJoinMulticastGroup(SbSocket socket, const SbSocketAddress *address)
 ```
 
-### SbSocketListen ###
+### SbSocketListen
 
 Causes `socket` to listen on the local address that `socket` was previously
 bound to by SbSocketBind. This function sets and returns the socket error if it
@@ -392,13 +392,13 @@
 
 `socket`: The SbSocket on which the function operates.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketError SbSocketListen(SbSocket socket)
 ```
 
-### SbSocketReceiveFrom ###
+### SbSocketReceiveFrom
 
 Reads up to `data_size` bytes from `socket` into `out_data` and places the
 source address of the packet in `out_source` if out_source is not NULL. Returns
@@ -420,13 +420,13 @@
 the socket. Must not be NULL. `data_size`: The number of bytes to read.
 `out_source`: The source address of the packet.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbSocketReceiveFrom(SbSocket socket, char *out_data, int data_size, SbSocketAddress *out_source)
 ```
 
-### SbSocketResolve ###
+### SbSocketResolve
 
 Synchronously resolves `hostname` into the returned SbSocketResolution , which
 must be freed with SbSocketFreeResolution. The function returns `NULL` if it is
@@ -438,13 +438,13 @@
 However, if one IP address family filter is specified, only that address family
 is included. The function ignores unrecognized filter bits.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketResolution* SbSocketResolve(const char *hostname, int filters)
 ```
 
-### SbSocketSendTo ###
+### SbSocketSendTo
 
 Writes up to `data_size` bytes of `data` to `destination` via `socket`. Returns
 the number of bytes written, or a negative number if there is an error, in which
@@ -466,13 +466,13 @@
 connected persistently, so setting `destination` when sending to a TCP socket
 will cause an error.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbSocketSendTo(SbSocket socket, const char *data, int data_size, const SbSocketAddress *destination)
 ```
 
-### SbSocketSetBroadcast ###
+### SbSocketSetBroadcast
 
 Sets the `SO_BROADCAST`, or equivalent, option to `value` on `socket`. The
 return value indicates whether the option was actually set.
@@ -483,13 +483,13 @@
 `socket`: The SbSocket for which the option is set. `value`: The new value for
 the option.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetBroadcast(SbSocket socket, bool value)
 ```
 
-### SbSocketSetReceiveBufferSize ###
+### SbSocketSetReceiveBufferSize
 
 Sets the `SO_RCVBUF`, or equivalent, option to `size` on `socket`. The return
 value indicates whether the option was actually set.
@@ -497,13 +497,13 @@
 `socket`: The SbSocket for which the option is set. `size`: The value for the
 option.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetReceiveBufferSize(SbSocket socket, int32_t size)
 ```
 
-### SbSocketSetReuseAddress ###
+### SbSocketSetReuseAddress
 
 Sets the `SO_REUSEADDR`, or equivalent, option to `value` on `socket`. The
 return value indicates whether the option was actually set.
@@ -514,13 +514,13 @@
 `socket`: The SbSocket for which the option is set. `value`: The new value for
 the option.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetReuseAddress(SbSocket socket, bool value)
 ```
 
-### SbSocketSetSendBufferSize ###
+### SbSocketSetSendBufferSize
 
 Sets the `SO_SNDBUF`, or equivalent, option to `size` on `socket`. The return
 value indicates whether the option was actually set.
@@ -528,13 +528,13 @@
 `socket`: The SbSocket for which the option is set. `size`: The value for the
 option.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetSendBufferSize(SbSocket socket, int32_t size)
 ```
 
-### SbSocketSetTcpKeepAlive ###
+### SbSocketSetTcpKeepAlive
 
 Sets the `SO_KEEPALIVE`, or equivalent, option to `value` on `socket`. The
 return value indicates whether the option was actually set.
@@ -545,13 +545,13 @@
 The time between keep-alive packets. This value is only relevant if `value` is
 `true`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetTcpKeepAlive(SbSocket socket, bool value, SbTime period)
 ```
 
-### SbSocketSetTcpNoDelay ###
+### SbSocketSetTcpNoDelay
 
 Sets the `TCP_NODELAY`, or equivalent, option to `value` on `socket`. The return
 value indicates whether the option was actually set.
@@ -564,13 +564,13 @@
 `socket`: The SbSocket for which the option is set. `value`: Indicates whether
 the Nagle algorithm should be disabled (`value`=`true`).
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetTcpNoDelay(SbSocket socket, bool value)
 ```
 
-### SbSocketSetTcpWindowScaling ###
+### SbSocketSetTcpWindowScaling
 
 Sets the `SO_WINSCALE`, or equivalent, option to `value` on `socket`. The return
 value indicates whether the option was actually set.
@@ -578,7 +578,7 @@
 `socket`: The SbSocket for which the option is set. `value`: The value for the
 option.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetTcpWindowScaling(SbSocket socket, bool value)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/socket_waiter.md b/cobalt/site/docs/reference/starboard/modules/14/socket_waiter.md
index 855dcf8..f1c6bd8 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/socket_waiter.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/socket_waiter.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: socket_waiter.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `socket_waiter.h`
 
 Allows a thread to wait on many sockets at once. The standard usage pattern
 would be for a single I/O thread to:
@@ -26,19 +26,19 @@
 queuing the work item, or the SbSocketWaiter is not otherwise guaranteed to wake
 up.
 
-## Macros ##
+## Macros
 
-### kSbSocketWaiterInvalid ###
+### kSbSocketWaiterInvalid
 
 Well-defined value for an invalid socket watcher handle.
 
-## Enums ##
+## Enums
 
-### SbSocketWaiterInterest ###
+### SbSocketWaiterInterest
 
 All the interests that a socket may register for on a waiter.
 
-#### Values ####
+#### Values
 
 *   `kSbSocketWaiterInterestNone`
 
@@ -50,11 +50,11 @@
 
     An interest in or readiness to write to a socket without blocking.
 
-### SbSocketWaiterResult ###
+### SbSocketWaiterResult
 
 Possible reasons why a call to SbSocketWaiterWaitTimed returned.
 
-#### Values ####
+#### Values
 
 *   `kSbSocketWaiterResultInvalid`
 
@@ -66,31 +66,31 @@
 
     The wait stopped because a call to SbSocketWaiterWakeUp was consumed.
 
-## Typedefs ##
+## Typedefs
 
-### SbSocketWaiter ###
+### SbSocketWaiter
 
 A handle to a socket waiter.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbSocketWaiterPrivate* SbSocketWaiter
 ```
 
-### SbSocketWaiterCallback ###
+### SbSocketWaiterCallback
 
 Function pointer for socket waiter callbacks.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbSocketWaiterCallback) (SbSocketWaiter waiter, SbSocket socket, void *context, int ready_interests)
 ```
 
-## Functions ##
+## Functions
 
-### SbSocketWaiterAdd ###
+### SbSocketWaiterAdd
 
 Adds a new socket to be waited on by the `waiter` with a bitfield of
 `interests`. This function should only be called on the thread that waits on
@@ -120,25 +120,25 @@
     `callback`, even if not all registered `interests` became ready, which
     allows for adding it again in the `callback`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketWaiterAdd(SbSocketWaiter waiter, SbSocket socket, void *context, SbSocketWaiterCallback callback, int interests, bool persistent)
 ```
 
-### SbSocketWaiterCreate ###
+### SbSocketWaiterCreate
 
 The results of two threads waiting on the same waiter is undefined and will not
 work. Except for the SbSocketWaiterWakeUp() function, SbSocketWaiters are not
 thread-safe and don't expect to be modified concurrently.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketWaiter SbSocketWaiterCreate()
 ```
 
-### SbSocketWaiterDestroy ###
+### SbSocketWaiterDestroy
 
 Destroys `waiter` and removes all sockets still registered by way of
 SbSocketWaiterAdd. This function may be called on any thread as long as there is
@@ -146,23 +146,23 @@
 
 `waiter`: The SbSocketWaiter to be destroyed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketWaiterDestroy(SbSocketWaiter waiter)
 ```
 
-### SbSocketWaiterIsValid ###
+### SbSocketWaiterIsValid
 
 Returns whether the given socket handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbSocketWaiterIsValid(SbSocketWaiter watcher)
 ```
 
-### SbSocketWaiterRemove ###
+### SbSocketWaiterRemove
 
 Removes a socket, previously added with SbSocketWaiterAdd(), from a waiter. This
 function should only be called on the thread that waits on this waiter.
@@ -174,26 +174,26 @@
 `waiter`: The waiter from which the socket is removed. `socket`: The socket to
 remove from the waiter.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketWaiterRemove(SbSocketWaiter waiter, SbSocket socket)
 ```
 
-### SbSocketWaiterWait ###
+### SbSocketWaiterWait
 
 Waits on all registered sockets, calling the registered callbacks if and when
 the corresponding sockets become ready for an interested operation. This version
 exits only after SbSocketWaiterWakeUp() is called. This function should only be
 called on the thread that waits on this waiter.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSocketWaiterWait(SbSocketWaiter waiter)
 ```
 
-### SbSocketWaiterWaitTimed ###
+### SbSocketWaiterWaitTimed
 
 Behaves similarly to SbSocketWaiterWait(), but this function also causes
 `waiter` to exit on its own after at least `duration` has passed if
@@ -207,13 +207,13 @@
 function may wait longer than `duration`, such as if the timeout expires while a
 callback is being fired.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketWaiterResult SbSocketWaiterWaitTimed(SbSocketWaiter waiter, SbTime duration)
 ```
 
-### SbSocketWaiterWakeUp ###
+### SbSocketWaiterWakeUp
 
 Wakes up `waiter` once. This is the only thread-safe waiter function. It can can
 be called from a SbSocketWaiterCallback to wake up its own waiter, and it can
@@ -230,7 +230,7 @@
 
 `waiter`: The socket waiter to be woken up.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSocketWaiterWakeUp(SbSocketWaiter waiter)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/speech_synthesis.md b/cobalt/site/docs/reference/starboard/modules/14/speech_synthesis.md
index 1622318..0bd6e65 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/speech_synthesis.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/speech_synthesis.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: speech_synthesis.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `speech_synthesis.h`
 
 A basic text-to-speech API intended to be used for audio accessibility.
 
@@ -11,29 +11,29 @@
 Note that these functions do not have to be thread-safe. They must only be
 called from a single application thread.
 
-## Functions ##
+## Functions
 
-### SbSpeechSynthesisCancel ###
+### SbSpeechSynthesisCancel
 
 Cancels all speaking and queued speech synthesis audio. Must return immediately.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSpeechSynthesisCancel()
 ```
 
-### SbSpeechSynthesisIsSupported ###
+### SbSpeechSynthesisIsSupported
 
 Returns whether the platform supports speech synthesis
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSpeechSynthesisIsSupported()
 ```
 
-### SbSpeechSynthesisSpeak ###
+### SbSpeechSynthesisSpeak
 
 Enqueues `text`, a UTF-8 string, to be spoken. Returns immediately.
 
@@ -44,7 +44,7 @@
 the current speaking should continue and this new text should be queued to play
 when the previous utterances are complete.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSpeechSynthesisSpeak(const char *text)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/storage.md b/cobalt/site/docs/reference/starboard/modules/14/storage.md
index db7e950..5c2b962 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/storage.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/storage.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: storage.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `storage.h`
 
 Defines a user-based Storage API. This is a simple, all-at-once BLOB storage and
 retrieval API that is intended for robust long-term, per-user storage. Some
@@ -15,27 +15,27 @@
 These APIs are NOT expected to be thread-safe, so either call them from a single
 thread, or perform proper synchronization around all calls.
 
-## Macros ##
+## Macros
 
-### kSbStorageInvalidRecord ###
+### kSbStorageInvalidRecord
 
 Well-defined value for an invalid storage record handle.
 
-## Typedefs ##
+## Typedefs
 
-### SbStorageRecord ###
+### SbStorageRecord
 
 A handle to an open storage record.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbStorageRecordPrivate* SbStorageRecord
 ```
 
-## Functions ##
+## Functions
 
-### SbStorageCloseRecord ###
+### SbStorageCloseRecord
 
 Closes `record`, synchronously ensuring that all written data is flushed. This
 function performs blocking I/O on the calling thread.
@@ -47,13 +47,13 @@
 `record`: The storage record to close. `record` is invalid after this point, and
 subsequent calls referring to `record` will fail.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbStorageCloseRecord(SbStorageRecord record)
 ```
 
-### SbStorageDeleteRecord ###
+### SbStorageDeleteRecord
 
 Deletes the `SbStorageRecord` for `user` named `name`. The return value
 indicates whether the record existed and was successfully deleted. If the record
@@ -68,36 +68,36 @@
 `user`: The user for whom the record will be deleted. `name`: The filesystem-
 safe name of the record to open.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbStorageDeleteRecord(SbUser user, const char *name)
 ```
 
-### SbStorageGetRecordSize ###
+### SbStorageGetRecordSize
 
 Returns the size of `record`, or `-1` if there is an error. This function
 performs blocking I/O on the calling thread.
 
 `record`: The record to retrieve the size of.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbStorageGetRecordSize(SbStorageRecord record)
 ```
 
-### SbStorageIsValidRecord ###
+### SbStorageIsValidRecord
 
 Returns whether the given storage record handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbStorageIsValidRecord(SbStorageRecord record)
 ```
 
-### SbStorageOpenRecord ###
+### SbStorageOpenRecord
 
 Opens and returns the SbStorageRecord for `user` named `name`, blocking I/O on
 the calling thread until the open is completed. If `user` is not a valid
@@ -111,13 +111,13 @@
 `user`: The user for which the storage record will be opened. `name`: The
 filesystem-safe name of the record to open.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbStorageRecord SbStorageOpenRecord(SbUser user, const char *name)
 ```
 
-### SbStorageReadRecord ###
+### SbStorageReadRecord
 
 Reads up to `data_size` bytes from `record`, starting at the beginning of the
 record. The function returns the actual number of bytes read, which must be <=
@@ -128,13 +128,13 @@
 `record`: The record to be read. `out_data`: The data read from the record.
 `data_size`: The amount of data, in bytes, to read.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbStorageReadRecord(SbStorageRecord record, char *out_data, int64_t data_size)
 ```
 
-### SbStorageWriteRecord ###
+### SbStorageWriteRecord
 
 Replaces the data in `record` with `data_size` bytes from `data`. This function
 always deletes any previous data in that record. The return value indicates
@@ -151,7 +151,7 @@
 `record`: The record to be written to. `data`: The data to write to the record.
 `data_size`: The amount of `data`, in bytes, to write to the record.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbStorageWriteRecord(SbStorageRecord record, const char *data, int64_t data_size)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/string.md b/cobalt/site/docs/reference/starboard/modules/14/string.md
index 685f5e8..3fed809 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/string.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/string.md
@@ -1,13 +1,13 @@
----
-layout: doc
-title: "Starboard Module Reference: string.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `string.h`
 
 Defines functions for interacting with c-style strings.
 
-## Functions ##
+## Functions
 
-### SbStringCompareNoCase ###
+### SbStringCompareNoCase
 
 Compares two strings, ignoring differences in case. The return value is:
 
@@ -21,13 +21,13 @@
 
 `string1`: The first string to compare. `string2`: The second string to compare.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbStringCompareNoCase(const char *string1, const char *string2)
 ```
 
-### SbStringCompareNoCaseN ###
+### SbStringCompareNoCaseN
 
 Compares the first `count` characters of two strings, ignoring differences in
 case. The return value is:
@@ -43,13 +43,13 @@
 `string1`: The first string to compare. `string2`: The second string to compare.
 `count`: The number of characters to compare.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbStringCompareNoCaseN(const char *string1, const char *string2, size_t count)
 ```
 
-### SbStringDuplicate ###
+### SbStringDuplicate
 
 Copies `source` into a buffer that is allocated by this function and that can be
 freed with SbMemoryDeallocate. This function is meant to be a drop-in
@@ -57,13 +57,13 @@
 
 `source`: The string to be copied.
 
-#### Declaration ####
+#### Declaration
 
 ```
 char* SbStringDuplicate(const char *source)
 ```
 
-### SbStringFormat ###
+### SbStringFormat
 
 Produces a string formatted with `format` and `arguments`, placing as much of
 the result that will fit into `out_buffer`. The return value specifies the
@@ -76,13 +76,13 @@
 The size of `out_buffer`. `format`: A string that specifies how the data should
 be formatted. `arguments`: Variable arguments used in the string.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbStringFormat(char *out_buffer, size_t buffer_size, const char *format, va_list arguments) SB_PRINTF_FORMAT(3
 ```
 
-### SbStringFormatF ###
+### SbStringFormatF
 
 An inline wrapper of SbStringFormat that converts from ellipsis to va_args. This
 function is meant to be a drop-in replacement for `snprintf`.
@@ -91,13 +91,13 @@
 The size of `out_buffer`. `format`: A string that specifies how the data should
 be formatted. `...`: Arguments used in the string.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int static int static int SbStringFormatF(char *out_buffer, size_t buffer_size, const char *format,...) SB_PRINTF_FORMAT(3
 ```
 
-### SbStringFormatUnsafeF ###
+### SbStringFormatUnsafeF
 
 An inline wrapper of SbStringFormat that is meant to be a drop-in replacement
 for the unsafe but commonly used `sprintf`.
@@ -106,13 +106,13 @@
 string that specifies how the data should be formatted. `...`: Arguments used in
 the string.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int static int SbStringFormatUnsafeF(char *out_buffer, const char *format,...) SB_PRINTF_FORMAT(2
 ```
 
-### SbStringFormatWide ###
+### SbStringFormatWide
 
 This function is identical to SbStringFormat, but is for wide characters. It is
 meant to be a drop-in replacement for `vswprintf`.
@@ -121,13 +121,13 @@
 The size of `out_buffer`. `format`: A string that specifies how the data should
 be formatted. `arguments`: Variable arguments used in the string.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbStringFormatWide(wchar_t *out_buffer, size_t buffer_size, const wchar_t *format, va_list arguments)
 ```
 
-### SbStringFormatWideF ###
+### SbStringFormatWideF
 
 An inline wrapper of SbStringFormatWide that converts from ellipsis to
 `va_args`.
@@ -136,13 +136,13 @@
 The size of `out_buffer`. `format`: A string that specifies how the data should
 be formatted. `...`: Arguments used in the string.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int SbStringFormatWideF(wchar_t *out_buffer, size_t buffer_size, const wchar_t *format,...)
 ```
 
-### SbStringScan ###
+### SbStringScan
 
 Scans `buffer` for `pattern`, placing the extracted values in `arguments`. The
 return value specifies the number of successfully matched items, which may be
@@ -154,20 +154,20 @@
 for in `buffer`. `arguments`: Values matching `pattern` that were extracted from
 `buffer`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbStringScan(const char *buffer, const char *pattern, va_list arguments)
 ```
 
-### SbStringScanF ###
+### SbStringScanF
 
 An inline wrapper of SbStringScan that converts from ellipsis to `va_args`. This
 function is meant to be a drop-in replacement for `sscanf`. `buffer`: The string
 to scan for the pattern. `pattern`: The string to search for in `buffer`. `...`:
 Values matching `pattern` that were extracted from `buffer`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int SbStringScanF(const char *buffer, const char *pattern,...)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/system.md b/cobalt/site/docs/reference/starboard/modules/14/system.md
index 5e4e076..59e7018 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/system.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/system.md
@@ -1,21 +1,21 @@
----
-layout: doc
-title: "Starboard Module Reference: system.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `system.h`
 
 Defines a broad set of APIs that allow the client application to query build and
 runtime properties of the enclosing system.
 
-## Enums ##
+## Enums
 
-### SbSystemCapabilityId ###
+### SbSystemCapabilityId
 
 Runtime capabilities are boolean properties of a platform that can't be
 determined at compile-time. They may vary from device to device, but they will
 not change over the course of a single execution. They often specify particular
 behavior of other APIs within the bounds of their operating range.
 
-#### Values ####
+#### Values
 
 *   `kSbSystemCapabilityReversedEnterAndBack`
 
@@ -26,11 +26,11 @@
     only if) a system has this capability will SbSystemGetTotalGPUMemory() and
     SbSystemGetUsedGPUMemory() be valid to call.
 
-### SbSystemDeviceType ###
+### SbSystemDeviceType
 
 Enumeration of device types.
 
-#### Values ####
+#### Values
 
 *   `kSbSystemDeviceTypeBlueRayDiskPlayer`
 
@@ -63,11 +63,11 @@
 
     Unknown device.
 
-### SbSystemPathId ###
+### SbSystemPathId
 
 Enumeration of special paths that the platform can define.
 
-#### Values ####
+#### Values
 
 *   `kSbSystemPathContentDirectory`
 
@@ -103,22 +103,22 @@
     for storing the updates. See
     starboard/doc/evergreen/cobalt_evergreen_overview.md
 
-### SbSystemPlatformErrorResponse ###
+### SbSystemPlatformErrorResponse
 
 Possible responses for `SbSystemPlatformErrorCallback`.
 
-#### Values ####
+#### Values
 
 *   `kSbSystemPlatformErrorResponsePositive`
 *   `kSbSystemPlatformErrorResponseNegative`
 *   `kSbSystemPlatformErrorResponseCancel`
 
-### SbSystemPlatformErrorType ###
+### SbSystemPlatformErrorType
 
 Enumeration of possible values for the `type` parameter passed to the
 `SbSystemRaisePlatformError` function.
 
-#### Values ####
+#### Values
 
 *   `kSbSystemPlatformErrorTypeConnectionError`
 
@@ -127,12 +127,12 @@
     `kSbSystemPlatformErrorResponsePositive` then the request should be retried,
     otherwise the app should be stopped.
 
-### SbSystemPropertyId ###
+### SbSystemPropertyId
 
 System properties that can be queried for. Many of these are used in User-Agent
 string generation.
 
-#### Values ####
+#### Values
 
 *   `kSbSystemPropertyCertificationScope`
 
@@ -189,9 +189,9 @@
     Limit advertising tracking, treated as boolean. Set to nonzero to indicate a
     true value. Corresponds to 'lmt' field.
 
-## Typedefs ##
+## Typedefs
 
-### SbSystemComparator ###
+### SbSystemComparator
 
 Pointer to a function to compare two items. The return value uses standard
 `*cmp` semantics:
@@ -204,23 +204,23 @@
 
 `a`: The first value to compare. `b`: The second value to compare.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int(* SbSystemComparator) (const void *a, const void *b)
 ```
 
-### SbSystemError ###
+### SbSystemError
 
 A type that can represent a system error code across all Starboard platforms.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int SbSystemError
 ```
 
-### SbSystemPlatformErrorCallback ###
+### SbSystemPlatformErrorCallback
 
 Type of callback function that may be called in response to an error
 notification from `SbSystemRaisePlatformError`. `response` is a code to indicate
@@ -228,46 +228,46 @@
 the error. `user_data` is the opaque pointer that was passed to the call to
 `SbSystemRaisePlatformError`.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbSystemPlatformErrorCallback) (SbSystemPlatformErrorResponse response, void *user_data)
 ```
 
-## Functions ##
+## Functions
 
-### SbSystemBreakIntoDebugger ###
+### SbSystemBreakIntoDebugger
 
 Breaks the current program into the debugger, if a debugger is attached. If a
 debugger is not attached, this function aborts the program.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SB_NORETURN void SbSystemBreakIntoDebugger()
 ```
 
-### SbSystemClearLastError ###
+### SbSystemClearLastError
 
 Clears the last error set by a Starboard call in the current thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemClearLastError()
 ```
 
-### SbSystemGetDeviceType ###
+### SbSystemGetDeviceType
 
 Returns the type of the device.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSystemDeviceType SbSystemGetDeviceType()
 ```
 
-### SbSystemGetErrorString ###
+### SbSystemGetErrorString
 
 Generates a human-readable string for an error. The return value specifies the
 total desired length of the string.
@@ -276,13 +276,13 @@
 The generated string. This value may be null, and it is always terminated with a
 null byte. `string_length`: The maximum length of the error string.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbSystemGetErrorString(SbSystemError error, char *out_string, int string_length)
 ```
 
-### SbSystemGetExtension ###
+### SbSystemGetExtension
 
 Returns pointer to a constant global struct implementing the extension named
 `name`, if it is implemented. Otherwise return NULL. The `name` string must not
@@ -304,25 +304,25 @@
 ignored. As the version of extensions are incremented, fields may be added to
 the end of the struct, but never removed (only deprecated).
 
-#### Declaration ####
+#### Declaration
 
 ```
 const void* SbSystemGetExtension(const char *name)
 ```
 
-### SbSystemGetLastError ###
+### SbSystemGetLastError
 
 Gets the last platform-specific error code produced by any Starboard call in the
 current thread for diagnostic purposes. Semantic reactions to Starboard function
 call results should be modeled explicitly.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSystemError SbSystemGetLastError()
 ```
 
-### SbSystemGetLocaleId ###
+### SbSystemGetLocaleId
 
 Gets the system's current POSIX-style Locale ID. The locale represents the
 location, language, and cultural conventions that the system wants to use, which
@@ -339,25 +339,25 @@
 
 For more information than you probably want about POSIX locales, see: [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html](http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html)
 
-#### Declaration ####
+#### Declaration
 
 ```
 const char* SbSystemGetLocaleId()
 ```
 
-### SbSystemGetNumberOfProcessors ###
+### SbSystemGetNumberOfProcessors
 
 Returns the number of processor cores available to this application. If the
 process is sandboxed to a subset of the physical cores, the function returns
 that sandboxed limit.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbSystemGetNumberOfProcessors()
 ```
 
-### SbSystemGetProperty ###
+### SbSystemGetProperty
 
 Retrieves the platform-defined system property specified by `property_id` and
 places its value as a zero-terminated string into the user-allocated `out_value`
@@ -378,13 +378,13 @@
 defined system property specified by `property_id`. `value_length`: The length
 of the system property.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemGetProperty(SbSystemPropertyId property_id, char *out_value, int value_length)
 ```
 
-### SbSystemGetRandomData ###
+### SbSystemGetRandomData
 
 A cryptographically secure random number generator that produces an arbitrary,
 non-negative number of `buffer_size` random, non-negative bytes. The generated
@@ -393,24 +393,24 @@
 `out_buffer`: A pointer for the generated random number. This value must not be
 null. `buffer_size`: The size of the random number, in bytes.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemGetRandomData(void *out_buffer, int buffer_size)
 ```
 
-### SbSystemGetRandomUInt64 ###
+### SbSystemGetRandomUInt64
 
 A cryptographically secure random number generator that gets 64 random bits and
 returns them as an `uint64_t`. This function does not require manual seeding.
 
-#### Declaration ####
+#### Declaration
 
 ```
 uint64_t SbSystemGetRandomUInt64()
 ```
 
-### SbSystemGetStack ###
+### SbSystemGetStack
 
 Places up to `stack_size` instruction pointer addresses of the current execution
 stack into `out_stack`. The return value specifies the number of entries added.
@@ -427,62 +427,62 @@
 `stack_size`: The maximum number of instruction pointer addresses to be placed
 into `out_stack` from the current execution stack.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbSystemGetStack(void **out_stack, int stack_size)
 ```
 
-### SbSystemGetTotalCPUMemory ###
+### SbSystemGetTotalCPUMemory
 
 Returns the total CPU memory (in bytes) potentially available to this
 application. If the process is sandboxed to a maximum allowable limit, the
 function returns the lesser of the physical and sandbox limits.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbSystemGetTotalCPUMemory()
 ```
 
-### SbSystemGetTotalGPUMemory ###
+### SbSystemGetTotalGPUMemory
 
 Returns the total GPU memory (in bytes) available for use by this application.
 This function may only be called the return value for calls to
 SbSystemHasCapability(kSbSystemCapabilityCanQueryGPUMemoryStats) is `true`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbSystemGetTotalGPUMemory()
 ```
 
-### SbSystemGetUsedCPUMemory ###
+### SbSystemGetUsedCPUMemory
 
 Returns the total physical CPU memory (in bytes) used by this application. This
 value should always be less than (or, in particularly exciting situations, equal
 to) SbSystemGetTotalCPUMemory().
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbSystemGetUsedCPUMemory()
 ```
 
-### SbSystemGetUsedGPUMemory ###
+### SbSystemGetUsedGPUMemory
 
 Returns the current amount of GPU memory (in bytes) that is currently being used
 by this application. This function may only be called if the return value for
 calls to SbSystemHasCapability(kSbSystemCapabilityCanQueryGPUMemoryStats) is
 `true`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbSystemGetUsedGPUMemory()
 ```
 
-### SbSystemHasCapability ###
+### SbSystemHasCapability
 
 Returns whether the platform has the runtime capability specified by
 `capability_id`. Returns false for any unknown capabilities. This implementation
@@ -490,48 +490,48 @@
 
 `capability_id`: The runtime capability to check.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemHasCapability(SbSystemCapabilityId capability_id)
 ```
 
-### SbSystemHideSplashScreen ###
+### SbSystemHideSplashScreen
 
 Hides the system splash screen on systems that support a splash screen that is
 displayed while the application is loading. This function may be called from any
 thread and must be idempotent.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemHideSplashScreen()
 ```
 
-### SbSystemIsDebuggerAttached ###
+### SbSystemIsDebuggerAttached
 
 Attempts to determine whether the current program is running inside or attached
 to a debugger. The function returns `false` if neither of those cases is true.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemIsDebuggerAttached()
 ```
 
-### SbSystemNetworkIsDisconnected ###
+### SbSystemNetworkIsDisconnected
 
 Returns if the device is disconnected from network. "Disconnected" is chosen
 over connected because disconnection can be determined with more certainty than
 connection usually.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemNetworkIsDisconnected()
 ```
 
-### SbSystemRaisePlatformError ###
+### SbSystemRaisePlatformError
 
 Cobalt calls this function to notify the platform that an error has occurred in
 the application that the platform may need to handle. The platform is expected
@@ -553,13 +553,13 @@
 pointer that the platform should pass as an argument to the callback function,
 if it is called.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemRaisePlatformError(SbSystemPlatformErrorType type, SbSystemPlatformErrorCallback callback, void *user_data)
 ```
 
-### SbSystemRequestBlur ###
+### SbSystemRequestBlur
 
 Requests that the application move into the Blurred state at the next convenient
 point. This should roughly correspond to "unfocused application" in a
@@ -569,13 +569,13 @@
 the application. Before the `kSbEventTypeBlur` event is dispatched, some work
 may continue to be done, and unrelated system events may be dispatched.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemRequestBlur()
 ```
 
-### SbSystemRequestConceal ###
+### SbSystemRequestConceal
 
 Requests that the application move into the Concealed state at the next
 convenient point. This should roughly correspond to "minimization" in a
@@ -590,13 +590,13 @@
 running background tasks. The expectation is that an external system event will
 bring the application out of the Concealed state.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemRequestConceal()
 ```
 
-### SbSystemRequestFocus ###
+### SbSystemRequestFocus
 
 Requests that the application move into the Started state at the next convenient
 point. This should roughly correspond to a "focused application" in a
@@ -607,13 +607,13 @@
 the application. Before `kSbEventTypeFocus` is dispatched, some work may
 continue to be done, and unrelated system events may be dispatched.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemRequestFocus()
 ```
 
-### SbSystemRequestFreeze ###
+### SbSystemRequestFreeze
 
 Requests that the application move into the Frozen state at the next convenient
 point.
@@ -626,13 +626,13 @@
 The expectation is that an external system event will bring the application out
 of the Frozen state.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemRequestFreeze()
 ```
 
-### SbSystemRequestReveal ###
+### SbSystemRequestReveal
 
 Requests that the application move into the Blurred state at the next convenient
 point. This should roughly correspond to a "focused application" in a
@@ -643,13 +643,13 @@
 the application. Before the `kSbEventTypeReveal` event is dispatched, some work
 may continue to be done, and unrelated system events may be dispatched.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemRequestReveal()
 ```
 
-### SbSystemRequestStop ###
+### SbSystemRequestStop
 
 Requests that the application be terminated gracefully at the next convenient
 point. In the meantime, some work may continue to be done, and unrelated system
@@ -660,13 +660,13 @@
 `error_level`: An integer that serves as the return value for the process that
 is eventually terminated as a result of a call to this function.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemRequestStop(int error_level)
 ```
 
-### SbSystemSignWithCertificationSecretKey ###
+### SbSystemSignWithCertificationSecretKey
 
 Computes a HMAC-SHA256 digest of `message` into `digest` using the application's
 certification secret. The `message` and the `digest` pointers must not be NULL.
@@ -676,13 +676,13 @@
 an error, or if it is not implemented. In this case the contents of `digest`
 will be undefined.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemSignWithCertificationSecretKey(const uint8_t *message, size_t message_size_in_bytes, uint8_t *digest, size_t digest_size_in_bytes)
 ```
 
-### SbSystemSupportsResume ###
+### SbSystemSupportsResume
 
 Returns false if the platform doesn't need resume after suspend support. In such
 case Cobalt will free up the resource it retains for resume after suspend. Note
@@ -690,13 +690,13 @@
 kSbEventTypeResume to the event handler. The return value of this function
 cannot change over the life time of the application.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemSupportsResume()
 ```
 
-### SbSystemSymbolize ###
+### SbSystemSymbolize
 
 Looks up `address` as an instruction pointer and places up to (`buffer_size -
 1`) characters of the symbol associated with it in `out_buffer`, which must not
@@ -708,7 +708,7 @@
 This function is used in crash signal handlers and, therefore, it must be async-
 signal-safe on platforms that support signals.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemSymbolize(const void *address, char *out_buffer, int buffer_size)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/thread.md b/cobalt/site/docs/reference/starboard/modules/14/thread.md
index 1191e9a..56c7898 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/thread.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/thread.md
@@ -1,35 +1,35 @@
----
-layout: doc
-title: "Starboard Module Reference: thread.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `thread.h`
 
 Defines functionality related to thread creation and cleanup.
 
-## Macros ##
+## Macros
 
-### kSbThreadContextInvalid ###
+### kSbThreadContextInvalid
 
 Well-defined value for an invalid thread context.
 
-### kSbThreadInvalidId ###
+### kSbThreadInvalidId
 
 Well-defined constant value to mean "no thread ID."
 
-### kSbThreadLocalKeyInvalid ###
+### kSbThreadLocalKeyInvalid
 
 Well-defined constant value to mean "no thread local key."
 
-### kSbThreadNoAffinity ###
+### kSbThreadNoAffinity
 
 Well-defined constant value to mean "no affinity."
 
-### kSbThreadSamplerInvalid ###
+### kSbThreadSamplerInvalid
 
 Well-defined value for an invalid thread sampler.
 
-## Enums ##
+## Enums
 
-### SbThreadPriority ###
+### SbThreadPriority
 
 A spectrum of thread priorities. Platforms map them appropriately to their own
 priority system. Note that scheduling is platform-specific, and what these
@@ -39,7 +39,7 @@
 a given platform. The only guarantee is that each lower priority should be
 treated less-than-or-equal-to a higher priority.
 
-#### Values ####
+#### Values
 
 *   `kSbThreadPriorityLowest`
 
@@ -79,116 +79,116 @@
     inherit the priority of the spawning thread, or it may mean a specific
     default priority, or it may mean something else, depending on the platform.
 
-## Typedefs ##
+## Typedefs
 
-### SbThread ###
+### SbThread
 
 An opaque handle to a thread type.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void* SbThread
 ```
 
-### SbThreadAffinity ###
+### SbThreadAffinity
 
 Type for thread core affinity. This generally will be a single cpu (or core or
 hyperthread) identifier. Some platforms may not support affinity, and some may
 have specific rules about how it must be used.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int32_t SbThreadAffinity
 ```
 
-### SbThreadContext ###
+### SbThreadContext
 
 A handle to the context of a frozen thread.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbThreadContextPrivate* SbThreadContext
 ```
 
-### SbThreadEntryPoint ###
+### SbThreadEntryPoint
 
 Function pointer type for SbThreadCreate. `context` is a pointer-sized bit of
 data passed in from the calling thread.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void*(* SbThreadEntryPoint) (void *context)
 ```
 
-### SbThreadId ###
+### SbThreadId
 
 An ID type that is unique per thread.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int32_t SbThreadId
 ```
 
-### SbThreadLocalDestructor ###
+### SbThreadLocalDestructor
 
 Function pointer type for Thread-Local destructors.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbThreadLocalDestructor) (void *value)
 ```
 
-### SbThreadLocalKey ###
+### SbThreadLocalKey
 
 A handle to a thread-local key.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbThreadLocalKeyPrivate* SbThreadLocalKey
 ```
 
-### SbThreadSampler ###
+### SbThreadSampler
 
 A handle to a thread sampler.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbThreadSamplerPrivate* SbThreadSampler
 ```
 
-## Functions ##
+## Functions
 
-### SbThreadContextGetPointer ###
+### SbThreadContextGetPointer
 
 Gets the specified pointer-type `property` from the specified `context`. Returns
 `true` if successful and `out_value` has been modified, otherwise returns
 `false` and `out_value` is not modified.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbThreadContextGetPointer(SbThreadContext context, SbThreadContextProperty property, void **out_value)
 ```
 
-### SbThreadContextIsValid ###
+### SbThreadContextIsValid
 
 Returns whether the given thread context is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadContextIsValid(SbThreadContext context)
 ```
 
-### SbThreadCreate ###
+### SbThreadCreate
 
 Creates a new thread, which starts immediately.
 
@@ -214,13 +214,13 @@
 executed on the newly created thread. `context`: This value will be passed to
 the `entry_point` function.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbThread SbThreadCreate(int64_t stack_size, SbThreadPriority priority, SbThreadAffinity affinity, bool joinable, const char *name, SbThreadEntryPoint entry_point, void *context)
 ```
 
-### SbThreadCreateLocalKey ###
+### SbThreadCreateLocalKey
 
 Creates and returns a new, unique key for thread local data. If the function
 does not succeed, the function returns `kSbThreadLocalKeyInvalid`.
@@ -233,13 +233,13 @@
 `destructor`: A pointer to a function. The value may be NULL if no clean up is
 needed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbThreadLocalKey SbThreadCreateLocalKey(SbThreadLocalDestructor destructor)
 ```
 
-### SbThreadDestroyLocalKey ###
+### SbThreadDestroyLocalKey
 
 Destroys thread local data for the specified key. The function is a no-op if the
 key is invalid (kSbThreadLocalKeyInvalid`) or has already been destroyed. This
@@ -247,13 +247,13 @@
 
 `key`: The key for which to destroy thread local data.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadDestroyLocalKey(SbThreadLocalKey key)
 ```
 
-### SbThreadDetach ###
+### SbThreadDetach
 
 Detaches `thread`, which prevents it from being joined. This is sort of like a
 non-blocking join. This function is a no-op if the thread is already detached or
@@ -261,33 +261,33 @@
 
 `thread`: The thread to be detached.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadDetach(SbThread thread)
 ```
 
-### SbThreadGetCurrent ###
+### SbThreadGetCurrent
 
 Returns the handle of the currently executing thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbThread SbThreadGetCurrent()
 ```
 
-### SbThreadGetId ###
+### SbThreadGetId
 
 Returns the Thread ID of the currently executing thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbThreadId SbThreadGetId()
 ```
 
-### SbThreadGetLocalValue ###
+### SbThreadGetLocalValue
 
 Returns the pointer-sized value for `key` in the currently executing thread's
 local storage. Returns `NULL` if key is `kSbThreadLocalKeyInvalid` or if the key
@@ -295,97 +295,97 @@
 
 `key`: The key for which to return the value.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbThreadGetLocalValue(SbThreadLocalKey key)
 ```
 
-### SbThreadGetName ###
+### SbThreadGetName
 
 Returns the debug name of the currently executing thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadGetName(char *buffer, int buffer_size)
 ```
 
-### SbThreadIsCurrent ###
+### SbThreadIsCurrent
 
 Returns whether `thread` is the current thread.
 
 `thread`: The thread to check.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadIsCurrent(SbThread thread)
 ```
 
-### SbThreadIsEqual ###
+### SbThreadIsEqual
 
 Indicates whether `thread1` and `thread2` refer to the same thread.
 
 `thread1`: The first thread to compare. `thread2`: The second thread to compare.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbThreadIsEqual(SbThread thread1, SbThread thread2)
 ```
 
-### SbThreadIsValid ###
+### SbThreadIsValid
 
 Returns whether the given thread handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadIsValid(SbThread thread)
 ```
 
-### SbThreadIsValidAffinity ###
+### SbThreadIsValidAffinity
 
 Returns whether the given thread affinity is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadIsValidAffinity(SbThreadAffinity affinity)
 ```
 
-### SbThreadIsValidId ###
+### SbThreadIsValidId
 
 Returns whether the given thread ID is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadIsValidId(SbThreadId id)
 ```
 
-### SbThreadIsValidLocalKey ###
+### SbThreadIsValidLocalKey
 
 Returns whether the given thread local variable key is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadIsValidLocalKey(SbThreadLocalKey key)
 ```
 
-### SbThreadIsValidPriority ###
+### SbThreadIsValidPriority
 
 Returns whether the given thread priority is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadIsValidPriority(SbThreadPriority priority)
 ```
 
-### SbThreadJoin ###
+### SbThreadJoin
 
 Joins the thread on which this function is called with joinable `thread`. This
 function blocks the caller until the designated thread exits, and then cleans up
@@ -403,36 +403,36 @@
 then the SbThreadJoin function populates it with the return value of the
 thread's `main` function.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbThreadJoin(SbThread thread, void **out_return)
 ```
 
-### SbThreadSamplerCreate ###
+### SbThreadSamplerCreate
 
 Creates a new thread sampler for the specified `thread`.
 
 If successful, this function returns the newly created handle. If unsuccessful,
 this function returns `kSbThreadSamplerInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbThreadSampler SbThreadSamplerCreate(SbThread thread)
 ```
 
-### SbThreadSamplerDestroy ###
+### SbThreadSamplerDestroy
 
 Destroys the `sampler` and frees whatever resources it was using.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadSamplerDestroy(SbThreadSampler sampler)
 ```
 
-### SbThreadSamplerFreeze ###
+### SbThreadSamplerFreeze
 
 Suspends execution of the thread that `sampler` was created for.
 
@@ -440,47 +440,47 @@
 from which properties may be read while the thread remains frozen. If
 unsuccessful, this function returns `kSbThreadContextInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbThreadContext SbThreadSamplerFreeze(SbThreadSampler sampler)
 ```
 
-### SbThreadSamplerIsSupported ###
+### SbThreadSamplerIsSupported
 
 Whether the current platform supports thread sampling. The result of this
 function must not change over the course of the program, which means that the
 results of this function may be cached indefinitely. If this returns false,
 `SbThreadSamplerCreate` will return an invalid sampler.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbThreadSamplerIsSupported()
 ```
 
-### SbThreadSamplerIsValid ###
+### SbThreadSamplerIsValid
 
 Returns whether the given thread sampler is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadSamplerIsValid(SbThreadSampler sampler)
 ```
 
-### SbThreadSamplerThaw ###
+### SbThreadSamplerThaw
 
 Resumes execution of the thread that `sampler` was created for. This invalidates
 the context returned from `SbThreadSamplerFreeze`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbThreadSamplerThaw(SbThreadSampler sampler)
 ```
 
-### SbThreadSetLocalValue ###
+### SbThreadSetLocalValue
 
 Sets the pointer-sized value for `key` in the currently executing thread's local
 storage. The return value indicates whether `key` is valid and has not already
@@ -489,26 +489,26 @@
 `key`: The key for which to set the key value. `value`: The new pointer-sized
 key value.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbThreadSetLocalValue(SbThreadLocalKey key, void *value)
 ```
 
-### SbThreadSetName ###
+### SbThreadSetName
 
 Sets the debug name of the currently executing thread by copying the specified
 name string.
 
 `name`: The name to assign to the thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadSetName(const char *name)
 ```
 
-### SbThreadSleep ###
+### SbThreadSleep
 
 Sleeps the currently executing thread.
 
@@ -516,17 +516,17 @@
 executing thread should sleep. The function is a no-op if this value is negative
 or `0`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadSleep(SbTime duration)
 ```
 
-### SbThreadYield ###
+### SbThreadYield
 
 Yields the currently executing thread, so another thread has a chance to run.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadYield()
diff --git a/cobalt/site/docs/reference/starboard/modules/14/time.md b/cobalt/site/docs/reference/starboard/modules/14/time.md
index 19a7e4f..a6228cc 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/time.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/time.md
@@ -1,59 +1,59 @@
----
-layout: doc
-title: "Starboard Module Reference: time.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `time.h`
 
 Provides access to system time and timers.
 
-## Macros ##
+## Macros
 
-### kSbTimeDay ###
+### kSbTimeDay
 
 One day in SbTime units (microseconds).
 
-### kSbTimeHour ###
+### kSbTimeHour
 
 One hour in SbTime units (microseconds).
 
-### kSbTimeMax ###
+### kSbTimeMax
 
 The maximum value of an SbTime.
 
-### kSbTimeMillisecond ###
+### kSbTimeMillisecond
 
 One millisecond in SbTime units (microseconds).
 
-### kSbTimeMinute ###
+### kSbTimeMinute
 
 One minute in SbTime units (microseconds).
 
-### kSbTimeNanosecondsPerMicrosecond ###
+### kSbTimeNanosecondsPerMicrosecond
 
 How many nanoseconds in one SbTime unit (microseconds).
 
-### kSbTimeSecond ###
+### kSbTimeSecond
 
 One second in SbTime units (microseconds).
 
-### kSbTimeToPosixDelta ###
+### kSbTimeToPosixDelta
 
 A term that can be added to an SbTime to convert it into the number of
 microseconds since the POSIX epoch.
 
-## Typedefs ##
+## Typedefs
 
-### SbTime ###
+### SbTime
 
 The number of microseconds since the epoch of January 1, 1601 UTC, or the number
 of microseconds between two times. Always microseconds, ALWAYS UTC.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int64_t SbTime
 ```
 
-### SbTimeMonotonic ###
+### SbTimeMonotonic
 
 A number of microseconds from some point. The main property of this time is that
 it increases monotonically. It should also be as high-resolution a timer as we
@@ -61,38 +61,38 @@
 without worrying about a system clock adjustment. It's not good for getting the
 wall clock time.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int64_t SbTimeMonotonic
 ```
 
-## Functions ##
+## Functions
 
-### SbTimeFromPosix ###
+### SbTimeFromPosix
 
 Converts microseconds from the POSIX epoch into an `SbTime`.
 
 `time`: A time that measures the number of microseconds since January 1, 1970,
 00:00:00, UTC.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbTime SbTimeFromPosix(int64_t time)
 ```
 
-### SbTimeGetMonotonicNow ###
+### SbTimeGetMonotonicNow
 
 Gets a monotonically increasing time representing right now.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbTimeMonotonic SbTimeGetMonotonicNow()
 ```
 
-### SbTimeGetMonotonicThreadNow ###
+### SbTimeGetMonotonicThreadNow
 
 Gets a monotonically increasing time representing how long the current thread
 has been in the executing state (i.e. not pre-empted nor waiting on an event).
@@ -100,44 +100,44 @@
 execution time between two timestamps. If this is not available then
 SbTimeGetMonotonicNow() should be used.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbTimeMonotonic SbTimeGetMonotonicThreadNow()
 ```
 
-### SbTimeGetNow ###
+### SbTimeGetNow
 
 Gets the current system time as an `SbTime`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbTime SbTimeGetNow()
 ```
 
-### SbTimeIsTimeThreadNowSupported ###
+### SbTimeIsTimeThreadNowSupported
 
 Returns whether the current platform supports time thread now
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbTimeIsTimeThreadNowSupported()
 ```
 
-### SbTimeNarrow ###
+### SbTimeNarrow
 
 Safely narrows a number from a more precise unit to a less precise one. This
 function rounds negative values toward negative infinity.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int64_t SbTimeNarrow(int64_t time, int64_t divisor)
 ```
 
-### SbTimeToPosix ###
+### SbTimeToPosix
 
 Converts `SbTime` into microseconds from the POSIX epoch.
 
@@ -145,7 +145,7 @@
 January 1, 1601, UTC, or that measures the number of microseconds between two
 times.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int64_t SbTimeToPosix(SbTime time)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/time_zone.md b/cobalt/site/docs/reference/starboard/modules/14/time_zone.md
index f9e3fcb..baad375 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/time_zone.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/time_zone.md
@@ -1,46 +1,46 @@
----
-layout: doc
-title: "Starboard Module Reference: time_zone.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `time_zone.h`
 
 Provides access to the system time zone information.
 
-## Typedefs ##
+## Typedefs
 
-### SbTimeZone ###
+### SbTimeZone
 
 The number of minutes west of the Greenwich Prime Meridian, NOT including
 Daylight Savings Time adjustments.
 
-For example: PST/PDT is 480 minutes (28800 seconds, 8 hours).
+For example: America/Los_Angeles is 480 minutes (28800 seconds, 8 hours).
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int SbTimeZone
 ```
 
-## Functions ##
+## Functions
 
-### SbTimeZoneGetCurrent ###
+### SbTimeZoneGetCurrent
 
 Gets the system's current SbTimeZone in minutes.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbTimeZone SbTimeZoneGetCurrent()
 ```
 
-### SbTimeZoneGetName ###
+### SbTimeZoneGetName
 
-Gets a string representation of the current timezone. Note that the string
-representation can either be standard or daylight saving time. The output can be
-of the form: 1) A three-letter abbreviation such as "PST" or "PDT" (preferred).
-2) A time zone identifier such as "America/Los_Angeles" 3) An un-abbreviated
-name such as "Pacific Standard Time".
+Gets a string representation of the current timezone. The format should be in
+the IANA format [https://data.iana.org/time-zones/theory.html#naming](https://data.iana.org/time-zones/theory.html#naming)) .
+Names normally have the form AREA/LOCATION, where AREA is a continent or ocean,
+and LOCATION is a specific location within the area. Typical names are
+'Africa/Cairo', 'America/New_York', and 'Pacific/Honolulu'.
 
-#### Declaration ####
+#### Declaration
 
 ```
 const char* SbTimeZoneGetName()
diff --git a/cobalt/site/docs/reference/starboard/modules/14/types.md b/cobalt/site/docs/reference/starboard/modules/14/types.md
index 90867a6..e1f372c 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/types.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/types.md
@@ -1,15 +1,15 @@
----
-layout: doc
-title: "Starboard Module Reference: types.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `types.h`
 
 Provides a suite of standard types that should be universally available on all
 platforms, specifically focused on explicitly-sized integer types and booleans.
 This module also includes some related ubiquitous definitions like limits of the
 explicitly-sized integer types, and standard pointer and int32 sentinel values.
 
-## Macros ##
+## Macros
 
-### kSbInvalidInt ###
+### kSbInvalidInt
 
 A value that represents an int that is probably invalid.
diff --git a/cobalt/site/docs/reference/starboard/modules/14/ui_navigation.md b/cobalt/site/docs/reference/starboard/modules/14/ui_navigation.md
index a0ecfb1..cb41767 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/ui_navigation.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/ui_navigation.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: ui_navigation.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `ui_navigation.h`
 
 API to allow applications to take advantage of the platform's native UI engine.
 This is mainly to drive the animation of visual elements and to signal which of
@@ -19,20 +19,20 @@
 user interaction. If the navigation item is a container, then the content offset
 will also be queried to determine the placement of its content items.
 
-## Macros ##
+## Macros
 
-### kSbUiNavItemInvalid ###
+### kSbUiNavItemInvalid
 
 Well-defined value for an invalid navigation item.
 
-## Enums ##
+## Enums
 
-### SbUiNavItemType ###
+### SbUiNavItemType
 
 Navigation items may be one of the following types. This must be specified upon
 item creation and may not change during the item's lifespan.
 
-#### Values ####
+#### Values
 
 *   `kSbUiNavItemTypeFocus`
 
@@ -42,29 +42,29 @@
     This is a container of navigation items which can also be containers
     themselves or focusable items. Containers themselves cannot be focused.
 
-## Typedefs ##
+## Typedefs
 
-### SbUiNavItem ###
+### SbUiNavItem
 
 An opaque handle to an implementation-private structure representing a
 navigation item.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbUiNavItemPrivate* SbUiNavItem
 ```
 
-## Structs ##
+## Structs
 
-### SbUiNavCallbacks ###
+### SbUiNavCallbacks
 
 This structure specifies all the callbacks which the platform UI engine should
 invoke for various interaction events on navigation items. These callbacks may
 be invoked from any thread at any frequency. The `callback_context` is the value
 that was passed on creation of the relevant SbUiNavItem.
 
-#### Members ####
+#### Members
 
 *   `void(*onblur)(SbUiNavItem item, void *callback_context)`
 
@@ -77,12 +77,12 @@
     Invoke when an item's content offset is changed. This is only used with
     container items.
 
-### SbUiNavInterface ###
+### SbUiNavInterface
 
 This structure declares the interface to the UI navigation implementation. All
 function pointers must be specified if the platform supports UI navigation.
 
-#### Members ####
+#### Members
 
 *   `SbUiNavItem(*create_item)(SbUiNavItemType type, const SbUiNavCallbacks
     *callbacks, void *callback_context)`
@@ -237,7 +237,7 @@
     Call `update_function` with `context` to perform a series of UI navigation
     changes atomically before returning.
 
-### SbUiNavItemDir ###
+### SbUiNavItemDir
 
 Navigation items of type kSbUiNavItemTypeContainer have directionality. If
 directionality is not specified for a container, it should default to left-to-
@@ -270,12 +270,12 @@
   Bottom-to-top is similar to right-to-left, but for the Y position.
 ```
 
-#### Members ####
+#### Members
 
 *   `bool is_left_to_right`
 *   `bool is_top_to_bottom`
 
-### SbUiNavMatrix2x3 ###
+### SbUiNavMatrix2x3
 
 This represents a 2x3 transform matrix in row-major order.
 
@@ -284,38 +284,38 @@
 ///   | c d ty |
 ```
 
-#### Members ####
+#### Members
 
 *   `float m`
 
-### SbUiNavMatrix4 ###
+### SbUiNavMatrix4
 
 This represents a 4x4 transform matrix in row-major order.
 
-#### Members ####
+#### Members
 
 *   `float m`
 
-## Functions ##
+## Functions
 
-### SbUiNavGetInterface ###
+### SbUiNavGetInterface
 
 Retrieve the platform's UI navigation implementation. If the platform does not
 provide one, then return false without modifying `out_interface`. Otherwise,
 initialize all members of `out_interface` and return true. The `out_interface`
 pointer must not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbUiNavGetInterface(SbUiNavInterface *out_interface)
 ```
 
-### SbUiNavItemIsValid ###
+### SbUiNavItemIsValid
 
 Returns whether the given navigation item handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbUiNavItemIsValid(SbUiNavItem item)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/user.md b/cobalt/site/docs/reference/starboard/modules/14/user.md
index 406e695..309b939 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/user.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/user.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: user.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `user.h`
 
 Defines a user management API. This module defines functions only for managing
 signed-in users. Platforms that do not have users must still implement this API,
@@ -10,19 +10,19 @@
 These APIs are NOT expected to be thread-safe, so either call them from a single
 thread, or perform proper synchronization around all calls.
 
-## Macros ##
+## Macros
 
-### kSbUserInvalid ###
+### kSbUserInvalid
 
 Well-defined value for an invalid user.
 
-## Enums ##
+## Enums
 
-### SbUserPropertyId ###
+### SbUserPropertyId
 
 A set of string properties that can be queried on a user.
 
-#### Values ####
+#### Values
 
 *   `kSbUserPropertyAvatarUrl`
 
@@ -38,21 +38,21 @@
 
     A unique user ID of a user.
 
-## Typedefs ##
+## Typedefs
 
-### SbUser ###
+### SbUser
 
 A handle to a user.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbUserPrivate* SbUser
 ```
 
-## Functions ##
+## Functions
 
-### SbUserGetCurrent ###
+### SbUserGetCurrent
 
 Gets the current primary user, if one exists. This is the user that is
 determined, in a platform-specific way, to be the primary user controlling the
@@ -63,13 +63,13 @@
 It is expected that there will be a unique SbUser per signed-in user, and that
 the referenced objects will persist for the lifetime of the app.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbUser SbUserGetCurrent()
 ```
 
-### SbUserGetProperty ###
+### SbUserGetProperty
 
 Retrieves the value of `property_id` for `user` and places it in `out_value`.
 The function returns:
@@ -83,13 +83,13 @@
 The property for which the data is requested. `out_value`: The retrieved
 property value. `value_size`: The size of the retrieved property value.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbUserGetProperty(SbUser user, SbUserPropertyId property_id, char *out_value, int value_size)
 ```
 
-### SbUserGetPropertySize ###
+### SbUserGetPropertySize
 
 Returns the size of the value of `property_id` for `user`, INCLUDING the
 terminating null character. The function returns `0` if `user` is invalid or if
@@ -98,13 +98,13 @@
 `user`: The user for which property size data is being retrieved. `property_id`:
 The property for which the data is requested.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbUserGetPropertySize(SbUser user, SbUserPropertyId property_id)
 ```
 
-### SbUserGetSignedIn ###
+### SbUserGetSignedIn
 
 Gets a list of up to `users_size` signed-in users and places the results in
 `out_users`. The return value identifies the actual number of signed-in users,
@@ -116,17 +116,17 @@
 `out_users`: Handles for the retrieved users. `users_size`: The maximum number
 of signed-in users to retrieve.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbUserGetSignedIn(SbUser *out_users, int users_size)
 ```
 
-### SbUserIsValid ###
+### SbUserIsValid
 
 Returns whether the given user handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbUserIsValid(SbUser user)
diff --git a/cobalt/site/docs/reference/starboard/modules/14/window.md b/cobalt/site/docs/reference/starboard/modules/14/window.md
index 915e254..acea84d 100644
--- a/cobalt/site/docs/reference/starboard/modules/14/window.md
+++ b/cobalt/site/docs/reference/starboard/modules/14/window.md
@@ -1,40 +1,40 @@
----
-layout: doc
-title: "Starboard Module Reference: window.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `window.h`
 
 Provides functionality to handle Window creation and management.
 
-## Macros ##
+## Macros
 
-### kSbEventOnScreenKeyboardInvalidTicket ###
+### kSbEventOnScreenKeyboardInvalidTicket
 
 System-triggered OnScreenKeyboard events have ticket value
 kSbEventOnScreenKeyboardInvalidTicket.
 
-### kSbWindowInvalid ###
+### kSbWindowInvalid
 
 Well-defined value for an invalid window handle.
 
-## Typedefs ##
+## Typedefs
 
-### SbWindow ###
+### SbWindow
 
 A handle to a window.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbWindowPrivate* SbWindow
 ```
 
-## Structs ##
+## Structs
 
-### SbWindowOptions ###
+### SbWindowOptions
 
 Options that can be requested at window creation time.
 
-#### Members ####
+#### Members
 
 *   `SbWindowSize size`
 
@@ -48,25 +48,25 @@
 
     The name of the window to create.
 
-### SbWindowRect ###
+### SbWindowRect
 
 Defines a rectangle via a point `(x, y)` and a size `(width, height)`. This
 structure is used as output for SbWindowGetOnScreenKeyboardBoundingRect.
 
-#### Members ####
+#### Members
 
 *   `float x`
 *   `float y`
 *   `float width`
 *   `float height`
 
-### SbWindowSize ###
+### SbWindowSize
 
 The size of a window in graphics rendering coordinates. The width and height of
 a window should correspond to the size of the graphics surface used for drawing
 that would be created to back that window.
 
-#### Members ####
+#### Members
 
 *   `int width`
 
@@ -93,9 +93,9 @@
     A value of 0.0f means the ratio could not be determined, it should be
     assumed to be the same as the graphics resolution (i.e. 1.0f).
 
-## Functions ##
+## Functions
 
-### SbWindowBlurOnScreenKeyboard ###
+### SbWindowBlurOnScreenKeyboard
 
 Blur the on screen keyboard. Fire kSbEventTypeOnScreenKeyboardBlurred.
 kSbEventTypeOnScreenKeyboardBlurred has data `ticket`. Calling
@@ -103,13 +103,13 @@
 permitted. Calling SbWindowBlurOnScreenKeyboard while the on screen keyboard is
 not showing does nothing and does not fire any event.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowBlurOnScreenKeyboard(SbWindow window, int ticket)
 ```
 
-### SbWindowCreate ###
+### SbWindowCreate
 
 Creates and returns a new system window with the given `options`, which may be
 `NULL`. The function returns `kSbWindowInvalid` if it cannot create the
@@ -131,25 +131,25 @@
 
 `options`: Options that specify parameters for the window being created.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbWindow SbWindowCreate(const SbWindowOptions *options)
 ```
 
-### SbWindowDestroy ###
+### SbWindowDestroy
 
 Destroys `window`, reclaiming associated resources.
 
 `window`: The `SbWindow` to destroy.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbWindowDestroy(SbWindow window)
 ```
 
-### SbWindowFocusOnScreenKeyboard ###
+### SbWindowFocusOnScreenKeyboard
 
 Focus the on screen keyboard. Fire kSbEventTypeOnScreenKeyboardFocused.
 kSbEventTypeOnScreenKeyboardFocused has data `ticket`. Calling
@@ -157,38 +157,38 @@
 permitted. Calling SbWindowFocusOnScreenKeyboard while the on screen keyboard is
 not showing does nothing and does not fire any event.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowFocusOnScreenKeyboard(SbWindow window, int ticket)
 ```
 
-### SbWindowGetDiagonalSizeInInches ###
+### SbWindowGetDiagonalSizeInInches
 
 Gets the size of the diagonal between two opposing screen corners.
 
 A return value of 0 means that starboard does not know what the screen diagonal
 is.
 
-#### Declaration ####
+#### Declaration
 
 ```
 float SbWindowGetDiagonalSizeInInches(SbWindow window)
 ```
 
-### SbWindowGetOnScreenKeyboardBoundingRect ###
+### SbWindowGetOnScreenKeyboardBoundingRect
 
 Get the rectangle of the on screen keyboard in screen pixel coordinates. Return
 `true` if successful. Return `false` if the on screen keyboard is not showing.
 If the function returns `false`, then `rect` will not have been modified.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbWindowGetOnScreenKeyboardBoundingRect(SbWindow window, SbWindowRect *bounding_rect)
 ```
 
-### SbWindowGetPlatformHandle ###
+### SbWindowGetPlatformHandle
 
 Gets the platform-specific handle for `window`, which can be passed as an
 EGLNativeWindowType to initialize EGL/GLES. This return value is entirely
@@ -196,13 +196,13 @@
 
 `window`: The SbWindow to retrieve the platform handle for.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbWindowGetPlatformHandle(SbWindow window)
 ```
 
-### SbWindowGetSize ###
+### SbWindowGetSize
 
 Retrieves the dimensions of `window` and sets `size` accordingly. This function
 returns `true` if it completes successfully. If the function returns `false`,
@@ -210,81 +210,81 @@
 
 `window`: The SbWindow to retrieve the size of. `size`: The retrieved size.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbWindowGetSize(SbWindow window, SbWindowSize *size)
 ```
 
-### SbWindowHideOnScreenKeyboard ###
+### SbWindowHideOnScreenKeyboard
 
 Hide the on screen keyboard. Fire kSbEventTypeWindowSizeChange and
 kSbEventTypeOnScreenKeyboardHidden if necessary.
 kSbEventTypeOnScreenKeyboardHidden has data `ticket`. Calling
 SbWindowHideOnScreenKeyboard() when the keyboard is already hidden is permitted.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowHideOnScreenKeyboard(SbWindow window, int ticket)
 ```
 
-### SbWindowIsOnScreenKeyboardShown ###
+### SbWindowIsOnScreenKeyboardShown
 
 Determine if the on screen keyboard is shown.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbWindowIsOnScreenKeyboardShown(SbWindow window)
 ```
 
-### SbWindowIsValid ###
+### SbWindowIsValid
 
 Returns whether the given window handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbWindowIsValid(SbWindow window)
 ```
 
-### SbWindowOnScreenKeyboardIsSupported ###
+### SbWindowOnScreenKeyboardIsSupported
 
 Return whether the current platform supports an on screen keyboard
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbWindowOnScreenKeyboardIsSupported()
 ```
 
-### SbWindowOnScreenKeyboardSuggestionsSupported ###
+### SbWindowOnScreenKeyboardSuggestionsSupported
 
 Determine if the on screen keyboard has suggestions implemented. If this returns
 false, then calling SbWindowUpdateOnScreenKeyboardSuggestions() will be
 undefined.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbWindowOnScreenKeyboardSuggestionsSupported(SbWindow window)
 ```
 
-### SbWindowSetDefaultOptions ###
+### SbWindowSetDefaultOptions
 
 Sets the default options for system windows.
 
 `options`: The option values to use as default values. This object must not be
 `NULL`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowSetDefaultOptions(SbWindowOptions *options)
 ```
 
-### SbWindowSetOnScreenKeyboardKeepFocus ###
+### SbWindowSetOnScreenKeyboardKeepFocus
 
 Notify the system that `keepFocus` has been set for the OnScreenKeyboard.
 `keepFocus` true indicates that the user may not navigate focus off of the
@@ -293,13 +293,13 @@
 OnScreenKeyboard via input. `keepFocus` is initialized to false in the
 OnScreenKeyboard constructor.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowSetOnScreenKeyboardKeepFocus(SbWindow window, bool keep_focus)
 ```
 
-### SbWindowShowOnScreenKeyboard ###
+### SbWindowShowOnScreenKeyboard
 
 Show the on screen keyboard and populate the input with text `input_text`. Fire
 kSbEventTypeWindowSizeChange and kSbEventTypeOnScreenKeyboardShown if necessary.
@@ -309,13 +309,13 @@
 and the input will be replaced with `input_text`. Showing the on screen keyboard
 does not give it focus.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowShowOnScreenKeyboard(SbWindow window, const char *input_text, int ticket)
 ```
 
-### SbWindowUpdateOnScreenKeyboardSuggestions ###
+### SbWindowUpdateOnScreenKeyboardSuggestions
 
 Update the on screen keyboard custom suggestions. Fire
 kSbEventTypeOnScreenKeyboardSuggestionsUpdated.
@@ -323,7 +323,7 @@
 suggestions should remain up-to-date when the keyboard is shown after being
 hidden.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowUpdateOnScreenKeyboardSuggestions(SbWindow window, const char *suggestions[], int num_suggestions, int ticket)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/accessibility.md b/cobalt/site/docs/reference/starboard/modules/15/accessibility.md
index 1a5adcb..5c66ba4 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/accessibility.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/accessibility.md
@@ -1,17 +1,17 @@
----
-layout: doc
-title: "Starboard Module Reference: accessibility.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `accessibility.h`
 
 Provides access to the system options and settings related to accessibility.
 
-## Enums ##
+## Enums
 
-### SbAccessibilityCaptionCharacterEdgeStyle ###
+### SbAccessibilityCaptionCharacterEdgeStyle
 
 Enum for possible closed captioning character edge styles.
 
-#### Values ####
+#### Values
 
 *   `kSbAccessibilityCaptionCharacterEdgeStyleNone`
 *   `kSbAccessibilityCaptionCharacterEdgeStyleRaised`
@@ -19,11 +19,11 @@
 *   `kSbAccessibilityCaptionCharacterEdgeStyleUniform`
 *   `kSbAccessibilityCaptionCharacterEdgeStyleDropShadow`
 
-### SbAccessibilityCaptionColor ###
+### SbAccessibilityCaptionColor
 
 Enum for possible closed captioning colors.
 
-#### Values ####
+#### Values
 
 *   `kSbAccessibilityCaptionColorBlue`
 *   `kSbAccessibilityCaptionColorBlack`
@@ -34,11 +34,11 @@
 *   `kSbAccessibilityCaptionColorWhite`
 *   `kSbAccessibilityCaptionColorYellow`
 
-### SbAccessibilityCaptionFontFamily ###
+### SbAccessibilityCaptionFontFamily
 
 Enum for possible closed captioning font families
 
-#### Values ####
+#### Values
 
 *   `kSbAccessibilityCaptionFontFamilyCasual`
 *   `kSbAccessibilityCaptionFontFamilyCursive`
@@ -48,11 +48,11 @@
 *   `kSbAccessibilityCaptionFontFamilyProportionalSerif`
 *   `kSbAccessibilityCaptionFontFamilySmallCapitals`
 
-### SbAccessibilityCaptionFontSizePercentage ###
+### SbAccessibilityCaptionFontSizePercentage
 
 Enum for possible closed captioning font size percentages.
 
-#### Values ####
+#### Values
 
 *   `kSbAccessibilityCaptionFontSizePercentage25`
 *   `kSbAccessibilityCaptionFontSizePercentage50`
@@ -67,11 +67,11 @@
 *   `kSbAccessibilityCaptionFontSizePercentage275`
 *   `kSbAccessibilityCaptionFontSizePercentage300`
 
-### SbAccessibilityCaptionOpacityPercentage ###
+### SbAccessibilityCaptionOpacityPercentage
 
 Enum for possible closed captioning opacity percentages.
 
-#### Values ####
+#### Values
 
 *   `kSbAccessibilityCaptionOpacityPercentage0`
 *   `kSbAccessibilityCaptionOpacityPercentage25`
@@ -79,11 +79,11 @@
 *   `kSbAccessibilityCaptionOpacityPercentage75`
 *   `kSbAccessibilityCaptionOpacityPercentage100`
 
-### SbAccessibilityCaptionState ###
+### SbAccessibilityCaptionState
 
 Enum for possible states of closed captioning properties.
 
-#### Values ####
+#### Values
 
 *   `kSbAccessibilityCaptionStateUnsupported`
 
@@ -115,14 +115,14 @@
     SbAccessibilityCaptionSettings.supportsOverride contains false, then no
     fields of SbAccessibilityCaptionSettings will ever contain this value.
 
-## Structs ##
+## Structs
 
-### SbAccessibilityCaptionSettings ###
+### SbAccessibilityCaptionSettings
 
 A group of settings related to system-level closed captioning settings, for
 platforms that expose closed captioning settings.
 
-#### Members ####
+#### Members
 
 *   `SbAccessibilityCaptionColor background_color`
 *   `SbAccessibilityCaptionState background_color_state`
@@ -166,9 +166,9 @@
     false, the values of `SbAccessibilityCaptionState` should be interpreted
     differently.
 
-### SbAccessibilityDisplaySettings ###
+### SbAccessibilityDisplaySettings
 
-#### Members ####
+#### Members
 
 *   `bool has_high_contrast_text_setting`
 
@@ -177,12 +177,12 @@
 
     Whether the high contrast text setting is enabled or not.
 
-### SbAccessibilityTextToSpeechSettings ###
+### SbAccessibilityTextToSpeechSettings
 
 A group of settings related to text-to-speech functionality, for platforms that
 expose system settings for text-to-speech.
 
-#### Members ####
+#### Members
 
 *   `bool has_text_to_speech_setting`
 
@@ -192,9 +192,9 @@
     Whether the text-to-speech setting is enabled or not. This setting is only
     valid if `has_text_to_speech_setting` is set to true.
 
-## Functions ##
+## Functions
 
-### SbAccessibilityGetCaptionSettings ###
+### SbAccessibilityGetCaptionSettings
 
 Get the platform's settings for system-level closed captions. This function
 returns false if `caption_settings` is NULL or if it is not zero-initialized.
@@ -202,13 +202,13 @@
 `caption_settings`: A pointer to a zero-initialized
 SbAccessibilityTextToSpeechSettings struct.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAccessibilityGetCaptionSettings(SbAccessibilityCaptionSettings *caption_settings)
 ```
 
-### SbAccessibilityGetDisplaySettings ###
+### SbAccessibilityGetDisplaySettings
 
 Get the platform settings related to high contrast text. This function returns
 false if `out_settings` is NULL or if it is not zero-initialized.
@@ -216,13 +216,13 @@
 `out_settings`: A pointer to a zero-initialized SbAccessibilityDisplaySettings*
 struct.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAccessibilityGetDisplaySettings(SbAccessibilityDisplaySettings *out_settings)
 ```
 
-### SbAccessibilityGetTextToSpeechSettings ###
+### SbAccessibilityGetTextToSpeechSettings
 
 Get the platform settings related to the text-to-speech accessibility feature.
 This function returns false if `out_settings` is NULL or if it is not zero-
@@ -231,13 +231,13 @@
 `out_settings`: A pointer to a zero-initialized
 SbAccessibilityTextToSpeechSettings struct.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAccessibilityGetTextToSpeechSettings(SbAccessibilityTextToSpeechSettings *out_settings)
 ```
 
-### SbAccessibilitySetCaptionsEnabled ###
+### SbAccessibilitySetCaptionsEnabled
 
 Modifies whether closed captions are enabled at a system level. This function
 returns false if this feature is not supported by the platform, or if changing
@@ -246,7 +246,7 @@
 `enabled`: A boolean indicating whether captions should be turned on (true) or
 off (false).
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAccessibilitySetCaptionsEnabled(bool enabled)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/atomic.md b/cobalt/site/docs/reference/starboard/modules/15/atomic.md
index 9741f3c..0ed31cb 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/atomic.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/atomic.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: atomic.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `atomic.h`
 
 Defines a set of atomic integer operations that can be used as lightweight
 synchronization or as building blocks for heavier synchronization primitives.
@@ -9,32 +9,32 @@
 supported architectures, so their direct use is not recommended except when
 rigorously deemed absolutely necessary for performance reasons.
 
-## Typedefs ##
+## Typedefs
 
-### SbAtomic64 ###
+### SbAtomic64
 
 64-bit atomic operations (only available on 64-bit processors).
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int64_t SbAtomic64
 ```
 
-### SbAtomicPtr ###
+### SbAtomicPtr
 
 Pointer-sized atomic operations. Forwards to either 32-bit or 64-bit functions
 as appropriate.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbAtomic32 SbAtomicPtr
 ```
 
-## Functions ##
+## Functions
 
-### SbAtomicAcquire_CompareAndSwap ###
+### SbAtomicAcquire_CompareAndSwap
 
 These following lower-level operations are typically useful only to people
 implementing higher-level synchronization operations like spinlocks, mutexes,
@@ -45,23 +45,23 @@
 operation. "Barrier" operations have both "Acquire" and "Release" semantics. A
 SbAtomicMemoryBarrier() has "Barrier" semantics, but does no memory access.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbAtomic32 SbAtomicAcquire_CompareAndSwap(volatile SbAtomic32 *ptr, SbAtomic32 old_value, SbAtomic32 new_value)
 ```
 
-### SbAtomicBarrier_Increment ###
+### SbAtomicBarrier_Increment
 
 Same as SbAtomicNoBarrier_Increment, but with a memory barrier.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbAtomic32 SbAtomicBarrier_Increment(volatile SbAtomic32 *ptr, SbAtomic32 increment)
 ```
 
-### SbAtomicNoBarrier_CompareAndSwap ###
+### SbAtomicNoBarrier_CompareAndSwap
 
 Atomically execute: result = *ptr; if (*ptr == old_value) *ptr = new_value;
 return result;
@@ -71,39 +71,39 @@
 
 This routine implies no memory barriers.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbAtomic32 SbAtomicNoBarrier_CompareAndSwap(volatile SbAtomic32 *ptr, SbAtomic32 old_value, SbAtomic32 new_value)
 ```
 
-### SbAtomicNoBarrier_Exchange ###
+### SbAtomicNoBarrier_Exchange
 
 Atomically store new_value into *ptr, returning the previous value held in *ptr.
 This routine implies no memory barriers.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbAtomic32 SbAtomicNoBarrier_Exchange(volatile SbAtomic32 *ptr, SbAtomic32 new_value)
 ```
 
-### SbAtomicNoBarrier_Increment ###
+### SbAtomicNoBarrier_Increment
 
 Atomically increment *ptr by "increment". Returns the new value of *ptr with the
 increment applied. This routine implies no memory barriers.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbAtomic32 SbAtomicNoBarrier_Increment(volatile SbAtomic32 *ptr, SbAtomic32 increment)
 ```
 
-### SbAtomicRelease_CompareAndSwap8 ###
+### SbAtomicRelease_CompareAndSwap8
 
 Overloaded functions for Atomic8.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbAtomic8 SbAtomicRelease_CompareAndSwap8(volatile SbAtomic8 *ptr, SbAtomic8 old_value, SbAtomic8 new_value)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/audio_sink.md b/cobalt/site/docs/reference/starboard/modules/15/audio_sink.md
index b0e652f..9277c70 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/audio_sink.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/audio_sink.md
@@ -1,53 +1,53 @@
----
-layout: doc
-title: "Starboard Module Reference: audio_sink.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `audio_sink.h`
 
 Provides an interface to output raw audio data.
 
-## Macros ##
+## Macros
 
-### kSbAudioSinkInvalid ###
+### kSbAudioSinkInvalid
 
 Well-defined value for an invalid audio sink.
 
-## Typedefs ##
+## Typedefs
 
-### SbAudioSink ###
+### SbAudioSink
 
 An opaque handle to an implementation-private structure representing an audio
 sink.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbAudioSinkPrivate* SbAudioSink
 ```
 
-### SbAudioSinkConsumeFramesFunc ###
+### SbAudioSinkConsumeFramesFunc
 
 Callback used to report frames consumed. The consumed frames will be removed
 from the source frame buffer to free space for new audio frames.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbAudioSinkConsumeFramesFunc) (int frames_consumed, void *context)
 ```
 
-### SbAudioSinkFrameBuffers ###
+### SbAudioSinkFrameBuffers
 
 An array of frame buffers. For interleaved audio streams, there will be only one
 element in the array. For planar audio streams, the number of elements in the
 array equal to the number of channels.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void** SbAudioSinkFrameBuffers
 ```
 
-### SbAudioSinkUpdateSourceStatusFunc ###
+### SbAudioSinkUpdateSourceStatusFunc
 
 Callback being called periodically to retrieve the status of the audio source.
 The first two output parameters indicating the filling level of the audio frame
@@ -64,15 +64,15 @@
 NULL. Note that this function only reports the status of the source, it doesn't
 remove audio data from the source frame buffer.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbAudioSinkUpdateSourceStatusFunc) (int *frames_in_buffer, int *offset_in_frames, bool *is_playing, bool *is_eos_reached, void *context)
 ```
 
-## Functions ##
+## Functions
 
-### SbAudioSinkCreate ###
+### SbAudioSinkCreate
 
 Creates an audio sink for the specified `channels` and `sampling_frequency_hz`,
 acquires all resources needed to operate the audio sink, and returns an opaque
@@ -113,13 +113,13 @@
     value that is passed back to all callbacks and is generally used to point at
     a class or struct that contains state associated with the audio sink.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbAudioSink SbAudioSinkCreate(int channels, int sampling_frequency_hz, SbMediaAudioSampleType audio_sample_type, SbMediaAudioFrameStorageType audio_frame_storage_type, SbAudioSinkFrameBuffers frame_buffers, int frames_per_channel, SbAudioSinkUpdateSourceStatusFunc update_source_status_func, SbAudioSinkConsumeFramesFunc consume_frames_func, void *context)
 ```
 
-### SbAudioSinkDestroy ###
+### SbAudioSinkDestroy
 
 Destroys `audio_sink`, freeing all associated resources. Before returning, the
 function waits until all callbacks that are in progress have finished. After the
@@ -132,24 +132,24 @@
 
 `audio_sink`: The audio sink to destroy.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbAudioSinkDestroy(SbAudioSink audio_sink)
 ```
 
-### SbAudioSinkGetMaxChannels ###
+### SbAudioSinkGetMaxChannels
 
 Returns the maximum number of channels supported on the platform. For example,
 the number would be `2` if the platform only supports stereo.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbAudioSinkGetMaxChannels()
 ```
 
-### SbAudioSinkGetMinBufferSizeInFrames ###
+### SbAudioSinkGetMinBufferSizeInFrames
 
 Returns the minimum frames required by audio sink to play without underflows.
 Returns -1, if `channels`, `sample_type` or `sampling_frequency_hz` is not
@@ -162,52 +162,52 @@
 audio data being streamed. For example, 22,000 Hz means 22,000 sample elements
 represents one second of audio data.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbAudioSinkGetMinBufferSizeInFrames(int channels, SbMediaAudioSampleType sample_type, int sampling_frequency_hz)
 ```
 
-### SbAudioSinkGetNearestSupportedSampleFrequency ###
+### SbAudioSinkGetNearestSupportedSampleFrequency
 
 Returns the supported sample rate closest to `sampling_frequency_hz`. On
 platforms that don't support all sample rates, it is the caller's responsibility
 to resample the audio frames into the supported sample rate returned by this
 function.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbAudioSinkGetNearestSupportedSampleFrequency(int sampling_frequency_hz)
 ```
 
-### SbAudioSinkIsAudioFrameStorageTypeSupported ###
+### SbAudioSinkIsAudioFrameStorageTypeSupported
 
 Indicates whether `audio_frame_storage_type` is supported on this platform.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAudioSinkIsAudioFrameStorageTypeSupported(SbMediaAudioFrameStorageType audio_frame_storage_type)
 ```
 
-### SbAudioSinkIsAudioSampleTypeSupported ###
+### SbAudioSinkIsAudioSampleTypeSupported
 
 Indicates whether `audio_sample_type` is supported on this platform.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAudioSinkIsAudioSampleTypeSupported(SbMediaAudioSampleType audio_sample_type)
 ```
 
-### SbAudioSinkIsValid ###
+### SbAudioSinkIsValid
 
 Indicates whether the given audio sink handle is valid.
 
 `audio_sink`: The audio sink handle to check.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAudioSinkIsValid(SbAudioSink audio_sink)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/byte_swap.md b/cobalt/site/docs/reference/starboard/modules/15/byte_swap.md
index c83927d..72dc932 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/byte_swap.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/byte_swap.md
@@ -1,74 +1,74 @@
----
-layout: doc
-title: "Starboard Module Reference: byte_swap.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `byte_swap.h`
 
 Specifies functions for swapping byte order. These functions are used to deal
 with endianness when performing I/O.
 
-## Functions ##
+## Functions
 
-### SbByteSwapS16 ###
+### SbByteSwapS16
 
 Unconditionally swaps the byte order in signed 16-bit `value`. `value`: The
 value for which the byte order will be swapped.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int16_t SbByteSwapS16(int16_t value)
 ```
 
-### SbByteSwapS32 ###
+### SbByteSwapS32
 
 Unconditionally swaps the byte order in signed 32-bit `value`. `value`: The
 value for which the byte order will be swapped.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int32_t SbByteSwapS32(int32_t value)
 ```
 
-### SbByteSwapS64 ###
+### SbByteSwapS64
 
 Unconditionally swaps the byte order in signed 64-bit `value`. `value`: The
 value for which the byte order will be swapped.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbByteSwapS64(int64_t value)
 ```
 
-### SbByteSwapU16 ###
+### SbByteSwapU16
 
 Unconditionally swaps the byte order in unsigned 16-bit `value`. `value`: The
 value for which the byte order will be swapped.
 
-#### Declaration ####
+#### Declaration
 
 ```
 uint16_t SbByteSwapU16(uint16_t value)
 ```
 
-### SbByteSwapU32 ###
+### SbByteSwapU32
 
 Unconditionally swaps the byte order in unsigned 32-bit `value`. `value`: The
 value for which the byte order will be swapped.
 
-#### Declaration ####
+#### Declaration
 
 ```
 uint32_t SbByteSwapU32(uint32_t value)
 ```
 
-### SbByteSwapU64 ###
+### SbByteSwapU64
 
 Unconditionally swaps the byte order in unsigned 64-bit `value`. `value`: The
 value for which the byte order will be swapped.
 
-#### Declaration ####
+#### Declaration
 
 ```
 uint64_t SbByteSwapU64(uint64_t value)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/condition_variable.md b/cobalt/site/docs/reference/starboard/modules/15/condition_variable.md
index e58e106..2d8f30b 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/condition_variable.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/condition_variable.md
@@ -1,23 +1,23 @@
----
-layout: doc
-title: "Starboard Module Reference: condition_variable.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `condition_variable.h`
 
 Defines an interface for condition variables.
 
-## Macros ##
+## Macros
 
-### SB_CONDITION_VARIABLE_MAX_SIZE ###
+### SB_CONDITION_VARIABLE_MAX_SIZE
 
 Max size of the SbConditionVariable type.
 
-## Enums ##
+## Enums
 
-### SbConditionVariableResult ###
+### SbConditionVariableResult
 
 Enumeration of possible results from waiting on a condvar.
 
-#### Values ####
+#### Values
 
 *   `kSbConditionVariableSignaled`
 
@@ -30,22 +30,22 @@
     The wait failed, either because a parameter wasn't valid, or the condition
     variable has already been destroyed, or something similar.
 
-## Typedefs ##
+## Typedefs
 
-### SbConditionVariable ###
+### SbConditionVariable
 
 An opaque handle to a condition variable type with reserved memory buffer of
 size SB_CONDITION_VARIABLE_MAX_SIZE and aligned at void pointer type.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef union SbConditionVariable  SbConditionVariable
 ```
 
-## Functions ##
+## Functions
 
-### SbConditionVariableBroadcast ###
+### SbConditionVariableBroadcast
 
 Broadcasts to all current waiters of `condition` to stop waiting. This function
 wakes all of the threads waiting on `condition` while SbConditionVariableSignal
@@ -53,26 +53,26 @@
 
 `condition`: The condition that should no longer be waited for.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbConditionVariableBroadcast(SbConditionVariable *condition)
 ```
 
-### SbConditionVariableCreate ###
+### SbConditionVariableCreate
 
 Creates a new condition variable to work with `opt_mutex`, which may be null,
 placing the newly created condition variable in `out_condition`.
 
 The return value indicates whether the condition variable could be created.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbConditionVariableCreate(SbConditionVariable *out_condition, SbMutex *opt_mutex)
 ```
 
-### SbConditionVariableDestroy ###
+### SbConditionVariableDestroy
 
 Destroys the specified SbConditionVariable . The return value indicates whether
 the destruction was successful. The behavior is undefined if other threads are
@@ -81,23 +81,23 @@
 `condition`: The SbConditionVariable to be destroyed. This invalidates the
 condition variable.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbConditionVariableDestroy(SbConditionVariable *condition)
 ```
 
-### SbConditionVariableIsSignaled ###
+### SbConditionVariableIsSignaled
 
 Returns whether the given result is a success.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbConditionVariableIsSignaled(SbConditionVariableResult result)
 ```
 
-### SbConditionVariableSignal ###
+### SbConditionVariableSignal
 
 Signals the next waiter of `condition` to stop waiting. This function wakes a
 single thread waiting on `condition` while SbConditionVariableBroadcast wakes
@@ -105,24 +105,24 @@
 
 `condition`: The condition that the waiter should stop waiting for.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbConditionVariableSignal(SbConditionVariable *condition)
 ```
 
-### SbConditionVariableWait ###
+### SbConditionVariableWait
 
 Waits for `condition`, releasing the held lock `mutex`, blocking indefinitely,
 and returning the result. Behavior is undefined if `mutex` is not held.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbConditionVariableResult SbConditionVariableWait(SbConditionVariable *condition, SbMutex *mutex)
 ```
 
-### SbConditionVariableWaitTimed ###
+### SbConditionVariableWaitTimed
 
 Waits for `condition`, releasing the held lock `mutex`, blocking up to
 `timeout_duration`, and returning the acquisition result. Behavior is undefined
@@ -133,7 +133,7 @@
 function returns as quickly as possible with a kSbConditionVariableTimedOut
 result.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbConditionVariableResult SbConditionVariableWaitTimed(SbConditionVariable *condition, SbMutex *mutex, SbTime timeout_duration)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/configuration.md b/cobalt/site/docs/reference/starboard/modules/15/configuration.md
index 630f1cf..d0ba3c7 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/configuration.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/configuration.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: configuration.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `configuration.h`
 
 Provides a description of the current platform in lurid detail so that common
 code never needs to actually know what the current operating system and
@@ -13,117 +13,117 @@
 narrowly-defined configuration features, but it retains porting control in
 Starboard.
 
-## Macros ##
+## Macros
 
-### SB_ALIGNAS(byte_alignment) ###
+### SB_ALIGNAS(byte_alignment)
 
 Specifies the alignment for a class, struct, union, enum, class/struct field, or
 stack variable.
 
-### SB_ALIGNOF(type) ###
+### SB_ALIGNOF(type)
 
 Returns the alignment required for any instance of the type indicated by `type`.
 
-### SB_ARRAY_SIZE(array) ###
+### SB_ARRAY_SIZE(array)
 
 A constant expression that evaluates to the size_t size of a statically-sized
 array.
 
-### SB_ARRAY_SIZE_INT(array) ###
+### SB_ARRAY_SIZE_INT(array)
 
 A constant expression that evaluates to the int size of a statically-sized
 array.
 
-### SB_CAN(SB_FEATURE) ###
+### SB_CAN(SB_FEATURE)
 
 Determines a compile-time capability of the system.
 
-### SB_COMPILE_ASSERT(expr, msg) ###
+### SB_COMPILE_ASSERT(expr, msg)
 
 Will cause a compiler error with `msg` if `expr` is false. `msg` must be a valid
 identifier, and must be a unique type in the scope of the declaration.
 
-### SB_DEPRECATED(FUNC) ###
+### SB_DEPRECATED(FUNC)
 
 SB_DEPRECATED(int Foo(int bar)); Annotates the function as deprecated, which
 will trigger a compiler warning when referenced.
 
-### SB_DEPRECATED_EXTERNAL(FUNC) ###
+### SB_DEPRECATED_EXTERNAL(FUNC)
 
 SB_DEPRECATED_EXTERNAL(...) annotates the function as deprecated for external
 clients, but not deprecated for starboard.
 
-### SB_EXPERIMENTAL_API_VERSION ###
+### SB_EXPERIMENTAL_API_VERSION
 
 The API version that is currently open for changes, and therefore is not stable
 or frozen. Production-oriented ports should avoid declaring that they implement
 the experimental Starboard API version.
 
-### SB_FUNCTION ###
+### SB_FUNCTION
 
 Whether we use **PRETTY_FUNCTION** PRETTY_FUNCTION or **FUNCTION** FUNCTION for
 logging.
 
-### SB_HAS(SB_FEATURE) ###
+### SB_HAS(SB_FEATURE)
 
 Determines at compile-time whether this platform has a standard feature or
 header available.
 
-### SB_HAS_64_BIT_ATOMICS ###
+### SB_HAS_64_BIT_ATOMICS
 
 Whether the current platform has 64-bit atomic operations.
 
-### SB_HAS_GLES2 ###
+### SB_HAS_GLES2
 
 Specifies whether this platform has a performant OpenGL ES 2 implementation,
 which allows client applications to use GL rendering paths. Derived from the gyp
 variable `gl_type` gl_type which indicates what kind of GL implementation is
 available.
 
-### SB_HAS_QUIRK(SB_FEATURE) ###
+### SB_HAS_QUIRK(SB_FEATURE)
 
 Determines at compile-time whether this platform has a quirk.
 
-### SB_INT64_C(x) ###
+### SB_INT64_C(x)
 
 Declare numeric literals of signed 64-bit type.
 
-### SB_IS(SB_FEATURE) ###
+### SB_IS(SB_FEATURE)
 
 Determines at compile-time an inherent aspect of this platform.
 
-### SB_LIKELY(x) ###
+### SB_LIKELY(x)
 
 Macro for hinting that an expression is likely to be true.
 
-### SB_MAXIMUM_API_VERSION ###
+### SB_MAXIMUM_API_VERSION
 
 The maximum API version allowed by this version of the Starboard headers,
 inclusive.
 
-### SB_MINIMUM_API_VERSION ###
+### SB_MINIMUM_API_VERSION
 
 The minimum API version allowed by this version of the Starboard headers,
 inclusive.
 
-### SB_NORETURN ###
+### SB_NORETURN
 
 Macro to annotate a function as noreturn, which signals to the compiler that the
 function cannot return.
 
-### SB_OVERRIDE ###
+### SB_OVERRIDE
 
 Declares a function as overriding a virtual function on compilers that support
 it.
 
-### SB_PREFERRED_RGBA_BYTE_ORDER_RGBA ###
+### SB_PREFERRED_RGBA_BYTE_ORDER_RGBA
 
 An enumeration of values for the kSbPreferredByteOrder configuration variable.
 Setting this up properly means avoiding slow color swizzles when passing pixel
 data from one library to another. Note that these definitions are in byte-order
 and so are endianness-independent.
 
-### SB_PRINTF_FORMAT(format_param, dots_param) ###
+### SB_PRINTF_FORMAT(format_param, dots_param)
 
 Tells the compiler a function is using a printf-style format string.
 `format_param` is the one-based index of the format string parameter;
@@ -132,7 +132,7 @@
 but matches what the system C headers do.) (Partially taken from
 base/compiler_specific.h)
 
-### SB_RESTRICT ###
+### SB_RESTRICT
 
 Include the platform-specific configuration. This macro is set by GN in
 starboard/build/config/BUILD.gn and passed in on the command line for all
@@ -140,29 +140,29 @@
 that the compiler can make certain optimizations because it knows the pointers
 are unique.
 
-### SB_SIZE_OF(DATATYPE) ###
+### SB_SIZE_OF(DATATYPE)
 
 Determines at compile-time the size of a data type, or 0 if the data type that
 was specified was invalid.
 
-### SB_STRINGIFY(x) ###
+### SB_STRINGIFY(x)
 
 Standard CPP trick to stringify an evaluated macro definition.
 
-### SB_UINT64_C(x) ###
+### SB_UINT64_C(x)
 
 Declare numeric literals of unsigned 64-bit type.
 
-### SB_UNLIKELY(x) ###
+### SB_UNLIKELY(x)
 
 Macro for hinting that an expression is likely to be false.
 
-### SB_UNREFERENCED_PARAMETER(x) ###
+### SB_UNREFERENCED_PARAMETER(x)
 
 Trivially references a parameter that is otherwise unreferenced, preventing a
 compiler warning on some platforms.
 
-### SB_WARN_UNUSED_RESULT ###
+### SB_WARN_UNUSED_RESULT
 
 Causes the annotated (at the end) function to generate a warning if the result
 is not accessed.
diff --git a/cobalt/site/docs/reference/starboard/modules/15/configuration_constants.md b/cobalt/site/docs/reference/starboard/modules/15/configuration_constants.md
index 99d92f8..18af4bc 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/configuration_constants.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/configuration_constants.md
@@ -1,113 +1,113 @@
----
-layout: doc
-title: "Starboard Module Reference: configuration_constants.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `configuration_constants.h`
 
 Declares all configuration variables we will need to use at runtime. These
 variables describe the current platform in detail to allow cobalt to make
 runtime decisions based on per platform configurations.
 
-## Variables ##
+## Variables
 
-### kSbDefaultMmapThreshold ###
+### kSbDefaultMmapThreshold
 
 Determines the threshold of allocation size that should be done with mmap (if
 available), rather than allocated within the core heap.
 
-### kSbFileAltSepChar ###
+### kSbFileAltSepChar
 
 The current platform's alternate file path component separator character. This
 is like SB_FILE_SEP_CHAR, except if your platform supports an alternate
 character, then you can place that here. For example, on windows machines, the
 primary separator character is probably '\', but the alternate is '/'.
 
-### kSbFileAltSepString ###
+### kSbFileAltSepString
 
 The string form of SB_FILE_ALT_SEP_CHAR.
 
-### kSbFileMaxName ###
+### kSbFileMaxName
 
 The current platform's maximum length of the name of a single directory entry,
 not including the absolute path.
 
-### kSbFileMaxOpen ###
+### kSbFileMaxOpen
 
 The current platform's maximum number of files that can be opened at the same
 time by one process.
 
-### kSbFileMaxPath ###
+### kSbFileMaxPath
 
 The current platform's maximum length of an absolute path.
 
-### kSbFileSepChar ###
+### kSbFileSepChar
 
 The current platform's file path component separator character. This is the
 character that appears after a directory in a file path. For example, the
 absolute canonical path of the file "/path/to/a/file.txt" uses '/' as a path
 component separator character.
 
-### kSbFileSepString ###
+### kSbFileSepString
 
 The string form of SB_FILE_SEP_CHAR.
 
-### kSbHasMediaWebmVp9Support ###
+### kSbHasMediaWebmVp9Support
 
 Specifies whether this platform has webm/vp9 support. This should be set to non-
 zero on platforms with webm/vp9 support.
 
-### kSbHasThreadPrioritySupport ###
+### kSbHasThreadPrioritySupport
 
 Whether the current platform supports thread priorities.
 
-### kSbMallocAlignment ###
+### kSbMallocAlignment
 
 Determines the alignment that allocations should have on this platform.
 
-### kSbMaxSystemPathCacheDirectorySize ###
+### kSbMaxSystemPathCacheDirectorySize
 
 The maximum size the cache directory is allowed to use in bytes.
 
-### kSbMaxThreadLocalKeys ###
+### kSbMaxThreadLocalKeys
 
 The maximum number of thread local storage keys supported by this platform. This
 comes from _POSIX_THREAD_KEYS_MAX. The value of PTHREAD_KEYS_MAX is higher, but
 unit tests show that the implementation doesn't support nearly as many keys.
 
-### kSbMaxThreadNameLength ###
+### kSbMaxThreadNameLength
 
 The maximum length of the name for a thread, including the NULL-terminator.
 
-### kSbMaxThreads ###
+### kSbMaxThreads
 
 Defines the maximum number of simultaneous threads for this platform. Some
 platforms require sharing thread handles with other kinds of system handles,
 like mutexes, so we want to keep this manageable.
 
-### kSbMediaMaxAudioBitrateInBitsPerSecond ###
+### kSbMediaMaxAudioBitrateInBitsPerSecond
 
 The maximum audio bitrate the platform can decode. The following value equals to
 5M bytes per seconds which is more than enough for compressed audio.
 
-### kSbMediaMaxVideoBitrateInBitsPerSecond ###
+### kSbMediaMaxVideoBitrateInBitsPerSecond
 
 The maximum video bitrate the platform can decode. The following value equals to
 8M bytes per seconds which is more than enough for compressed video.
 
-### kSbMediaVideoFrameAlignment ###
+### kSbMediaVideoFrameAlignment
 
 Specifies how video frame buffers must be aligned on this platform.
 
-### kSbMemoryLogPath ###
+### kSbMemoryLogPath
 
 Defines the path where memory debugging logs should be written to.
 
-### kSbMemoryPageSize ###
+### kSbMemoryPageSize
 
 The memory page size, which controls the size of chunks on memory that
 allocators deal with, and the alignment of those chunks. This doesn't have to be
 the hardware-defined physical page size, but it should be a multiple of it.
 
-### kSbNetworkReceiveBufferSize ###
+### kSbNetworkReceiveBufferSize
 
 Specifies the network receive buffer size in bytes, set via
 SbSocketSetReceiveBufferSize().
@@ -122,7 +122,7 @@
 If your platform does not have a good TCP auto-tuning mechanism, a setting of
 (128 * 1024) here is recommended.
 
-### kSbPathSepChar ###
+### kSbPathSepChar
 
 The current platform's search path component separator character. When
 specifying an ordered list of absolute paths of directories to search for a
@@ -130,16 +130,16 @@
 the search path of "/etc/search/first:/etc/search/second" uses ':' as a search
 path component separator character.
 
-### kSbPathSepString ###
+### kSbPathSepString
 
 The string form of SB_PATH_SEP_CHAR.
 
-### kSbPreferredRgbaByteOrder ###
+### kSbPreferredRgbaByteOrder
 
 Specifies the preferred byte order of color channels in a pixel. Refer to
 starboard/configuration.h for the possible values. EGL/GLES platforms should
 generally prefer a byte order of RGBA, regardless of endianness.
 
-### kSbUserMaxSignedIn ###
+### kSbUserMaxSignedIn
 
 The maximum number of users that can be signed in at the same time.
diff --git a/cobalt/site/docs/reference/starboard/modules/15/cpu_features.md b/cobalt/site/docs/reference/starboard/modules/15/cpu_features.md
index 7a4bcc0..e2aa35f 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/cpu_features.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/cpu_features.md
@@ -1,13 +1,13 @@
----
-layout: doc
-title: "Starboard Module Reference: cpu_features.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
 
-## Structs ##
+# Starboard Module Reference: `cpu_features.h`
 
-### SbCPUFeatures ###
+## Structs
 
-#### Members ####
+### SbCPUFeatures
+
+#### Members
 
 *   `SbCPUFeaturesArchitecture architecture`
 
@@ -54,9 +54,9 @@
     defined as a macro.
 *   `SbCPUFeaturesX86 x86`
 
-### SbCPUFeaturesARM ###
+### SbCPUFeaturesARM
 
-#### Members ####
+#### Members
 
 *   `int16_t implementer`
 
@@ -98,7 +98,7 @@
     SDIV and UDIV hardware division in ARM mode.
 *   `bool has_aes`
 
-    ###### Arm 64 feature flags  ######
+    ###### Arm 64 feature flags
 
     AES instructions.
 *   `bool has_crc32`
@@ -114,17 +114,17 @@
 
     64-bit PMULL and PMULL2 instructions.
 
-### SbCPUFeaturesMIPS ###
+### SbCPUFeaturesMIPS
 
-#### Members ####
+#### Members
 
 *   `bool has_msa`
 
     MIPS SIMD Architecture (MSA).
 
-### SbCPUFeaturesX86 ###
+### SbCPUFeaturesX86
 
-#### Members ####
+#### Members
 
 *   `const char * vendor`
 
@@ -244,9 +244,9 @@
 
     SAHF in long mode.
 
-## Functions ##
+## Functions
 
-### SbCPUFeaturesGet ###
+### SbCPUFeaturesGet
 
 Retrieve the underlying CPU features and place it in `features`, which must not
 be NULL.
@@ -254,7 +254,7 @@
 If this function returns false, it means the CPU architecture is unknown and all
 fields in `features` are invalid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbCPUFeaturesGet(SbCPUFeatures *features)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/decode_target.md b/cobalt/site/docs/reference/starboard/modules/15/decode_target.md
index a237ad9..56c7afa 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/decode_target.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/decode_target.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: decode_target.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `decode_target.h`
 
 A target for decoding image and video data into. This corresponds roughly to an
 EGLImage, but that extension may not be fully supported on all GL platforms.
@@ -12,7 +12,7 @@
 decoding done directly into this memory, avoiding unnecessary memory copies, and
 also avoiding pushing data between CPU and GPU memory unnecessarily.
 
-## SbDecodeTargetFormat ##
+## SbDecodeTargetFormat
 
 SbDecodeTargets support several different formats that can be used to decode
 into and render from. Some formats may be easier to decode into, and others may
@@ -21,7 +21,7 @@
 Each decoder provides a way to check if a given SbDecodeTargetFormat is
 supported by that decoder.
 
-## SbDecodeTargetGraphicsContextProvider ##
+## SbDecodeTargetGraphicsContextProvider
 
 Some components may need to acquire SbDecodeTargets compatible with a certain
 rendering context, which may need to be created on a particular thread. The
@@ -33,10 +33,9 @@
 EGLContext held current. This may be useful if your SbDecodeTarget creation code
 needs to execute GLES commands like, for example, glGenTextures().
 
-The primary usage is likely to be the the SbPlayer implementation on some
-platforms.
+The primary usage is likely to be the SbPlayer implementation on some platforms.
 
-## SbDecodeTarget Example ##
+## SbDecodeTarget Example
 
 Let's say that we are an application and we would like to use the interface
 defined in starboard/image.h to decode an imaginary "image/foo" image type.
@@ -79,15 +78,15 @@
     info.planes[kSbDecodeTargetPlaneRGBA].texture;
 ```
 
-## Macros ##
+## Macros
 
-### kSbDecodeTargetInvalid ###
+### kSbDecodeTargetInvalid
 
 Well-defined value for an invalid decode target handle.
 
-## Enums ##
+## Enums
 
-### SbDecodeTargetFormat ###
+### SbDecodeTargetFormat
 
 The list of all possible decoder target formats. An SbDecodeTarget consists of
 one or more planes of data, each plane corresponding with a surface. For some
@@ -96,7 +95,7 @@
 NOTE: For enumeration entries with an alpha component, the alpha will always be
 premultiplied unless otherwise explicitly specified.
 
-#### Values ####
+#### Values
 
 *   `kSbDecodeTargetFormat1PlaneRGBA`
 
@@ -137,11 +136,11 @@
 
     An invalid decode target format.
 
-### SbDecodeTargetPlane ###
+### SbDecodeTargetPlane
 
 All the planes supported by SbDecodeTarget.
 
-#### Values ####
+#### Values
 
 *   `kSbDecodeTargetPlaneRGBA`
 
@@ -162,45 +161,45 @@
 
     The V plane for 3-plane YUV formats.
 
-## Typedefs ##
+## Typedefs
 
-### SbDecodeTarget ###
+### SbDecodeTarget
 
 A handle to a target for image data decoding.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbDecodeTargetPrivate* SbDecodeTarget
 ```
 
-### SbDecodeTargetGlesContextRunner ###
+### SbDecodeTargetGlesContextRunner
 
 Signature for a function provided by the application to the Starboard
 implementation that will let the Starboard implementation run arbitrary code on
 the application's renderer thread with the application's EGLContext held
 current.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDecodeTargetGlesContextRunner) (struct SbDecodeTargetGraphicsContextProvider *graphics_context_provider, SbDecodeTargetGlesContextRunnerTarget target_function, void *target_function_context)
 ```
 
-### SbDecodeTargetGlesContextRunnerTarget ###
+### SbDecodeTargetGlesContextRunnerTarget
 
 Signature for a Starboard implementation function that is to be run by a
 SbDecodeTargetGlesContextRunner callback.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDecodeTargetGlesContextRunnerTarget) (void *gles_context_runner_target_context)
 ```
 
-## Structs ##
+## Structs
 
-### SbDecodeTargetGraphicsContextProvider ###
+### SbDecodeTargetGraphicsContextProvider
 
 In general, the SbDecodeTargetGraphicsContextProvider structure provides
 information about the graphics context that will be used to render
@@ -210,7 +209,7 @@
 to all Starboard functions that might create SbDecodeTargets (e.g.
 SbImageDecode()).
 
-#### Members ####
+#### Members
 
 *   `void * egl_display`
 
@@ -233,12 +232,12 @@
     Context data that is to be passed in to `gles_context_runner` when it is
     invoked.
 
-### SbDecodeTargetInfo ###
+### SbDecodeTargetInfo
 
 Contains all information about a decode target, including all of its planes.
 This can be queried via calls to SbDecodeTargetGetInfo().
 
-#### Members ####
+#### Members
 
 *   `SbDecodeTargetFormat format`
 
@@ -267,11 +266,11 @@
     kSbDecodeTargetPlaneU, kSbDecodeTargetPlaneV} associated with this decode
     target.
 
-### SbDecodeTargetInfoContentRegion ###
+### SbDecodeTargetInfoContentRegion
 
 Defines a rectangular content region within a SbDecodeTargetInfoPlane structure.
 
-#### Members ####
+#### Members
 
 *   `float left`
 
@@ -283,11 +282,11 @@
 *   `float right`
 *   `float bottom`
 
-### SbDecodeTargetInfoPlane ###
+### SbDecodeTargetInfoPlane
 
 Defines an image plane within a SbDecodeTargetInfo object.
 
-#### Members ####
+#### Members
 
 *   `uint32_t texture`
 
@@ -317,53 +316,53 @@
     these parameters are number of pixels. The range for left/right is [0,
     width], and for top/bottom it is [0, height].
 
-## Functions ##
+## Functions
 
-### PrivateDecodeTargetReleaser ###
+### PrivateDecodeTargetReleaser
 
 This function is just an implementation detail of
 SbDecodeTargetReleaseInGlesContext() and should not be called directly.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static void PrivateDecodeTargetReleaser(void *context)
 ```
 
-### SbDecodeTargetGetInfo ###
+### SbDecodeTargetGetInfo
 
 Writes all information about `decode_target` into `out_info`. The
 `decode_target` must not be kSbDecodeTargetInvalid. The `out_info` pointer must
 not be NULL. Returns false if the provided `out_info` structure is not zero
 initialized.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbDecodeTargetGetInfo(SbDecodeTarget decode_target, SbDecodeTargetInfo *out_info)
 ```
 
-### SbDecodeTargetIsFormatValid ###
+### SbDecodeTargetIsFormatValid
 
 Returns whether a given format is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbDecodeTargetIsFormatValid(SbDecodeTargetFormat format)
 ```
 
-### SbDecodeTargetIsValid ###
+### SbDecodeTargetIsValid
 
 Returns whether the given file handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbDecodeTargetIsValid(SbDecodeTarget handle)
 ```
 
-### SbDecodeTargetRelease ###
+### SbDecodeTargetRelease
 
 Returns ownership of `decode_target` to the Starboard implementation. This
 function will likely result in the destruction of the SbDecodeTarget and all its
@@ -371,31 +370,31 @@
 reference count. In the case where SB_HAS(GLES2), this function must be called
 on a thread with the context
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbDecodeTargetRelease(SbDecodeTarget decode_target)
 ```
 
-### SbDecodeTargetReleaseInGlesContext ###
+### SbDecodeTargetReleaseInGlesContext
 
 Helper function that is possibly useful to Starboard implementations that will
 release a decode target on the thread with the GLES context current.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static void SbDecodeTargetReleaseInGlesContext(SbDecodeTargetGraphicsContextProvider *provider, SbDecodeTarget decode_target)
 ```
 
-### SbDecodeTargetRunInGlesContext ###
+### SbDecodeTargetRunInGlesContext
 
 Inline convenience function to run an arbitrary
 SbDecodeTargetGlesContextRunnerTarget function through a
 SbDecodeTargetGraphicsContextProvider . This is intended to be called by
 Starboard implementations, if it is necessary.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static void SbDecodeTargetRunInGlesContext(SbDecodeTargetGraphicsContextProvider *provider, SbDecodeTargetGlesContextRunnerTarget target, void *target_context)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/directory.md b/cobalt/site/docs/reference/starboard/modules/15/directory.md
index dcdf48a..6f845f6 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/directory.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/directory.md
@@ -1,56 +1,56 @@
----
-layout: doc
-title: "Starboard Module Reference: directory.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `directory.h`
 
 Provides directory listing functions.
 
-## Macros ##
+## Macros
 
-### kSbDirectoryInvalid ###
+### kSbDirectoryInvalid
 
 Well-defined value for an invalid directory stream handle.
 
-## Typedefs ##
+## Typedefs
 
-### SbDirectory ###
+### SbDirectory
 
 A handle to an open directory stream.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbDirectoryPrivate* SbDirectory
 ```
 
-## Functions ##
+## Functions
 
-### SbDirectoryCanOpen ###
+### SbDirectoryCanOpen
 
 Indicates whether SbDirectoryOpen is allowed for the given `path`.
 
 `path`: The path to be checked.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbDirectoryCanOpen(const char *path)
 ```
 
-### SbDirectoryClose ###
+### SbDirectoryClose
 
 Closes an open directory stream handle. The return value indicates whether the
 directory was closed successfully.
 
 `directory`: The directory stream handle to close.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbDirectoryClose(SbDirectory directory)
 ```
 
-### SbDirectoryCreate ###
+### SbDirectoryCreate
 
 Creates the directory `path`, assuming the parent directory already exists. This
 function returns `true` if the directory now exists (even if it existed before)
@@ -58,13 +58,13 @@
 
 `path`: The path to be created.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbDirectoryCreate(const char *path)
 ```
 
-### SbDirectoryGetNext ###
+### SbDirectoryGetNext
 
 Populates `out_entry` with the next entry in the specified directory stream, and
 moves the stream forward by one entry.
@@ -83,23 +83,23 @@
 `out_entry_size`: The size of the space allocated for `out_entry`. This should
 be at least equal to kSbFileMaxName.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbDirectoryGetNext(SbDirectory directory, char *out_entry, size_t out_entry_size)
 ```
 
-### SbDirectoryIsValid ###
+### SbDirectoryIsValid
 
 Returns whether the given directory stream handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbDirectoryIsValid(SbDirectory directory)
 ```
 
-### SbDirectoryOpen ###
+### SbDirectoryOpen
 
 Opens the given existing directory for listing. This function returns
 kSbDirectoryInvalidHandle if it is not successful.
@@ -110,7 +110,7 @@
 `out_error`: An output parameter that, in case of an error, is set to the reason
 that the directory could not be opened.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbDirectory SbDirectoryOpen(const char *path, SbFileError *out_error)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/drm.md b/cobalt/site/docs/reference/starboard/modules/15/drm.md
index fbb92f9..f42e43b 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/drm.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/drm.md
@@ -1,37 +1,37 @@
----
-layout: doc
-title: "Starboard Module Reference: drm.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `drm.h`
 
 Provides definitions that allow for DRM support, which are common between Player
 and Decoder interfaces.
 
-## Macros ##
+## Macros
 
-### kSbDrmSystemInvalid ###
+### kSbDrmSystemInvalid
 
 An invalid SbDrmSystem.
 
-### kSbDrmTicketInvalid ###
+### kSbDrmTicketInvalid
 
 A ticket for callback invocations initiated by the DRM system.
 
-## Enums ##
+## Enums
 
-### SbDrmEncryptionScheme ###
+### SbDrmEncryptionScheme
 
 Encryption scheme of the input sample, as defined in ISO/IEC 23001 part 7.
 
-#### Values ####
+#### Values
 
 *   `kSbDrmEncryptionSchemeAesCtr`
 *   `kSbDrmEncryptionSchemeAesCbc`
 
-### SbDrmKeyStatus ###
+### SbDrmKeyStatus
 
 Status of a particular media key. [https://w3c.github.io/encrypted-media/#idl-def-MediaKeyStatus](https://w3c.github.io/encrypted-media/#idl-def-MediaKeyStatus)
 
-#### Values ####
+#### Values
 
 *   `kSbDrmKeyStatusUsable`
 *   `kSbDrmKeyStatusExpired`
@@ -41,24 +41,24 @@
 *   `kSbDrmKeyStatusPending`
 *   `kSbDrmKeyStatusError`
 
-### SbDrmSessionRequestType ###
+### SbDrmSessionRequestType
 
 The type of the session request. [https://www.w3.org/TR/encrypted-media/#idl-def-mediakeymessagetype](https://www.w3.org/TR/encrypted-media/#idl-def-mediakeymessagetype)
 
-#### Values ####
+#### Values
 
 *   `kSbDrmSessionRequestTypeLicenseRequest`
 *   `kSbDrmSessionRequestTypeLicenseRenewal`
 *   `kSbDrmSessionRequestTypeLicenseRelease`
 *   `kSbDrmSessionRequestTypeIndividualizationRequest`
 
-### SbDrmStatus ###
+### SbDrmStatus
 
 The status of session related operations. Used by
 `SbDrmSessionUpdateRequestFunc`, `SbDrmSessionUpdatedFunc`, and
 `SbDrmServerCertificateUpdatedFunc` to indicate the status of the operation. [https://w3c.github.io/encrypted-media/#error-names](https://w3c.github.io/encrypted-media/#error-names)
 
-#### Values ####
+#### Values
 
 *   `kSbDrmStatusSuccess`
 *   `kSbDrmStatusTypeError`
@@ -70,42 +70,42 @@
     The following error can be used when the error status cannot be mapped to
     one of the above errors.
 
-## Typedefs ##
+## Typedefs
 
-### SbDrmServerCertificateUpdatedFunc ###
+### SbDrmServerCertificateUpdatedFunc
 
 A callback to notify the caller of SbDrmUpdateServerCertificate() whether the
 update has been successfully updated or not.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDrmServerCertificateUpdatedFunc) (SbDrmSystem drm_system, void *context, int ticket, SbDrmStatus status, const char *error_message)
 ```
 
-### SbDrmSessionClosedFunc ###
+### SbDrmSessionClosedFunc
 
 A callback for signalling that a session has been closed by the SbDrmSystem
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDrmSessionClosedFunc) (SbDrmSystem drm_system, void *context, const void *session_id, int session_id_size)
 ```
 
-### SbDrmSessionKeyStatusesChangedFunc ###
+### SbDrmSessionKeyStatusesChangedFunc
 
 A callback for notifications that the status of one or more keys in a session
 has been changed. All keys of the session and their new status will be passed
 along. Any keys not in the list is considered as deleted.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDrmSessionKeyStatusesChangedFunc) (SbDrmSystem drm_system, void *context, const void *session_id, int session_id_size, int number_of_keys, const SbDrmKeyId *key_ids, const SbDrmKeyStatus *key_statuses)
 ```
 
-### SbDrmSessionUpdateRequestFunc ###
+### SbDrmSessionUpdateRequestFunc
 
 A callback that will receive generated session update request when requested
 from a SbDrmSystem. `drm_system` will be the DRM system that
@@ -128,13 +128,13 @@
 the correct Promise corresponding to the associated
 SbDrmGenerateSessionUpdateRequest().
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDrmSessionUpdateRequestFunc) (SbDrmSystem drm_system, void *context, int ticket, SbDrmStatus status, SbDrmSessionRequestType type, const char *error_message, const void *session_id, int session_id_size, const void *content, int content_size, const char *url)
 ```
 
-### SbDrmSessionUpdatedFunc ###
+### SbDrmSessionUpdatedFunc
 
 A callback for notifications that a session has been added, and subsequent
 encrypted samples are actively ready to be decoded. `drm_system` will be the DRM
@@ -150,37 +150,37 @@
 `status` is `kSbDrmStatusSuccess` or if no error message can be provided.
 `succeeded` is whether the session was successfully updated or not.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDrmSessionUpdatedFunc) (SbDrmSystem drm_system, void *context, int ticket, SbDrmStatus status, const char *error_message, const void *session_id, int session_id_size)
 ```
 
-### SbDrmSystem ###
+### SbDrmSystem
 
 A handle to a DRM system which can be used with either an SbDecoder or an
 SbPlayer.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbDrmSystemPrivate* SbDrmSystem
 ```
 
-## Structs ##
+## Structs
 
-### SbDrmEncryptionPattern ###
+### SbDrmEncryptionPattern
 
 Encryption pattern of the input sample, as defined in ISO/IEC 23001 part 7.
 
-#### Members ####
+#### Members
 
 *   `uint32_t crypt_byte_block`
 *   `uint32_t skip_byte_block`
 
-### SbDrmKeyId ###
+### SbDrmKeyId
 
-#### Members ####
+#### Members
 
 *   `uint8_t identifier`
 
@@ -188,11 +188,11 @@
     PlayReady, this is the license GUID in packed little-endian binary form.
 *   `int identifier_size`
 
-### SbDrmSampleInfo ###
+### SbDrmSampleInfo
 
 All the optional information needed per sample for encrypted samples.
 
-#### Members ####
+#### Members
 
 *   `SbDrmEncryptionScheme encryption_scheme`
 
@@ -217,13 +217,13 @@
     The clear/encrypted mapping of each subsample in this sample. This must be
     an array of `subsample_count` mappings.
 
-### SbDrmSubSampleMapping ###
+### SbDrmSubSampleMapping
 
 A mapping of clear and encrypted bytes for a single subsample. All subsamples
 within a sample must be encrypted with the same encryption parameters. The clear
 bytes always appear first in the sample.
 
-#### Members ####
+#### Members
 
 *   `int32_t clear_byte_count`
 
@@ -232,21 +232,21 @@
 
     How many bytes of the corresponding subsample are encrypted.
 
-## Functions ##
+## Functions
 
-### SbDrmCloseSession ###
+### SbDrmCloseSession
 
 Clear any internal states/resources related to the specified `session_id`.
 
 `drm_system` must not be `kSbDrmSystemInvalid`. `session_id` must not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbDrmCloseSession(SbDrmSystem drm_system, const void *session_id, int session_id_size)
 ```
 
-### SbDrmDestroySystem ###
+### SbDrmDestroySystem
 
 Destroys `drm_system`, which implicitly removes all keys installed in it and
 invalidates all outstanding session update requests. A DRM system cannot be
@@ -258,13 +258,13 @@
 
 `drm_system`: The DRM system to be destroyed. Must not be `kSbDrmSystemInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbDrmDestroySystem(SbDrmSystem drm_system)
 ```
 
-### SbDrmGenerateSessionUpdateRequest ###
+### SbDrmGenerateSessionUpdateRequest
 
 Asynchronously generates a session update request payload for
 `initialization_data`, of `initialization_data_size`, in case sensitive `type`,
@@ -296,13 +296,13 @@
 payload is created. Must not be NULL. `initialization_data_size`: The size of
 the session update request payload.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbDrmGenerateSessionUpdateRequest(SbDrmSystem drm_system, int ticket, const char *type, const void *initialization_data, int initialization_data_size)
 ```
 
-### SbDrmGetMetrics ###
+### SbDrmGetMetrics
 
 Get the metrics of the underlying drm system.
 
@@ -326,13 +326,13 @@
 
 `drm_system` must not be `kSbDrmSystemInvalid`. `size` must not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 const void* SbDrmGetMetrics(SbDrmSystem drm_system, int *size)
 ```
 
-### SbDrmIsServerCertificateUpdatable ###
+### SbDrmIsServerCertificateUpdatable
 
 Returns true if server certificate of `drm_system` can be updated via
 SbDrmUpdateServerCertificate(). The return value should remain the same during
@@ -341,33 +341,33 @@
 `drm_system`: The DRM system to check if its server certificate is updatable.
 Must not be `kSbDrmSystemInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbDrmIsServerCertificateUpdatable(SbDrmSystem drm_system)
 ```
 
-### SbDrmSystemIsValid ###
+### SbDrmSystemIsValid
 
 Indicates whether `drm_system` is a valid SbDrmSystem.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbDrmSystemIsValid(SbDrmSystem drm)
 ```
 
-### SbDrmTicketIsValid ###
+### SbDrmTicketIsValid
 
 Indicates whether `ticket` is a valid ticket.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbDrmTicketIsValid(int ticket)
 ```
 
-### SbDrmUpdateServerCertificate ###
+### SbDrmUpdateServerCertificate
 
 Update the server certificate of `drm_system`. The function can be called
 multiple times. It is possible that a call to it happens before the callback of
@@ -384,13 +384,13 @@
 certificate data. Must not be NULL. `certificate_size`: Size of the server
 certificate data.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbDrmUpdateServerCertificate(SbDrmSystem drm_system, int ticket, const void *certificate, int certificate_size)
 ```
 
-### SbDrmUpdateSession ###
+### SbDrmUpdateSession
 
 Update session with `key`, in `drm_system`'s key system, from the license server
 response. Calls `session_updated_callback` with `context` and whether the update
@@ -410,7 +410,7 @@
 thread before this function returns or from another thread. The `session_id`
 must not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbDrmUpdateSession(SbDrmSystem drm_system, int ticket, const void *key, int key_size, const void *session_id, int session_id_size)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/egl.md b/cobalt/site/docs/reference/starboard/modules/15/egl.md
index c8c2120..4afff1a 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/egl.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/egl.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: egl.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `egl.h`
 
 The EGL API provides an interface with accompanying type declarations and
 defines that together provide a single consistent method of EGL usage across
@@ -11,67 +11,67 @@
 versions on different systems, and to remove the requirement for any other code
 to directly pull in and use these system libraries.
 
-## EGL Version ##
+## EGL Version
 
 This API has the ability to support EGL 1.5, however it is not required to
 support anything beyond EGL 1.4. The user is responsible for ensuring that the
 functions from EGL 1.5 they are calling from the interface are valid.
 
-## Macros ##
+## Macros
 
-### SB_EGL_ALPHA_FORMAT ###
+### SB_EGL_ALPHA_FORMAT
 
 EGL_VERSION_1_2
 
-### SB_EGL_ALPHA_SIZE ###
+### SB_EGL_ALPHA_SIZE
 
 EGL_VERSION_1_0
 
-### SB_EGL_BACK_BUFFER ###
+### SB_EGL_BACK_BUFFER
 
 EGL_VERSION_1_1
 
-### SB_EGL_CONFORMANT ###
+### SB_EGL_CONFORMANT
 
 EGL_VERSION_1_3
 
-### SB_EGL_CONTEXT_MAJOR_VERSION ###
+### SB_EGL_CONTEXT_MAJOR_VERSION
 
 EGL_VERSION_1_5
 
-### SB_EGL_DEFAULT_DISPLAY ###
+### SB_EGL_DEFAULT_DISPLAY
 
 EGL_VERSION_1_4
 
-## Typedefs ##
+## Typedefs
 
-### SbEglCastsToProperFunctionPointerType ###
+### SbEglCastsToProperFunctionPointerType
 
 The following type definitions were adapted from the types declared in [https://www.khronos.org/registry/EGL/api/EGL/egl.h](https://www.khronos.org/registry/EGL/api/EGL/egl.h)
 .
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbEglCastsToProperFunctionPointerType) (void)
 ```
 
-### SbEglInt32 ###
+### SbEglInt32
 
 The following type definitions were adapted from the types declared in [https://www.khronos.org/registry/EGL/api/EGL/eglplatform.h](https://www.khronos.org/registry/EGL/api/EGL/eglplatform.h)
 .
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int32_t SbEglInt32
 ```
 
-## Structs ##
+## Structs
 
-### SbEglInterface ###
+### SbEglInterface
 
-#### Members ####
+#### Members
 
 *   `SbEglBoolean(*eglChooseConfig)(SbEglDisplay dpy, const SbEglInt32
     *attrib_list, SbEglConfig *configs, SbEglInt32 config_size, SbEglInt32
diff --git a/cobalt/site/docs/reference/starboard/modules/15/event.md b/cobalt/site/docs/reference/starboard/modules/15/event.md
index 58cb1f4..d8bab06 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/event.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/event.md
@@ -1,11 +1,11 @@
----
-layout: doc
-title: "Starboard Module Reference: event.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `event.h`
 
 Defines the event system that wraps the Starboard main loop and entry point.
 
-## The Starboard Application Lifecycle ##
+## The Starboard Application Lifecycle
 
 ```
                * ----------
@@ -78,15 +78,15 @@
 Note that the application is always expected to transition through `BLURRED`,
 `CONCEALED` to `FROZEN` before receiving `Stop` or being killed.
 
-## Enums ##
+## Enums
 
-### SbEventType ###
+### SbEventType
 
 An enumeration of all possible event types dispatched directly by the system.
 Each event is accompanied by a void* data argument, and each event must define
 the type of the value pointed to by that data argument, if any.
 
-#### Values ####
+#### Values
 
 *   `kSbEventTypePreload`
 
@@ -273,55 +273,55 @@
     change in the timezone setting). This should trigger the application to re-
     query the relevant APIs to update the date and time.
 
-## Typedefs ##
+## Typedefs
 
-### SbEventCallback ###
+### SbEventCallback
 
 A function that can be called back from the main Starboard event pump.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbEventCallback) (void *context)
 ```
 
-### SbEventDataDestructor ###
+### SbEventDataDestructor
 
 A function that will cleanly destroy an event data instance of a specific type.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbEventDataDestructor) (void *data)
 ```
 
-### SbEventId ###
+### SbEventId
 
 An ID that can be used to refer to a scheduled event.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef uint32_t SbEventId
 ```
 
-## Structs ##
+## Structs
 
-### SbEvent ###
+### SbEvent
 
 Structure representing a Starboard event and its data.
 
-#### Members ####
+#### Members
 
 *   `SbEventType type`
 *   `SbTimeMonotonic timestamp`
 *   `void * data`
 
-### SbEventStartData ###
+### SbEventStartData
 
 Event data for kSbEventTypeStart events.
 
-#### Members ####
+#### Members
 
 *   `char ** argument_values`
 
@@ -333,31 +333,31 @@
 
     The startup link, if any.
 
-### SbEventWindowSizeChangedData ###
+### SbEventWindowSizeChangedData
 
 Event data for kSbEventTypeWindowSizeChanged events.
 
-#### Members ####
+#### Members
 
 *   `SbWindow window`
 *   `SbWindowSize size`
 
-## Functions ##
+## Functions
 
-### SbEventCancel ###
+### SbEventCancel
 
 Cancels the specified `event_id`. Note that this function is a no-op if the
 event already fired. This function can be safely called from any thread, but the
 only way to guarantee that the event does not run anyway is to call it from the
 main Starboard event loop thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbEventCancel(SbEventId event_id)
 ```
 
-### SbEventHandle ###
+### SbEventHandle
 
 The entry point that Starboard applications MUST implement. Any memory pointed
 at by `event` or the `data` field inside `event` is owned by the system, and
@@ -370,23 +370,23 @@
 application should generally do as little work as possible on this thread, and
 just dispatch it over to another thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SB_EXPORT_PLATFORM void SbEventHandle(const SbEvent *event)
 ```
 
-### SbEventIsIdValid ###
+### SbEventIsIdValid
 
 Returns whether the given event handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbEventIsIdValid(SbEventId handle)
 ```
 
-### SbEventSchedule ###
+### SbEventSchedule
 
 Schedules an event `callback` into the main Starboard event loop. This function
 may be called from any thread, but `callback` is always called from the main
@@ -397,18 +397,18 @@
 of microseconds to wait before calling the `callback` function. Set `delay` to
 `0` to call the callback as soon as possible.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbEventId SbEventSchedule(SbEventCallback callback, void *context, SbTime delay)
 ```
 
-### SbRunStarboardMain ###
+### SbRunStarboardMain
 
 Serves as the entry point in the Starboard library for running the Starboard
 event loop with the application event handler.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbRunStarboardMain(int argc, char **argv, SbEventHandleCallback callback)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/export.md b/cobalt/site/docs/reference/starboard/modules/15/export.md
index ff79777..a398d4a 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/export.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/export.md
@@ -1,24 +1,24 @@
----
-layout: doc
-title: "Starboard Module Reference: export.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `export.h`
 
 Provides macros for properly exporting or importing symbols from shared
 libraries.
 
-## Macros ##
+## Macros
 
-### SB_EXPORT ###
+### SB_EXPORT
 
 Specification for a symbol that should be exported when building the DLL and
 imported when building code that uses the DLL.
 
-### SB_EXPORT_PRIVATE ###
+### SB_EXPORT_PRIVATE
 
 Specification for a symbol that should be exported or imported for testing
 purposes only.
 
-### SB_IMPORT ###
+### SB_IMPORT
 
 Specification for a symbol that is expected to be defined externally to this
 module.
diff --git a/cobalt/site/docs/reference/starboard/modules/15/file.md b/cobalt/site/docs/reference/starboard/modules/15/file.md
index 56eb415..103af47 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/file.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/file.md
@@ -1,25 +1,25 @@
----
-layout: doc
-title: "Starboard Module Reference: file.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `file.h`
 
 Defines file system input/output functions.
 
-## Macros ##
+## Macros
 
-### kSbFileInvalid ###
+### kSbFileInvalid
 
 Well-defined value for an invalid file handle.
 
-## Enums ##
+## Enums
 
-### SbFileError ###
+### SbFileError
 
 kSbFileErrorAccessDenied is returned when a call fails because of a filesystem
 restriction. kSbFileErrorSecurity is returned when a security policy doesn't
 allow the operation to be executed.
 
-#### Values ####
+#### Values
 
 *   `kSbFileOk`
 *   `kSbFileErrorFailed`
@@ -40,7 +40,7 @@
 *   `kSbFileErrorIO`
 *   `kSbFileErrorMax`
 
-### SbFileFlags ###
+### SbFileFlags
 
 Flags that define how a file is used in the application. These flags should be
 or'd together when passed to SbFileOpen to open or create a file.
@@ -66,7 +66,7 @@
 
 The `kSbFileAsync` flag is optional.
 
-#### Values ####
+#### Values
 
 *   `kSbFileOpenOnly`
 *   `kSbFileCreateOnly`
@@ -85,35 +85,35 @@
 *   `kSbFileWrite`
 *   `kSbFileAsync`
 
-### SbFileWhence ###
+### SbFileWhence
 
 This explicit mapping matches both FILE_ on Windows and SEEK_ on Linux.
 
-#### Values ####
+#### Values
 
 *   `kSbFileFromBegin`
 *   `kSbFileFromCurrent`
 *   `kSbFileFromEnd`
 
-## Typedefs ##
+## Typedefs
 
-### SbFile ###
+### SbFile
 
 A handle to an open file.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbFilePrivate* SbFile
 ```
 
-## Structs ##
+## Structs
 
-### SbFileInfo ###
+### SbFileInfo
 
 Used to hold information about a file.
 
-#### Members ####
+#### Members
 
 *   `int64_t size`
 
@@ -134,9 +134,9 @@
 
     The creation time of a file.
 
-## Functions ##
+## Functions
 
-### SbFileAtomicReplace ###
+### SbFileAtomicReplace
 
 Replaces the content of the file at `path` with `data`. Returns whether the
 contents of the file were replaced. The replacement of the content is an atomic
@@ -146,39 +146,39 @@
 to replace the file contents with. `data_size`: The amount of `data`, in bytes,
 to be written to the file.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileAtomicReplace(const char *path, const char *data, int64_t data_size)
 ```
 
-### SbFileCanOpen ###
+### SbFileCanOpen
 
 Indicates whether SbFileOpen() with the given `flags` is allowed for `path`.
 
 `path`: The absolute path to be checked. `flags`: The flags that are being
 evaluated for the given `path`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileCanOpen(const char *path, int flags)
 ```
 
-### SbFileClose ###
+### SbFileClose
 
 Closes `file`. The return value indicates whether the file was closed
 successfully.
 
 `file`: The absolute path of the file to be closed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileClose(SbFile file)
 ```
 
-### SbFileDelete ###
+### SbFileDelete
 
 Deletes the regular file, symlink, or empty directory at `path`. This function
 is used primarily to clean up after unit tests. On some platforms, this function
@@ -186,38 +186,38 @@
 
 `path`: The absolute path of the file, symlink, or directory to be deleted.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileDelete(const char *path)
 ```
 
-### SbFileExists ###
+### SbFileExists
 
 Indicates whether a file or directory exists at `path`.
 
 `path`: The absolute path of the file or directory being checked.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileExists(const char *path)
 ```
 
-### SbFileFlush ###
+### SbFileFlush
 
 Flushes the write buffer to `file`. Data written via SbFileWrite is not
 necessarily committed until the SbFile is flushed or closed.
 
 `file`: The SbFile to which the write buffer is flushed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileFlush(SbFile file)
 ```
 
-### SbFileGetInfo ###
+### SbFileGetInfo
 
 Retrieves information about `file`. The return value indicates whether the file
 information was retrieved successfully.
@@ -226,13 +226,13 @@
 into which the retrieved data is placed. This variable is not touched if the
 operation is not successful.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileGetInfo(SbFile file, SbFileInfo *out_info)
 ```
 
-### SbFileGetPathInfo ###
+### SbFileGetPathInfo
 
 Retrieves information about the file at `path`. The return value indicates
 whether the file information was retrieved successfully.
@@ -241,36 +241,36 @@
 `out_info`: The variable into which the retrieved data is placed. This variable
 is not touched if the operation is not successful.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileGetPathInfo(const char *path, SbFileInfo *out_info)
 ```
 
-### SbFileIsValid ###
+### SbFileIsValid
 
 Returns whether the given file handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbFileIsValid(SbFile file)
 ```
 
-### SbFileModeStringToFlags ###
+### SbFileModeStringToFlags
 
 Converts an ISO `fopen()` mode string into flags that can be equivalently passed
 into SbFileOpen().
 
 `mode`: The mode string to be converted into flags.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbFileModeStringToFlags(const char *mode)
 ```
 
-### SbFileOpen ###
+### SbFileOpen
 
 Opens the file at `path`, which must be absolute, creating it if specified by
 `flags`. The read/write position is at the beginning of the file.
@@ -287,13 +287,13 @@
 sets this value to `false`. `out_error`: If `path` cannot be created, this is
 set to `kSbFileInvalid`. Otherwise, it is `NULL`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbFile SbFileOpen(const char *path, int flags, bool *out_created, SbFileError *out_error)
 ```
 
-### SbFileRead ###
+### SbFileRead
 
 Reads `size` bytes (or until EOF is reached) from `file` into `data`, starting
 at the file's current position.
@@ -306,13 +306,13 @@
 `file`: The SbFile from which to read data. `data`: The variable to which data
 is read. `size`: The amount of data (in bytes) to read.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbFileRead(SbFile file, char *data, int size)
 ```
 
-### SbFileReadAll ###
+### SbFileReadAll
 
 Reads `size` bytes (or until EOF is reached) from `file` into `data`, starting
 at the file's current position.
@@ -326,13 +326,13 @@
 `file`: The SbFile from which to read data. `data`: The variable to which data
 is read. `size`: The amount of data (in bytes) to read.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int SbFileReadAll(SbFile file, char *data, int size)
 ```
 
-### SbFileSeek ###
+### SbFileSeek
 
 Changes the current read/write position in `file`. The return value identifies
 the resultant current read/write position in the file (relative to the start) or
@@ -344,13 +344,13 @@
 value. `offset`: The amount that the read/write position is changed, relative to
 `whence`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbFileSeek(SbFile file, SbFileWhence whence, int64_t offset)
 ```
 
-### SbFileTruncate ###
+### SbFileTruncate
 
 Truncates the given `file` to the given `length`. The return value indicates
 whether the file was truncated successfully.
@@ -360,13 +360,13 @@
 then the file is extended with zeros. If `length` is negative, then the function
 is a no-op and returns `false`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileTruncate(SbFile file, int64_t length)
 ```
 
-### SbFileWrite ###
+### SbFileWrite
 
 Writes the given buffer into `file` at the file's current position, overwriting
 any data that was previously there.
@@ -380,13 +380,13 @@
 `file`: The SbFile to which data will be written. `data`: The data to be
 written. `size`: The amount of data (in bytes) to write.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbFileWrite(SbFile file, const char *data, int size)
 ```
 
-### SbFileWriteAll ###
+### SbFileWriteAll
 
 Writes the given buffer into `file`, starting at the beginning of the file, and
 overwriting any data that was previously there. Unlike SbFileWrite, this
@@ -397,7 +397,7 @@
 `file`: The file to which data will be written. `data`: The data to be written.
 `size`: The amount of data (in bytes) to write.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int SbFileWriteAll(SbFile file, const char *data, int size)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/gles.md b/cobalt/site/docs/reference/starboard/modules/15/gles.md
index 163d8d7..77bc07e 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/gles.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/gles.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: gles.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `gles.h`
 
 The GLES API provides an interface with accompanying type declarations and
 defines that together provide a single consistent method of GLES usage across
@@ -11,37 +11,37 @@
 and versions on different systems, and to remove the requirement for any other
 code to directly pull in and use these system libraries.
 
-## GLES Version ##
+## GLES Version
 
 This API has the ability to support GLES 3.0, however platforms are not required
 to support anything beyond GLES 2.0. The caller is responsible for ensuring that
 the functions from GLES 3.0 they are calling from the interface are valid.
 
-## Macros ##
+## Macros
 
-### SB_GL_DEPTH_BUFFER_BIT ###
+### SB_GL_DEPTH_BUFFER_BIT
 
 Previously defined in [https://www.khronos.org/registry/OpenGL/api/GLES2/gl2.h](https://www.khronos.org/registry/OpenGL/api/GLES2/gl2.h)
 
-### SB_GL_READ_BUFFER ###
+### SB_GL_READ_BUFFER
 
 Previously defined in [https://www.khronos.org/registry/OpenGL/api/GLES3/gl3.h](https://www.khronos.org/registry/OpenGL/api/GLES3/gl3.h)
 .
 
-## Typedefs ##
+## Typedefs
 
-### SbGlBoolean ###
+### SbGlBoolean
 
 The following type definitions were adapted from the types declared in [https://www.khronos.org/registry/OpenGL/api/GLES2/gl2.h](https://www.khronos.org/registry/OpenGL/api/GLES2/gl2.h)
 .
 
-#### Definition ####
+#### Definition
 
 ```
 typedef uint8_t SbGlBoolean
 ```
 
-### SbGlIntPtr ###
+### SbGlIntPtr
 
 Some compilers will transform the intptr_t to an int transparently behind the
 scenes, which is not equivalent to a long int, or long long int, as far as the
@@ -49,17 +49,17 @@
 those exact types used by OpenGL ES 2.0 ( [https://www.khronos.org/registry/OpenGL/api/GLES2/gl2ext.h](https://www.khronos.org/registry/OpenGL/api/GLES2/gl2ext.h)
 ).
 
-#### Definition ####
+#### Definition
 
 ```
 typedef long int SbGlIntPtr
 ```
 
-## Structs ##
+## Structs
 
-### SbGlesInterface ###
+### SbGlesInterface
 
-#### Members ####
+#### Members
 
 *   `void(*glActiveTexture)(SbGlEnum texture)`
 
diff --git a/cobalt/site/docs/reference/starboard/modules/15/image.md b/cobalt/site/docs/reference/starboard/modules/15/image.md
index 1427d39..945938a 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/image.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/image.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: image.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `image.h`
 
 API for hardware accelerated image decoding. This module allows for the client
 to feed in raw, encoded data to be decoded directly into an SbDecodeTarget. It
@@ -11,7 +11,7 @@
 All functions in this module are safe to call from any thread at any point in
 time.
 
-## SbImageIsDecodeSupported and SbImageDecode Example ##
+## SbImageIsDecodeSupported and SbImageDecode Example
 
 ```
 SbDecodeTargetProvider* provider = GetProviderFromSomewhere();
@@ -28,9 +28,9 @@
                                              mime_type, format);
 ```
 
-## Functions ##
+## Functions
 
-### SbImageDecode ###
+### SbImageDecode
 
 Attempt to decode encoded `mime_type` image data `data` of size `data_size` into
 an SbDecodeTarget of SbDecodeFormatType `format`, possibly using
@@ -56,13 +56,13 @@
     kSbDecodeTargetInvalid will be returned, with any intermediate allocations
     being cleaned up in the implementation.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbDecodeTarget SbImageDecode(SbDecodeTargetGraphicsContextProvider *context_provider, void *data, int data_size, const char *mime_type, SbDecodeTargetFormat format)
 ```
 
-### SbImageIsDecodeSupported ###
+### SbImageIsDecodeSupported
 
 Whether the current platform supports hardware accelerated decoding an image of
 mime type `mime_type` into SbDecodeTargetFormat `format`. The `mime_type` must
@@ -70,7 +70,7 @@
 program, which means that the results of this function may be cached
 indefinitely.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbImageIsDecodeSupported(const char *mime_type, SbDecodeTargetFormat format)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/input.md b/cobalt/site/docs/reference/starboard/modules/15/input.md
index ec86793..a858c73 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/input.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/input.md
@@ -1,18 +1,18 @@
----
-layout: doc
-title: "Starboard Module Reference: input.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `input.h`
 
 Defines input events and associated data types.
 
-## Enums ##
+## Enums
 
-### SbInputDeviceType ###
+### SbInputDeviceType
 
 Identifies possible input subsystem types. The types of events that each device
 type produces correspond to `SbInputEventType` values.
 
-#### Values ####
+#### Values
 
 *   `kSbInputDeviceTypeGesture`
 
@@ -57,11 +57,11 @@
 
     Produces `Input` events.
 
-### SbInputEventType ###
+### SbInputEventType
 
 The action that an input event represents.
 
-#### Values ####
+#### Values
 
 *   `kSbInputEventTypeMove`
 
@@ -86,13 +86,13 @@
 
     [https://w3c.github.io/uievents/#event-type-input](https://w3c.github.io/uievents/#event-type-input)
 
-## Structs ##
+## Structs
 
-### SbInputData ###
+### SbInputData
 
 Event data for `kSbEventTypeInput` events.
 
-#### Members ####
+#### Members
 
 *   `SbWindow window`
 
@@ -160,11 +160,11 @@
 
     Set to true if the input event is part of a composition event.
 
-### SbInputVector ###
+### SbInputVector
 
 A 2-dimensional vector used to represent points and motion vectors.
 
-#### Members ####
+#### Members
 
 *   `float x`
 *   `float y`
diff --git a/cobalt/site/docs/reference/starboard/modules/15/key.md b/cobalt/site/docs/reference/starboard/modules/15/key.md
index 2835b20..ed87e53 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/key.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/key.md
@@ -1,19 +1,19 @@
----
-layout: doc
-title: "Starboard Module Reference: key.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `key.h`
 
 Defines the canonical set of Starboard key codes.
 
-## Enums ##
+## Enums
 
-### SbKey ###
+### SbKey
 
 A standard set of key codes, ordered by value, that represent each possible
 input key across all kinds of devices. Starboard uses the semi-standard Windows
 virtual key codes documented at: [https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.aspx](https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.aspx)
 
-#### Values ####
+#### Values
 
 *   `kSbKeyUnknown`
 *   `kSbKeyCancel`
@@ -275,11 +275,11 @@
 *   `kSbKeyGamepadRightStickLeft`
 *   `kSbKeyGamepadRightStickRight`
 
-### SbKeyModifiers ###
+### SbKeyModifiers
 
 Bit-mask of key modifiers.
 
-#### Values ####
+#### Values
 
 *   `kSbKeyModifiersNone`
 *   `kSbKeyModifiersAlt`
diff --git a/cobalt/site/docs/reference/starboard/modules/15/log.md b/cobalt/site/docs/reference/starboard/modules/15/log.md
index 42de513..6cf3a49 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/log.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/log.md
@@ -1,18 +1,18 @@
----
-layout: doc
-title: "Starboard Module Reference: log.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `log.h`
 
 Defines core debug logging functions.
 
-## Enums ##
+## Enums
 
-### SbLogPriority ###
+### SbLogPriority
 
 The priority at which a message should be logged. The platform may be configured
 to filter logs by priority, or render them differently.
 
-#### Values ####
+#### Values
 
 *   `kSbLogPriorityUnknown`
 *   `kSbLogPriorityInfo`
@@ -20,9 +20,9 @@
 *   `kSbLogPriorityError`
 *   `kSbLogPriorityFatal`
 
-## Functions ##
+## Functions
 
-### SbLog ###
+### SbLog
 
 Writes `message` to the platform's debug output log. This method is thread-safe,
 and responsible for ensuring that the output from multiple threads is not mixed.
@@ -35,55 +35,55 @@
 termination. That said, platforms can adjust the message to be more suitable for
 their output method by wrapping the text, stripping unprintable characters, etc.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbLog(SbLogPriority priority, const char *message)
 ```
 
-### SbLogFlush ###
+### SbLogFlush
 
 Flushes the log buffer on some platforms. This method is safe to call from
 multiple threads.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbLogFlush()
 ```
 
-### SbLogFormat ###
+### SbLogFormat
 
 A log output method that additionally performs a string format on the data being
 logged.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbLogFormat(const char *format, va_list args) SB_PRINTF_FORMAT(1
 ```
 
-### SbLogFormatF ###
+### SbLogFormatF
 
 Inline wrapper of SbLogFormat that converts from ellipsis to va_args.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void static void static void SbLogFormatF(const char *format,...) SB_PRINTF_FORMAT(1
 ```
 
-### SbLogIsTty ###
+### SbLogIsTty
 
 Indicates whether the log output goes to a TTY or is being redirected.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbLogIsTty()
 ```
 
-### SbLogRaw ###
+### SbLogRaw
 
 A bare-bones log output method that is async-signal-safe, i.e. safe to call from
 an asynchronous signal handler (e.g. a `SIGSEGV` handler). It should not do any
@@ -91,13 +91,13 @@
 
 `message`: The message to be logged. Must not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbLogRaw(const char *message)
 ```
 
-### SbLogRawDumpStack ###
+### SbLogRawDumpStack
 
 Dumps the stack of the current thread to the log in an async-signal-safe manner,
 i.e. safe to call from an asynchronous signal handler (e.g. a `SIGSEGV`
@@ -108,28 +108,28 @@
 helper functions that might end up on top of every stack dump so that the stack
 dump is just the relevant function stack where the problem occurred.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbLogRawDumpStack(int frames_to_skip)
 ```
 
-### SbLogRawFormat ###
+### SbLogRawFormat
 
 A formatted log output method that is async-signal-safe, i.e. safe to call from
 an asynchronous signal handler (e.g. a `SIGSEGV` handler).
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbLogRawFormat(const char *format, va_list args) SB_PRINTF_FORMAT(1
 ```
 
-### SbLogRawFormatF ###
+### SbLogRawFormatF
 
 Inline wrapper of SbLogFormat to convert from ellipsis to va_args.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void static void static void SbLogRawFormatF(const char *format,...) SB_PRINTF_FORMAT(1
diff --git a/cobalt/site/docs/reference/starboard/modules/15/media.md b/cobalt/site/docs/reference/starboard/modules/15/media.md
index 132166c..42871c2 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/media.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/media.md
@@ -1,28 +1,28 @@
----
-layout: doc
-title: "Starboard Module Reference: media.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `media.h`
 
 Provides media definitions that are common between the Decoder and Player
 interfaces.
 
-## Macros ##
+## Macros
 
-### kSbMediaBitsPerPixelInvalid ###
+### kSbMediaBitsPerPixelInvalid
 
 Value used when a video's bits per pixel is not known.
 
-### kSbMediaVideoResolutionDimensionInvalid ###
+### kSbMediaVideoResolutionDimensionInvalid
 
 Value used when a video's resolution is not known.
 
-## Enums ##
+## Enums
 
-### SbMediaAudioCodec ###
+### SbMediaAudioCodec
 
 Types of audio elementary streams that can be supported.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaAudioCodecNone`
 *   `kSbMediaAudioCodecAac`
@@ -35,11 +35,11 @@
 *   `kSbMediaAudioCodecPcm`
 *   `kSbMediaAudioCodecIamf`
 
-### SbMediaAudioCodingType ###
+### SbMediaAudioCodingType
 
 Possible audio coding types.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaAudioCodingTypeNone`
 *   `kSbMediaAudioCodingTypeAac`
@@ -53,11 +53,11 @@
 *   `kSbMediaAudioCodingTypeMpeg3`
 *   `kSbMediaAudioCodingTypePcm`
 
-### SbMediaAudioConnector ###
+### SbMediaAudioConnector
 
 Possible audio connector types.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaAudioConnectorUnknown`
 *   `kSbMediaAudioConnectorAnalog`
@@ -76,11 +76,11 @@
 *   `kSbMediaAudioConnectorSpdif`
 *   `kSbMediaAudioConnectorUsb`
 
-### SbMediaAudioFrameStorageType ###
+### SbMediaAudioFrameStorageType
 
 Possible audio frame storage types.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaAudioFrameStorageTypeInterleaved`
 
@@ -96,22 +96,22 @@
     with timestamps 0, 1, 2, etc., the samples are stored in two buffers "L0 L1
     L2 ..." and "R0 R1 R2 ...".
 
-### SbMediaAudioSampleType ###
+### SbMediaAudioSampleType
 
 Possible audio sample types.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaAudioSampleTypeInt16Deprecated`
 *   `kSbMediaAudioSampleTypeFloat32`
 
-### SbMediaRangeId ###
+### SbMediaRangeId
 
 This corresponds to the WebM Range enum which is part of WebM color data (see [http://www.webmproject.org/docs/container/#Range](http://www.webmproject.org/docs/container/#Range)
 ). H.264 only uses a bool, which corresponds to the LIMITED/FULL values. Chrome-
 specific values start at 1000.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaRangeIdUnspecified`
 
@@ -127,13 +127,13 @@
     Range is defined by TransferId/MatrixId.
 *   `kSbMediaRangeIdLast`
 
-### SbMediaSupportType ###
+### SbMediaSupportType
 
 Indicates how confident the device is that it can play media resources of the
 given type. The values are a direct map of the canPlayType() method specified at
 the following link: [https://www.w3.org/TR/2011/WD-html5-20110113/video.html#dom-navigator-canplaytype](https://www.w3.org/TR/2011/WD-html5-20110113/video.html#dom-navigator-canplaytype)
 
-#### Values ####
+#### Values
 
 *   `kSbMediaSupportTypeNotSupported`
 
@@ -145,11 +145,11 @@
 
     The media type seems to be playable.
 
-### SbMediaType ###
+### SbMediaType
 
 Types of media component streams.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaTypeAudio`
 
@@ -158,11 +158,11 @@
 
     Value used for video streams.
 
-### SbMediaVideoCodec ###
+### SbMediaVideoCodec
 
 Types of video elementary streams that could be supported.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaVideoCodecNone`
 *   `kSbMediaVideoCodecH264`
@@ -174,14 +174,14 @@
 *   `kSbMediaVideoCodecVp8`
 *   `kSbMediaVideoCodecVp9`
 
-## Structs ##
+## Structs
 
-### SbMediaAudioConfiguration ###
+### SbMediaAudioConfiguration
 
 A structure describing the audio configuration parameters of a single audio
 output.
 
-#### Members ####
+#### Members
 
 *   `SbMediaAudioConnector connector`
 
@@ -200,11 +200,11 @@
     `0` if this device cannot provide this information, in which case the caller
     can probably assume stereo output.
 
-### SbMediaAudioSampleInfo ###
+### SbMediaAudioSampleInfo
 
 The set of information required by the decoder or player for each audio sample.
 
-#### Members ####
+#### Members
 
 *   `SbMediaAudioStreamInfo stream_info`
 
@@ -212,11 +212,11 @@
 *   `SbTime discarded_duration_from_front`
 *   `SbTime discarded_duration_from_back`
 
-### SbMediaAudioStreamInfo ###
+### SbMediaAudioStreamInfo
 
 The set of information required by the decoder or player for each audio stream.
 
-#### Members ####
+#### Members
 
 *   `SbMediaAudioCodec codec`
 
@@ -242,14 +242,14 @@
 
     The AudioSpecificConfig, as specified in ISO/IEC-14496-3, section 1.6.2.1: [http://read.pudn.com/downloads98/doc/comm/401153/14496/ISO_IEC_14496-3%20Part%203%20Audio/C036083E_SUB1.PDF](http://read.pudn.com/downloads98/doc/comm/401153/14496/ISO_IEC_14496-3%20Part%203%20Audio/C036083E_SUB1.PDF)
 
-### SbMediaColorMetadata ###
+### SbMediaColorMetadata
 
 HDR (High Dynamic Range) Metadata common for HDR10 and WebM/VP9-based HDR
 formats, together with the ColorSpace. HDR reproduces a greater dynamic range of
 luminosity than is possible with standard digital imaging. See the Consumer
 Electronics Association press release: [https://www.cta.tech/News/Press-Releases/2015/August/CEA-Defines-%E2%80%98HDR-Compatible%E2%80%99-Displays.aspx](https://www.cta.tech/News/Press-Releases/2015/August/CEA-Defines-%E2%80%98HDR-Compatible%E2%80%99-Displays.aspx)
 
-#### Members ####
+#### Members
 
 *   `unsigned int bits_per_channel`
 
@@ -330,7 +330,7 @@
     a row-major ordered 3 x 4 submatrix of the 4 x 4 transform matrix. The 4th
     row is completed as (0, 0, 0, 1).
 
-### SbMediaMasteringMetadata ###
+### SbMediaMasteringMetadata
 
 SMPTE 2086 mastering data [http://ieeexplore.ieee.org/document/7291707/](http://ieeexplore.ieee.org/document/7291707/)
 This standard specifies the metadata items to specify the color volume (the
@@ -339,7 +339,7 @@
 independent of any specific digital representation. Also see the WebM container
 guidelines: [https://www.webmproject.org/docs/container/](https://www.webmproject.org/docs/container/)
 
-#### Members ####
+#### Members
 
 *   `float primary_r_chromaticity_x`
 
@@ -374,11 +374,11 @@
     Minimum luminance. Shall be represented in candelas per square meter
     (cd/m^2). In range [0, 9999.99].
 
-### SbMediaVideoSampleInfo ###
+### SbMediaVideoSampleInfo
 
 The set of information required by the decoder or player for each video sample.
 
-#### Members ####
+#### Members
 
 *   `SbMediaVideoStreamInfo stream_info`
 
@@ -388,11 +388,11 @@
     Indicates whether the associated sample is a key frame (I-frame). Avc video
     key frames must always start with SPS and PPS NAL units.
 
-### SbMediaVideoStreamInfo ###
+### SbMediaVideoStreamInfo
 
 The set of information required by the decoder or player for each video stream.
 
-#### Members ####
+#### Members
 
 *   `SbMediaVideoCodec codec`
 
@@ -434,9 +434,9 @@
     . This will only be specified on frames where the HDR metadata and color /
     color space might have changed (e.g. keyframes).
 
-## Functions ##
+## Functions
 
-### SbMediaCanPlayMimeAndKeySystem ###
+### SbMediaCanPlayMimeAndKeySystem
 
 Returns information about whether the playback of the specific media described
 by `mime` and encrypted using `key_system` can be played.
@@ -480,13 +480,13 @@
 implementation supports key system with attributes on one key system, it has to
 support key system with attributes on all key systems supported.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbMediaSupportType SbMediaCanPlayMimeAndKeySystem(const char *mime, const char *key_system)
 ```
 
-### SbMediaGetAudioBufferBudget ###
+### SbMediaGetAudioBufferBudget
 
 Specifies the maximum amount of memory used by audio buffers of media source
 before triggering a garbage collection. A large value will cause more memory
@@ -494,13 +494,13 @@
 download audio data. Note that the app may experience significant difficulty if
 this value is too low.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetAudioBufferBudget()
 ```
 
-### SbMediaGetAudioConfiguration ###
+### SbMediaGetAudioConfiguration
 
 Retrieves the current physical audio configuration of audio output
 `output_index` on this device and places it in `out_configuration`, which must
@@ -512,37 +512,37 @@
 `out_configuration`: The variable that holds the audio configuration
 information.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMediaGetAudioConfiguration(int output_index, SbMediaAudioConfiguration *out_configuration)
 ```
 
-### SbMediaGetAudioOutputCount ###
+### SbMediaGetAudioOutputCount
 
 Returns the number of audio outputs currently available on this device. Even if
 the number of outputs or their audio configurations can't be determined, it is
 expected that the platform will at least return a single output that supports at
 least stereo.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetAudioOutputCount()
 ```
 
-### SbMediaGetBufferAlignment ###
+### SbMediaGetBufferAlignment
 
 The media buffer will be allocated using the returned alignment. Set this to a
 larger value may increase the memory consumption of media buffers.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetBufferAlignment()
 ```
 
-### SbMediaGetBufferAllocationUnit ###
+### SbMediaGetBufferAllocationUnit
 
 When the media stack needs more memory to store media buffers, it will allocate
 extra memory in units returned by SbMediaGetBufferAllocationUnit. This can
@@ -550,13 +550,13 @@
 When SbMediaGetInitialBufferCapacity and this function both return 0, the media
 stack will allocate individual buffers directly using SbMemory functions.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetBufferAllocationUnit()
 ```
 
-### SbMediaGetBufferGarbageCollectionDurationThreshold ###
+### SbMediaGetBufferGarbageCollectionDurationThreshold
 
 Specifies the duration threshold of media source garbage collection. When the
 accumulated duration in a source buffer exceeds this value, the media source
@@ -567,54 +567,54 @@
 return 170 seconds for most of the platforms. But it can be further reduced on
 systems with extremely low memory.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbTime SbMediaGetBufferGarbageCollectionDurationThreshold()
 ```
 
-### SbMediaGetBufferPadding ###
+### SbMediaGetBufferPadding
 
 Extra bytes allocated at the end of a media buffer to ensure that the buffer can
 be use optimally by specific instructions like SIMD. Set to 0 to remove any
 padding.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetBufferPadding()
 ```
 
-### SbMediaGetBufferStorageType ###
+### SbMediaGetBufferStorageType
 
 Returns SbMediaBufferStorageType of type `SbMediaStorageTypeMemory` or
 `SbMediaStorageTypeFile`. For memory storage, the media buffers will be stored
 in main memory allocated by SbMemory functions. For file storage, the media
 buffers will be stored in a temporary file in the system cache folder acquired
 by calling SbSystemGetPath() with "kSbSystemPathCacheDirectory". Note that when
-its value is "file" the media stack will still allocate memory to cache the the
+its value is "file" the media stack will still allocate memory to cache the
 buffers in use.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbMediaBufferStorageType SbMediaGetBufferStorageType()
 ```
 
-### SbMediaGetInitialBufferCapacity ###
+### SbMediaGetInitialBufferCapacity
 
 The amount of memory that will be used to store media buffers allocated during
 system startup. To allocate a large chunk at startup helps with reducing
 fragmentation and can avoid failures to allocate incrementally. This can return
 0.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetInitialBufferCapacity()
 ```
 
-### SbMediaGetMaxBufferCapacity ###
+### SbMediaGetMaxBufferCapacity
 
 The maximum amount of memory that will be used to store media buffers. This must
 be larger than sum of the video budget and audio budget. This is a soft limit
@@ -629,13 +629,13 @@
 resolution. `bits_per_pixel`: the bits per pixel. This value is larger for HDR
 than non- HDR video.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetMaxBufferCapacity(SbMediaVideoCodec codec, int resolution_width, int resolution_height, int bits_per_pixel)
 ```
 
-### SbMediaGetProgressiveBufferBudget ###
+### SbMediaGetProgressiveBufferBudget
 
 The memory used when playing mp4 videos that is not in DASH format. The
 resolution of such videos shouldn't go beyond 1080p. Its value should be less
@@ -647,13 +647,13 @@
 resolution. `bits_per_pixel`: the bits per pixel. This value is larger for HDR
 than non- HDR video.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetProgressiveBufferBudget(SbMediaVideoCodec codec, int resolution_width, int resolution_height, int bits_per_pixel)
 ```
 
-### SbMediaGetVideoBufferBudget ###
+### SbMediaGetVideoBufferBudget
 
 Specifies the maximum amount of memory used by video buffers of media source
 before triggering a garbage collection. A large value will cause more memory
@@ -666,13 +666,13 @@
 resolution. `bits_per_pixel`: the bits per pixel. This value is larger for HDR
 than non- HDR video.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetVideoBufferBudget(SbMediaVideoCodec codec, int resolution_width, int resolution_height, int bits_per_pixel)
 ```
 
-### SbMediaIsBufferPoolAllocateOnDemand ###
+### SbMediaIsBufferPoolAllocateOnDemand
 
 When either SbMediaGetInitialBufferCapacity or SbMediaGetBufferAllocationUnit
 isn't zero, media buffers will be allocated using a memory pool. Set the
@@ -683,18 +683,18 @@
 release any media buffer memory back to the system even if there is no media
 buffers allocated.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMediaIsBufferPoolAllocateOnDemand()
 ```
 
-### SbMediaIsBufferUsingMemoryPool ###
+### SbMediaIsBufferUsingMemoryPool
 
 If SbMediaGetBufferUsingMemoryPool returns true, it indicates that media buffer
 pools should be allocated on demand, as opposed to using SbMemory* functions.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMediaIsBufferUsingMemoryPool()
diff --git a/cobalt/site/docs/reference/starboard/modules/15/memory.md b/cobalt/site/docs/reference/starboard/modules/15/memory.md
index 2fbf7dc..6dfa844 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/memory.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/memory.md
@@ -1,17 +1,17 @@
----
-layout: doc
-title: "Starboard Module Reference: memory.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `memory.h`
 
 Defines functions for memory allocation, alignment, copying, and comparing.
 
-## Porters ##
+## Porters
 
 All of the "Unchecked" and "Free" functions must be implemented, but they should
 not be called directly. The Starboard platform wraps them with extra accounting
 under certain circumstances.
 
-## Porters and Application Developers ##
+## Porters and Application Developers
 
 Nobody should call the "Checked", "Unchecked" or "Free" functions directly
 because that evades Starboard's memory tracking. In both port implementations
@@ -26,14 +26,14 @@
 
 *   The "free" functions are SbMemoryFree() and SbMemoryFreeAligned().
 
-## Enums ##
+## Enums
 
-### SbMemoryMapFlags ###
+### SbMemoryMapFlags
 
 The bitwise OR of these flags should be passed to SbMemoryMap to indicate how
 the mapped memory can be used.
 
-#### Values ####
+#### Values
 
 *   `kSbMemoryMapProtectReserved`
 
@@ -44,9 +44,9 @@
 *   `kSbMemoryMapProtectExec`
 *   `kSbMemoryMapProtectReadWrite`
 
-## Functions ##
+## Functions
 
-### SbMemoryAllocate ###
+### SbMemoryAllocate
 
 Allocates and returns a chunk of memory of at least `size` bytes. This function
 should be called from the client codebase. It is intended to be a drop-in
@@ -58,13 +58,13 @@
 return `NULL` or it may return a unique pointer value that can be passed to
 SbMemoryDeallocate.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocate(size_t size)
 ```
 
-### SbMemoryAllocateAligned ###
+### SbMemoryAllocateAligned
 
 Allocates and returns a chunk of memory of at least `size` bytes, aligned to
 `alignment`. This function should be called from the client codebase. It is
@@ -78,87 +78,87 @@
 `size` is `0`, the function may return `NULL` or it may return a unique aligned
 pointer value that can be passed to SbMemoryDeallocateAligned.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocateAligned(size_t alignment, size_t size)
 ```
 
-### SbMemoryAllocateAlignedChecked ###
+### SbMemoryAllocateAlignedChecked
 
 Same as SbMemoryAllocateAlignedUnchecked, but will abort() in the case of an
 allocation failure.
 
 DO NOT CALL. Call SbMemoryAllocateAligned(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocateAlignedChecked(size_t alignment, size_t size)
 ```
 
-### SbMemoryAllocateAlignedUnchecked ###
+### SbMemoryAllocateAlignedUnchecked
 
 This is the implementation of SbMemoryAllocateAligned that must be provided by
 Starboard ports.
 
 DO NOT CALL. Call SbMemoryAllocateAligned(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocateAlignedUnchecked(size_t alignment, size_t size)
 ```
 
-### SbMemoryAllocateChecked ###
+### SbMemoryAllocateChecked
 
 Same as SbMemoryAllocateUnchecked, but will abort() in the case of an allocation
 failure.
 
 DO NOT CALL. Call SbMemoryAllocate(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocateChecked(size_t size)
 ```
 
-### SbMemoryAllocateNoReport ###
+### SbMemoryAllocateNoReport
 
 Same as SbMemoryAllocate() but will not report memory to the tracker. Avoid
 using this unless absolutely necessary.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocateNoReport(size_t size)
 ```
 
-### SbMemoryAllocateUnchecked ###
+### SbMemoryAllocateUnchecked
 
 This is the implementation of SbMemoryAllocate that must be provided by
 Starboard ports.
 
 DO NOT CALL. Call SbMemoryAllocate(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocateUnchecked(size_t size)
 ```
 
-### SbMemoryCalloc ###
+### SbMemoryCalloc
 
 A wrapper that implements a drop-in replacement for `calloc`, which is used in
 some packages.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static void* SbMemoryCalloc(size_t count, size_t size)
 ```
 
-### SbMemoryDeallocate ###
+### SbMemoryDeallocate
 
 Frees a previously allocated chunk of memory. If `memory` is NULL, then the
 operation is a no-op. This function should be called from the client codebase.
@@ -166,74 +166,74 @@
 
 `memory`: The chunk of memory to be freed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryDeallocate(void *memory)
 ```
 
-### SbMemoryDeallocateAligned ###
+### SbMemoryDeallocateAligned
 
 `memory`: The chunk of memory to be freed. If `memory` is NULL, then the
 function is a no-op.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryDeallocateAligned(void *memory)
 ```
 
-### SbMemoryDeallocateNoReport ###
+### SbMemoryDeallocateNoReport
 
 Same as SbMemoryDeallocate() but will not report memory deallocation to the
 tracker. This function must be matched with SbMemoryAllocateNoReport().
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryDeallocateNoReport(void *memory)
 ```
 
-### SbMemoryFlush ###
+### SbMemoryFlush
 
 Flushes any data in the given virtual address range that is cached locally in
 the current processor core to physical memory, ensuring that data and
 instruction caches are cleared. This is required to be called on executable
 memory that has been written to and might be executed in the future.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryFlush(void *virtual_address, int64_t size_bytes)
 ```
 
-### SbMemoryFree ###
+### SbMemoryFree
 
 This is the implementation of SbMemoryDeallocate that must be provided by
 Starboard ports.
 
 DO NOT CALL. Call SbMemoryDeallocate(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryFree(void *memory)
 ```
 
-### SbMemoryFreeAligned ###
+### SbMemoryFreeAligned
 
 This is the implementation of SbMemoryFreeAligned that must be provided by
 Starboard ports.
 
 DO NOT CALL. Call SbMemoryDeallocateAligned(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryFreeAligned(void *memory)
 ```
 
-### SbMemoryMap ###
+### SbMemoryMap
 
 Allocates `size_bytes` worth of physical memory pages and maps them into an
 available virtual region. This function returns `SB_MEMORY_MAP_FAILED` on
@@ -248,24 +248,24 @@
 should not count it against any memory budget. `name`: A value that appears in
 the debugger on some platforms. The value can be up to 32 bytes.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryMap(int64_t size_bytes, int flags, const char *name)
 ```
 
-### SbMemoryProtect ###
+### SbMemoryProtect
 
 Change the protection of `size_bytes` of memory regions, starting from
 `virtual_address`, to `flags`, returning `true` on success.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMemoryProtect(void *virtual_address, int64_t size_bytes, int flags)
 ```
 
-### SbMemoryReallocate ###
+### SbMemoryReallocate
 
 Attempts to resize `memory` to be at least `size` bytes, without touching the
 contents of memory.
@@ -285,39 +285,39 @@
 `memory` will be resized. If `size` is `0`, the function may return `NULL` or it
 may return a unique pointer value that can be passed to SbMemoryDeallocate.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryReallocate(void *memory, size_t size)
 ```
 
-### SbMemoryReallocateChecked ###
+### SbMemoryReallocateChecked
 
 Same as SbMemoryReallocateUnchecked, but will abort() in the case of an
 allocation failure.
 
 DO NOT CALL. Call SbMemoryReallocate(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryReallocateChecked(void *memory, size_t size)
 ```
 
-### SbMemoryReallocateUnchecked ###
+### SbMemoryReallocateUnchecked
 
 This is the implementation of SbMemoryReallocate that must be provided by
 Starboard ports.
 
 DO NOT CALL. Call SbMemoryReallocate(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryReallocateUnchecked(void *memory, size_t size)
 ```
 
-### SbMemoryUnmap ###
+### SbMemoryUnmap
 
 Unmap `size_bytes` of physical pages starting from `virtual_address`, returning
 `true` on success. After this function completes, [virtual_address,
@@ -327,7 +327,7 @@
 `(void*)0xA000`, and another call to `SbMemoryMap(0x1000)` returns
 `(void*)0xB000`, `SbMemoryUnmap(0xA000, 0x2000)` should free both regions.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMemoryUnmap(void *virtual_address, int64_t size_bytes)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/memory_reporter.md b/cobalt/site/docs/reference/starboard/modules/15/memory_reporter.md
index d67ef1a..d1273c6 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/memory_reporter.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/memory_reporter.md
@@ -1,57 +1,57 @@
----
-layout: doc
-title: "Starboard Module Reference: memory_reporter.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `memory_reporter.h`
 
 Provides an interface for memory reporting.
 
-## Typedefs ##
+## Typedefs
 
-### SbMemoryReporterOnAlloc ###
+### SbMemoryReporterOnAlloc
 
 A function to report a memory allocation from SbMemoryAllocate(). Note that
 operator new calls SbMemoryAllocate which will delegate to this callback.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbMemoryReporterOnAlloc) (void *context, const void *memory, size_t size)
 ```
 
-### SbMemoryReporterOnDealloc ###
+### SbMemoryReporterOnDealloc
 
 A function to report a memory deallocation from SbMemoryDeallcoate(). Note that
 operator delete calls SbMemoryDeallocate which will delegate to this callback.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbMemoryReporterOnDealloc) (void *context, const void *memory)
 ```
 
-### SbMemoryReporterOnMapMemory ###
+### SbMemoryReporterOnMapMemory
 
 A function to report a memory mapping from SbMemoryMap().
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbMemoryReporterOnMapMemory) (void *context, const void *memory, size_t size)
 ```
 
-### SbMemoryReporterOnUnMapMemory ###
+### SbMemoryReporterOnUnMapMemory
 
 A function to report a memory unmapping from SbMemoryUnmap().
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbMemoryReporterOnUnMapMemory) (void *context, const void *memory, size_t size)
 ```
 
-## Structs ##
+## Structs
 
-### SbMemoryReporter ###
+### SbMemoryReporter
 
 SbMemoryReporter allows memory reporting via user-supplied functions. The void*
 context is passed to every call back. It's strongly recommended that C-Style
@@ -59,7 +59,7 @@
 compiler. For example, SbMemoryReporter mem_reporter = { MallocCallback, ....
 context };
 
-#### Members ####
+#### Members
 
 *   `SbMemoryReporterOnAlloc on_alloc_cb`
 
@@ -77,9 +77,9 @@
 
     Optional, is passed to callbacks as first argument.
 
-## Functions ##
+## Functions
 
-### SbMemorySetReporter ###
+### SbMemorySetReporter
 
 Sets the MemoryReporter. Any previous memory reporter is unset. No lifetime
 management is done internally on input pointer.
@@ -96,7 +96,7 @@
 SbMemoryReporter* mem_reporter = new ...; SbMemorySetReporter(&mem_reporter);
 ... SbMemorySetReporter(NULL); delete mem_reporter; // May crash.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMemorySetReporter(struct SbMemoryReporter *tracker)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/microphone.md b/cobalt/site/docs/reference/starboard/modules/15/microphone.md
index d760e1e..bcf9e43 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/microphone.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/microphone.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: microphone.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `microphone.h`
 
 Defines functions for microphone creation, control, audio data fetching, and
 destruction. This module supports multiple calls to `SbMicrophoneOpen` and
@@ -31,23 +31,23 @@
 
 1.  Destroy the microphone with `SbMicrophoneDestroy`.
 
-## Macros ##
+## Macros
 
-### kSbMicrophoneIdInvalid ###
+### kSbMicrophoneIdInvalid
 
 Well-defined value for an invalid microphone ID handle.
 
-### kSbMicrophoneInvalid ###
+### kSbMicrophoneInvalid
 
 Well-defined value for an invalid microphone handle.
 
-## Enums ##
+## Enums
 
-### SbMicrophoneType ###
+### SbMicrophoneType
 
 All possible microphone types.
 
-#### Values ####
+#### Values
 
 *   `kSbMicrophoneCamera`
 
@@ -66,37 +66,37 @@
     Unknown microphone type. The microphone could be different than the other
     enum descriptions or could fall under one of those descriptions.
 
-## Typedefs ##
+## Typedefs
 
-### SbMicrophone ###
+### SbMicrophone
 
 An opaque handle to an implementation-private structure that represents a
 microphone.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbMicrophonePrivate* SbMicrophone
 ```
 
-### SbMicrophoneId ###
+### SbMicrophoneId
 
 An opaque handle to an implementation-private structure that represents a
 microphone ID.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbMicrophoneIdPrivate* SbMicrophoneId
 ```
 
-## Structs ##
+## Structs
 
-### SbMicrophoneInfo ###
+### SbMicrophoneInfo
 
 Microphone information.
 
-#### Members ####
+#### Members
 
 *   `SbMicrophoneId id`
 
@@ -116,9 +116,9 @@
     of the microphone type. For example, "Headset Microphone". The string must
     be null terminated.
 
-## Functions ##
+## Functions
 
-### SbMicrophoneClose ###
+### SbMicrophoneClose
 
 Closes the microphone port, stops recording audio on `microphone`, and clears
 the unread buffer if it is not empty. If the microphone has already been
@@ -127,13 +127,13 @@
 
 `microphone`: The microphone to close.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMicrophoneClose(SbMicrophone microphone)
 ```
 
-### SbMicrophoneCreate ###
+### SbMicrophoneCreate
 
 Creates a microphone with the specified ID, audio sample rate, and cached audio
 buffer size. Starboard only requires support for creating one microphone at a
@@ -153,25 +153,25 @@
 this buffer in smaller chunks than this size. This parameter must be set to a
 value greater than zero and the ideal size is `2^n`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbMicrophone SbMicrophoneCreate(SbMicrophoneId id, int sample_rate_in_hz, int buffer_size_bytes)
 ```
 
-### SbMicrophoneDestroy ###
+### SbMicrophoneDestroy
 
 Destroys a microphone. If the microphone is in started state, it is first
 stopped and then destroyed. Any data that has been recorded and not read is
 thrown away.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMicrophoneDestroy(SbMicrophone microphone)
 ```
 
-### SbMicrophoneGetAvailable ###
+### SbMicrophoneGetAvailable
 
 Retrieves all currently available microphone information and stores it in
 `out_info_array`. The return value is the number of the available microphones.
@@ -184,43 +184,43 @@
 placed into this output parameter. `info_array_size`: The size of
 `out_info_array`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMicrophoneGetAvailable(SbMicrophoneInfo *out_info_array, int info_array_size)
 ```
 
-### SbMicrophoneIdIsValid ###
+### SbMicrophoneIdIsValid
 
 Indicates whether the given microphone ID is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbMicrophoneIdIsValid(SbMicrophoneId id)
 ```
 
-### SbMicrophoneIsSampleRateSupported ###
+### SbMicrophoneIsSampleRateSupported
 
 Indicates whether the microphone supports the sample rate.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMicrophoneIsSampleRateSupported(SbMicrophoneId id, int sample_rate_in_hz)
 ```
 
-### SbMicrophoneIsValid ###
+### SbMicrophoneIsValid
 
 Indicates whether the given microphone is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbMicrophoneIsValid(SbMicrophone microphone)
 ```
 
-### SbMicrophoneOpen ###
+### SbMicrophoneOpen
 
 Opens the microphone port and starts recording audio on `microphone`.
 
@@ -230,13 +230,13 @@
 open. `microphone`: The microphone that will be opened and will start recording
 audio.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMicrophoneOpen(SbMicrophone microphone)
 ```
 
-### SbMicrophoneRead ###
+### SbMicrophoneRead
 
 Retrieves the recorded audio data from the microphone and writes that data to
 `out_audio_data`.
@@ -255,7 +255,7 @@
 smaller than `min_read_size` of `SbMicrophoneInfo`, the extra audio data that
 has already been read from the device is discarded.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMicrophoneRead(SbMicrophone microphone, void *out_audio_data, int audio_data_size)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/mutex.md b/cobalt/site/docs/reference/starboard/modules/15/mutex.md
index 05dd810..82ff850 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/mutex.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/mutex.md
@@ -1,24 +1,24 @@
----
-layout: doc
-title: "Starboard Module Reference: mutex.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `mutex.h`
 
 Defines a mutually exclusive lock that can be used to coordinate with other
 threads.
 
-## Macros ##
+## Macros
 
-### SB_MUTEX_MAX_SIZE ###
+### SB_MUTEX_MAX_SIZE
 
 Max size of the SbMutex type.
 
-## Enums ##
+## Enums
 
-### SbMutexResult ###
+### SbMutexResult
 
 Enumeration of possible results from acquiring a mutex.
 
-#### Values ####
+#### Values
 
 *   `kSbMutexAcquired`
 
@@ -30,22 +30,22 @@
 
     The mutex has already been destroyed.
 
-## Typedefs ##
+## Typedefs
 
-### SbMutex ###
+### SbMutex
 
 An opaque handle to a mutex type with reserved memory buffer of size
 SB_MUTEX_MAX_SIZE and aligned at void pointer type.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef union SbMutex  SbMutex
 ```
 
-## Functions ##
+## Functions
 
-### SbMutexAcquire ###
+### SbMutexAcquire
 
 Acquires `mutex`, blocking indefinitely. The return value identifies the
 acquisition result. SbMutexes are not reentrant, so a recursive acquisition
@@ -53,13 +53,13 @@
 
 `mutex`: The mutex to be acquired.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbMutexResult SbMutexAcquire(SbMutex *mutex)
 ```
 
-### SbMutexAcquireTry ###
+### SbMutexAcquireTry
 
 Acquires `mutex`, without blocking. The return value identifies the acquisition
 result. SbMutexes are not reentrant, so a recursive acquisition has undefined
@@ -67,52 +67,52 @@
 
 `mutex`: The mutex to be acquired.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbMutexResult SbMutexAcquireTry(SbMutex *mutex)
 ```
 
-### SbMutexCreate ###
+### SbMutexCreate
 
 Creates a new mutex. The return value indicates whether the function was able to
 create a new mutex.
 
 `out_mutex`: The handle to the newly created mutex.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMutexCreate(SbMutex *out_mutex)
 ```
 
-### SbMutexDestroy ###
+### SbMutexDestroy
 
 Destroys a mutex. The return value indicates whether the destruction was
 successful. Destroying a locked mutex results in undefined behavior.
 
 `mutex`: The mutex to be invalidated.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMutexDestroy(SbMutex *mutex)
 ```
 
-### SbMutexIsSuccess ###
+### SbMutexIsSuccess
 
 Indicates whether the given result is a success. A value of `true` indicates
 that the mutex was acquired.
 
 `result`: The result being checked.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbMutexIsSuccess(SbMutexResult result)
 ```
 
-### SbMutexRelease ###
+### SbMutexRelease
 
 Releases `mutex` held by the current thread. The return value indicates whether
 the release was successful. Releases should always be successful if `mutex` is
@@ -120,7 +120,7 @@
 
 `mutex`: The mutex to be released.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMutexRelease(SbMutex *mutex)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/once.md b/cobalt/site/docs/reference/starboard/modules/15/once.md
index 2ad1959..d773024 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/once.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/once.md
@@ -1,43 +1,43 @@
----
-layout: doc
-title: "Starboard Module Reference: once.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `once.h`
 
 Onces represent initializations that should only ever happen once per process,
 in a thread-safe way.
 
-## Macros ##
+## Macros
 
-### SB_ONCE_MAX_SIZE ###
+### SB_ONCE_MAX_SIZE
 
 Max size of the SbOnceControl type.
 
-## Typedefs ##
+## Typedefs
 
-### SbOnceControl ###
+### SbOnceControl
 
 An opaque handle to a once control type with reserved memory buffer of size
 SB_ONCE_MAX_SIZE and aligned at void pointer type.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef union SbOnceControl  SbOnceControl
 ```
 
-### SbOnceInitRoutine ###
+### SbOnceInitRoutine
 
 Function pointer type for methods that can be called via the SbOnce() system.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbOnceInitRoutine) (void)
 ```
 
-## Functions ##
+## Functions
 
-### SbOnce ###
+### SbOnce
 
 Thread-safely runs `init_routine` only once.
 
@@ -50,7 +50,7 @@
 *   If `once_control` or `init_routine` is invalid, the function returns
     `false`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbOnce(SbOnceControl *once_control, SbOnceInitRoutine init_routine)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/player.md b/cobalt/site/docs/reference/starboard/modules/15/player.md
index 8039f6b..0382642 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/player.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/player.md
@@ -1,53 +1,53 @@
----
-layout: doc
-title: "Starboard Module Reference: player.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `player.h`
 
 Defines an interface for controlling playback of media elementary streams.
 
-## Macros ##
+## Macros
 
-### SB_PLAYER_INITIAL_TICKET ###
+### SB_PLAYER_INITIAL_TICKET
 
 The value of the initial ticket held by the player before the first seek. The
 player will use this ticket value to make the first call to SbPlayerStatusFunc
 with kSbPlayerStateInitialized.
 
-### SB_PLAYER_NO_DURATION ###
+### SB_PLAYER_NO_DURATION
 
 The value to pass into SbPlayerCreate's `duration_pts` argument for cases where
 the duration is unknown, such as for live streams.
 
-### kSbPlayerInvalid ###
+### kSbPlayerInvalid
 
 Well-defined value for an invalid player.
 
-### kSbPlayerWriteDurationLocal ###
+### kSbPlayerWriteDurationLocal
 
 The audio write duration when all the audio connectors are local.
 
-### kSbPlayerWriteDurationRemote ###
+### kSbPlayerWriteDurationRemote
 
 The audio write duration when at least one of the audio connectors are remote.
 
-## Enums ##
+## Enums
 
-### SbPlayerDecoderState ###
+### SbPlayerDecoderState
 
 An indicator of whether the decoder can accept more samples.
 
-#### Values ####
+#### Values
 
 *   `kSbPlayerDecoderStateNeedsData`
 
     The decoder is asking for one more sample.
 
-### SbPlayerSampleSideDataType ###
+### SbPlayerSampleSideDataType
 
 Identify the type of side data accompanied with `SbPlayerSampleInfo`, as side
 data may come from multiple sources.
 
-#### Values ####
+#### Values
 
 *   `kMatroskaBlockAdditional`
 
@@ -56,11 +56,11 @@
     . The first 8 bytes of the data contains the value of BlockAddID in big
     endian format, followed by the content of BlockAdditional.
 
-### SbPlayerState ###
+### SbPlayerState
 
 An indicator of the general playback state.
 
-#### Values ####
+#### Values
 
 *   `kSbPlayerStateInitialized`
 
@@ -84,31 +84,31 @@
 
     The player has been destroyed, and will send no more callbacks.
 
-## Typedefs ##
+## Typedefs
 
-### SbPlayer ###
+### SbPlayer
 
 An opaque handle to an implementation-private structure representing a player.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbPlayerPrivate* SbPlayer
 ```
 
-### SbPlayerDeallocateSampleFunc ###
+### SbPlayerDeallocateSampleFunc
 
 Callback to free the given sample buffer data. When more than one buffer are
 sent in SbPlayerWriteSample(), the implementation only has to call this callback
-with `sample_buffer` points to the the first buffer.
+with `sample_buffer` points to the first buffer.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbPlayerDeallocateSampleFunc) (SbPlayer player, void *context, const void *sample_buffer)
 ```
 
-### SbPlayerDecoderStatusFunc ###
+### SbPlayerDecoderStatusFunc
 
 Callback for decoder status updates, called in response to a call to
 SbPlayerSeek() or SbPlayerWriteSample(). This callback will never be called
@@ -122,45 +122,45 @@
 SbPlayerWriteEndOfStream(). The player implementation should update the decoder
 status again after such call to notify its user to continue writing more frames.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbPlayerDecoderStatusFunc) (SbPlayer player, void *context, SbMediaType type, SbPlayerDecoderState state, int ticket)
 ```
 
-### SbPlayerErrorFunc ###
+### SbPlayerErrorFunc
 
 Callback for player errors, that may set a `message`. `error`: indicates the
 error code. `message`: provides specific informative diagnostic message about
 the error condition encountered. It is ok for the message to be an empty string
 or NULL if no information is available.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbPlayerErrorFunc) (SbPlayer player, void *context, SbPlayerError error, const char *message)
 ```
 
-### SbPlayerStatusFunc ###
+### SbPlayerStatusFunc
 
 Callback for player status updates. These callbacks will happen on a different
 thread than the calling thread, and it is not valid to call SbPlayer functions
 from within this callback.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbPlayerStatusFunc) (SbPlayer player, void *context, SbPlayerState state, int ticket)
 ```
 
-## Structs ##
+## Structs
 
-### SbPlayerCreationParam ###
+### SbPlayerCreationParam
 
 The playback related parameters to pass into SbPlayerCreate() and
 SbPlayerGetPreferredOutputMode().
 
-#### Members ####
+#### Members
 
 *   `SbDrmSystem drm_system`
 
@@ -186,11 +186,11 @@
     should be made available for the application to pull via calls to
     SbPlayerGetCurrentFrame().
 
-### SbPlayerInfo ###
+### SbPlayerInfo
 
 Information about the current media playback state.
 
-#### Members ####
+#### Members
 
 *   `SbTime current_media_timestamp`
 
@@ -237,11 +237,11 @@
     faster than normal speed. When it is less than one, the video is played in a
     slower than normal speed. Negative speeds are not supported.
 
-### SbPlayerSampleInfo ###
+### SbPlayerSampleInfo
 
 Information about the samples to be written into SbPlayerWriteSamples().
 
-#### Members ####
+#### Members
 
 *   `SbMediaType type`
 *   `const void * buffer`
@@ -274,12 +274,12 @@
     The DRM system related info for the media sample. This value is required for
     encrypted samples. Otherwise, it must be `NULL`.
 
-### SbPlayerSampleSideData ###
+### SbPlayerSampleSideData
 
 Side data accompanied with `SbPlayerSampleInfo`, it can be arbitrary binary data
 coming from multiple sources.
 
-#### Members ####
+#### Members
 
 *   `SbPlayerSampleSideDataType type`
 *   `const uint8_t * data`
@@ -290,9 +290,9 @@
 
     The size of the data pointed by `data`, in bytes.
 
-## Functions ##
+## Functions
 
-### SbPlayerDestroy ###
+### SbPlayerDestroy
 
 Destroys `player`, freeing all associated resources.
 
@@ -307,13 +307,13 @@
     SbPlayerDestroy has been called on that player. `player`: The player to be
     destroyed. Must not be `kSbPlayerInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbPlayerDestroy(SbPlayer player)
 ```
 
-### SbPlayerGetAudioConfiguration ###
+### SbPlayerGetAudioConfiguration
 
 Returns the audio configurations used by `player`.
 
@@ -371,13 +371,13 @@
 the audio output, refer to `SbMediaAudioConfiguration` for more details. Must
 not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbPlayerGetAudioConfiguration(SbPlayer player, int index, SbMediaAudioConfiguration *out_audio_configuration)
 ```
 
-### SbPlayerGetCurrentFrame ###
+### SbPlayerGetCurrentFrame
 
 Given a player created with the kSbPlayerOutputModeDecodeToTexture output mode,
 it will return a SbDecodeTarget representing the current frame to be rasterized.
@@ -389,13 +389,13 @@
 
 `player` must not be `kSbPlayerInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbDecodeTarget SbPlayerGetCurrentFrame(SbPlayer player)
 ```
 
-### SbPlayerGetMaximumNumberOfSamplesPerWrite ###
+### SbPlayerGetMaximumNumberOfSamplesPerWrite
 
 Writes a single sample of the given media type to `player`'s input stream. Its
 data may be passed in via more than one buffers. The lifetime of
@@ -409,13 +409,13 @@
 of sample for which the number is retrieved. See the `SbMediaType` enum in
 media.h.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbPlayerGetMaximumNumberOfSamplesPerWrite(SbPlayer player, SbMediaType sample_type)
 ```
 
-### SbPlayerGetPreferredOutputMode ###
+### SbPlayerGetPreferredOutputMode
 
 Returns the preferred output mode of the implementation when a video described
 by `creation_param` is played. It is assumed that it is okay to call
@@ -433,23 +433,23 @@
 and the implementation should try its best effort to return a valid output mode.
 `creation_param` must not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbPlayerOutputMode SbPlayerGetPreferredOutputMode(const SbPlayerCreationParam *creation_param)
 ```
 
-### SbPlayerIsValid ###
+### SbPlayerIsValid
 
 Returns whether the given player handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbPlayerIsValid(SbPlayer player)
 ```
 
-### SbPlayerSetBounds ###
+### SbPlayerSetBounds
 
 Sets the player bounds to the given graphics plane coordinates. The changes do
 not take effect until the next graphics frame buffer swap. The default bounds
@@ -470,13 +470,13 @@
 `y`: The y-coordinate of the upper-left corner of the player. `width`: The width
 of the player, in pixels. `height`: The height of the player, in pixels.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbPlayerSetBounds(SbPlayer player, int z_index, int x, int y, int width, int height)
 ```
 
-### SbPlayerSetPlaybackRate ###
+### SbPlayerSetPlaybackRate
 
 Set the playback rate of the `player`. `rate` is default to 1.0 which indicates
 the playback is at its original speed. A `rate` greater than one will make the
@@ -491,13 +491,13 @@
 
 `player` must not be `kSbPlayerInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbPlayerSetPlaybackRate(SbPlayer player, double playback_rate)
 ```
 
-### SbPlayerSetVolume ###
+### SbPlayerSetVolume
 
 Sets the player's volume.
 
@@ -506,13 +506,13 @@
 `0.0` and `1.0`, inclusive. A value of `0.0` means that the audio should be
 muted, and a value of `1.0` means that it should be played at full volume.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbPlayerSetVolume(SbPlayer player, double volume)
 ```
 
-### SbPlayerWriteEndOfStream ###
+### SbPlayerWriteEndOfStream
 
 Writes a marker to `player`'s input stream of `stream_type` indicating that
 there are no more samples for that media type for the remainder of this media
@@ -522,13 +522,13 @@
 `player`: The player to which the marker is written. `stream_type`: The type of
 stream for which the marker is written.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbPlayerWriteEndOfStream(SbPlayer player, SbMediaType stream_type)
 ```
 
-### SbPlayerWriteSamples ###
+### SbPlayerWriteSamples
 
 `sample_type`: The type of sample being written. See the `SbMediaType` enum in
 media.h. `sample_infos`: A pointer to an array of SbPlayerSampleInfo with
@@ -540,7 +540,7 @@
 `sample_infos`. It has to be at least one, and less than the return value of
 SbPlayerGetMaximumNumberOfSamplesPerWrite().
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbPlayerWriteSamples(SbPlayer player, SbMediaType sample_type, const SbPlayerSampleInfo *sample_infos, int number_of_sample_infos)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/socket.md b/cobalt/site/docs/reference/starboard/modules/15/socket.md
index 9e0f81b..744c04e 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/socket.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/socket.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: socket.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `socket.h`
 
 Defines Starboard socket I/O functions. Starboard supports IPv4 and IPv6, TCP
 and UDP, server and client sockets. Some platforms may not support IPv6, some
@@ -18,19 +18,19 @@
 TODO: For platforms that do not support sockets at all, they must support at
 least a high-level HTTP client API (to be defined later).
 
-## Macros ##
+## Macros
 
-### kSbSocketInvalid ###
+### kSbSocketInvalid
 
 Well-defined value for an invalid socket handle.
 
-## Enums ##
+## Enums
 
-### SbSocketAddressType ###
+### SbSocketAddressType
 
 All possible address types.
 
-#### Values ####
+#### Values
 
 *   `kSbSocketAddressTypeIpv4`
 
@@ -39,13 +39,13 @@
 
     An IPv6 address, which uses 16 entries of the address buffer.
 
-### SbSocketError ###
+### SbSocketError
 
 Enumeration of all Starboard socket operation results. Despite the enum name,
 note that the value actually describes the outcome of an operation, which is not
 always an error.
 
-#### Values ####
+#### Values
 
 *   `kSbSocketOk`
 
@@ -63,11 +63,11 @@
 
     The operation failed for some other reason not specified above.
 
-### SbSocketProtocol ###
+### SbSocketProtocol
 
 All possible IP socket types.
 
-#### Values ####
+#### Values
 
 *   `kSbSocketProtocolTcp`
 
@@ -77,11 +77,11 @@
     The UDP/IP protocol, an unreliable, connectionless, discrete packet
     (datagram) protocol.
 
-### SbSocketResolveFilter ###
+### SbSocketResolveFilter
 
 Bits that can be set when calling SbSocketResolve to filter the results.
 
-#### Values ####
+#### Values
 
 *   `kSbSocketResolveFilterNone`
 
@@ -93,25 +93,25 @@
 
     Include Ipv6 addresses.
 
-## Typedefs ##
+## Typedefs
 
-### SbSocket ###
+### SbSocket
 
 A handle to a socket.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbSocketPrivate* SbSocket
 ```
 
-## Structs ##
+## Structs
 
-### SbSocketAddress ###
+### SbSocketAddress
 
 A representation of any possible supported address type.
 
-#### Members ####
+#### Members
 
 *   `uint8_t address`
 
@@ -126,11 +126,11 @@
     The port component of this socket address. If not specified, it will be
     zero, which is officially undefined.
 
-### SbSocketResolution ###
+### SbSocketResolution
 
 The result of a host name resolution.
 
-#### Members ####
+#### Members
 
 *   `SbSocketAddress* addresses`
 
@@ -139,9 +139,9 @@
 
     The length of the `addresses` array.
 
-## Functions ##
+## Functions
 
-### SbSocketAccept ###
+### SbSocketAccept
 
 Accepts a pending connection on `socket` and returns a new SbSocket representing
 that connection. This function sets the error on `socket` and returns
@@ -149,13 +149,13 @@
 
 `socket`: The SbSocket that is accepting a pending connection.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocket SbSocketAccept(SbSocket socket)
 ```
 
-### SbSocketBind ###
+### SbSocketBind
 
 Binds `socket` to a specific local interface and port specified by
 `local_address`. This function sets and returns the socket error if it is unable
@@ -170,24 +170,24 @@
 *   Setting the IP address to `0.0.0.0` means that the socket should be bound to
     all interfaces.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketError SbSocketBind(SbSocket socket, const SbSocketAddress *local_address)
 ```
 
-### SbSocketClearLastError ###
+### SbSocketClearLastError
 
 Clears the last error set on `socket`. The return value indicates whether the
 socket error was cleared.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketClearLastError(SbSocket socket)
 ```
 
-### SbSocketConnect ###
+### SbSocketConnect
 
 Opens a connection of `socket`'s type to the host and port specified by
 `address`. This function sets and returns the socket error if it is unable to
@@ -197,13 +197,13 @@
 `socket`: The type of connection that should be opened. `address`: The host and
 port to which the socket should connect.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketError SbSocketConnect(SbSocket socket, const SbSocketAddress *address)
 ```
 
-### SbSocketCreate ###
+### SbSocketCreate
 
 Creates a new non-blocking socket for protocol `protocol` using address family
 `address_type`.
@@ -216,13 +216,13 @@
 `address_type`: The type of IP address to use for the socket. `protocol`: The
 protocol to use for the socket.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocket SbSocketCreate(SbSocketAddressType address_type, SbSocketProtocol protocol)
 ```
 
-### SbSocketDestroy ###
+### SbSocketDestroy
 
 Destroys the `socket` by flushing it, closing any connection that may be active
 on it, and reclaiming any resources associated with it, including any
@@ -234,25 +234,25 @@
 
 `socket`: The SbSocket to be destroyed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketDestroy(SbSocket socket)
 ```
 
-### SbSocketFreeResolution ###
+### SbSocketFreeResolution
 
 Frees a resolution allocated by SbSocketResolve.
 
 `resolution`: The resolution to be freed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSocketFreeResolution(SbSocketResolution *resolution)
 ```
 
-### SbSocketGetInterfaceAddress ###
+### SbSocketGetInterfaceAddress
 
 Gets the source address and the netmask that would be used to connect to the
 destination. The netmask parameter is optional, and only populated if a non-NULL
@@ -288,26 +288,26 @@
 value is passed in, this function places the netmask associated with the source
 address in this output variable.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketGetInterfaceAddress(const SbSocketAddress *const destination, SbSocketAddress *out_source_address, SbSocketAddress *out_netmask)
 ```
 
-### SbSocketGetLastError ###
+### SbSocketGetLastError
 
 Returns the last error set on `socket`. If `socket` is not valid, this function
 returns `kSbSocketErrorFailed`.
 
 `socket`: The SbSocket that the last error is returned for.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketError SbSocketGetLastError(SbSocket socket)
 ```
 
-### SbSocketGetLocalAddress ###
+### SbSocketGetLocalAddress
 
 Gets the address that this socket is bound to locally, if the socket is
 connected. The return value indicates whether the address was retrieved
@@ -316,59 +316,59 @@
 `socket`: The SbSocket for which the local address is retrieved. `out_address`:
 The SbSocket's local address.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketGetLocalAddress(SbSocket socket, SbSocketAddress *out_address)
 ```
 
-### SbSocketIsConnected ###
+### SbSocketIsConnected
 
 Indicates whether `socket` is connected to anything. Invalid sockets are not
 connected.
 
 `socket`: The SbSocket to be checked.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketIsConnected(SbSocket socket)
 ```
 
-### SbSocketIsConnectedAndIdle ###
+### SbSocketIsConnectedAndIdle
 
 Returns whether `socket` is connected to anything, and, if so, whether it is
 receiving any data.
 
 `socket`: The SbSocket to be checked.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketIsConnectedAndIdle(SbSocket socket)
 ```
 
-### SbSocketIsIpv6Supported ###
+### SbSocketIsIpv6Supported
 
 Returns whether IPV6 is supported on the current platform.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketIsIpv6Supported()
 ```
 
-### SbSocketIsValid ###
+### SbSocketIsValid
 
 Returns whether the given socket handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbSocketIsValid(SbSocket socket)
 ```
 
-### SbSocketJoinMulticastGroup ###
+### SbSocketJoinMulticastGroup
 
 Joins `socket` to an IP multicast group identified by `address`. The equivalent
 of IP_ADD_MEMBERSHIP. The return value indicates whether the socket was joined
@@ -377,13 +377,13 @@
 `socket`: The SbSocket to be joined to the IP multicast group. `address`: The
 location of the IP multicast group.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketJoinMulticastGroup(SbSocket socket, const SbSocketAddress *address)
 ```
 
-### SbSocketListen ###
+### SbSocketListen
 
 Causes `socket` to listen on the local address that `socket` was previously
 bound to by SbSocketBind. This function sets and returns the socket error if it
@@ -392,13 +392,13 @@
 
 `socket`: The SbSocket on which the function operates.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketError SbSocketListen(SbSocket socket)
 ```
 
-### SbSocketReceiveFrom ###
+### SbSocketReceiveFrom
 
 Reads up to `data_size` bytes from `socket` into `out_data` and places the
 source address of the packet in `out_source` if out_source is not NULL. Returns
@@ -420,13 +420,13 @@
 the socket. Must not be NULL. `data_size`: The number of bytes to read.
 `out_source`: The source address of the packet.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbSocketReceiveFrom(SbSocket socket, char *out_data, int data_size, SbSocketAddress *out_source)
 ```
 
-### SbSocketResolve ###
+### SbSocketResolve
 
 Synchronously resolves `hostname` into the returned SbSocketResolution , which
 must be freed with SbSocketFreeResolution. The function returns `NULL` if it is
@@ -438,13 +438,13 @@
 However, if one IP address family filter is specified, only that address family
 is included. The function ignores unrecognized filter bits.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketResolution* SbSocketResolve(const char *hostname, int filters)
 ```
 
-### SbSocketSendTo ###
+### SbSocketSendTo
 
 Writes up to `data_size` bytes of `data` to `destination` via `socket`. Returns
 the number of bytes written, or a negative number if there is an error, in which
@@ -466,13 +466,13 @@
 connected persistently, so setting `destination` when sending to a TCP socket
 will cause an error.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbSocketSendTo(SbSocket socket, const char *data, int data_size, const SbSocketAddress *destination)
 ```
 
-### SbSocketSetBroadcast ###
+### SbSocketSetBroadcast
 
 Sets the `SO_BROADCAST`, or equivalent, option to `value` on `socket`. The
 return value indicates whether the option was actually set.
@@ -483,13 +483,13 @@
 `socket`: The SbSocket for which the option is set. `value`: The new value for
 the option.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetBroadcast(SbSocket socket, bool value)
 ```
 
-### SbSocketSetReceiveBufferSize ###
+### SbSocketSetReceiveBufferSize
 
 Sets the `SO_RCVBUF`, or equivalent, option to `size` on `socket`. The return
 value indicates whether the option was actually set.
@@ -497,13 +497,13 @@
 `socket`: The SbSocket for which the option is set. `size`: The value for the
 option.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetReceiveBufferSize(SbSocket socket, int32_t size)
 ```
 
-### SbSocketSetReuseAddress ###
+### SbSocketSetReuseAddress
 
 Sets the `SO_REUSEADDR`, or equivalent, option to `value` on `socket`. The
 return value indicates whether the option was actually set.
@@ -514,13 +514,13 @@
 `socket`: The SbSocket for which the option is set. `value`: The new value for
 the option.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetReuseAddress(SbSocket socket, bool value)
 ```
 
-### SbSocketSetSendBufferSize ###
+### SbSocketSetSendBufferSize
 
 Sets the `SO_SNDBUF`, or equivalent, option to `size` on `socket`. The return
 value indicates whether the option was actually set.
@@ -528,13 +528,13 @@
 `socket`: The SbSocket for which the option is set. `size`: The value for the
 option.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetSendBufferSize(SbSocket socket, int32_t size)
 ```
 
-### SbSocketSetTcpKeepAlive ###
+### SbSocketSetTcpKeepAlive
 
 Sets the `SO_KEEPALIVE`, or equivalent, option to `value` on `socket`. The
 return value indicates whether the option was actually set.
@@ -545,13 +545,13 @@
 The time between keep-alive packets. This value is only relevant if `value` is
 `true`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetTcpKeepAlive(SbSocket socket, bool value, SbTime period)
 ```
 
-### SbSocketSetTcpNoDelay ###
+### SbSocketSetTcpNoDelay
 
 Sets the `TCP_NODELAY`, or equivalent, option to `value` on `socket`. The return
 value indicates whether the option was actually set.
@@ -564,13 +564,13 @@
 `socket`: The SbSocket for which the option is set. `value`: Indicates whether
 the Nagle algorithm should be disabled (`value`=`true`).
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetTcpNoDelay(SbSocket socket, bool value)
 ```
 
-### SbSocketSetTcpWindowScaling ###
+### SbSocketSetTcpWindowScaling
 
 Sets the `SO_WINSCALE`, or equivalent, option to `value` on `socket`. The return
 value indicates whether the option was actually set.
@@ -578,7 +578,7 @@
 `socket`: The SbSocket for which the option is set. `value`: The value for the
 option.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetTcpWindowScaling(SbSocket socket, bool value)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/socket_waiter.md b/cobalt/site/docs/reference/starboard/modules/15/socket_waiter.md
index 855dcf8..f1c6bd8 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/socket_waiter.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/socket_waiter.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: socket_waiter.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `socket_waiter.h`
 
 Allows a thread to wait on many sockets at once. The standard usage pattern
 would be for a single I/O thread to:
@@ -26,19 +26,19 @@
 queuing the work item, or the SbSocketWaiter is not otherwise guaranteed to wake
 up.
 
-## Macros ##
+## Macros
 
-### kSbSocketWaiterInvalid ###
+### kSbSocketWaiterInvalid
 
 Well-defined value for an invalid socket watcher handle.
 
-## Enums ##
+## Enums
 
-### SbSocketWaiterInterest ###
+### SbSocketWaiterInterest
 
 All the interests that a socket may register for on a waiter.
 
-#### Values ####
+#### Values
 
 *   `kSbSocketWaiterInterestNone`
 
@@ -50,11 +50,11 @@
 
     An interest in or readiness to write to a socket without blocking.
 
-### SbSocketWaiterResult ###
+### SbSocketWaiterResult
 
 Possible reasons why a call to SbSocketWaiterWaitTimed returned.
 
-#### Values ####
+#### Values
 
 *   `kSbSocketWaiterResultInvalid`
 
@@ -66,31 +66,31 @@
 
     The wait stopped because a call to SbSocketWaiterWakeUp was consumed.
 
-## Typedefs ##
+## Typedefs
 
-### SbSocketWaiter ###
+### SbSocketWaiter
 
 A handle to a socket waiter.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbSocketWaiterPrivate* SbSocketWaiter
 ```
 
-### SbSocketWaiterCallback ###
+### SbSocketWaiterCallback
 
 Function pointer for socket waiter callbacks.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbSocketWaiterCallback) (SbSocketWaiter waiter, SbSocket socket, void *context, int ready_interests)
 ```
 
-## Functions ##
+## Functions
 
-### SbSocketWaiterAdd ###
+### SbSocketWaiterAdd
 
 Adds a new socket to be waited on by the `waiter` with a bitfield of
 `interests`. This function should only be called on the thread that waits on
@@ -120,25 +120,25 @@
     `callback`, even if not all registered `interests` became ready, which
     allows for adding it again in the `callback`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketWaiterAdd(SbSocketWaiter waiter, SbSocket socket, void *context, SbSocketWaiterCallback callback, int interests, bool persistent)
 ```
 
-### SbSocketWaiterCreate ###
+### SbSocketWaiterCreate
 
 The results of two threads waiting on the same waiter is undefined and will not
 work. Except for the SbSocketWaiterWakeUp() function, SbSocketWaiters are not
 thread-safe and don't expect to be modified concurrently.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketWaiter SbSocketWaiterCreate()
 ```
 
-### SbSocketWaiterDestroy ###
+### SbSocketWaiterDestroy
 
 Destroys `waiter` and removes all sockets still registered by way of
 SbSocketWaiterAdd. This function may be called on any thread as long as there is
@@ -146,23 +146,23 @@
 
 `waiter`: The SbSocketWaiter to be destroyed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketWaiterDestroy(SbSocketWaiter waiter)
 ```
 
-### SbSocketWaiterIsValid ###
+### SbSocketWaiterIsValid
 
 Returns whether the given socket handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbSocketWaiterIsValid(SbSocketWaiter watcher)
 ```
 
-### SbSocketWaiterRemove ###
+### SbSocketWaiterRemove
 
 Removes a socket, previously added with SbSocketWaiterAdd(), from a waiter. This
 function should only be called on the thread that waits on this waiter.
@@ -174,26 +174,26 @@
 `waiter`: The waiter from which the socket is removed. `socket`: The socket to
 remove from the waiter.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketWaiterRemove(SbSocketWaiter waiter, SbSocket socket)
 ```
 
-### SbSocketWaiterWait ###
+### SbSocketWaiterWait
 
 Waits on all registered sockets, calling the registered callbacks if and when
 the corresponding sockets become ready for an interested operation. This version
 exits only after SbSocketWaiterWakeUp() is called. This function should only be
 called on the thread that waits on this waiter.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSocketWaiterWait(SbSocketWaiter waiter)
 ```
 
-### SbSocketWaiterWaitTimed ###
+### SbSocketWaiterWaitTimed
 
 Behaves similarly to SbSocketWaiterWait(), but this function also causes
 `waiter` to exit on its own after at least `duration` has passed if
@@ -207,13 +207,13 @@
 function may wait longer than `duration`, such as if the timeout expires while a
 callback is being fired.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketWaiterResult SbSocketWaiterWaitTimed(SbSocketWaiter waiter, SbTime duration)
 ```
 
-### SbSocketWaiterWakeUp ###
+### SbSocketWaiterWakeUp
 
 Wakes up `waiter` once. This is the only thread-safe waiter function. It can can
 be called from a SbSocketWaiterCallback to wake up its own waiter, and it can
@@ -230,7 +230,7 @@
 
 `waiter`: The socket waiter to be woken up.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSocketWaiterWakeUp(SbSocketWaiter waiter)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/speech_synthesis.md b/cobalt/site/docs/reference/starboard/modules/15/speech_synthesis.md
index 1622318..0bd6e65 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/speech_synthesis.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/speech_synthesis.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: speech_synthesis.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `speech_synthesis.h`
 
 A basic text-to-speech API intended to be used for audio accessibility.
 
@@ -11,29 +11,29 @@
 Note that these functions do not have to be thread-safe. They must only be
 called from a single application thread.
 
-## Functions ##
+## Functions
 
-### SbSpeechSynthesisCancel ###
+### SbSpeechSynthesisCancel
 
 Cancels all speaking and queued speech synthesis audio. Must return immediately.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSpeechSynthesisCancel()
 ```
 
-### SbSpeechSynthesisIsSupported ###
+### SbSpeechSynthesisIsSupported
 
 Returns whether the platform supports speech synthesis
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSpeechSynthesisIsSupported()
 ```
 
-### SbSpeechSynthesisSpeak ###
+### SbSpeechSynthesisSpeak
 
 Enqueues `text`, a UTF-8 string, to be spoken. Returns immediately.
 
@@ -44,7 +44,7 @@
 the current speaking should continue and this new text should be queued to play
 when the previous utterances are complete.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSpeechSynthesisSpeak(const char *text)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/storage.md b/cobalt/site/docs/reference/starboard/modules/15/storage.md
index db7e950..5c2b962 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/storage.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/storage.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: storage.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `storage.h`
 
 Defines a user-based Storage API. This is a simple, all-at-once BLOB storage and
 retrieval API that is intended for robust long-term, per-user storage. Some
@@ -15,27 +15,27 @@
 These APIs are NOT expected to be thread-safe, so either call them from a single
 thread, or perform proper synchronization around all calls.
 
-## Macros ##
+## Macros
 
-### kSbStorageInvalidRecord ###
+### kSbStorageInvalidRecord
 
 Well-defined value for an invalid storage record handle.
 
-## Typedefs ##
+## Typedefs
 
-### SbStorageRecord ###
+### SbStorageRecord
 
 A handle to an open storage record.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbStorageRecordPrivate* SbStorageRecord
 ```
 
-## Functions ##
+## Functions
 
-### SbStorageCloseRecord ###
+### SbStorageCloseRecord
 
 Closes `record`, synchronously ensuring that all written data is flushed. This
 function performs blocking I/O on the calling thread.
@@ -47,13 +47,13 @@
 `record`: The storage record to close. `record` is invalid after this point, and
 subsequent calls referring to `record` will fail.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbStorageCloseRecord(SbStorageRecord record)
 ```
 
-### SbStorageDeleteRecord ###
+### SbStorageDeleteRecord
 
 Deletes the `SbStorageRecord` for `user` named `name`. The return value
 indicates whether the record existed and was successfully deleted. If the record
@@ -68,36 +68,36 @@
 `user`: The user for whom the record will be deleted. `name`: The filesystem-
 safe name of the record to open.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbStorageDeleteRecord(SbUser user, const char *name)
 ```
 
-### SbStorageGetRecordSize ###
+### SbStorageGetRecordSize
 
 Returns the size of `record`, or `-1` if there is an error. This function
 performs blocking I/O on the calling thread.
 
 `record`: The record to retrieve the size of.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbStorageGetRecordSize(SbStorageRecord record)
 ```
 
-### SbStorageIsValidRecord ###
+### SbStorageIsValidRecord
 
 Returns whether the given storage record handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbStorageIsValidRecord(SbStorageRecord record)
 ```
 
-### SbStorageOpenRecord ###
+### SbStorageOpenRecord
 
 Opens and returns the SbStorageRecord for `user` named `name`, blocking I/O on
 the calling thread until the open is completed. If `user` is not a valid
@@ -111,13 +111,13 @@
 `user`: The user for which the storage record will be opened. `name`: The
 filesystem-safe name of the record to open.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbStorageRecord SbStorageOpenRecord(SbUser user, const char *name)
 ```
 
-### SbStorageReadRecord ###
+### SbStorageReadRecord
 
 Reads up to `data_size` bytes from `record`, starting at the beginning of the
 record. The function returns the actual number of bytes read, which must be <=
@@ -128,13 +128,13 @@
 `record`: The record to be read. `out_data`: The data read from the record.
 `data_size`: The amount of data, in bytes, to read.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbStorageReadRecord(SbStorageRecord record, char *out_data, int64_t data_size)
 ```
 
-### SbStorageWriteRecord ###
+### SbStorageWriteRecord
 
 Replaces the data in `record` with `data_size` bytes from `data`. This function
 always deletes any previous data in that record. The return value indicates
@@ -151,7 +151,7 @@
 `record`: The record to be written to. `data`: The data to write to the record.
 `data_size`: The amount of `data`, in bytes, to write to the record.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbStorageWriteRecord(SbStorageRecord record, const char *data, int64_t data_size)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/string.md b/cobalt/site/docs/reference/starboard/modules/15/string.md
index 685f5e8..3fed809 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/string.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/string.md
@@ -1,13 +1,13 @@
----
-layout: doc
-title: "Starboard Module Reference: string.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `string.h`
 
 Defines functions for interacting with c-style strings.
 
-## Functions ##
+## Functions
 
-### SbStringCompareNoCase ###
+### SbStringCompareNoCase
 
 Compares two strings, ignoring differences in case. The return value is:
 
@@ -21,13 +21,13 @@
 
 `string1`: The first string to compare. `string2`: The second string to compare.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbStringCompareNoCase(const char *string1, const char *string2)
 ```
 
-### SbStringCompareNoCaseN ###
+### SbStringCompareNoCaseN
 
 Compares the first `count` characters of two strings, ignoring differences in
 case. The return value is:
@@ -43,13 +43,13 @@
 `string1`: The first string to compare. `string2`: The second string to compare.
 `count`: The number of characters to compare.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbStringCompareNoCaseN(const char *string1, const char *string2, size_t count)
 ```
 
-### SbStringDuplicate ###
+### SbStringDuplicate
 
 Copies `source` into a buffer that is allocated by this function and that can be
 freed with SbMemoryDeallocate. This function is meant to be a drop-in
@@ -57,13 +57,13 @@
 
 `source`: The string to be copied.
 
-#### Declaration ####
+#### Declaration
 
 ```
 char* SbStringDuplicate(const char *source)
 ```
 
-### SbStringFormat ###
+### SbStringFormat
 
 Produces a string formatted with `format` and `arguments`, placing as much of
 the result that will fit into `out_buffer`. The return value specifies the
@@ -76,13 +76,13 @@
 The size of `out_buffer`. `format`: A string that specifies how the data should
 be formatted. `arguments`: Variable arguments used in the string.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbStringFormat(char *out_buffer, size_t buffer_size, const char *format, va_list arguments) SB_PRINTF_FORMAT(3
 ```
 
-### SbStringFormatF ###
+### SbStringFormatF
 
 An inline wrapper of SbStringFormat that converts from ellipsis to va_args. This
 function is meant to be a drop-in replacement for `snprintf`.
@@ -91,13 +91,13 @@
 The size of `out_buffer`. `format`: A string that specifies how the data should
 be formatted. `...`: Arguments used in the string.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int static int static int SbStringFormatF(char *out_buffer, size_t buffer_size, const char *format,...) SB_PRINTF_FORMAT(3
 ```
 
-### SbStringFormatUnsafeF ###
+### SbStringFormatUnsafeF
 
 An inline wrapper of SbStringFormat that is meant to be a drop-in replacement
 for the unsafe but commonly used `sprintf`.
@@ -106,13 +106,13 @@
 string that specifies how the data should be formatted. `...`: Arguments used in
 the string.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int static int SbStringFormatUnsafeF(char *out_buffer, const char *format,...) SB_PRINTF_FORMAT(2
 ```
 
-### SbStringFormatWide ###
+### SbStringFormatWide
 
 This function is identical to SbStringFormat, but is for wide characters. It is
 meant to be a drop-in replacement for `vswprintf`.
@@ -121,13 +121,13 @@
 The size of `out_buffer`. `format`: A string that specifies how the data should
 be formatted. `arguments`: Variable arguments used in the string.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbStringFormatWide(wchar_t *out_buffer, size_t buffer_size, const wchar_t *format, va_list arguments)
 ```
 
-### SbStringFormatWideF ###
+### SbStringFormatWideF
 
 An inline wrapper of SbStringFormatWide that converts from ellipsis to
 `va_args`.
@@ -136,13 +136,13 @@
 The size of `out_buffer`. `format`: A string that specifies how the data should
 be formatted. `...`: Arguments used in the string.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int SbStringFormatWideF(wchar_t *out_buffer, size_t buffer_size, const wchar_t *format,...)
 ```
 
-### SbStringScan ###
+### SbStringScan
 
 Scans `buffer` for `pattern`, placing the extracted values in `arguments`. The
 return value specifies the number of successfully matched items, which may be
@@ -154,20 +154,20 @@
 for in `buffer`. `arguments`: Values matching `pattern` that were extracted from
 `buffer`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbStringScan(const char *buffer, const char *pattern, va_list arguments)
 ```
 
-### SbStringScanF ###
+### SbStringScanF
 
 An inline wrapper of SbStringScan that converts from ellipsis to `va_args`. This
 function is meant to be a drop-in replacement for `sscanf`. `buffer`: The string
 to scan for the pattern. `pattern`: The string to search for in `buffer`. `...`:
 Values matching `pattern` that were extracted from `buffer`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int SbStringScanF(const char *buffer, const char *pattern,...)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/system.md b/cobalt/site/docs/reference/starboard/modules/15/system.md
index 32fd303..86437a3 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/system.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/system.md
@@ -1,21 +1,21 @@
----
-layout: doc
-title: "Starboard Module Reference: system.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `system.h`
 
 Defines a broad set of APIs that allow the client application to query build and
 runtime properties of the enclosing system.
 
-## Enums ##
+## Enums
 
-### SbSystemCapabilityId ###
+### SbSystemCapabilityId
 
 Runtime capabilities are boolean properties of a platform that can't be
 determined at compile-time. They may vary from device to device, but they will
 not change over the course of a single execution. They often specify particular
 behavior of other APIs within the bounds of their operating range.
 
-#### Values ####
+#### Values
 
 *   `kSbSystemCapabilityReversedEnterAndBack`
 
@@ -26,11 +26,11 @@
     only if) a system has this capability will SbSystemGetTotalGPUMemory() and
     SbSystemGetUsedGPUMemory() be valid to call.
 
-### SbSystemPathId ###
+### SbSystemPathId
 
 Enumeration of special paths that the platform can define.
 
-#### Values ####
+#### Values
 
 *   `kSbSystemPathContentDirectory`
 
@@ -66,22 +66,22 @@
     for storing the updates. See
     starboard/doc/evergreen/cobalt_evergreen_overview.md
 
-### SbSystemPlatformErrorResponse ###
+### SbSystemPlatformErrorResponse
 
 Possible responses for `SbSystemPlatformErrorCallback`.
 
-#### Values ####
+#### Values
 
 *   `kSbSystemPlatformErrorResponsePositive`
 *   `kSbSystemPlatformErrorResponseNegative`
 *   `kSbSystemPlatformErrorResponseCancel`
 
-### SbSystemPlatformErrorType ###
+### SbSystemPlatformErrorType
 
 Enumeration of possible values for the `type` parameter passed to the
 `SbSystemRaisePlatformError` function.
 
-#### Values ####
+#### Values
 
 *   `kSbSystemPlatformErrorTypeConnectionError`
 
@@ -90,12 +90,12 @@
     `kSbSystemPlatformErrorResponsePositive` then the request should be retried,
     otherwise the app should be stopped.
 
-### SbSystemPropertyId ###
+### SbSystemPropertyId
 
 System properties that can be queried for. Many of these are used in User-Agent
 string generation.
 
-#### Values ####
+#### Values
 
 *   `kSbSystemPropertyCertificationScope`
 
@@ -156,9 +156,9 @@
     Type of the device, e.g. such as "TV", "STB", "OTT" Please see Youtube
     Technical requirements for a full list of allowed values
 
-## Typedefs ##
+## Typedefs
 
-### SbSystemComparator ###
+### SbSystemComparator
 
 Pointer to a function to compare two items. The return value uses standard
 `*cmp` semantics:
@@ -171,23 +171,23 @@
 
 `a`: The first value to compare. `b`: The second value to compare.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int(* SbSystemComparator) (const void *a, const void *b)
 ```
 
-### SbSystemError ###
+### SbSystemError
 
 A type that can represent a system error code across all Starboard platforms.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int SbSystemError
 ```
 
-### SbSystemPlatformErrorCallback ###
+### SbSystemPlatformErrorCallback
 
 Type of callback function that may be called in response to an error
 notification from `SbSystemRaisePlatformError`. `response` is a code to indicate
@@ -195,36 +195,36 @@
 the error. `user_data` is the opaque pointer that was passed to the call to
 `SbSystemRaisePlatformError`.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbSystemPlatformErrorCallback) (SbSystemPlatformErrorResponse response, void *user_data)
 ```
 
-## Functions ##
+## Functions
 
-### SbSystemBreakIntoDebugger ###
+### SbSystemBreakIntoDebugger
 
 Breaks the current program into the debugger, if a debugger is attached. If a
 debugger is not attached, this function aborts the program.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SB_NORETURN void SbSystemBreakIntoDebugger()
 ```
 
-### SbSystemClearLastError ###
+### SbSystemClearLastError
 
 Clears the last error set by a Starboard call in the current thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemClearLastError()
 ```
 
-### SbSystemGetErrorString ###
+### SbSystemGetErrorString
 
 Generates a human-readable string for an error. The return value specifies the
 total desired length of the string.
@@ -233,13 +233,13 @@
 The generated string. This value may be null, and it is always terminated with a
 null byte. `string_length`: The maximum length of the error string.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbSystemGetErrorString(SbSystemError error, char *out_string, int string_length)
 ```
 
-### SbSystemGetExtension ###
+### SbSystemGetExtension
 
 Returns pointer to a constant global struct implementing the extension named
 `name`, if it is implemented. Otherwise return NULL. The `name` string must not
@@ -261,25 +261,25 @@
 ignored. As the version of extensions are incremented, fields may be added to
 the end of the struct, but never removed (only deprecated).
 
-#### Declaration ####
+#### Declaration
 
 ```
 const void* SbSystemGetExtension(const char *name)
 ```
 
-### SbSystemGetLastError ###
+### SbSystemGetLastError
 
 Gets the last platform-specific error code produced by any Starboard call in the
 current thread for diagnostic purposes. Semantic reactions to Starboard function
 call results should be modeled explicitly.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSystemError SbSystemGetLastError()
 ```
 
-### SbSystemGetLocaleId ###
+### SbSystemGetLocaleId
 
 Gets the system's current POSIX-style Locale ID. The locale represents the
 location, language, and cultural conventions that the system wants to use, which
@@ -296,25 +296,25 @@
 
 For more information than you probably want about POSIX locales, see: [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html](http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html)
 
-#### Declaration ####
+#### Declaration
 
 ```
 const char* SbSystemGetLocaleId()
 ```
 
-### SbSystemGetNumberOfProcessors ###
+### SbSystemGetNumberOfProcessors
 
 Returns the number of processor cores available to this application. If the
 process is sandboxed to a subset of the physical cores, the function returns
 that sandboxed limit.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbSystemGetNumberOfProcessors()
 ```
 
-### SbSystemGetProperty ###
+### SbSystemGetProperty
 
 Retrieves the platform-defined system property specified by `property_id` and
 places its value as a zero-terminated string into the user-allocated `out_value`
@@ -335,13 +335,13 @@
 defined system property specified by `property_id`. `value_length`: The length
 of the system property.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemGetProperty(SbSystemPropertyId property_id, char *out_value, int value_length)
 ```
 
-### SbSystemGetRandomData ###
+### SbSystemGetRandomData
 
 A cryptographically secure random number generator that produces an arbitrary,
 non-negative number of `buffer_size` random, non-negative bytes. The generated
@@ -350,24 +350,24 @@
 `out_buffer`: A pointer for the generated random number. This value must not be
 null. `buffer_size`: The size of the random number, in bytes.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemGetRandomData(void *out_buffer, int buffer_size)
 ```
 
-### SbSystemGetRandomUInt64 ###
+### SbSystemGetRandomUInt64
 
 A cryptographically secure random number generator that gets 64 random bits and
 returns them as an `uint64_t`. This function does not require manual seeding.
 
-#### Declaration ####
+#### Declaration
 
 ```
 uint64_t SbSystemGetRandomUInt64()
 ```
 
-### SbSystemGetStack ###
+### SbSystemGetStack
 
 Places up to `stack_size` instruction pointer addresses of the current execution
 stack into `out_stack`. The return value specifies the number of entries added.
@@ -384,62 +384,62 @@
 `stack_size`: The maximum number of instruction pointer addresses to be placed
 into `out_stack` from the current execution stack.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbSystemGetStack(void **out_stack, int stack_size)
 ```
 
-### SbSystemGetTotalCPUMemory ###
+### SbSystemGetTotalCPUMemory
 
 Returns the total CPU memory (in bytes) potentially available to this
 application. If the process is sandboxed to a maximum allowable limit, the
 function returns the lesser of the physical and sandbox limits.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbSystemGetTotalCPUMemory()
 ```
 
-### SbSystemGetTotalGPUMemory ###
+### SbSystemGetTotalGPUMemory
 
 Returns the total GPU memory (in bytes) available for use by this application.
 This function may only be called the return value for calls to
 SbSystemHasCapability(kSbSystemCapabilityCanQueryGPUMemoryStats) is `true`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbSystemGetTotalGPUMemory()
 ```
 
-### SbSystemGetUsedCPUMemory ###
+### SbSystemGetUsedCPUMemory
 
 Returns the total physical CPU memory (in bytes) used by this application. This
 value should always be less than (or, in particularly exciting situations, equal
 to) SbSystemGetTotalCPUMemory().
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbSystemGetUsedCPUMemory()
 ```
 
-### SbSystemGetUsedGPUMemory ###
+### SbSystemGetUsedGPUMemory
 
 Returns the current amount of GPU memory (in bytes) that is currently being used
 by this application. This function may only be called if the return value for
 calls to SbSystemHasCapability(kSbSystemCapabilityCanQueryGPUMemoryStats) is
 `true`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbSystemGetUsedGPUMemory()
 ```
 
-### SbSystemHasCapability ###
+### SbSystemHasCapability
 
 Returns whether the platform has the runtime capability specified by
 `capability_id`. Returns false for any unknown capabilities. This implementation
@@ -447,48 +447,48 @@
 
 `capability_id`: The runtime capability to check.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemHasCapability(SbSystemCapabilityId capability_id)
 ```
 
-### SbSystemHideSplashScreen ###
+### SbSystemHideSplashScreen
 
 Hides the system splash screen on systems that support a splash screen that is
 displayed while the application is loading. This function may be called from any
 thread and must be idempotent.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemHideSplashScreen()
 ```
 
-### SbSystemIsDebuggerAttached ###
+### SbSystemIsDebuggerAttached
 
 Attempts to determine whether the current program is running inside or attached
 to a debugger. The function returns `false` if neither of those cases is true.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemIsDebuggerAttached()
 ```
 
-### SbSystemNetworkIsDisconnected ###
+### SbSystemNetworkIsDisconnected
 
 Returns if the device is disconnected from network. "Disconnected" is chosen
 over connected because disconnection can be determined with more certainty than
 connection usually.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemNetworkIsDisconnected()
 ```
 
-### SbSystemRaisePlatformError ###
+### SbSystemRaisePlatformError
 
 Cobalt calls this function to notify the platform that an error has occurred in
 the application that the platform may need to handle. The platform is expected
@@ -510,13 +510,13 @@
 pointer that the platform should pass as an argument to the callback function,
 if it is called.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemRaisePlatformError(SbSystemPlatformErrorType type, SbSystemPlatformErrorCallback callback, void *user_data)
 ```
 
-### SbSystemRequestBlur ###
+### SbSystemRequestBlur
 
 Requests that the application move into the Blurred state at the next convenient
 point. This should roughly correspond to "unfocused application" in a
@@ -526,13 +526,13 @@
 the application. Before the `kSbEventTypeBlur` event is dispatched, some work
 may continue to be done, and unrelated system events may be dispatched.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemRequestBlur()
 ```
 
-### SbSystemRequestConceal ###
+### SbSystemRequestConceal
 
 Requests that the application move into the Concealed state at the next
 convenient point. This should roughly correspond to "minimization" in a
@@ -547,13 +547,13 @@
 running background tasks. The expectation is that an external system event will
 bring the application out of the Concealed state.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemRequestConceal()
 ```
 
-### SbSystemRequestFocus ###
+### SbSystemRequestFocus
 
 Requests that the application move into the Started state at the next convenient
 point. This should roughly correspond to a "focused application" in a
@@ -564,13 +564,13 @@
 the application. Before `kSbEventTypeFocus` is dispatched, some work may
 continue to be done, and unrelated system events may be dispatched.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemRequestFocus()
 ```
 
-### SbSystemRequestFreeze ###
+### SbSystemRequestFreeze
 
 Requests that the application move into the Frozen state at the next convenient
 point.
@@ -583,13 +583,13 @@
 The expectation is that an external system event will bring the application out
 of the Frozen state.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemRequestFreeze()
 ```
 
-### SbSystemRequestReveal ###
+### SbSystemRequestReveal
 
 Requests that the application move into the Blurred state at the next convenient
 point. This should roughly correspond to a "focused application" in a
@@ -600,13 +600,13 @@
 the application. Before the `kSbEventTypeReveal` event is dispatched, some work
 may continue to be done, and unrelated system events may be dispatched.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemRequestReveal()
 ```
 
-### SbSystemRequestStop ###
+### SbSystemRequestStop
 
 Requests that the application be terminated gracefully at the next convenient
 point. In the meantime, some work may continue to be done, and unrelated system
@@ -617,13 +617,13 @@
 `error_level`: An integer that serves as the return value for the process that
 is eventually terminated as a result of a call to this function.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemRequestStop(int error_level)
 ```
 
-### SbSystemSignWithCertificationSecretKey ###
+### SbSystemSignWithCertificationSecretKey
 
 Computes a HMAC-SHA256 digest of `message` into `digest` using the application's
 certification secret. The `message` and the `digest` pointers must not be NULL.
@@ -633,13 +633,13 @@
 an error, or if it is not implemented. In this case the contents of `digest`
 will be undefined.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemSignWithCertificationSecretKey(const uint8_t *message, size_t message_size_in_bytes, uint8_t *digest, size_t digest_size_in_bytes)
 ```
 
-### SbSystemSupportsResume ###
+### SbSystemSupportsResume
 
 Returns false if the platform doesn't need resume after suspend support. In such
 case Cobalt will free up the resource it retains for resume after suspend. Note
@@ -647,13 +647,13 @@
 kSbEventTypeResume to the event handler. The return value of this function
 cannot change over the life time of the application.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemSupportsResume()
 ```
 
-### SbSystemSymbolize ###
+### SbSystemSymbolize
 
 Looks up `address` as an instruction pointer and places up to (`buffer_size -
 1`) characters of the symbol associated with it in `out_buffer`, which must not
@@ -665,7 +665,7 @@
 This function is used in crash signal handlers and, therefore, it must be async-
 signal-safe on platforms that support signals.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemSymbolize(const void *address, char *out_buffer, int buffer_size)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/thread.md b/cobalt/site/docs/reference/starboard/modules/15/thread.md
index 1191e9a..56c7898 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/thread.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/thread.md
@@ -1,35 +1,35 @@
----
-layout: doc
-title: "Starboard Module Reference: thread.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `thread.h`
 
 Defines functionality related to thread creation and cleanup.
 
-## Macros ##
+## Macros
 
-### kSbThreadContextInvalid ###
+### kSbThreadContextInvalid
 
 Well-defined value for an invalid thread context.
 
-### kSbThreadInvalidId ###
+### kSbThreadInvalidId
 
 Well-defined constant value to mean "no thread ID."
 
-### kSbThreadLocalKeyInvalid ###
+### kSbThreadLocalKeyInvalid
 
 Well-defined constant value to mean "no thread local key."
 
-### kSbThreadNoAffinity ###
+### kSbThreadNoAffinity
 
 Well-defined constant value to mean "no affinity."
 
-### kSbThreadSamplerInvalid ###
+### kSbThreadSamplerInvalid
 
 Well-defined value for an invalid thread sampler.
 
-## Enums ##
+## Enums
 
-### SbThreadPriority ###
+### SbThreadPriority
 
 A spectrum of thread priorities. Platforms map them appropriately to their own
 priority system. Note that scheduling is platform-specific, and what these
@@ -39,7 +39,7 @@
 a given platform. The only guarantee is that each lower priority should be
 treated less-than-or-equal-to a higher priority.
 
-#### Values ####
+#### Values
 
 *   `kSbThreadPriorityLowest`
 
@@ -79,116 +79,116 @@
     inherit the priority of the spawning thread, or it may mean a specific
     default priority, or it may mean something else, depending on the platform.
 
-## Typedefs ##
+## Typedefs
 
-### SbThread ###
+### SbThread
 
 An opaque handle to a thread type.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void* SbThread
 ```
 
-### SbThreadAffinity ###
+### SbThreadAffinity
 
 Type for thread core affinity. This generally will be a single cpu (or core or
 hyperthread) identifier. Some platforms may not support affinity, and some may
 have specific rules about how it must be used.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int32_t SbThreadAffinity
 ```
 
-### SbThreadContext ###
+### SbThreadContext
 
 A handle to the context of a frozen thread.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbThreadContextPrivate* SbThreadContext
 ```
 
-### SbThreadEntryPoint ###
+### SbThreadEntryPoint
 
 Function pointer type for SbThreadCreate. `context` is a pointer-sized bit of
 data passed in from the calling thread.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void*(* SbThreadEntryPoint) (void *context)
 ```
 
-### SbThreadId ###
+### SbThreadId
 
 An ID type that is unique per thread.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int32_t SbThreadId
 ```
 
-### SbThreadLocalDestructor ###
+### SbThreadLocalDestructor
 
 Function pointer type for Thread-Local destructors.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbThreadLocalDestructor) (void *value)
 ```
 
-### SbThreadLocalKey ###
+### SbThreadLocalKey
 
 A handle to a thread-local key.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbThreadLocalKeyPrivate* SbThreadLocalKey
 ```
 
-### SbThreadSampler ###
+### SbThreadSampler
 
 A handle to a thread sampler.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbThreadSamplerPrivate* SbThreadSampler
 ```
 
-## Functions ##
+## Functions
 
-### SbThreadContextGetPointer ###
+### SbThreadContextGetPointer
 
 Gets the specified pointer-type `property` from the specified `context`. Returns
 `true` if successful and `out_value` has been modified, otherwise returns
 `false` and `out_value` is not modified.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbThreadContextGetPointer(SbThreadContext context, SbThreadContextProperty property, void **out_value)
 ```
 
-### SbThreadContextIsValid ###
+### SbThreadContextIsValid
 
 Returns whether the given thread context is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadContextIsValid(SbThreadContext context)
 ```
 
-### SbThreadCreate ###
+### SbThreadCreate
 
 Creates a new thread, which starts immediately.
 
@@ -214,13 +214,13 @@
 executed on the newly created thread. `context`: This value will be passed to
 the `entry_point` function.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbThread SbThreadCreate(int64_t stack_size, SbThreadPriority priority, SbThreadAffinity affinity, bool joinable, const char *name, SbThreadEntryPoint entry_point, void *context)
 ```
 
-### SbThreadCreateLocalKey ###
+### SbThreadCreateLocalKey
 
 Creates and returns a new, unique key for thread local data. If the function
 does not succeed, the function returns `kSbThreadLocalKeyInvalid`.
@@ -233,13 +233,13 @@
 `destructor`: A pointer to a function. The value may be NULL if no clean up is
 needed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbThreadLocalKey SbThreadCreateLocalKey(SbThreadLocalDestructor destructor)
 ```
 
-### SbThreadDestroyLocalKey ###
+### SbThreadDestroyLocalKey
 
 Destroys thread local data for the specified key. The function is a no-op if the
 key is invalid (kSbThreadLocalKeyInvalid`) or has already been destroyed. This
@@ -247,13 +247,13 @@
 
 `key`: The key for which to destroy thread local data.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadDestroyLocalKey(SbThreadLocalKey key)
 ```
 
-### SbThreadDetach ###
+### SbThreadDetach
 
 Detaches `thread`, which prevents it from being joined. This is sort of like a
 non-blocking join. This function is a no-op if the thread is already detached or
@@ -261,33 +261,33 @@
 
 `thread`: The thread to be detached.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadDetach(SbThread thread)
 ```
 
-### SbThreadGetCurrent ###
+### SbThreadGetCurrent
 
 Returns the handle of the currently executing thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbThread SbThreadGetCurrent()
 ```
 
-### SbThreadGetId ###
+### SbThreadGetId
 
 Returns the Thread ID of the currently executing thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbThreadId SbThreadGetId()
 ```
 
-### SbThreadGetLocalValue ###
+### SbThreadGetLocalValue
 
 Returns the pointer-sized value for `key` in the currently executing thread's
 local storage. Returns `NULL` if key is `kSbThreadLocalKeyInvalid` or if the key
@@ -295,97 +295,97 @@
 
 `key`: The key for which to return the value.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbThreadGetLocalValue(SbThreadLocalKey key)
 ```
 
-### SbThreadGetName ###
+### SbThreadGetName
 
 Returns the debug name of the currently executing thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadGetName(char *buffer, int buffer_size)
 ```
 
-### SbThreadIsCurrent ###
+### SbThreadIsCurrent
 
 Returns whether `thread` is the current thread.
 
 `thread`: The thread to check.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadIsCurrent(SbThread thread)
 ```
 
-### SbThreadIsEqual ###
+### SbThreadIsEqual
 
 Indicates whether `thread1` and `thread2` refer to the same thread.
 
 `thread1`: The first thread to compare. `thread2`: The second thread to compare.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbThreadIsEqual(SbThread thread1, SbThread thread2)
 ```
 
-### SbThreadIsValid ###
+### SbThreadIsValid
 
 Returns whether the given thread handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadIsValid(SbThread thread)
 ```
 
-### SbThreadIsValidAffinity ###
+### SbThreadIsValidAffinity
 
 Returns whether the given thread affinity is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadIsValidAffinity(SbThreadAffinity affinity)
 ```
 
-### SbThreadIsValidId ###
+### SbThreadIsValidId
 
 Returns whether the given thread ID is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadIsValidId(SbThreadId id)
 ```
 
-### SbThreadIsValidLocalKey ###
+### SbThreadIsValidLocalKey
 
 Returns whether the given thread local variable key is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadIsValidLocalKey(SbThreadLocalKey key)
 ```
 
-### SbThreadIsValidPriority ###
+### SbThreadIsValidPriority
 
 Returns whether the given thread priority is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadIsValidPriority(SbThreadPriority priority)
 ```
 
-### SbThreadJoin ###
+### SbThreadJoin
 
 Joins the thread on which this function is called with joinable `thread`. This
 function blocks the caller until the designated thread exits, and then cleans up
@@ -403,36 +403,36 @@
 then the SbThreadJoin function populates it with the return value of the
 thread's `main` function.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbThreadJoin(SbThread thread, void **out_return)
 ```
 
-### SbThreadSamplerCreate ###
+### SbThreadSamplerCreate
 
 Creates a new thread sampler for the specified `thread`.
 
 If successful, this function returns the newly created handle. If unsuccessful,
 this function returns `kSbThreadSamplerInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbThreadSampler SbThreadSamplerCreate(SbThread thread)
 ```
 
-### SbThreadSamplerDestroy ###
+### SbThreadSamplerDestroy
 
 Destroys the `sampler` and frees whatever resources it was using.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadSamplerDestroy(SbThreadSampler sampler)
 ```
 
-### SbThreadSamplerFreeze ###
+### SbThreadSamplerFreeze
 
 Suspends execution of the thread that `sampler` was created for.
 
@@ -440,47 +440,47 @@
 from which properties may be read while the thread remains frozen. If
 unsuccessful, this function returns `kSbThreadContextInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbThreadContext SbThreadSamplerFreeze(SbThreadSampler sampler)
 ```
 
-### SbThreadSamplerIsSupported ###
+### SbThreadSamplerIsSupported
 
 Whether the current platform supports thread sampling. The result of this
 function must not change over the course of the program, which means that the
 results of this function may be cached indefinitely. If this returns false,
 `SbThreadSamplerCreate` will return an invalid sampler.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbThreadSamplerIsSupported()
 ```
 
-### SbThreadSamplerIsValid ###
+### SbThreadSamplerIsValid
 
 Returns whether the given thread sampler is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadSamplerIsValid(SbThreadSampler sampler)
 ```
 
-### SbThreadSamplerThaw ###
+### SbThreadSamplerThaw
 
 Resumes execution of the thread that `sampler` was created for. This invalidates
 the context returned from `SbThreadSamplerFreeze`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbThreadSamplerThaw(SbThreadSampler sampler)
 ```
 
-### SbThreadSetLocalValue ###
+### SbThreadSetLocalValue
 
 Sets the pointer-sized value for `key` in the currently executing thread's local
 storage. The return value indicates whether `key` is valid and has not already
@@ -489,26 +489,26 @@
 `key`: The key for which to set the key value. `value`: The new pointer-sized
 key value.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbThreadSetLocalValue(SbThreadLocalKey key, void *value)
 ```
 
-### SbThreadSetName ###
+### SbThreadSetName
 
 Sets the debug name of the currently executing thread by copying the specified
 name string.
 
 `name`: The name to assign to the thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadSetName(const char *name)
 ```
 
-### SbThreadSleep ###
+### SbThreadSleep
 
 Sleeps the currently executing thread.
 
@@ -516,17 +516,17 @@
 executing thread should sleep. The function is a no-op if this value is negative
 or `0`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadSleep(SbTime duration)
 ```
 
-### SbThreadYield ###
+### SbThreadYield
 
 Yields the currently executing thread, so another thread has a chance to run.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadYield()
diff --git a/cobalt/site/docs/reference/starboard/modules/15/time.md b/cobalt/site/docs/reference/starboard/modules/15/time.md
index 19a7e4f..a6228cc 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/time.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/time.md
@@ -1,59 +1,59 @@
----
-layout: doc
-title: "Starboard Module Reference: time.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `time.h`
 
 Provides access to system time and timers.
 
-## Macros ##
+## Macros
 
-### kSbTimeDay ###
+### kSbTimeDay
 
 One day in SbTime units (microseconds).
 
-### kSbTimeHour ###
+### kSbTimeHour
 
 One hour in SbTime units (microseconds).
 
-### kSbTimeMax ###
+### kSbTimeMax
 
 The maximum value of an SbTime.
 
-### kSbTimeMillisecond ###
+### kSbTimeMillisecond
 
 One millisecond in SbTime units (microseconds).
 
-### kSbTimeMinute ###
+### kSbTimeMinute
 
 One minute in SbTime units (microseconds).
 
-### kSbTimeNanosecondsPerMicrosecond ###
+### kSbTimeNanosecondsPerMicrosecond
 
 How many nanoseconds in one SbTime unit (microseconds).
 
-### kSbTimeSecond ###
+### kSbTimeSecond
 
 One second in SbTime units (microseconds).
 
-### kSbTimeToPosixDelta ###
+### kSbTimeToPosixDelta
 
 A term that can be added to an SbTime to convert it into the number of
 microseconds since the POSIX epoch.
 
-## Typedefs ##
+## Typedefs
 
-### SbTime ###
+### SbTime
 
 The number of microseconds since the epoch of January 1, 1601 UTC, or the number
 of microseconds between two times. Always microseconds, ALWAYS UTC.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int64_t SbTime
 ```
 
-### SbTimeMonotonic ###
+### SbTimeMonotonic
 
 A number of microseconds from some point. The main property of this time is that
 it increases monotonically. It should also be as high-resolution a timer as we
@@ -61,38 +61,38 @@
 without worrying about a system clock adjustment. It's not good for getting the
 wall clock time.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int64_t SbTimeMonotonic
 ```
 
-## Functions ##
+## Functions
 
-### SbTimeFromPosix ###
+### SbTimeFromPosix
 
 Converts microseconds from the POSIX epoch into an `SbTime`.
 
 `time`: A time that measures the number of microseconds since January 1, 1970,
 00:00:00, UTC.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbTime SbTimeFromPosix(int64_t time)
 ```
 
-### SbTimeGetMonotonicNow ###
+### SbTimeGetMonotonicNow
 
 Gets a monotonically increasing time representing right now.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbTimeMonotonic SbTimeGetMonotonicNow()
 ```
 
-### SbTimeGetMonotonicThreadNow ###
+### SbTimeGetMonotonicThreadNow
 
 Gets a monotonically increasing time representing how long the current thread
 has been in the executing state (i.e. not pre-empted nor waiting on an event).
@@ -100,44 +100,44 @@
 execution time between two timestamps. If this is not available then
 SbTimeGetMonotonicNow() should be used.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbTimeMonotonic SbTimeGetMonotonicThreadNow()
 ```
 
-### SbTimeGetNow ###
+### SbTimeGetNow
 
 Gets the current system time as an `SbTime`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbTime SbTimeGetNow()
 ```
 
-### SbTimeIsTimeThreadNowSupported ###
+### SbTimeIsTimeThreadNowSupported
 
 Returns whether the current platform supports time thread now
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbTimeIsTimeThreadNowSupported()
 ```
 
-### SbTimeNarrow ###
+### SbTimeNarrow
 
 Safely narrows a number from a more precise unit to a less precise one. This
 function rounds negative values toward negative infinity.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int64_t SbTimeNarrow(int64_t time, int64_t divisor)
 ```
 
-### SbTimeToPosix ###
+### SbTimeToPosix
 
 Converts `SbTime` into microseconds from the POSIX epoch.
 
@@ -145,7 +145,7 @@
 January 1, 1601, UTC, or that measures the number of microseconds between two
 times.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int64_t SbTimeToPosix(SbTime time)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/time_zone.md b/cobalt/site/docs/reference/starboard/modules/15/time_zone.md
index f9e3fcb..baad375 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/time_zone.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/time_zone.md
@@ -1,46 +1,46 @@
----
-layout: doc
-title: "Starboard Module Reference: time_zone.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `time_zone.h`
 
 Provides access to the system time zone information.
 
-## Typedefs ##
+## Typedefs
 
-### SbTimeZone ###
+### SbTimeZone
 
 The number of minutes west of the Greenwich Prime Meridian, NOT including
 Daylight Savings Time adjustments.
 
-For example: PST/PDT is 480 minutes (28800 seconds, 8 hours).
+For example: America/Los_Angeles is 480 minutes (28800 seconds, 8 hours).
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int SbTimeZone
 ```
 
-## Functions ##
+## Functions
 
-### SbTimeZoneGetCurrent ###
+### SbTimeZoneGetCurrent
 
 Gets the system's current SbTimeZone in minutes.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbTimeZone SbTimeZoneGetCurrent()
 ```
 
-### SbTimeZoneGetName ###
+### SbTimeZoneGetName
 
-Gets a string representation of the current timezone. Note that the string
-representation can either be standard or daylight saving time. The output can be
-of the form: 1) A three-letter abbreviation such as "PST" or "PDT" (preferred).
-2) A time zone identifier such as "America/Los_Angeles" 3) An un-abbreviated
-name such as "Pacific Standard Time".
+Gets a string representation of the current timezone. The format should be in
+the IANA format [https://data.iana.org/time-zones/theory.html#naming](https://data.iana.org/time-zones/theory.html#naming)) .
+Names normally have the form AREA/LOCATION, where AREA is a continent or ocean,
+and LOCATION is a specific location within the area. Typical names are
+'Africa/Cairo', 'America/New_York', and 'Pacific/Honolulu'.
 
-#### Declaration ####
+#### Declaration
 
 ```
 const char* SbTimeZoneGetName()
diff --git a/cobalt/site/docs/reference/starboard/modules/15/types.md b/cobalt/site/docs/reference/starboard/modules/15/types.md
index 90867a6..e1f372c 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/types.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/types.md
@@ -1,15 +1,15 @@
----
-layout: doc
-title: "Starboard Module Reference: types.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `types.h`
 
 Provides a suite of standard types that should be universally available on all
 platforms, specifically focused on explicitly-sized integer types and booleans.
 This module also includes some related ubiquitous definitions like limits of the
 explicitly-sized integer types, and standard pointer and int32 sentinel values.
 
-## Macros ##
+## Macros
 
-### kSbInvalidInt ###
+### kSbInvalidInt
 
 A value that represents an int that is probably invalid.
diff --git a/cobalt/site/docs/reference/starboard/modules/15/ui_navigation.md b/cobalt/site/docs/reference/starboard/modules/15/ui_navigation.md
index a0ecfb1..cb41767 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/ui_navigation.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/ui_navigation.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: ui_navigation.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `ui_navigation.h`
 
 API to allow applications to take advantage of the platform's native UI engine.
 This is mainly to drive the animation of visual elements and to signal which of
@@ -19,20 +19,20 @@
 user interaction. If the navigation item is a container, then the content offset
 will also be queried to determine the placement of its content items.
 
-## Macros ##
+## Macros
 
-### kSbUiNavItemInvalid ###
+### kSbUiNavItemInvalid
 
 Well-defined value for an invalid navigation item.
 
-## Enums ##
+## Enums
 
-### SbUiNavItemType ###
+### SbUiNavItemType
 
 Navigation items may be one of the following types. This must be specified upon
 item creation and may not change during the item's lifespan.
 
-#### Values ####
+#### Values
 
 *   `kSbUiNavItemTypeFocus`
 
@@ -42,29 +42,29 @@
     This is a container of navigation items which can also be containers
     themselves or focusable items. Containers themselves cannot be focused.
 
-## Typedefs ##
+## Typedefs
 
-### SbUiNavItem ###
+### SbUiNavItem
 
 An opaque handle to an implementation-private structure representing a
 navigation item.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbUiNavItemPrivate* SbUiNavItem
 ```
 
-## Structs ##
+## Structs
 
-### SbUiNavCallbacks ###
+### SbUiNavCallbacks
 
 This structure specifies all the callbacks which the platform UI engine should
 invoke for various interaction events on navigation items. These callbacks may
 be invoked from any thread at any frequency. The `callback_context` is the value
 that was passed on creation of the relevant SbUiNavItem.
 
-#### Members ####
+#### Members
 
 *   `void(*onblur)(SbUiNavItem item, void *callback_context)`
 
@@ -77,12 +77,12 @@
     Invoke when an item's content offset is changed. This is only used with
     container items.
 
-### SbUiNavInterface ###
+### SbUiNavInterface
 
 This structure declares the interface to the UI navigation implementation. All
 function pointers must be specified if the platform supports UI navigation.
 
-#### Members ####
+#### Members
 
 *   `SbUiNavItem(*create_item)(SbUiNavItemType type, const SbUiNavCallbacks
     *callbacks, void *callback_context)`
@@ -237,7 +237,7 @@
     Call `update_function` with `context` to perform a series of UI navigation
     changes atomically before returning.
 
-### SbUiNavItemDir ###
+### SbUiNavItemDir
 
 Navigation items of type kSbUiNavItemTypeContainer have directionality. If
 directionality is not specified for a container, it should default to left-to-
@@ -270,12 +270,12 @@
   Bottom-to-top is similar to right-to-left, but for the Y position.
 ```
 
-#### Members ####
+#### Members
 
 *   `bool is_left_to_right`
 *   `bool is_top_to_bottom`
 
-### SbUiNavMatrix2x3 ###
+### SbUiNavMatrix2x3
 
 This represents a 2x3 transform matrix in row-major order.
 
@@ -284,38 +284,38 @@
 ///   | c d ty |
 ```
 
-#### Members ####
+#### Members
 
 *   `float m`
 
-### SbUiNavMatrix4 ###
+### SbUiNavMatrix4
 
 This represents a 4x4 transform matrix in row-major order.
 
-#### Members ####
+#### Members
 
 *   `float m`
 
-## Functions ##
+## Functions
 
-### SbUiNavGetInterface ###
+### SbUiNavGetInterface
 
 Retrieve the platform's UI navigation implementation. If the platform does not
 provide one, then return false without modifying `out_interface`. Otherwise,
 initialize all members of `out_interface` and return true. The `out_interface`
 pointer must not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbUiNavGetInterface(SbUiNavInterface *out_interface)
 ```
 
-### SbUiNavItemIsValid ###
+### SbUiNavItemIsValid
 
 Returns whether the given navigation item handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbUiNavItemIsValid(SbUiNavItem item)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/user.md b/cobalt/site/docs/reference/starboard/modules/15/user.md
index 406e695..309b939 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/user.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/user.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: user.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `user.h`
 
 Defines a user management API. This module defines functions only for managing
 signed-in users. Platforms that do not have users must still implement this API,
@@ -10,19 +10,19 @@
 These APIs are NOT expected to be thread-safe, so either call them from a single
 thread, or perform proper synchronization around all calls.
 
-## Macros ##
+## Macros
 
-### kSbUserInvalid ###
+### kSbUserInvalid
 
 Well-defined value for an invalid user.
 
-## Enums ##
+## Enums
 
-### SbUserPropertyId ###
+### SbUserPropertyId
 
 A set of string properties that can be queried on a user.
 
-#### Values ####
+#### Values
 
 *   `kSbUserPropertyAvatarUrl`
 
@@ -38,21 +38,21 @@
 
     A unique user ID of a user.
 
-## Typedefs ##
+## Typedefs
 
-### SbUser ###
+### SbUser
 
 A handle to a user.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbUserPrivate* SbUser
 ```
 
-## Functions ##
+## Functions
 
-### SbUserGetCurrent ###
+### SbUserGetCurrent
 
 Gets the current primary user, if one exists. This is the user that is
 determined, in a platform-specific way, to be the primary user controlling the
@@ -63,13 +63,13 @@
 It is expected that there will be a unique SbUser per signed-in user, and that
 the referenced objects will persist for the lifetime of the app.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbUser SbUserGetCurrent()
 ```
 
-### SbUserGetProperty ###
+### SbUserGetProperty
 
 Retrieves the value of `property_id` for `user` and places it in `out_value`.
 The function returns:
@@ -83,13 +83,13 @@
 The property for which the data is requested. `out_value`: The retrieved
 property value. `value_size`: The size of the retrieved property value.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbUserGetProperty(SbUser user, SbUserPropertyId property_id, char *out_value, int value_size)
 ```
 
-### SbUserGetPropertySize ###
+### SbUserGetPropertySize
 
 Returns the size of the value of `property_id` for `user`, INCLUDING the
 terminating null character. The function returns `0` if `user` is invalid or if
@@ -98,13 +98,13 @@
 `user`: The user for which property size data is being retrieved. `property_id`:
 The property for which the data is requested.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbUserGetPropertySize(SbUser user, SbUserPropertyId property_id)
 ```
 
-### SbUserGetSignedIn ###
+### SbUserGetSignedIn
 
 Gets a list of up to `users_size` signed-in users and places the results in
 `out_users`. The return value identifies the actual number of signed-in users,
@@ -116,17 +116,17 @@
 `out_users`: Handles for the retrieved users. `users_size`: The maximum number
 of signed-in users to retrieve.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbUserGetSignedIn(SbUser *out_users, int users_size)
 ```
 
-### SbUserIsValid ###
+### SbUserIsValid
 
 Returns whether the given user handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbUserIsValid(SbUser user)
diff --git a/cobalt/site/docs/reference/starboard/modules/15/window.md b/cobalt/site/docs/reference/starboard/modules/15/window.md
index 915e254..acea84d 100644
--- a/cobalt/site/docs/reference/starboard/modules/15/window.md
+++ b/cobalt/site/docs/reference/starboard/modules/15/window.md
@@ -1,40 +1,40 @@
----
-layout: doc
-title: "Starboard Module Reference: window.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `window.h`
 
 Provides functionality to handle Window creation and management.
 
-## Macros ##
+## Macros
 
-### kSbEventOnScreenKeyboardInvalidTicket ###
+### kSbEventOnScreenKeyboardInvalidTicket
 
 System-triggered OnScreenKeyboard events have ticket value
 kSbEventOnScreenKeyboardInvalidTicket.
 
-### kSbWindowInvalid ###
+### kSbWindowInvalid
 
 Well-defined value for an invalid window handle.
 
-## Typedefs ##
+## Typedefs
 
-### SbWindow ###
+### SbWindow
 
 A handle to a window.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbWindowPrivate* SbWindow
 ```
 
-## Structs ##
+## Structs
 
-### SbWindowOptions ###
+### SbWindowOptions
 
 Options that can be requested at window creation time.
 
-#### Members ####
+#### Members
 
 *   `SbWindowSize size`
 
@@ -48,25 +48,25 @@
 
     The name of the window to create.
 
-### SbWindowRect ###
+### SbWindowRect
 
 Defines a rectangle via a point `(x, y)` and a size `(width, height)`. This
 structure is used as output for SbWindowGetOnScreenKeyboardBoundingRect.
 
-#### Members ####
+#### Members
 
 *   `float x`
 *   `float y`
 *   `float width`
 *   `float height`
 
-### SbWindowSize ###
+### SbWindowSize
 
 The size of a window in graphics rendering coordinates. The width and height of
 a window should correspond to the size of the graphics surface used for drawing
 that would be created to back that window.
 
-#### Members ####
+#### Members
 
 *   `int width`
 
@@ -93,9 +93,9 @@
     A value of 0.0f means the ratio could not be determined, it should be
     assumed to be the same as the graphics resolution (i.e. 1.0f).
 
-## Functions ##
+## Functions
 
-### SbWindowBlurOnScreenKeyboard ###
+### SbWindowBlurOnScreenKeyboard
 
 Blur the on screen keyboard. Fire kSbEventTypeOnScreenKeyboardBlurred.
 kSbEventTypeOnScreenKeyboardBlurred has data `ticket`. Calling
@@ -103,13 +103,13 @@
 permitted. Calling SbWindowBlurOnScreenKeyboard while the on screen keyboard is
 not showing does nothing and does not fire any event.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowBlurOnScreenKeyboard(SbWindow window, int ticket)
 ```
 
-### SbWindowCreate ###
+### SbWindowCreate
 
 Creates and returns a new system window with the given `options`, which may be
 `NULL`. The function returns `kSbWindowInvalid` if it cannot create the
@@ -131,25 +131,25 @@
 
 `options`: Options that specify parameters for the window being created.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbWindow SbWindowCreate(const SbWindowOptions *options)
 ```
 
-### SbWindowDestroy ###
+### SbWindowDestroy
 
 Destroys `window`, reclaiming associated resources.
 
 `window`: The `SbWindow` to destroy.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbWindowDestroy(SbWindow window)
 ```
 
-### SbWindowFocusOnScreenKeyboard ###
+### SbWindowFocusOnScreenKeyboard
 
 Focus the on screen keyboard. Fire kSbEventTypeOnScreenKeyboardFocused.
 kSbEventTypeOnScreenKeyboardFocused has data `ticket`. Calling
@@ -157,38 +157,38 @@
 permitted. Calling SbWindowFocusOnScreenKeyboard while the on screen keyboard is
 not showing does nothing and does not fire any event.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowFocusOnScreenKeyboard(SbWindow window, int ticket)
 ```
 
-### SbWindowGetDiagonalSizeInInches ###
+### SbWindowGetDiagonalSizeInInches
 
 Gets the size of the diagonal between two opposing screen corners.
 
 A return value of 0 means that starboard does not know what the screen diagonal
 is.
 
-#### Declaration ####
+#### Declaration
 
 ```
 float SbWindowGetDiagonalSizeInInches(SbWindow window)
 ```
 
-### SbWindowGetOnScreenKeyboardBoundingRect ###
+### SbWindowGetOnScreenKeyboardBoundingRect
 
 Get the rectangle of the on screen keyboard in screen pixel coordinates. Return
 `true` if successful. Return `false` if the on screen keyboard is not showing.
 If the function returns `false`, then `rect` will not have been modified.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbWindowGetOnScreenKeyboardBoundingRect(SbWindow window, SbWindowRect *bounding_rect)
 ```
 
-### SbWindowGetPlatformHandle ###
+### SbWindowGetPlatformHandle
 
 Gets the platform-specific handle for `window`, which can be passed as an
 EGLNativeWindowType to initialize EGL/GLES. This return value is entirely
@@ -196,13 +196,13 @@
 
 `window`: The SbWindow to retrieve the platform handle for.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbWindowGetPlatformHandle(SbWindow window)
 ```
 
-### SbWindowGetSize ###
+### SbWindowGetSize
 
 Retrieves the dimensions of `window` and sets `size` accordingly. This function
 returns `true` if it completes successfully. If the function returns `false`,
@@ -210,81 +210,81 @@
 
 `window`: The SbWindow to retrieve the size of. `size`: The retrieved size.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbWindowGetSize(SbWindow window, SbWindowSize *size)
 ```
 
-### SbWindowHideOnScreenKeyboard ###
+### SbWindowHideOnScreenKeyboard
 
 Hide the on screen keyboard. Fire kSbEventTypeWindowSizeChange and
 kSbEventTypeOnScreenKeyboardHidden if necessary.
 kSbEventTypeOnScreenKeyboardHidden has data `ticket`. Calling
 SbWindowHideOnScreenKeyboard() when the keyboard is already hidden is permitted.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowHideOnScreenKeyboard(SbWindow window, int ticket)
 ```
 
-### SbWindowIsOnScreenKeyboardShown ###
+### SbWindowIsOnScreenKeyboardShown
 
 Determine if the on screen keyboard is shown.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbWindowIsOnScreenKeyboardShown(SbWindow window)
 ```
 
-### SbWindowIsValid ###
+### SbWindowIsValid
 
 Returns whether the given window handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbWindowIsValid(SbWindow window)
 ```
 
-### SbWindowOnScreenKeyboardIsSupported ###
+### SbWindowOnScreenKeyboardIsSupported
 
 Return whether the current platform supports an on screen keyboard
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbWindowOnScreenKeyboardIsSupported()
 ```
 
-### SbWindowOnScreenKeyboardSuggestionsSupported ###
+### SbWindowOnScreenKeyboardSuggestionsSupported
 
 Determine if the on screen keyboard has suggestions implemented. If this returns
 false, then calling SbWindowUpdateOnScreenKeyboardSuggestions() will be
 undefined.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbWindowOnScreenKeyboardSuggestionsSupported(SbWindow window)
 ```
 
-### SbWindowSetDefaultOptions ###
+### SbWindowSetDefaultOptions
 
 Sets the default options for system windows.
 
 `options`: The option values to use as default values. This object must not be
 `NULL`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowSetDefaultOptions(SbWindowOptions *options)
 ```
 
-### SbWindowSetOnScreenKeyboardKeepFocus ###
+### SbWindowSetOnScreenKeyboardKeepFocus
 
 Notify the system that `keepFocus` has been set for the OnScreenKeyboard.
 `keepFocus` true indicates that the user may not navigate focus off of the
@@ -293,13 +293,13 @@
 OnScreenKeyboard via input. `keepFocus` is initialized to false in the
 OnScreenKeyboard constructor.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowSetOnScreenKeyboardKeepFocus(SbWindow window, bool keep_focus)
 ```
 
-### SbWindowShowOnScreenKeyboard ###
+### SbWindowShowOnScreenKeyboard
 
 Show the on screen keyboard and populate the input with text `input_text`. Fire
 kSbEventTypeWindowSizeChange and kSbEventTypeOnScreenKeyboardShown if necessary.
@@ -309,13 +309,13 @@
 and the input will be replaced with `input_text`. Showing the on screen keyboard
 does not give it focus.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowShowOnScreenKeyboard(SbWindow window, const char *input_text, int ticket)
 ```
 
-### SbWindowUpdateOnScreenKeyboardSuggestions ###
+### SbWindowUpdateOnScreenKeyboardSuggestions
 
 Update the on screen keyboard custom suggestions. Fire
 kSbEventTypeOnScreenKeyboardSuggestionsUpdated.
@@ -323,7 +323,7 @@
 suggestions should remain up-to-date when the keyboard is shown after being
 hidden.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowUpdateOnScreenKeyboardSuggestions(SbWindow window, const char *suggestions[], int num_suggestions, int ticket)
diff --git a/cobalt/site/docs/reference/starboard/modules/accessibility.md b/cobalt/site/docs/reference/starboard/modules/accessibility.md
index a6c8460..8f2a652 100644
--- a/cobalt/site/docs/reference/starboard/modules/accessibility.md
+++ b/cobalt/site/docs/reference/starboard/modules/accessibility.md
@@ -1,17 +1,17 @@
----
-layout: doc
-title: "Starboard Module Reference: accessibility.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `accessibility.h`
 
 Provides access to the system options and settings related to accessibility.
 
-## Enums ##
+## Enums
 
-### SbAccessibilityCaptionCharacterEdgeStyle ###
+### SbAccessibilityCaptionCharacterEdgeStyle
 
 Enum for possible closed captioning character edge styles.
 
-#### Values ####
+#### Values
 
 *   `kSbAccessibilityCaptionCharacterEdgeStyleNone`
 *   `kSbAccessibilityCaptionCharacterEdgeStyleRaised`
@@ -19,11 +19,11 @@
 *   `kSbAccessibilityCaptionCharacterEdgeStyleUniform`
 *   `kSbAccessibilityCaptionCharacterEdgeStyleDropShadow`
 
-### SbAccessibilityCaptionColor ###
+### SbAccessibilityCaptionColor
 
 Enum for possible closed captioning colors.
 
-#### Values ####
+#### Values
 
 *   `kSbAccessibilityCaptionColorBlue`
 *   `kSbAccessibilityCaptionColorBlack`
@@ -34,11 +34,11 @@
 *   `kSbAccessibilityCaptionColorWhite`
 *   `kSbAccessibilityCaptionColorYellow`
 
-### SbAccessibilityCaptionFontFamily ###
+### SbAccessibilityCaptionFontFamily
 
 Enum for possible closed captioning font families
 
-#### Values ####
+#### Values
 
 *   `kSbAccessibilityCaptionFontFamilyCasual`
 *   `kSbAccessibilityCaptionFontFamilyCursive`
@@ -48,11 +48,11 @@
 *   `kSbAccessibilityCaptionFontFamilyProportionalSerif`
 *   `kSbAccessibilityCaptionFontFamilySmallCapitals`
 
-### SbAccessibilityCaptionFontSizePercentage ###
+### SbAccessibilityCaptionFontSizePercentage
 
 Enum for possible closed captioning font size percentages.
 
-#### Values ####
+#### Values
 
 *   `kSbAccessibilityCaptionFontSizePercentage25`
 *   `kSbAccessibilityCaptionFontSizePercentage50`
@@ -67,11 +67,11 @@
 *   `kSbAccessibilityCaptionFontSizePercentage275`
 *   `kSbAccessibilityCaptionFontSizePercentage300`
 
-### SbAccessibilityCaptionOpacityPercentage ###
+### SbAccessibilityCaptionOpacityPercentage
 
 Enum for possible closed captioning opacity percentages.
 
-#### Values ####
+#### Values
 
 *   `kSbAccessibilityCaptionOpacityPercentage0`
 *   `kSbAccessibilityCaptionOpacityPercentage25`
@@ -79,11 +79,11 @@
 *   `kSbAccessibilityCaptionOpacityPercentage75`
 *   `kSbAccessibilityCaptionOpacityPercentage100`
 
-### SbAccessibilityCaptionState ###
+### SbAccessibilityCaptionState
 
 Enum for possible states of closed captioning properties.
 
-#### Values ####
+#### Values
 
 *   `kSbAccessibilityCaptionStateUnsupported`
 
@@ -115,14 +115,14 @@
     SbAccessibilityCaptionSettings.supportsOverride contains false, then no
     fields of SbAccessibilityCaptionSettings will ever contain this value.
 
-## Structs ##
+## Structs
 
-### SbAccessibilityCaptionSettings ###
+### SbAccessibilityCaptionSettings
 
 A group of settings related to system-level closed captioning settings, for
 platforms that expose closed captioning settings.
 
-#### Members ####
+#### Members
 
 *   `SbAccessibilityCaptionColor background_color`
 *   `SbAccessibilityCaptionState background_color_state`
@@ -166,9 +166,9 @@
     false, the values of `SbAccessibilityCaptionState` should be interpreted
     differently.
 
-### SbAccessibilityDisplaySettings ###
+### SbAccessibilityDisplaySettings
 
-#### Members ####
+#### Members
 
 *   `bool has_high_contrast_text_setting`
 
@@ -177,12 +177,12 @@
 
     Whether the high contrast text setting is enabled or not.
 
-### SbAccessibilityTextToSpeechSettings ###
+### SbAccessibilityTextToSpeechSettings
 
 A group of settings related to text-to-speech functionality, for platforms that
 expose system settings for text-to-speech.
 
-#### Members ####
+#### Members
 
 *   `bool has_text_to_speech_setting`
 
@@ -192,9 +192,9 @@
     Whether the text-to-speech setting is enabled or not. This setting is only
     valid if `has_text_to_speech_setting` is set to true.
 
-## Functions ##
+## Functions
 
-### SbAccessibilityGetCaptionSettings ###
+### SbAccessibilityGetCaptionSettings
 
 Get the platform's settings for system-level closed captions. This function
 returns false if `caption_settings` is NULL or if it is not zero-initialized.
@@ -202,13 +202,13 @@
 `caption_settings`: A pointer to a zero-initialized
 SbAccessibilityTextToSpeechSettings struct.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAccessibilityGetCaptionSettings(SbAccessibilityCaptionSettings *caption_settings)
 ```
 
-### SbAccessibilityGetDisplaySettings ###
+### SbAccessibilityGetDisplaySettings
 
 Get the platform settings related to high contrast text. This function returns
 false if `out_settings` is NULL or if it is not zero-initialized.
@@ -216,13 +216,13 @@
 `out_settings`: A pointer to a zero-initialized SbAccessibilityDisplaySettings*
 struct.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAccessibilityGetDisplaySettings(SbAccessibilityDisplaySettings *out_settings)
 ```
 
-### SbAccessibilityGetTextToSpeechSettings ###
+### SbAccessibilityGetTextToSpeechSettings
 
 Get the platform settings related to the text-to-speech accessibility feature.
 This function returns false if `out_settings` is NULL or if it is not zero-
@@ -231,13 +231,13 @@
 `out_settings`: A pointer to a zero-initialized
 SbAccessibilityTextToSpeechSettings struct.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAccessibilityGetTextToSpeechSettings(SbAccessibilityTextToSpeechSettings *out_settings)
 ```
 
-### SbAccessibilitySetCaptionsEnabled ###
+### SbAccessibilitySetCaptionsEnabled
 
 Modifies whether closed captions are enabled at a system level. This function
 returns false if this feature is not supported by the platform, or if changing
@@ -246,7 +246,7 @@
 `enabled`: A boolean indicating whether captions should be turned on (true) or
 off (false).
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAccessibilitySetCaptionsEnabled(bool enabled)
diff --git a/cobalt/site/docs/reference/starboard/modules/atomic.md b/cobalt/site/docs/reference/starboard/modules/atomic.md
index 5f79990..9653e53 100644
--- a/cobalt/site/docs/reference/starboard/modules/atomic.md
+++ b/cobalt/site/docs/reference/starboard/modules/atomic.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: atomic.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `atomic.h`
 
 Defines a set of atomic integer operations that can be used as lightweight
 synchronization or as building blocks for heavier synchronization primitives.
@@ -9,32 +9,32 @@
 supported architectures, so their direct use is not recommended except when
 rigorously deemed absolutely necessary for performance reasons.
 
-## Typedefs ##
+## Typedefs
 
-### SbAtomic64 ###
+### SbAtomic64
 
 64-bit atomic operations (only available on 64-bit processors).
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int64_t SbAtomic64
 ```
 
-### SbAtomicPtr ###
+### SbAtomicPtr
 
 Pointer-sized atomic operations. Forwards to either 32-bit or 64-bit functions
 as appropriate.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbAtomic32 SbAtomicPtr
 ```
 
-## Functions ##
+## Functions
 
-### SbAtomicAcquire_CompareAndSwap ###
+### SbAtomicAcquire_CompareAndSwap
 
 These following lower-level operations are typically useful only to people
 implementing higher-level synchronization operations like spinlocks, mutexes,
@@ -45,23 +45,23 @@
 operation. "Barrier" operations have both "Acquire" and "Release" semantics. A
 SbAtomicMemoryBarrier() has "Barrier" semantics, but does no memory access.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbAtomic32 SbAtomicAcquire_CompareAndSwap(volatile SbAtomic32 *ptr, SbAtomic32 old_value, SbAtomic32 new_value)
 ```
 
-### SbAtomicBarrier_Increment ###
+### SbAtomicBarrier_Increment
 
 Same as SbAtomicNoBarrier_Increment, but with a memory barrier.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbAtomic32 SbAtomicBarrier_Increment(volatile SbAtomic32 *ptr, SbAtomic32 increment)
 ```
 
-### SbAtomicNoBarrier_CompareAndSwap ###
+### SbAtomicNoBarrier_CompareAndSwap
 
 Atomically execute: result = *ptr; if (*ptr == old_value) *ptr = new_value;
 return result;
@@ -71,39 +71,39 @@
 
 This routine implies no memory barriers.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbAtomic32 SbAtomicNoBarrier_CompareAndSwap(volatile SbAtomic32 *ptr, SbAtomic32 old_value, SbAtomic32 new_value)
 ```
 
-### SbAtomicNoBarrier_Exchange ###
+### SbAtomicNoBarrier_Exchange
 
 Atomically store new_value into *ptr, returning the previous value held in *ptr.
 This routine implies no memory barriers.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbAtomic32 SbAtomicNoBarrier_Exchange(volatile SbAtomic32 *ptr, SbAtomic32 new_value)
 ```
 
-### SbAtomicNoBarrier_Increment ###
+### SbAtomicNoBarrier_Increment
 
 Atomically increment *ptr by "increment". Returns the new value of *ptr with the
 increment applied. This routine implies no memory barriers.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbAtomic32 SbAtomicNoBarrier_Increment(volatile SbAtomic32 *ptr, SbAtomic32 increment)
 ```
 
-### SbAtomicRelease_CompareAndSwap8 ###
+### SbAtomicRelease_CompareAndSwap8
 
 Overloaded functions for Atomic8.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbAtomic8 SbAtomicRelease_CompareAndSwap8(volatile SbAtomic8 *ptr, SbAtomic8 old_value, SbAtomic8 new_value)
diff --git a/cobalt/site/docs/reference/starboard/modules/audio_sink.md b/cobalt/site/docs/reference/starboard/modules/audio_sink.md
index b0e652f..9277c70 100644
--- a/cobalt/site/docs/reference/starboard/modules/audio_sink.md
+++ b/cobalt/site/docs/reference/starboard/modules/audio_sink.md
@@ -1,53 +1,53 @@
----
-layout: doc
-title: "Starboard Module Reference: audio_sink.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `audio_sink.h`
 
 Provides an interface to output raw audio data.
 
-## Macros ##
+## Macros
 
-### kSbAudioSinkInvalid ###
+### kSbAudioSinkInvalid
 
 Well-defined value for an invalid audio sink.
 
-## Typedefs ##
+## Typedefs
 
-### SbAudioSink ###
+### SbAudioSink
 
 An opaque handle to an implementation-private structure representing an audio
 sink.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbAudioSinkPrivate* SbAudioSink
 ```
 
-### SbAudioSinkConsumeFramesFunc ###
+### SbAudioSinkConsumeFramesFunc
 
 Callback used to report frames consumed. The consumed frames will be removed
 from the source frame buffer to free space for new audio frames.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbAudioSinkConsumeFramesFunc) (int frames_consumed, void *context)
 ```
 
-### SbAudioSinkFrameBuffers ###
+### SbAudioSinkFrameBuffers
 
 An array of frame buffers. For interleaved audio streams, there will be only one
 element in the array. For planar audio streams, the number of elements in the
 array equal to the number of channels.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void** SbAudioSinkFrameBuffers
 ```
 
-### SbAudioSinkUpdateSourceStatusFunc ###
+### SbAudioSinkUpdateSourceStatusFunc
 
 Callback being called periodically to retrieve the status of the audio source.
 The first two output parameters indicating the filling level of the audio frame
@@ -64,15 +64,15 @@
 NULL. Note that this function only reports the status of the source, it doesn't
 remove audio data from the source frame buffer.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbAudioSinkUpdateSourceStatusFunc) (int *frames_in_buffer, int *offset_in_frames, bool *is_playing, bool *is_eos_reached, void *context)
 ```
 
-## Functions ##
+## Functions
 
-### SbAudioSinkCreate ###
+### SbAudioSinkCreate
 
 Creates an audio sink for the specified `channels` and `sampling_frequency_hz`,
 acquires all resources needed to operate the audio sink, and returns an opaque
@@ -113,13 +113,13 @@
     value that is passed back to all callbacks and is generally used to point at
     a class or struct that contains state associated with the audio sink.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbAudioSink SbAudioSinkCreate(int channels, int sampling_frequency_hz, SbMediaAudioSampleType audio_sample_type, SbMediaAudioFrameStorageType audio_frame_storage_type, SbAudioSinkFrameBuffers frame_buffers, int frames_per_channel, SbAudioSinkUpdateSourceStatusFunc update_source_status_func, SbAudioSinkConsumeFramesFunc consume_frames_func, void *context)
 ```
 
-### SbAudioSinkDestroy ###
+### SbAudioSinkDestroy
 
 Destroys `audio_sink`, freeing all associated resources. Before returning, the
 function waits until all callbacks that are in progress have finished. After the
@@ -132,24 +132,24 @@
 
 `audio_sink`: The audio sink to destroy.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbAudioSinkDestroy(SbAudioSink audio_sink)
 ```
 
-### SbAudioSinkGetMaxChannels ###
+### SbAudioSinkGetMaxChannels
 
 Returns the maximum number of channels supported on the platform. For example,
 the number would be `2` if the platform only supports stereo.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbAudioSinkGetMaxChannels()
 ```
 
-### SbAudioSinkGetMinBufferSizeInFrames ###
+### SbAudioSinkGetMinBufferSizeInFrames
 
 Returns the minimum frames required by audio sink to play without underflows.
 Returns -1, if `channels`, `sample_type` or `sampling_frequency_hz` is not
@@ -162,52 +162,52 @@
 audio data being streamed. For example, 22,000 Hz means 22,000 sample elements
 represents one second of audio data.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbAudioSinkGetMinBufferSizeInFrames(int channels, SbMediaAudioSampleType sample_type, int sampling_frequency_hz)
 ```
 
-### SbAudioSinkGetNearestSupportedSampleFrequency ###
+### SbAudioSinkGetNearestSupportedSampleFrequency
 
 Returns the supported sample rate closest to `sampling_frequency_hz`. On
 platforms that don't support all sample rates, it is the caller's responsibility
 to resample the audio frames into the supported sample rate returned by this
 function.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbAudioSinkGetNearestSupportedSampleFrequency(int sampling_frequency_hz)
 ```
 
-### SbAudioSinkIsAudioFrameStorageTypeSupported ###
+### SbAudioSinkIsAudioFrameStorageTypeSupported
 
 Indicates whether `audio_frame_storage_type` is supported on this platform.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAudioSinkIsAudioFrameStorageTypeSupported(SbMediaAudioFrameStorageType audio_frame_storage_type)
 ```
 
-### SbAudioSinkIsAudioSampleTypeSupported ###
+### SbAudioSinkIsAudioSampleTypeSupported
 
 Indicates whether `audio_sample_type` is supported on this platform.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAudioSinkIsAudioSampleTypeSupported(SbMediaAudioSampleType audio_sample_type)
 ```
 
-### SbAudioSinkIsValid ###
+### SbAudioSinkIsValid
 
 Indicates whether the given audio sink handle is valid.
 
 `audio_sink`: The audio sink handle to check.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbAudioSinkIsValid(SbAudioSink audio_sink)
diff --git a/cobalt/site/docs/reference/starboard/modules/byte_swap.md b/cobalt/site/docs/reference/starboard/modules/byte_swap.md
index 580bc5d..4b2cab30 100644
--- a/cobalt/site/docs/reference/starboard/modules/byte_swap.md
+++ b/cobalt/site/docs/reference/starboard/modules/byte_swap.md
@@ -1,74 +1,74 @@
----
-layout: doc
-title: "Starboard Module Reference: byte_swap.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `byte_swap.h`
 
 Specifies functions for swapping byte order. These functions are used to deal
 with endianness when performing I/O.
 
-## Functions ##
+## Functions
 
-### SbByteSwapS16 ###
+### SbByteSwapS16
 
 Unconditionally swaps the byte order in signed 16-bit `value`. `value`: The
 value for which the byte order will be swapped.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int16_t SbByteSwapS16(int16_t value)
 ```
 
-### SbByteSwapS32 ###
+### SbByteSwapS32
 
 Unconditionally swaps the byte order in signed 32-bit `value`. `value`: The
 value for which the byte order will be swapped.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int32_t SbByteSwapS32(int32_t value)
 ```
 
-### SbByteSwapS64 ###
+### SbByteSwapS64
 
 Unconditionally swaps the byte order in signed 64-bit `value`. `value`: The
 value for which the byte order will be swapped.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbByteSwapS64(int64_t value)
 ```
 
-### SbByteSwapU16 ###
+### SbByteSwapU16
 
 Unconditionally swaps the byte order in unsigned 16-bit `value`. `value`: The
 value for which the byte order will be swapped.
 
-#### Declaration ####
+#### Declaration
 
 ```
 uint16_t SbByteSwapU16(uint16_t value)
 ```
 
-### SbByteSwapU32 ###
+### SbByteSwapU32
 
 Unconditionally swaps the byte order in unsigned 32-bit `value`. `value`: The
 value for which the byte order will be swapped.
 
-#### Declaration ####
+#### Declaration
 
 ```
 uint32_t SbByteSwapU32(uint32_t value)
 ```
 
-### SbByteSwapU64 ###
+### SbByteSwapU64
 
 Unconditionally swaps the byte order in unsigned 64-bit `value`. `value`: The
 value for which the byte order will be swapped.
 
-#### Declaration ####
+#### Declaration
 
 ```
 uint64_t SbByteSwapU64(uint64_t value)
diff --git a/cobalt/site/docs/reference/starboard/modules/condition_variable.md b/cobalt/site/docs/reference/starboard/modules/condition_variable.md
index 836c4b8..a665a24 100644
--- a/cobalt/site/docs/reference/starboard/modules/condition_variable.md
+++ b/cobalt/site/docs/reference/starboard/modules/condition_variable.md
@@ -1,23 +1,23 @@
----
-layout: doc
-title: "Starboard Module Reference: condition_variable.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `condition_variable.h`
 
 Defines an interface for condition variables.
 
-## Macros ##
+## Macros
 
-### SB_CONDITION_VARIABLE_MAX_SIZE ###
+### SB_CONDITION_VARIABLE_MAX_SIZE
 
 Max size of the SbConditionVariable type.
 
-## Enums ##
+## Enums
 
-### SbConditionVariableResult ###
+### SbConditionVariableResult
 
 Enumeration of possible results from waiting on a condvar.
 
-#### Values ####
+#### Values
 
 *   `kSbConditionVariableSignaled`
 
@@ -30,22 +30,22 @@
     The wait failed, either because a parameter wasn't valid, or the condition
     variable has already been destroyed, or something similar.
 
-## Typedefs ##
+## Typedefs
 
-### SbConditionVariable ###
+### SbConditionVariable
 
 An opaque handle to a condition variable type with reserved memory buffer of
 size SB_CONDITION_VARIABLE_MAX_SIZE and aligned at void pointer type.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef union SbConditionVariable  SbConditionVariable
 ```
 
-## Functions ##
+## Functions
 
-### SbConditionVariableBroadcast ###
+### SbConditionVariableBroadcast
 
 Broadcasts to all current waiters of `condition` to stop waiting. This function
 wakes all of the threads waiting on `condition` while SbConditionVariableSignal
@@ -53,26 +53,26 @@
 
 `condition`: The condition that should no longer be waited for.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbConditionVariableBroadcast(SbConditionVariable *condition)
 ```
 
-### SbConditionVariableCreate ###
+### SbConditionVariableCreate
 
 Creates a new condition variable to work with `opt_mutex`, which may be null,
 placing the newly created condition variable in `out_condition`.
 
 The return value indicates whether the condition variable could be created.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbConditionVariableCreate(SbConditionVariable *out_condition, SbMutex *opt_mutex)
 ```
 
-### SbConditionVariableDestroy ###
+### SbConditionVariableDestroy
 
 Destroys the specified SbConditionVariable . The return value indicates whether
 the destruction was successful. The behavior is undefined if other threads are
@@ -81,23 +81,23 @@
 `condition`: The SbConditionVariable to be destroyed. This invalidates the
 condition variable.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbConditionVariableDestroy(SbConditionVariable *condition)
 ```
 
-### SbConditionVariableIsSignaled ###
+### SbConditionVariableIsSignaled
 
 Returns whether the given result is a success.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbConditionVariableIsSignaled(SbConditionVariableResult result)
 ```
 
-### SbConditionVariableSignal ###
+### SbConditionVariableSignal
 
 Signals the next waiter of `condition` to stop waiting. This function wakes a
 single thread waiting on `condition` while SbConditionVariableBroadcast wakes
@@ -105,24 +105,24 @@
 
 `condition`: The condition that the waiter should stop waiting for.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbConditionVariableSignal(SbConditionVariable *condition)
 ```
 
-### SbConditionVariableWait ###
+### SbConditionVariableWait
 
 Waits for `condition`, releasing the held lock `mutex`, blocking indefinitely,
 and returning the result. Behavior is undefined if `mutex` is not held.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbConditionVariableResult SbConditionVariableWait(SbConditionVariable *condition, SbMutex *mutex)
 ```
 
-### SbConditionVariableWaitTimed ###
+### SbConditionVariableWaitTimed
 
 Waits for `condition`, releasing the held lock `mutex`, blocking up to
 `timeout_duration`, and returning the acquisition result. Behavior is undefined
@@ -133,7 +133,7 @@
 function returns as quickly as possible with a kSbConditionVariableTimedOut
 result.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbConditionVariableResult SbConditionVariableWaitTimed(SbConditionVariable *condition, SbMutex *mutex, SbTime timeout_duration)
diff --git a/cobalt/site/docs/reference/starboard/modules/configuration.md b/cobalt/site/docs/reference/starboard/modules/configuration.md
index 630f1cf..d0ba3c7 100644
--- a/cobalt/site/docs/reference/starboard/modules/configuration.md
+++ b/cobalt/site/docs/reference/starboard/modules/configuration.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: configuration.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `configuration.h`
 
 Provides a description of the current platform in lurid detail so that common
 code never needs to actually know what the current operating system and
@@ -13,117 +13,117 @@
 narrowly-defined configuration features, but it retains porting control in
 Starboard.
 
-## Macros ##
+## Macros
 
-### SB_ALIGNAS(byte_alignment) ###
+### SB_ALIGNAS(byte_alignment)
 
 Specifies the alignment for a class, struct, union, enum, class/struct field, or
 stack variable.
 
-### SB_ALIGNOF(type) ###
+### SB_ALIGNOF(type)
 
 Returns the alignment required for any instance of the type indicated by `type`.
 
-### SB_ARRAY_SIZE(array) ###
+### SB_ARRAY_SIZE(array)
 
 A constant expression that evaluates to the size_t size of a statically-sized
 array.
 
-### SB_ARRAY_SIZE_INT(array) ###
+### SB_ARRAY_SIZE_INT(array)
 
 A constant expression that evaluates to the int size of a statically-sized
 array.
 
-### SB_CAN(SB_FEATURE) ###
+### SB_CAN(SB_FEATURE)
 
 Determines a compile-time capability of the system.
 
-### SB_COMPILE_ASSERT(expr, msg) ###
+### SB_COMPILE_ASSERT(expr, msg)
 
 Will cause a compiler error with `msg` if `expr` is false. `msg` must be a valid
 identifier, and must be a unique type in the scope of the declaration.
 
-### SB_DEPRECATED(FUNC) ###
+### SB_DEPRECATED(FUNC)
 
 SB_DEPRECATED(int Foo(int bar)); Annotates the function as deprecated, which
 will trigger a compiler warning when referenced.
 
-### SB_DEPRECATED_EXTERNAL(FUNC) ###
+### SB_DEPRECATED_EXTERNAL(FUNC)
 
 SB_DEPRECATED_EXTERNAL(...) annotates the function as deprecated for external
 clients, but not deprecated for starboard.
 
-### SB_EXPERIMENTAL_API_VERSION ###
+### SB_EXPERIMENTAL_API_VERSION
 
 The API version that is currently open for changes, and therefore is not stable
 or frozen. Production-oriented ports should avoid declaring that they implement
 the experimental Starboard API version.
 
-### SB_FUNCTION ###
+### SB_FUNCTION
 
 Whether we use **PRETTY_FUNCTION** PRETTY_FUNCTION or **FUNCTION** FUNCTION for
 logging.
 
-### SB_HAS(SB_FEATURE) ###
+### SB_HAS(SB_FEATURE)
 
 Determines at compile-time whether this platform has a standard feature or
 header available.
 
-### SB_HAS_64_BIT_ATOMICS ###
+### SB_HAS_64_BIT_ATOMICS
 
 Whether the current platform has 64-bit atomic operations.
 
-### SB_HAS_GLES2 ###
+### SB_HAS_GLES2
 
 Specifies whether this platform has a performant OpenGL ES 2 implementation,
 which allows client applications to use GL rendering paths. Derived from the gyp
 variable `gl_type` gl_type which indicates what kind of GL implementation is
 available.
 
-### SB_HAS_QUIRK(SB_FEATURE) ###
+### SB_HAS_QUIRK(SB_FEATURE)
 
 Determines at compile-time whether this platform has a quirk.
 
-### SB_INT64_C(x) ###
+### SB_INT64_C(x)
 
 Declare numeric literals of signed 64-bit type.
 
-### SB_IS(SB_FEATURE) ###
+### SB_IS(SB_FEATURE)
 
 Determines at compile-time an inherent aspect of this platform.
 
-### SB_LIKELY(x) ###
+### SB_LIKELY(x)
 
 Macro for hinting that an expression is likely to be true.
 
-### SB_MAXIMUM_API_VERSION ###
+### SB_MAXIMUM_API_VERSION
 
 The maximum API version allowed by this version of the Starboard headers,
 inclusive.
 
-### SB_MINIMUM_API_VERSION ###
+### SB_MINIMUM_API_VERSION
 
 The minimum API version allowed by this version of the Starboard headers,
 inclusive.
 
-### SB_NORETURN ###
+### SB_NORETURN
 
 Macro to annotate a function as noreturn, which signals to the compiler that the
 function cannot return.
 
-### SB_OVERRIDE ###
+### SB_OVERRIDE
 
 Declares a function as overriding a virtual function on compilers that support
 it.
 
-### SB_PREFERRED_RGBA_BYTE_ORDER_RGBA ###
+### SB_PREFERRED_RGBA_BYTE_ORDER_RGBA
 
 An enumeration of values for the kSbPreferredByteOrder configuration variable.
 Setting this up properly means avoiding slow color swizzles when passing pixel
 data from one library to another. Note that these definitions are in byte-order
 and so are endianness-independent.
 
-### SB_PRINTF_FORMAT(format_param, dots_param) ###
+### SB_PRINTF_FORMAT(format_param, dots_param)
 
 Tells the compiler a function is using a printf-style format string.
 `format_param` is the one-based index of the format string parameter;
@@ -132,7 +132,7 @@
 but matches what the system C headers do.) (Partially taken from
 base/compiler_specific.h)
 
-### SB_RESTRICT ###
+### SB_RESTRICT
 
 Include the platform-specific configuration. This macro is set by GN in
 starboard/build/config/BUILD.gn and passed in on the command line for all
@@ -140,29 +140,29 @@
 that the compiler can make certain optimizations because it knows the pointers
 are unique.
 
-### SB_SIZE_OF(DATATYPE) ###
+### SB_SIZE_OF(DATATYPE)
 
 Determines at compile-time the size of a data type, or 0 if the data type that
 was specified was invalid.
 
-### SB_STRINGIFY(x) ###
+### SB_STRINGIFY(x)
 
 Standard CPP trick to stringify an evaluated macro definition.
 
-### SB_UINT64_C(x) ###
+### SB_UINT64_C(x)
 
 Declare numeric literals of unsigned 64-bit type.
 
-### SB_UNLIKELY(x) ###
+### SB_UNLIKELY(x)
 
 Macro for hinting that an expression is likely to be false.
 
-### SB_UNREFERENCED_PARAMETER(x) ###
+### SB_UNREFERENCED_PARAMETER(x)
 
 Trivially references a parameter that is otherwise unreferenced, preventing a
 compiler warning on some platforms.
 
-### SB_WARN_UNUSED_RESULT ###
+### SB_WARN_UNUSED_RESULT
 
 Causes the annotated (at the end) function to generate a warning if the result
 is not accessed.
diff --git a/cobalt/site/docs/reference/starboard/modules/configuration_constants.md b/cobalt/site/docs/reference/starboard/modules/configuration_constants.md
index 99d92f8..18af4bc 100644
--- a/cobalt/site/docs/reference/starboard/modules/configuration_constants.md
+++ b/cobalt/site/docs/reference/starboard/modules/configuration_constants.md
@@ -1,113 +1,113 @@
----
-layout: doc
-title: "Starboard Module Reference: configuration_constants.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `configuration_constants.h`
 
 Declares all configuration variables we will need to use at runtime. These
 variables describe the current platform in detail to allow cobalt to make
 runtime decisions based on per platform configurations.
 
-## Variables ##
+## Variables
 
-### kSbDefaultMmapThreshold ###
+### kSbDefaultMmapThreshold
 
 Determines the threshold of allocation size that should be done with mmap (if
 available), rather than allocated within the core heap.
 
-### kSbFileAltSepChar ###
+### kSbFileAltSepChar
 
 The current platform's alternate file path component separator character. This
 is like SB_FILE_SEP_CHAR, except if your platform supports an alternate
 character, then you can place that here. For example, on windows machines, the
 primary separator character is probably '\', but the alternate is '/'.
 
-### kSbFileAltSepString ###
+### kSbFileAltSepString
 
 The string form of SB_FILE_ALT_SEP_CHAR.
 
-### kSbFileMaxName ###
+### kSbFileMaxName
 
 The current platform's maximum length of the name of a single directory entry,
 not including the absolute path.
 
-### kSbFileMaxOpen ###
+### kSbFileMaxOpen
 
 The current platform's maximum number of files that can be opened at the same
 time by one process.
 
-### kSbFileMaxPath ###
+### kSbFileMaxPath
 
 The current platform's maximum length of an absolute path.
 
-### kSbFileSepChar ###
+### kSbFileSepChar
 
 The current platform's file path component separator character. This is the
 character that appears after a directory in a file path. For example, the
 absolute canonical path of the file "/path/to/a/file.txt" uses '/' as a path
 component separator character.
 
-### kSbFileSepString ###
+### kSbFileSepString
 
 The string form of SB_FILE_SEP_CHAR.
 
-### kSbHasMediaWebmVp9Support ###
+### kSbHasMediaWebmVp9Support
 
 Specifies whether this platform has webm/vp9 support. This should be set to non-
 zero on platforms with webm/vp9 support.
 
-### kSbHasThreadPrioritySupport ###
+### kSbHasThreadPrioritySupport
 
 Whether the current platform supports thread priorities.
 
-### kSbMallocAlignment ###
+### kSbMallocAlignment
 
 Determines the alignment that allocations should have on this platform.
 
-### kSbMaxSystemPathCacheDirectorySize ###
+### kSbMaxSystemPathCacheDirectorySize
 
 The maximum size the cache directory is allowed to use in bytes.
 
-### kSbMaxThreadLocalKeys ###
+### kSbMaxThreadLocalKeys
 
 The maximum number of thread local storage keys supported by this platform. This
 comes from _POSIX_THREAD_KEYS_MAX. The value of PTHREAD_KEYS_MAX is higher, but
 unit tests show that the implementation doesn't support nearly as many keys.
 
-### kSbMaxThreadNameLength ###
+### kSbMaxThreadNameLength
 
 The maximum length of the name for a thread, including the NULL-terminator.
 
-### kSbMaxThreads ###
+### kSbMaxThreads
 
 Defines the maximum number of simultaneous threads for this platform. Some
 platforms require sharing thread handles with other kinds of system handles,
 like mutexes, so we want to keep this manageable.
 
-### kSbMediaMaxAudioBitrateInBitsPerSecond ###
+### kSbMediaMaxAudioBitrateInBitsPerSecond
 
 The maximum audio bitrate the platform can decode. The following value equals to
 5M bytes per seconds which is more than enough for compressed audio.
 
-### kSbMediaMaxVideoBitrateInBitsPerSecond ###
+### kSbMediaMaxVideoBitrateInBitsPerSecond
 
 The maximum video bitrate the platform can decode. The following value equals to
 8M bytes per seconds which is more than enough for compressed video.
 
-### kSbMediaVideoFrameAlignment ###
+### kSbMediaVideoFrameAlignment
 
 Specifies how video frame buffers must be aligned on this platform.
 
-### kSbMemoryLogPath ###
+### kSbMemoryLogPath
 
 Defines the path where memory debugging logs should be written to.
 
-### kSbMemoryPageSize ###
+### kSbMemoryPageSize
 
 The memory page size, which controls the size of chunks on memory that
 allocators deal with, and the alignment of those chunks. This doesn't have to be
 the hardware-defined physical page size, but it should be a multiple of it.
 
-### kSbNetworkReceiveBufferSize ###
+### kSbNetworkReceiveBufferSize
 
 Specifies the network receive buffer size in bytes, set via
 SbSocketSetReceiveBufferSize().
@@ -122,7 +122,7 @@
 If your platform does not have a good TCP auto-tuning mechanism, a setting of
 (128 * 1024) here is recommended.
 
-### kSbPathSepChar ###
+### kSbPathSepChar
 
 The current platform's search path component separator character. When
 specifying an ordered list of absolute paths of directories to search for a
@@ -130,16 +130,16 @@
 the search path of "/etc/search/first:/etc/search/second" uses ':' as a search
 path component separator character.
 
-### kSbPathSepString ###
+### kSbPathSepString
 
 The string form of SB_PATH_SEP_CHAR.
 
-### kSbPreferredRgbaByteOrder ###
+### kSbPreferredRgbaByteOrder
 
 Specifies the preferred byte order of color channels in a pixel. Refer to
 starboard/configuration.h for the possible values. EGL/GLES platforms should
 generally prefer a byte order of RGBA, regardless of endianness.
 
-### kSbUserMaxSignedIn ###
+### kSbUserMaxSignedIn
 
 The maximum number of users that can be signed in at the same time.
diff --git a/cobalt/site/docs/reference/starboard/modules/cpu_features.md b/cobalt/site/docs/reference/starboard/modules/cpu_features.md
index ee12e71..e2aa35f 100644
--- a/cobalt/site/docs/reference/starboard/modules/cpu_features.md
+++ b/cobalt/site/docs/reference/starboard/modules/cpu_features.md
@@ -1,13 +1,13 @@
----
-layout: doc
-title: "Starboard Module Reference: cpu_features.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
 
-## Structs ##
+# Starboard Module Reference: `cpu_features.h`
 
-### SbCPUFeatures ###
+## Structs
 
-#### Members ####
+### SbCPUFeatures
+
+#### Members
 
 *   `SbCPUFeaturesArchitecture architecture`
 
@@ -54,9 +54,9 @@
     defined as a macro.
 *   `SbCPUFeaturesX86 x86`
 
-### SbCPUFeaturesARM ###
+### SbCPUFeaturesARM
 
-#### Members ####
+#### Members
 
 *   `int16_t implementer`
 
@@ -98,7 +98,7 @@
     SDIV and UDIV hardware division in ARM mode.
 *   `bool has_aes`
 
-    ###### Arm 64 feature flags  ######
+    ###### Arm 64 feature flags
 
     AES instructions.
 *   `bool has_crc32`
@@ -114,17 +114,17 @@
 
     64-bit PMULL and PMULL2 instructions.
 
-### SbCPUFeaturesMIPS ###
+### SbCPUFeaturesMIPS
 
-#### Members ####
+#### Members
 
 *   `bool has_msa`
 
     MIPS SIMD Architecture (MSA).
 
-### SbCPUFeaturesX86 ###
+### SbCPUFeaturesX86
 
-#### Members ####
+#### Members
 
 *   `const char * vendor`
 
@@ -244,9 +244,9 @@
 
     SAHF in long mode.
 
-## Functions ##
+## Functions
 
-### SbCPUFeaturesGet ###
+### SbCPUFeaturesGet
 
 Retrieve the underlying CPU features and place it in `features`, which must not
 be NULL.
@@ -254,9 +254,8 @@
 If this function returns false, it means the CPU architecture is unknown and all
 fields in `features` are invalid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbCPUFeaturesGet(SbCPUFeatures *features)
 ```
-
diff --git a/cobalt/site/docs/reference/starboard/modules/decode_target.md b/cobalt/site/docs/reference/starboard/modules/decode_target.md
index a237ad9..56c7afa 100644
--- a/cobalt/site/docs/reference/starboard/modules/decode_target.md
+++ b/cobalt/site/docs/reference/starboard/modules/decode_target.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: decode_target.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `decode_target.h`
 
 A target for decoding image and video data into. This corresponds roughly to an
 EGLImage, but that extension may not be fully supported on all GL platforms.
@@ -12,7 +12,7 @@
 decoding done directly into this memory, avoiding unnecessary memory copies, and
 also avoiding pushing data between CPU and GPU memory unnecessarily.
 
-## SbDecodeTargetFormat ##
+## SbDecodeTargetFormat
 
 SbDecodeTargets support several different formats that can be used to decode
 into and render from. Some formats may be easier to decode into, and others may
@@ -21,7 +21,7 @@
 Each decoder provides a way to check if a given SbDecodeTargetFormat is
 supported by that decoder.
 
-## SbDecodeTargetGraphicsContextProvider ##
+## SbDecodeTargetGraphicsContextProvider
 
 Some components may need to acquire SbDecodeTargets compatible with a certain
 rendering context, which may need to be created on a particular thread. The
@@ -33,10 +33,9 @@
 EGLContext held current. This may be useful if your SbDecodeTarget creation code
 needs to execute GLES commands like, for example, glGenTextures().
 
-The primary usage is likely to be the the SbPlayer implementation on some
-platforms.
+The primary usage is likely to be the SbPlayer implementation on some platforms.
 
-## SbDecodeTarget Example ##
+## SbDecodeTarget Example
 
 Let's say that we are an application and we would like to use the interface
 defined in starboard/image.h to decode an imaginary "image/foo" image type.
@@ -79,15 +78,15 @@
     info.planes[kSbDecodeTargetPlaneRGBA].texture;
 ```
 
-## Macros ##
+## Macros
 
-### kSbDecodeTargetInvalid ###
+### kSbDecodeTargetInvalid
 
 Well-defined value for an invalid decode target handle.
 
-## Enums ##
+## Enums
 
-### SbDecodeTargetFormat ###
+### SbDecodeTargetFormat
 
 The list of all possible decoder target formats. An SbDecodeTarget consists of
 one or more planes of data, each plane corresponding with a surface. For some
@@ -96,7 +95,7 @@
 NOTE: For enumeration entries with an alpha component, the alpha will always be
 premultiplied unless otherwise explicitly specified.
 
-#### Values ####
+#### Values
 
 *   `kSbDecodeTargetFormat1PlaneRGBA`
 
@@ -137,11 +136,11 @@
 
     An invalid decode target format.
 
-### SbDecodeTargetPlane ###
+### SbDecodeTargetPlane
 
 All the planes supported by SbDecodeTarget.
 
-#### Values ####
+#### Values
 
 *   `kSbDecodeTargetPlaneRGBA`
 
@@ -162,45 +161,45 @@
 
     The V plane for 3-plane YUV formats.
 
-## Typedefs ##
+## Typedefs
 
-### SbDecodeTarget ###
+### SbDecodeTarget
 
 A handle to a target for image data decoding.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbDecodeTargetPrivate* SbDecodeTarget
 ```
 
-### SbDecodeTargetGlesContextRunner ###
+### SbDecodeTargetGlesContextRunner
 
 Signature for a function provided by the application to the Starboard
 implementation that will let the Starboard implementation run arbitrary code on
 the application's renderer thread with the application's EGLContext held
 current.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDecodeTargetGlesContextRunner) (struct SbDecodeTargetGraphicsContextProvider *graphics_context_provider, SbDecodeTargetGlesContextRunnerTarget target_function, void *target_function_context)
 ```
 
-### SbDecodeTargetGlesContextRunnerTarget ###
+### SbDecodeTargetGlesContextRunnerTarget
 
 Signature for a Starboard implementation function that is to be run by a
 SbDecodeTargetGlesContextRunner callback.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDecodeTargetGlesContextRunnerTarget) (void *gles_context_runner_target_context)
 ```
 
-## Structs ##
+## Structs
 
-### SbDecodeTargetGraphicsContextProvider ###
+### SbDecodeTargetGraphicsContextProvider
 
 In general, the SbDecodeTargetGraphicsContextProvider structure provides
 information about the graphics context that will be used to render
@@ -210,7 +209,7 @@
 to all Starboard functions that might create SbDecodeTargets (e.g.
 SbImageDecode()).
 
-#### Members ####
+#### Members
 
 *   `void * egl_display`
 
@@ -233,12 +232,12 @@
     Context data that is to be passed in to `gles_context_runner` when it is
     invoked.
 
-### SbDecodeTargetInfo ###
+### SbDecodeTargetInfo
 
 Contains all information about a decode target, including all of its planes.
 This can be queried via calls to SbDecodeTargetGetInfo().
 
-#### Members ####
+#### Members
 
 *   `SbDecodeTargetFormat format`
 
@@ -267,11 +266,11 @@
     kSbDecodeTargetPlaneU, kSbDecodeTargetPlaneV} associated with this decode
     target.
 
-### SbDecodeTargetInfoContentRegion ###
+### SbDecodeTargetInfoContentRegion
 
 Defines a rectangular content region within a SbDecodeTargetInfoPlane structure.
 
-#### Members ####
+#### Members
 
 *   `float left`
 
@@ -283,11 +282,11 @@
 *   `float right`
 *   `float bottom`
 
-### SbDecodeTargetInfoPlane ###
+### SbDecodeTargetInfoPlane
 
 Defines an image plane within a SbDecodeTargetInfo object.
 
-#### Members ####
+#### Members
 
 *   `uint32_t texture`
 
@@ -317,53 +316,53 @@
     these parameters are number of pixels. The range for left/right is [0,
     width], and for top/bottom it is [0, height].
 
-## Functions ##
+## Functions
 
-### PrivateDecodeTargetReleaser ###
+### PrivateDecodeTargetReleaser
 
 This function is just an implementation detail of
 SbDecodeTargetReleaseInGlesContext() and should not be called directly.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static void PrivateDecodeTargetReleaser(void *context)
 ```
 
-### SbDecodeTargetGetInfo ###
+### SbDecodeTargetGetInfo
 
 Writes all information about `decode_target` into `out_info`. The
 `decode_target` must not be kSbDecodeTargetInvalid. The `out_info` pointer must
 not be NULL. Returns false if the provided `out_info` structure is not zero
 initialized.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbDecodeTargetGetInfo(SbDecodeTarget decode_target, SbDecodeTargetInfo *out_info)
 ```
 
-### SbDecodeTargetIsFormatValid ###
+### SbDecodeTargetIsFormatValid
 
 Returns whether a given format is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbDecodeTargetIsFormatValid(SbDecodeTargetFormat format)
 ```
 
-### SbDecodeTargetIsValid ###
+### SbDecodeTargetIsValid
 
 Returns whether the given file handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbDecodeTargetIsValid(SbDecodeTarget handle)
 ```
 
-### SbDecodeTargetRelease ###
+### SbDecodeTargetRelease
 
 Returns ownership of `decode_target` to the Starboard implementation. This
 function will likely result in the destruction of the SbDecodeTarget and all its
@@ -371,31 +370,31 @@
 reference count. In the case where SB_HAS(GLES2), this function must be called
 on a thread with the context
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbDecodeTargetRelease(SbDecodeTarget decode_target)
 ```
 
-### SbDecodeTargetReleaseInGlesContext ###
+### SbDecodeTargetReleaseInGlesContext
 
 Helper function that is possibly useful to Starboard implementations that will
 release a decode target on the thread with the GLES context current.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static void SbDecodeTargetReleaseInGlesContext(SbDecodeTargetGraphicsContextProvider *provider, SbDecodeTarget decode_target)
 ```
 
-### SbDecodeTargetRunInGlesContext ###
+### SbDecodeTargetRunInGlesContext
 
 Inline convenience function to run an arbitrary
 SbDecodeTargetGlesContextRunnerTarget function through a
 SbDecodeTargetGraphicsContextProvider . This is intended to be called by
 Starboard implementations, if it is necessary.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static void SbDecodeTargetRunInGlesContext(SbDecodeTargetGraphicsContextProvider *provider, SbDecodeTargetGlesContextRunnerTarget target, void *target_context)
diff --git a/cobalt/site/docs/reference/starboard/modules/directory.md b/cobalt/site/docs/reference/starboard/modules/directory.md
index d46c9a1..1c0f904 100644
--- a/cobalt/site/docs/reference/starboard/modules/directory.md
+++ b/cobalt/site/docs/reference/starboard/modules/directory.md
@@ -1,56 +1,56 @@
----
-layout: doc
-title: "Starboard Module Reference: directory.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `directory.h`
 
 Provides directory listing functions.
 
-## Macros ##
+## Macros
 
-### kSbDirectoryInvalid ###
+### kSbDirectoryInvalid
 
 Well-defined value for an invalid directory stream handle.
 
-## Typedefs ##
+## Typedefs
 
-### SbDirectory ###
+### SbDirectory
 
 A handle to an open directory stream.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbDirectoryPrivate* SbDirectory
 ```
 
-## Functions ##
+## Functions
 
-### SbDirectoryCanOpen ###
+### SbDirectoryCanOpen
 
 Indicates whether SbDirectoryOpen is allowed for the given `path`.
 
 `path`: The path to be checked.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbDirectoryCanOpen(const char *path)
 ```
 
-### SbDirectoryClose ###
+### SbDirectoryClose
 
 Closes an open directory stream handle. The return value indicates whether the
 directory was closed successfully.
 
 `directory`: The directory stream handle to close.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbDirectoryClose(SbDirectory directory)
 ```
 
-### SbDirectoryCreate ###
+### SbDirectoryCreate
 
 Creates the directory `path`, assuming the parent directory already exists. This
 function returns `true` if the directory now exists (even if it existed before)
@@ -58,13 +58,13 @@
 
 `path`: The path to be created.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbDirectoryCreate(const char *path)
 ```
 
-### SbDirectoryGetNext ###
+### SbDirectoryGetNext
 
 Populates `out_entry` with the next entry in the specified directory stream, and
 moves the stream forward by one entry.
@@ -83,23 +83,23 @@
 `out_entry_size`: The size of the space allocated for `out_entry`. This should
 be at least equal to kSbFileMaxName.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbDirectoryGetNext(SbDirectory directory, char *out_entry, size_t out_entry_size)
 ```
 
-### SbDirectoryIsValid ###
+### SbDirectoryIsValid
 
 Returns whether the given directory stream handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbDirectoryIsValid(SbDirectory directory)
 ```
 
-### SbDirectoryOpen ###
+### SbDirectoryOpen
 
 Opens the given existing directory for listing. This function returns
 kSbDirectoryInvalidHandle if it is not successful.
@@ -110,7 +110,7 @@
 `out_error`: An output parameter that, in case of an error, is set to the reason
 that the directory could not be opened.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbDirectory SbDirectoryOpen(const char *path, SbFileError *out_error)
diff --git a/cobalt/site/docs/reference/starboard/modules/drm.md b/cobalt/site/docs/reference/starboard/modules/drm.md
index fbb92f9..f42e43b 100644
--- a/cobalt/site/docs/reference/starboard/modules/drm.md
+++ b/cobalt/site/docs/reference/starboard/modules/drm.md
@@ -1,37 +1,37 @@
----
-layout: doc
-title: "Starboard Module Reference: drm.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `drm.h`
 
 Provides definitions that allow for DRM support, which are common between Player
 and Decoder interfaces.
 
-## Macros ##
+## Macros
 
-### kSbDrmSystemInvalid ###
+### kSbDrmSystemInvalid
 
 An invalid SbDrmSystem.
 
-### kSbDrmTicketInvalid ###
+### kSbDrmTicketInvalid
 
 A ticket for callback invocations initiated by the DRM system.
 
-## Enums ##
+## Enums
 
-### SbDrmEncryptionScheme ###
+### SbDrmEncryptionScheme
 
 Encryption scheme of the input sample, as defined in ISO/IEC 23001 part 7.
 
-#### Values ####
+#### Values
 
 *   `kSbDrmEncryptionSchemeAesCtr`
 *   `kSbDrmEncryptionSchemeAesCbc`
 
-### SbDrmKeyStatus ###
+### SbDrmKeyStatus
 
 Status of a particular media key. [https://w3c.github.io/encrypted-media/#idl-def-MediaKeyStatus](https://w3c.github.io/encrypted-media/#idl-def-MediaKeyStatus)
 
-#### Values ####
+#### Values
 
 *   `kSbDrmKeyStatusUsable`
 *   `kSbDrmKeyStatusExpired`
@@ -41,24 +41,24 @@
 *   `kSbDrmKeyStatusPending`
 *   `kSbDrmKeyStatusError`
 
-### SbDrmSessionRequestType ###
+### SbDrmSessionRequestType
 
 The type of the session request. [https://www.w3.org/TR/encrypted-media/#idl-def-mediakeymessagetype](https://www.w3.org/TR/encrypted-media/#idl-def-mediakeymessagetype)
 
-#### Values ####
+#### Values
 
 *   `kSbDrmSessionRequestTypeLicenseRequest`
 *   `kSbDrmSessionRequestTypeLicenseRenewal`
 *   `kSbDrmSessionRequestTypeLicenseRelease`
 *   `kSbDrmSessionRequestTypeIndividualizationRequest`
 
-### SbDrmStatus ###
+### SbDrmStatus
 
 The status of session related operations. Used by
 `SbDrmSessionUpdateRequestFunc`, `SbDrmSessionUpdatedFunc`, and
 `SbDrmServerCertificateUpdatedFunc` to indicate the status of the operation. [https://w3c.github.io/encrypted-media/#error-names](https://w3c.github.io/encrypted-media/#error-names)
 
-#### Values ####
+#### Values
 
 *   `kSbDrmStatusSuccess`
 *   `kSbDrmStatusTypeError`
@@ -70,42 +70,42 @@
     The following error can be used when the error status cannot be mapped to
     one of the above errors.
 
-## Typedefs ##
+## Typedefs
 
-### SbDrmServerCertificateUpdatedFunc ###
+### SbDrmServerCertificateUpdatedFunc
 
 A callback to notify the caller of SbDrmUpdateServerCertificate() whether the
 update has been successfully updated or not.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDrmServerCertificateUpdatedFunc) (SbDrmSystem drm_system, void *context, int ticket, SbDrmStatus status, const char *error_message)
 ```
 
-### SbDrmSessionClosedFunc ###
+### SbDrmSessionClosedFunc
 
 A callback for signalling that a session has been closed by the SbDrmSystem
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDrmSessionClosedFunc) (SbDrmSystem drm_system, void *context, const void *session_id, int session_id_size)
 ```
 
-### SbDrmSessionKeyStatusesChangedFunc ###
+### SbDrmSessionKeyStatusesChangedFunc
 
 A callback for notifications that the status of one or more keys in a session
 has been changed. All keys of the session and their new status will be passed
 along. Any keys not in the list is considered as deleted.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDrmSessionKeyStatusesChangedFunc) (SbDrmSystem drm_system, void *context, const void *session_id, int session_id_size, int number_of_keys, const SbDrmKeyId *key_ids, const SbDrmKeyStatus *key_statuses)
 ```
 
-### SbDrmSessionUpdateRequestFunc ###
+### SbDrmSessionUpdateRequestFunc
 
 A callback that will receive generated session update request when requested
 from a SbDrmSystem. `drm_system` will be the DRM system that
@@ -128,13 +128,13 @@
 the correct Promise corresponding to the associated
 SbDrmGenerateSessionUpdateRequest().
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDrmSessionUpdateRequestFunc) (SbDrmSystem drm_system, void *context, int ticket, SbDrmStatus status, SbDrmSessionRequestType type, const char *error_message, const void *session_id, int session_id_size, const void *content, int content_size, const char *url)
 ```
 
-### SbDrmSessionUpdatedFunc ###
+### SbDrmSessionUpdatedFunc
 
 A callback for notifications that a session has been added, and subsequent
 encrypted samples are actively ready to be decoded. `drm_system` will be the DRM
@@ -150,37 +150,37 @@
 `status` is `kSbDrmStatusSuccess` or if no error message can be provided.
 `succeeded` is whether the session was successfully updated or not.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbDrmSessionUpdatedFunc) (SbDrmSystem drm_system, void *context, int ticket, SbDrmStatus status, const char *error_message, const void *session_id, int session_id_size)
 ```
 
-### SbDrmSystem ###
+### SbDrmSystem
 
 A handle to a DRM system which can be used with either an SbDecoder or an
 SbPlayer.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbDrmSystemPrivate* SbDrmSystem
 ```
 
-## Structs ##
+## Structs
 
-### SbDrmEncryptionPattern ###
+### SbDrmEncryptionPattern
 
 Encryption pattern of the input sample, as defined in ISO/IEC 23001 part 7.
 
-#### Members ####
+#### Members
 
 *   `uint32_t crypt_byte_block`
 *   `uint32_t skip_byte_block`
 
-### SbDrmKeyId ###
+### SbDrmKeyId
 
-#### Members ####
+#### Members
 
 *   `uint8_t identifier`
 
@@ -188,11 +188,11 @@
     PlayReady, this is the license GUID in packed little-endian binary form.
 *   `int identifier_size`
 
-### SbDrmSampleInfo ###
+### SbDrmSampleInfo
 
 All the optional information needed per sample for encrypted samples.
 
-#### Members ####
+#### Members
 
 *   `SbDrmEncryptionScheme encryption_scheme`
 
@@ -217,13 +217,13 @@
     The clear/encrypted mapping of each subsample in this sample. This must be
     an array of `subsample_count` mappings.
 
-### SbDrmSubSampleMapping ###
+### SbDrmSubSampleMapping
 
 A mapping of clear and encrypted bytes for a single subsample. All subsamples
 within a sample must be encrypted with the same encryption parameters. The clear
 bytes always appear first in the sample.
 
-#### Members ####
+#### Members
 
 *   `int32_t clear_byte_count`
 
@@ -232,21 +232,21 @@
 
     How many bytes of the corresponding subsample are encrypted.
 
-## Functions ##
+## Functions
 
-### SbDrmCloseSession ###
+### SbDrmCloseSession
 
 Clear any internal states/resources related to the specified `session_id`.
 
 `drm_system` must not be `kSbDrmSystemInvalid`. `session_id` must not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbDrmCloseSession(SbDrmSystem drm_system, const void *session_id, int session_id_size)
 ```
 
-### SbDrmDestroySystem ###
+### SbDrmDestroySystem
 
 Destroys `drm_system`, which implicitly removes all keys installed in it and
 invalidates all outstanding session update requests. A DRM system cannot be
@@ -258,13 +258,13 @@
 
 `drm_system`: The DRM system to be destroyed. Must not be `kSbDrmSystemInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbDrmDestroySystem(SbDrmSystem drm_system)
 ```
 
-### SbDrmGenerateSessionUpdateRequest ###
+### SbDrmGenerateSessionUpdateRequest
 
 Asynchronously generates a session update request payload for
 `initialization_data`, of `initialization_data_size`, in case sensitive `type`,
@@ -296,13 +296,13 @@
 payload is created. Must not be NULL. `initialization_data_size`: The size of
 the session update request payload.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbDrmGenerateSessionUpdateRequest(SbDrmSystem drm_system, int ticket, const char *type, const void *initialization_data, int initialization_data_size)
 ```
 
-### SbDrmGetMetrics ###
+### SbDrmGetMetrics
 
 Get the metrics of the underlying drm system.
 
@@ -326,13 +326,13 @@
 
 `drm_system` must not be `kSbDrmSystemInvalid`. `size` must not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 const void* SbDrmGetMetrics(SbDrmSystem drm_system, int *size)
 ```
 
-### SbDrmIsServerCertificateUpdatable ###
+### SbDrmIsServerCertificateUpdatable
 
 Returns true if server certificate of `drm_system` can be updated via
 SbDrmUpdateServerCertificate(). The return value should remain the same during
@@ -341,33 +341,33 @@
 `drm_system`: The DRM system to check if its server certificate is updatable.
 Must not be `kSbDrmSystemInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbDrmIsServerCertificateUpdatable(SbDrmSystem drm_system)
 ```
 
-### SbDrmSystemIsValid ###
+### SbDrmSystemIsValid
 
 Indicates whether `drm_system` is a valid SbDrmSystem.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbDrmSystemIsValid(SbDrmSystem drm)
 ```
 
-### SbDrmTicketIsValid ###
+### SbDrmTicketIsValid
 
 Indicates whether `ticket` is a valid ticket.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbDrmTicketIsValid(int ticket)
 ```
 
-### SbDrmUpdateServerCertificate ###
+### SbDrmUpdateServerCertificate
 
 Update the server certificate of `drm_system`. The function can be called
 multiple times. It is possible that a call to it happens before the callback of
@@ -384,13 +384,13 @@
 certificate data. Must not be NULL. `certificate_size`: Size of the server
 certificate data.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbDrmUpdateServerCertificate(SbDrmSystem drm_system, int ticket, const void *certificate, int certificate_size)
 ```
 
-### SbDrmUpdateSession ###
+### SbDrmUpdateSession
 
 Update session with `key`, in `drm_system`'s key system, from the license server
 response. Calls `session_updated_callback` with `context` and whether the update
@@ -410,7 +410,7 @@
 thread before this function returns or from another thread. The `session_id`
 must not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbDrmUpdateSession(SbDrmSystem drm_system, int ticket, const void *key, int key_size, const void *session_id, int session_id_size)
diff --git a/cobalt/site/docs/reference/starboard/modules/egl.md b/cobalt/site/docs/reference/starboard/modules/egl.md
index b1e120b..87deff2 100644
--- a/cobalt/site/docs/reference/starboard/modules/egl.md
+++ b/cobalt/site/docs/reference/starboard/modules/egl.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: egl.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `egl.h`
 
 The EGL API provides an interface with accompanying type declarations and
 defines that together provide a single consistent method of EGL usage across
@@ -11,67 +11,67 @@
 versions on different systems, and to remove the requirement for any other code
 to directly pull in and use these system libraries.
 
-## EGL Version ##
+## EGL Version
 
 This API has the ability to support EGL 1.5, however it is not required to
 support anything beyond EGL 1.4. The user is responsible for ensuring that the
 functions from EGL 1.5 they are calling from the interface are valid.
 
-## Macros ##
+## Macros
 
-### SB_EGL_ALPHA_FORMAT ###
+### SB_EGL_ALPHA_FORMAT
 
 EGL_VERSION_1_2
 
-### SB_EGL_ALPHA_SIZE ###
+### SB_EGL_ALPHA_SIZE
 
 EGL_VERSION_1_0
 
-### SB_EGL_BACK_BUFFER ###
+### SB_EGL_BACK_BUFFER
 
 EGL_VERSION_1_1
 
-### SB_EGL_CONFORMANT ###
+### SB_EGL_CONFORMANT
 
 EGL_VERSION_1_3
 
-### SB_EGL_CONTEXT_MAJOR_VERSION ###
+### SB_EGL_CONTEXT_MAJOR_VERSION
 
 EGL_VERSION_1_5
 
-### SB_EGL_DEFAULT_DISPLAY ###
+### SB_EGL_DEFAULT_DISPLAY
 
 EGL_VERSION_1_4
 
-## Typedefs ##
+## Typedefs
 
-### SbEglCastsToProperFunctionPointerType ###
+### SbEglCastsToProperFunctionPointerType
 
 The following type definitions were adapted from the types declared in [https://www.khronos.org/registry/EGL/api/EGL/egl.h](https://www.khronos.org/registry/EGL/api/EGL/egl.h)
 .
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbEglCastsToProperFunctionPointerType) (void)
 ```
 
-### SbEglInt32 ###
+### SbEglInt32
 
 The following type definitions were adapted from the types declared in [https://www.khronos.org/registry/EGL/api/EGL/eglplatform.h](https://www.khronos.org/registry/EGL/api/EGL/eglplatform.h)
 .
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int32_t SbEglInt32
 ```
 
-## Structs ##
+## Structs
 
-### SbEglInterface ###
+### SbEglInterface
 
-#### Members ####
+#### Members
 
 *   `SbEglBoolean(*eglChooseConfig)(SbEglDisplay dpy, const SbEglInt32
     *attrib_list, SbEglConfig *configs, SbEglInt32 config_size, SbEglInt32
diff --git a/cobalt/site/docs/reference/starboard/modules/event.md b/cobalt/site/docs/reference/starboard/modules/event.md
index 58cb1f4..d8bab06 100644
--- a/cobalt/site/docs/reference/starboard/modules/event.md
+++ b/cobalt/site/docs/reference/starboard/modules/event.md
@@ -1,11 +1,11 @@
----
-layout: doc
-title: "Starboard Module Reference: event.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `event.h`
 
 Defines the event system that wraps the Starboard main loop and entry point.
 
-## The Starboard Application Lifecycle ##
+## The Starboard Application Lifecycle
 
 ```
                * ----------
@@ -78,15 +78,15 @@
 Note that the application is always expected to transition through `BLURRED`,
 `CONCEALED` to `FROZEN` before receiving `Stop` or being killed.
 
-## Enums ##
+## Enums
 
-### SbEventType ###
+### SbEventType
 
 An enumeration of all possible event types dispatched directly by the system.
 Each event is accompanied by a void* data argument, and each event must define
 the type of the value pointed to by that data argument, if any.
 
-#### Values ####
+#### Values
 
 *   `kSbEventTypePreload`
 
@@ -273,55 +273,55 @@
     change in the timezone setting). This should trigger the application to re-
     query the relevant APIs to update the date and time.
 
-## Typedefs ##
+## Typedefs
 
-### SbEventCallback ###
+### SbEventCallback
 
 A function that can be called back from the main Starboard event pump.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbEventCallback) (void *context)
 ```
 
-### SbEventDataDestructor ###
+### SbEventDataDestructor
 
 A function that will cleanly destroy an event data instance of a specific type.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbEventDataDestructor) (void *data)
 ```
 
-### SbEventId ###
+### SbEventId
 
 An ID that can be used to refer to a scheduled event.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef uint32_t SbEventId
 ```
 
-## Structs ##
+## Structs
 
-### SbEvent ###
+### SbEvent
 
 Structure representing a Starboard event and its data.
 
-#### Members ####
+#### Members
 
 *   `SbEventType type`
 *   `SbTimeMonotonic timestamp`
 *   `void * data`
 
-### SbEventStartData ###
+### SbEventStartData
 
 Event data for kSbEventTypeStart events.
 
-#### Members ####
+#### Members
 
 *   `char ** argument_values`
 
@@ -333,31 +333,31 @@
 
     The startup link, if any.
 
-### SbEventWindowSizeChangedData ###
+### SbEventWindowSizeChangedData
 
 Event data for kSbEventTypeWindowSizeChanged events.
 
-#### Members ####
+#### Members
 
 *   `SbWindow window`
 *   `SbWindowSize size`
 
-## Functions ##
+## Functions
 
-### SbEventCancel ###
+### SbEventCancel
 
 Cancels the specified `event_id`. Note that this function is a no-op if the
 event already fired. This function can be safely called from any thread, but the
 only way to guarantee that the event does not run anyway is to call it from the
 main Starboard event loop thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbEventCancel(SbEventId event_id)
 ```
 
-### SbEventHandle ###
+### SbEventHandle
 
 The entry point that Starboard applications MUST implement. Any memory pointed
 at by `event` or the `data` field inside `event` is owned by the system, and
@@ -370,23 +370,23 @@
 application should generally do as little work as possible on this thread, and
 just dispatch it over to another thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SB_EXPORT_PLATFORM void SbEventHandle(const SbEvent *event)
 ```
 
-### SbEventIsIdValid ###
+### SbEventIsIdValid
 
 Returns whether the given event handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbEventIsIdValid(SbEventId handle)
 ```
 
-### SbEventSchedule ###
+### SbEventSchedule
 
 Schedules an event `callback` into the main Starboard event loop. This function
 may be called from any thread, but `callback` is always called from the main
@@ -397,18 +397,18 @@
 of microseconds to wait before calling the `callback` function. Set `delay` to
 `0` to call the callback as soon as possible.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbEventId SbEventSchedule(SbEventCallback callback, void *context, SbTime delay)
 ```
 
-### SbRunStarboardMain ###
+### SbRunStarboardMain
 
 Serves as the entry point in the Starboard library for running the Starboard
 event loop with the application event handler.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbRunStarboardMain(int argc, char **argv, SbEventHandleCallback callback)
diff --git a/cobalt/site/docs/reference/starboard/modules/export.md b/cobalt/site/docs/reference/starboard/modules/export.md
index ff79777..a398d4a 100644
--- a/cobalt/site/docs/reference/starboard/modules/export.md
+++ b/cobalt/site/docs/reference/starboard/modules/export.md
@@ -1,24 +1,24 @@
----
-layout: doc
-title: "Starboard Module Reference: export.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `export.h`
 
 Provides macros for properly exporting or importing symbols from shared
 libraries.
 
-## Macros ##
+## Macros
 
-### SB_EXPORT ###
+### SB_EXPORT
 
 Specification for a symbol that should be exported when building the DLL and
 imported when building code that uses the DLL.
 
-### SB_EXPORT_PRIVATE ###
+### SB_EXPORT_PRIVATE
 
 Specification for a symbol that should be exported or imported for testing
 purposes only.
 
-### SB_IMPORT ###
+### SB_IMPORT
 
 Specification for a symbol that is expected to be defined externally to this
 module.
diff --git a/cobalt/site/docs/reference/starboard/modules/file.md b/cobalt/site/docs/reference/starboard/modules/file.md
index e22edeb..02c7863 100644
--- a/cobalt/site/docs/reference/starboard/modules/file.md
+++ b/cobalt/site/docs/reference/starboard/modules/file.md
@@ -1,25 +1,25 @@
----
-layout: doc
-title: "Starboard Module Reference: file.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `file.h`
 
 Defines file system input/output functions.
 
-## Macros ##
+## Macros
 
-### kSbFileInvalid ###
+### kSbFileInvalid
 
 Well-defined value for an invalid file handle.
 
-## Enums ##
+## Enums
 
-### SbFileError ###
+### SbFileError
 
 kSbFileErrorAccessDenied is returned when a call fails because of a filesystem
 restriction. kSbFileErrorSecurity is returned when a security policy doesn't
 allow the operation to be executed.
 
-#### Values ####
+#### Values
 
 *   `kSbFileOk`
 *   `kSbFileErrorFailed`
@@ -40,7 +40,7 @@
 *   `kSbFileErrorIO`
 *   `kSbFileErrorMax`
 
-### SbFileFlags ###
+### SbFileFlags
 
 Flags that define how a file is used in the application. These flags should be
 or'd together when passed to SbFileOpen to open or create a file.
@@ -66,7 +66,7 @@
 
 The `kSbFileAsync` flag is optional.
 
-#### Values ####
+#### Values
 
 *   `kSbFileOpenOnly`
 *   `kSbFileCreateOnly`
@@ -85,35 +85,35 @@
 *   `kSbFileWrite`
 *   `kSbFileAsync`
 
-### SbFileWhence ###
+### SbFileWhence
 
 This explicit mapping matches both FILE_ on Windows and SEEK_ on Linux.
 
-#### Values ####
+#### Values
 
 *   `kSbFileFromBegin`
 *   `kSbFileFromCurrent`
 *   `kSbFileFromEnd`
 
-## Typedefs ##
+## Typedefs
 
-### SbFile ###
+### SbFile
 
 A handle to an open file.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbFilePrivate* SbFile
 ```
 
-## Structs ##
+## Structs
 
-### SbFileInfo ###
+### SbFileInfo
 
 Used to hold information about a file.
 
-#### Members ####
+#### Members
 
 *   `int64_t size`
 
@@ -134,9 +134,9 @@
 
     The creation time of a file.
 
-## Functions ##
+## Functions
 
-### SbFileAtomicReplace ###
+### SbFileAtomicReplace
 
 Replaces the content of the file at `path` with `data`. Returns whether the
 contents of the file were replaced. The replacement of the content is an atomic
@@ -146,39 +146,39 @@
 to replace the file contents with. `data_size`: The amount of `data`, in bytes,
 to be written to the file.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileAtomicReplace(const char *path, const char *data, int64_t data_size)
 ```
 
-### SbFileCanOpen ###
+### SbFileCanOpen
 
 Indicates whether SbFileOpen() with the given `flags` is allowed for `path`.
 
 `path`: The absolute path to be checked. `flags`: The flags that are being
 evaluated for the given `path`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileCanOpen(const char *path, int flags)
 ```
 
-### SbFileClose ###
+### SbFileClose
 
 Closes `file`. The return value indicates whether the file was closed
 successfully.
 
 `file`: The absolute path of the file to be closed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileClose(SbFile file)
 ```
 
-### SbFileDelete ###
+### SbFileDelete
 
 Deletes the regular file, symlink, or empty directory at `path`. This function
 is used primarily to clean up after unit tests. On some platforms, this function
@@ -186,38 +186,38 @@
 
 `path`: The absolute path of the file, symlink, or directory to be deleted.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileDelete(const char *path)
 ```
 
-### SbFileExists ###
+### SbFileExists
 
 Indicates whether a file or directory exists at `path`.
 
 `path`: The absolute path of the file or directory being checked.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileExists(const char *path)
 ```
 
-### SbFileFlush ###
+### SbFileFlush
 
 Flushes the write buffer to `file`. Data written via SbFileWrite is not
 necessarily committed until the SbFile is flushed or closed.
 
 `file`: The SbFile to which the write buffer is flushed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileFlush(SbFile file)
 ```
 
-### SbFileGetInfo ###
+### SbFileGetInfo
 
 Retrieves information about `file`. The return value indicates whether the file
 information was retrieved successfully.
@@ -226,13 +226,13 @@
 into which the retrieved data is placed. This variable is not touched if the
 operation is not successful.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileGetInfo(SbFile file, SbFileInfo *out_info)
 ```
 
-### SbFileGetPathInfo ###
+### SbFileGetPathInfo
 
 Retrieves information about the file at `path`. The return value indicates
 whether the file information was retrieved successfully.
@@ -241,36 +241,36 @@
 `out_info`: The variable into which the retrieved data is placed. This variable
 is not touched if the operation is not successful.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileGetPathInfo(const char *path, SbFileInfo *out_info)
 ```
 
-### SbFileIsValid ###
+### SbFileIsValid
 
 Returns whether the given file handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbFileIsValid(SbFile file)
 ```
 
-### SbFileModeStringToFlags ###
+### SbFileModeStringToFlags
 
 Converts an ISO `fopen()` mode string into flags that can be equivalently passed
 into SbFileOpen().
 
 `mode`: The mode string to be converted into flags.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbFileModeStringToFlags(const char *mode)
 ```
 
-### SbFileOpen ###
+### SbFileOpen
 
 Opens the file at `path`, which must be absolute, creating it if specified by
 `flags`. The read/write position is at the beginning of the file.
@@ -287,13 +287,13 @@
 sets this value to `false`. `out_error`: If `path` cannot be created, this is
 set to `kSbFileInvalid`. Otherwise, it is `NULL`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbFile SbFileOpen(const char *path, int flags, bool *out_created, SbFileError *out_error)
 ```
 
-### SbFileRead ###
+### SbFileRead
 
 Reads `size` bytes (or until EOF is reached) from `file` into `data`, starting
 at the file's current position.
@@ -306,13 +306,13 @@
 `file`: The SbFile from which to read data. `data`: The variable to which data
 is read. `size`: The amount of data (in bytes) to read.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbFileRead(SbFile file, char *data, int size)
 ```
 
-### SbFileReadAll ###
+### SbFileReadAll
 
 Reads `size` bytes (or until EOF is reached) from `file` into `data`, starting
 at the file's current position.
@@ -326,13 +326,13 @@
 `file`: The SbFile from which to read data. `data`: The variable to which data
 is read. `size`: The amount of data (in bytes) to read.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int SbFileReadAll(SbFile file, char *data, int size)
 ```
 
-### SbFileSeek ###
+### SbFileSeek
 
 Changes the current read/write position in `file`. The return value identifies
 the resultant current read/write position in the file (relative to the start) or
@@ -344,13 +344,13 @@
 value. `offset`: The amount that the read/write position is changed, relative to
 `whence`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbFileSeek(SbFile file, SbFileWhence whence, int64_t offset)
 ```
 
-### SbFileTruncate ###
+### SbFileTruncate
 
 Truncates the given `file` to the given `length`. The return value indicates
 whether the file was truncated successfully.
@@ -360,13 +360,13 @@
 then the file is extended with zeros. If `length` is negative, then the function
 is a no-op and returns `false`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbFileTruncate(SbFile file, int64_t length)
 ```
 
-### SbFileWrite ###
+### SbFileWrite
 
 Writes the given buffer into `file` at the file's current position, overwriting
 any data that was previously there.
@@ -380,13 +380,13 @@
 `file`: The SbFile to which data will be written. `data`: The data to be
 written. `size`: The amount of data (in bytes) to write.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbFileWrite(SbFile file, const char *data, int size)
 ```
 
-### SbFileWriteAll ###
+### SbFileWriteAll
 
 Writes the given buffer into `file`, starting at the beginning of the file, and
 overwriting any data that was previously there. Unlike SbFileWrite, this
@@ -397,7 +397,7 @@
 `file`: The file to which data will be written. `data`: The data to be written.
 `size`: The amount of data (in bytes) to write.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int SbFileWriteAll(SbFile file, const char *data, int size)
diff --git a/cobalt/site/docs/reference/starboard/modules/gles.md b/cobalt/site/docs/reference/starboard/modules/gles.md
index 7a9108a..049838f 100644
--- a/cobalt/site/docs/reference/starboard/modules/gles.md
+++ b/cobalt/site/docs/reference/starboard/modules/gles.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: gles.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `gles.h`
 
 The GLES API provides an interface with accompanying type declarations and
 defines that together provide a single consistent method of GLES usage across
@@ -11,37 +11,37 @@
 and versions on different systems, and to remove the requirement for any other
 code to directly pull in and use these system libraries.
 
-## GLES Version ##
+## GLES Version
 
 This API has the ability to support GLES 3.0, however platforms are not required
 to support anything beyond GLES 2.0. The caller is responsible for ensuring that
 the functions from GLES 3.0 they are calling from the interface are valid.
 
-## Macros ##
+## Macros
 
-### SB_GL_DEPTH_BUFFER_BIT ###
+### SB_GL_DEPTH_BUFFER_BIT
 
 Previously defined in [https://www.khronos.org/registry/OpenGL/api/GLES2/gl2.h](https://www.khronos.org/registry/OpenGL/api/GLES2/gl2.h)
 
-### SB_GL_READ_BUFFER ###
+### SB_GL_READ_BUFFER
 
 Previously defined in [https://www.khronos.org/registry/OpenGL/api/GLES3/gl3.h](https://www.khronos.org/registry/OpenGL/api/GLES3/gl3.h)
 .
 
-## Typedefs ##
+## Typedefs
 
-### SbGlBoolean ###
+### SbGlBoolean
 
 The following type definitions were adapted from the types declared in [https://www.khronos.org/registry/OpenGL/api/GLES2/gl2.h](https://www.khronos.org/registry/OpenGL/api/GLES2/gl2.h)
 .
 
-#### Definition ####
+#### Definition
 
 ```
 typedef uint8_t SbGlBoolean
 ```
 
-### SbGlIntPtr ###
+### SbGlIntPtr
 
 Some compilers will transform the intptr_t to an int transparently behind the
 scenes, which is not equivalent to a long int, or long long int, as far as the
@@ -49,17 +49,17 @@
 those exact types used by OpenGL ES 2.0 ( [https://www.khronos.org/registry/OpenGL/api/GLES2/gl2ext.h](https://www.khronos.org/registry/OpenGL/api/GLES2/gl2ext.h)
 ).
 
-#### Definition ####
+#### Definition
 
 ```
 typedef long int SbGlIntPtr
 ```
 
-## Structs ##
+## Structs
 
-### SbGlesInterface ###
+### SbGlesInterface
 
-#### Members ####
+#### Members
 
 *   `void(*glActiveTexture)(SbGlEnum texture)`
 
diff --git a/cobalt/site/docs/reference/starboard/modules/image.md b/cobalt/site/docs/reference/starboard/modules/image.md
index 1427d39..945938a 100644
--- a/cobalt/site/docs/reference/starboard/modules/image.md
+++ b/cobalt/site/docs/reference/starboard/modules/image.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: image.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `image.h`
 
 API for hardware accelerated image decoding. This module allows for the client
 to feed in raw, encoded data to be decoded directly into an SbDecodeTarget. It
@@ -11,7 +11,7 @@
 All functions in this module are safe to call from any thread at any point in
 time.
 
-## SbImageIsDecodeSupported and SbImageDecode Example ##
+## SbImageIsDecodeSupported and SbImageDecode Example
 
 ```
 SbDecodeTargetProvider* provider = GetProviderFromSomewhere();
@@ -28,9 +28,9 @@
                                              mime_type, format);
 ```
 
-## Functions ##
+## Functions
 
-### SbImageDecode ###
+### SbImageDecode
 
 Attempt to decode encoded `mime_type` image data `data` of size `data_size` into
 an SbDecodeTarget of SbDecodeFormatType `format`, possibly using
@@ -56,13 +56,13 @@
     kSbDecodeTargetInvalid will be returned, with any intermediate allocations
     being cleaned up in the implementation.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbDecodeTarget SbImageDecode(SbDecodeTargetGraphicsContextProvider *context_provider, void *data, int data_size, const char *mime_type, SbDecodeTargetFormat format)
 ```
 
-### SbImageIsDecodeSupported ###
+### SbImageIsDecodeSupported
 
 Whether the current platform supports hardware accelerated decoding an image of
 mime type `mime_type` into SbDecodeTargetFormat `format`. The `mime_type` must
@@ -70,7 +70,7 @@
 program, which means that the results of this function may be cached
 indefinitely.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbImageIsDecodeSupported(const char *mime_type, SbDecodeTargetFormat format)
diff --git a/cobalt/site/docs/reference/starboard/modules/input.md b/cobalt/site/docs/reference/starboard/modules/input.md
index e8df816..d2dd2db 100644
--- a/cobalt/site/docs/reference/starboard/modules/input.md
+++ b/cobalt/site/docs/reference/starboard/modules/input.md
@@ -1,18 +1,18 @@
----
-layout: doc
-title: "Starboard Module Reference: input.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `input.h`
 
 Defines input events and associated data types.
 
-## Enums ##
+## Enums
 
-### SbInputDeviceType ###
+### SbInputDeviceType
 
 Identifies possible input subsystem types. The types of events that each device
 type produces correspond to `SbInputEventType` values.
 
-#### Values ####
+#### Values
 
 *   `kSbInputDeviceTypeGesture`
 
@@ -57,11 +57,11 @@
 
     Produces `Input` events.
 
-### SbInputEventType ###
+### SbInputEventType
 
 The action that an input event represents.
 
-#### Values ####
+#### Values
 
 *   `kSbInputEventTypeMove`
 
@@ -86,13 +86,13 @@
 
     [https://w3c.github.io/uievents/#event-type-input](https://w3c.github.io/uievents/#event-type-input)
 
-## Structs ##
+## Structs
 
-### SbInputData ###
+### SbInputData
 
 Event data for `kSbEventTypeInput` events.
 
-#### Members ####
+#### Members
 
 *   `SbWindow window`
 
@@ -160,11 +160,11 @@
 
     Set to true if the input event is part of a composition event.
 
-### SbInputVector ###
+### SbInputVector
 
 A 2-dimensional vector used to represent points and motion vectors.
 
-#### Members ####
+#### Members
 
 *   `float x`
 *   `float y`
diff --git a/cobalt/site/docs/reference/starboard/modules/key.md b/cobalt/site/docs/reference/starboard/modules/key.md
index 2835b20..ed87e53 100644
--- a/cobalt/site/docs/reference/starboard/modules/key.md
+++ b/cobalt/site/docs/reference/starboard/modules/key.md
@@ -1,19 +1,19 @@
----
-layout: doc
-title: "Starboard Module Reference: key.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `key.h`
 
 Defines the canonical set of Starboard key codes.
 
-## Enums ##
+## Enums
 
-### SbKey ###
+### SbKey
 
 A standard set of key codes, ordered by value, that represent each possible
 input key across all kinds of devices. Starboard uses the semi-standard Windows
 virtual key codes documented at: [https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.aspx](https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.aspx)
 
-#### Values ####
+#### Values
 
 *   `kSbKeyUnknown`
 *   `kSbKeyCancel`
@@ -275,11 +275,11 @@
 *   `kSbKeyGamepadRightStickLeft`
 *   `kSbKeyGamepadRightStickRight`
 
-### SbKeyModifiers ###
+### SbKeyModifiers
 
 Bit-mask of key modifiers.
 
-#### Values ####
+#### Values
 
 *   `kSbKeyModifiersNone`
 *   `kSbKeyModifiersAlt`
diff --git a/cobalt/site/docs/reference/starboard/modules/log.md b/cobalt/site/docs/reference/starboard/modules/log.md
index 42de513..6cf3a49 100644
--- a/cobalt/site/docs/reference/starboard/modules/log.md
+++ b/cobalt/site/docs/reference/starboard/modules/log.md
@@ -1,18 +1,18 @@
----
-layout: doc
-title: "Starboard Module Reference: log.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `log.h`
 
 Defines core debug logging functions.
 
-## Enums ##
+## Enums
 
-### SbLogPriority ###
+### SbLogPriority
 
 The priority at which a message should be logged. The platform may be configured
 to filter logs by priority, or render them differently.
 
-#### Values ####
+#### Values
 
 *   `kSbLogPriorityUnknown`
 *   `kSbLogPriorityInfo`
@@ -20,9 +20,9 @@
 *   `kSbLogPriorityError`
 *   `kSbLogPriorityFatal`
 
-## Functions ##
+## Functions
 
-### SbLog ###
+### SbLog
 
 Writes `message` to the platform's debug output log. This method is thread-safe,
 and responsible for ensuring that the output from multiple threads is not mixed.
@@ -35,55 +35,55 @@
 termination. That said, platforms can adjust the message to be more suitable for
 their output method by wrapping the text, stripping unprintable characters, etc.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbLog(SbLogPriority priority, const char *message)
 ```
 
-### SbLogFlush ###
+### SbLogFlush
 
 Flushes the log buffer on some platforms. This method is safe to call from
 multiple threads.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbLogFlush()
 ```
 
-### SbLogFormat ###
+### SbLogFormat
 
 A log output method that additionally performs a string format on the data being
 logged.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbLogFormat(const char *format, va_list args) SB_PRINTF_FORMAT(1
 ```
 
-### SbLogFormatF ###
+### SbLogFormatF
 
 Inline wrapper of SbLogFormat that converts from ellipsis to va_args.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void static void static void SbLogFormatF(const char *format,...) SB_PRINTF_FORMAT(1
 ```
 
-### SbLogIsTty ###
+### SbLogIsTty
 
 Indicates whether the log output goes to a TTY or is being redirected.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbLogIsTty()
 ```
 
-### SbLogRaw ###
+### SbLogRaw
 
 A bare-bones log output method that is async-signal-safe, i.e. safe to call from
 an asynchronous signal handler (e.g. a `SIGSEGV` handler). It should not do any
@@ -91,13 +91,13 @@
 
 `message`: The message to be logged. Must not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbLogRaw(const char *message)
 ```
 
-### SbLogRawDumpStack ###
+### SbLogRawDumpStack
 
 Dumps the stack of the current thread to the log in an async-signal-safe manner,
 i.e. safe to call from an asynchronous signal handler (e.g. a `SIGSEGV`
@@ -108,28 +108,28 @@
 helper functions that might end up on top of every stack dump so that the stack
 dump is just the relevant function stack where the problem occurred.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbLogRawDumpStack(int frames_to_skip)
 ```
 
-### SbLogRawFormat ###
+### SbLogRawFormat
 
 A formatted log output method that is async-signal-safe, i.e. safe to call from
 an asynchronous signal handler (e.g. a `SIGSEGV` handler).
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbLogRawFormat(const char *format, va_list args) SB_PRINTF_FORMAT(1
 ```
 
-### SbLogRawFormatF ###
+### SbLogRawFormatF
 
 Inline wrapper of SbLogFormat to convert from ellipsis to va_args.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void static void static void SbLogRawFormatF(const char *format,...) SB_PRINTF_FORMAT(1
diff --git a/cobalt/site/docs/reference/starboard/modules/media.md b/cobalt/site/docs/reference/starboard/modules/media.md
index 132166c..42871c2 100644
--- a/cobalt/site/docs/reference/starboard/modules/media.md
+++ b/cobalt/site/docs/reference/starboard/modules/media.md
@@ -1,28 +1,28 @@
----
-layout: doc
-title: "Starboard Module Reference: media.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `media.h`
 
 Provides media definitions that are common between the Decoder and Player
 interfaces.
 
-## Macros ##
+## Macros
 
-### kSbMediaBitsPerPixelInvalid ###
+### kSbMediaBitsPerPixelInvalid
 
 Value used when a video's bits per pixel is not known.
 
-### kSbMediaVideoResolutionDimensionInvalid ###
+### kSbMediaVideoResolutionDimensionInvalid
 
 Value used when a video's resolution is not known.
 
-## Enums ##
+## Enums
 
-### SbMediaAudioCodec ###
+### SbMediaAudioCodec
 
 Types of audio elementary streams that can be supported.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaAudioCodecNone`
 *   `kSbMediaAudioCodecAac`
@@ -35,11 +35,11 @@
 *   `kSbMediaAudioCodecPcm`
 *   `kSbMediaAudioCodecIamf`
 
-### SbMediaAudioCodingType ###
+### SbMediaAudioCodingType
 
 Possible audio coding types.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaAudioCodingTypeNone`
 *   `kSbMediaAudioCodingTypeAac`
@@ -53,11 +53,11 @@
 *   `kSbMediaAudioCodingTypeMpeg3`
 *   `kSbMediaAudioCodingTypePcm`
 
-### SbMediaAudioConnector ###
+### SbMediaAudioConnector
 
 Possible audio connector types.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaAudioConnectorUnknown`
 *   `kSbMediaAudioConnectorAnalog`
@@ -76,11 +76,11 @@
 *   `kSbMediaAudioConnectorSpdif`
 *   `kSbMediaAudioConnectorUsb`
 
-### SbMediaAudioFrameStorageType ###
+### SbMediaAudioFrameStorageType
 
 Possible audio frame storage types.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaAudioFrameStorageTypeInterleaved`
 
@@ -96,22 +96,22 @@
     with timestamps 0, 1, 2, etc., the samples are stored in two buffers "L0 L1
     L2 ..." and "R0 R1 R2 ...".
 
-### SbMediaAudioSampleType ###
+### SbMediaAudioSampleType
 
 Possible audio sample types.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaAudioSampleTypeInt16Deprecated`
 *   `kSbMediaAudioSampleTypeFloat32`
 
-### SbMediaRangeId ###
+### SbMediaRangeId
 
 This corresponds to the WebM Range enum which is part of WebM color data (see [http://www.webmproject.org/docs/container/#Range](http://www.webmproject.org/docs/container/#Range)
 ). H.264 only uses a bool, which corresponds to the LIMITED/FULL values. Chrome-
 specific values start at 1000.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaRangeIdUnspecified`
 
@@ -127,13 +127,13 @@
     Range is defined by TransferId/MatrixId.
 *   `kSbMediaRangeIdLast`
 
-### SbMediaSupportType ###
+### SbMediaSupportType
 
 Indicates how confident the device is that it can play media resources of the
 given type. The values are a direct map of the canPlayType() method specified at
 the following link: [https://www.w3.org/TR/2011/WD-html5-20110113/video.html#dom-navigator-canplaytype](https://www.w3.org/TR/2011/WD-html5-20110113/video.html#dom-navigator-canplaytype)
 
-#### Values ####
+#### Values
 
 *   `kSbMediaSupportTypeNotSupported`
 
@@ -145,11 +145,11 @@
 
     The media type seems to be playable.
 
-### SbMediaType ###
+### SbMediaType
 
 Types of media component streams.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaTypeAudio`
 
@@ -158,11 +158,11 @@
 
     Value used for video streams.
 
-### SbMediaVideoCodec ###
+### SbMediaVideoCodec
 
 Types of video elementary streams that could be supported.
 
-#### Values ####
+#### Values
 
 *   `kSbMediaVideoCodecNone`
 *   `kSbMediaVideoCodecH264`
@@ -174,14 +174,14 @@
 *   `kSbMediaVideoCodecVp8`
 *   `kSbMediaVideoCodecVp9`
 
-## Structs ##
+## Structs
 
-### SbMediaAudioConfiguration ###
+### SbMediaAudioConfiguration
 
 A structure describing the audio configuration parameters of a single audio
 output.
 
-#### Members ####
+#### Members
 
 *   `SbMediaAudioConnector connector`
 
@@ -200,11 +200,11 @@
     `0` if this device cannot provide this information, in which case the caller
     can probably assume stereo output.
 
-### SbMediaAudioSampleInfo ###
+### SbMediaAudioSampleInfo
 
 The set of information required by the decoder or player for each audio sample.
 
-#### Members ####
+#### Members
 
 *   `SbMediaAudioStreamInfo stream_info`
 
@@ -212,11 +212,11 @@
 *   `SbTime discarded_duration_from_front`
 *   `SbTime discarded_duration_from_back`
 
-### SbMediaAudioStreamInfo ###
+### SbMediaAudioStreamInfo
 
 The set of information required by the decoder or player for each audio stream.
 
-#### Members ####
+#### Members
 
 *   `SbMediaAudioCodec codec`
 
@@ -242,14 +242,14 @@
 
     The AudioSpecificConfig, as specified in ISO/IEC-14496-3, section 1.6.2.1: [http://read.pudn.com/downloads98/doc/comm/401153/14496/ISO_IEC_14496-3%20Part%203%20Audio/C036083E_SUB1.PDF](http://read.pudn.com/downloads98/doc/comm/401153/14496/ISO_IEC_14496-3%20Part%203%20Audio/C036083E_SUB1.PDF)
 
-### SbMediaColorMetadata ###
+### SbMediaColorMetadata
 
 HDR (High Dynamic Range) Metadata common for HDR10 and WebM/VP9-based HDR
 formats, together with the ColorSpace. HDR reproduces a greater dynamic range of
 luminosity than is possible with standard digital imaging. See the Consumer
 Electronics Association press release: [https://www.cta.tech/News/Press-Releases/2015/August/CEA-Defines-%E2%80%98HDR-Compatible%E2%80%99-Displays.aspx](https://www.cta.tech/News/Press-Releases/2015/August/CEA-Defines-%E2%80%98HDR-Compatible%E2%80%99-Displays.aspx)
 
-#### Members ####
+#### Members
 
 *   `unsigned int bits_per_channel`
 
@@ -330,7 +330,7 @@
     a row-major ordered 3 x 4 submatrix of the 4 x 4 transform matrix. The 4th
     row is completed as (0, 0, 0, 1).
 
-### SbMediaMasteringMetadata ###
+### SbMediaMasteringMetadata
 
 SMPTE 2086 mastering data [http://ieeexplore.ieee.org/document/7291707/](http://ieeexplore.ieee.org/document/7291707/)
 This standard specifies the metadata items to specify the color volume (the
@@ -339,7 +339,7 @@
 independent of any specific digital representation. Also see the WebM container
 guidelines: [https://www.webmproject.org/docs/container/](https://www.webmproject.org/docs/container/)
 
-#### Members ####
+#### Members
 
 *   `float primary_r_chromaticity_x`
 
@@ -374,11 +374,11 @@
     Minimum luminance. Shall be represented in candelas per square meter
     (cd/m^2). In range [0, 9999.99].
 
-### SbMediaVideoSampleInfo ###
+### SbMediaVideoSampleInfo
 
 The set of information required by the decoder or player for each video sample.
 
-#### Members ####
+#### Members
 
 *   `SbMediaVideoStreamInfo stream_info`
 
@@ -388,11 +388,11 @@
     Indicates whether the associated sample is a key frame (I-frame). Avc video
     key frames must always start with SPS and PPS NAL units.
 
-### SbMediaVideoStreamInfo ###
+### SbMediaVideoStreamInfo
 
 The set of information required by the decoder or player for each video stream.
 
-#### Members ####
+#### Members
 
 *   `SbMediaVideoCodec codec`
 
@@ -434,9 +434,9 @@
     . This will only be specified on frames where the HDR metadata and color /
     color space might have changed (e.g. keyframes).
 
-## Functions ##
+## Functions
 
-### SbMediaCanPlayMimeAndKeySystem ###
+### SbMediaCanPlayMimeAndKeySystem
 
 Returns information about whether the playback of the specific media described
 by `mime` and encrypted using `key_system` can be played.
@@ -480,13 +480,13 @@
 implementation supports key system with attributes on one key system, it has to
 support key system with attributes on all key systems supported.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbMediaSupportType SbMediaCanPlayMimeAndKeySystem(const char *mime, const char *key_system)
 ```
 
-### SbMediaGetAudioBufferBudget ###
+### SbMediaGetAudioBufferBudget
 
 Specifies the maximum amount of memory used by audio buffers of media source
 before triggering a garbage collection. A large value will cause more memory
@@ -494,13 +494,13 @@
 download audio data. Note that the app may experience significant difficulty if
 this value is too low.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetAudioBufferBudget()
 ```
 
-### SbMediaGetAudioConfiguration ###
+### SbMediaGetAudioConfiguration
 
 Retrieves the current physical audio configuration of audio output
 `output_index` on this device and places it in `out_configuration`, which must
@@ -512,37 +512,37 @@
 `out_configuration`: The variable that holds the audio configuration
 information.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMediaGetAudioConfiguration(int output_index, SbMediaAudioConfiguration *out_configuration)
 ```
 
-### SbMediaGetAudioOutputCount ###
+### SbMediaGetAudioOutputCount
 
 Returns the number of audio outputs currently available on this device. Even if
 the number of outputs or their audio configurations can't be determined, it is
 expected that the platform will at least return a single output that supports at
 least stereo.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetAudioOutputCount()
 ```
 
-### SbMediaGetBufferAlignment ###
+### SbMediaGetBufferAlignment
 
 The media buffer will be allocated using the returned alignment. Set this to a
 larger value may increase the memory consumption of media buffers.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetBufferAlignment()
 ```
 
-### SbMediaGetBufferAllocationUnit ###
+### SbMediaGetBufferAllocationUnit
 
 When the media stack needs more memory to store media buffers, it will allocate
 extra memory in units returned by SbMediaGetBufferAllocationUnit. This can
@@ -550,13 +550,13 @@
 When SbMediaGetInitialBufferCapacity and this function both return 0, the media
 stack will allocate individual buffers directly using SbMemory functions.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetBufferAllocationUnit()
 ```
 
-### SbMediaGetBufferGarbageCollectionDurationThreshold ###
+### SbMediaGetBufferGarbageCollectionDurationThreshold
 
 Specifies the duration threshold of media source garbage collection. When the
 accumulated duration in a source buffer exceeds this value, the media source
@@ -567,54 +567,54 @@
 return 170 seconds for most of the platforms. But it can be further reduced on
 systems with extremely low memory.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbTime SbMediaGetBufferGarbageCollectionDurationThreshold()
 ```
 
-### SbMediaGetBufferPadding ###
+### SbMediaGetBufferPadding
 
 Extra bytes allocated at the end of a media buffer to ensure that the buffer can
 be use optimally by specific instructions like SIMD. Set to 0 to remove any
 padding.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetBufferPadding()
 ```
 
-### SbMediaGetBufferStorageType ###
+### SbMediaGetBufferStorageType
 
 Returns SbMediaBufferStorageType of type `SbMediaStorageTypeMemory` or
 `SbMediaStorageTypeFile`. For memory storage, the media buffers will be stored
 in main memory allocated by SbMemory functions. For file storage, the media
 buffers will be stored in a temporary file in the system cache folder acquired
 by calling SbSystemGetPath() with "kSbSystemPathCacheDirectory". Note that when
-its value is "file" the media stack will still allocate memory to cache the the
+its value is "file" the media stack will still allocate memory to cache the
 buffers in use.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbMediaBufferStorageType SbMediaGetBufferStorageType()
 ```
 
-### SbMediaGetInitialBufferCapacity ###
+### SbMediaGetInitialBufferCapacity
 
 The amount of memory that will be used to store media buffers allocated during
 system startup. To allocate a large chunk at startup helps with reducing
 fragmentation and can avoid failures to allocate incrementally. This can return
 0.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetInitialBufferCapacity()
 ```
 
-### SbMediaGetMaxBufferCapacity ###
+### SbMediaGetMaxBufferCapacity
 
 The maximum amount of memory that will be used to store media buffers. This must
 be larger than sum of the video budget and audio budget. This is a soft limit
@@ -629,13 +629,13 @@
 resolution. `bits_per_pixel`: the bits per pixel. This value is larger for HDR
 than non- HDR video.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetMaxBufferCapacity(SbMediaVideoCodec codec, int resolution_width, int resolution_height, int bits_per_pixel)
 ```
 
-### SbMediaGetProgressiveBufferBudget ###
+### SbMediaGetProgressiveBufferBudget
 
 The memory used when playing mp4 videos that is not in DASH format. The
 resolution of such videos shouldn't go beyond 1080p. Its value should be less
@@ -647,13 +647,13 @@
 resolution. `bits_per_pixel`: the bits per pixel. This value is larger for HDR
 than non- HDR video.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetProgressiveBufferBudget(SbMediaVideoCodec codec, int resolution_width, int resolution_height, int bits_per_pixel)
 ```
 
-### SbMediaGetVideoBufferBudget ###
+### SbMediaGetVideoBufferBudget
 
 Specifies the maximum amount of memory used by video buffers of media source
 before triggering a garbage collection. A large value will cause more memory
@@ -666,13 +666,13 @@
 resolution. `bits_per_pixel`: the bits per pixel. This value is larger for HDR
 than non- HDR video.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMediaGetVideoBufferBudget(SbMediaVideoCodec codec, int resolution_width, int resolution_height, int bits_per_pixel)
 ```
 
-### SbMediaIsBufferPoolAllocateOnDemand ###
+### SbMediaIsBufferPoolAllocateOnDemand
 
 When either SbMediaGetInitialBufferCapacity or SbMediaGetBufferAllocationUnit
 isn't zero, media buffers will be allocated using a memory pool. Set the
@@ -683,18 +683,18 @@
 release any media buffer memory back to the system even if there is no media
 buffers allocated.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMediaIsBufferPoolAllocateOnDemand()
 ```
 
-### SbMediaIsBufferUsingMemoryPool ###
+### SbMediaIsBufferUsingMemoryPool
 
 If SbMediaGetBufferUsingMemoryPool returns true, it indicates that media buffer
 pools should be allocated on demand, as opposed to using SbMemory* functions.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMediaIsBufferUsingMemoryPool()
diff --git a/cobalt/site/docs/reference/starboard/modules/memory.md b/cobalt/site/docs/reference/starboard/modules/memory.md
index 2fbf7dc..6dfa844 100644
--- a/cobalt/site/docs/reference/starboard/modules/memory.md
+++ b/cobalt/site/docs/reference/starboard/modules/memory.md
@@ -1,17 +1,17 @@
----
-layout: doc
-title: "Starboard Module Reference: memory.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `memory.h`
 
 Defines functions for memory allocation, alignment, copying, and comparing.
 
-## Porters ##
+## Porters
 
 All of the "Unchecked" and "Free" functions must be implemented, but they should
 not be called directly. The Starboard platform wraps them with extra accounting
 under certain circumstances.
 
-## Porters and Application Developers ##
+## Porters and Application Developers
 
 Nobody should call the "Checked", "Unchecked" or "Free" functions directly
 because that evades Starboard's memory tracking. In both port implementations
@@ -26,14 +26,14 @@
 
 *   The "free" functions are SbMemoryFree() and SbMemoryFreeAligned().
 
-## Enums ##
+## Enums
 
-### SbMemoryMapFlags ###
+### SbMemoryMapFlags
 
 The bitwise OR of these flags should be passed to SbMemoryMap to indicate how
 the mapped memory can be used.
 
-#### Values ####
+#### Values
 
 *   `kSbMemoryMapProtectReserved`
 
@@ -44,9 +44,9 @@
 *   `kSbMemoryMapProtectExec`
 *   `kSbMemoryMapProtectReadWrite`
 
-## Functions ##
+## Functions
 
-### SbMemoryAllocate ###
+### SbMemoryAllocate
 
 Allocates and returns a chunk of memory of at least `size` bytes. This function
 should be called from the client codebase. It is intended to be a drop-in
@@ -58,13 +58,13 @@
 return `NULL` or it may return a unique pointer value that can be passed to
 SbMemoryDeallocate.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocate(size_t size)
 ```
 
-### SbMemoryAllocateAligned ###
+### SbMemoryAllocateAligned
 
 Allocates and returns a chunk of memory of at least `size` bytes, aligned to
 `alignment`. This function should be called from the client codebase. It is
@@ -78,87 +78,87 @@
 `size` is `0`, the function may return `NULL` or it may return a unique aligned
 pointer value that can be passed to SbMemoryDeallocateAligned.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocateAligned(size_t alignment, size_t size)
 ```
 
-### SbMemoryAllocateAlignedChecked ###
+### SbMemoryAllocateAlignedChecked
 
 Same as SbMemoryAllocateAlignedUnchecked, but will abort() in the case of an
 allocation failure.
 
 DO NOT CALL. Call SbMemoryAllocateAligned(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocateAlignedChecked(size_t alignment, size_t size)
 ```
 
-### SbMemoryAllocateAlignedUnchecked ###
+### SbMemoryAllocateAlignedUnchecked
 
 This is the implementation of SbMemoryAllocateAligned that must be provided by
 Starboard ports.
 
 DO NOT CALL. Call SbMemoryAllocateAligned(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocateAlignedUnchecked(size_t alignment, size_t size)
 ```
 
-### SbMemoryAllocateChecked ###
+### SbMemoryAllocateChecked
 
 Same as SbMemoryAllocateUnchecked, but will abort() in the case of an allocation
 failure.
 
 DO NOT CALL. Call SbMemoryAllocate(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocateChecked(size_t size)
 ```
 
-### SbMemoryAllocateNoReport ###
+### SbMemoryAllocateNoReport
 
 Same as SbMemoryAllocate() but will not report memory to the tracker. Avoid
 using this unless absolutely necessary.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocateNoReport(size_t size)
 ```
 
-### SbMemoryAllocateUnchecked ###
+### SbMemoryAllocateUnchecked
 
 This is the implementation of SbMemoryAllocate that must be provided by
 Starboard ports.
 
 DO NOT CALL. Call SbMemoryAllocate(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryAllocateUnchecked(size_t size)
 ```
 
-### SbMemoryCalloc ###
+### SbMemoryCalloc
 
 A wrapper that implements a drop-in replacement for `calloc`, which is used in
 some packages.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static void* SbMemoryCalloc(size_t count, size_t size)
 ```
 
-### SbMemoryDeallocate ###
+### SbMemoryDeallocate
 
 Frees a previously allocated chunk of memory. If `memory` is NULL, then the
 operation is a no-op. This function should be called from the client codebase.
@@ -166,74 +166,74 @@
 
 `memory`: The chunk of memory to be freed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryDeallocate(void *memory)
 ```
 
-### SbMemoryDeallocateAligned ###
+### SbMemoryDeallocateAligned
 
 `memory`: The chunk of memory to be freed. If `memory` is NULL, then the
 function is a no-op.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryDeallocateAligned(void *memory)
 ```
 
-### SbMemoryDeallocateNoReport ###
+### SbMemoryDeallocateNoReport
 
 Same as SbMemoryDeallocate() but will not report memory deallocation to the
 tracker. This function must be matched with SbMemoryAllocateNoReport().
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryDeallocateNoReport(void *memory)
 ```
 
-### SbMemoryFlush ###
+### SbMemoryFlush
 
 Flushes any data in the given virtual address range that is cached locally in
 the current processor core to physical memory, ensuring that data and
 instruction caches are cleared. This is required to be called on executable
 memory that has been written to and might be executed in the future.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryFlush(void *virtual_address, int64_t size_bytes)
 ```
 
-### SbMemoryFree ###
+### SbMemoryFree
 
 This is the implementation of SbMemoryDeallocate that must be provided by
 Starboard ports.
 
 DO NOT CALL. Call SbMemoryDeallocate(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryFree(void *memory)
 ```
 
-### SbMemoryFreeAligned ###
+### SbMemoryFreeAligned
 
 This is the implementation of SbMemoryFreeAligned that must be provided by
 Starboard ports.
 
 DO NOT CALL. Call SbMemoryDeallocateAligned(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMemoryFreeAligned(void *memory)
 ```
 
-### SbMemoryMap ###
+### SbMemoryMap
 
 Allocates `size_bytes` worth of physical memory pages and maps them into an
 available virtual region. This function returns `SB_MEMORY_MAP_FAILED` on
@@ -248,24 +248,24 @@
 should not count it against any memory budget. `name`: A value that appears in
 the debugger on some platforms. The value can be up to 32 bytes.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryMap(int64_t size_bytes, int flags, const char *name)
 ```
 
-### SbMemoryProtect ###
+### SbMemoryProtect
 
 Change the protection of `size_bytes` of memory regions, starting from
 `virtual_address`, to `flags`, returning `true` on success.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMemoryProtect(void *virtual_address, int64_t size_bytes, int flags)
 ```
 
-### SbMemoryReallocate ###
+### SbMemoryReallocate
 
 Attempts to resize `memory` to be at least `size` bytes, without touching the
 contents of memory.
@@ -285,39 +285,39 @@
 `memory` will be resized. If `size` is `0`, the function may return `NULL` or it
 may return a unique pointer value that can be passed to SbMemoryDeallocate.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryReallocate(void *memory, size_t size)
 ```
 
-### SbMemoryReallocateChecked ###
+### SbMemoryReallocateChecked
 
 Same as SbMemoryReallocateUnchecked, but will abort() in the case of an
 allocation failure.
 
 DO NOT CALL. Call SbMemoryReallocate(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryReallocateChecked(void *memory, size_t size)
 ```
 
-### SbMemoryReallocateUnchecked ###
+### SbMemoryReallocateUnchecked
 
 This is the implementation of SbMemoryReallocate that must be provided by
 Starboard ports.
 
 DO NOT CALL. Call SbMemoryReallocate(...) instead.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbMemoryReallocateUnchecked(void *memory, size_t size)
 ```
 
-### SbMemoryUnmap ###
+### SbMemoryUnmap
 
 Unmap `size_bytes` of physical pages starting from `virtual_address`, returning
 `true` on success. After this function completes, [virtual_address,
@@ -327,7 +327,7 @@
 `(void*)0xA000`, and another call to `SbMemoryMap(0x1000)` returns
 `(void*)0xB000`, `SbMemoryUnmap(0xA000, 0x2000)` should free both regions.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMemoryUnmap(void *virtual_address, int64_t size_bytes)
diff --git a/cobalt/site/docs/reference/starboard/modules/memory_reporter.md b/cobalt/site/docs/reference/starboard/modules/memory_reporter.md
index 4b4a539..d1273c6 100644
--- a/cobalt/site/docs/reference/starboard/modules/memory_reporter.md
+++ b/cobalt/site/docs/reference/starboard/modules/memory_reporter.md
@@ -1,57 +1,57 @@
----
-layout: doc
-title: "Starboard Module Reference: memory_reporter.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `memory_reporter.h`
 
 Provides an interface for memory reporting.
 
-## Typedefs ##
+## Typedefs
 
-### SbMemoryReporterOnAlloc ###
+### SbMemoryReporterOnAlloc
 
 A function to report a memory allocation from SbMemoryAllocate(). Note that
 operator new calls SbMemoryAllocate which will delegate to this callback.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbMemoryReporterOnAlloc) (void *context, const void *memory, size_t size)
 ```
 
-### SbMemoryReporterOnDealloc ###
+### SbMemoryReporterOnDealloc
 
 A function to report a memory deallocation from SbMemoryDeallcoate(). Note that
 operator delete calls SbMemoryDeallocate which will delegate to this callback.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbMemoryReporterOnDealloc) (void *context, const void *memory)
 ```
 
-### SbMemoryReporterOnMapMemory ###
+### SbMemoryReporterOnMapMemory
 
 A function to report a memory mapping from SbMemoryMap().
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbMemoryReporterOnMapMemory) (void *context, const void *memory, size_t size)
 ```
 
-### SbMemoryReporterOnUnMapMemory ###
+### SbMemoryReporterOnUnMapMemory
 
 A function to report a memory unmapping from SbMemoryUnmap().
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbMemoryReporterOnUnMapMemory) (void *context, const void *memory, size_t size)
 ```
 
-## Structs ##
+## Structs
 
-### SbMemoryReporter ###
+### SbMemoryReporter
 
 SbMemoryReporter allows memory reporting via user-supplied functions. The void*
 context is passed to every call back. It's strongly recommended that C-Style
@@ -59,7 +59,7 @@
 compiler. For example, SbMemoryReporter mem_reporter = { MallocCallback, ....
 context };
 
-#### Members ####
+#### Members
 
 *   `SbMemoryReporterOnAlloc on_alloc_cb`
 
@@ -77,9 +77,9 @@
 
     Optional, is passed to callbacks as first argument.
 
-## Functions ##
+## Functions
 
-### SbMemorySetReporter ###
+### SbMemorySetReporter
 
 Sets the MemoryReporter. Any previous memory reporter is unset. No lifetime
 management is done internally on input pointer.
@@ -96,9 +96,8 @@
 SbMemoryReporter* mem_reporter = new ...; SbMemorySetReporter(&mem_reporter);
 ... SbMemorySetReporter(NULL); delete mem_reporter; // May crash.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMemorySetReporter(struct SbMemoryReporter *tracker)
 ```
-
diff --git a/cobalt/site/docs/reference/starboard/modules/microphone.md b/cobalt/site/docs/reference/starboard/modules/microphone.md
index 1379f86..497cbe9 100644
--- a/cobalt/site/docs/reference/starboard/modules/microphone.md
+++ b/cobalt/site/docs/reference/starboard/modules/microphone.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: microphone.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `microphone.h`
 
 Defines functions for microphone creation, control, audio data fetching, and
 destruction. This module supports multiple calls to `SbMicrophoneOpen` and
@@ -31,23 +31,23 @@
 
 1.  Destroy the microphone with `SbMicrophoneDestroy`.
 
-## Macros ##
+## Macros
 
-### kSbMicrophoneIdInvalid ###
+### kSbMicrophoneIdInvalid
 
 Well-defined value for an invalid microphone ID handle.
 
-### kSbMicrophoneInvalid ###
+### kSbMicrophoneInvalid
 
 Well-defined value for an invalid microphone handle.
 
-## Enums ##
+## Enums
 
-### SbMicrophoneType ###
+### SbMicrophoneType
 
 All possible microphone types.
 
-#### Values ####
+#### Values
 
 *   `kSbMicrophoneCamera`
 
@@ -66,37 +66,37 @@
     Unknown microphone type. The microphone could be different than the other
     enum descriptions or could fall under one of those descriptions.
 
-## Typedefs ##
+## Typedefs
 
-### SbMicrophone ###
+### SbMicrophone
 
 An opaque handle to an implementation-private structure that represents a
 microphone.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbMicrophonePrivate* SbMicrophone
 ```
 
-### SbMicrophoneId ###
+### SbMicrophoneId
 
 An opaque handle to an implementation-private structure that represents a
 microphone ID.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbMicrophoneIdPrivate* SbMicrophoneId
 ```
 
-## Structs ##
+## Structs
 
-### SbMicrophoneInfo ###
+### SbMicrophoneInfo
 
 Microphone information.
 
-#### Members ####
+#### Members
 
 *   `SbMicrophoneId id`
 
@@ -116,9 +116,9 @@
     of the microphone type. For example, "Headset Microphone". The string must
     be null terminated.
 
-## Functions ##
+## Functions
 
-### SbMicrophoneClose ###
+### SbMicrophoneClose
 
 Closes the microphone port, stops recording audio on `microphone`, and clears
 the unread buffer if it is not empty. If the microphone has already been
@@ -127,13 +127,13 @@
 
 `microphone`: The microphone to close.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMicrophoneClose(SbMicrophone microphone)
 ```
 
-### SbMicrophoneCreate ###
+### SbMicrophoneCreate
 
 Creates a microphone with the specified ID, audio sample rate, and cached audio
 buffer size. Starboard only requires support for creating one microphone at a
@@ -153,25 +153,25 @@
 this buffer in smaller chunks than this size. This parameter must be set to a
 value greater than zero and the ideal size is `2^n`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbMicrophone SbMicrophoneCreate(SbMicrophoneId id, int sample_rate_in_hz, int buffer_size_bytes)
 ```
 
-### SbMicrophoneDestroy ###
+### SbMicrophoneDestroy
 
 Destroys a microphone. If the microphone is in started state, it is first
 stopped and then destroyed. Any data that has been recorded and not read is
 thrown away.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbMicrophoneDestroy(SbMicrophone microphone)
 ```
 
-### SbMicrophoneGetAvailable ###
+### SbMicrophoneGetAvailable
 
 Retrieves all currently available microphone information and stores it in
 `out_info_array`. The return value is the number of the available microphones.
@@ -184,43 +184,43 @@
 placed into this output parameter. `info_array_size`: The size of
 `out_info_array`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMicrophoneGetAvailable(SbMicrophoneInfo *out_info_array, int info_array_size)
 ```
 
-### SbMicrophoneIdIsValid ###
+### SbMicrophoneIdIsValid
 
 Indicates whether the given microphone ID is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbMicrophoneIdIsValid(SbMicrophoneId id)
 ```
 
-### SbMicrophoneIsSampleRateSupported ###
+### SbMicrophoneIsSampleRateSupported
 
 Indicates whether the microphone supports the sample rate.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMicrophoneIsSampleRateSupported(SbMicrophoneId id, int sample_rate_in_hz)
 ```
 
-### SbMicrophoneIsValid ###
+### SbMicrophoneIsValid
 
 Indicates whether the given microphone is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbMicrophoneIsValid(SbMicrophone microphone)
 ```
 
-### SbMicrophoneOpen ###
+### SbMicrophoneOpen
 
 Opens the microphone port and starts recording audio on `microphone`.
 
@@ -230,13 +230,13 @@
 open. `microphone`: The microphone that will be opened and will start recording
 audio.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMicrophoneOpen(SbMicrophone microphone)
 ```
 
-### SbMicrophoneRead ###
+### SbMicrophoneRead
 
 Retrieves the recorded audio data from the microphone and writes that data to
 `out_audio_data`.
@@ -255,7 +255,7 @@
 smaller than `min_read_size` of `SbMicrophoneInfo`, the extra audio data that
 has already been read from the device is discarded.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbMicrophoneRead(SbMicrophone microphone, void *out_audio_data, int audio_data_size)
diff --git a/cobalt/site/docs/reference/starboard/modules/mutex.md b/cobalt/site/docs/reference/starboard/modules/mutex.md
index 58f1907..9c18999 100644
--- a/cobalt/site/docs/reference/starboard/modules/mutex.md
+++ b/cobalt/site/docs/reference/starboard/modules/mutex.md
@@ -1,24 +1,24 @@
----
-layout: doc
-title: "Starboard Module Reference: mutex.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `mutex.h`
 
 Defines a mutually exclusive lock that can be used to coordinate with other
 threads.
 
-## Macros ##
+## Macros
 
-### SB_MUTEX_MAX_SIZE ###
+### SB_MUTEX_MAX_SIZE
 
 Max size of the SbMutex type.
 
-## Enums ##
+## Enums
 
-### SbMutexResult ###
+### SbMutexResult
 
 Enumeration of possible results from acquiring a mutex.
 
-#### Values ####
+#### Values
 
 *   `kSbMutexAcquired`
 
@@ -30,22 +30,22 @@
 
     The mutex has already been destroyed.
 
-## Typedefs ##
+## Typedefs
 
-### SbMutex ###
+### SbMutex
 
 An opaque handle to a mutex type with reserved memory buffer of size
 SB_MUTEX_MAX_SIZE and aligned at void pointer type.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef union SbMutex  SbMutex
 ```
 
-## Functions ##
+## Functions
 
-### SbMutexAcquire ###
+### SbMutexAcquire
 
 Acquires `mutex`, blocking indefinitely. The return value identifies the
 acquisition result. SbMutexes are not reentrant, so a recursive acquisition
@@ -53,13 +53,13 @@
 
 `mutex`: The mutex to be acquired.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbMutexResult SbMutexAcquire(SbMutex *mutex)
 ```
 
-### SbMutexAcquireTry ###
+### SbMutexAcquireTry
 
 Acquires `mutex`, without blocking. The return value identifies the acquisition
 result. SbMutexes are not reentrant, so a recursive acquisition has undefined
@@ -67,52 +67,52 @@
 
 `mutex`: The mutex to be acquired.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbMutexResult SbMutexAcquireTry(SbMutex *mutex)
 ```
 
-### SbMutexCreate ###
+### SbMutexCreate
 
 Creates a new mutex. The return value indicates whether the function was able to
 create a new mutex.
 
 `out_mutex`: The handle to the newly created mutex.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMutexCreate(SbMutex *out_mutex)
 ```
 
-### SbMutexDestroy ###
+### SbMutexDestroy
 
 Destroys a mutex. The return value indicates whether the destruction was
 successful. Destroying a locked mutex results in undefined behavior.
 
 `mutex`: The mutex to be invalidated.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMutexDestroy(SbMutex *mutex)
 ```
 
-### SbMutexIsSuccess ###
+### SbMutexIsSuccess
 
 Indicates whether the given result is a success. A value of `true` indicates
 that the mutex was acquired.
 
 `result`: The result being checked.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbMutexIsSuccess(SbMutexResult result)
 ```
 
-### SbMutexRelease ###
+### SbMutexRelease
 
 Releases `mutex` held by the current thread. The return value indicates whether
 the release was successful. Releases should always be successful if `mutex` is
@@ -120,7 +120,7 @@
 
 `mutex`: The mutex to be released.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbMutexRelease(SbMutex *mutex)
diff --git a/cobalt/site/docs/reference/starboard/modules/once.md b/cobalt/site/docs/reference/starboard/modules/once.md
index ce3c4d6..3088cd9 100644
--- a/cobalt/site/docs/reference/starboard/modules/once.md
+++ b/cobalt/site/docs/reference/starboard/modules/once.md
@@ -1,43 +1,43 @@
----
-layout: doc
-title: "Starboard Module Reference: once.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `once.h`
 
 Onces represent initializations that should only ever happen once per process,
 in a thread-safe way.
 
-## Macros ##
+## Macros
 
-### SB_ONCE_MAX_SIZE ###
+### SB_ONCE_MAX_SIZE
 
 Max size of the SbOnceControl type.
 
-## Typedefs ##
+## Typedefs
 
-### SbOnceControl ###
+### SbOnceControl
 
 An opaque handle to a once control type with reserved memory buffer of size
 SB_ONCE_MAX_SIZE and aligned at void pointer type.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef union SbOnceControl  SbOnceControl
 ```
 
-### SbOnceInitRoutine ###
+### SbOnceInitRoutine
 
 Function pointer type for methods that can be called via the SbOnce() system.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbOnceInitRoutine) (void)
 ```
 
-## Functions ##
+## Functions
 
-### SbOnce ###
+### SbOnce
 
 Thread-safely runs `init_routine` only once.
 
@@ -50,7 +50,7 @@
 *   If `once_control` or `init_routine` is invalid, the function returns
     `false`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbOnce(SbOnceControl *once_control, SbOnceInitRoutine init_routine)
diff --git a/cobalt/site/docs/reference/starboard/modules/player.md b/cobalt/site/docs/reference/starboard/modules/player.md
index 8039f6b..0382642 100644
--- a/cobalt/site/docs/reference/starboard/modules/player.md
+++ b/cobalt/site/docs/reference/starboard/modules/player.md
@@ -1,53 +1,53 @@
----
-layout: doc
-title: "Starboard Module Reference: player.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `player.h`
 
 Defines an interface for controlling playback of media elementary streams.
 
-## Macros ##
+## Macros
 
-### SB_PLAYER_INITIAL_TICKET ###
+### SB_PLAYER_INITIAL_TICKET
 
 The value of the initial ticket held by the player before the first seek. The
 player will use this ticket value to make the first call to SbPlayerStatusFunc
 with kSbPlayerStateInitialized.
 
-### SB_PLAYER_NO_DURATION ###
+### SB_PLAYER_NO_DURATION
 
 The value to pass into SbPlayerCreate's `duration_pts` argument for cases where
 the duration is unknown, such as for live streams.
 
-### kSbPlayerInvalid ###
+### kSbPlayerInvalid
 
 Well-defined value for an invalid player.
 
-### kSbPlayerWriteDurationLocal ###
+### kSbPlayerWriteDurationLocal
 
 The audio write duration when all the audio connectors are local.
 
-### kSbPlayerWriteDurationRemote ###
+### kSbPlayerWriteDurationRemote
 
 The audio write duration when at least one of the audio connectors are remote.
 
-## Enums ##
+## Enums
 
-### SbPlayerDecoderState ###
+### SbPlayerDecoderState
 
 An indicator of whether the decoder can accept more samples.
 
-#### Values ####
+#### Values
 
 *   `kSbPlayerDecoderStateNeedsData`
 
     The decoder is asking for one more sample.
 
-### SbPlayerSampleSideDataType ###
+### SbPlayerSampleSideDataType
 
 Identify the type of side data accompanied with `SbPlayerSampleInfo`, as side
 data may come from multiple sources.
 
-#### Values ####
+#### Values
 
 *   `kMatroskaBlockAdditional`
 
@@ -56,11 +56,11 @@
     . The first 8 bytes of the data contains the value of BlockAddID in big
     endian format, followed by the content of BlockAdditional.
 
-### SbPlayerState ###
+### SbPlayerState
 
 An indicator of the general playback state.
 
-#### Values ####
+#### Values
 
 *   `kSbPlayerStateInitialized`
 
@@ -84,31 +84,31 @@
 
     The player has been destroyed, and will send no more callbacks.
 
-## Typedefs ##
+## Typedefs
 
-### SbPlayer ###
+### SbPlayer
 
 An opaque handle to an implementation-private structure representing a player.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbPlayerPrivate* SbPlayer
 ```
 
-### SbPlayerDeallocateSampleFunc ###
+### SbPlayerDeallocateSampleFunc
 
 Callback to free the given sample buffer data. When more than one buffer are
 sent in SbPlayerWriteSample(), the implementation only has to call this callback
-with `sample_buffer` points to the the first buffer.
+with `sample_buffer` points to the first buffer.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbPlayerDeallocateSampleFunc) (SbPlayer player, void *context, const void *sample_buffer)
 ```
 
-### SbPlayerDecoderStatusFunc ###
+### SbPlayerDecoderStatusFunc
 
 Callback for decoder status updates, called in response to a call to
 SbPlayerSeek() or SbPlayerWriteSample(). This callback will never be called
@@ -122,45 +122,45 @@
 SbPlayerWriteEndOfStream(). The player implementation should update the decoder
 status again after such call to notify its user to continue writing more frames.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbPlayerDecoderStatusFunc) (SbPlayer player, void *context, SbMediaType type, SbPlayerDecoderState state, int ticket)
 ```
 
-### SbPlayerErrorFunc ###
+### SbPlayerErrorFunc
 
 Callback for player errors, that may set a `message`. `error`: indicates the
 error code. `message`: provides specific informative diagnostic message about
 the error condition encountered. It is ok for the message to be an empty string
 or NULL if no information is available.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbPlayerErrorFunc) (SbPlayer player, void *context, SbPlayerError error, const char *message)
 ```
 
-### SbPlayerStatusFunc ###
+### SbPlayerStatusFunc
 
 Callback for player status updates. These callbacks will happen on a different
 thread than the calling thread, and it is not valid to call SbPlayer functions
 from within this callback.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbPlayerStatusFunc) (SbPlayer player, void *context, SbPlayerState state, int ticket)
 ```
 
-## Structs ##
+## Structs
 
-### SbPlayerCreationParam ###
+### SbPlayerCreationParam
 
 The playback related parameters to pass into SbPlayerCreate() and
 SbPlayerGetPreferredOutputMode().
 
-#### Members ####
+#### Members
 
 *   `SbDrmSystem drm_system`
 
@@ -186,11 +186,11 @@
     should be made available for the application to pull via calls to
     SbPlayerGetCurrentFrame().
 
-### SbPlayerInfo ###
+### SbPlayerInfo
 
 Information about the current media playback state.
 
-#### Members ####
+#### Members
 
 *   `SbTime current_media_timestamp`
 
@@ -237,11 +237,11 @@
     faster than normal speed. When it is less than one, the video is played in a
     slower than normal speed. Negative speeds are not supported.
 
-### SbPlayerSampleInfo ###
+### SbPlayerSampleInfo
 
 Information about the samples to be written into SbPlayerWriteSamples().
 
-#### Members ####
+#### Members
 
 *   `SbMediaType type`
 *   `const void * buffer`
@@ -274,12 +274,12 @@
     The DRM system related info for the media sample. This value is required for
     encrypted samples. Otherwise, it must be `NULL`.
 
-### SbPlayerSampleSideData ###
+### SbPlayerSampleSideData
 
 Side data accompanied with `SbPlayerSampleInfo`, it can be arbitrary binary data
 coming from multiple sources.
 
-#### Members ####
+#### Members
 
 *   `SbPlayerSampleSideDataType type`
 *   `const uint8_t * data`
@@ -290,9 +290,9 @@
 
     The size of the data pointed by `data`, in bytes.
 
-## Functions ##
+## Functions
 
-### SbPlayerDestroy ###
+### SbPlayerDestroy
 
 Destroys `player`, freeing all associated resources.
 
@@ -307,13 +307,13 @@
     SbPlayerDestroy has been called on that player. `player`: The player to be
     destroyed. Must not be `kSbPlayerInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbPlayerDestroy(SbPlayer player)
 ```
 
-### SbPlayerGetAudioConfiguration ###
+### SbPlayerGetAudioConfiguration
 
 Returns the audio configurations used by `player`.
 
@@ -371,13 +371,13 @@
 the audio output, refer to `SbMediaAudioConfiguration` for more details. Must
 not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbPlayerGetAudioConfiguration(SbPlayer player, int index, SbMediaAudioConfiguration *out_audio_configuration)
 ```
 
-### SbPlayerGetCurrentFrame ###
+### SbPlayerGetCurrentFrame
 
 Given a player created with the kSbPlayerOutputModeDecodeToTexture output mode,
 it will return a SbDecodeTarget representing the current frame to be rasterized.
@@ -389,13 +389,13 @@
 
 `player` must not be `kSbPlayerInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbDecodeTarget SbPlayerGetCurrentFrame(SbPlayer player)
 ```
 
-### SbPlayerGetMaximumNumberOfSamplesPerWrite ###
+### SbPlayerGetMaximumNumberOfSamplesPerWrite
 
 Writes a single sample of the given media type to `player`'s input stream. Its
 data may be passed in via more than one buffers. The lifetime of
@@ -409,13 +409,13 @@
 of sample for which the number is retrieved. See the `SbMediaType` enum in
 media.h.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbPlayerGetMaximumNumberOfSamplesPerWrite(SbPlayer player, SbMediaType sample_type)
 ```
 
-### SbPlayerGetPreferredOutputMode ###
+### SbPlayerGetPreferredOutputMode
 
 Returns the preferred output mode of the implementation when a video described
 by `creation_param` is played. It is assumed that it is okay to call
@@ -433,23 +433,23 @@
 and the implementation should try its best effort to return a valid output mode.
 `creation_param` must not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbPlayerOutputMode SbPlayerGetPreferredOutputMode(const SbPlayerCreationParam *creation_param)
 ```
 
-### SbPlayerIsValid ###
+### SbPlayerIsValid
 
 Returns whether the given player handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbPlayerIsValid(SbPlayer player)
 ```
 
-### SbPlayerSetBounds ###
+### SbPlayerSetBounds
 
 Sets the player bounds to the given graphics plane coordinates. The changes do
 not take effect until the next graphics frame buffer swap. The default bounds
@@ -470,13 +470,13 @@
 `y`: The y-coordinate of the upper-left corner of the player. `width`: The width
 of the player, in pixels. `height`: The height of the player, in pixels.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbPlayerSetBounds(SbPlayer player, int z_index, int x, int y, int width, int height)
 ```
 
-### SbPlayerSetPlaybackRate ###
+### SbPlayerSetPlaybackRate
 
 Set the playback rate of the `player`. `rate` is default to 1.0 which indicates
 the playback is at its original speed. A `rate` greater than one will make the
@@ -491,13 +491,13 @@
 
 `player` must not be `kSbPlayerInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbPlayerSetPlaybackRate(SbPlayer player, double playback_rate)
 ```
 
-### SbPlayerSetVolume ###
+### SbPlayerSetVolume
 
 Sets the player's volume.
 
@@ -506,13 +506,13 @@
 `0.0` and `1.0`, inclusive. A value of `0.0` means that the audio should be
 muted, and a value of `1.0` means that it should be played at full volume.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbPlayerSetVolume(SbPlayer player, double volume)
 ```
 
-### SbPlayerWriteEndOfStream ###
+### SbPlayerWriteEndOfStream
 
 Writes a marker to `player`'s input stream of `stream_type` indicating that
 there are no more samples for that media type for the remainder of this media
@@ -522,13 +522,13 @@
 `player`: The player to which the marker is written. `stream_type`: The type of
 stream for which the marker is written.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbPlayerWriteEndOfStream(SbPlayer player, SbMediaType stream_type)
 ```
 
-### SbPlayerWriteSamples ###
+### SbPlayerWriteSamples
 
 `sample_type`: The type of sample being written. See the `SbMediaType` enum in
 media.h. `sample_infos`: A pointer to an array of SbPlayerSampleInfo with
@@ -540,7 +540,7 @@
 `sample_infos`. It has to be at least one, and less than the return value of
 SbPlayerGetMaximumNumberOfSamplesPerWrite().
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbPlayerWriteSamples(SbPlayer player, SbMediaType sample_type, const SbPlayerSampleInfo *sample_infos, int number_of_sample_infos)
diff --git a/cobalt/site/docs/reference/starboard/modules/socket.md b/cobalt/site/docs/reference/starboard/modules/socket.md
index 9e0f81b..744c04e 100644
--- a/cobalt/site/docs/reference/starboard/modules/socket.md
+++ b/cobalt/site/docs/reference/starboard/modules/socket.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: socket.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `socket.h`
 
 Defines Starboard socket I/O functions. Starboard supports IPv4 and IPv6, TCP
 and UDP, server and client sockets. Some platforms may not support IPv6, some
@@ -18,19 +18,19 @@
 TODO: For platforms that do not support sockets at all, they must support at
 least a high-level HTTP client API (to be defined later).
 
-## Macros ##
+## Macros
 
-### kSbSocketInvalid ###
+### kSbSocketInvalid
 
 Well-defined value for an invalid socket handle.
 
-## Enums ##
+## Enums
 
-### SbSocketAddressType ###
+### SbSocketAddressType
 
 All possible address types.
 
-#### Values ####
+#### Values
 
 *   `kSbSocketAddressTypeIpv4`
 
@@ -39,13 +39,13 @@
 
     An IPv6 address, which uses 16 entries of the address buffer.
 
-### SbSocketError ###
+### SbSocketError
 
 Enumeration of all Starboard socket operation results. Despite the enum name,
 note that the value actually describes the outcome of an operation, which is not
 always an error.
 
-#### Values ####
+#### Values
 
 *   `kSbSocketOk`
 
@@ -63,11 +63,11 @@
 
     The operation failed for some other reason not specified above.
 
-### SbSocketProtocol ###
+### SbSocketProtocol
 
 All possible IP socket types.
 
-#### Values ####
+#### Values
 
 *   `kSbSocketProtocolTcp`
 
@@ -77,11 +77,11 @@
     The UDP/IP protocol, an unreliable, connectionless, discrete packet
     (datagram) protocol.
 
-### SbSocketResolveFilter ###
+### SbSocketResolveFilter
 
 Bits that can be set when calling SbSocketResolve to filter the results.
 
-#### Values ####
+#### Values
 
 *   `kSbSocketResolveFilterNone`
 
@@ -93,25 +93,25 @@
 
     Include Ipv6 addresses.
 
-## Typedefs ##
+## Typedefs
 
-### SbSocket ###
+### SbSocket
 
 A handle to a socket.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbSocketPrivate* SbSocket
 ```
 
-## Structs ##
+## Structs
 
-### SbSocketAddress ###
+### SbSocketAddress
 
 A representation of any possible supported address type.
 
-#### Members ####
+#### Members
 
 *   `uint8_t address`
 
@@ -126,11 +126,11 @@
     The port component of this socket address. If not specified, it will be
     zero, which is officially undefined.
 
-### SbSocketResolution ###
+### SbSocketResolution
 
 The result of a host name resolution.
 
-#### Members ####
+#### Members
 
 *   `SbSocketAddress* addresses`
 
@@ -139,9 +139,9 @@
 
     The length of the `addresses` array.
 
-## Functions ##
+## Functions
 
-### SbSocketAccept ###
+### SbSocketAccept
 
 Accepts a pending connection on `socket` and returns a new SbSocket representing
 that connection. This function sets the error on `socket` and returns
@@ -149,13 +149,13 @@
 
 `socket`: The SbSocket that is accepting a pending connection.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocket SbSocketAccept(SbSocket socket)
 ```
 
-### SbSocketBind ###
+### SbSocketBind
 
 Binds `socket` to a specific local interface and port specified by
 `local_address`. This function sets and returns the socket error if it is unable
@@ -170,24 +170,24 @@
 *   Setting the IP address to `0.0.0.0` means that the socket should be bound to
     all interfaces.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketError SbSocketBind(SbSocket socket, const SbSocketAddress *local_address)
 ```
 
-### SbSocketClearLastError ###
+### SbSocketClearLastError
 
 Clears the last error set on `socket`. The return value indicates whether the
 socket error was cleared.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketClearLastError(SbSocket socket)
 ```
 
-### SbSocketConnect ###
+### SbSocketConnect
 
 Opens a connection of `socket`'s type to the host and port specified by
 `address`. This function sets and returns the socket error if it is unable to
@@ -197,13 +197,13 @@
 `socket`: The type of connection that should be opened. `address`: The host and
 port to which the socket should connect.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketError SbSocketConnect(SbSocket socket, const SbSocketAddress *address)
 ```
 
-### SbSocketCreate ###
+### SbSocketCreate
 
 Creates a new non-blocking socket for protocol `protocol` using address family
 `address_type`.
@@ -216,13 +216,13 @@
 `address_type`: The type of IP address to use for the socket. `protocol`: The
 protocol to use for the socket.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocket SbSocketCreate(SbSocketAddressType address_type, SbSocketProtocol protocol)
 ```
 
-### SbSocketDestroy ###
+### SbSocketDestroy
 
 Destroys the `socket` by flushing it, closing any connection that may be active
 on it, and reclaiming any resources associated with it, including any
@@ -234,25 +234,25 @@
 
 `socket`: The SbSocket to be destroyed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketDestroy(SbSocket socket)
 ```
 
-### SbSocketFreeResolution ###
+### SbSocketFreeResolution
 
 Frees a resolution allocated by SbSocketResolve.
 
 `resolution`: The resolution to be freed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSocketFreeResolution(SbSocketResolution *resolution)
 ```
 
-### SbSocketGetInterfaceAddress ###
+### SbSocketGetInterfaceAddress
 
 Gets the source address and the netmask that would be used to connect to the
 destination. The netmask parameter is optional, and only populated if a non-NULL
@@ -288,26 +288,26 @@
 value is passed in, this function places the netmask associated with the source
 address in this output variable.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketGetInterfaceAddress(const SbSocketAddress *const destination, SbSocketAddress *out_source_address, SbSocketAddress *out_netmask)
 ```
 
-### SbSocketGetLastError ###
+### SbSocketGetLastError
 
 Returns the last error set on `socket`. If `socket` is not valid, this function
 returns `kSbSocketErrorFailed`.
 
 `socket`: The SbSocket that the last error is returned for.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketError SbSocketGetLastError(SbSocket socket)
 ```
 
-### SbSocketGetLocalAddress ###
+### SbSocketGetLocalAddress
 
 Gets the address that this socket is bound to locally, if the socket is
 connected. The return value indicates whether the address was retrieved
@@ -316,59 +316,59 @@
 `socket`: The SbSocket for which the local address is retrieved. `out_address`:
 The SbSocket's local address.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketGetLocalAddress(SbSocket socket, SbSocketAddress *out_address)
 ```
 
-### SbSocketIsConnected ###
+### SbSocketIsConnected
 
 Indicates whether `socket` is connected to anything. Invalid sockets are not
 connected.
 
 `socket`: The SbSocket to be checked.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketIsConnected(SbSocket socket)
 ```
 
-### SbSocketIsConnectedAndIdle ###
+### SbSocketIsConnectedAndIdle
 
 Returns whether `socket` is connected to anything, and, if so, whether it is
 receiving any data.
 
 `socket`: The SbSocket to be checked.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketIsConnectedAndIdle(SbSocket socket)
 ```
 
-### SbSocketIsIpv6Supported ###
+### SbSocketIsIpv6Supported
 
 Returns whether IPV6 is supported on the current platform.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketIsIpv6Supported()
 ```
 
-### SbSocketIsValid ###
+### SbSocketIsValid
 
 Returns whether the given socket handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbSocketIsValid(SbSocket socket)
 ```
 
-### SbSocketJoinMulticastGroup ###
+### SbSocketJoinMulticastGroup
 
 Joins `socket` to an IP multicast group identified by `address`. The equivalent
 of IP_ADD_MEMBERSHIP. The return value indicates whether the socket was joined
@@ -377,13 +377,13 @@
 `socket`: The SbSocket to be joined to the IP multicast group. `address`: The
 location of the IP multicast group.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketJoinMulticastGroup(SbSocket socket, const SbSocketAddress *address)
 ```
 
-### SbSocketListen ###
+### SbSocketListen
 
 Causes `socket` to listen on the local address that `socket` was previously
 bound to by SbSocketBind. This function sets and returns the socket error if it
@@ -392,13 +392,13 @@
 
 `socket`: The SbSocket on which the function operates.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketError SbSocketListen(SbSocket socket)
 ```
 
-### SbSocketReceiveFrom ###
+### SbSocketReceiveFrom
 
 Reads up to `data_size` bytes from `socket` into `out_data` and places the
 source address of the packet in `out_source` if out_source is not NULL. Returns
@@ -420,13 +420,13 @@
 the socket. Must not be NULL. `data_size`: The number of bytes to read.
 `out_source`: The source address of the packet.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbSocketReceiveFrom(SbSocket socket, char *out_data, int data_size, SbSocketAddress *out_source)
 ```
 
-### SbSocketResolve ###
+### SbSocketResolve
 
 Synchronously resolves `hostname` into the returned SbSocketResolution , which
 must be freed with SbSocketFreeResolution. The function returns `NULL` if it is
@@ -438,13 +438,13 @@
 However, if one IP address family filter is specified, only that address family
 is included. The function ignores unrecognized filter bits.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketResolution* SbSocketResolve(const char *hostname, int filters)
 ```
 
-### SbSocketSendTo ###
+### SbSocketSendTo
 
 Writes up to `data_size` bytes of `data` to `destination` via `socket`. Returns
 the number of bytes written, or a negative number if there is an error, in which
@@ -466,13 +466,13 @@
 connected persistently, so setting `destination` when sending to a TCP socket
 will cause an error.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbSocketSendTo(SbSocket socket, const char *data, int data_size, const SbSocketAddress *destination)
 ```
 
-### SbSocketSetBroadcast ###
+### SbSocketSetBroadcast
 
 Sets the `SO_BROADCAST`, or equivalent, option to `value` on `socket`. The
 return value indicates whether the option was actually set.
@@ -483,13 +483,13 @@
 `socket`: The SbSocket for which the option is set. `value`: The new value for
 the option.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetBroadcast(SbSocket socket, bool value)
 ```
 
-### SbSocketSetReceiveBufferSize ###
+### SbSocketSetReceiveBufferSize
 
 Sets the `SO_RCVBUF`, or equivalent, option to `size` on `socket`. The return
 value indicates whether the option was actually set.
@@ -497,13 +497,13 @@
 `socket`: The SbSocket for which the option is set. `size`: The value for the
 option.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetReceiveBufferSize(SbSocket socket, int32_t size)
 ```
 
-### SbSocketSetReuseAddress ###
+### SbSocketSetReuseAddress
 
 Sets the `SO_REUSEADDR`, or equivalent, option to `value` on `socket`. The
 return value indicates whether the option was actually set.
@@ -514,13 +514,13 @@
 `socket`: The SbSocket for which the option is set. `value`: The new value for
 the option.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetReuseAddress(SbSocket socket, bool value)
 ```
 
-### SbSocketSetSendBufferSize ###
+### SbSocketSetSendBufferSize
 
 Sets the `SO_SNDBUF`, or equivalent, option to `size` on `socket`. The return
 value indicates whether the option was actually set.
@@ -528,13 +528,13 @@
 `socket`: The SbSocket for which the option is set. `size`: The value for the
 option.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetSendBufferSize(SbSocket socket, int32_t size)
 ```
 
-### SbSocketSetTcpKeepAlive ###
+### SbSocketSetTcpKeepAlive
 
 Sets the `SO_KEEPALIVE`, or equivalent, option to `value` on `socket`. The
 return value indicates whether the option was actually set.
@@ -545,13 +545,13 @@
 The time between keep-alive packets. This value is only relevant if `value` is
 `true`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetTcpKeepAlive(SbSocket socket, bool value, SbTime period)
 ```
 
-### SbSocketSetTcpNoDelay ###
+### SbSocketSetTcpNoDelay
 
 Sets the `TCP_NODELAY`, or equivalent, option to `value` on `socket`. The return
 value indicates whether the option was actually set.
@@ -564,13 +564,13 @@
 `socket`: The SbSocket for which the option is set. `value`: Indicates whether
 the Nagle algorithm should be disabled (`value`=`true`).
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetTcpNoDelay(SbSocket socket, bool value)
 ```
 
-### SbSocketSetTcpWindowScaling ###
+### SbSocketSetTcpWindowScaling
 
 Sets the `SO_WINSCALE`, or equivalent, option to `value` on `socket`. The return
 value indicates whether the option was actually set.
@@ -578,7 +578,7 @@
 `socket`: The SbSocket for which the option is set. `value`: The value for the
 option.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketSetTcpWindowScaling(SbSocket socket, bool value)
diff --git a/cobalt/site/docs/reference/starboard/modules/socket_waiter.md b/cobalt/site/docs/reference/starboard/modules/socket_waiter.md
index 738fafb..146938c 100644
--- a/cobalt/site/docs/reference/starboard/modules/socket_waiter.md
+++ b/cobalt/site/docs/reference/starboard/modules/socket_waiter.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: socket_waiter.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `socket_waiter.h`
 
 Allows a thread to wait on many sockets at once. The standard usage pattern
 would be for a single I/O thread to:
@@ -26,19 +26,19 @@
 queuing the work item, or the SbSocketWaiter is not otherwise guaranteed to wake
 up.
 
-## Macros ##
+## Macros
 
-### kSbSocketWaiterInvalid ###
+### kSbSocketWaiterInvalid
 
 Well-defined value for an invalid socket watcher handle.
 
-## Enums ##
+## Enums
 
-### SbSocketWaiterInterest ###
+### SbSocketWaiterInterest
 
 All the interests that a socket may register for on a waiter.
 
-#### Values ####
+#### Values
 
 *   `kSbSocketWaiterInterestNone`
 
@@ -50,11 +50,11 @@
 
     An interest in or readiness to write to a socket without blocking.
 
-### SbSocketWaiterResult ###
+### SbSocketWaiterResult
 
 Possible reasons why a call to SbSocketWaiterWaitTimed returned.
 
-#### Values ####
+#### Values
 
 *   `kSbSocketWaiterResultInvalid`
 
@@ -66,31 +66,31 @@
 
     The wait stopped because a call to SbSocketWaiterWakeUp was consumed.
 
-## Typedefs ##
+## Typedefs
 
-### SbSocketWaiter ###
+### SbSocketWaiter
 
 A handle to a socket waiter.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbSocketWaiterPrivate* SbSocketWaiter
 ```
 
-### SbSocketWaiterCallback ###
+### SbSocketWaiterCallback
 
 Function pointer for socket waiter callbacks.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbSocketWaiterCallback) (SbSocketWaiter waiter, SbSocket socket, void *context, int ready_interests)
 ```
 
-## Functions ##
+## Functions
 
-### SbSocketWaiterAdd ###
+### SbSocketWaiterAdd
 
 Adds a new socket to be waited on by the `waiter` with a bitfield of
 `interests`. This function should only be called on the thread that waits on
@@ -120,25 +120,25 @@
     `callback`, even if not all registered `interests` became ready, which
     allows for adding it again in the `callback`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketWaiterAdd(SbSocketWaiter waiter, SbSocket socket, void *context, SbSocketWaiterCallback callback, int interests, bool persistent)
 ```
 
-### SbSocketWaiterCreate ###
+### SbSocketWaiterCreate
 
 The results of two threads waiting on the same waiter is undefined and will not
 work. Except for the SbSocketWaiterWakeUp() function, SbSocketWaiters are not
 thread-safe and don't expect to be modified concurrently.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketWaiter SbSocketWaiterCreate()
 ```
 
-### SbSocketWaiterDestroy ###
+### SbSocketWaiterDestroy
 
 Destroys `waiter` and removes all sockets still registered by way of
 SbSocketWaiterAdd. This function may be called on any thread as long as there is
@@ -146,23 +146,23 @@
 
 `waiter`: The SbSocketWaiter to be destroyed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketWaiterDestroy(SbSocketWaiter waiter)
 ```
 
-### SbSocketWaiterIsValid ###
+### SbSocketWaiterIsValid
 
 Returns whether the given socket handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbSocketWaiterIsValid(SbSocketWaiter watcher)
 ```
 
-### SbSocketWaiterRemove ###
+### SbSocketWaiterRemove
 
 Removes a socket, previously added with SbSocketWaiterAdd(), from a waiter. This
 function should only be called on the thread that waits on this waiter.
@@ -174,26 +174,26 @@
 `waiter`: The waiter from which the socket is removed. `socket`: The socket to
 remove from the waiter.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSocketWaiterRemove(SbSocketWaiter waiter, SbSocket socket)
 ```
 
-### SbSocketWaiterWait ###
+### SbSocketWaiterWait
 
 Waits on all registered sockets, calling the registered callbacks if and when
 the corresponding sockets become ready for an interested operation. This version
 exits only after SbSocketWaiterWakeUp() is called. This function should only be
 called on the thread that waits on this waiter.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSocketWaiterWait(SbSocketWaiter waiter)
 ```
 
-### SbSocketWaiterWaitTimed ###
+### SbSocketWaiterWaitTimed
 
 Behaves similarly to SbSocketWaiterWait(), but this function also causes
 `waiter` to exit on its own after at least `duration` has passed if
@@ -207,13 +207,13 @@
 function may wait longer than `duration`, such as if the timeout expires while a
 callback is being fired.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSocketWaiterResult SbSocketWaiterWaitTimed(SbSocketWaiter waiter, SbTime duration)
 ```
 
-### SbSocketWaiterWakeUp ###
+### SbSocketWaiterWakeUp
 
 Wakes up `waiter` once. This is the only thread-safe waiter function. It can can
 be called from a SbSocketWaiterCallback to wake up its own waiter, and it can
@@ -230,7 +230,7 @@
 
 `waiter`: The socket waiter to be woken up.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSocketWaiterWakeUp(SbSocketWaiter waiter)
diff --git a/cobalt/site/docs/reference/starboard/modules/speech_synthesis.md b/cobalt/site/docs/reference/starboard/modules/speech_synthesis.md
index e46a2ca..ea4ad46 100644
--- a/cobalt/site/docs/reference/starboard/modules/speech_synthesis.md
+++ b/cobalt/site/docs/reference/starboard/modules/speech_synthesis.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: speech_synthesis.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `speech_synthesis.h`
 
 A basic text-to-speech API intended to be used for audio accessibility.
 
@@ -11,29 +11,29 @@
 Note that these functions do not have to be thread-safe. They must only be
 called from a single application thread.
 
-## Functions ##
+## Functions
 
-### SbSpeechSynthesisCancel ###
+### SbSpeechSynthesisCancel
 
 Cancels all speaking and queued speech synthesis audio. Must return immediately.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSpeechSynthesisCancel()
 ```
 
-### SbSpeechSynthesisIsSupported ###
+### SbSpeechSynthesisIsSupported
 
 Returns whether the platform supports speech synthesis
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSpeechSynthesisIsSupported()
 ```
 
-### SbSpeechSynthesisSpeak ###
+### SbSpeechSynthesisSpeak
 
 Enqueues `text`, a UTF-8 string, to be spoken. Returns immediately.
 
@@ -44,7 +44,7 @@
 the current speaking should continue and this new text should be queued to play
 when the previous utterances are complete.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSpeechSynthesisSpeak(const char *text)
diff --git a/cobalt/site/docs/reference/starboard/modules/storage.md b/cobalt/site/docs/reference/starboard/modules/storage.md
index c98207b..b486ac8 100644
--- a/cobalt/site/docs/reference/starboard/modules/storage.md
+++ b/cobalt/site/docs/reference/starboard/modules/storage.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: storage.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `storage.h`
 
 Defines a user-based Storage API. This is a simple, all-at-once BLOB storage and
 retrieval API that is intended for robust long-term, per-user storage. Some
@@ -15,27 +15,27 @@
 These APIs are NOT expected to be thread-safe, so either call them from a single
 thread, or perform proper synchronization around all calls.
 
-## Macros ##
+## Macros
 
-### kSbStorageInvalidRecord ###
+### kSbStorageInvalidRecord
 
 Well-defined value for an invalid storage record handle.
 
-## Typedefs ##
+## Typedefs
 
-### SbStorageRecord ###
+### SbStorageRecord
 
 A handle to an open storage record.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbStorageRecordPrivate* SbStorageRecord
 ```
 
-## Functions ##
+## Functions
 
-### SbStorageCloseRecord ###
+### SbStorageCloseRecord
 
 Closes `record`, synchronously ensuring that all written data is flushed. This
 function performs blocking I/O on the calling thread.
@@ -47,13 +47,13 @@
 `record`: The storage record to close. `record` is invalid after this point, and
 subsequent calls referring to `record` will fail.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbStorageCloseRecord(SbStorageRecord record)
 ```
 
-### SbStorageDeleteRecord ###
+### SbStorageDeleteRecord
 
 Deletes the `SbStorageRecord` for `user` named `name`. The return value
 indicates whether the record existed and was successfully deleted. If the record
@@ -68,36 +68,36 @@
 `user`: The user for whom the record will be deleted. `name`: The filesystem-
 safe name of the record to open.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbStorageDeleteRecord(SbUser user, const char *name)
 ```
 
-### SbStorageGetRecordSize ###
+### SbStorageGetRecordSize
 
 Returns the size of `record`, or `-1` if there is an error. This function
 performs blocking I/O on the calling thread.
 
 `record`: The record to retrieve the size of.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbStorageGetRecordSize(SbStorageRecord record)
 ```
 
-### SbStorageIsValidRecord ###
+### SbStorageIsValidRecord
 
 Returns whether the given storage record handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbStorageIsValidRecord(SbStorageRecord record)
 ```
 
-### SbStorageOpenRecord ###
+### SbStorageOpenRecord
 
 Opens and returns the SbStorageRecord for `user` named `name`, blocking I/O on
 the calling thread until the open is completed. If `user` is not a valid
@@ -111,13 +111,13 @@
 `user`: The user for which the storage record will be opened. `name`: The
 filesystem-safe name of the record to open.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbStorageRecord SbStorageOpenRecord(SbUser user, const char *name)
 ```
 
-### SbStorageReadRecord ###
+### SbStorageReadRecord
 
 Reads up to `data_size` bytes from `record`, starting at the beginning of the
 record. The function returns the actual number of bytes read, which must be <=
@@ -128,13 +128,13 @@
 `record`: The record to be read. `out_data`: The data read from the record.
 `data_size`: The amount of data, in bytes, to read.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbStorageReadRecord(SbStorageRecord record, char *out_data, int64_t data_size)
 ```
 
-### SbStorageWriteRecord ###
+### SbStorageWriteRecord
 
 Replaces the data in `record` with `data_size` bytes from `data`. This function
 always deletes any previous data in that record. The return value indicates
@@ -151,7 +151,7 @@
 `record`: The record to be written to. `data`: The data to write to the record.
 `data_size`: The amount of `data`, in bytes, to write to the record.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbStorageWriteRecord(SbStorageRecord record, const char *data, int64_t data_size)
diff --git a/cobalt/site/docs/reference/starboard/modules/string.md b/cobalt/site/docs/reference/starboard/modules/string.md
index 95790d4..5e97968 100644
--- a/cobalt/site/docs/reference/starboard/modules/string.md
+++ b/cobalt/site/docs/reference/starboard/modules/string.md
@@ -1,13 +1,13 @@
----
-layout: doc
-title: "Starboard Module Reference: string.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `string.h`
 
 Defines functions for interacting with c-style strings.
 
-## Functions ##
+## Functions
 
-### SbStringCompareNoCase ###
+### SbStringCompareNoCase
 
 Compares two strings, ignoring differences in case. The return value is:
 
@@ -21,13 +21,13 @@
 
 `string1`: The first string to compare. `string2`: The second string to compare.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbStringCompareNoCase(const char *string1, const char *string2)
 ```
 
-### SbStringCompareNoCaseN ###
+### SbStringCompareNoCaseN
 
 Compares the first `count` characters of two strings, ignoring differences in
 case. The return value is:
@@ -43,13 +43,13 @@
 `string1`: The first string to compare. `string2`: The second string to compare.
 `count`: The number of characters to compare.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbStringCompareNoCaseN(const char *string1, const char *string2, size_t count)
 ```
 
-### SbStringDuplicate ###
+### SbStringDuplicate
 
 Copies `source` into a buffer that is allocated by this function and that can be
 freed with SbMemoryDeallocate. This function is meant to be a drop-in
@@ -57,13 +57,13 @@
 
 `source`: The string to be copied.
 
-#### Declaration ####
+#### Declaration
 
 ```
 char* SbStringDuplicate(const char *source)
 ```
 
-### SbStringFormat ###
+### SbStringFormat
 
 Produces a string formatted with `format` and `arguments`, placing as much of
 the result that will fit into `out_buffer`. The return value specifies the
@@ -76,13 +76,13 @@
 The size of `out_buffer`. `format`: A string that specifies how the data should
 be formatted. `arguments`: Variable arguments used in the string.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbStringFormat(char *out_buffer, size_t buffer_size, const char *format, va_list arguments) SB_PRINTF_FORMAT(3
 ```
 
-### SbStringFormatF ###
+### SbStringFormatF
 
 An inline wrapper of SbStringFormat that converts from ellipsis to va_args. This
 function is meant to be a drop-in replacement for `snprintf`.
@@ -91,13 +91,13 @@
 The size of `out_buffer`. `format`: A string that specifies how the data should
 be formatted. `...`: Arguments used in the string.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int static int static int SbStringFormatF(char *out_buffer, size_t buffer_size, const char *format,...) SB_PRINTF_FORMAT(3
 ```
 
-### SbStringFormatUnsafeF ###
+### SbStringFormatUnsafeF
 
 An inline wrapper of SbStringFormat that is meant to be a drop-in replacement
 for the unsafe but commonly used `sprintf`.
@@ -106,13 +106,13 @@
 string that specifies how the data should be formatted. `...`: Arguments used in
 the string.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int static int SbStringFormatUnsafeF(char *out_buffer, const char *format,...) SB_PRINTF_FORMAT(2
 ```
 
-### SbStringFormatWide ###
+### SbStringFormatWide
 
 This function is identical to SbStringFormat, but is for wide characters. It is
 meant to be a drop-in replacement for `vswprintf`.
@@ -121,13 +121,13 @@
 The size of `out_buffer`. `format`: A string that specifies how the data should
 be formatted. `arguments`: Variable arguments used in the string.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbStringFormatWide(wchar_t *out_buffer, size_t buffer_size, const wchar_t *format, va_list arguments)
 ```
 
-### SbStringFormatWideF ###
+### SbStringFormatWideF
 
 An inline wrapper of SbStringFormatWide that converts from ellipsis to
 `va_args`.
@@ -136,13 +136,13 @@
 The size of `out_buffer`. `format`: A string that specifies how the data should
 be formatted. `...`: Arguments used in the string.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int SbStringFormatWideF(wchar_t *out_buffer, size_t buffer_size, const wchar_t *format,...)
 ```
 
-### SbStringScan ###
+### SbStringScan
 
 Scans `buffer` for `pattern`, placing the extracted values in `arguments`. The
 return value specifies the number of successfully matched items, which may be
@@ -154,20 +154,20 @@
 for in `buffer`. `arguments`: Values matching `pattern` that were extracted from
 `buffer`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbStringScan(const char *buffer, const char *pattern, va_list arguments)
 ```
 
-### SbStringScanF ###
+### SbStringScanF
 
 An inline wrapper of SbStringScan that converts from ellipsis to `va_args`. This
 function is meant to be a drop-in replacement for `sscanf`. `buffer`: The string
 to scan for the pattern. `pattern`: The string to search for in `buffer`. `...`:
 Values matching `pattern` that were extracted from `buffer`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int SbStringScanF(const char *buffer, const char *pattern,...)
diff --git a/cobalt/site/docs/reference/starboard/modules/system.md b/cobalt/site/docs/reference/starboard/modules/system.md
index 32fd303..86437a3 100644
--- a/cobalt/site/docs/reference/starboard/modules/system.md
+++ b/cobalt/site/docs/reference/starboard/modules/system.md
@@ -1,21 +1,21 @@
----
-layout: doc
-title: "Starboard Module Reference: system.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `system.h`
 
 Defines a broad set of APIs that allow the client application to query build and
 runtime properties of the enclosing system.
 
-## Enums ##
+## Enums
 
-### SbSystemCapabilityId ###
+### SbSystemCapabilityId
 
 Runtime capabilities are boolean properties of a platform that can't be
 determined at compile-time. They may vary from device to device, but they will
 not change over the course of a single execution. They often specify particular
 behavior of other APIs within the bounds of their operating range.
 
-#### Values ####
+#### Values
 
 *   `kSbSystemCapabilityReversedEnterAndBack`
 
@@ -26,11 +26,11 @@
     only if) a system has this capability will SbSystemGetTotalGPUMemory() and
     SbSystemGetUsedGPUMemory() be valid to call.
 
-### SbSystemPathId ###
+### SbSystemPathId
 
 Enumeration of special paths that the platform can define.
 
-#### Values ####
+#### Values
 
 *   `kSbSystemPathContentDirectory`
 
@@ -66,22 +66,22 @@
     for storing the updates. See
     starboard/doc/evergreen/cobalt_evergreen_overview.md
 
-### SbSystemPlatformErrorResponse ###
+### SbSystemPlatformErrorResponse
 
 Possible responses for `SbSystemPlatformErrorCallback`.
 
-#### Values ####
+#### Values
 
 *   `kSbSystemPlatformErrorResponsePositive`
 *   `kSbSystemPlatformErrorResponseNegative`
 *   `kSbSystemPlatformErrorResponseCancel`
 
-### SbSystemPlatformErrorType ###
+### SbSystemPlatformErrorType
 
 Enumeration of possible values for the `type` parameter passed to the
 `SbSystemRaisePlatformError` function.
 
-#### Values ####
+#### Values
 
 *   `kSbSystemPlatformErrorTypeConnectionError`
 
@@ -90,12 +90,12 @@
     `kSbSystemPlatformErrorResponsePositive` then the request should be retried,
     otherwise the app should be stopped.
 
-### SbSystemPropertyId ###
+### SbSystemPropertyId
 
 System properties that can be queried for. Many of these are used in User-Agent
 string generation.
 
-#### Values ####
+#### Values
 
 *   `kSbSystemPropertyCertificationScope`
 
@@ -156,9 +156,9 @@
     Type of the device, e.g. such as "TV", "STB", "OTT" Please see Youtube
     Technical requirements for a full list of allowed values
 
-## Typedefs ##
+## Typedefs
 
-### SbSystemComparator ###
+### SbSystemComparator
 
 Pointer to a function to compare two items. The return value uses standard
 `*cmp` semantics:
@@ -171,23 +171,23 @@
 
 `a`: The first value to compare. `b`: The second value to compare.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int(* SbSystemComparator) (const void *a, const void *b)
 ```
 
-### SbSystemError ###
+### SbSystemError
 
 A type that can represent a system error code across all Starboard platforms.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int SbSystemError
 ```
 
-### SbSystemPlatformErrorCallback ###
+### SbSystemPlatformErrorCallback
 
 Type of callback function that may be called in response to an error
 notification from `SbSystemRaisePlatformError`. `response` is a code to indicate
@@ -195,36 +195,36 @@
 the error. `user_data` is the opaque pointer that was passed to the call to
 `SbSystemRaisePlatformError`.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbSystemPlatformErrorCallback) (SbSystemPlatformErrorResponse response, void *user_data)
 ```
 
-## Functions ##
+## Functions
 
-### SbSystemBreakIntoDebugger ###
+### SbSystemBreakIntoDebugger
 
 Breaks the current program into the debugger, if a debugger is attached. If a
 debugger is not attached, this function aborts the program.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SB_NORETURN void SbSystemBreakIntoDebugger()
 ```
 
-### SbSystemClearLastError ###
+### SbSystemClearLastError
 
 Clears the last error set by a Starboard call in the current thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemClearLastError()
 ```
 
-### SbSystemGetErrorString ###
+### SbSystemGetErrorString
 
 Generates a human-readable string for an error. The return value specifies the
 total desired length of the string.
@@ -233,13 +233,13 @@
 The generated string. This value may be null, and it is always terminated with a
 null byte. `string_length`: The maximum length of the error string.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbSystemGetErrorString(SbSystemError error, char *out_string, int string_length)
 ```
 
-### SbSystemGetExtension ###
+### SbSystemGetExtension
 
 Returns pointer to a constant global struct implementing the extension named
 `name`, if it is implemented. Otherwise return NULL. The `name` string must not
@@ -261,25 +261,25 @@
 ignored. As the version of extensions are incremented, fields may be added to
 the end of the struct, but never removed (only deprecated).
 
-#### Declaration ####
+#### Declaration
 
 ```
 const void* SbSystemGetExtension(const char *name)
 ```
 
-### SbSystemGetLastError ###
+### SbSystemGetLastError
 
 Gets the last platform-specific error code produced by any Starboard call in the
 current thread for diagnostic purposes. Semantic reactions to Starboard function
 call results should be modeled explicitly.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbSystemError SbSystemGetLastError()
 ```
 
-### SbSystemGetLocaleId ###
+### SbSystemGetLocaleId
 
 Gets the system's current POSIX-style Locale ID. The locale represents the
 location, language, and cultural conventions that the system wants to use, which
@@ -296,25 +296,25 @@
 
 For more information than you probably want about POSIX locales, see: [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html](http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html)
 
-#### Declaration ####
+#### Declaration
 
 ```
 const char* SbSystemGetLocaleId()
 ```
 
-### SbSystemGetNumberOfProcessors ###
+### SbSystemGetNumberOfProcessors
 
 Returns the number of processor cores available to this application. If the
 process is sandboxed to a subset of the physical cores, the function returns
 that sandboxed limit.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbSystemGetNumberOfProcessors()
 ```
 
-### SbSystemGetProperty ###
+### SbSystemGetProperty
 
 Retrieves the platform-defined system property specified by `property_id` and
 places its value as a zero-terminated string into the user-allocated `out_value`
@@ -335,13 +335,13 @@
 defined system property specified by `property_id`. `value_length`: The length
 of the system property.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemGetProperty(SbSystemPropertyId property_id, char *out_value, int value_length)
 ```
 
-### SbSystemGetRandomData ###
+### SbSystemGetRandomData
 
 A cryptographically secure random number generator that produces an arbitrary,
 non-negative number of `buffer_size` random, non-negative bytes. The generated
@@ -350,24 +350,24 @@
 `out_buffer`: A pointer for the generated random number. This value must not be
 null. `buffer_size`: The size of the random number, in bytes.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemGetRandomData(void *out_buffer, int buffer_size)
 ```
 
-### SbSystemGetRandomUInt64 ###
+### SbSystemGetRandomUInt64
 
 A cryptographically secure random number generator that gets 64 random bits and
 returns them as an `uint64_t`. This function does not require manual seeding.
 
-#### Declaration ####
+#### Declaration
 
 ```
 uint64_t SbSystemGetRandomUInt64()
 ```
 
-### SbSystemGetStack ###
+### SbSystemGetStack
 
 Places up to `stack_size` instruction pointer addresses of the current execution
 stack into `out_stack`. The return value specifies the number of entries added.
@@ -384,62 +384,62 @@
 `stack_size`: The maximum number of instruction pointer addresses to be placed
 into `out_stack` from the current execution stack.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbSystemGetStack(void **out_stack, int stack_size)
 ```
 
-### SbSystemGetTotalCPUMemory ###
+### SbSystemGetTotalCPUMemory
 
 Returns the total CPU memory (in bytes) potentially available to this
 application. If the process is sandboxed to a maximum allowable limit, the
 function returns the lesser of the physical and sandbox limits.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbSystemGetTotalCPUMemory()
 ```
 
-### SbSystemGetTotalGPUMemory ###
+### SbSystemGetTotalGPUMemory
 
 Returns the total GPU memory (in bytes) available for use by this application.
 This function may only be called the return value for calls to
 SbSystemHasCapability(kSbSystemCapabilityCanQueryGPUMemoryStats) is `true`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbSystemGetTotalGPUMemory()
 ```
 
-### SbSystemGetUsedCPUMemory ###
+### SbSystemGetUsedCPUMemory
 
 Returns the total physical CPU memory (in bytes) used by this application. This
 value should always be less than (or, in particularly exciting situations, equal
 to) SbSystemGetTotalCPUMemory().
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbSystemGetUsedCPUMemory()
 ```
 
-### SbSystemGetUsedGPUMemory ###
+### SbSystemGetUsedGPUMemory
 
 Returns the current amount of GPU memory (in bytes) that is currently being used
 by this application. This function may only be called if the return value for
 calls to SbSystemHasCapability(kSbSystemCapabilityCanQueryGPUMemoryStats) is
 `true`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int64_t SbSystemGetUsedGPUMemory()
 ```
 
-### SbSystemHasCapability ###
+### SbSystemHasCapability
 
 Returns whether the platform has the runtime capability specified by
 `capability_id`. Returns false for any unknown capabilities. This implementation
@@ -447,48 +447,48 @@
 
 `capability_id`: The runtime capability to check.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemHasCapability(SbSystemCapabilityId capability_id)
 ```
 
-### SbSystemHideSplashScreen ###
+### SbSystemHideSplashScreen
 
 Hides the system splash screen on systems that support a splash screen that is
 displayed while the application is loading. This function may be called from any
 thread and must be idempotent.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemHideSplashScreen()
 ```
 
-### SbSystemIsDebuggerAttached ###
+### SbSystemIsDebuggerAttached
 
 Attempts to determine whether the current program is running inside or attached
 to a debugger. The function returns `false` if neither of those cases is true.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemIsDebuggerAttached()
 ```
 
-### SbSystemNetworkIsDisconnected ###
+### SbSystemNetworkIsDisconnected
 
 Returns if the device is disconnected from network. "Disconnected" is chosen
 over connected because disconnection can be determined with more certainty than
 connection usually.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemNetworkIsDisconnected()
 ```
 
-### SbSystemRaisePlatformError ###
+### SbSystemRaisePlatformError
 
 Cobalt calls this function to notify the platform that an error has occurred in
 the application that the platform may need to handle. The platform is expected
@@ -510,13 +510,13 @@
 pointer that the platform should pass as an argument to the callback function,
 if it is called.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemRaisePlatformError(SbSystemPlatformErrorType type, SbSystemPlatformErrorCallback callback, void *user_data)
 ```
 
-### SbSystemRequestBlur ###
+### SbSystemRequestBlur
 
 Requests that the application move into the Blurred state at the next convenient
 point. This should roughly correspond to "unfocused application" in a
@@ -526,13 +526,13 @@
 the application. Before the `kSbEventTypeBlur` event is dispatched, some work
 may continue to be done, and unrelated system events may be dispatched.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemRequestBlur()
 ```
 
-### SbSystemRequestConceal ###
+### SbSystemRequestConceal
 
 Requests that the application move into the Concealed state at the next
 convenient point. This should roughly correspond to "minimization" in a
@@ -547,13 +547,13 @@
 running background tasks. The expectation is that an external system event will
 bring the application out of the Concealed state.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemRequestConceal()
 ```
 
-### SbSystemRequestFocus ###
+### SbSystemRequestFocus
 
 Requests that the application move into the Started state at the next convenient
 point. This should roughly correspond to a "focused application" in a
@@ -564,13 +564,13 @@
 the application. Before `kSbEventTypeFocus` is dispatched, some work may
 continue to be done, and unrelated system events may be dispatched.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemRequestFocus()
 ```
 
-### SbSystemRequestFreeze ###
+### SbSystemRequestFreeze
 
 Requests that the application move into the Frozen state at the next convenient
 point.
@@ -583,13 +583,13 @@
 The expectation is that an external system event will bring the application out
 of the Frozen state.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemRequestFreeze()
 ```
 
-### SbSystemRequestReveal ###
+### SbSystemRequestReveal
 
 Requests that the application move into the Blurred state at the next convenient
 point. This should roughly correspond to a "focused application" in a
@@ -600,13 +600,13 @@
 the application. Before the `kSbEventTypeReveal` event is dispatched, some work
 may continue to be done, and unrelated system events may be dispatched.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemRequestReveal()
 ```
 
-### SbSystemRequestStop ###
+### SbSystemRequestStop
 
 Requests that the application be terminated gracefully at the next convenient
 point. In the meantime, some work may continue to be done, and unrelated system
@@ -617,13 +617,13 @@
 `error_level`: An integer that serves as the return value for the process that
 is eventually terminated as a result of a call to this function.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbSystemRequestStop(int error_level)
 ```
 
-### SbSystemSignWithCertificationSecretKey ###
+### SbSystemSignWithCertificationSecretKey
 
 Computes a HMAC-SHA256 digest of `message` into `digest` using the application's
 certification secret. The `message` and the `digest` pointers must not be NULL.
@@ -633,13 +633,13 @@
 an error, or if it is not implemented. In this case the contents of `digest`
 will be undefined.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemSignWithCertificationSecretKey(const uint8_t *message, size_t message_size_in_bytes, uint8_t *digest, size_t digest_size_in_bytes)
 ```
 
-### SbSystemSupportsResume ###
+### SbSystemSupportsResume
 
 Returns false if the platform doesn't need resume after suspend support. In such
 case Cobalt will free up the resource it retains for resume after suspend. Note
@@ -647,13 +647,13 @@
 kSbEventTypeResume to the event handler. The return value of this function
 cannot change over the life time of the application.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemSupportsResume()
 ```
 
-### SbSystemSymbolize ###
+### SbSystemSymbolize
 
 Looks up `address` as an instruction pointer and places up to (`buffer_size -
 1`) characters of the symbol associated with it in `out_buffer`, which must not
@@ -665,7 +665,7 @@
 This function is used in crash signal handlers and, therefore, it must be async-
 signal-safe on platforms that support signals.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbSystemSymbolize(const void *address, char *out_buffer, int buffer_size)
diff --git a/cobalt/site/docs/reference/starboard/modules/thread.md b/cobalt/site/docs/reference/starboard/modules/thread.md
index 8440477..81a8697 100644
--- a/cobalt/site/docs/reference/starboard/modules/thread.md
+++ b/cobalt/site/docs/reference/starboard/modules/thread.md
@@ -1,35 +1,35 @@
----
-layout: doc
-title: "Starboard Module Reference: thread.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `thread.h`
 
 Defines functionality related to thread creation and cleanup.
 
-## Macros ##
+## Macros
 
-### kSbThreadContextInvalid ###
+### kSbThreadContextInvalid
 
 Well-defined value for an invalid thread context.
 
-### kSbThreadInvalidId ###
+### kSbThreadInvalidId
 
 Well-defined constant value to mean "no thread ID."
 
-### kSbThreadLocalKeyInvalid ###
+### kSbThreadLocalKeyInvalid
 
 Well-defined constant value to mean "no thread local key."
 
-### kSbThreadNoAffinity ###
+### kSbThreadNoAffinity
 
 Well-defined constant value to mean "no affinity."
 
-### kSbThreadSamplerInvalid ###
+### kSbThreadSamplerInvalid
 
 Well-defined value for an invalid thread sampler.
 
-## Enums ##
+## Enums
 
-### SbThreadPriority ###
+### SbThreadPriority
 
 A spectrum of thread priorities. Platforms map them appropriately to their own
 priority system. Note that scheduling is platform-specific, and what these
@@ -39,7 +39,7 @@
 a given platform. The only guarantee is that each lower priority should be
 treated less-than-or-equal-to a higher priority.
 
-#### Values ####
+#### Values
 
 *   `kSbThreadPriorityLowest`
 
@@ -79,116 +79,116 @@
     inherit the priority of the spawning thread, or it may mean a specific
     default priority, or it may mean something else, depending on the platform.
 
-## Typedefs ##
+## Typedefs
 
-### SbThread ###
+### SbThread
 
 An opaque handle to a thread type.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void* SbThread
 ```
 
-### SbThreadAffinity ###
+### SbThreadAffinity
 
 Type for thread core affinity. This generally will be a single cpu (or core or
 hyperthread) identifier. Some platforms may not support affinity, and some may
 have specific rules about how it must be used.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int32_t SbThreadAffinity
 ```
 
-### SbThreadContext ###
+### SbThreadContext
 
 A handle to the context of a frozen thread.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbThreadContextPrivate* SbThreadContext
 ```
 
-### SbThreadEntryPoint ###
+### SbThreadEntryPoint
 
 Function pointer type for SbThreadCreate. `context` is a pointer-sized bit of
 data passed in from the calling thread.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void*(* SbThreadEntryPoint) (void *context)
 ```
 
-### SbThreadId ###
+### SbThreadId
 
 An ID type that is unique per thread.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int32_t SbThreadId
 ```
 
-### SbThreadLocalDestructor ###
+### SbThreadLocalDestructor
 
 Function pointer type for Thread-Local destructors.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef void(* SbThreadLocalDestructor) (void *value)
 ```
 
-### SbThreadLocalKey ###
+### SbThreadLocalKey
 
 A handle to a thread-local key.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbThreadLocalKeyPrivate* SbThreadLocalKey
 ```
 
-### SbThreadSampler ###
+### SbThreadSampler
 
 A handle to a thread sampler.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbThreadSamplerPrivate* SbThreadSampler
 ```
 
-## Functions ##
+## Functions
 
-### SbThreadContextGetPointer ###
+### SbThreadContextGetPointer
 
 Gets the specified pointer-type `property` from the specified `context`. Returns
 `true` if successful and `out_value` has been modified, otherwise returns
 `false` and `out_value` is not modified.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbThreadContextGetPointer(SbThreadContext context, SbThreadContextProperty property, void **out_value)
 ```
 
-### SbThreadContextIsValid ###
+### SbThreadContextIsValid
 
 Returns whether the given thread context is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadContextIsValid(SbThreadContext context)
 ```
 
-### SbThreadCreate ###
+### SbThreadCreate
 
 Creates a new thread, which starts immediately.
 
@@ -214,13 +214,13 @@
 executed on the newly created thread. `context`: This value will be passed to
 the `entry_point` function.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbThread SbThreadCreate(int64_t stack_size, SbThreadPriority priority, SbThreadAffinity affinity, bool joinable, const char *name, SbThreadEntryPoint entry_point, void *context)
 ```
 
-### SbThreadCreateLocalKey ###
+### SbThreadCreateLocalKey
 
 Creates and returns a new, unique key for thread local data. If the function
 does not succeed, the function returns `kSbThreadLocalKeyInvalid`.
@@ -233,13 +233,13 @@
 `destructor`: A pointer to a function. The value may be NULL if no clean up is
 needed.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbThreadLocalKey SbThreadCreateLocalKey(SbThreadLocalDestructor destructor)
 ```
 
-### SbThreadDestroyLocalKey ###
+### SbThreadDestroyLocalKey
 
 Destroys thread local data for the specified key. The function is a no-op if the
 key is invalid (kSbThreadLocalKeyInvalid`) or has already been destroyed. This
@@ -247,13 +247,13 @@
 
 `key`: The key for which to destroy thread local data.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadDestroyLocalKey(SbThreadLocalKey key)
 ```
 
-### SbThreadDetach ###
+### SbThreadDetach
 
 Detaches `thread`, which prevents it from being joined. This is sort of like a
 non-blocking join. This function is a no-op if the thread is already detached or
@@ -261,33 +261,33 @@
 
 `thread`: The thread to be detached.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadDetach(SbThread thread)
 ```
 
-### SbThreadGetCurrent ###
+### SbThreadGetCurrent
 
 Returns the handle of the currently executing thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbThread SbThreadGetCurrent()
 ```
 
-### SbThreadGetId ###
+### SbThreadGetId
 
 Returns the Thread ID of the currently executing thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbThreadId SbThreadGetId()
 ```
 
-### SbThreadGetLocalValue ###
+### SbThreadGetLocalValue
 
 Returns the pointer-sized value for `key` in the currently executing thread's
 local storage. Returns `NULL` if key is `kSbThreadLocalKeyInvalid` or if the key
@@ -295,97 +295,97 @@
 
 `key`: The key for which to return the value.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbThreadGetLocalValue(SbThreadLocalKey key)
 ```
 
-### SbThreadGetName ###
+### SbThreadGetName
 
 Returns the debug name of the currently executing thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadGetName(char *buffer, int buffer_size)
 ```
 
-### SbThreadIsCurrent ###
+### SbThreadIsCurrent
 
 Returns whether `thread` is the current thread.
 
 `thread`: The thread to check.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadIsCurrent(SbThread thread)
 ```
 
-### SbThreadIsEqual ###
+### SbThreadIsEqual
 
 Indicates whether `thread1` and `thread2` refer to the same thread.
 
 `thread1`: The first thread to compare. `thread2`: The second thread to compare.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbThreadIsEqual(SbThread thread1, SbThread thread2)
 ```
 
-### SbThreadIsValid ###
+### SbThreadIsValid
 
 Returns whether the given thread handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadIsValid(SbThread thread)
 ```
 
-### SbThreadIsValidAffinity ###
+### SbThreadIsValidAffinity
 
 Returns whether the given thread affinity is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadIsValidAffinity(SbThreadAffinity affinity)
 ```
 
-### SbThreadIsValidId ###
+### SbThreadIsValidId
 
 Returns whether the given thread ID is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadIsValidId(SbThreadId id)
 ```
 
-### SbThreadIsValidLocalKey ###
+### SbThreadIsValidLocalKey
 
 Returns whether the given thread local variable key is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadIsValidLocalKey(SbThreadLocalKey key)
 ```
 
-### SbThreadIsValidPriority ###
+### SbThreadIsValidPriority
 
 Returns whether the given thread priority is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadIsValidPriority(SbThreadPriority priority)
 ```
 
-### SbThreadJoin ###
+### SbThreadJoin
 
 Joins the thread on which this function is called with joinable `thread`. This
 function blocks the caller until the designated thread exits, and then cleans up
@@ -403,36 +403,36 @@
 then the SbThreadJoin function populates it with the return value of the
 thread's `main` function.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbThreadJoin(SbThread thread, void **out_return)
 ```
 
-### SbThreadSamplerCreate ###
+### SbThreadSamplerCreate
 
 Creates a new thread sampler for the specified `thread`.
 
 If successful, this function returns the newly created handle. If unsuccessful,
 this function returns `kSbThreadSamplerInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbThreadSampler SbThreadSamplerCreate(SbThread thread)
 ```
 
-### SbThreadSamplerDestroy ###
+### SbThreadSamplerDestroy
 
 Destroys the `sampler` and frees whatever resources it was using.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadSamplerDestroy(SbThreadSampler sampler)
 ```
 
-### SbThreadSamplerFreeze ###
+### SbThreadSamplerFreeze
 
 Suspends execution of the thread that `sampler` was created for.
 
@@ -440,47 +440,47 @@
 from which properties may be read while the thread remains frozen. If
 unsuccessful, this function returns `kSbThreadContextInvalid`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbThreadContext SbThreadSamplerFreeze(SbThreadSampler sampler)
 ```
 
-### SbThreadSamplerIsSupported ###
+### SbThreadSamplerIsSupported
 
 Whether the current platform supports thread sampling. The result of this
 function must not change over the course of the program, which means that the
 results of this function may be cached indefinitely. If this returns false,
 `SbThreadSamplerCreate` will return an invalid sampler.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbThreadSamplerIsSupported()
 ```
 
-### SbThreadSamplerIsValid ###
+### SbThreadSamplerIsValid
 
 Returns whether the given thread sampler is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbThreadSamplerIsValid(SbThreadSampler sampler)
 ```
 
-### SbThreadSamplerThaw ###
+### SbThreadSamplerThaw
 
 Resumes execution of the thread that `sampler` was created for. This invalidates
 the context returned from `SbThreadSamplerFreeze`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbThreadSamplerThaw(SbThreadSampler sampler)
 ```
 
-### SbThreadSetLocalValue ###
+### SbThreadSetLocalValue
 
 Sets the pointer-sized value for `key` in the currently executing thread's local
 storage. The return value indicates whether `key` is valid and has not already
@@ -489,26 +489,26 @@
 `key`: The key for which to set the key value. `value`: The new pointer-sized
 key value.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbThreadSetLocalValue(SbThreadLocalKey key, void *value)
 ```
 
-### SbThreadSetName ###
+### SbThreadSetName
 
 Sets the debug name of the currently executing thread by copying the specified
 name string.
 
 `name`: The name to assign to the thread.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadSetName(const char *name)
 ```
 
-### SbThreadSleep ###
+### SbThreadSleep
 
 Sleeps the currently executing thread.
 
@@ -516,17 +516,17 @@
 executing thread should sleep. The function is a no-op if this value is negative
 or `0`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadSleep(SbTime duration)
 ```
 
-### SbThreadYield ###
+### SbThreadYield
 
 Yields the currently executing thread, so another thread has a chance to run.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbThreadYield()
diff --git a/cobalt/site/docs/reference/starboard/modules/time.md b/cobalt/site/docs/reference/starboard/modules/time.md
index 17ea6ad..e5c8cd2 100644
--- a/cobalt/site/docs/reference/starboard/modules/time.md
+++ b/cobalt/site/docs/reference/starboard/modules/time.md
@@ -1,59 +1,59 @@
----
-layout: doc
-title: "Starboard Module Reference: time.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `time.h`
 
 Provides access to system time and timers.
 
-## Macros ##
+## Macros
 
-### kSbTimeDay ###
+### kSbTimeDay
 
 One day in SbTime units (microseconds).
 
-### kSbTimeHour ###
+### kSbTimeHour
 
 One hour in SbTime units (microseconds).
 
-### kSbTimeMax ###
+### kSbTimeMax
 
 The maximum value of an SbTime.
 
-### kSbTimeMillisecond ###
+### kSbTimeMillisecond
 
 One millisecond in SbTime units (microseconds).
 
-### kSbTimeMinute ###
+### kSbTimeMinute
 
 One minute in SbTime units (microseconds).
 
-### kSbTimeNanosecondsPerMicrosecond ###
+### kSbTimeNanosecondsPerMicrosecond
 
 How many nanoseconds in one SbTime unit (microseconds).
 
-### kSbTimeSecond ###
+### kSbTimeSecond
 
 One second in SbTime units (microseconds).
 
-### kSbTimeToPosixDelta ###
+### kSbTimeToPosixDelta
 
 A term that can be added to an SbTime to convert it into the number of
 microseconds since the POSIX epoch.
 
-## Typedefs ##
+## Typedefs
 
-### SbTime ###
+### SbTime
 
 The number of microseconds since the epoch of January 1, 1601 UTC, or the number
 of microseconds between two times. Always microseconds, ALWAYS UTC.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int64_t SbTime
 ```
 
-### SbTimeMonotonic ###
+### SbTimeMonotonic
 
 A number of microseconds from some point. The main property of this time is that
 it increases monotonically. It should also be as high-resolution a timer as we
@@ -61,38 +61,38 @@
 without worrying about a system clock adjustment. It's not good for getting the
 wall clock time.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int64_t SbTimeMonotonic
 ```
 
-## Functions ##
+## Functions
 
-### SbTimeFromPosix ###
+### SbTimeFromPosix
 
 Converts microseconds from the POSIX epoch into an `SbTime`.
 
 `time`: A time that measures the number of microseconds since January 1, 1970,
 00:00:00, UTC.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static SbTime SbTimeFromPosix(int64_t time)
 ```
 
-### SbTimeGetMonotonicNow ###
+### SbTimeGetMonotonicNow
 
 Gets a monotonically increasing time representing right now.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbTimeMonotonic SbTimeGetMonotonicNow()
 ```
 
-### SbTimeGetMonotonicThreadNow ###
+### SbTimeGetMonotonicThreadNow
 
 Gets a monotonically increasing time representing how long the current thread
 has been in the executing state (i.e. not pre-empted nor waiting on an event).
@@ -100,44 +100,44 @@
 execution time between two timestamps. If this is not available then
 SbTimeGetMonotonicNow() should be used.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbTimeMonotonic SbTimeGetMonotonicThreadNow()
 ```
 
-### SbTimeGetNow ###
+### SbTimeGetNow
 
 Gets the current system time as an `SbTime`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbTime SbTimeGetNow()
 ```
 
-### SbTimeIsTimeThreadNowSupported ###
+### SbTimeIsTimeThreadNowSupported
 
 Returns whether the current platform supports time thread now
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbTimeIsTimeThreadNowSupported()
 ```
 
-### SbTimeNarrow ###
+### SbTimeNarrow
 
 Safely narrows a number from a more precise unit to a less precise one. This
 function rounds negative values toward negative infinity.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int64_t SbTimeNarrow(int64_t time, int64_t divisor)
 ```
 
-### SbTimeToPosix ###
+### SbTimeToPosix
 
 Converts `SbTime` into microseconds from the POSIX epoch.
 
@@ -145,7 +145,7 @@
 January 1, 1601, UTC, or that measures the number of microseconds between two
 times.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static int64_t SbTimeToPosix(SbTime time)
diff --git a/cobalt/site/docs/reference/starboard/modules/time_zone.md b/cobalt/site/docs/reference/starboard/modules/time_zone.md
index 5768bc3..baad375 100644
--- a/cobalt/site/docs/reference/starboard/modules/time_zone.md
+++ b/cobalt/site/docs/reference/starboard/modules/time_zone.md
@@ -1,48 +1,47 @@
----
-layout: doc
-title: "Starboard Module Reference: time_zone.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `time_zone.h`
 
 Provides access to the system time zone information.
 
-## Typedefs ##
+## Typedefs
 
-### SbTimeZone ###
+### SbTimeZone
 
 The number of minutes west of the Greenwich Prime Meridian, NOT including
 Daylight Savings Time adjustments.
 
-For example: PST/PDT is 480 minutes (28800 seconds, 8 hours).
+For example: America/Los_Angeles is 480 minutes (28800 seconds, 8 hours).
 
-#### Definition ####
+#### Definition
 
 ```
 typedef int SbTimeZone
 ```
 
-## Functions ##
+## Functions
 
-### SbTimeZoneGetCurrent ###
+### SbTimeZoneGetCurrent
 
 Gets the system's current SbTimeZone in minutes.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbTimeZone SbTimeZoneGetCurrent()
 ```
 
-### SbTimeZoneGetName ###
+### SbTimeZoneGetName
 
-Gets a string representation of the current timezone. Note that the string
-representation can either be standard or daylight saving time. The output can be
-of the form: 1) A three-letter abbreviation such as "PST" or "PDT" (preferred).
-2) A time zone identifier such as "America/Los_Angeles" 3) An un-abbreviated
-name such as "Pacific Standard Time".
+Gets a string representation of the current timezone. The format should be in
+the IANA format [https://data.iana.org/time-zones/theory.html#naming](https://data.iana.org/time-zones/theory.html#naming)) .
+Names normally have the form AREA/LOCATION, where AREA is a continent or ocean,
+and LOCATION is a specific location within the area. Typical names are
+'Africa/Cairo', 'America/New_York', and 'Pacific/Honolulu'.
 
-#### Declaration ####
+#### Declaration
 
 ```
 const char* SbTimeZoneGetName()
 ```
-
diff --git a/cobalt/site/docs/reference/starboard/modules/types.md b/cobalt/site/docs/reference/starboard/modules/types.md
index 90867a6..e1f372c 100644
--- a/cobalt/site/docs/reference/starboard/modules/types.md
+++ b/cobalt/site/docs/reference/starboard/modules/types.md
@@ -1,15 +1,15 @@
----
-layout: doc
-title: "Starboard Module Reference: types.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `types.h`
 
 Provides a suite of standard types that should be universally available on all
 platforms, specifically focused on explicitly-sized integer types and booleans.
 This module also includes some related ubiquitous definitions like limits of the
 explicitly-sized integer types, and standard pointer and int32 sentinel values.
 
-## Macros ##
+## Macros
 
-### kSbInvalidInt ###
+### kSbInvalidInt
 
 A value that represents an int that is probably invalid.
diff --git a/cobalt/site/docs/reference/starboard/modules/ui_navigation.md b/cobalt/site/docs/reference/starboard/modules/ui_navigation.md
index a0ecfb1..cb41767 100644
--- a/cobalt/site/docs/reference/starboard/modules/ui_navigation.md
+++ b/cobalt/site/docs/reference/starboard/modules/ui_navigation.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: ui_navigation.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `ui_navigation.h`
 
 API to allow applications to take advantage of the platform's native UI engine.
 This is mainly to drive the animation of visual elements and to signal which of
@@ -19,20 +19,20 @@
 user interaction. If the navigation item is a container, then the content offset
 will also be queried to determine the placement of its content items.
 
-## Macros ##
+## Macros
 
-### kSbUiNavItemInvalid ###
+### kSbUiNavItemInvalid
 
 Well-defined value for an invalid navigation item.
 
-## Enums ##
+## Enums
 
-### SbUiNavItemType ###
+### SbUiNavItemType
 
 Navigation items may be one of the following types. This must be specified upon
 item creation and may not change during the item's lifespan.
 
-#### Values ####
+#### Values
 
 *   `kSbUiNavItemTypeFocus`
 
@@ -42,29 +42,29 @@
     This is a container of navigation items which can also be containers
     themselves or focusable items. Containers themselves cannot be focused.
 
-## Typedefs ##
+## Typedefs
 
-### SbUiNavItem ###
+### SbUiNavItem
 
 An opaque handle to an implementation-private structure representing a
 navigation item.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef struct SbUiNavItemPrivate* SbUiNavItem
 ```
 
-## Structs ##
+## Structs
 
-### SbUiNavCallbacks ###
+### SbUiNavCallbacks
 
 This structure specifies all the callbacks which the platform UI engine should
 invoke for various interaction events on navigation items. These callbacks may
 be invoked from any thread at any frequency. The `callback_context` is the value
 that was passed on creation of the relevant SbUiNavItem.
 
-#### Members ####
+#### Members
 
 *   `void(*onblur)(SbUiNavItem item, void *callback_context)`
 
@@ -77,12 +77,12 @@
     Invoke when an item's content offset is changed. This is only used with
     container items.
 
-### SbUiNavInterface ###
+### SbUiNavInterface
 
 This structure declares the interface to the UI navigation implementation. All
 function pointers must be specified if the platform supports UI navigation.
 
-#### Members ####
+#### Members
 
 *   `SbUiNavItem(*create_item)(SbUiNavItemType type, const SbUiNavCallbacks
     *callbacks, void *callback_context)`
@@ -237,7 +237,7 @@
     Call `update_function` with `context` to perform a series of UI navigation
     changes atomically before returning.
 
-### SbUiNavItemDir ###
+### SbUiNavItemDir
 
 Navigation items of type kSbUiNavItemTypeContainer have directionality. If
 directionality is not specified for a container, it should default to left-to-
@@ -270,12 +270,12 @@
   Bottom-to-top is similar to right-to-left, but for the Y position.
 ```
 
-#### Members ####
+#### Members
 
 *   `bool is_left_to_right`
 *   `bool is_top_to_bottom`
 
-### SbUiNavMatrix2x3 ###
+### SbUiNavMatrix2x3
 
 This represents a 2x3 transform matrix in row-major order.
 
@@ -284,38 +284,38 @@
 ///   | c d ty |
 ```
 
-#### Members ####
+#### Members
 
 *   `float m`
 
-### SbUiNavMatrix4 ###
+### SbUiNavMatrix4
 
 This represents a 4x4 transform matrix in row-major order.
 
-#### Members ####
+#### Members
 
 *   `float m`
 
-## Functions ##
+## Functions
 
-### SbUiNavGetInterface ###
+### SbUiNavGetInterface
 
 Retrieve the platform's UI navigation implementation. If the platform does not
 provide one, then return false without modifying `out_interface`. Otherwise,
 initialize all members of `out_interface` and return true. The `out_interface`
 pointer must not be NULL.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbUiNavGetInterface(SbUiNavInterface *out_interface)
 ```
 
-### SbUiNavItemIsValid ###
+### SbUiNavItemIsValid
 
 Returns whether the given navigation item handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbUiNavItemIsValid(SbUiNavItem item)
diff --git a/cobalt/site/docs/reference/starboard/modules/user.md b/cobalt/site/docs/reference/starboard/modules/user.md
index a30cc95..9442ced 100644
--- a/cobalt/site/docs/reference/starboard/modules/user.md
+++ b/cobalt/site/docs/reference/starboard/modules/user.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Starboard Module Reference: user.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `user.h`
 
 Defines a user management API. This module defines functions only for managing
 signed-in users. Platforms that do not have users must still implement this API,
@@ -10,19 +10,19 @@
 These APIs are NOT expected to be thread-safe, so either call them from a single
 thread, or perform proper synchronization around all calls.
 
-## Macros ##
+## Macros
 
-### kSbUserInvalid ###
+### kSbUserInvalid
 
 Well-defined value for an invalid user.
 
-## Enums ##
+## Enums
 
-### SbUserPropertyId ###
+### SbUserPropertyId
 
 A set of string properties that can be queried on a user.
 
-#### Values ####
+#### Values
 
 *   `kSbUserPropertyAvatarUrl`
 
@@ -38,21 +38,21 @@
 
     A unique user ID of a user.
 
-## Typedefs ##
+## Typedefs
 
-### SbUser ###
+### SbUser
 
 A handle to a user.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbUserPrivate* SbUser
 ```
 
-## Functions ##
+## Functions
 
-### SbUserGetCurrent ###
+### SbUserGetCurrent
 
 Gets the current primary user, if one exists. This is the user that is
 determined, in a platform-specific way, to be the primary user controlling the
@@ -63,13 +63,13 @@
 It is expected that there will be a unique SbUser per signed-in user, and that
 the referenced objects will persist for the lifetime of the app.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbUser SbUserGetCurrent()
 ```
 
-### SbUserGetProperty ###
+### SbUserGetProperty
 
 Retrieves the value of `property_id` for `user` and places it in `out_value`.
 The function returns:
@@ -83,13 +83,13 @@
 The property for which the data is requested. `out_value`: The retrieved
 property value. `value_size`: The size of the retrieved property value.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbUserGetProperty(SbUser user, SbUserPropertyId property_id, char *out_value, int value_size)
 ```
 
-### SbUserGetPropertySize ###
+### SbUserGetPropertySize
 
 Returns the size of the value of `property_id` for `user`, INCLUDING the
 terminating null character. The function returns `0` if `user` is invalid or if
@@ -98,13 +98,13 @@
 `user`: The user for which property size data is being retrieved. `property_id`:
 The property for which the data is requested.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbUserGetPropertySize(SbUser user, SbUserPropertyId property_id)
 ```
 
-### SbUserGetSignedIn ###
+### SbUserGetSignedIn
 
 Gets a list of up to `users_size` signed-in users and places the results in
 `out_users`. The return value identifies the actual number of signed-in users,
@@ -116,17 +116,17 @@
 `out_users`: Handles for the retrieved users. `users_size`: The maximum number
 of signed-in users to retrieve.
 
-#### Declaration ####
+#### Declaration
 
 ```
 int SbUserGetSignedIn(SbUser *out_users, int users_size)
 ```
 
-### SbUserIsValid ###
+### SbUserIsValid
 
 Returns whether the given user handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbUserIsValid(SbUser user)
diff --git a/cobalt/site/docs/reference/starboard/modules/window.md b/cobalt/site/docs/reference/starboard/modules/window.md
index 53cda4a..af49c22 100644
--- a/cobalt/site/docs/reference/starboard/modules/window.md
+++ b/cobalt/site/docs/reference/starboard/modules/window.md
@@ -1,40 +1,40 @@
----
-layout: doc
-title: "Starboard Module Reference: window.h"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Starboard Module Reference: `window.h`
 
 Provides functionality to handle Window creation and management.
 
-## Macros ##
+## Macros
 
-### kSbEventOnScreenKeyboardInvalidTicket ###
+### kSbEventOnScreenKeyboardInvalidTicket
 
 System-triggered OnScreenKeyboard events have ticket value
 kSbEventOnScreenKeyboardInvalidTicket.
 
-### kSbWindowInvalid ###
+### kSbWindowInvalid
 
 Well-defined value for an invalid window handle.
 
-## Typedefs ##
+## Typedefs
 
-### SbWindow ###
+### SbWindow
 
 A handle to a window.
 
-#### Definition ####
+#### Definition
 
 ```
 typedef SbWindowPrivate* SbWindow
 ```
 
-## Structs ##
+## Structs
 
-### SbWindowOptions ###
+### SbWindowOptions
 
 Options that can be requested at window creation time.
 
-#### Members ####
+#### Members
 
 *   `SbWindowSize size`
 
@@ -48,25 +48,25 @@
 
     The name of the window to create.
 
-### SbWindowRect ###
+### SbWindowRect
 
 Defines a rectangle via a point `(x, y)` and a size `(width, height)`. This
 structure is used as output for SbWindowGetOnScreenKeyboardBoundingRect.
 
-#### Members ####
+#### Members
 
 *   `float x`
 *   `float y`
 *   `float width`
 *   `float height`
 
-### SbWindowSize ###
+### SbWindowSize
 
 The size of a window in graphics rendering coordinates. The width and height of
 a window should correspond to the size of the graphics surface used for drawing
 that would be created to back that window.
 
-#### Members ####
+#### Members
 
 *   `int width`
 
@@ -93,9 +93,9 @@
     A value of 0.0f means the ratio could not be determined, it should be
     assumed to be the same as the graphics resolution (i.e. 1.0f).
 
-## Functions ##
+## Functions
 
-### SbWindowBlurOnScreenKeyboard ###
+### SbWindowBlurOnScreenKeyboard
 
 Blur the on screen keyboard. Fire kSbEventTypeOnScreenKeyboardBlurred.
 kSbEventTypeOnScreenKeyboardBlurred has data `ticket`. Calling
@@ -103,13 +103,13 @@
 permitted. Calling SbWindowBlurOnScreenKeyboard while the on screen keyboard is
 not showing does nothing and does not fire any event.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowBlurOnScreenKeyboard(SbWindow window, int ticket)
 ```
 
-### SbWindowCreate ###
+### SbWindowCreate
 
 Creates and returns a new system window with the given `options`, which may be
 `NULL`. The function returns `kSbWindowInvalid` if it cannot create the
@@ -131,25 +131,25 @@
 
 `options`: Options that specify parameters for the window being created.
 
-#### Declaration ####
+#### Declaration
 
 ```
 SbWindow SbWindowCreate(const SbWindowOptions *options)
 ```
 
-### SbWindowDestroy ###
+### SbWindowDestroy
 
 Destroys `window`, reclaiming associated resources.
 
 `window`: The `SbWindow` to destroy.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbWindowDestroy(SbWindow window)
 ```
 
-### SbWindowFocusOnScreenKeyboard ###
+### SbWindowFocusOnScreenKeyboard
 
 Focus the on screen keyboard. Fire kSbEventTypeOnScreenKeyboardFocused.
 kSbEventTypeOnScreenKeyboardFocused has data `ticket`. Calling
@@ -157,38 +157,38 @@
 permitted. Calling SbWindowFocusOnScreenKeyboard while the on screen keyboard is
 not showing does nothing and does not fire any event.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowFocusOnScreenKeyboard(SbWindow window, int ticket)
 ```
 
-### SbWindowGetDiagonalSizeInInches ###
+### SbWindowGetDiagonalSizeInInches
 
 Gets the size of the diagonal between two opposing screen corners.
 
 A return value of 0 means that starboard does not know what the screen diagonal
 is.
 
-#### Declaration ####
+#### Declaration
 
 ```
 float SbWindowGetDiagonalSizeInInches(SbWindow window)
 ```
 
-### SbWindowGetOnScreenKeyboardBoundingRect ###
+### SbWindowGetOnScreenKeyboardBoundingRect
 
 Get the rectangle of the on screen keyboard in screen pixel coordinates. Return
 `true` if successful. Return `false` if the on screen keyboard is not showing.
 If the function returns `false`, then `rect` will not have been modified.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbWindowGetOnScreenKeyboardBoundingRect(SbWindow window, SbWindowRect *bounding_rect)
 ```
 
-### SbWindowGetPlatformHandle ###
+### SbWindowGetPlatformHandle
 
 Gets the platform-specific handle for `window`, which can be passed as an
 EGLNativeWindowType to initialize EGL/GLES. This return value is entirely
@@ -196,13 +196,13 @@
 
 `window`: The SbWindow to retrieve the platform handle for.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void* SbWindowGetPlatformHandle(SbWindow window)
 ```
 
-### SbWindowGetSize ###
+### SbWindowGetSize
 
 Retrieves the dimensions of `window` and sets `size` accordingly. This function
 returns `true` if it completes successfully. If the function returns `false`,
@@ -210,81 +210,81 @@
 
 `window`: The SbWindow to retrieve the size of. `size`: The retrieved size.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbWindowGetSize(SbWindow window, SbWindowSize *size)
 ```
 
-### SbWindowHideOnScreenKeyboard ###
+### SbWindowHideOnScreenKeyboard
 
 Hide the on screen keyboard. Fire kSbEventTypeWindowSizeChange and
 kSbEventTypeOnScreenKeyboardHidden if necessary.
 kSbEventTypeOnScreenKeyboardHidden has data `ticket`. Calling
 SbWindowHideOnScreenKeyboard() when the keyboard is already hidden is permitted.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowHideOnScreenKeyboard(SbWindow window, int ticket)
 ```
 
-### SbWindowIsOnScreenKeyboardShown ###
+### SbWindowIsOnScreenKeyboardShown
 
 Determine if the on screen keyboard is shown.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbWindowIsOnScreenKeyboardShown(SbWindow window)
 ```
 
-### SbWindowIsValid ###
+### SbWindowIsValid
 
 Returns whether the given window handle is valid.
 
-#### Declaration ####
+#### Declaration
 
 ```
 static bool SbWindowIsValid(SbWindow window)
 ```
 
-### SbWindowOnScreenKeyboardIsSupported ###
+### SbWindowOnScreenKeyboardIsSupported
 
 Return whether the current platform supports an on screen keyboard
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbWindowOnScreenKeyboardIsSupported()
 ```
 
-### SbWindowOnScreenKeyboardSuggestionsSupported ###
+### SbWindowOnScreenKeyboardSuggestionsSupported
 
 Determine if the on screen keyboard has suggestions implemented. If this returns
 false, then calling SbWindowUpdateOnScreenKeyboardSuggestions() will be
 undefined.
 
-#### Declaration ####
+#### Declaration
 
 ```
 bool SbWindowOnScreenKeyboardSuggestionsSupported(SbWindow window)
 ```
 
-### SbWindowSetDefaultOptions ###
+### SbWindowSetDefaultOptions
 
 Sets the default options for system windows.
 
 `options`: The option values to use as default values. This object must not be
 `NULL`.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowSetDefaultOptions(SbWindowOptions *options)
 ```
 
-### SbWindowSetOnScreenKeyboardKeepFocus ###
+### SbWindowSetOnScreenKeyboardKeepFocus
 
 Notify the system that `keepFocus` has been set for the OnScreenKeyboard.
 `keepFocus` true indicates that the user may not navigate focus off of the
@@ -293,13 +293,13 @@
 OnScreenKeyboard via input. `keepFocus` is initialized to false in the
 OnScreenKeyboard constructor.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowSetOnScreenKeyboardKeepFocus(SbWindow window, bool keep_focus)
 ```
 
-### SbWindowShowOnScreenKeyboard ###
+### SbWindowShowOnScreenKeyboard
 
 Show the on screen keyboard and populate the input with text `input_text`. Fire
 kSbEventTypeWindowSizeChange and kSbEventTypeOnScreenKeyboardShown if necessary.
@@ -309,13 +309,13 @@
 and the input will be replaced with `input_text`. Showing the on screen keyboard
 does not give it focus.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowShowOnScreenKeyboard(SbWindow window, const char *input_text, int ticket)
 ```
 
-### SbWindowUpdateOnScreenKeyboardSuggestions ###
+### SbWindowUpdateOnScreenKeyboardSuggestions
 
 Update the on screen keyboard custom suggestions. Fire
 kSbEventTypeOnScreenKeyboardSuggestionsUpdated.
@@ -323,7 +323,7 @@
 suggestions should remain up-to-date when the keyboard is shown after being
 hidden.
 
-#### Declaration ####
+#### Declaration
 
 ```
 void SbWindowUpdateOnScreenKeyboardSuggestions(SbWindow window, const char *suggestions[], int num_suggestions, int ticket)
diff --git a/cobalt/site/docs/starboard/porting.md b/cobalt/site/docs/starboard/porting.md
index d26b327..84c4b3f 100644
--- a/cobalt/site/docs/starboard/porting.md
+++ b/cobalt/site/docs/starboard/porting.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Porting Cobalt to your Platform with Starboard"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Porting Cobalt to your Platform with Starboard
 
 This document provides step-by-step instructions for porting Cobalt to run
 on your platform. To do so, you'll use Starboard, which is Cobalt's porting
@@ -26,9 +26,8 @@
 ```
 
 If you prefer, you can instead complete the instructions for
-[setting up a Cobalt development environment on Linux](
-/cobalt/development/setup-linux.html). Checking out the Cobalt source
-code is one step in that process.
+[setting up a Cobalt development environment on Linux](../development/setup-linux.md).
+Checking out the Cobalt source code is one step in that process.
 
 ## Porting steps
 
diff --git a/cobalt/site/docs/starboard/testing.md b/cobalt/site/docs/starboard/testing.md
index 16eea52..c40f71d 100644
--- a/cobalt/site/docs/starboard/testing.md
+++ b/cobalt/site/docs/starboard/testing.md
@@ -1,7 +1,7 @@
----
-layout: doc
-title: "Testing"
----
+Project: /youtube/cobalt/_project.yaml
+Book: /youtube/cobalt/_book.yaml
+
+# Testing
 
 Starboard attempts to make the porting process as easy as possible. To that
 end, Starboard provides a compliance test suite, called NPLB
diff --git a/cobalt/site/scripts/cobalt_configuration_public.py b/cobalt/site/scripts/cobalt_configuration_public.py
new file mode 100644
index 0000000..d7cb813
--- /dev/null
+++ b/cobalt/site/scripts/cobalt_configuration_public.py
@@ -0,0 +1,162 @@
+# Copyright 2023 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Module to generate Starboard Configuration Reference."""
+import environment
+import os
+import re
+import sys
+
+
+def print_doc_header(doc, title):
+  doc.write('Project: /youtube/cobalt/_project.yaml\n')
+  doc.write('Book: /youtube/cobalt/_book.yaml\n\n')
+  doc.write(f'# {title}\n\n')
+
+
+def print_doc_section_header(doc, section, section_headers):
+  doc.write('## ' + section + '\n\n')
+  if section in section_headers:
+    doc.write(section_headers[section] + '\n\n')
+
+
+def print_section_property_table_header(doc):
+  doc.write('| Properties |\n')
+  doc.write('| :--- |\n')
+
+
+def print_property(doc, prop):
+  comment = prop['comment']
+  comment = comment.replace('__', '&#95;&#95;')
+  if prop['value']:
+    line_break = ''
+    value = prop['value'].replace('|', r'\|')
+    if len(value) > 30:
+      line_break = '<br>'
+    if comment[-8:] != '<br><br>':
+      comment += '<br><br>'
+    comment += ('The default value in the Stub implementation is ' +
+                line_break + '`' + prop['value'] + '`')
+  elif prop['undefined']:
+    if comment[-8:] != '<br><br>':
+      comment += '<br><br>'
+    comment += 'By default, this property is undefined.'
+  if comment[0:8] != '<br><br>':
+    doc.write('| **`' + prop['name'] + '`**<br><br>' + comment + ' |\n')
+  else:
+    doc.write('| **`' + prop['name'] + '`**' + comment + ' |\n')
+
+
+def create_reference_doc(site_path, properties, section_headers):
+  reference_doc_path = os.path.join(site_path, 'docs', 'reference', 'starboard',
+                                    'configuration-public.md')
+  environment.make_dirs(os.path.dirname(reference_doc_path))
+  with open(reference_doc_path, 'w', encoding='utf8') as doc:
+    print_doc_header(doc, 'Starboard Configuration Reference Guide')
+
+    for section in sorted(properties):
+      if len(properties[section]) > 0:
+        print_doc_section_header(doc, section, section_headers)
+
+        print_section_property_table_header(doc)
+
+        for p in range(0, len(properties[section])):
+          print_property(doc, properties[section][p])
+
+        doc.write('\n\n')
+
+
+def main(source_dir, output_dir=None):
+  config_dir = environment.get_stub_platform_dir(source_dir)
+  file_path = os.path.join(config_dir, 'configuration_public.h')
+  with open(file_path, 'r', encoding='utf8') as file_contents:
+    file_lines = file_contents.readlines()
+
+  # parse .proto files
+  comment = ''
+  in_line_item = ''
+  section = ''
+  properties = {}
+  section_headers = {}
+  last_thing_was_a_header = False
+  for original_line in file_lines:
+    line = original_line.strip()
+    if line[0:7] == '// --- ':
+      section = line[7:].split(' -')[0]
+      properties[section] = []
+      last_thing_was_a_header = True
+    elif section and (line[0:8] == '#define ' or line[0:7] == '#undef '):
+
+      if in_line_item:
+        if comment:
+          comment += '</li></' + in_line_item + '>'
+        in_line_item = ''
+      last_thing_was_a_header = False
+      prop_array = line.split(' ')
+      prop = {'comment': '', 'name': '', 'value': '', 'undefined': False}
+      if line[0:7] == '#undef ':
+        prop['undefined'] = True
+      if len(prop_array) > 1:
+        prop['name'] = prop_array[1]
+      if len(prop_array) > 2:
+        prop['value'] = ' '.join(prop_array[2:])
+      if comment:
+        prop['comment'] = comment.strip()
+      if '(' in prop['name'] and ')' not in prop['name']:
+        new_string = ' '.join(prop_array[1:])
+        new_prop_array = new_string.split(')')
+        prop['name'] = new_prop_array[0] + ')'
+        new_value = ')'.join(new_prop_array[1:])
+        prop['value'] = new_value.strip()
+      properties[section].append(prop)
+      comment = ''
+    elif section and line[0:2] == '//':
+      ol_item_regex = re.compile(r'^\d\. ')
+      comment_text = line[2:].strip()
+      is_ol_item = re.search(ol_item_regex, comment_text)
+      if (is_ol_item or comment_text.strip()[0:2] == '- ' or
+          comment_text.strip()[0:2] == '* '):
+        # Replace '* ' at beginning of comment with '<li>'
+        # Strip whitespace before '*' and after '*" up to start of text
+        if not in_line_item:
+          if is_ol_item:
+            comment_text = '<ol><li>' + comment_text.strip()[2:].strip()
+            in_line_item = 'ol'
+          else:
+            comment_text = '<ul><li>' + comment_text.strip()[1:].strip()
+            in_line_item = 'ul'
+        else:
+          if is_ol_item:
+            comment_text = '</li><li>' + comment_text.strip()[2:].strip()
+          else:
+            comment_text = '</li><li>' + comment_text.strip()[1:].strip()
+      comment += ' ' + comment_text
+    elif comment and line == '':
+      if last_thing_was_a_header:
+        section_headers[section] = comment
+      last_thing_was_a_header = False
+      comment = ''
+      if comment[-8:] != '<br><br>':
+        comment += '<br><br>'
+
+  if output_dir:
+    site_path = environment.get_site_dir(output_dir)
+  else:
+    site_path = environment.get_site_dir(source_dir)
+  create_reference_doc(site_path, properties, section_headers)
+  return 0
+
+
+if __name__ == '__main__':
+  options = environment.parse_arguments(__doc__, sys.argv[1:])
+  sys.exit(main(options.source, options.out))
diff --git a/cobalt/site/scripts/cobalt_documentation.py b/cobalt/site/scripts/cobalt_documentation.py
new file mode 100644
index 0000000..36c9ca4
--- /dev/null
+++ b/cobalt/site/scripts/cobalt_documentation.py
@@ -0,0 +1,61 @@
+# Copyright 2023 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Module to copy Cobalt doc folders to cobalt site directory."""
+import environment
+import os
+import shutil
+import sys
+
+_COBALT_DOC_LOCATIONS = [
+    'cobalt/doc/',
+    'starboard/doc/',
+    'starboard/build/doc/',
+    'starboard/tools/doc/',
+]
+
+
+def write_header(doc):
+  doc.write('Project: /youtube/cobalt/_project.yaml\n')
+  doc.write('Book: /youtube/cobalt/_book.yaml\n\n')
+
+
+def copy_doc_locations(source_dir, output_dir=None):
+  if output_dir:
+    site_path = environment.get_site_dir(output_dir)
+  else:
+    site_path = environment.get_site_dir(source_dir)
+
+  gen_dir = os.path.join(site_path, 'docs', 'gen')
+  if os.path.exists(gen_dir):
+    shutil.rmtree(gen_dir)
+
+  for location in _COBALT_DOC_LOCATIONS:
+    shutil.copytree(
+        os.path.join(source_dir, location), os.path.join(gen_dir, location))
+
+  for root, _, files in os.walk(gen_dir):
+    for filename in files:
+      if not filename.endswith('.md'):
+        continue
+      filename = os.path.join(root, filename)
+      with open(filename, encoding='utf8') as f:
+        lines = f.readlines()
+      with open(filename, 'w', encoding='utf8') as f:
+        write_header(f)
+        f.writelines(lines)
+
+
+if __name__ == '__main__':
+  out = sys.argv[2] if len(sys.argv) == 3 else None
+  copy_doc_locations(sys.argv[1], out)
diff --git a/cobalt/site/scripts/cobalt_gn_configuration.py b/cobalt/site/scripts/cobalt_gn_configuration.py
new file mode 100644
index 0000000..901554d
--- /dev/null
+++ b/cobalt/site/scripts/cobalt_gn_configuration.py
@@ -0,0 +1,159 @@
+# Copyright 2023 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Module to generate GN Configuration Reference."""
+import json
+import environment
+import os
+import re
+import subprocess
+import sys
+
+
+def print_doc_header(doc, title):
+  doc.write('Project: /youtube/cobalt/_project.yaml\n')
+  doc.write('Book: /youtube/cobalt/_book.yaml\n\n')
+  doc.write(f'# {title}\n\n')
+
+
+def print_section_property_table_header(doc, section):
+  section = section.replace('_', ' ').capitalize()
+  doc.write('| ' + section + ' |\n')
+  doc.write('| :--- |\n')
+
+
+def format_comment(raw_comment):
+  """Reformats the comment to be a single line and layout lists correctly."""
+  list_item_regex = re.compile(r'\s+"([^"]+)"\s*-+\s*(.*)')
+  continued_list_item_regex = re.compile(r'\s+')
+
+  comment = ''
+  is_last_line_list_item = False
+  for line in raw_comment.splitlines():
+    list_item_match = re.search(list_item_regex, line)
+    comment_text = line.strip()
+    if comment_text[0:4] == 'TODO':
+      continue
+    elif list_item_match:
+      is_last_line_list_item = True
+      comment += f'<li><code>{list_item_match[1]}</code> - {list_item_match[2]}'
+    elif comment_text == '':
+      comment += '<br><br>'
+    else:
+      if is_last_line_list_item:
+        continued_list_item_match = re.search(continued_list_item_regex, line)
+        if not continued_list_item_match:
+          comment += '</li>'
+      comment += ' ' + comment_text
+
+  # Wrap the list items in a list element.
+  comment = comment.replace('<li>', '<ul><li>', 1)
+  comment = last_replace(comment, '</li>', '</li></ul>')
+  return comment
+
+
+def print_item(doc, name, value, comment):
+  comment = format_comment(comment)
+  if value:
+    value = value.replace('|', r'\|')
+    if comment[-8:] != '<br><br>':
+      comment += '<br><br>'
+    comment += ('The default value is `' + value + '`.')
+  if comment[0:8] != '<br><br>':
+    doc.write('| **`' + name + '`**<br><br>' + comment + ' |\n')
+  else:
+    doc.write('| **`' + name + '`**' + comment + ' |\n')
+
+
+def create_reference_doc(site_path, variables):
+  reference_doc_path = os.path.join(site_path, 'docs', 'reference', 'starboard',
+                                    'gn-configuration.md')
+  environment.make_dirs(os.path.dirname(reference_doc_path))
+  with open(reference_doc_path, 'w', encoding='utf8') as doc:
+    print_doc_header(doc, 'Starboard: configuration.gni Reference Guide')
+
+    print_section_property_table_header(doc, 'variables')
+    for name, value, comment in sorted(variables, key=lambda x: x[0]):
+      print_item(doc, name, value, comment)
+
+
+def add_args(args, function_data):
+  function_data = function_data.replace(');', '')
+  if function_data == '':
+    return args
+  arg_list = function_data.split(',')
+  for arg_index in range(0, len(arg_list)):
+    arg_item_no_ws = arg_list[arg_index].strip()
+    if arg_item_no_ws != '':
+      arg_details = arg_item_no_ws.split(' ')
+      args.append({'name': arg_details.pop(), 'type': ' '.join(arg_details)})
+  return args
+
+
+def last_replace(value, old, new):
+  reverse_list = value.rsplit(old, 1)
+  return new.join(reverse_list)
+
+
+def main(source_dir, output_dir=None):
+  base_config_path = '//starboard/build/config/base_configuration.gni'
+
+  # `gn args` will resolve all variables used in the default values before
+  # printing so in order to keep the docs looking reasonable the variables
+  # used must be listed here.
+  # Note that `root_out_dir` is not a build argument and cannot be overridden.
+  args = ['clang_base_path']
+  args_overrides = ' '.join(f'{x}="<{x}>"' for x in args)
+  try:
+    out_dir = '/project_out_dir'
+    subprocess.check_call(['gn', 'gen', out_dir], cwd=source_dir)
+    output = subprocess.check_output(
+        ['gn', 'args', out_dir, '--list', '--json', '--args=' + args_overrides],
+        cwd=source_dir)
+  except subprocess.CalledProcessError as cpe:
+    raise RuntimeError(f'Failed to run GN: {cpe.output}') from cpe
+
+  # If `gn args` invokes any print statements these will be printed before the
+  # json string starts. Strip all lines until we encounter the start of the json
+  # array.
+  output_lines = output.decode('utf-8').splitlines()
+  gn_vars = []
+  while output_lines:
+    try:
+      gn_vars = json.loads(' '.join(output_lines))
+    except ValueError:
+      # If the attempt to parse the rest of the lines fails we remove the first
+      # line and try again.
+      output_lines = output_lines[1:]
+    else:
+      break
+
+  variables = []
+  for variable in gn_vars:
+    if variable['default'].get('file') == base_config_path:
+      name = variable['name']
+      value = variable['default']['value']
+      comment = variable.get('comment', '').strip()
+      variables.append((name, value, comment))
+
+  if output_dir:
+    site_path = environment.get_site_dir(output_dir)
+  else:
+    site_path = environment.get_site_dir(source_dir)
+  create_reference_doc(site_path, variables)
+  return 0
+
+
+if __name__ == '__main__':
+  options = environment.parse_arguments('', sys.argv[1:])
+  sys.exit(main(options.source, options.out))
diff --git a/cobalt/site/scripts/cobalt_module_reference.py b/cobalt/site/scripts/cobalt_module_reference.py
new file mode 100644
index 0000000..8cd3798
--- /dev/null
+++ b/cobalt/site/scripts/cobalt_module_reference.py
@@ -0,0 +1,486 @@
+# Copyright 2017 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Generates reference markdown documentation for Starboard modules.
+
+The full process:
+1. Preprocess the files to be Doxygen friendly (Doxygenation).
+2. Run Doxygen to produce XML that describes each module.
+3. Parse the XML and generate Markdown for each module.
+"""
+
+import contextlib
+from io import StringIO
+import logging
+import os
+import re
+import sys
+from xml.etree import ElementTree as ET
+
+import doxygen
+import environment
+from markdown_writer import MarkdownWriter
+
+_HEADER_PATTERN = r'.*\.h$'
+_HEADER_RE = re.compile(_HEADER_PATTERN)
+
+_HEADER_XML_PATTERN = r'.*h\.xml$'
+_HEADER_XML_RE = re.compile(_HEADER_XML_PATTERN)
+
+_SCRIPT_FILE = os.path.basename(__file__)
+_SCRIPT_NAME, _ = os.path.splitext(_SCRIPT_FILE)
+
+_OSS_STARBOARD_VERSIONS = [13, 14, 15]
+
+
+def _strip(string_or_none):
+  if string_or_none:
+    return string_or_none.strip()
+  return ''
+
+
+def _get_files(parent_path, regexp):
+  return sorted([
+      os.path.realpath(os.path.join(parent_path, x))
+      for x in os.listdir(parent_path)
+      if regexp.match(x)
+  ])
+
+
+def _find_filename(compounddef_element):
+  return _strip(compounddef_element.findtext('./compoundname'))
+
+
+def _find_name(member_def):
+  return _strip(member_def.findtext('./name'))
+
+
+def _has_innertext(element, query=''):
+  return bool(_find_innertext(element, query))
+
+
+def _has_description(memberdef_element):
+  return (_has_innertext(memberdef_element, './briefdescription') or
+          _has_innertext(memberdef_element, './detaileddescription'))
+
+
+def _find_innertext(element, query=''):
+  if element is None:
+    return ''
+  if query:
+    node = element.find(query)
+    if node is None:
+      return ''
+  else:
+    node = element
+  return _strip(''.join(x.strip() for x in node.itertext()))
+
+
+def _find_memberdefs(compounddef_element, kind):
+  return compounddef_element.findall(f'./sectiondef/memberdef[@kind="{kind}"]')
+
+
+def _find_documented_memberdefs(compounddef_element, kind):
+  memberdef_elements = _find_memberdefs(compounddef_element, kind)
+  if not memberdef_elements:
+    return {}
+
+  all_memberdefs = {_find_name(x): x for x in memberdef_elements}
+
+  def essential(k, v):
+    return _has_description(v) and not k.endswith('Private')
+
+  return {k: v for k, v in all_memberdefs.items() if essential(k, v)}
+
+
+def _find_structs(compounddef_element, xml_path):
+  innerclass_elements = compounddef_element.findall('./innerclass')
+  if not innerclass_elements:
+    return {}
+
+  all_struct_refids = [x.get('refid') for x in innerclass_elements]
+  all_struct_elements = {}
+  for refid in all_struct_refids:
+    struct_xml_path = os.path.join(xml_path, refid + '.xml')
+    struct_xml = ET.parse(struct_xml_path)
+    struct_elements = struct_xml.findall(
+        './/compounddef[@kind="struct"][compoundname]')
+    for struct_element in struct_elements:
+      struct_name = _find_filename(struct_element)
+      all_struct_elements[struct_name] = struct_element
+
+  def essential(k):
+    return not k.endswith('Private')
+
+  return {k: v for k, v in all_struct_elements.items() if essential(k)}
+
+
+def _find_struct_names(compounddef_element, xml_path):
+  return set(_find_structs(compounddef_element, xml_path).keys())
+
+
+def _find_documented_memberdef_names(compounddef_element, *args):
+  found = set([])
+  for kind in args:
+    found.update(_find_documented_memberdefs(compounddef_element, kind).keys())
+  return found
+
+
+def _find_member_definition(memberdef_element):
+  type_element = memberdef_element.find('./type')
+  type_name = _find_innertext(type_element)
+  args_name = _strip(memberdef_element.findtext('./argsstring'))
+  member_name = _strip(memberdef_element.findtext('./name'))
+  # Doxygen does not handle structs of non-typedef'd function pointers
+  # gracefully. The 'type" and "argsstring' elements are used to temporarily
+  # store the information needed to be able to rebuild the full signature, e.g.:
+  #
+  #  void (*glEnable)(SbGlEnum cap)
+  #
+  #    type = 'void (*'
+  #    name = 'glEnable'
+  #    argsstring = ')(SbGlEnum cap)'
+  #
+  # When we identify these members using the end of 'type' and the beginning of
+  # 'argsstring' we return the full member signature instead.
+  if type_name.endswith('(*') and args_name.startswith(')('):
+    return type_name + member_name + args_name
+  return type_name + ' ' + member_name
+
+
+def _node_to_markdown(out, node):
+  text = node.text.replace('|', '`') if node.text else ''
+  tail = node.tail.replace('|', '`') if node.tail else ''
+
+  if node.tag == 'ndash':
+    assert not _strip(text)
+    out.text('\u2013')
+  elif node.tag == 'mdash':
+    assert not _strip(text)
+    out.text('\u2013')
+  elif node.tag == 'para':
+    # Block tags should never be nested inside other blocks.
+    assert not _strip(tail)
+    out.paragraph()
+  elif node.tag == 'bold':
+    assert len(node) == 0
+    out.bold(text)
+  elif node.tag == 'computeroutput':
+    assert len(node) == 0
+    out.code(text)
+  elif node.tag == 'ulink':
+    url = node.get('url')
+    assert url
+    out.link(url)
+  elif node.tag == 'orderedlist':
+    # List tags should never have any text of their own.
+    assert not _strip(text)
+
+    # Block tags should never be nested inside other blocks.
+    assert not _strip(tail)
+    out.ordered_list()
+  elif node.tag == 'itemizedlist':
+    # List tags should never have any text of their own.
+    assert not _strip(text)
+
+    # Block tags should never be nested inside other blocks.
+    assert not _strip(tail)
+    out.unordered_list()
+  elif node.tag == 'listitem':
+    out.item()
+  elif node.tag == 'heading':
+    # Block tags should never be nested inside other blocks.
+    assert not _strip(tail)
+    try:
+      levels = int(node.get('level'))
+    except ValueError:
+      levels = 1
+    out.heading(levels=levels)
+  elif node.tag == 'verbatim':
+    # Verbatim tags can appear inside paragraphs.
+    assert len(node) == 0
+    # Don't replace pipes in verbatim text.
+    text = node.text if node.text else ''
+    out.code_block(text)
+    text = ''
+  else:
+    logging.warning('UNHANDLED: %s: %s', node.tag, text.replace('\n', '\\n'))
+
+  if text:
+    out.text(text)
+
+  for child in node:
+    _node_to_markdown(out, child)
+
+  if node.tag == 'para':
+    out.end_paragraph()
+  elif node.tag == 'ulink':
+    out.end_link()
+  elif node.tag in ['orderedlist', 'itemizedlist']:
+    out.end_list()
+  elif node.tag == 'heading':
+    out.end_heading()
+    out.pop_heading_level()
+  elif node.tag == 'listitem':
+    out.end_item()
+
+  if tail:
+    out.text(tail)
+
+
+def _description_to_markdown(out, description_element):
+  if description_element is None:
+    return
+
+  for child in description_element:
+    _node_to_markdown(out, child)
+
+
+def _emit_doc_header(out_io):
+  out_io.write('Project: /youtube/cobalt/_project.yaml\n')
+  out_io.write('Book: /youtube/cobalt/_book.yaml\n\n')
+
+
+def _emit_description(out, memberdef_element):
+  _description_to_markdown(out, memberdef_element.find('./briefdescription'))
+  _description_to_markdown(out, memberdef_element.find('./detaileddescription'))
+
+
+def _emit_macro(out, memberdef_element):
+  name = _find_name(memberdef_element)
+  assert name or _has_description(memberdef_element)
+
+  params = ''
+  param_defs = memberdef_element.findall('./param/defname')
+  if param_defs:
+    param_names = [_strip(x.text) for x in param_defs]
+    params = f'({", ".join(param_names)})'
+
+  logging.info('Macro: %s%s', name, params)
+  with out.auto_scoped_heading(name + params):
+    _emit_description(out, memberdef_element)
+
+
+def _emit_enum(out, memberdef_element):
+  name = _find_name(memberdef_element)
+  assert name or _has_description(memberdef_element)
+
+  logging.info('Enum: %s', name)
+  with out.auto_scoped_heading(name):
+    _emit_description(out, memberdef_element)
+    with out.auto_scoped_heading('Values'):
+      with out.auto_unordered_list():
+        for enumvalue_element in memberdef_element.findall('./enumvalue'):
+          with out.auto_item():
+            out.code(_find_name(enumvalue_element))
+            _emit_description(out, enumvalue_element)
+
+
+def _emit_typedef(out, memberdef_element):
+  name = _find_name(memberdef_element)
+  assert name or _has_description(memberdef_element)
+
+  with out.auto_scoped_heading(name):
+    _emit_description(out, memberdef_element)
+    definition = _strip(memberdef_element.findtext('./definition'))
+    if definition:
+      with out.auto_scoped_heading('Definition'):
+        out.code_block(definition)
+
+
+def _emit_struct(out, compounddef_element):
+  name = _find_filename(compounddef_element)
+  assert name or _has_description(compounddef_element)
+
+  logging.info('Struct: %s', name)
+  with out.auto_scoped_heading(name):
+    _emit_description(out, compounddef_element)
+    memberdef_elements = _find_memberdefs(compounddef_element, 'variable')
+    if memberdef_elements:
+      with out.auto_scoped_heading('Members'):
+        with out.auto_unordered_list():
+          for memberdef_element in memberdef_elements:
+            with out.auto_item():
+              out.code(_find_member_definition(memberdef_element))
+              _emit_description(out, memberdef_element)
+
+
+def _emit_variable(out, memberdef_element):
+  name = _find_name(memberdef_element)
+  assert name or _has_description(memberdef_element)
+
+  logging.info('Variable: %s', name)
+  with out.auto_scoped_heading(name):
+    _emit_description(out, memberdef_element)
+
+
+def _emit_function(out, memberdef_element):
+  name = _find_name(memberdef_element)
+  assert name or _has_description(memberdef_element)
+
+  logging.info('Function: %s', name)
+  with out.auto_scoped_heading(name):
+    _emit_description(out, memberdef_element)
+    prototype = memberdef_element.findtext('./definition') + \
+                memberdef_element.findtext('./argsstring')
+    if prototype:
+      with out.auto_scoped_heading('Declaration'):
+        out.code_block(prototype)
+
+
+def _emit_macros(out, compounddef_element):
+  member_dict = _find_documented_memberdefs(compounddef_element, 'define')
+  if not member_dict:
+    return False
+
+  with out.auto_scoped_heading('Macros'):
+    for name in sorted(member_dict.keys()):
+      _emit_macro(out, member_dict[name])
+  return True
+
+
+def _emit_enums(out, compounddef_element):
+  member_dict = _find_documented_memberdefs(compounddef_element, 'enum')
+  if not member_dict:
+    return False
+
+  with out.auto_scoped_heading('Enums'):
+    for name in sorted(member_dict.keys()):
+      _emit_enum(out, member_dict[name])
+  return True
+
+
+def _emit_typedefs(out, compounddef_element, xml_path):
+  member_dict = _find_documented_memberdefs(compounddef_element, 'typedef')
+  redundant_set = _find_documented_memberdef_names(compounddef_element,
+                                                   'define', 'enum', 'function')
+  redundant_set |= _find_struct_names(compounddef_element, xml_path)
+  essential_set = set(member_dict.keys()) - redundant_set
+  if not essential_set:
+    return False
+
+  with out.auto_scoped_heading('Typedefs'):
+    for name in sorted(essential_set):
+      _emit_typedef(out, member_dict[name])
+  return True
+
+
+def _emit_structs(out, compounddef_element, xml_path):
+  struct_dict = _find_structs(compounddef_element, xml_path)
+  if not struct_dict:
+    return False
+
+  with out.auto_scoped_heading('Structs'):
+    for name in sorted(struct_dict.keys()):
+      _emit_struct(out, struct_dict[name])
+  return True
+
+
+def _emit_variables(out, compounddef_element):
+  member_dict = _find_documented_memberdefs(compounddef_element, 'variable')
+  if not member_dict:
+    return False
+
+  with out.auto_scoped_heading('Variables'):
+    for name in sorted(member_dict.keys()):
+      _emit_variable(out, member_dict[name])
+  return True
+
+
+def _emit_functions(out, compounddef_element):
+  member_dict = _find_documented_memberdefs(compounddef_element, 'function')
+  if not member_dict:
+    return False
+
+  with out.auto_scoped_heading('Functions'):
+    for name in sorted(member_dict.keys()):
+      _emit_function(out, member_dict[name])
+  return True
+
+
+def _emit_file(out_io, compounddef_element, xml_path):
+  header_filename = _find_filename(compounddef_element)
+  logging.info('File: %s', header_filename)
+  _emit_doc_header(out_io)
+  mdwriter = MarkdownWriter(out_io)
+  with mdwriter.auto_scoped_heading(
+      f'Starboard Module Reference: `{header_filename}`'):
+    _emit_description(mdwriter, compounddef_element)
+    # When an API is deprecated it will be removed via #ifdef. When this is the
+    # case, we will no longer have macros, enums, typedefs, structs, or
+    # functions and thus the API should not be included in the site.
+    has_content = _emit_macros(mdwriter, compounddef_element)
+    has_content = _emit_enums(mdwriter, compounddef_element) or has_content
+    has_content = _emit_typedefs(mdwriter, compounddef_element,
+                                 xml_path) or has_content
+    has_content = _emit_structs(mdwriter, compounddef_element,
+                                xml_path) or has_content
+    has_content = _emit_variables(mdwriter, compounddef_element) or has_content
+    has_content = _emit_functions(mdwriter, compounddef_element) or has_content
+  return has_content
+
+
+def generate(source_dir, output_dir):
+  if output_dir:
+    site_path = environment.get_site_dir(output_dir)
+  else:
+    site_path = environment.get_site_dir(source_dir)
+  doc_dir_path = os.path.join(site_path, 'docs', 'reference', 'starboard',
+                              'modules')
+  environment.make_clean_dirs(doc_dir_path)
+  starboard_directory_path = environment.get_starboard_dir(source_dir)
+  starboard_files = _get_files(starboard_directory_path, _HEADER_RE)
+  with environment.mkdtemp(suffix='.' + _SCRIPT_NAME) as temp_directory_path:
+    logging.debug('Working directory: %s', temp_directory_path)
+    doxygenated_directory_path = os.path.join(temp_directory_path,
+                                              'doxygenated')
+    doxygenated_files = doxygen.doxygenate(starboard_files,
+                                           doxygenated_directory_path)
+    doxygen_directory_path = os.path.join(temp_directory_path, 'doxygen')
+    for sb_version in _OSS_STARBOARD_VERSIONS:
+      version_path = os.path.join(doxygen_directory_path, str(sb_version))
+      version_doc_dir_path = os.path.join(doc_dir_path, str(sb_version))
+      doxygen.doxygen(sb_version, doxygenated_files, [], version_path)
+      doxygen_xml_path = os.path.join(version_path, 'xml')
+      for header_xml_path in _get_files(doxygen_xml_path, _HEADER_XML_RE):
+        header_xml = ET.parse(header_xml_path)
+        for compounddef_element in header_xml.findall(
+            './/compounddef[@kind="file"][compoundname]'):
+          environment.make_dirs(version_doc_dir_path)
+          header_filename = _find_filename(compounddef_element)
+          doc_filename = (
+              os.path.splitext(os.path.basename(header_filename))[0] + '.md')
+          with contextlib.closing(StringIO()) as doc_file:
+            if not _emit_file(doc_file, compounddef_element, doxygen_xml_path):
+              continue
+            doc_contents = doc_file.getvalue()
+          doc_file_path = os.path.join(version_doc_dir_path, doc_filename)
+          environment.write_file(doc_file_path, doc_contents)
+
+          # Make the latest Starboard documentation version the default version.
+          if sb_version == _OSS_STARBOARD_VERSIONS[-1]:
+            doc_file_path = os.path.join(doc_dir_path, doc_filename)
+            environment.write_file(doc_file_path, doc_contents)
+
+  return 0
+
+
+def main(argv):
+  environment.setup_logging()
+  options = environment.parse_arguments(__doc__, argv)
+  environment.set_log_level(options.log_delta)
+  return generate(options.source, options.out)
+
+
+if __name__ == '__main__':
+  sys.exit(main(sys.argv[1:]))
diff --git a/cobalt/site/scripts/doxyfile.template b/cobalt/site/scripts/doxyfile.template
new file mode 100644
index 0000000..f6c5b93
--- /dev/null
+++ b/cobalt/site/scripts/doxyfile.template
@@ -0,0 +1,332 @@
+# Doxyfile 1.8.6
+
+DOXYFILE_ENCODING      = UTF-8
+PROJECT_NAME           = "Starboard API"
+PROJECT_NUMBER         = {project_number}
+PROJECT_BRIEF          = "The Cobalt Porting API"
+OUTPUT_DIRECTORY       = {output_directory}
+CREATE_SUBDIRS         = NO
+OUTPUT_LANGUAGE        = English
+BRIEF_MEMBER_DESC      = NO
+REPEAT_BRIEF           = NO
+ABBREVIATE_BRIEF       = "The $name class" \
+                         "The $name widget" \
+                         "The $name file" \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+ALWAYS_DETAILED_SEC    = NO
+INLINE_INHERITED_MEMB  = NO
+FULL_PATH_NAMES        = YES
+STRIP_FROM_PATH        =
+STRIP_FROM_INC_PATH    =
+SHORT_NAMES            = NO
+JAVADOC_AUTOBRIEF      = NO
+QT_AUTOBRIEF           = NO
+MULTILINE_CPP_IS_BRIEF = NO
+INHERIT_DOCS           = YES
+SEPARATE_MEMBER_PAGES  = NO
+TAB_SIZE               = 2
+OPTIMIZE_OUTPUT_FOR_C  = NO
+OPTIMIZE_OUTPUT_JAVA   = NO
+OPTIMIZE_FOR_FORTRAN   = NO
+OPTIMIZE_OUTPUT_VHDL   = NO
+EXTENSION_MAPPING      =
+MARKDOWN_SUPPORT       = YES
+AUTOLINK_SUPPORT       = YES
+BUILTIN_STL_SUPPORT    = YES
+CPP_CLI_SUPPORT        = NO
+SIP_SUPPORT            = NO
+IDL_PROPERTY_SUPPORT   = YES
+DISTRIBUTE_GROUP_DOC   = NO
+SUBGROUPING            = NO
+INLINE_GROUPED_CLASSES = NO
+INLINE_SIMPLE_STRUCTS  = NO
+TYPEDEF_HIDES_STRUCT   = NO
+LOOKUP_CACHE_SIZE      = 0
+EXTRACT_ALL            = NO
+EXTRACT_PRIVATE        = NO
+EXTRACT_PACKAGE        = NO
+EXTRACT_STATIC         = NO
+EXTRACT_LOCAL_CLASSES  = NO
+EXTRACT_LOCAL_METHODS  = NO
+EXTRACT_ANON_NSPACES   = NO
+HIDE_UNDOC_MEMBERS     = YES
+HIDE_UNDOC_CLASSES     = YES
+HIDE_FRIEND_COMPOUNDS  = YES
+HIDE_IN_BODY_DOCS      = NO
+INTERNAL_DOCS          = NO
+CASE_SENSE_NAMES       = YES
+HIDE_SCOPE_NAMES       = NO
+SHOW_INCLUDE_FILES     = NO
+SHOW_GROUPED_MEMB_INC  = NO
+FORCE_LOCAL_INCLUDES   = NO
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = NO
+SORT_BRIEF_DOCS        = NO
+SORT_MEMBERS_CTORS_1ST = NO
+SORT_GROUP_NAMES       = NO
+SORT_BY_SCOPE_NAME     = NO
+STRICT_PROTO_MATCHING  = NO
+GENERATE_TODOLIST      = NO
+GENERATE_TESTLIST      = NO
+GENERATE_BUGLIST       = NO
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS       =
+MAX_INITIALIZER_LINES  = 30
+SHOW_USED_FILES        = NO
+SHOW_FILES             = NO
+SHOW_NAMESPACES        = YES
+FILE_VERSION_FILTER    =
+LAYOUT_FILE            =
+CITE_BIB_FILES         =
+
+QUIET                  = NO
+WARNINGS               = YES
+WARN_IF_UNDOCUMENTED   = YES
+WARN_IF_DOC_ERROR      = YES
+WARN_NO_PARAMDOC       = NO
+WARN_FORMAT            = "$file:$line: $text"
+WARN_LOGFILE           =
+INPUT                  = {input_files}
+INPUT_ENCODING         = UTF-8
+FILE_PATTERNS          = *.c \
+                         *.cc \
+                         *.cxx \
+                         *.cpp \
+                         *.c++ \
+                         *.java \
+                         *.ii \
+                         *.ixx \
+                         *.ipp \
+                         *.i++ \
+                         *.inl \
+                         *.idl \
+                         *.ddl \
+                         *.odl \
+                         *.h \
+                         *.hh \
+                         *.hxx \
+                         *.hpp \
+                         *.h++ \
+                         *.cs \
+                         *.d \
+                         *.php \
+                         *.php4 \
+                         *.php5 \
+                         *.phtml \
+                         *.inc \
+                         *.m \
+                         *.markdown \
+                         *.md \
+                         *.mm \
+                         *.dox \
+                         *.py \
+                         *.f90 \
+                         *.f \
+                         *.for \
+                         *.tcl \
+                         *.vhd \
+                         *.vhdl \
+                         *.ucf \
+                         *.qsf \
+                         *.as \
+                         *.js
+RECURSIVE              = NO
+EXCLUDE                =
+EXCLUDE_SYMLINKS       = NO
+EXCLUDE_PATTERNS       =
+EXCLUDE_SYMBOLS        =
+EXAMPLE_PATH           =
+EXAMPLE_PATTERNS       = *
+EXAMPLE_RECURSIVE      = NO
+IMAGE_PATH             =
+INPUT_FILTER           =
+FILTER_PATTERNS        =
+FILTER_SOURCE_FILES    = NO
+FILTER_SOURCE_PATTERNS =
+USE_MDFILE_AS_MAINPAGE =
+
+SOURCE_BROWSER         = NO
+INLINE_SOURCES         = NO
+STRIP_CODE_COMMENTS    = YES
+REFERENCED_BY_RELATION = NO
+REFERENCES_RELATION    = NO
+REFERENCES_LINK_SOURCE = YES
+SOURCE_TOOLTIPS        = YES
+USE_HTAGS              = NO
+VERBATIM_HEADERS       = NO
+
+ALPHABETICAL_INDEX     = YES
+COLS_IN_ALPHA_INDEX    = 5
+IGNORE_PREFIX          =
+
+GENERATE_HTML          = NO
+HTML_OUTPUT            = html
+HTML_FILE_EXTENSION    = .html
+HTML_HEADER            =
+HTML_FOOTER            =
+HTML_STYLESHEET        =
+HTML_EXTRA_STYLESHEET  =
+HTML_EXTRA_FILES       =
+HTML_COLORSTYLE_HUE    = 220
+HTML_COLORSTYLE_SAT    = 100
+HTML_COLORSTYLE_GAMMA  = 80
+HTML_TIMESTAMP         = YES
+HTML_DYNAMIC_SECTIONS  = NO
+HTML_INDEX_NUM_ENTRIES = 100
+
+GENERATE_DOCSET        = NO
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+DOCSET_PUBLISHER_NAME  = Publisher
+
+GENERATE_HTMLHELP      = NO
+CHM_FILE               =
+HHC_LOCATION           =
+GENERATE_CHI           = NO
+CHM_INDEX_ENCODING     =
+BINARY_TOC             = NO
+TOC_EXPAND             = NO
+
+GENERATE_QHP           = NO
+QCH_FILE               =
+QHP_NAMESPACE          = org.doxygen.Project
+QHP_VIRTUAL_FOLDER     = doc
+QHP_CUST_FILTER_NAME   =
+QHP_CUST_FILTER_ATTRS  =
+QHP_SECT_FILTER_ATTRS  =
+QHG_LOCATION           =
+
+GENERATE_ECLIPSEHELP   = NO
+ECLIPSE_DOC_ID         = org.doxygen.Project
+DISABLE_INDEX          = NO
+GENERATE_TREEVIEW      = NO
+ENUM_VALUES_PER_LINE   = 4
+TREEVIEW_WIDTH         = 250
+EXT_LINKS_IN_WINDOW    = NO
+FORMULA_FONTSIZE       = 10
+FORMULA_TRANSPARENT    = YES
+USE_MATHJAX            = NO
+MATHJAX_FORMAT         = HTML-CSS
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+MATHJAX_EXTENSIONS     =
+MATHJAX_CODEFILE       =
+SEARCHENGINE           = YES
+SERVER_BASED_SEARCH    = NO
+EXTERNAL_SEARCH        = NO
+SEARCHENGINE_URL       =
+SEARCHDATA_FILE        = searchdata.xml
+EXTERNAL_SEARCH_ID     =
+EXTRA_SEARCH_MAPPINGS  =
+
+GENERATE_LATEX         = NO
+LATEX_OUTPUT           = latex
+LATEX_CMD_NAME         = latex
+MAKEINDEX_CMD_NAME     = makeindex
+COMPACT_LATEX          = NO
+PAPER_TYPE             = a4
+EXTRA_PACKAGES         =
+LATEX_HEADER           =
+LATEX_FOOTER           =
+LATEX_EXTRA_FILES      =
+PDF_HYPERLINKS         = YES
+USE_PDFLATEX           = YES
+LATEX_BATCHMODE        = NO
+LATEX_HIDE_INDICES     = NO
+LATEX_SOURCE_CODE      = NO
+LATEX_BIB_STYLE        = plain
+
+GENERATE_RTF           = NO
+RTF_OUTPUT             = rtf
+COMPACT_RTF            = NO
+RTF_HYPERLINKS         = NO
+RTF_STYLESHEET_FILE    =
+RTF_EXTENSIONS_FILE    =
+
+GENERATE_MAN           = NO
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_LINKS              = NO
+
+GENERATE_XML           = YES
+XML_OUTPUT             = xml
+XML_SCHEMA             =
+XML_DTD                =
+XML_PROGRAMLISTING     = NO
+
+GENERATE_DOCBOOK       = NO
+DOCBOOK_OUTPUT         = docbook
+
+GENERATE_AUTOGEN_DEF   = NO
+
+GENERATE_PERLMOD       = NO
+PERLMOD_LATEX          = NO
+PERLMOD_PRETTY         = YES
+PERLMOD_MAKEVAR_PREFIX =
+
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = YES
+EXPAND_ONLY_PREDEF     = YES
+SEARCH_INCLUDES        = YES
+INCLUDE_PATH           =
+INCLUDE_FILE_PATTERNS  = *.h
+PREDEFINED             = COMPONENT_BUILD=1 \
+                         SB_CAN(x)=1 \
+                         SB_C_FORCE_INLINE=inline \
+                         SB_C_INLINE=inline \
+                         SB_DEPRECATED_EXTERNAL(x)=x \
+                         SB_EXPORT= \
+                         SB_HAS(x)=1 \
+                         SB_IS(x)=1 \
+                         STARBOARD_IMPLEMENTATION \
+                         {predefined_macros}
+EXPAND_AS_DEFINED      =
+SKIP_FUNCTION_MACROS   = NO
+
+TAGFILES               =
+GENERATE_TAGFILE       =
+ALLEXTERNALS           = NO
+EXTERNAL_GROUPS        = NO
+EXTERNAL_PAGES         = NO
+PERL_PATH              = /usr/bin/perl
+
+CLASS_DIAGRAMS         = NO
+MSCGEN_PATH            =
+DIA_PATH               =
+HIDE_UNDOC_RELATIONS   = YES
+HAVE_DOT               = NO
+DOT_NUM_THREADS        = 0
+DOT_FONTNAME           = Helvetica
+DOT_FONTSIZE           = 10
+DOT_FONTPATH           =
+CLASS_GRAPH            = NO
+COLLABORATION_GRAPH    = NO
+GROUP_GRAPHS           = NO
+UML_LOOK               = NO
+UML_LIMIT_NUM_FIELDS   = 10
+TEMPLATE_RELATIONS     = NO
+INCLUDE_GRAPH          = NO
+INCLUDED_BY_GRAPH      = NO
+CALL_GRAPH             = NO
+CALLER_GRAPH           = NO
+GRAPHICAL_HIERARCHY    = NO
+DIRECTORY_GRAPH        = NO
+DOT_IMAGE_FORMAT       = png
+INTERACTIVE_SVG        = NO
+DOT_PATH               =
+DOTFILE_DIRS           =
+MSCFILE_DIRS           =
+DIAFILE_DIRS           =
+DOT_GRAPH_MAX_NODES    = 50
+MAX_DOT_GRAPH_DEPTH    = 0
+DOT_TRANSPARENT        = NO
+DOT_MULTI_TARGETS      = NO
+GENERATE_LEGEND        = YES
+DOT_CLEANUP            = YES
diff --git a/cobalt/site/scripts/doxygen.py b/cobalt/site/scripts/doxygen.py
new file mode 100644
index 0000000..499e258
--- /dev/null
+++ b/cobalt/site/scripts/doxygen.py
@@ -0,0 +1,172 @@
+# Copyright 2017 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Python wrapper for Doxygen."""
+
+import errno
+import logging
+import os
+import re
+import subprocess
+
+import environment
+
+_MODULE_OVERVIEW_PATTERN = r'Module Overview: '
+_MODULE_OVERVIEW_RE = re.compile(_MODULE_OVERVIEW_PATTERN)
+
+
+def _subprocess(command, working_directory):
+  """Executes command in working_directory."""
+  if not os.path.isdir(working_directory):
+    raise RuntimeError(
+        f'Running {command}: directory {working_directory} not found')
+
+  try:
+    # shell=True for Windows to be able to find git in the PATH.
+    subprocess.check_output(
+        ' '.join(command),
+        shell=True,
+        cwd=working_directory,
+        stderr=subprocess.STDOUT)
+    return True
+  except subprocess.CalledProcessError as e:
+    logging.warning('%s: \"%s\" failed. Return Code: %d', working_directory,
+                    e.cmd, e.returncode)
+    logging.debug('>>>\n%s\n<<<', e.output)
+    return False
+
+
+def _mkdirs(directory_path):
+  """Makes the given path and all ancestors necessary."""
+  try:
+    os.makedirs(directory_path)
+  except OSError as e:
+    if e.errno == errno.EEXIST and os.path.isdir(directory_path):
+      pass
+    else:
+      raise
+
+
+def _join_config(lines):
+  return ' \\\n  '.join(lines)
+
+
+def doxygen(project_number, input_files, predefined_macros,
+            output_directory_path):
+  """Runs doxygen with the given semantic parameters."""
+  doxyfile_template_path = os.path.join(environment.SCRIPTS_DIR,
+                                        'doxyfile.template')
+  doxyfile_template = environment.read_file(doxyfile_template_path)
+  os.makedirs(output_directory_path)
+  predefined_macros = predefined_macros[:]
+  predefined_macros.append(f'SB_API_VERSION={project_number}')
+  doxyfile_contents = doxyfile_template.format(
+      **{
+          'project_number': 1,
+          'output_directory': output_directory_path,
+          'input_files': _join_config(input_files),
+          'predefined_macros': _join_config(predefined_macros),
+      })
+
+  doxyfile_path = os.path.join(output_directory_path, 'Doxyfile')
+  environment.write_file(doxyfile_path, doxyfile_contents)
+  _subprocess(['doxygen', doxyfile_path], output_directory_path)
+
+
+def _split(line):
+  """Splits a line into a (indentation, lstripped content) tuple."""
+  stripped = line.lstrip()
+  return line[:(len(line) - len(stripped))], stripped
+
+
+def _doxygenate_line(line):
+  """Adds an extra slash to a comment line."""
+  indent, stripped = _split(line)
+  return indent + '/' + stripped
+
+
+def _doxygenate_lines(lines):
+  """Makes a list of comment lines visible to Doxygen."""
+  if not lines:
+    return []
+  indent, _ = _split(lines[0])
+  return [_doxygenate_line(x) for x in lines] + [indent + '///']
+
+
+def _is_comment(line):
+  """Whether the given line is a comment."""
+  stripped = line.lstrip()
+  return stripped[0] == '/'
+
+
+def _find_end_of_block(line_iterator):
+  """Consumes the next comment block, returning (comment_list, terminator)."""
+  lines = []
+  last_line = None
+
+  any_lines = False
+  for line in line_iterator:
+    any_lines = True
+    if not line or not _is_comment(line):
+      last_line = line
+      break
+    lines.append(line)
+  if not any_lines:
+    raise StopIteration
+
+  return lines, last_line
+
+
+def doxygenate(input_file_paths, output_directory):
+  """Converts a list of source files into more doxygen-friendly files."""
+  common_prefix_path = os.path.commonprefix(input_file_paths)
+  output_file_paths = []
+  os.makedirs(output_directory)
+  for input_file_path in input_file_paths:
+    output_file_path = os.path.join(output_directory,
+                                    input_file_path[len(common_prefix_path):])
+    _mkdirs(os.path.dirname(output_file_path))
+    input_contents = environment.read_lines(input_file_path)
+    output_contents = []
+    line_iterator = iter(x.rstrip() for x in input_contents)
+    try:
+      # Remove copyright header.
+      _, _ = _find_end_of_block(line_iterator)
+
+      # Doxygenate module overview.
+      lines, last_line = _find_end_of_block(line_iterator)
+      if not lines:
+        continue
+      output_contents.append(f'/// \\file {os.path.basename(input_file_path)}')
+      if _MODULE_OVERVIEW_RE.search(lines[0]):
+        del lines[0]
+      output_contents.extend(_doxygenate_lines(lines))
+      output_contents.append(last_line)
+
+      # Doxygenate module overview.
+      lines, last_line = _find_end_of_block(line_iterator)
+
+      # Doxygenate the rest of the file, block by block.
+      while True:
+        lines, last_line = _find_end_of_block(line_iterator)
+        if not last_line:
+          continue
+        if lines:
+          output_contents.extend(_doxygenate_lines(lines))
+        output_contents.append(last_line)
+    except StopIteration:
+      pass
+
+    environment.write_file(output_file_path, '\n'.join(output_contents))
+    output_file_paths.append(output_file_path)
+  return output_file_paths
diff --git a/cobalt/site/scripts/environment.py b/cobalt/site/scripts/environment.py
new file mode 100644
index 0000000..8680b56
--- /dev/null
+++ b/cobalt/site/scripts/environment.py
@@ -0,0 +1,165 @@
+# Copyright 2017 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Common variables and functions for site generation."""
+
+import argparse
+from contextlib import contextmanager
+import errno
+import logging
+import os
+import shutil
+import tempfile
+import textwrap
+
+SCRIPTS_DIR = os.path.abspath(os.path.dirname(__file__))
+COBALT_SOURCE_DIR = os.path.abspath(
+    os.path.join(*([SCRIPTS_DIR] + 3 * [os.pardir])))
+
+
+@contextmanager
+def mkdtemp(suffix='', prefix='tmp.', base_dir=None):
+  temp_directory_path = tempfile.mkdtemp(suffix, prefix, base_dir)
+  try:
+    yield temp_directory_path
+  finally:
+    if temp_directory_path:
+      try:
+        shutil.rmtree(temp_directory_path)
+      except IOError:
+        logging.warning('Failed to delete temp directory: %s',
+                        temp_directory_path)
+      else:
+        logging.info('Deleted temp directory: %s', temp_directory_path)
+
+
+def read_lines(path):
+  with open(path, 'r', encoding='utf8') as contents:
+    return contents.readlines()
+
+
+def read_file(path):
+  with open(path, 'r', encoding='utf8') as contents:
+    return contents.read()
+
+
+def write_file(path, contents):
+  with open(path, 'w', encoding='utf8') as output:
+    output.write(contents)
+
+
+def setup_logging(default_level=logging.INFO):
+  logging_level = default_level
+  logging_format = '%(asctime)s.%(msecs)03d [%(levelname)-8s] %(message)s'
+  datetime_format = '%H:%M:%S'
+  logging.basicConfig(
+      level=logging_level, format=logging_format, datefmt=datetime_format)
+
+
+_LOG_LEVELS = [
+    logging.CRITICAL,
+    logging.ERROR,
+    logging.WARNING,
+    logging.INFO,
+    logging.DEBUG,
+]
+
+
+def set_log_level(log_delta):
+  """Sets the log level based on the log delta from default."""
+  logger = logging.getLogger()
+  try:
+    level_index = _LOG_LEVELS.index(logger.getEffectiveLevel())
+  except ValueError:
+    level_index = _LOG_LEVELS.index(logging.INFO)
+
+  level_index = min(len(_LOG_LEVELS) - 1, max(0, level_index + log_delta))
+  logging.getLogger().setLevel(_LOG_LEVELS[level_index])
+
+
+def parse_arguments(doc_string, argv):
+  parser = argparse.ArgumentParser(
+      formatter_class=argparse.ArgumentDefaultsHelpFormatter,
+      description=textwrap.dedent(doc_string))
+  parser.add_argument(
+      '-s',
+      '--source',
+      type=str,
+      default=COBALT_SOURCE_DIR,
+      help='The repository root that contains the source code to parse.')
+  parser.add_argument(
+      '-o',
+      '--out',
+      type=str,
+      default=None,
+      help='The root of the directory to output to.')
+  parser.add_argument(
+      '-v',
+      '--verbose',
+      dest='verbose_count',
+      default=0,
+      action='count',
+      help='Verbose level (multiple times for more).')
+  parser.add_argument(
+      '-q',
+      '--quiet',
+      dest='quiet_count',
+      default=0,
+      action='count',
+      help='Quietness level (multiple times for more).')
+  options = parser.parse_args(argv)
+  options.log_delta = options.verbose_count - options.quiet_count
+  return options
+
+
+def get_cobalt_dir(source_dir):
+  return os.path.join(source_dir, 'cobalt')
+
+
+def get_cobalt_build_dir(source_dir):
+  return os.path.join(get_cobalt_dir(source_dir), 'build')
+
+
+def get_site_dir(source_dir):
+  return os.path.join(get_cobalt_dir(source_dir), 'site')
+
+
+def get_starboard_dir(source_dir):
+  return os.path.join(source_dir, 'starboard')
+
+
+def get_starboard_build_dir(source_dir):
+  return os.path.join(get_starboard_dir(source_dir), 'build')
+
+
+def get_stub_platform_dir(source_dir):
+  return os.path.join(get_starboard_dir(source_dir), 'stub')
+
+
+def make_dirs(path):
+  """Make the specified directory and any parents in the path."""
+  if path and not os.path.isdir(path):
+    make_dirs(os.path.dirname(path))
+    try:
+      os.mkdir(path)
+    except OSError as e:
+      if e.errno != errno.EEXIST:
+        raise
+      pass
+
+
+def make_clean_dirs(path):
+  """Make the specified directory and any parents in the path."""
+  make_dirs(os.path.dirname(path))
+  shutil.rmtree(path, ignore_errors=True)
+  make_dirs(path)
diff --git a/cobalt/site/scripts/generate_site.py b/cobalt/site/scripts/generate_site.py
new file mode 100755
index 0000000..2d30d24
--- /dev/null
+++ b/cobalt/site/scripts/generate_site.py
@@ -0,0 +1,51 @@
+#!/usr/bin/env python3
+# Copyright 2023 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Generate the Cobalt Developer site markdown.
+
+This script generates all documentation derived from source, placing
+the precipitate markdown files in the specified output directory.
+"""
+
+import sys
+
+import cobalt_configuration_public
+import cobalt_documentation
+import cobalt_gn_configuration
+import cobalt_module_reference
+import environment
+
+
+def main(argv):
+  environment.setup_logging()
+  arguments = environment.parse_arguments(__doc__, argv)
+  environment.set_log_level(arguments.log_delta)
+
+  result = cobalt_configuration_public.main(arguments.source, arguments.out)
+  if result:
+    return result
+
+  result = cobalt_gn_configuration.main(arguments.source, arguments.out)
+  if result:
+    return result
+
+  result = cobalt_module_reference.generate(arguments.source, arguments.out)
+  if result:
+    return result
+
+  cobalt_documentation.copy_doc_locations(arguments.source, arguments.out)
+
+
+if __name__ == '__main__':
+  sys.exit(main(sys.argv[1:]))
diff --git a/cobalt/site/scripts/markdown_writer.py b/cobalt/site/scripts/markdown_writer.py
new file mode 100644
index 0000000..a954e9e
--- /dev/null
+++ b/cobalt/site/scripts/markdown_writer.py
@@ -0,0 +1,359 @@
+# Copyright 2017 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Provides an interface to produce valid, readable Markdown documents."""
+
+import contextlib
+import logging
+import textwrap
+
+_CONTEXT_NONE = 'none'
+_CONTEXT_LINK = 'link'
+_CONTEXT_LIST = 'list'
+_CONTEXT_ITEM = 'item'
+_CONTEXT_HEADING = 'heading'
+
+_LIST_TYPE_ORDERED = 'ordered'
+_LIST_TYPE_UNORDERED = 'unordered'
+
+# Ready to start a new parapgrah
+_STATE_BASE = 'base'
+
+# On an empty line with a paragraph on the previous line.
+_STATE_EMPTY = 'empty'
+
+# Inside a partial text block.
+_STATE_INLINE = 'inline'
+
+
+def _strip(string_or_none):
+  if string_or_none:
+    return string_or_none.strip()
+  return ''
+
+
+def _stripwrap(body, width):
+  return textwrap.fill(
+      _strip(body), width, break_long_words=False, replace_whitespace=False)
+
+
+def _get_list_prefix(list_type, depth):
+  list_marker = '1.' if list_type == _LIST_TYPE_ORDERED else '*'
+  return f'{"    " * depth}{list_marker:4.4}'
+
+
+class _Context(object):
+  """Stores info about current context in the document."""
+
+  def __init__(self, context_type, url=None, list_type=None, pending=False):
+    self.context_type = context_type
+    self.url = url
+    self.list_type = list_type
+    self.pending = pending
+
+  def test_and_clear_pending_list(self):
+    if self.context_type == _CONTEXT_ITEM and self.pending:
+      self.pending = False
+      return True
+    return False
+
+
+class MarkdownWriter(object):
+  """Stateful wrapper for a file-like object to generate Markdown."""
+
+  def __init__(self, out, width=80, heading_level=0):
+    assert heading_level >= 0
+    self.out = out
+    self.width = width
+    self.base_heading_level = heading_level
+    self.heading_stack = []
+    self.context_stack = [_Context(_CONTEXT_NONE)]
+    self.state = _STATE_BASE
+    self.current_line = ''
+
+  def heading(self, levels=1):
+    logging.debug('MdW: heading(%d)', levels)
+    assert levels >= 1
+    self.context_stack.append(_Context(_CONTEXT_HEADING))
+    self.heading_stack.append(levels)
+    self._return_to_base()
+    self.text(('#' * self._get_heading_level()) + ' ', wrap=False)
+    assert self._get_heading_level() >= 1
+
+  def end_heading(self):
+    logging.debug('MdW: end_heading()')
+    assert self._get_context_type() == _CONTEXT_HEADING
+    self.context_stack.pop()
+    self._return_to_empty()
+
+  def pop_heading_level(self):
+    logging.debug('MdW: pop_heading_level()')
+    self.heading_stack.pop()
+    assert self._get_heading_level() >= 0
+
+  def code_block(self, contents, language=None):
+    logging.debug('MdW: code_block(%s, %s)', contents.replace('\n', '\\n'),
+                  language)
+    self._return_to_base()
+    if not language:
+      language = ''
+    self.text(f'```{language}\n{contents}\n```\n\n', wrap=False)
+    self._set_state(_STATE_BASE, 'code block')
+
+  def ordered_list(self):
+    logging.debug('MdW: ordered_list()')
+    self._return_to_base()
+    self.context_stack.append(
+        _Context(_CONTEXT_LIST, list_type=_LIST_TYPE_ORDERED))
+
+  def unordered_list(self):
+    logging.debug('MdW: unordered_list()')
+    self._return_to_base()
+    self.context_stack.append(
+        _Context(_CONTEXT_LIST, list_type=_LIST_TYPE_UNORDERED))
+
+  def end_list(self):
+    logging.debug('MdW: end_list()')
+    assert self._get_context_type() == _CONTEXT_LIST
+    self.context_stack.pop()
+    self._return_to_base()
+
+  def item(self):
+    logging.debug('MdW: item()')
+    assert self._get_context_type() == _CONTEXT_LIST
+    self.context_stack.append(_Context(_CONTEXT_ITEM, pending=True))
+
+  def end_item(self):
+    logging.debug('MdW: end_item()')
+    assert self._get_context_type() == _CONTEXT_ITEM
+    self._return_to_empty()
+    self.context_stack.pop()
+
+  def link(self, url):
+    logging.debug('MdW: link(%s)', url)
+    assert url
+    self.context_stack.append(_Context(_CONTEXT_LINK, url=url))
+    self.text('[', wrap=True)
+
+  def end_link(self):
+    logging.debug('MdW: end_link()')
+    context = self._get_context()
+    assert context.context_type == _CONTEXT_LINK
+    self.text(f']({context.url})', wrap=False)
+    self.context_stack.pop()
+
+  def paragraph(self):
+    logging.debug('MdW: paragraph()')
+    self._return_to_base()
+
+  def end_paragraph(self):
+    logging.debug('MdW: end_paragraph()')
+    self._return_to_empty()
+
+  def code(self, contents, wrap=None):
+    self._style_text(contents.replace('`', '``'), '`', wrap)
+
+  def bold(self, contents, wrap=None):
+    self._style_text(contents, '**', wrap)
+
+  def highlight(self, contents, wrap=None):
+    self._style_text(contents, '==', wrap)
+
+  def italics(self, contents, wrap=None):
+    self._style_text(contents, '*', wrap)
+
+  def strikeout(self, contents, wrap=None):
+    self._style_text(contents, '~~', wrap)
+
+  def text(self, contents, wrap=None):
+    logging.debug('MdW: text(%s, %s)', contents.replace('\n', '\\n'), str(wrap))
+    if not contents or not contents.strip():
+      return
+
+    wrap = self._default_wrap(wrap)
+    if wrap:
+      contents = contents.strip()
+      if self.current_line and self.current_line[-1] != ' ':
+        contents = ' ' + contents
+      if not contents:
+        return
+      current_line_length = len(self.current_line)
+      contents = textwrap.fill(
+          self.current_line + contents,
+          self._get_wrap_width(),
+          break_long_words=False)
+      contents = contents[current_line_length:]
+
+    lines = contents.split('\n')
+    if not lines:
+      return
+
+    if self.current_line or self.state in [_STATE_BASE, _STATE_EMPTY]:
+      if self._get_context().test_and_clear_pending_list():
+        self._return_to_empty()
+        self.out.write(self._get_list_prefix())
+        self._set_state(_STATE_INLINE, 'list prefix')
+      elif self.state in [_STATE_BASE, _STATE_EMPTY]:
+        indent = self._get_indent()
+        if indent:
+          self.out.write(indent)
+          self._set_state(_STATE_INLINE, 'indentation')
+      self.out.write(lines[0])
+      self.current_line += lines[0]
+      self._set_state(_STATE_INLINE, 'first line')
+      del lines[0]
+      if lines:
+        self.out.write('\n')
+        self.current_line = ''
+        self._set_state(_STATE_EMPTY, 'more lines')
+
+    if lines:
+      indent = self._get_indent()
+      conjunction = '\n' + indent
+      self.out.write(indent + conjunction.join(lines))
+      self.current_line = lines[-1]
+
+    if not self.current_line:
+      self._set_state(_STATE_EMPTY, 'no current line')
+    else:
+      self._set_state(_STATE_INLINE, 'current line')
+
+  @contextlib.contextmanager
+  def auto_heading(self, levels=1):
+    self.heading(levels=levels)
+    yield
+    self.end_heading()
+
+  @contextlib.contextmanager
+  def auto_scoped_heading(self, text, levels=1):
+    with self.auto_heading(levels):
+      self.text(text)
+    yield
+    self.pop_heading_level()
+
+  @contextlib.contextmanager
+  def auto_paragraph(self):
+    self.paragraph()
+    yield
+    self.end_paragraph()
+
+  @contextlib.contextmanager
+  def auto_link(self, url):
+    self.link(url)
+    yield
+    self.end_link()
+
+  @contextlib.contextmanager
+  def auto_unordered_list(self):
+    self.unordered_list()
+    yield
+    self.end_list()
+
+  @contextlib.contextmanager
+  def auto_ordered_list(self):
+    self.ordered_list()
+    yield
+    self.end_list()
+
+  @contextlib.contextmanager
+  def auto_item(self):
+    self.item()
+    yield
+    self.end_item()
+
+  def _get_list_context(self):
+    for context in reversed(self.context_stack):
+      if context.context_type == _CONTEXT_LIST:
+        return context
+    return None
+
+  def _get_list_type(self):
+    context = self._get_list_context()
+    if not context:
+      return None
+    return context.list_type
+
+  def _get_list_depth(self):
+    depth = 0
+    for context in self.context_stack:
+      if context.context_type == _CONTEXT_LIST:
+        depth += 1
+    if not depth:
+      return 0
+    return depth
+
+  def _get_context_type(self):
+    context = self._get_context()
+    if not context:
+      return None
+    return context.context_type
+
+  def _get_context(self):
+    if not self.context_stack:
+      return None
+    return self.context_stack[-1]
+
+  def _style_text(self, contents, style, wrap):
+    if not contents or not contents.strip():
+      return
+    self.text(f'{style}{contents}{style}', wrap)
+
+  def _return_to_empty(self):
+    if self.state in [_STATE_BASE, _STATE_EMPTY]:
+      return
+
+    if self.state == _STATE_INLINE:
+      self.out.write('\n')
+      self.current_line = ''
+      self._set_state(_STATE_EMPTY)
+      return
+
+    assert False
+
+  def _return_to_base(self):
+    self._return_to_empty()
+
+    if self.state == _STATE_BASE:
+      return
+
+    if self.state == _STATE_EMPTY:
+      self.out.write('\n')
+      self._set_state(_STATE_BASE)
+      return
+
+    assert False
+
+  def _set_state(self, state, label=''):
+    if self.state != state:
+      logging.debug('MdW: STATE%s: %s -> %s',
+                    '(' + label + ')' if label else '', self.state, state)
+    self.state = state
+
+  def _get_indent(self):
+    return (' ' * 4) * self._get_list_depth()
+
+  def _get_heading_level(self):
+    return self.base_heading_level + sum(self.heading_stack)
+
+  def _get_list_prefix(self):
+    return _get_list_prefix(self._get_list_type(), self._get_list_depth() - 1)
+
+  def _get_wrap_width(self):
+    return self.width - self._get_list_depth() * 4
+
+  def _default_wrap(self, wrap):
+    if wrap is not None:
+      return wrap
+    if self._get_context_type() in [_CONTEXT_LINK, _CONTEXT_HEADING]:
+      return False
+    return True
diff --git a/cobalt/site/scripts/markdown_writer_test.py b/cobalt/site/scripts/markdown_writer_test.py
new file mode 100755
index 0000000..4de6bc9
--- /dev/null
+++ b/cobalt/site/scripts/markdown_writer_test.py
@@ -0,0 +1,161 @@
+#!/usr/bin/python
+# Copyright 2017 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Tests the markdown_writer module."""
+
+import contextlib
+from io import StringIO
+import textwrap
+import unittest
+
+from cobalt.site.scripts import markdown_writer
+
+_LOREM_IPSUM_1 = ('Lorem ipsum dolor sit amet, consectetur adipiscing elit, '
+                  'sed do eiusmod tempor incididunt ut labore et dolore magna '
+                  'aliqua.')
+_LOREM_IPSUM_2 = ('Ut enim ad minim veniam, quis nostrud exercitation '
+                  'ullamco laboris nisi ut aliquip ex ea commodo consequat. '
+                  'Duis aute irure dolor in reprehenderit in voluptate velit '
+                  'esse cillum dolore eu fugiat nulla pariatur.')
+_LOREM_IPSUM_3 = ('Excepteur sint occaecat cupidatat non proident, sunt in '
+                  'culpa qui officia deserunt mollit anim id est laborum.')
+
+_LOREM_IPSUM = f'{_LOREM_IPSUM_1} {_LOREM_IPSUM_2} {_LOREM_IPSUM_3}'
+
+
+def _indent(text, size):
+  return _indent_behind(text, ' ' * size)
+
+
+def _indent_behind(text, prefix):
+  if not text:
+    return text
+
+  indentation = '\n' + (' ' * len(prefix))
+  result = prefix + indentation.join(text.split('\n'))
+  return result
+
+
+def _wrap_behind(text, prefix, width):
+  if not text:
+    return text
+  return _indent_behind(textwrap.fill(text, width - len(prefix)), prefix)
+
+
+class MarkdownWriterTest(unittest.TestCase):
+  """Tests the markdown_writer module."""
+
+  def testBasic(self):
+    with contextlib.closing(StringIO()) as test_io:
+      out = markdown_writer.MarkdownWriter(test_io)
+      out.text(_LOREM_IPSUM_1)
+      out.text(_LOREM_IPSUM_2)
+      out.text(_LOREM_IPSUM_3)
+      out.text(_LOREM_IPSUM_1)
+      out.text(_LOREM_IPSUM_2)
+      out.text(_LOREM_IPSUM_3)
+      actual = test_io.getvalue()
+
+    expected = textwrap.fill(_LOREM_IPSUM + ' ' + _LOREM_IPSUM, 80)
+    self.assertEqual(expected, actual)
+
+  def testParagraph(self):
+    with contextlib.closing(StringIO()) as test_io:
+      out = markdown_writer.MarkdownWriter(test_io)
+      out.text(_LOREM_IPSUM_1)
+      out.text(_LOREM_IPSUM_2)
+      out.paragraph()
+      out.text(_LOREM_IPSUM_3)
+      out.text(_LOREM_IPSUM_1)
+      out.paragraph()
+      out.text(_LOREM_IPSUM_2)
+      out.text(_LOREM_IPSUM_3)
+      actual = test_io.getvalue()
+
+    expected = (
+        textwrap.fill(_LOREM_IPSUM_1 + ' ' + _LOREM_IPSUM_2, 80) + '\n\n' +
+        textwrap.fill(_LOREM_IPSUM_3 + ' ' + _LOREM_IPSUM_1, 80) + '\n\n' +
+        textwrap.fill(_LOREM_IPSUM_2 + ' ' + _LOREM_IPSUM_3, 80))
+    self.assertEqual(expected, actual)
+
+  def testListDepth1(self):
+    with contextlib.closing(StringIO()) as test_io:
+      out = markdown_writer.MarkdownWriter(test_io)
+      out.paragraph()
+      out.paragraph()
+      out.paragraph()
+      with out.auto_ordered_list():
+        with out.auto_item():
+          out.text(_LOREM_IPSUM_1)
+          out.text(_LOREM_IPSUM_2)
+          out.paragraph()
+          out.paragraph()
+        with out.auto_item():
+          out.paragraph()
+          out.text(_LOREM_IPSUM_3)
+          out.text(_LOREM_IPSUM_1)
+        with out.auto_item():
+          out.text(_LOREM_IPSUM_2)
+          out.paragraph()
+          out.text(_LOREM_IPSUM_3)
+          out.paragraph()
+      out.text(_LOREM_IPSUM_1)
+      actual = test_io.getvalue()
+    list_prefix = '1.  '
+    expected = (
+        _wrap_behind(_LOREM_IPSUM_1 + ' ' + _LOREM_IPSUM_2, list_prefix, 80) +
+        '\n\n' +
+        _wrap_behind(_LOREM_IPSUM_3 + ' ' + _LOREM_IPSUM_1, list_prefix, 80) +
+        '\n' + _wrap_behind(_LOREM_IPSUM_2, list_prefix, 80) + '\n\n' +
+        _wrap_behind(_LOREM_IPSUM_3, ' ' * len(list_prefix), 80) + '\n\n' +
+        textwrap.fill(_LOREM_IPSUM_1, 80))
+    self.assertEqual(expected, actual)
+
+  def testListDepth2(self):
+    with contextlib.closing(StringIO()) as test_io:
+      out = markdown_writer.MarkdownWriter(test_io)
+      with out.auto_ordered_list():
+        with out.auto_item():
+          out.text(_LOREM_IPSUM_1)
+          with out.auto_unordered_list():
+            with out.auto_item():
+              out.text(_LOREM_IPSUM_2)
+            with out.auto_item():
+              out.text(_LOREM_IPSUM_3)
+              out.text(_LOREM_IPSUM_1)
+        with out.auto_item():
+          out.text(_LOREM_IPSUM_2)
+          with out.auto_unordered_list():
+            with out.auto_item():
+              out.text(_LOREM_IPSUM_3)
+              out.text(_LOREM_IPSUM_1)
+            with out.auto_item():
+              out.text(_LOREM_IPSUM_2)
+      out.text(_LOREM_IPSUM_3)
+      actual = test_io.getvalue()
+    list_prefix_1 = '1.  '
+    list_prefix_2 = '    *   '
+    expected = (
+        _wrap_behind(_LOREM_IPSUM_1, list_prefix_1, 80) + '\n\n' +
+        _wrap_behind(_LOREM_IPSUM_2, list_prefix_2, 80) + '\n' +
+        _wrap_behind(_LOREM_IPSUM_3 + ' ' + _LOREM_IPSUM_1, list_prefix_2, 80) +
+        '\n\n' + _wrap_behind(_LOREM_IPSUM_2, list_prefix_1, 80) + '\n\n' +
+        _wrap_behind(_LOREM_IPSUM_3 + ' ' + _LOREM_IPSUM_1, list_prefix_2, 80) +
+        '\n' + _wrap_behind(_LOREM_IPSUM_2, list_prefix_2, 80) + '\n\n' +
+        textwrap.fill(_LOREM_IPSUM_3, 80))
+    self.assertEqual(expected, actual)
+
+
+if __name__ == '__main__':
+  unittest.main()
diff --git a/cobalt/speech/BUILD.gn b/cobalt/speech/BUILD.gn
index 3f4cc72..1e20f72 100644
--- a/cobalt/speech/BUILD.gn
+++ b/cobalt/speech/BUILD.gn
@@ -105,7 +105,7 @@
     "//cobalt/script",
     "//cobalt/web:dom_exception",
     "//content/browser/speech",
-    "//starboard",
+    "//starboard:starboard_group",
     "//third_party/flac",
     "//third_party/protobuf:protobuf_lite",
     "//url",
diff --git a/cobalt/subtlecrypto/BUILD.gn b/cobalt/subtlecrypto/BUILD.gn
index a3698ea..ebaa1d8 100644
--- a/cobalt/subtlecrypto/BUILD.gn
+++ b/cobalt/subtlecrypto/BUILD.gn
@@ -22,7 +22,7 @@
 
   deps = [
     "//base",
-    "//starboard",
+    "//starboard:starboard_group",
     "//third_party/boringssl:crypto",
   ]
 }
diff --git a/cobalt/subtlecrypto/import_key_algorithm_params.idl b/cobalt/subtlecrypto/import_key_algorithm_params.idl
index 6e913dc..b8a9533 100644
--- a/cobalt/subtlecrypto/import_key_algorithm_params.idl
+++ b/cobalt/subtlecrypto/import_key_algorithm_params.idl
@@ -19,7 +19,7 @@
 
 dictionary ImportKeyAlgorithmParams : Algorithm {
   // The inner hash function to use.
-  DOMString hash;
+  AlgorithmIdentifier hash;
   // The length (in bits) of the key.
   unsigned long length;
 };
diff --git a/cobalt/subtlecrypto/subtle_crypto.cc b/cobalt/subtlecrypto/subtle_crypto.cc
index e9bf7eb..4dc4cea 100644
--- a/cobalt/subtlecrypto/subtle_crypto.cc
+++ b/cobalt/subtlecrypto/subtle_crypto.cc
@@ -382,7 +382,7 @@
         algorithm.AsType<ImportKeyAlgorithmParams>();
     // 29.6.2 Set hash to equal the hash member of normalizedAlgorithm.
     if (algo_params.has_hash()) {
-      cryptoKey->set_hash(algo_params.hash());
+      cryptoKey->set_hash(get_name_or_string(algo_params.hash()));
     }
   }
   // 12. Resolve promise with result.
diff --git a/cobalt/tools/automated_testing/cobalt_runner.py b/cobalt/tools/automated_testing/cobalt_runner.py
index 82db23a..467f65c 100644
--- a/cobalt/tools/automated_testing/cobalt_runner.py
+++ b/cobalt/tools/automated_testing/cobalt_runner.py
@@ -342,9 +342,13 @@
   def _StartWebdriver(self, port):
     host, webdriver_port = self.launcher.GetHostAndPortGivenPort(port)
     self.webdriver_url = f'http://{host}:{webdriver_port}/'
+
+    # Create remote and set a timeout before making the connection
+    rc = self.selenium_webdriver_module.remote.remote_connection
+    executor = rc.RemoteConnection(self.webdriver_url)
+    executor.set_timeout(WEBDRIVER_HTTP_TIMEOUT_SECONDS)
     self.webdriver = self.selenium_webdriver_module.Remote(
-        self.webdriver_url, COBALT_WEBDRIVER_CAPABILITIES)
-    self.webdriver.command_executor.set_timeout(WEBDRIVER_HTTP_TIMEOUT_SECONDS)
+        executor, COBALT_WEBDRIVER_CAPABILITIES)
     logging.info('Selenium Connected')
     self.test_script_started.set()
     with self.start_condition:
@@ -355,11 +359,12 @@
     if self.webdriver:
       self.webdriver.quit()
     if self.webdriver_url:
+      rc = self.selenium_webdriver_module.remote.remote_connection
+      executor = rc.RemoteConnection(self.webdriver_url)
+      executor.set_timeout(WEBDRIVER_HTTP_TIMEOUT_SECONDS)
       self.webdriver = self.selenium_webdriver_module.Remote(
-          self.webdriver_url, COBALT_WEBDRIVER_CAPABILITIES)
+          executor, COBALT_WEBDRIVER_CAPABILITIES)
     if self.webdriver:
-      self.webdriver.command_executor.set_timeout(
-          WEBDRIVER_HTTP_TIMEOUT_SECONDS)
       logging.info('Selenium Reconnected')
 
   def WaitForStart(self):
diff --git a/cobalt/updater/BUILD.gn b/cobalt/updater/BUILD.gn
index 94e7ae6..ad9387b 100644
--- a/cobalt/updater/BUILD.gn
+++ b/cobalt/updater/BUILD.gn
@@ -72,18 +72,18 @@
     "//components/crx_file",
     "//components/prefs",
     "//components/update_client",
-    "//starboard",
+    "//starboard:starboard_group",
   ]
 }
 
 target(final_executable_type, "crash_sandbox") {
   sources = [ "crash_sandbox.cc" ]
-  deps = [ "//starboard" ]
+  deps = [ "//starboard:starboard_group" ]
 }
 
 target(final_executable_type, "noop_sandbox") {
   sources = [ "noop_sandbox.cc" ]
-  deps = [ "//starboard" ]
+  deps = [ "//starboard:starboard_group" ]
 }
 
 target(final_executable_type, "one_app_only_sandbox") {
@@ -93,7 +93,7 @@
     "//cobalt/browser",
     "//cobalt/browser:browser_switches",
     "//net",
-    "//starboard",
+    "//starboard:starboard_group",
     "//starboard/loader_app:app_key",
   ]
 }
diff --git a/cobalt/version.h b/cobalt/version.h
index f54bb3b..8d80aef 100644
--- a/cobalt/version.h
+++ b/cobalt/version.h
@@ -35,6 +35,6 @@
 //                  release is cut.
 //.
 
-#define COBALT_VERSION "24.lts.20"
+#define COBALT_VERSION "24.lts.30"
 
 #endif  // COBALT_VERSION_H_
diff --git a/cobalt/web/BUILD.gn b/cobalt/web/BUILD.gn
index acd599c..c00435d 100644
--- a/cobalt/web/BUILD.gn
+++ b/cobalt/web/BUILD.gn
@@ -187,6 +187,7 @@
     "event_target_test.cc",
     "event_test.cc",
     "message_event_test.cc",
+    "message_port_test.cc",
     "url_test.cc",
     "url_utils_test.cc",
     "window_timers_test.cc",
diff --git a/cobalt/web/event_target.cc b/cobalt/web/event_target.cc
index 2622b4b..4d2fc0a 100644
--- a/cobalt/web/event_target.cc
+++ b/cobalt/web/event_target.cc
@@ -282,9 +282,22 @@
   // instead.
 }
 
+void EventTarget::AddEventListenerRegistrationCallback(
+    void* object, base::Token token, base::OnceClosure callback) {
+  base::AutoLock lock(event_listener_registration_mutex_);
+  event_listener_registration_callbacks_[token][object] = std::move(callback);
+}
+
+void EventTarget::RemoveEventListenerRegistrationCallbacks(void* object) {
+  base::AutoLock lock(event_listener_registration_mutex_);
+  for (auto& token : event_listener_registration_callbacks_)
+    token.second.erase(object);
+}
+
 void EventTarget::AddEventListenerInternal(
     std::unique_ptr<EventTargetListenerInfo> listener_info) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+  DCHECK(listener_info);
 
   // Remove existing attribute listener of the same type.
   if (listener_info->is_attribute()) {
@@ -314,7 +327,21 @@
   debugger_hooks().AsyncTaskScheduled(
       listener_info->task(), listener_info->type().c_str(),
       base::DebuggerHooks::AsyncTaskFrequency::kRecurring);
+
+  base::Token type = listener_info->type();
   event_listener_infos_.push_back(std::move(listener_info));
+
+  {
+    // Call the event listener registration callback.
+    base::AutoLock lock(event_listener_registration_mutex_);
+    auto callbacks = event_listener_registration_callbacks_.find(type);
+    if (callbacks != event_listener_registration_callbacks_.end()) {
+      for (auto& object : callbacks->second) {
+        std::move(object.second).Run();
+      }
+      event_listener_registration_callbacks_.erase(type);
+    }
+  }
 }
 
 bool EventTarget::HasEventListener(base::Token type) {
diff --git a/cobalt/web/event_target.h b/cobalt/web/event_target.h
index 1663f80..f61ae41 100644
--- a/cobalt/web/event_target.h
+++ b/cobalt/web/event_target.h
@@ -15,6 +15,7 @@
 #ifndef COBALT_WEB_EVENT_TARGET_H_
 #define COBALT_WEB_EVENT_TARGET_H_
 
+#include <map>
 #include <memory>
 #include <set>
 #include <string>
@@ -536,7 +537,6 @@
   web::EnvironmentSettings* environment_settings() const {
     return environment_settings_;
   }
-
   std::set<base::Token>& event_listener_event_types() const {
     static std::set<base::Token> event_listener_event_types;
     for (auto& event_listener_info : event_listener_infos_) {
@@ -545,6 +545,12 @@
     return event_listener_event_types;
   }
 
+  // Register a callback to be called when an event listener is added for the
+  // given type.
+  void AddEventListenerRegistrationCallback(void* object, base::Token type,
+                                            base::OnceClosure callback);
+  void RemoveEventListenerRegistrationCallbacks(void* object);
+
  protected:
   virtual ~EventTarget() { environment_settings_ = nullptr; }
 
@@ -569,8 +575,12 @@
   // the special case of window.onerror handling.
   bool unpack_onerror_events_;
 
-  // Thread checker ensures all calls to the EventTarget are made from the same
-  // thread that it is created in.
+  base::Lock event_listener_registration_mutex_;
+  std::map<base::Token, std::map<void*, base::OnceClosure>>
+      event_listener_registration_callbacks_;
+
+  // Thread checker ensures all calls to the EventTarget are made from the
+  // same thread that it is created in.
   THREAD_CHECKER(thread_checker_);
 };
 
diff --git a/cobalt/web/message_port.cc b/cobalt/web/message_port.cc
index 871874b..f6de8e2 100644
--- a/cobalt/web/message_port.cc
+++ b/cobalt/web/message_port.cc
@@ -23,7 +23,6 @@
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
-#include "base/message_loop/message_loop.h"
 #include "base/task_runner.h"
 #include "cobalt/script/environment_settings.h"
 #include "cobalt/web/context.h"
@@ -34,31 +33,68 @@
 namespace cobalt {
 namespace web {
 
-MessagePort::MessagePort(web::EventTarget* event_target)
-    : event_target_(event_target) {
-  if (!event_target_) {
-    return;
+void MessagePort::EntangleWithEventTarget(web::EventTarget* event_target) {
+  DCHECK(!event_target_);
+  {
+    base::AutoLock lock(mutex_);
+    event_target_ = event_target;
+    if (!event_target_) {
+      enabled_ = false;
+      return;
+    }
   }
-  Context* context = event_target_->environment_settings()->context();
-  base::MessageLoop* message_loop = context->message_loop();
-  if (!message_loop) {
-    return;
-  }
-  message_loop->task_runner()->PostTask(
+  target_task_runner()->PostTask(
       FROM_HERE,
       base::BindOnce(&Context::AddEnvironmentSettingsChangeObserver,
-                     base::Unretained(context), base::Unretained(this)));
+                     base::Unretained(context()), base::Unretained(this)));
   remove_environment_settings_change_observer_ =
       base::BindOnce(&Context::RemoveEnvironmentSettingsChangeObserver,
-                     base::Unretained(context), base::Unretained(this));
+                     base::Unretained(context()), base::Unretained(this));
+
+  target_task_runner()->PostTask(
+      FROM_HERE,
+      base::Bind(
+          [](MessagePort* message_port,
+             web::EventTarget*
+                 event_target) {  // The first time a MessagePort object's
+                                  // onmessage IDL attribute is set, the
+            // port's port message queue must be enabled, as if the start()
+            // method had been called.
+            //   https://html.spec.whatwg.org/commit-snapshots/465a6b672c703054de278b0f8133eb3ad33d93f4/#messageport
+            if (event_target->HasEventListener(base::Tokens::message())) {
+              message_port->Start();
+            } else {
+              event_target->AddEventListenerRegistrationCallback(
+                  message_port, base::Tokens::message(),
+                  base::BindOnce(&MessagePort::Start,
+                                 base::Unretained(message_port)));
+            }
+          },
+          base::Unretained(this), base::Unretained(event_target)));
 }
 
-MessagePort::~MessagePort() { Close(); }
-
-void MessagePort::Close() {
+void MessagePort::Start() {
+  // The start() method steps are to enable this's port message queue, if it is
+  // not already enabled.
+  //   https://html.spec.whatwg.org/commit-snapshots/465a6b672c703054de278b0f8133eb3ad33d93f4/#dom-messageport-start
+  base::AutoLock lock(mutex_);
   if (!event_target_) {
     return;
   }
+  enabled_ = true;
+  for (auto& message : unshipped_messages_) {
+    PostMessageSerializedLocked(std::move(message));
+  }
+  unshipped_messages_.clear();
+}
+
+void MessagePort::Close() {
+  base::AutoLock lock(mutex_);
+  unshipped_messages_.clear();
+  if (!event_target_) {
+    return;
+  }
+  event_target_->RemoveEventListenerRegistrationCallbacks(this);
   if (remove_environment_settings_change_observer_) {
     std::move(remove_environment_settings_change_observer_).Run();
   }
@@ -66,32 +102,36 @@
 }
 
 void MessagePort::PostMessage(const script::ValueHandleHolder& message) {
-  PostMessageSerialized(std::make_unique<script::StructuredClone>(message));
+  auto structured_clone = std::make_unique<script::StructuredClone>(message);
+  {
+    base::AutoLock lock(mutex_);
+    if (!(event_target_ && enabled_)) {
+      unshipped_messages_.push_back(std::move(structured_clone));
+      return;
+    }
+    PostMessageSerializedLocked(std::move(structured_clone));
+  }
 }
 
-void MessagePort::PostMessageSerialized(
+void MessagePort::PostMessageSerializedLocked(
     std::unique_ptr<script::StructuredClone> structured_clone) {
-  if (!event_target_ || !structured_clone) {
+  if (!structured_clone || !event_target_ || !enabled_) {
     return;
   }
-  // TODO: Forward the location of the origating API call to the PostTask call.
-  base::MessageLoop* message_loop =
-      event_target_->environment_settings()->context()->message_loop();
-  if (!message_loop) {
-    return;
-  }
+  // TODO: Forward the location of the origating API call to the PostTask
+  // call.
   //   https://html.spec.whatwg.org/multipage/workers.html#handler-worker-onmessage
   // TODO: Update MessageEvent to support more types. (b/227665847)
   // TODO: Remove dependency of MessageEvent on net iobuffer (b/227665847)
-  message_loop->task_runner()->PostTask(
-      FROM_HERE, base::BindOnce(&MessagePort::DispatchMessage, AsWeakPtr(),
-                                std::move(structured_clone)));
-}
-
-void MessagePort::DispatchMessage(
-    std::unique_ptr<script::StructuredClone> structured_clone) {
-  event_target_->DispatchEvent(new web::MessageEvent(
-      base::Tokens::message(), std::move(structured_clone)));
+  target_task_runner()->PostTask(
+      FROM_HERE,
+      base::BindOnce(
+          [](base::WeakPtr<web::EventTarget> event_target,
+             std::unique_ptr<script::StructuredClone> structured_clone) {
+            event_target->DispatchEvent(new web::MessageEvent(
+                base::Tokens::message(), std::move(structured_clone)));
+          },
+          event_target_->AsWeakPtr(), std::move(structured_clone)));
 }
 
 }  // namespace web
diff --git a/cobalt/web/message_port.h b/cobalt/web/message_port.h
index cee5109..71ef615 100644
--- a/cobalt/web/message_port.h
+++ b/cobalt/web/message_port.h
@@ -17,6 +17,8 @@
 
 #include <memory>
 #include <string>
+#include <utility>
+#include <vector>
 
 #include "base/callback_forward.h"
 #include "base/memory/weak_ptr.h"
@@ -34,14 +36,16 @@
 namespace web {
 
 class MessagePort : public script::Wrappable,
-                    public base::SupportsWeakPtr<MessagePort>,
                     public Context::EnvironmentSettingsChangeObserver {
  public:
-  explicit MessagePort(web::EventTarget* event_target);
-  ~MessagePort();
+  MessagePort() = default;
+  ~MessagePort() { Close(); }
+
   MessagePort(const MessagePort&) = delete;
   MessagePort& operator=(const MessagePort&) = delete;
 
+  void EntangleWithEventTarget(web::EventTarget* event_target);
+
   void OnEnvironmentSettingsChanged(bool context_valid) override {
     if (!context_valid) {
       Close();
@@ -53,10 +57,8 @@
   // -> void PostMessage(const script::ValueHandleHolder& message,
   //                     script::Sequence<script::ValueHandle*> transfer) {}
   void PostMessage(const script::ValueHandleHolder& message);
-  void PostMessageSerialized(
-      std::unique_ptr<script::StructuredClone> structured_clone);
 
-  void Start() {}
+  void Start();
   void Close();
 
   const web::EventTargetListenerInfo::EventListenerScriptValue* onmessage()
@@ -91,15 +93,32 @@
                                              event_listener);
   }
 
-  web::EventTarget* event_target() { return event_target_; }
+  EventTarget* event_target() const { return event_target_; }
+  Context* context() const {
+    return event_target_ ? event_target_->environment_settings()->context()
+                         : nullptr;
+  }
+  base::TaskRunner* target_task_runner() const {
+    return event_target_ ? event_target_->environment_settings()
+                               ->context()
+                               ->message_loop()
+                               ->task_runner()
+                         : nullptr;
+  }
 
   DEFINE_WRAPPABLE_TYPE(MessagePort);
 
  private:
-  void DispatchMessage(
+  void PostMessageSerializedLocked(
       std::unique_ptr<script::StructuredClone> structured_clone);
 
-  // The event target to dispatch events to.
+  base::Lock mutex_;
+  std::vector<std::unique_ptr<script::StructuredClone>> unshipped_messages_;
+
+  // A port message queue can be enabled or disabled, and is initially disabled.
+  //   https://html.spec.whatwg.org/commit-snapshots/465a6b672c703054de278b0f8133eb3ad33d93f4/#message-ports
+  bool enabled_ = false;
+
   web::EventTarget* event_target_ = nullptr;
   base::OnceClosure remove_environment_settings_change_observer_;
 };
diff --git a/cobalt/web/message_port_test.cc b/cobalt/web/message_port_test.cc
new file mode 100644
index 0000000..140c291
--- /dev/null
+++ b/cobalt/web/message_port_test.cc
@@ -0,0 +1,45 @@
+// Copyright 2023 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "cobalt/web/message_port.h"
+
+#include "base/strings/string_util.h"
+#include "cobalt/web/testing/test_with_javascript.h"
+
+
+#define EXPECT_SUBSTRING(needle, haystack) \
+  EXPECT_PRED_FORMAT2(::testing::IsSubstring, (needle), (haystack))
+
+namespace cobalt {
+namespace web {
+
+namespace {
+class MessagePortTestWithJavaScript : public testing::TestWebWithJavaScript {};
+}  // namespace
+
+TEST_P(MessagePortTestWithJavaScript, MessagePortIsNotConstructible) {
+  std::string result;
+  EXPECT_FALSE(EvaluateScript("var event = new MessagePort();", &result))
+      << "Failed to evaluate script.";
+  EXPECT_SUBSTRING("TypeError: MessagePort is not constructible", result)
+      << result;
+}
+
+INSTANTIATE_TEST_CASE_P(
+    MessagePortTestsWithJavaScript, MessagePortTestWithJavaScript,
+    ::testing::ValuesIn(testing::TestWebWithJavaScript::GetWebTypes()),
+    testing::TestWebWithJavaScript::GetTypeName);
+
+}  // namespace web
+}  // namespace cobalt
diff --git a/cobalt/websocket/BUILD.gn b/cobalt/websocket/BUILD.gn
index 77469ab..dc0608e 100644
--- a/cobalt/websocket/BUILD.gn
+++ b/cobalt/websocket/BUILD.gn
@@ -35,7 +35,7 @@
     "//cobalt/script",
     "//cobalt/web:dom_exception",
     "//net",
-    "//starboard",
+    "//starboard:starboard_group",
     "//third_party/protobuf:protobuf_lite",
     "//url",
   ]
diff --git a/cobalt/worker/client.cc b/cobalt/worker/client.cc
index 7ca45be..7079588 100644
--- a/cobalt/worker/client.cc
+++ b/cobalt/worker/client.cc
@@ -22,12 +22,12 @@
 
 namespace cobalt {
 namespace worker {
-Client::Client(web::EnvironmentSettings* client)
-    : MessagePort(client->context()
-                      ->GetWindowOrWorkerGlobalScope()
-                      ->navigator_base()
-                      ->service_worker()) {
+Client::Client(web::EnvironmentSettings* client) {
   DCHECK(client);
+  EntangleWithEventTarget(client->context()
+                              ->GetWindowOrWorkerGlobalScope()
+                              ->navigator_base()
+                              ->service_worker());
   // Algorithm for Create Client:
   //   https://www.w3.org/TR/2022/CRD-service-workers-20220712/#create-client
   // 1. Let clientObject be a new Client object.
diff --git a/cobalt/worker/dedicated_worker.cc b/cobalt/worker/dedicated_worker.cc
index 783cead..af3e62b 100644
--- a/cobalt/worker/dedicated_worker.cc
+++ b/cobalt/worker/dedicated_worker.cc
@@ -85,7 +85,8 @@
   // 6. Let worker be a new Worker object.
   // 7. Let outside port be a new MessagePort in outside settings's Realm.
   // 8. Associate the outside port with worker.
-  outside_port_ = new web::MessagePort(this);
+  outside_port_ = new web::MessagePort();
+  outside_port_->EntangleWithEventTarget(this);
   // 9. Run this step in parallel:
   //    1. Run a worker given worker, worker URL, outside settings, outside
   //    port, and options.
diff --git a/cobalt/worker/worker.cc b/cobalt/worker/worker.cc
index 28ee68e..a126d86 100644
--- a/cobalt/worker/worker.cc
+++ b/cobalt/worker/worker.cc
@@ -19,7 +19,6 @@
 
 #include "base/location.h"
 #include "base/logging.h"
-#include "base/message_loop/message_loop.h"
 #include "base/task_runner.h"
 #include "base/threading/thread.h"
 #include "cobalt/browser/user_agent_platform_info.h"
@@ -40,6 +39,7 @@
 namespace worker {
 
 Worker::Worker(const char* name, const Options& options) : options_(options) {
+  message_port_ = new web::MessagePort();
   // Algorithm for 'run a worker'
   //   https://html.spec.whatwg.org/commit-snapshots/465a6b672c703054de278b0f8133eb3ad33d93f4/#run-a-worker
   // 1. Let is shared be true if worker is a SharedWorker object, and false
@@ -71,7 +71,6 @@
   // Destroy members that were constructed in the worker thread.
   loader_.reset();
   worker_global_scope_ = nullptr;
-  message_port_ = nullptr;
   content_.reset();
 }
 
@@ -265,7 +264,7 @@
   // Done at step 8.
   // 16. Let inside port be a new MessagePort object in inside settings's Realm.
   // 17. Associate inside port with worker global scope.
-  message_port_ = new web::MessagePort(worker_global_scope_);
+  message_port_->EntangleWithEventTarget(worker_global_scope_);
   // 18. Entangle outside port and inside port.
   // TODO(b/226640425): Implement this when Message Ports can be entangled.
   // 19. Create a new WorkerLocation object and associate it with worker global
@@ -280,7 +279,6 @@
   //     worker until such time as either the closing flag switches to true or
   //     the worker stops being a suspendable worker.
   // 22. Set inside settings's execution ready flag.
-  execution_ready_.Signal();
   // 23. If script is a classic script, then run the classic script script.
   //     Otherwise, it is a module script; run the module script script.
 
@@ -314,11 +312,11 @@
   // Algorithm for 'run a worker'
   //   https://html.spec.whatwg.org/commit-snapshots/465a6b672c703054de278b0f8133eb3ad33d93f4/#run-a-worker
   // 29. Clear the worker global scope's map of active timers.
-  if (worker_global_scope_ && message_loop()) {
-    message_loop()->task_runner()->PostBlockingTask(
+  if (worker_global_scope_ && task_runner()) {
+    task_runner()->PostTask(
         FROM_HERE, base::Bind(
-                       [](WorkerGlobalScope* worker_global_scope) {
-                         worker_global_scope->DestroyTimers();
+                       [](web::WindowOrWorkerGlobalScope* global_scope) {
+                         global_scope->DestroyTimers();
                        },
                        base::Unretained(worker_global_scope_.get())));
   }
@@ -357,20 +355,8 @@
 }
 
 void Worker::PostMessage(const script::ValueHandleHolder& message) {
-  DCHECK(message_loop());
-  auto structured_clone = std::make_unique<script::StructuredClone>(message);
-  if (base::MessageLoop::current() != message_loop()) {
-    // Block until the worker thread is ready to execute code to handle the
-    // event.
-    execution_ready_.Wait();
-    message_loop()->task_runner()->PostTask(
-        FROM_HERE, base::BindOnce(&web::MessagePort::PostMessageSerialized,
-                                  message_port()->AsWeakPtr(),
-                                  std::move(structured_clone)));
-  } else {
-    DCHECK(execution_ready_.IsSignaled());
-    message_port()->PostMessageSerialized(std::move(structured_clone));
-  }
+  DCHECK(message_port_);
+  message_port_->PostMessage(message);
 }
 
 }  // namespace worker
diff --git a/cobalt/worker/worker.h b/cobalt/worker/worker.h
index 364837a..5cce8cb 100644
--- a/cobalt/worker/worker.h
+++ b/cobalt/worker/worker.h
@@ -24,6 +24,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/message_loop/message_loop_current.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task_runner.h"
 #include "base/threading/thread.h"
 #include "cobalt/base/source_location.h"
 #include "cobalt/csp/content_security_policy.h"
@@ -81,11 +82,9 @@
 
   void Terminate();
 
-  web::MessagePort* message_port() const { return message_port_.get(); }
-
-  // The message loop this object is running on.
-  base::MessageLoop* message_loop() const {
-    return web_agent_ ? web_agent_->message_loop() : nullptr;
+  // The task runner for this object.
+  base::TaskRunner* task_runner() const {
+    return web_agent_ ? web_agent_->message_loop()->task_runner() : nullptr;
   }
 
   void PostMessage(const script::ValueHandleHolder& message);
@@ -138,12 +137,6 @@
 
   // Content of the script. Released after Execute is called.
   std::unique_ptr<std::string> content_;
-
-  // The execution ready flag.
-  //   https://html.spec.whatwg.org/commit-snapshots/465a6b672c703054de278b0f8133eb3ad33d93f4/#concept-environment-execution-ready-flag
-  base::WaitableEvent execution_ready_ = {
-      base::WaitableEvent::ResetPolicy::MANUAL,
-      base::WaitableEvent::InitialState::NOT_SIGNALED};
 };
 
 }  // namespace worker
diff --git a/cobalt/xhr/BUILD.gn b/cobalt/xhr/BUILD.gn
index c2bd6fc..beb1af3 100644
--- a/cobalt/xhr/BUILD.gn
+++ b/cobalt/xhr/BUILD.gn
@@ -46,7 +46,7 @@
     "//cobalt/web",
     "//nb",
     "//net",
-    "//starboard",
+    "//starboard:starboard_group",
     "//third_party/protobuf:protobuf_lite",
     "//url",
   ]
diff --git a/components/update_client/cobalt_slot_management.cc b/components/update_client/cobalt_slot_management.cc
index 6abee58..0014e67 100644
--- a/components/update_client/cobalt_slot_management.cc
+++ b/components/update_client/cobalt_slot_management.cc
@@ -299,8 +299,8 @@
   base::Version slot_candidate_version("1.0.1");
   int slot_candidate = -1;
 
-  // Iterate over all writeable slots - index >= 1.
-  for (int i = 1; i < max_slots; i++) {
+  // Iterate over all slots - index >= 0.
+  for (int i = 0; i < max_slots; i++) {
     LOG(INFO) << "CobaltQuickInstallation: iterating slot=" << i;
     // Get the path to new installation.
     std::vector<char> installation_path(kSbFileMaxPath);
@@ -329,13 +329,15 @@
       continue;
     } else if (slot_candidate_version < installed_version &&
                current_version < installed_version &&
-               !DrainFileIsAnotherAppDraining(installation_dir.value().c_str(),
-                                              app_key) &&
-               !CheckBadFileExists(installation_dir.value().c_str(), app_key) &&
-               !SbFileExists(good_app_key_file_path.c_str()) &&
-               starboard::loader_app::AnyGoodAppKeyFile(
-                   installation_dir.value().c_str())) {
-      // Found a slot with newer version than the current version that's not
+               (i == 0 || !DrainFileIsAnotherAppDraining(
+                              installation_dir.value().c_str(), app_key) &&
+                              !CheckBadFileExists(
+                                  installation_dir.value().c_str(), app_key) &&
+                              !SbFileExists(good_app_key_file_path.c_str()) &&
+                              starboard::loader_app::AnyGoodAppKeyFile(
+                                  installation_dir.value().c_str()))) {
+      // Found a slot with newer version than the current version. It's either
+      // the system image slot, or a writeable installation slot that's not
       // draining, and no bad file of current app exists, and a good file
       // exists from a another app, but not from the current app.
       // The final candidate is the newest version of the valid
diff --git a/content/browser/speech/BUILD.gn b/content/browser/speech/BUILD.gn
index 21ba4c7..93b4a68 100644
--- a/content/browser/speech/BUILD.gn
+++ b/content/browser/speech/BUILD.gn
@@ -42,7 +42,7 @@
     "//cobalt//browser:test_dependencies_on_browser",
     "//cobalt/media",
     "//cobalt/test:run_all_unittests",
-    "//starboard",
+    "//starboard:starboard_group",
     "//testing/gtest",
   ]
 }
diff --git a/crypto/BUILD.gn b/crypto/BUILD.gn
index e1292c4..74af55a 100644
--- a/crypto/BUILD.gn
+++ b/crypto/BUILD.gn
@@ -229,7 +229,7 @@
 # on the current SSL library should just depend on this.
 group("platform") {
   if (is_starboard) {
-    deps = [ "//starboard" ]
+    deps = [ "//starboard:starboard_group", ]
     public_deps = [ "//third_party/boringssl:crypto" ]
   } else {
     public_deps = [ "//third_party/boringssl" ]
diff --git a/docker-compose-windows-internal.yml b/docker-compose-windows-internal.yml
index a18ed0d..5af31e5 100644
--- a/docker-compose-windows-internal.yml
+++ b/docker-compose-windows-internal.yml
@@ -69,6 +69,16 @@
     depends_on:
       - cobalt-build-win-internal
 
+  ps4-kokoro:
+    build:
+      context: ./internal/docker/windows/kokoro/
+      dockerfile: Dockerfile
+      args:
+        - FROM_IMAGE=${FROM_IMAGE:-cobalt-build-ps4}
+    image: cobalt-kokoro-ps4
+    depends_on:
+      - ps4
+
   ps5:
     <<: *common-definitions
     build:
@@ -84,6 +94,16 @@
     depends_on:
       - cobalt-build-win-internal
 
+  ps5-kokoro:
+    build:
+      context: ./internal/docker/windows/kokoro/
+      dockerfile: Dockerfile
+      args:
+        - FROM_IMAGE=${FROM_IMAGE:-cobalt-build-ps5}
+    image: cobalt-kokoro-ps5
+    depends_on:
+      - ps5
+
   xb1:
     <<: *common-definitions
     build:
@@ -100,6 +120,16 @@
     depends_on:
       - cobalt-build-win-internal
 
+  xb1-kokoro:
+    build:
+      context: ./internal/docker/windows/kokoro/
+      dockerfile: Dockerfile
+      args:
+        - FROM_IMAGE=${FROM_IMAGE:-cobalt-build-xb1}
+    image: cobalt-kokoro-xb1
+    depends_on:
+      - xb1
+
   nxswitch:
     <<: *common-definitions
     build:
@@ -114,3 +144,13 @@
     image: cobalt-build-nxswitch
     depends_on:
       - cobalt-build-win-internal
+
+  nxswitch-kokoro:
+    build:
+      context: ./internal/docker/windows/kokoro/
+      dockerfile: Dockerfile
+      args:
+        - FROM_IMAGE=${FROM_IMAGE:-cobalt-build-nxswitch}
+    image: cobalt-kokoro-nxswitch
+    depends_on:
+      - nxswitch
diff --git a/docker/windows/base/build/Dockerfile b/docker/windows/base/build/Dockerfile
index 5484781..9c53d77 100644
--- a/docker/windows/base/build/Dockerfile
+++ b/docker/windows/base/build/Dockerfile
@@ -16,7 +16,8 @@
 ARG FROM_IMAGE
 FROM ${FROM_IMAGE}
 
-SHELL ["powershell", "-ExecutionPolicy", "unrestricted", "-Command"]
+SHELL ["powershell", "-ExecutionPolicy", "Unrestricted", "-Command", `
+       "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
 
 # Helper script for quick delete operations in windows
 COPY ./fast-win-rmdir.cmd /fast-win-rmdir.cmd
@@ -34,12 +35,16 @@
     choco install -y -c C:\choco-cache nodejs-lts;`
     choco install -y -c C:\choco-cache git;`
     choco install -y -c C:\choco-cache cmake --installargs 'ADD_CMAKE_TO_PATH=System';`
+    choco install -y -c C:\choco-cache nasm;`
     Write-Host ('Deleting the chocolately download cache');`
     Remove-Item -Force -Recurse $env:TEMP\*;`
     C:\fast-win-rmdir.cmd C:\choco-cache;`
     # Create version specific copy of each python executable.
     Copy-Item C:\Python3\python.exe C:\Python3\python3.exe
 
+# Configure PATH for nasm.
+RUN setx /M PATH $($Env:PATH + ';C:\Program Files\NASM')
+
 # Install python3 packages via PIP and set various configurations.
 COPY ./requirements.txt /requirements.txt
 RUN mkdir C:\pip-cache;`
diff --git a/docker/windows/base/visualstudio2022/Dockerfile b/docker/windows/base/visualstudio2022/Dockerfile
index a2722ff..0d6cdbf 100644
--- a/docker/windows/base/visualstudio2022/Dockerfile
+++ b/docker/windows/base/visualstudio2022/Dockerfile
@@ -19,18 +19,22 @@
 # Dockerfile for image used to install Visual Studio.
 # WARNING: Changes to this file will result in an extremely long image rebuild.
 
-SHELL ["powershell", "-ExecutionPolicy", "unrestricted", "-Command"]
+SHELL ["powershell", "-ExecutionPolicy", "Unrestricted", "-Command", `
+       "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
 
+# Pins Visual Studio 2022 release version to 17.4.6 (includes Clang 15.0.1).
+# This should be kept in sync with the VS installer used in the dev workstation
+# setup script in: `tools/install_visual_studio_22.ps1`
+ARG MSVS_INSTALLER_URL="https://download.visualstudio.microsoft.com/download/pr/d1ed8638-9e88-461e-92b7-4e29cc6172c3/38b09fc09ae9e590b73ae6752a0ebfd62579798969041bd341689273b842bc10/vs_BuildTools.exe"
 RUN mkdir C:\TEMP;`
     Write-Host ('Downloading vs_buildtools.exe');`
-    Invoke-WebRequest -Uri https://aka.ms/vs/17/release/vs_buildtools.exe `
+    Invoke-WebRequest -Uri ${env:MSVS_INSTALLER_URL} `
       -OutFile C:\TEMP\vs_buildtools.exe
 
 RUN Write-Host ('Installing vs_buildtools.exe');`
     Start-Process C:\TEMP\vs_buildtools.exe -Wait -NoNewWindow`
         -ArgumentList '--quiet --wait --norestart --nocache`
         --installPath C:\BuildTools `
-        --add Microsoft.VisualStudio.Component.VC.CoreIde `
         --add Microsoft.VisualStudio.Component.VC.14.34.17.4.x86.x64  `
         --add Microsoft.VisualStudio.Component.VC.Llvm.Clang          `
         --add Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset   `
@@ -39,7 +43,6 @@
     Remove-Item -Force -Recurse ${env:ProgramFiles(x86)}\'Microsoft Visual Studio'\Installer;`
     Remove-Item -Force -Recurse $env:TEMP\*;`
     Remove-Item -Force -Recurse $env:ProgramData\'Package Cache'\;`
-    Remove-Item -Force -Recurse C:\BuildTools\VC\Tools\Llvm\ARM64;`
     Remove-Item -Force -Recurse C:\BuildTools\Common7\IDE;`
     Remove-Item C:\TEMP\vs_buildtools.exe
 
diff --git a/nb/BUILD.gn b/nb/BUILD.gn
index ff056c9..433f8a2 100644
--- a/nb/BUILD.gn
+++ b/nb/BUILD.gn
@@ -93,7 +93,7 @@
 
     deps = [
       ":nb",
-      "//starboard",
+      "//starboard:starboard_group",
       "//testing/gmock:gmock",
       "//testing/gtest",
     ]
@@ -106,7 +106,7 @@
   deps = [
     ":nb",
     ":nb_copy_test_data",
-    "//starboard",
+    "//starboard:starboard_group",
   ]
 }
 
diff --git a/net/BUILD.gn b/net/BUILD.gn
index 2fb59e7..e978e30 100644
--- a/net/BUILD.gn
+++ b/net/BUILD.gn
@@ -1726,7 +1726,7 @@
     "//base/third_party/dynamic_annotations",
     "//crypto",
     "//nb",
-    "//starboard",
+    "//starboard:starboard_group",
     "//third_party/boringssl:crypto",
     "//third_party/brotli:dec",
     "//third_party/icu:icui18n",
diff --git a/starboard/BUILD.gn b/starboard/BUILD.gn
index aab526b..639c218 100644
--- a/starboard/BUILD.gn
+++ b/starboard/BUILD.gn
@@ -84,12 +84,12 @@
 
 group("default") {
   deps = [
-    ":starboard",
+    ":starboard_group",
     "//starboard/tools:build_app_launcher_zip",
   ]
 }
 
-group("starboard") {
+group("starboard_group") {
   public_deps = [
     ":starboard_headers_only",
     "//starboard/client_porting/cwrappers",
@@ -106,7 +106,7 @@
     if (sb_is_evergreen) {
       public_deps += [ "//starboard/elf_loader:sabi_string" ]
     } else {
-      data_deps = [ ":starboard_platform_group($starboard_toolchain)" ]
+      data_deps = [ ":starboard($starboard_toolchain)" ]
     }
 
     # TODO: b/295702296 Fix libunwind for modular builds.
@@ -115,7 +115,7 @@
     }
   } else {
     public_deps += [
-      ":starboard_platform_group_static($starboard_toolchain)",
+      ":starboard_static($starboard_toolchain)",
       "//starboard/common",
     ]
 
@@ -187,10 +187,10 @@
 
 if (current_toolchain == starboard_toolchain) {
   # This is the default 'starboard_platform_target'; use default properties
-  starboard_platform_target("starboard_platform_group") {
+  starboard_platform_target("starboard") {
   }
 
-  starboard_platform_target("starboard_platform_group_static") {
+  starboard_platform_target("starboard_static") {
     target_type = "group"
   }
 
@@ -211,7 +211,7 @@
   }
 
   group("starboard_with_main") {
-    public_deps = [ ":starboard" ]
+    public_deps = [ ":starboard_group" ]
     if (sb_is_modular && !sb_is_evergreen) {
       public_deps += [ "//$starboard_path:starboard_platform_with_main" ]
     }
diff --git a/starboard/android/apk/app/src/main/java/dev/cobalt/coat/CobaltActivity.java b/starboard/android/apk/app/src/main/java/dev/cobalt/coat/CobaltActivity.java
index 129b3c1..a7e85e0 100644
--- a/starboard/android/apk/app/src/main/java/dev/cobalt/coat/CobaltActivity.java
+++ b/starboard/android/apk/app/src/main/java/dev/cobalt/coat/CobaltActivity.java
@@ -41,6 +41,7 @@
 import java.util.Arrays;
 import java.util.List;
 import java.util.Locale;
+import java.util.regex.*;
 
 /** Native activity that has the required JNI methods called by the Starboard implementation. */
 public abstract class CobaltActivity extends GameActivity {
@@ -65,6 +66,8 @@
   private static final String EVERGREEN_LITE = "--evergreen_lite";
   private static final java.lang.String META_DATA_EVERGREEN_LITE = "cobalt.EVERGREEN_LITE";
 
+  private static final Pattern URL_PARAM_PATTERN = Pattern.compile("^[a-zA-Z0-9_=]*$");
+
   @SuppressWarnings("unused")
   private CobaltA11yHelper a11yHelper;
 
@@ -261,11 +264,48 @@
       }
     }
 
-    addCustomProxyArgs(args);
+    CharSequence[] urlParams = (extras == null) ? null : extras.getCharSequenceArray("url_params");
+    if (urlParams != null) {
+      appendUrlParamsToUrl(args, urlParams);
+    }
 
+    addCustomProxyArgs(args);
     return args.toArray(new String[0]);
   }
 
+  private void appendUrlParamsToUrl(List<String> args, CharSequence[] urlParams) {
+    int idx = -1;
+    for (int i = 0; i < args.size(); i++) {
+      if (args.get(i).startsWith(URL_ARG)) {
+        idx = i;
+        break;
+      }
+    }
+
+    if (idx >= 0) {
+      StringBuilder urlBuilder = new StringBuilder();
+      urlBuilder.append(args.get(idx));
+      // append & if ? is already in the url, otherwise append ?
+      if (urlBuilder.indexOf("?") > 0) {
+        urlBuilder.append("&");
+      } else {
+        urlBuilder.append("?");
+      }
+
+      for (int j = 0; j < urlParams.length; j++) {
+        // sanitize the input before append to the url.
+        String paramKeyValuePair = urlParams[j].toString();
+        if (URL_PARAM_PATTERN.matcher(paramKeyValuePair).matches()) {
+          urlBuilder.append(paramKeyValuePair);
+          urlBuilder.append('&');
+        }
+      }
+
+      urlBuilder.deleteCharAt(urlBuilder.length() - 1);
+      args.set(idx, urlBuilder.toString());
+    }
+  }
+
   private static void addCustomProxyArgs(List<String> args) {
     Pair<String, String> config = detectSystemProxyConfig();
 
diff --git a/starboard/android/apk/app/src/main/java/dev/cobalt/coat/StarboardBridge.java b/starboard/android/apk/app/src/main/java/dev/cobalt/coat/StarboardBridge.java
index 5d6e8f9..2a11745 100644
--- a/starboard/android/apk/app/src/main/java/dev/cobalt/coat/StarboardBridge.java
+++ b/starboard/android/apk/app/src/main/java/dev/cobalt/coat/StarboardBridge.java
@@ -118,6 +118,8 @@
   private static final TimeZone DEFAULT_TIME_ZONE = TimeZone.getTimeZone("America/Los_Angeles");
   private final long timeNanosecondsPerMicrosecond = 1000;
 
+  public static boolean enableBackgroundPlayback = false;
+
   public StarboardBridge(
       Context appContext,
       Holder<Activity> activityHolder,
@@ -189,6 +191,11 @@
   @SuppressWarnings("unused")
   @UsedByNative
   protected void startMediaPlaybackService() {
+    if (!enableBackgroundPlayback) {
+      Log.v(TAG, "Media Playback Service is disabled. Skip startMediaPlaybackService().");
+      return;
+    }
+
     if (cobaltMediaSession == null || !cobaltMediaSession.isActive()) {
       Log.w(TAG, "Do not start a MediaPlaybackService when the MediSsession is null or inactive.");
       return;
@@ -208,13 +215,18 @@
         } else {
           appContext.startService(intent);
         }
-      } catch (SecurityException e) {
+      } catch (RuntimeException e) {
         Log.e(TAG, "Failed to start MediaPlaybackService with intent.", e);
         return;
       }
     } else {
       Log.i(TAG, "Warm start - Restarting the MediaPlaybackService.");
-      ((MediaPlaybackService) service).startService();
+      try {
+        ((MediaPlaybackService) service).startService();
+      } catch (RuntimeException e) {
+        Log.e(TAG, "Failed to restart MediaPlaybackService.", e);
+        return;
+      }
     }
   }
 
@@ -224,7 +236,12 @@
     Service service = serviceHolder.get();
     if (service != null) {
       Log.i(TAG, "Stopping the MediaPlaybackService.");
-      ((MediaPlaybackService) service).stopService();
+      try {
+        ((MediaPlaybackService) service).stopService();
+      } catch (RuntimeException e) {
+        Log.e(TAG, "Failed to stop MediaPlaybackService.", e);
+        return;
+      }
     }
   }
 
@@ -846,4 +863,11 @@
   protected String getBuildFingerprint() {
     return Build.FINGERPRINT;
   }
+
+  @SuppressWarnings("unused")
+  @UsedByNative
+  protected void enableBackgroundPlayback(boolean value) {
+    enableBackgroundPlayback = value;
+    Log.v(TAG, "StarboardBridge set enableBackgroundPlayback: %b", value);
+  }
 }
diff --git a/starboard/android/apk/app/src/main/java/dev/cobalt/libraries/game_activity/games-activity-1.2.2.aar b/starboard/android/apk/app/src/main/java/dev/cobalt/libraries/game_activity/games-activity-1.2.2.aar
deleted file mode 100644
index 3b4cb1f..0000000
--- a/starboard/android/apk/app/src/main/java/dev/cobalt/libraries/game_activity/games-activity-1.2.2.aar
+++ /dev/null
Binary files differ
diff --git a/starboard/android/apk/app/src/main/java/dev/cobalt/libraries/game_activity/games-activity-2.0.2.aar b/starboard/android/apk/app/src/main/java/dev/cobalt/libraries/game_activity/games-activity-2.0.2.aar
new file mode 100644
index 0000000..f34483d
--- /dev/null
+++ b/starboard/android/apk/app/src/main/java/dev/cobalt/libraries/game_activity/games-activity-2.0.2.aar
Binary files differ
diff --git a/starboard/android/apk/app/src/main/java/dev/cobalt/media/AudioTrackBridge.java b/starboard/android/apk/app/src/main/java/dev/cobalt/media/AudioTrackBridge.java
index d554864..b87b9eb 100644
--- a/starboard/android/apk/app/src/main/java/dev/cobalt/media/AudioTrackBridge.java
+++ b/starboard/android/apk/app/src/main/java/dev/cobalt/media/AudioTrackBridge.java
@@ -165,10 +165,40 @@
       }
       audioTrackBufferSize /= 2;
     }
+
+    String sampleTypeString = "ENCODING_INVALID";
+    if (isAudioTrackValid()) {
+      // If the AudioTrack encoding indicates compressed data,
+      // e.g. AudioFormat.ENCODING_AC3, then the frame count returned
+      // is the size of the AudioTrack buffer in bytes.
+      // In such cases, audioTrackBufferSize does not have to be
+      // multiplied with bytes per sample and channel count below.
+      audioTrackBufferSize = audioTrack.getBufferSizeInFrames();
+      switch (sampleType) {
+        case AudioFormat.ENCODING_PCM_16BIT:
+          sampleTypeString = "ENCODING_PCM_16BIT";
+          audioTrackBufferSize *= getBytesPerSample(sampleType) * channelCount;
+          break;
+        case AudioFormat.ENCODING_PCM_FLOAT:
+          sampleTypeString = "ENCODING_PCM_FLOAT";
+          audioTrackBufferSize *= getBytesPerSample(sampleType) * channelCount;
+          break;
+        case AudioFormat.ENCODING_AC3:
+          sampleTypeString = "ENCODING_AC3";
+          break;
+        case AudioFormat.ENCODING_E_AC3:
+          sampleTypeString = "ENCODING_E_AC3";
+          break;
+        default:
+          Log.i(TAG, String.format("Unknown AudioFormat %d.", sampleType));
+          break;
+      }
+    }
     Log.i(
         TAG,
-        "AudioTrack created with buffer size %d (preferred: %d).  The minimum buffer size is"
-            + " %d.",
+        "AudioTrack created with AudioFormat %s and buffer size %d (preferred: %d)."
+            + " The minimum buffer size is %d.",
+        sampleTypeString,
         audioTrackBufferSize,
         preferredBufferSizeInBytes,
         AudioTrack.getMinBufferSize(sampleRate, channelConfig, sampleType));
diff --git a/starboard/android/apk/app/src/main/java/dev/cobalt/media/CobaltMediaSession.java b/starboard/android/apk/app/src/main/java/dev/cobalt/media/CobaltMediaSession.java
index 0b28e08..cd62cf0 100644
--- a/starboard/android/apk/app/src/main/java/dev/cobalt/media/CobaltMediaSession.java
+++ b/starboard/android/apk/app/src/main/java/dev/cobalt/media/CobaltMediaSession.java
@@ -31,6 +31,7 @@
 import android.support.v4.media.session.PlaybackStateCompat;
 import android.view.WindowManager;
 import androidx.annotation.RequiresApi;
+import dev.cobalt.coat.StarboardBridge;
 import dev.cobalt.util.Holder;
 import dev.cobalt.util.Log;
 
@@ -129,6 +130,10 @@
   }
 
   public boolean isActive() {
+    if (!StarboardBridge.enableBackgroundPlayback) {
+      return false;
+    }
+
     if (this.mediaSession == null) {
       return false;
     } else {
@@ -254,7 +259,9 @@
       Log.i(TAG, "MediaSession already released");
       return;
     }
-    mediaSession.setActive(playbackState != PLAYBACK_STATE_NONE);
+    if (StarboardBridge.enableBackgroundPlayback) {
+      mediaSession.setActive(playbackState != PLAYBACK_STATE_NONE);
+    }
     if (lifecycleCallback != null) {
       lifecycleCallback.onMediaSessionLifecycle(
           this.mediaSession.isActive(), this.mediaSession.getSessionToken());
diff --git a/starboard/android/apk/app/src/main/java/dev/cobalt/media/MediaCodecBridge.java b/starboard/android/apk/app/src/main/java/dev/cobalt/media/MediaCodecBridge.java
index 8164add..2ae4b23 100644
--- a/starboard/android/apk/app/src/main/java/dev/cobalt/media/MediaCodecBridge.java
+++ b/starboard/android/apk/app/src/main/java/dev/cobalt/media/MediaCodecBridge.java
@@ -86,7 +86,7 @@
   private double mPlaybackRate = 1.0;
   private int mFps = 30;
 
-  private MediaCodec.OnFrameRenderedListener mTunnelModeFrameRendererListener;
+  private MediaCodec.OnFrameRenderedListener mFrameRendererListener;
 
   // Functions that require this will be called frequently in a tight loop.
   // Only create one of these and reuse it to avoid excessive allocations,
@@ -527,9 +527,8 @@
         };
     mMediaCodec.setCallback(mCallback);
 
-    // TODO: support OnFrameRenderedListener for non tunnel mode
-    if (tunnelModeAudioSessionId != -1) {
-      mTunnelModeFrameRendererListener =
+    if (isFrameRenderedCallbackEnabled() || tunnelModeAudioSessionId != -1) {
+      mFrameRendererListener =
           new MediaCodec.OnFrameRenderedListener() {
             @Override
             public void onFrameRendered(MediaCodec codec, long presentationTimeUs, long nanoTime) {
@@ -542,10 +541,17 @@
               }
             }
           };
-      mMediaCodec.setOnFrameRenderedListener(mTunnelModeFrameRendererListener, null);
+      mMediaCodec.setOnFrameRenderedListener(mFrameRendererListener, null);
     }
   }
 
+  @UsedByNative
+  public static boolean isFrameRenderedCallbackEnabled() {
+    // Starting with Android 14, onFrameRendered should be called accurately for each rendered
+    // frame.
+    return Build.VERSION.SDK_INT >= 34;
+  }
+
   @SuppressWarnings("unused")
   @UsedByNative
   public static MediaCodecBridge createAudioMediaCodecBridge(
@@ -618,6 +624,7 @@
       MediaCrypto crypto,
       ColorInfo colorInfo,
       int tunnelModeAudioSessionId,
+      int maxVideoInputSize,
       CreateMediaCodecBridgeResult outCreateMediaCodecBridgeResult) {
     MediaCodec mediaCodec = null;
     outCreateMediaCodecBridgeResult.mMediaCodecBridge = null;
@@ -776,6 +783,20 @@
       }
     }
 
+    if (maxVideoInputSize > 0) {
+      mediaFormat.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, maxVideoInputSize);
+      try {
+        Log.i(
+            TAG,
+            "Set KEY_MAX_INPUT_SIZE to "
+                + maxVideoInputSize
+                + " (actual: "
+                + mediaFormat.getInteger(android.media.MediaFormat.KEY_MAX_INPUT_SIZE)
+                + ").");
+      } catch (Exception e) {
+        Log.e(TAG, "MediaFormat.getInteger(KEY_MAX_INPUT_SIZE) failed with exception: ", e);
+      }
+    }
     if (!bridge.configureVideo(
         mediaFormat, surface, crypto, 0, maxWidth, maxHeight, outCreateMediaCodecBridgeResult)) {
       Log.e(TAG, "Failed to configure video codec.");
@@ -1082,7 +1103,7 @@
         format.setInteger(MediaFormat.KEY_MAX_HEIGHT, Math.min(2160, maxSupportedHeight));
       }
 
-      maybeSetMaxInputSize(format);
+      maybeSetMaxVideoInputSize(format);
       mMediaCodec.configure(format, surface, crypto, flags);
       mFrameRateEstimator = new FrameRateEstimator();
       return true;
@@ -1126,7 +1147,7 @@
   // Use some heuristics to set KEY_MAX_INPUT_SIZE (the size of the input buffers).
   // Taken from ExoPlayer:
   // https://github.com/google/ExoPlayer/blob/8595c65678a181296cdf673eacb93d8135479340/library/src/main/java/com/google/android/exoplayer/MediaCodecVideoTrackRenderer.java
-  private void maybeSetMaxInputSize(MediaFormat format) {
+  private void maybeSetMaxVideoInputSize(MediaFormat format) {
     if (format.containsKey(android.media.MediaFormat.KEY_MAX_INPUT_SIZE)) {
       try {
         Log.i(
@@ -1135,7 +1156,7 @@
                 + format.getInteger(android.media.MediaFormat.KEY_MAX_INPUT_SIZE)
                 + '.');
       } catch (Exception e) {
-        Log.w(TAG, "MediaFormat.getInteger(KEY_MAX_INPUT_SIZE) failed with exception: ", e);
+        Log.e(TAG, "MediaFormat.getInteger(KEY_MAX_INPUT_SIZE) failed with exception: ", e);
       }
       // Already set. The source of the format may know better, so do nothing.
       return;
@@ -1177,18 +1198,18 @@
         return;
     }
     // Estimate the maximum input size assuming three channel 4:2:0 subsampled input frames.
-    int maxInputSize = (maxPixels * 3) / (2 * minCompressionRatio);
-    format.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, maxInputSize);
+    int maxVideoInputSize = (maxPixels * 3) / (2 * minCompressionRatio);
+    format.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, maxVideoInputSize);
     try {
       Log.i(
           TAG,
-          "KEY_MAX_INPUT_SIZE is "
+          "Set KEY_MAX_INPUT_SIZE to "
+              + maxVideoInputSize
+              + " (actual: "
               + format.getInteger(android.media.MediaFormat.KEY_MAX_INPUT_SIZE)
-              + " after setting it to "
-              + maxInputSize
-              + '.');
+              + ").");
     } catch (Exception e) {
-      Log.w(TAG, "MediaFormat.getInteger(KEY_MAX_INPUT_SIZE) failed with exception: ", e);
+      Log.e(TAG, "MediaFormat.getInteger(KEY_MAX_INPUT_SIZE) failed with exception: ", e);
     }
   }
 
diff --git a/starboard/android/apk/app/src/main/java/dev/cobalt/media/MediaCodecCapabilitiesLogger.java b/starboard/android/apk/app/src/main/java/dev/cobalt/media/MediaCodecCapabilitiesLogger.java
index f1c640d..8a165be 100644
--- a/starboard/android/apk/app/src/main/java/dev/cobalt/media/MediaCodecCapabilitiesLogger.java
+++ b/starboard/android/apk/app/src/main/java/dev/cobalt/media/MediaCodecCapabilitiesLogger.java
@@ -224,15 +224,20 @@
       if (info.isEncoder()) {
         continue;
       }
+      String isHardwareAccelerated = "unknown";
+      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+        isHardwareAccelerated = info.isHardwareAccelerated() ? "true" : "false";
+      }
       for (String supportedType : info.getSupportedTypes()) {
         String name = info.getName();
         decoderDumpString.append(
             String.format(
                 Locale.US,
-                "name: %s (%s, %s):",
+                "name: %s (%s, %s, Hardware accelerated: %s):",
                 name,
                 supportedType,
-                MediaCodecUtil.isCodecDenyListed(name) ? "denylisted" : "not denylisted"));
+                MediaCodecUtil.isCodecDenyListed(name) ? "denylisted" : "not denylisted",
+                isHardwareAccelerated));
         CodecCapabilities codecCapabilities = info.getCapabilitiesForType(supportedType);
         VideoCapabilities videoCapabilities = codecCapabilities.getVideoCapabilities();
         String resultName =
diff --git a/starboard/android/apk/app/src/main/java/dev/cobalt/media/MediaDrmBridge.java b/starboard/android/apk/app/src/main/java/dev/cobalt/media/MediaDrmBridge.java
index 190a160..56d1d17 100644
--- a/starboard/android/apk/app/src/main/java/dev/cobalt/media/MediaDrmBridge.java
+++ b/starboard/android/apk/app/src/main/java/dev/cobalt/media/MediaDrmBridge.java
@@ -38,6 +38,7 @@
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.UUID;
 
 /** A wrapper of the android MediaDrm class. */
@@ -460,7 +461,7 @@
         },
         null);
 
-    mMediaDrm.setPropertyString("privacyMode", "enable");
+    mMediaDrm.setPropertyString("privacyMode", "disable");
     mMediaDrm.setPropertyString("sessionSharing", "enable");
     if (keySystem.equals("com.youtube.widevine.l3")
         && mMediaDrm.getPropertyString("securityLevel") != "L3") {
@@ -772,7 +773,7 @@
         Log.i(TAG, "MediaDrm HDCP Level is HDCP_LEVEL_UNKNOWN.");
         break;
       default:
-        Log.i(TAG, String.format("Unknown MediaDrm HDCP level %d.", hdcpLevel));
+        Log.i(TAG, String.format(Locale.US, "Unknown MediaDrm HDCP level %d.", hdcpLevel));
         break;
     }
   }
diff --git a/starboard/android/apk/app/src/main/java/dev/cobalt/util/Log.java b/starboard/android/apk/app/src/main/java/dev/cobalt/util/Log.java
index cca7c02..5cbb101 100644
--- a/starboard/android/apk/app/src/main/java/dev/cobalt/util/Log.java
+++ b/starboard/android/apk/app/src/main/java/dev/cobalt/util/Log.java
@@ -90,15 +90,24 @@
   }
 
   public static int v(String tag, String messageTemplate, Object... args) {
-    return logWithMethod(logV, tag, messageTemplate, args);
+    if (android.util.Log.isLoggable(TAG, android.util.Log.VERBOSE)) {
+      return logWithMethod(logV, tag, messageTemplate, args);
+    }
+    return 0;
   }
 
   public static int d(String tag, String messageTemplate, Object... args) {
-    return logWithMethod(logD, tag, messageTemplate, args);
+    if (android.util.Log.isLoggable(TAG, android.util.Log.DEBUG)) {
+      return logWithMethod(logD, tag, messageTemplate, args);
+    }
+    return 0;
   }
 
   public static int i(String tag, String messageTemplate, Object... args) {
-    return logWithMethod(logI, tag, messageTemplate, args);
+    if (android.util.Log.isLoggable(TAG, android.util.Log.INFO)) {
+      return logWithMethod(logI, tag, messageTemplate, args);
+    }
+    return 0;
   }
 
   public static int w(String tag, String messageTemplate, Object... args) {
diff --git a/starboard/android/arm/cobalt/configuration.py b/starboard/android/arm/cobalt/configuration.py
new file mode 100644
index 0000000..86c7716
--- /dev/null
+++ b/starboard/android/arm/cobalt/configuration.py
@@ -0,0 +1,53 @@
+# Copyright 2023 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Starboard Android arm Cobalt configuration."""
+
+from starboard.android.shared.cobalt import configuration
+from starboard.tools.testing import test_filter
+
+# A map of failing or crashing tests per target
+_FILTERED_TESTS = {
+    'blackbox': [
+        'web_debugger',
+        'cancel_sync_loads_when_suspended',
+        'preload_font',
+        'preload_visibility',
+        'preload_launch_parameter',
+        'suspend_visibility',
+        'timer_hit_after_preload',
+        'timer_hit_in_preload',
+        'service_worker_add_to_cache_test',
+        'service_worker_cache_keys_test',
+        'service_worker_controller_activation_test',
+        'service_worker_get_registrations_test',
+        'service_worker_fetch_main_resource_test',
+        'service_worker_fetch_test',
+        'service_worker_message_test',
+        'service_worker_post_message_test',
+        'service_worker_test',
+        'service_worker_persist_test',
+        'deep_links',
+        'web_platform_tests',
+    ],
+}
+
+
+class CobaltAndroidArmConfiguration(configuration.CobaltAndroidConfiguration):
+  """Starboard Android Arm Cobalt configuration."""
+
+  def GetTestFilters(self):
+    filters = super().GetTestFilters()
+    for target, tests in _FILTERED_TESTS.items():
+      filters.extend(test_filter.TestFilter(target, test) for test in tests)
+    return filters
diff --git a/starboard/android/shared/BUILD.gn b/starboard/android/shared/BUILD.gn
index b07982a..45e7412 100644
--- a/starboard/android/shared/BUILD.gn
+++ b/starboard/android/shared/BUILD.gn
@@ -21,11 +21,14 @@
 # Configuration to extract GameActivity native files.
 ##########################################################
 
-game_activity_aar_file = "//starboard/android/apk/app/src/main/java/dev/cobalt/libraries/game_activity/games-activity-1.2.2.aar"
+game_activity_aar_file = "//starboard/android/apk/app/src/main/java/dev/cobalt/libraries/game_activity/games-activity-2.0.2.aar"
 
 game_activity_source_files = [
   "$target_gen_dir/game_activity/prefab/modules/game-activity/include/game-activity/GameActivity.cpp",
   "$target_gen_dir/game_activity/prefab/modules/game-activity/include/game-activity/GameActivity.h",
+  "$target_gen_dir/game_activity/prefab/modules/game-activity/include/game-activity/GameActivityEvents.cpp",
+  "$target_gen_dir/game_activity/prefab/modules/game-activity/include/game-activity/GameActivityEvents.h",
+  "$target_gen_dir/game_activity/prefab/modules/game-activity/include/game-activity/GameActivityLog.h",
   "$target_gen_dir/game_activity/prefab/modules/game-activity/include/game-text-input/gamecommon.h",
   "$target_gen_dir/game_activity/prefab/modules/game-activity/include/game-text-input/gametextinput.cpp",
   "$target_gen_dir/game_activity/prefab/modules/game-activity/include/game-text-input/gametextinput.h",
@@ -316,6 +319,8 @@
     "get_home_directory.cc",
     "graphics.cc",
     "graphics.h",
+    "h5vcc_config.cc",
+    "h5vcc_config.h",
     "input_events_generator.cc",
     "input_events_generator.h",
     "jni_env_ext.cc",
@@ -358,6 +363,8 @@
     "player_destroy.cc",
     "player_get_preferred_output_mode.cc",
     "player_set_bounds.cc",
+    "player_set_max_video_input_size.cc",
+    "player_set_max_video_input_size.h",
     "player_set_playback_rate.cc",
     "sanitizer_options.cc",
     "socket_get_interface_address.cc",
@@ -387,6 +394,8 @@
     "video_decoder.h",
     "video_frame_tracker.cc",
     "video_frame_tracker.h",
+    "video_max_video_input_size.cc",
+    "video_max_video_input_size.h",
     "video_render_algorithm.cc",
     "video_render_algorithm.h",
     "video_window.cc",
@@ -486,7 +495,7 @@
   configs += [ "//starboard/build/config:starboard_implementation" ]
 
   deps = [
-    "//starboard",
+    "//starboard:starboard_group",
     "//starboard/shared/starboard/player/filter/testing:test_util",
     "//testing/gmock",
     "//testing/gtest",
diff --git a/starboard/android/shared/application_android.cc b/starboard/android/shared/application_android.cc
index 189517e..8d56fa1 100644
--- a/starboard/android/shared/application_android.cc
+++ b/starboard/android/shared/application_android.cc
@@ -433,6 +433,9 @@
 
 bool ApplicationAndroid::SendAndroidMotionEvent(
     const GameActivityMotionEvent* event) {
+  SB_LOG(INFO) << "Received Motion Event from Android OS."
+               << " source:" << event->source;
+
   bool result = false;
 
   ScopedLock lock(input_mutex_);
@@ -454,6 +457,13 @@
 
 bool ApplicationAndroid::SendAndroidKeyEvent(
     const GameActivityKeyEvent* event) {
+  // Find the value reference on
+  // https://developer.android.com/reference/android/view/KeyEvent
+  SB_LOG(INFO) << "Received Key Event from Android OS. "
+               << "keyCode:" << event->keyCode
+               << ", modifiers:" << event->modifiers
+               << ", source:" << event->source;
+
   bool result = false;
 
   ScopedLock lock(input_mutex_);
diff --git a/starboard/android/shared/audio_track_audio_sink_type.cc b/starboard/android/shared/audio_track_audio_sink_type.cc
index 98810e7..f725ed1 100644
--- a/starboard/android/shared/audio_track_audio_sink_type.cc
+++ b/starboard/android/shared/audio_track_audio_sink_type.cc
@@ -216,8 +216,7 @@
     if (bridge_.GetAndResetHasAudioDeviceChanged(env)) {
       SB_LOG(INFO) << "Audio device changed, raising a capability changed "
                       "error to restart playback.";
-      ReportError(kSbPlayerErrorCapabilityChanged,
-                  "Audio device capability changed");
+      ReportError(true, "Audio device capability changed");
       break;
     }
 
@@ -321,11 +320,8 @@
         auto sync_time = start_time_ + accumulated_written_frames *
                                            kSbTimeSecond /
                                            sampling_frequency_hz_;
-        // Not necessary to handle error of WriteData(), even for
-        // kAudioTrackErrorDeadObject, as the audio has reached the end of
-        // stream.
-        // TODO: Ensure that the audio stream can still reach the end when an
-        //       error occurs.
+        // Not necessary to handle error of WriteData(), as the audio has
+        // reached the end of stream.
         WriteData(env, silence_buffer.data(), silence_frames_per_append,
                   sync_time);
       }
@@ -354,16 +350,14 @@
     SbTime now = SbTimeGetMonotonicNow();
 
     if (written_frames < 0) {
-      // Take all |frames_in_audio_track| as consumed since audio track could be
-      // dead.
-      consume_frames_func_(frames_in_audio_track, now, context_);
-
-      bool capabilities_changed =
-          written_frames == AudioTrackBridge::kAudioTrackErrorDeadObject;
-      ReportError(
-          capabilities_changed,
-          FormatString("Error while writing frames: %d", written_frames));
-      SB_LOG(INFO) << "Restarting playback.";
+      if (written_frames == AudioTrackBridge::kAudioTrackErrorDeadObject) {
+        // There might be an audio device change, try to recreate the player.
+        ReportError(true,
+                    "Failed to write data and received dead object error.");
+      } else {
+        ReportError(false, FormatString("Failed to write data and received %d.",
+                                        written_frames));
+      }
       break;
     } else if (written_frames > 0) {
       last_written_succeeded_at = now;
diff --git a/starboard/android/shared/audio_track_bridge.cc b/starboard/android/shared/audio_track_bridge.cc
index 629a96e..3415eeb 100644
--- a/starboard/android/shared/audio_track_bridge.cc
+++ b/starboard/android/shared/audio_track_bridge.cc
@@ -186,13 +186,10 @@
   SB_DCHECK(num_of_samples <= max_samples_per_write_);
 
   num_of_samples = std::min(num_of_samples, max_samples_per_write_);
-
-  // TODO: Test this code path
   env->SetFloatArrayRegion(static_cast<jfloatArray>(j_audio_data_), kNoOffset,
                            num_of_samples, samples);
-  int samples_written = env->CallIntMethodOrAbort(
-      j_audio_track_bridge_, "write", "([FI)I", j_audio_data_, num_of_samples);
-  return samples_written;
+  return env->CallIntMethodOrAbort(j_audio_track_bridge_, "write", "([FI)I",
+                                   j_audio_data_, num_of_samples);
 }
 
 int AudioTrackBridge::WriteSample(const uint16_t* samples,
@@ -204,8 +201,6 @@
   SB_DCHECK(num_of_samples <= max_samples_per_write_);
 
   num_of_samples = std::min(num_of_samples, max_samples_per_write_);
-
-  // TODO: Test this code path
   env->SetByteArrayRegion(static_cast<jbyteArray>(j_audio_data_), kNoOffset,
                           num_of_samples * sizeof(uint16_t),
                           reinterpret_cast<const jbyte*>(samples));
diff --git a/starboard/android/shared/audio_track_bridge.h b/starboard/android/shared/audio_track_bridge.h
index 1844151..b4303ae 100644
--- a/starboard/android/shared/audio_track_bridge.h
+++ b/starboard/android/shared/audio_track_bridge.h
@@ -61,15 +61,18 @@
   void Stop(JniEnvExt* env = JniEnvExt::Get());
   void PauseAndFlush(JniEnvExt* env = JniEnvExt::Get());
 
+  // Returns zero or the positive number of samples written, or a negative error
+  // code.
   int WriteSample(const float* samples,
                   int num_of_samples,
                   JniEnvExt* env = JniEnvExt::Get());
-  // Returns samples written.
   int WriteSample(const uint16_t* samples,
                   int num_of_samples,
                   SbTime sync_time,
                   JniEnvExt* env = JniEnvExt::Get());
   // This is used by passthrough, it treats samples as if they are in bytes.
+  // Returns zero or the positive number of samples written, or a negative error
+  // code.
   int WriteSample(const uint8_t* buffer,
                   int num_of_samples,
                   SbTime sync_time,
diff --git a/starboard/android/shared/h5vcc_config.cc b/starboard/android/shared/h5vcc_config.cc
new file mode 100644
index 0000000..059b417
--- /dev/null
+++ b/starboard/android/shared/h5vcc_config.cc
@@ -0,0 +1,50 @@
+// Copyright 2024 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/extension/h5vcc_config.h"
+#include "starboard/android/shared/h5vcc_config.h"
+#include "starboard/android/shared/jni_env_ext.h"
+#include "starboard/android/shared/jni_utils.h"
+#include "starboard/common/log.h"
+
+namespace starboard {
+namespace android {
+namespace shared {
+
+namespace {
+
+// Definitions of any functions included as components in the extension
+// are added here.
+
+void EnableBackgroundPlayback(bool value) {
+  JniEnvExt* env = JniEnvExt::Get();
+  JniEnvExt::Get()->CallStarboardVoidMethodOrAbort("enableBackgroundPlayback",
+                                                   "(Z)V", (jboolean)value);
+}
+
+const StarboardExtensionH5vccConfigApi kH5vccConfigApi = {
+    kStarboardExtensionH5vccConfigName,
+    1,  // API version that's implemented.
+    &EnableBackgroundPlayback,
+};
+
+}  // namespace
+
+const void* GetH5vccConfigApi() {
+  return &kH5vccConfigApi;
+}
+
+}  // namespace shared
+}  // namespace android
+}  // namespace starboard
diff --git a/starboard/android/shared/h5vcc_config.h b/starboard/android/shared/h5vcc_config.h
new file mode 100644
index 0000000..f2a501c
--- /dev/null
+++ b/starboard/android/shared/h5vcc_config.h
@@ -0,0 +1,28 @@
+// Copyright 2024 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef STARBOARD_ANDROID_SHARED_H5VCC_CONFIG_H_
+#define STARBOARD_ANDROID_SHARED_H5VCC_CONFIG_H_
+
+namespace starboard {
+namespace android {
+namespace shared {
+
+const void* GetH5vccConfigApi();
+
+}  // namespace shared
+}  // namespace android
+}  // namespace starboard
+
+#endif  // STARBOARD_ANDROID_SHARED_H5VCC_CONFIG_H_
diff --git a/starboard/android/shared/media_codec_bridge.cc b/starboard/android/shared/media_codec_bridge.cc
index 87bdf32..c126fc0 100644
--- a/starboard/android/shared/media_codec_bridge.cc
+++ b/starboard/android/shared/media_codec_bridge.cc
@@ -228,6 +228,7 @@
     int tunnel_mode_audio_session_id,
     bool force_big_endian_hdr_metadata,
     bool force_improved_support_check,
+    int max_video_input_size,
     std::string* error_message) {
   SB_DCHECK(error_message);
   SB_DCHECK(max_width.has_engaged() == max_height.has_engaged());
@@ -317,14 +318,14 @@
       "(JLjava/lang/String;Ljava/lang/String;IIIIILandroid/view/Surface;"
       "Landroid/media/MediaCrypto;"
       "Ldev/cobalt/media/MediaCodecBridge$ColorInfo;"
-      "I"
+      "II"
       "Ldev/cobalt/media/MediaCodecBridge$CreateMediaCodecBridgeResult;)"
       "V",
       reinterpret_cast<jlong>(native_media_codec_bridge.get()), j_mime.Get(),
       j_decoder_name.Get(), width_hint, height_hint, fps,
       max_width.value_or(-1), max_height.value_or(-1), j_surface,
       j_media_crypto, j_color_info.Get(), tunnel_mode_audio_session_id,
-      j_create_media_codec_bridge_result.Get());
+      max_video_input_size, j_create_media_codec_bridge_result.Get());
 
   jobject j_media_codec_bridge = env->CallObjectMethodOrAbort(
       j_create_media_codec_bridge_result.Get(), "mediaCodecBridge",
diff --git a/starboard/android/shared/media_codec_bridge.h b/starboard/android/shared/media_codec_bridge.h
index bf395d5..ad99b62 100644
--- a/starboard/android/shared/media_codec_bridge.h
+++ b/starboard/android/shared/media_codec_bridge.h
@@ -174,6 +174,7 @@
       int tunnel_mode_audio_session_id,
       bool force_big_endian_hdr_metadata,
       bool force_improved_support_check,
+      int max_video_input_size,
       std::string* error_message);
 
   ~MediaCodecBridge();
diff --git a/starboard/android/shared/media_decoder.cc b/starboard/android/shared/media_decoder.cc
index cf93733..49c9752 100644
--- a/starboard/android/shared/media_decoder.cc
+++ b/starboard/android/shared/media_decoder.cc
@@ -119,6 +119,7 @@
                            int tunnel_mode_audio_session_id,
                            bool force_big_endian_hdr_metadata,
                            bool force_improved_support_check,
+                           int max_video_input_size,
                            std::string* error_message)
     : media_type_(kSbMediaTypeVideo),
       host_(host),
@@ -137,7 +138,7 @@
       j_output_surface, j_media_crypto, color_metadata, require_secured_decoder,
       require_software_codec, tunnel_mode_audio_session_id,
       force_big_endian_hdr_metadata, force_improved_support_check,
-      error_message);
+      max_video_input_size, error_message);
   if (!media_codec_bridge_) {
     SB_LOG(ERROR) << "Failed to create video media codec bridge with error: "
                   << *error_message;
@@ -319,18 +320,18 @@
                                   &dequeue_output_results);
       }
 
-      if (!tunnel_mode_enabled_) {
-        // Output is only processed when tunnel mode is disabled.
-        if (!dequeue_output_results.empty()) {
-          auto& dequeue_output_result = dequeue_output_results.front();
-          if (dequeue_output_result.index < 0) {
-            host_->RefreshOutputFormat(media_codec_bridge_.get());
-          } else {
-            host_->ProcessOutputBuffer(media_codec_bridge_.get(),
-                                       dequeue_output_result);
-          }
-          dequeue_output_results.erase(dequeue_output_results.begin());
+      if (!dequeue_output_results.empty()) {
+        auto& dequeue_output_result = dequeue_output_results.front();
+        if (dequeue_output_result.index < 0) {
+          host_->RefreshOutputFormat(media_codec_bridge_.get());
+        } else {
+          SB_DCHECK(!tunnel_mode_enabled_);
+          host_->ProcessOutputBuffer(media_codec_bridge_.get(),
+                                     dequeue_output_result);
         }
+        dequeue_output_results.erase(dequeue_output_results.begin());
+      }
+      if (!tunnel_mode_enabled_) {
         host_->Tick(media_codec_bridge_.get());
       }
 
@@ -642,7 +643,6 @@
 }
 
 void MediaDecoder::OnMediaCodecFrameRendered(SbTime frame_timestamp) {
-  SB_DCHECK(tunnel_mode_enabled_);
   frame_rendered_cb_(frame_timestamp);
 }
 
diff --git a/starboard/android/shared/media_decoder.h b/starboard/android/shared/media_decoder.h
index 7c7a2eb..23838bd 100644
--- a/starboard/android/shared/media_decoder.h
+++ b/starboard/android/shared/media_decoder.h
@@ -98,6 +98,7 @@
                int tunnel_mode_audio_session_id,
                bool force_big_endian_hdr_metadata,
                bool force_improved_support_check,
+               int max_video_input_size,
                std::string* error_message);
   ~MediaDecoder();
 
diff --git a/starboard/android/shared/platform_configuration/BUILD.gn b/starboard/android/shared/platform_configuration/BUILD.gn
index 5240ff6..a37f130 100644
--- a/starboard/android/shared/platform_configuration/BUILD.gn
+++ b/starboard/android/shared/platform_configuration/BUILD.gn
@@ -70,7 +70,7 @@
     defines += [ "THREAD_SANITIZER" ]
   }
 
-  cflags_cc = [ "-std=c++14" ]
+  cflags_cc = [ "-std=c++17" ]
   cflags += [
     # libwebp uses the cpufeatures library to detect ARM NEON support
     "-I${android_ndk_path}/sources/android/cpufeatures",
diff --git a/starboard/android/shared/player_components_factory.cc b/starboard/android/shared/player_components_factory.cc
index 8646c6f..10fc27e 100644
--- a/starboard/android/shared/player_components_factory.cc
+++ b/starboard/android/shared/player_components_factory.cc
@@ -44,7 +44,11 @@
       return true;
     }
     DrmSystem* android_drm_system = static_cast<DrmSystem*>(drm_system);
-    return !android_drm_system->require_secured_decoder();
+    bool require_secure_decoder = android_drm_system->require_secured_decoder();
+    SB_LOG_IF(INFO, require_secure_decoder)
+        << "Output mode under decode-to-texture is not supported due to secure "
+           "decoder is required.";
+    return !require_secure_decoder;
   }
 
   return false;
diff --git a/starboard/android/shared/player_components_factory.h b/starboard/android/shared/player_components_factory.h
index 57d3b44..82aca7e 100644
--- a/starboard/android/shared/player_components_factory.h
+++ b/starboard/android/shared/player_components_factory.h
@@ -242,6 +242,13 @@
       return scoped_ptr<PlayerComponents>();
     }
 
+    // Set max_video_input_size with a positive value to overwrite
+    // MediaFormat.KEY_MAX_INPUT_SIZE. Use 0 as default value.
+    int max_video_input_size = creation_parameters.max_video_input_size();
+    SB_LOG_IF(INFO, max_video_input_size > 0)
+        << "The maximum size in bytes of a buffer of data is "
+        << max_video_input_size;
+
     scoped_ptr<::starboard::shared::starboard::player::filter::VideoRenderer>
         video_renderer;
     if (creation_parameters.video_codec() != kSbMediaVideoCodecNone) {
@@ -262,11 +269,10 @@
         SB_LOG_IF(INFO, !force_improved_support_check)
             << "Improved support check is disabled for queries under 4K.";
       }
-
-      scoped_ptr<VideoDecoder> video_decoder =
-          CreateVideoDecoder(creation_parameters, kTunnelModeAudioSessionId,
-                             kForceSecurePipelineUnderTunnelMode,
-                             force_improved_support_check, error_message);
+      scoped_ptr<VideoDecoder> video_decoder = CreateVideoDecoder(
+          creation_parameters, kTunnelModeAudioSessionId,
+          kForceSecurePipelineUnderTunnelMode, force_improved_support_check,
+          max_video_input_size, error_message);
       if (video_decoder) {
         using starboard::shared::starboard::player::filter::VideoRendererImpl;
 
@@ -448,15 +454,21 @@
       SB_DCHECK(video_render_algorithm);
       SB_DCHECK(video_renderer_sink);
       SB_DCHECK(error_message);
+      // Set max_video_input_size with a positive value to overwrite
+      // MediaFormat.KEY_MAX_INPUT_SIZE. Use 0 as default value.
+      int max_video_input_size = creation_parameters.max_video_input_size();
+      SB_LOG_IF(INFO, max_video_input_size > 0)
+          << "The maximum size in bytes of a buffer of data is "
+          << max_video_input_size;
 
       if (tunnel_mode_audio_session_id == -1) {
         force_secure_pipeline_under_tunnel_mode = false;
       }
 
-      scoped_ptr<VideoDecoder> video_decoder_impl =
-          CreateVideoDecoder(creation_parameters, tunnel_mode_audio_session_id,
-                             force_secure_pipeline_under_tunnel_mode,
-                             force_improved_support_check, error_message);
+      scoped_ptr<VideoDecoder> video_decoder_impl = CreateVideoDecoder(
+          creation_parameters, tunnel_mode_audio_session_id,
+          force_secure_pipeline_under_tunnel_mode, force_improved_support_check,
+          max_video_input_size, error_message);
       if (video_decoder_impl) {
         *video_render_algorithm = video_decoder_impl->GetRenderAlgorithm();
         *video_renderer_sink = video_decoder_impl->GetSink();
@@ -501,6 +513,7 @@
       int tunnel_mode_audio_session_id,
       bool force_secure_pipeline_under_tunnel_mode,
       bool force_improved_support_check,
+      int max_video_input_size,
       std::string* error_message) {
     bool force_big_endian_hdr_metadata = false;
     if (!creation_parameters.video_mime().empty()) {
@@ -522,7 +535,7 @@
         creation_parameters.max_video_capabilities(),
         tunnel_mode_audio_session_id, force_secure_pipeline_under_tunnel_mode,
         kForceResetSurfaceUnderTunnelMode, force_big_endian_hdr_metadata,
-        force_improved_support_check, error_message));
+        force_improved_support_check, max_video_input_size, error_message));
     if (creation_parameters.video_codec() == kSbMediaVideoCodecAv1 ||
         video_decoder->is_decoder_created()) {
       return video_decoder.Pass();
diff --git a/starboard/android/shared/player_create.cc b/starboard/android/shared/player_create.cc
index ebe6faa..912b705 100644
--- a/starboard/android/shared/player_create.cc
+++ b/starboard/android/shared/player_create.cc
@@ -16,6 +16,7 @@
 
 #include "starboard/player.h"
 
+#include "starboard/android/shared/video_max_video_input_size.h"
 #include "starboard/android/shared/video_window.h"
 #include "starboard/common/log.h"
 #include "starboard/common/media.h"
@@ -207,6 +208,8 @@
 
   starboard::scoped_ptr<PlayerWorker::Handler> handler(
       new FilterBasedPlayerWorkerHandler(creation_param, provider));
+  handler->SetMaxVideoInputSize(
+      starboard::android::shared::GetMaxVideoInputSizeForCurrentThread());
   SbPlayer player = SbPlayerPrivate::CreateInstance(
       audio_codec, video_codec, sample_deallocate_func, decoder_status_func,
       player_status_func, player_error_func, context, handler.Pass());
diff --git a/starboard/android/shared/player_get_preferred_output_mode.cc b/starboard/android/shared/player_get_preferred_output_mode.cc
index c7485e3..185f8e1 100644
--- a/starboard/android/shared/player_get_preferred_output_mode.cc
+++ b/starboard/android/shared/player_get_preferred_output_mode.cc
@@ -82,6 +82,9 @@
         is_sdr) {
       return kSbPlayerOutputModeDecodeToTexture;
     }
+    SB_LOG_IF(INFO, !is_sdr)
+        << "Returning kSbPlayerOutputModeInvalid as HDR videos are not "
+           "supported under decode-to-texture.";
     return kSbPlayerOutputModeInvalid;
   }
 
diff --git a/starboard/android/shared/player_set_max_video_input_size.cc b/starboard/android/shared/player_set_max_video_input_size.cc
new file mode 100644
index 0000000..43c8ede
--- /dev/null
+++ b/starboard/android/shared/player_set_max_video_input_size.cc
@@ -0,0 +1,49 @@
+// Copyright 2024 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/android/shared/player_set_max_video_input_size.h"
+
+#include "starboard/android/shared/video_max_video_input_size.h"
+#include "starboard/extension/player_set_max_video_input_size.h"
+
+namespace starboard {
+namespace android {
+namespace shared {
+
+namespace {
+
+// Definitions of any functions included as components in the extension
+// are added here.
+
+void SetMaxVideoInputSizeForCurrentThread(int max_video_input_size) {
+  starboard::android::shared::SetMaxVideoInputSizeForCurrentThread(
+      max_video_input_size);
+}
+
+const StarboardExtensionPlayerSetMaxVideoInputSizeApi
+    kPlayerSetMaxVideoInputSizeApi = {
+        kStarboardExtensionPlayerSetMaxVideoInputSizeName,
+        1,
+        &SetMaxVideoInputSizeForCurrentThread,
+};
+
+}  // namespace
+
+const void* GetPlayerSetMaxVideoInputSizeApi() {
+  return &kPlayerSetMaxVideoInputSizeApi;
+}
+
+}  // namespace shared
+}  // namespace android
+}  // namespace starboard
diff --git a/starboard/android/shared/player_set_max_video_input_size.h b/starboard/android/shared/player_set_max_video_input_size.h
new file mode 100644
index 0000000..4f6c782
--- /dev/null
+++ b/starboard/android/shared/player_set_max_video_input_size.h
@@ -0,0 +1,28 @@
+// Copyright 2024 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef STARBOARD_ANDROID_SHARED_PLAYER_SET_MAX_VIDEO_INPUT_SIZE_H_
+#define STARBOARD_ANDROID_SHARED_PLAYER_SET_MAX_VIDEO_INPUT_SIZE_H_
+
+namespace starboard {
+namespace android {
+namespace shared {
+
+const void* GetPlayerSetMaxVideoInputSizeApi();
+
+}  // namespace shared
+}  // namespace android
+}  // namespace starboard
+
+#endif  // STARBOARD_ANDROID_SHARED_PLAYER_SET_MAX_VIDEO_INPUT_SIZE_H_
diff --git a/starboard/android/shared/system_get_extensions.cc b/starboard/android/shared/system_get_extensions.cc
index 0fcd774..b7f8958 100644
--- a/starboard/android/shared/system_get_extensions.cc
+++ b/starboard/android/shared/system_get_extensions.cc
@@ -17,8 +17,10 @@
 #include "starboard/android/shared/android_media_session_client.h"
 #include "starboard/android/shared/configuration.h"
 #include "starboard/android/shared/graphics.h"
+#include "starboard/android/shared/h5vcc_config.h"
 #include "starboard/android/shared/platform_info.h"
 #include "starboard/android/shared/platform_service.h"
+#include "starboard/android/shared/player_set_max_video_input_size.h"
 #include "starboard/common/log.h"
 #include "starboard/common/string.h"
 #if SB_IS(EVERGREEN_COMPATIBLE)
@@ -30,9 +32,11 @@
 #include "starboard/extension/configuration.h"
 #include "starboard/extension/crash_handler.h"
 #include "starboard/extension/graphics.h"
+#include "starboard/extension/h5vcc_config.h"
 #include "starboard/extension/media_session.h"
 #include "starboard/extension/platform_info.h"
 #include "starboard/extension/platform_service.h"
+#include "starboard/extension/player_set_max_video_input_size.h"
 
 const void* SbSystemGetExtension(const char* name) {
 #if SB_IS(EVERGREEN_COMPATIBLE)
@@ -68,5 +72,11 @@
   if (strcmp(name, kCobaltExtensionPlatformInfoName) == 0) {
     return starboard::android::shared::GetPlatformInfoApi();
   }
+  if (strcmp(name, kStarboardExtensionPlayerSetMaxVideoInputSizeName) == 0) {
+    return starboard::android::shared::GetPlayerSetMaxVideoInputSizeApi();
+  }
+  if (strcmp(name, kStarboardExtensionH5vccConfigName) == 0) {
+    return starboard::android::shared::GetH5vccConfigApi();
+  }
   return NULL;
 }
diff --git a/starboard/android/shared/video_decoder.cc b/starboard/android/shared/video_decoder.cc
index 44e899b..b3fe2bb 100644
--- a/starboard/android/shared/video_decoder.cc
+++ b/starboard/android/shared/video_decoder.cc
@@ -357,6 +357,7 @@
                            bool force_reset_surface_under_tunnel_mode,
                            bool force_big_endian_hdr_metadata,
                            bool force_improved_support_check,
+                           int max_video_input_size,
                            std::string* error_message)
     : video_codec_(video_stream_info.codec),
       drm_system_(static_cast<DrmSystem*>(drm_system)),
@@ -365,8 +366,11 @@
           decode_target_graphics_context_provider),
       max_video_capabilities_(max_video_capabilities),
       tunnel_mode_audio_session_id_(tunnel_mode_audio_session_id),
+      max_video_input_size_(max_video_input_size),
       force_reset_surface_under_tunnel_mode_(
           force_reset_surface_under_tunnel_mode),
+      is_video_frame_tracker_enabled_(IsFrameRenderedCallbackEnabled() ||
+                                      tunnel_mode_audio_session_id != -1),
       has_new_texture_available_(false),
       surface_condition_variable_(surface_destroy_mutex_),
       require_software_codec_(IsSoftwareDecodeRequired(max_video_capabilities)),
@@ -375,9 +379,6 @@
       number_of_preroll_frames_(kInitialPrerollFrameCount) {
   SB_DCHECK(error_message);
 
-  if (tunnel_mode_audio_session_id != -1) {
-    video_frame_tracker_.reset(new VideoFrameTracker(kMaxPendingWorkSize * 2));
-  }
   if (force_secure_pipeline_under_tunnel_mode) {
     SB_DCHECK(tunnel_mode_audio_session_id != -1);
     SB_DCHECK(!drm_system_);
@@ -387,6 +388,10 @@
     drm_system_ = drm_system_to_enforce_tunnel_mode_.get();
   }
 
+  if (is_video_frame_tracker_enabled_) {
+    video_frame_tracker_.reset(new VideoFrameTracker(kMaxPendingWorkSize * 2));
+  }
+
   if (require_software_codec_) {
     SB_DCHECK(output_mode_ == kSbPlayerOutputModeDecodeToTexture);
   }
@@ -428,7 +433,8 @@
 VideoDecoder::GetRenderAlgorithm() {
   if (tunnel_mode_audio_session_id_ == -1) {
     return scoped_ptr<VideoRenderAlgorithm>(
-        new android::shared::VideoRenderAlgorithm(this));
+        new android::shared::VideoRenderAlgorithm(this,
+                                                  video_frame_tracker_.get()));
   }
   return scoped_ptr<VideoRenderAlgorithm>(
       new VideoRenderAlgorithmTunneled(video_frame_tracker_.get()));
@@ -711,9 +717,9 @@
       video_stream_info.frame_height, max_width, max_height, video_fps_,
       j_output_surface, drm_system_,
       color_metadata_ ? &*color_metadata_ : nullptr, require_software_codec_,
-      std::bind(&VideoDecoder::OnTunnelModeFrameRendered, this, _1),
+      std::bind(&VideoDecoder::OnFrameRendered, this, _1),
       tunnel_mode_audio_session_id_, force_big_endian_hdr_metadata_,
-      force_improved_support_check_, error_message));
+      force_improved_support_check_, max_video_input_size_, error_message));
   if (media_decoder_->is_valid()) {
     if (error_cb_) {
       media_decoder_->Initialize(
@@ -804,6 +810,14 @@
     SB_LOG(INFO) << "Trying to write input buffer when media_decoder_ is null.";
     return;
   }
+
+  if (is_video_frame_tracker_enabled_) {
+    SB_DCHECK(video_frame_tracker_);
+    for (const auto& input_buffer : input_buffers) {
+      video_frame_tracker_->OnInputBuffer(input_buffer->timestamp());
+    }
+  }
+
   media_decoder_->WriteInputBuffers(input_buffers);
   if (media_decoder_->GetNumberOfPendingTasks() < kMaxPendingWorkSize) {
     decoder_status_cb_(kNeedMoreInput, NULL);
@@ -818,7 +832,6 @@
   if (tunnel_mode_audio_session_id_ != -1) {
     SbTime max_timestamp = input_buffers[0]->timestamp();
     for (const auto& input_buffer : input_buffers) {
-      video_frame_tracker_->OnInputBuffer(input_buffer->timestamp());
       max_timestamp = std::max(max_timestamp, input_buffer->timestamp());
     }
 
@@ -1148,10 +1161,19 @@
   has_new_texture_available_.store(true);
 }
 
-void VideoDecoder::OnTunnelModeFrameRendered(SbTime frame_timestamp) {
-  SB_DCHECK(tunnel_mode_audio_session_id_ != -1);
+bool VideoDecoder::IsFrameRenderedCallbackEnabled() {
+  return JniEnvExt::Get()->CallStaticBooleanMethodOrAbort(
+             "dev/cobalt/media/MediaCodecBridge",
+             "isFrameRenderedCallbackEnabled", "()Z") == JNI_TRUE;
+}
 
-  tunnel_mode_frame_rendered_.store(true);
+void VideoDecoder::OnFrameRendered(SbTime frame_timestamp) {
+  SB_DCHECK(is_video_frame_tracker_enabled_);
+  SB_DCHECK(video_frame_tracker_);
+
+  if (tunnel_mode_audio_session_id_ != -1) {
+    tunnel_mode_frame_rendered_.store(true);
+  }
   video_frame_tracker_->OnFrameRendered(frame_timestamp);
 }
 
diff --git a/starboard/android/shared/video_decoder.h b/starboard/android/shared/video_decoder.h
index 232db16..c5fde74 100644
--- a/starboard/android/shared/video_decoder.h
+++ b/starboard/android/shared/video_decoder.h
@@ -71,6 +71,7 @@
                bool force_reset_surface_under_tunnel_mode,
                bool force_big_endian_hdr_metadata,
                bool force_improved_support_check,
+               int max_input_size,
                std::string* error_message);
   ~VideoDecoder() override;
 
@@ -116,7 +117,8 @@
   void OnFlushing() override;
 
   void TryToSignalPrerollForTunnelMode();
-  void OnTunnelModeFrameRendered(SbTime frame_timestamp);
+  bool IsFrameRenderedCallbackEnabled();
+  void OnFrameRendered(SbTime frame_timestamp);
   void OnTunnelModePrerollTimeout();
   void OnTunnelModeCheckForNeedMoreInput();
 
@@ -151,6 +153,9 @@
 
   const int tunnel_mode_audio_session_id_ = -1;
 
+  // Set the maximum size in bytes of an input buffer for video.
+  const int max_video_input_size_;
+
   // Force resetting the video surface after tunnel mode playback, which
   // prevents video distortion on some devices.
   const bool force_reset_surface_under_tunnel_mode_;
@@ -158,7 +163,10 @@
   // we create a dummy drm system to force the video playing in secure pipeline
   // to enable tunnel mode.
   scoped_ptr<DrmSystem> drm_system_to_enforce_tunnel_mode_;
+
+  const bool is_video_frame_tracker_enabled_;
   scoped_ptr<VideoFrameTracker> video_frame_tracker_;
+
   // Preroll in tunnel mode is handled in this class instead of in the renderer.
   atomic_bool tunnel_mode_prerolling_{true};
   atomic_bool tunnel_mode_frame_rendered_;
diff --git a/starboard/android/shared/video_max_video_input_size.cc b/starboard/android/shared/video_max_video_input_size.cc
new file mode 100644
index 0000000..0c73155
--- /dev/null
+++ b/starboard/android/shared/video_max_video_input_size.cc
@@ -0,0 +1,53 @@
+// Copyright 2024 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/android/shared/video_max_video_input_size.h"
+
+#include "starboard/common/log.h"
+#include "starboard/once.h"
+#include "starboard/thread.h"
+
+namespace starboard {
+namespace android {
+namespace shared {
+
+SbOnceControl s_once_flag = SB_ONCE_INITIALIZER;
+SbThreadLocalKey s_thread_local_key = kSbThreadLocalKeyInvalid;
+
+void InitThreadLocalKey() {
+  s_thread_local_key = SbThreadCreateLocalKey(NULL);
+  SB_DCHECK(SbThreadIsValidLocalKey(s_thread_local_key));
+}
+
+void EnsureThreadLocalKeyInited() {
+  SbOnce(&s_once_flag, InitThreadLocalKey);
+  SB_DCHECK(SbThreadIsValidLocalKey(s_thread_local_key));
+}
+
+int GetMaxVideoInputSizeForCurrentThread() {
+  EnsureThreadLocalKeyInited();
+  // If the key is not valid or there is no value associated
+  // with the key, it returns 0.
+  return reinterpret_cast<uintptr_t>(SbThreadGetLocalValue(s_thread_local_key));
+}
+
+void SetMaxVideoInputSizeForCurrentThread(int max_video_input_size) {
+  EnsureThreadLocalKeyInited();
+  SbThreadSetLocalValue(s_thread_local_key,
+                        reinterpret_cast<void*>(max_video_input_size));
+}
+
+}  // namespace shared
+}  // namespace android
+}  // namespace starboard
diff --git a/starboard/android/shared/video_max_video_input_size.h b/starboard/android/shared/video_max_video_input_size.h
new file mode 100644
index 0000000..b011ad1
--- /dev/null
+++ b/starboard/android/shared/video_max_video_input_size.h
@@ -0,0 +1,38 @@
+// Copyright 2024 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef STARBOARD_ANDROID_SHARED_VIDEO_MAX_VIDEO_INPUT_SIZE_H_
+#define STARBOARD_ANDROID_SHARED_VIDEO_MAX_VIDEO_INPUT_SIZE_H_
+
+namespace starboard {
+namespace android {
+namespace shared {
+
+// Get max_video_input_size setting via SetMaxVideoInputSizeForCurrentThread(),
+// it returns 0 if s_thread_local_key is invalid.
+int GetMaxVideoInputSizeForCurrentThread();
+
+// 1. This is utilized to establish the maximum video input size
+//    for any subsequently created SbPlayer on the current calling thread.
+// 2. The maximum video input dimensions serve as a suggestion; the
+//    implementation is not obligated to adhere to it, and there is no
+//    feedback provided.
+// 3. Set it to 0 disable the setting.
+void SetMaxVideoInputSizeForCurrentThread(int max_video_input_size);
+
+}  // namespace shared
+}  // namespace android
+}  // namespace starboard
+
+#endif  // STARBOARD_ANDROID_SHARED_VIDEO_MAX_VIDEO_INPUT_SIZE_H_
diff --git a/starboard/android/shared/video_render_algorithm.cc b/starboard/android/shared/video_render_algorithm.cc
index 5edf96f..dc22c35 100644
--- a/starboard/android/shared/video_render_algorithm.cc
+++ b/starboard/android/shared/video_render_algorithm.cc
@@ -37,8 +37,9 @@
 
 }  // namespace
 
-VideoRenderAlgorithm::VideoRenderAlgorithm(VideoDecoder* video_decoder)
-    : video_decoder_(video_decoder) {
+VideoRenderAlgorithm::VideoRenderAlgorithm(VideoDecoder* video_decoder,
+                                           VideoFrameTracker* frame_tracker)
+    : video_decoder_(video_decoder), frame_tracker_(frame_tracker) {
   SB_DCHECK(video_decoder_);
   video_decoder_->SetPlaybackRate(playback_rate_);
 }
@@ -116,6 +117,19 @@
   }
 }
 
+void VideoRenderAlgorithm::Seek(SbTime seek_to_time) {
+  if (frame_tracker_) {
+    frame_tracker_->Seek(seek_to_time);
+  }
+}
+
+int VideoRenderAlgorithm::GetDroppedFrames() {
+  if (frame_tracker_) {
+    return frame_tracker_->UpdateAndGetDroppedFrames();
+  }
+  return dropped_frames_;
+}
+
 VideoRenderAlgorithm::VideoFrameReleaseTimeHelper::
     VideoFrameReleaseTimeHelper() {
   auto* env = JniEnvExt::Get();
diff --git a/starboard/android/shared/video_render_algorithm.h b/starboard/android/shared/video_render_algorithm.h
index 132e871..67f4868 100644
--- a/starboard/android/shared/video_render_algorithm.h
+++ b/starboard/android/shared/video_render_algorithm.h
@@ -28,13 +28,15 @@
 class VideoRenderAlgorithm : public ::starboard::shared::starboard::player::
                                  filter::VideoRenderAlgorithm {
  public:
-  explicit VideoRenderAlgorithm(VideoDecoder* video_decoder);
+  VideoRenderAlgorithm(VideoDecoder* video_decoder,
+                       VideoFrameTracker* frame_tracker);
 
   void Render(MediaTimeProvider* media_time_provider,
               std::list<scoped_refptr<VideoFrame>>* frames,
               VideoRendererSink::DrawFrameCB draw_frame_cb) override;
-  void Seek(SbTime seek_to_time) override {}
-  int GetDroppedFrames() override { return dropped_frames_; }
+
+  void Seek(SbTime seek_to_time) override;
+  int GetDroppedFrames() override;
 
  private:
   class VideoFrameReleaseTimeHelper {
@@ -49,6 +51,7 @@
   };
 
   VideoDecoder* video_decoder_ = nullptr;
+  VideoFrameTracker* frame_tracker_;
   double playback_rate_ = 1.0;
   VideoFrameReleaseTimeHelper video_frame_release_time_helper_;
   int dropped_frames_ = 0;
diff --git a/starboard/benchmark/BUILD.gn b/starboard/benchmark/BUILD.gn
index 7fd1215..4cba863 100644
--- a/starboard/benchmark/BUILD.gn
+++ b/starboard/benchmark/BUILD.gn
@@ -22,7 +22,7 @@
   ]
 
   public_deps = [
-    "//starboard",
+    "//starboard:starboard_group",
     "//third_party/google_benchmark",
   ]
   deps = cobalt_platform_dependencies
diff --git a/starboard/build/application_configuration.py b/starboard/build/application_configuration.py
index 947ff90..7c9fabd 100644
--- a/starboard/build/application_configuration.py
+++ b/starboard/build/application_configuration.py
@@ -71,3 +71,11 @@
       A list of strings of test target names.
     """
     return []
+
+  def GetTestBlackBoxTargets(self):
+    """Gets all tests to be run in black box test run.
+
+    Returns:
+      A list of strings of black box test target names.
+    """
+    return []
diff --git a/starboard/build/config/BUILD.gn b/starboard/build/config/BUILD.gn
index 6a0290a..5fd66dc 100644
--- a/starboard/build/config/BUILD.gn
+++ b/starboard/build/config/BUILD.gn
@@ -183,6 +183,9 @@
 config("starboard_implementation") {
   # This allows the benchmarks to include internal only header files.
   defines = [ "STARBOARD_IMPLEMENTATION" ]
+  if (current_cpu == "arm64" || (current_cpu == "arm" && arm_use_neon)) {
+    defines += [ "USE_NEON" ]
+  }
 }
 
 config("speed") {
diff --git a/starboard/build/config/BUILDCONFIG.gn b/starboard/build/config/BUILDCONFIG.gn
index 315e402..7f809bc 100644
--- a/starboard/build/config/BUILDCONFIG.gn
+++ b/starboard/build/config/BUILDCONFIG.gn
@@ -333,8 +333,99 @@
   }
 }
 
+template("evergreen_loader") {
+  # Add additional evergreen_loader target for every native target.
+  original_target_name = invoker.original_target_name
+  shared_data_deps = invoker.data_deps
+  shared_data_deps += [ "//third_party/icu:icudata" ]
+  shared_data_deps += [
+    ":copy_loader_app_lib${original_target_name}",
+    "//starboard/loader_app:copy_loader_app_content",
+  ]
+  if (cobalt_font_package == "empty") {
+    shared_data_deps += [ "//cobalt/content/fonts:copy_font_data" ]
+  } else {
+    shared_data_deps += [
+      "//cobalt/content/fonts:copy_fonts",
+      "//cobalt/content/fonts:fonts_xml",
+    ]
+  }
+  shared_library(target_name) {
+    forward_variables_from(invoker, [ "testonly" ])
+    if (has_pedantic_warnings) {
+      configs += [ "//starboard/build/config:pedantic_warnings" ]
+    }
+
+    configs += [ "//$starboard_path/platform_configuration" ]
+    if (!has_pedantic_warnings) {
+      configs += [ "//starboard/build/config:no_pedantic_warnings" ]
+    }
+
+    sources = [ "//starboard/elf_loader/sandbox.cc" ]
+    configs += [ "//starboard/elf_loader:elf_loader_config" ]
+
+    deps = [
+      ":copy_loader_app_lib${original_target_name}",
+      "//cobalt/content/fonts:copy_font_data",
+      "//starboard:starboard_group",
+      "//starboard/elf_loader:constants",
+      "//starboard/elf_loader:elf_loader",
+      "//starboard/elf_loader:evergreen_info",
+      "//starboard/elf_loader:sabi_string",
+      "//starboard/loader_app:copy_crashpad_handler_named_as_so",
+      "//starboard/loader_app:copy_loader_app_content",
+    ]
+
+    if (!sb_is_evergreen_compatible) {
+      deps += [ "//third_party/crashpad/wrapper:wrapper_stub" ]
+    }
+  }
+  if (separate_install_targets_for_bundling) {
+    import("//starboard/build/config/bundle_content.gni")
+    bundle_content(
+        "copy_loader_app_lib${original_target_name}_bundle_content") {
+      forward_variables_from(invoker, [ "testonly" ])
+
+      bundle_name = "${original_target_name}_evergreen_loader"
+      bundle_deps = shared_data_deps
+    }
+  }
+  copy("copy_loader_app_lib${original_target_name}") {
+    install_content = true
+    if (target_cpu == "arm" && arm_float_abi == "softfp") {
+      sources = [ "$root_out_dir/../evergreen-$target_cpu-${arm_float_abi}_$build_type/lib${original_target_name}.so" ]
+    } else if (target_cpu == "arm64") {
+      sources = [ "$root_out_dir/../evergreen-$target_cpu_$build_type/install/lib/libcobalt.so" ]
+    }
+    outputs = [ "$sb_static_contents_output_data_dir/app/cobalt/lib/lib${original_target_name}.so" ]
+  }
+  install_target(original_target_name + "_evergreen_loader_install") {
+    forward_variables_from(invoker, [ "testonly" ])
+    installable_target_name = original_target_name + "_evergreen_loader"
+    type = "shared_library"
+    deps = []
+    if (defined(invoker.deps)) {
+      deps += invoker.deps
+    }
+    foreach(dep, shared_data_deps) {
+      deps += [ "${dep}_install_content" ]
+    }
+    if (separate_install_targets_for_bundling) {
+      deps += [ ":copy_loader_app_lib${original_target_name}_bundle_content" ]
+    }
+  }
+}
+
 template("executable") {
-  not_needed(invoker, [ "build_loader" ])
+  not_needed(invoker,
+             [
+               "build_loader",
+
+               # TODO(b/305091479): Investigate when this variable is unneeded
+               # so that we can refactor this to avoid the not_needed
+               # declaration.
+               "shared_library_target_name",
+             ])
 
   target_with_platform_configs(target_name) {
     target_type = "executable"
@@ -364,7 +455,16 @@
     }
 
     install_target(target_name + "_install") {
-      forward_variables_from(invoker, [ "testonly" ])
+      # "shared_library_target_name" is used when this executable install_target
+      # is invoked from within a shared_library target that is building a loader
+      # In this case, it allows the install_target to determine the inputs/deps
+      # for the corresponding shared_library install_target.
+      forward_variables_from(invoker,
+                             [
+                               "testonly",
+                               "shared_library_target_name",
+                             ])
+
       installable_target_name = executable_target_name
       installable_target_dep = ":$executable_target_name"
       not_needed([ "installable_target_dep" ])
@@ -422,9 +522,17 @@
     if (current_toolchain == starboard_toolchain) {
       executable("${actual_target_name}_loader") {
         output_name = "${actual_target_name}_loader"
-        forward_variables_from(invoker, [ "testonly" ])
+        forward_variables_from(invoker,
+                               [
+                                 "testonly",
+                                 "data_deps",
+                               ])
         sources = [ "//$starboard_path/starboard_loader.cc" ]
 
+        # Forwards the "shared_library_target_name" to allow this loader install
+        # target to depend the corresponding shared_library install_target outputs.
+        shared_library_target_name = actual_target_name
+
         if (defined(extra_platform_loader_sources)) {
           sources += extra_platform_loader_sources
         }
@@ -449,10 +557,10 @@
 
         deps = [
           ":$original_target_name($cobalt_toolchain)",
-          "//starboard:starboard_platform_group($starboard_toolchain)",
+          "//starboard($starboard_toolchain)",
         ]
         if (!separate_install_targets_for_bundling) {
-          deps += [ "//starboard:starboard_platform_group_install($starboard_toolchain)" ]
+          deps += [ "//starboard:starboard_install($starboard_toolchain)" ]
         }
       }
       if (!is_host_win) {
@@ -489,6 +597,13 @@
       }
     }
 
+    if (sb_is_evergreen_compatible && sb_evergreen_compatible_package &&
+        target_name != "loader_app") {
+      evergreen_loader(original_target_name + "_evergreen_loader") {
+        forward_variables_from(invoker, "*")
+      }
+    }
+
     install_target(target_name + "_install") {
       forward_variables_from(invoker, [ "testonly" ])
       installable_target_name = shared_library_target_name
diff --git a/starboard/build/config/base_configuration.gni b/starboard/build/config/base_configuration.gni
index 6c9d354..9284dc5 100644
--- a/starboard/build/config/base_configuration.gni
+++ b/starboard/build/config/base_configuration.gni
@@ -170,6 +170,11 @@
 
   # Enable WASM and install WebAssembly global.
   v8_enable_webassembly = false
+
+  # Set this to true if the modular toolchain linker doesn't strip
+  # all unused symbols and nplb fails to link.
+  # TODO: b/297808555 Remove this flag after nplb is fixed
+  sb_has_unused_symbol_issue = false
 }
 
 if (current_toolchain == starboard_toolchain &&
diff --git a/starboard/build/config/mac/BUILD.gn b/starboard/build/config/mac/BUILD.gn
index c968be7..c69eaf2 100644
--- a/starboard/build/config/mac/BUILD.gn
+++ b/starboard/build/config/mac/BUILD.gn
@@ -43,8 +43,8 @@
 
 config("common") {
   arflags = [ "-no_warning_for_no_symbols" ]
-  cflags_cc = [ "-std=gnu++14" ]
-  cflags_objcc = [ "-std=gnu++14" ]
+  cflags_cc = [ "-std=gnu++17" ]
+  cflags_objcc = [ "-std=gnu++17" ]
   cflags = [ "-fno-common" ]
   asmflags = [ "-fno-common" ]
   ldflags = [ "-fno-common" ]
diff --git a/starboard/build/config/starboard_target_type.gni b/starboard/build/config/starboard_target_type.gni
index c3c5916..5551828 100644
--- a/starboard/build/config/starboard_target_type.gni
+++ b/starboard/build/config/starboard_target_type.gni
@@ -12,8 +12,10 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import("//starboard/build/config/os_definitions.gni")
 declare_args() {
   starboard_target_type = ""
+  starboard_shared_library_extension = "so.${sb_api_version}"
 }
 
 if (starboard_target_type == "") {
@@ -37,6 +39,9 @@
     }
     if (target_type == "shared_library") {
       build_loader = false
+      if (!is_host_win) {
+        output_extension = starboard_shared_library_extension
+      }
     }
     public_deps = [
       "//starboard/client_porting/cwrappers",
diff --git a/starboard/build/config/win/BUILD.gn b/starboard/build/config/win/BUILD.gn
index b69e93c..847ddfd 100644
--- a/starboard/build/config/win/BUILD.gn
+++ b/starboard/build/config/win/BUILD.gn
@@ -47,7 +47,7 @@
   ]
   cflags += [
     "/EHsc",
-    "/std:c++14",
+    "/std:c++17",
   ]
 
   # msvs_debug/_devel/etc
diff --git a/starboard/build/doc/migrating_gyp_to_gn.md b/starboard/build/doc/migrating_gyp_to_gn.md
index 9f80b40..506ced4 100644
--- a/starboard/build/doc/migrating_gyp_to_gn.md
+++ b/starboard/build/doc/migrating_gyp_to_gn.md
@@ -201,7 +201,7 @@
 ### Validating a Target
 
 If you're migrating a single target, it's simple to check: just configure the
-build using the the necessary arguments then build that target with `ninja`,
+build using the necessary arguments then build that target with `ninja`,
 i.e.:
 
 ```
@@ -263,8 +263,8 @@
 process for converting the stub platform's GN files to GN files that will be
 able to be built for your platform.
 
-[cobalt_porting_guide]: https://cobalt.dev/starboard/porting.html
-[dev_setup_linux]: https://cobalt.dev/development/setup-linux.html
+[cobalt_porting_guide]: https://developers.google.com/youtube/cobalt/docs/starboard/porting
+[dev_setup_linux]: https://developers.google.com/youtube/cobalt/docs/development/setup-linux
 [gn_check_tool]: https://cobalt.googlesource.com/third_party/gn/+/refs/heads/main/docs/reference.md#cmd_check
 [gn_doc_home]: https://cobalt.googlesource.com/third_party/gn/+/refs/heads/main/docs
 [gn_format_tool]: https://cobalt.googlesource.com/third_party/gn/+/refs/heads/main/docs/reference.md#cmd_format
diff --git a/starboard/build/doc/migration_changes.md b/starboard/build/doc/migration_changes.md
index c63a3bf..c58729a 100644
--- a/starboard/build/doc/migration_changes.md
+++ b/starboard/build/doc/migration_changes.md
@@ -42,7 +42,7 @@
 ## Notes:
 
 *   *Starboard Implementation:* If your platform defined
-    `STARBOARD_IMPLENTATION` in its implementation, you would now add the above
+    `STARBOARD_IMPLEMENTATION` in its implementation, you would now add the above
     config with `configs +=
     ["//starboard/build/config:starboard_implementation"]`.
 
diff --git a/starboard/build/install/install_target.gni b/starboard/build/install/install_target.gni
index 62f83e0..530d585 100644
--- a/starboard/build/install/install_target.gni
+++ b/starboard/build/install/install_target.gni
@@ -13,8 +13,11 @@
 # limitations under the License.
 
 import("//starboard/build/config/install.gni")
+import("//starboard/build/config/starboard_target_type.gni")
 
 template("install_target") {
+  not_needed(invoker, [ "shared_library_target_name" ])
+
   installable_target_name = invoker.installable_target_name
   installable_target_dep = invoker.installable_target_dep
 
@@ -23,7 +26,13 @@
     source_name = installable_target_name
   } else if (invoker.type == "shared_library") {
     install_subdir = "lib"
-    source_name = "lib${installable_target_name}.so"
+    if (installable_target_name == "starboard" ||
+        installable_target_name == "cast_starboard_api") {
+      source_name =
+          "lib${installable_target_name}.${starboard_shared_library_extension}"
+    } else {
+      source_name = "lib${installable_target_name}.so"
+    }
   } else {
     assert(false, "You can only install an executable or shared library.")
   }
diff --git a/starboard/build/platform_configuration.py b/starboard/build/platform_configuration.py
index af3fa2c..408f094 100644
--- a/starboard/build/platform_configuration.py
+++ b/starboard/build/platform_configuration.py
@@ -13,7 +13,8 @@
 # limitations under the License.
 """Base platform build configuration."""
 
-import imp  # pylint: disable=deprecated-module
+import importlib.machinery
+import importlib.util
 import inspect
 import logging
 import os
@@ -32,8 +33,14 @@
   if not os.path.isfile(application_configuration_path):
     return None
 
-  application_configuration = imp.load_source('application_configuration',
-                                              application_configuration_path)
+  loader = importlib.machinery.SourceFileLoader('application_configuration',
+                                                application_configuration_path)
+  spec = importlib.util.spec_from_file_location(
+      'application_configuration',
+      application_configuration_path,
+      loader=loader)
+  application_configuration = importlib.util.module_from_spec(spec)
+  loader.exec_module(application_configuration)
   for name, cls in inspect.getmembers(application_configuration):
     if not inspect.isclass(cls):
       continue
@@ -137,7 +144,12 @@
     module_path = os.path.abspath(
         os.path.join(self.GetLauncherPath(), 'launcher.py'))
     try:
-      return imp.load_source('launcher', module_path)
+      loader = importlib.machinery.SourceFileLoader('launcher', module_path)
+      spec = importlib.util.spec_from_file_location(
+          'launcher', module_path, loader=loader)
+      launcher = importlib.util.module_from_spec(spec)
+      loader.exec_module(launcher)
+      return launcher
     except (IOError, ImportError, RuntimeError) as error:
       logging.error('Unable to load launcher module from %s.', module_path)
       logging.error(error)
@@ -183,3 +195,11 @@
         'slot_management_test',
         'starboard_platform_tests',
     ]
+
+  def GetTestBlackBoxTargets(self):
+    """Gets all tests to be run in a black box test run.
+
+    Returns:
+      A list of strings of black box test target names.
+    """
+    return []
diff --git a/starboard/build/toolchain/cobalt_toolchains.gni b/starboard/build/toolchain/cobalt_toolchains.gni
index 4277164..bfe0b5f 100644
--- a/starboard/build/toolchain/cobalt_toolchains.gni
+++ b/starboard/build/toolchain/cobalt_toolchains.gni
@@ -17,13 +17,15 @@
 
 template("cobalt_clang_toolchain") {
   gcc_toolchain(target_name) {
-    forward_variables_from(invoker.variables,
+    forward_variables_from(invoker,
                            [
                              "native_linker_path",
                              "executable_extension",
                              "tail_lib_dependencies",
-                             "shlib_extension",
                            ])
+    if (defined(invoker.shlib_extension)) {
+      shlib_extension = invoker.shlib_extension
+    }
     assert(defined(native_linker_path),
            "native_linker_path has to be defined by the platform")
     if (!is_host_win) {
diff --git a/starboard/client_porting/cwrappers/BUILD.gn b/starboard/client_porting/cwrappers/BUILD.gn
index b73f43b..71d1d57 100644
--- a/starboard/client_porting/cwrappers/BUILD.gn
+++ b/starboard/client_porting/cwrappers/BUILD.gn
@@ -25,7 +25,7 @@
   ]
   public_deps = [
     ":cwrappers",
-    "//starboard",
+    "//starboard:starboard_group",
     "//testing/gmock",
     "//testing/gtest",
   ]
diff --git a/starboard/client_porting/eztime/BUILD.gn b/starboard/client_porting/eztime/BUILD.gn
index 8f19135..061c62d 100644
--- a/starboard/client_porting/eztime/BUILD.gn
+++ b/starboard/client_porting/eztime/BUILD.gn
@@ -37,7 +37,7 @@
 
   deps = [
     ":eztime",
-    "//starboard",
+    "//starboard:starboard_group",
     "//testing/gmock",
     "//testing/gtest",
   ]
diff --git a/starboard/client_porting/eztime/eztime.cc b/starboard/client_porting/eztime/eztime.cc
index 7638200..50a5cd5 100644
--- a/starboard/client_porting/eztime/eztime.cc
+++ b/starboard/client_porting/eztime/eztime.cc
@@ -37,7 +37,7 @@
 UChar g_timezones[kEzTimeZoneCount][kMaxTimeZoneSize];
 
 // Once control for initializing eztime static data.
-SbOnceControl g_initialization_once = SB_ONCE_INITIALIZER;
+SbOnceControl g_eztime_initialization_once = SB_ONCE_INITIALIZER;
 
 // The timezone names in ASCII (UTF8-compatible) literals. This must match the
 // order of the EzTimeZone enum.
@@ -66,7 +66,7 @@
 // Initializes ICU and TimeZones so the rest of the functions will work. Should
 // only be called once.
 void Initialize() {
-  SbIcuInit();
+  IcuInit();
 
   // Initialize |g_timezones| table.
   for (int timezone = 0; timezone < kEzTimeZoneCount; ++timezone) {
@@ -89,7 +89,7 @@
 // Gets the cached TimeZone ID from |g_timezones| for the given EzTimeZone
 // |timezone|.
 const UChar* GetTimeZoneId(EzTimeZone timezone) {
-  SbOnce(&g_initialization_once, &Initialize);
+  SbOnce(&g_eztime_initialization_once, &Initialize);
   const UChar* timezone_id = g_timezones[timezone];
   if (timezone_id[0] == 0) {
     return NULL;
diff --git a/starboard/client_porting/icu_init/icu_init.cc b/starboard/client_porting/icu_init/icu_init.cc
index 2867bc8..d10210f 100644
--- a/starboard/client_porting/icu_init/icu_init.cc
+++ b/starboard/client_porting/icu_init/icu_init.cc
@@ -54,6 +54,6 @@
 
 }  // namespace
 
-void SbIcuInit() {
+void IcuInit() {
   SbOnce(&g_initialization_once, &Initialize);
 }
diff --git a/starboard/client_porting/icu_init/icu_init.h b/starboard/client_porting/icu_init/icu_init.h
index 73a451b..40553a1 100644
--- a/starboard/client_porting/icu_init/icu_init.h
+++ b/starboard/client_porting/icu_init/icu_init.h
@@ -17,19 +17,11 @@
 
 #if defined(STARBOARD)
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 // Initializes ICU using a standard path based on the Starboard content path.
 // This function must be threadsafe and idempotent. Applications that wish to
-// initialize ICU differently may define their own SbIcuInit function rather
+// initialize ICU differently may define their own IcuInit function rather
 // than using the implementation here.
-void SbIcuInit();
-
-#ifdef __cplusplus
-}  // extern "C"
-#endif
+void IcuInit();
 
 #endif  // STARBOARD
 
diff --git a/starboard/client_porting/poem/BUILD.gn b/starboard/client_porting/poem/BUILD.gn
index eb23fef..80512c2 100644
--- a/starboard/client_porting/poem/BUILD.gn
+++ b/starboard/client_porting/poem/BUILD.gn
@@ -22,7 +22,7 @@
   ]
 
   deps = [
-    "//starboard",
+    "//starboard:starboard_group",
     "//testing/gtest",
   ]
 }
diff --git a/starboard/configuration_constants.h b/starboard/configuration_constants.h
index 916e03a..6355ca4 100644
--- a/starboard/configuration_constants.h
+++ b/starboard/configuration_constants.h
@@ -21,86 +21,87 @@
 #ifndef STARBOARD_CONFIGURATION_CONSTANTS_H_
 #define STARBOARD_CONFIGURATION_CONSTANTS_H_
 
+#include "starboard/export.h"
 #include "starboard/types.h"
 
 // Determines the threshold of allocation size that should be done with mmap
 // (if available), rather than allocated within the core heap.
-extern const size_t kSbDefaultMmapThreshold;
+SB_EXPORT extern const size_t kSbDefaultMmapThreshold;
 
 // The current platform's maximum length of the name of a single directory
 // entry, not including the absolute path.
-extern const int32_t kSbFileMaxName;
+SB_EXPORT extern const int32_t kSbFileMaxName;
 
 // The current platform's maximum number of files that can be opened at the
 // same time by one process.
-extern const uint32_t kSbFileMaxOpen;
+SB_EXPORT extern const uint32_t kSbFileMaxOpen;
 
 // The current platform's alternate file path component separator character.
 // This is like SB_FILE_SEP_CHAR, except if your platform supports an alternate
 // character, then you can place that here. For example, on windows machines,
 // the primary separator character is probably '\', but the alternate is '/'.
-extern const char kSbFileAltSepChar;
+SB_EXPORT extern const char kSbFileAltSepChar;
 
 // The string form of SB_FILE_ALT_SEP_CHAR.
-extern const char* kSbFileAltSepString;
+SB_EXPORT extern const char* kSbFileAltSepString;
 
 // The current platform's maximum length of an absolute path.
-extern const uint32_t kSbFileMaxPath;
+SB_EXPORT extern const uint32_t kSbFileMaxPath;
 
 // The current platform's file path component separator character. This is the
 // character that appears after a directory in a file path. For example, the
 // absolute canonical path of the file "/path/to/a/file.txt" uses '/' as a path
 // component separator character.
-extern const char kSbFileSepChar;
+SB_EXPORT extern const char kSbFileSepChar;
 
 // The string form of SB_FILE_SEP_CHAR.
-extern const char* kSbFileSepString;
+SB_EXPORT extern const char* kSbFileSepString;
 
 #if SB_API_VERSION < 15
 // Allow ac3 and ec3 support
-extern const bool kSbHasAc3Audio;
+SB_EXPORT extern const bool kSbHasAc3Audio;
 #endif
 
 // Specifies whether this platform has webm/vp9 support.  This should be set to
 // non-zero on platforms with webm/vp9 support.
-extern const bool kSbHasMediaWebmVp9Support;
+SB_EXPORT extern const bool kSbHasMediaWebmVp9Support;
 
 // Whether the current platform supports thread priorities.
-extern const bool kSbHasThreadPrioritySupport;
+SB_EXPORT extern const bool kSbHasThreadPrioritySupport;
 
 // Determines the alignment that allocations should have on this platform.
-extern const size_t kSbMallocAlignment;
+SB_EXPORT extern const size_t kSbMallocAlignment;
 
 // The maximum number of thread local storage keys supported by this platform.
 // This comes from _POSIX_THREAD_KEYS_MAX. The value of PTHREAD_KEYS_MAX is
 // higher, but unit tests show that the implementation doesn't support nearly
 // as many keys.
-extern const uint32_t kSbMaxThreadLocalKeys;
+SB_EXPORT extern const uint32_t kSbMaxThreadLocalKeys;
 
 // The maximum length of the name for a thread, including the NULL-terminator.
-extern const int32_t kSbMaxThreadNameLength;
+SB_EXPORT extern const int32_t kSbMaxThreadNameLength;
 
 // Defines the path where memory debugging logs should be written to.
-extern const char* kSbMemoryLogPath;
+SB_EXPORT extern const char* kSbMemoryLogPath;
 
 // The maximum audio bitrate the platform can decode.  The following value
 // equals to 5M bytes per seconds which is more than enough for compressed
 // audio.
-extern const uint32_t kSbMediaMaxAudioBitrateInBitsPerSecond;
+SB_EXPORT extern const uint32_t kSbMediaMaxAudioBitrateInBitsPerSecond;
 
 // The maximum video bitrate the platform can decode.  The following value
 // equals to 8M bytes per seconds which is more than enough for compressed
 // video.
-extern const uint32_t kSbMediaMaxVideoBitrateInBitsPerSecond;
+SB_EXPORT extern const uint32_t kSbMediaMaxVideoBitrateInBitsPerSecond;
 
 // Specifies how video frame buffers must be aligned on this platform.
-extern const uint32_t kSbMediaVideoFrameAlignment;
+SB_EXPORT extern const uint32_t kSbMediaVideoFrameAlignment;
 
 // The memory page size, which controls the size of chunks on memory that
 // allocators deal with, and the alignment of those chunks. This doesn't have to
 // be the hardware-defined physical page size, but it should be a multiple of
 // it.
-extern const size_t kSbMemoryPageSize;
+SB_EXPORT extern const size_t kSbMemoryPageSize;
 
 // Specifies the network receive buffer size in bytes, set via
 // SbSocketSetReceiveBufferSize().
@@ -114,17 +115,17 @@
 //
 // If your platform does not have a good TCP auto-tuning mechanism,
 // a setting of (128 * 1024) here is recommended.
-extern const uint32_t kSbNetworkReceiveBufferSize;
+SB_EXPORT extern const uint32_t kSbNetworkReceiveBufferSize;
 
 // Defines the maximum number of simultaneous threads for this platform. Some
 // platforms require sharing thread handles with other kinds of system handles,
 // like mutexes, so we want to keep this manageable.
-extern const uint32_t kSbMaxThreads;
+SB_EXPORT extern const uint32_t kSbMaxThreads;
 
 // Specifies the preferred byte order of color channels in a pixel. Refer to
 // starboard/configuration.h for the possible values. EGL/GLES platforms should
 // generally prefer a byte order of RGBA, regardless of endianness.
-extern const int kSbPreferredRgbaByteOrder;
+SB_EXPORT extern const int kSbPreferredRgbaByteOrder;
 
 // The current platform's search path component separator character. When
 // specifying an ordered list of absolute paths of directories to search for a
@@ -134,20 +135,23 @@
 #ifdef __cplusplus
 extern "C" {
 #endif
-extern const char kSbPathSepChar;
+SB_EXPORT extern const char kSbPathSepChar;
 #ifdef __cplusplus
 }  // extern "C"
 #endif
 
 // The string form of SB_PATH_SEP_CHAR.
-extern const char* kSbPathSepString;
+SB_EXPORT extern const char* kSbPathSepString;
 
+#if SB_API_VERSION < 16
 // The maximum number of users that can be signed in at the same time.
 extern const uint32_t kSbUserMaxSignedIn;
+SB_EXPORT extern const uint32_t kSbUserMaxSignedIn;
+#endif  // SB_API_VERSION < 16
 
 #if SB_API_VERSION >= 14
 // The maximum size the cache directory is allowed to use in bytes.
-extern const uint32_t kSbMaxSystemPathCacheDirectorySize;
+SB_EXPORT extern const uint32_t kSbMaxSystemPathCacheDirectorySize;
 #endif
 
 #endif  // STARBOARD_CONFIGURATION_CONSTANTS_H_
diff --git a/starboard/contrib/cast/README.md b/starboard/contrib/cast/README.md
index 479ab3c..abfae7d 100644
--- a/starboard/contrib/cast/README.md
+++ b/starboard/contrib/cast/README.md
@@ -6,7 +6,7 @@
 ### Customizations
 
 As of Starboard 15, there are public methods required for Cast that are not
-already exposed by `libstarboard_platform_group.so`. As a result, the dedicated
+already exposed by `libstarboard.so`. As a result, the dedicated
 header `cast_starboard_api.h` is omitted from this release, though it may
 return in the future.
 
diff --git a/starboard/contrib/cast/cast_starboard_api/samples/BUILD.gn b/starboard/contrib/cast/cast_starboard_api/samples/BUILD.gn
index a26bfa4..bebd13a 100644
--- a/starboard/contrib/cast/cast_starboard_api/samples/BUILD.gn
+++ b/starboard/contrib/cast/cast_starboard_api/samples/BUILD.gn
@@ -1,5 +1,4 @@
 # Copyright 2023 The Cobalt Authors. All rights reserved.
-import("//starboard/build/config/starboard_target_type.gni")
 import("//starboard/contrib/cast/cast.gni")
 
 assert(build_with_separate_cobalt_toolchain && use_contrib_cast)
@@ -25,13 +24,14 @@
 }
 
 if (current_toolchain == starboard_toolchain) {
+  import("//starboard/build/config/starboard_target_type.gni")
   starboard_platform_target("cast_starboard_api") {
     extra_configs = [ ":default" ]
   }
 
   copy("cast_starboard_api_test_data") {
     install_content = true
-    sources = [ "$root_out_dir/libcast_starboard_api.so" ]
+    sources = [ "$root_out_dir/libcast_starboard_api.${starboard_shared_library_extension}" ]
 
     # This artifact is consumed by a test built outside of the
     # starboard_toolchain; move from `starboard/content/` to `content/`.
@@ -50,7 +50,7 @@
   ]
   data_deps = [ ":cast_starboard_api_test_data($starboard_toolchain)" ]
   deps = [
-    "//starboard",
+    "//starboard:starboard_group",
     "//starboard/nplb/testdata/file_tests:nplb_file_tests_data",
     "//testing/gtest",
   ]
diff --git a/starboard/decode_target.h b/starboard/decode_target.h
index abc2c13..a39d96d 100644
--- a/starboard/decode_target.h
+++ b/starboard/decode_target.h
@@ -46,7 +46,7 @@
 // SbDecodeTarget creation code needs to execute GLES commands like, for
 // example, glGenTextures().
 //
-// The primary usage is likely to be the the SbPlayer implementation on some
+// The primary usage is likely to be the SbPlayer implementation on some
 // platforms.
 //
 // # SbDecodeTarget Example
diff --git a/starboard/doc/evergreen/cobalt_evergreen_lite.md b/starboard/doc/evergreen/cobalt_evergreen_lite.md
index 06dacf9..ea75ec9 100644
--- a/starboard/doc/evergreen/cobalt_evergreen_lite.md
+++ b/starboard/doc/evergreen/cobalt_evergreen_lite.md
@@ -1,5 +1,4 @@
-Evergreen Lite Partner Doc
-
+# Evergreen Lite Partner Doc
 
 ## What is Cobalt Evergreen Lite?
 
diff --git a/starboard/doc/evergreen/cobalt_evergreen_reference_port_raspi2.md b/starboard/doc/evergreen/cobalt_evergreen_reference_port_raspi2.md
index bc254cf..d048ea1 100644
--- a/starboard/doc/evergreen/cobalt_evergreen_reference_port_raspi2.md
+++ b/starboard/doc/evergreen/cobalt_evergreen_reference_port_raspi2.md
@@ -2,9 +2,8 @@
 
 ## Requirements
 
-*   Raspberry Pi 2 (image configured per
-    [instructions](https://cobalt.dev/development/setup-raspi.html) on
-    cobalt.dev)
+*   Raspberry Pi environment setup per
+    [instructions](https://developers.google.com/youtube/cobalt/docs/development/setup-raspi).
 
 ## Build instructions
 
diff --git a/starboard/elf_loader/BUILD.gn b/starboard/elf_loader/BUILD.gn
index 184ccb2..b5bce40 100644
--- a/starboard/elf_loader/BUILD.gn
+++ b/starboard/elf_loader/BUILD.gn
@@ -56,7 +56,7 @@
     ":constants",
     ":evergreen_config",
     ":evergreen_info",
-    "//starboard",
+    "//starboard:starboard_group",
     "//starboard/common",
     "//third_party/lz4_lib:lz4",
   ]
@@ -78,7 +78,7 @@
       ":constants",
       ":evergreen_config",
       ":evergreen_info",
-      "//starboard",
+      "//starboard:starboard_group",
       "//starboard/common",
     ]
 
@@ -112,12 +112,15 @@
       ":evergreen_info",
       ":sabi_string",
       "//cobalt/content/fonts:copy_font_data",
-      "//starboard",
+      "//starboard:starboard_group",
     ]
 
     if (!sb_is_evergreen_compatible) {
       deps += [ "//third_party/crashpad/wrapper:wrapper_stub" ]
     }
+    if (sb_is_evergreen_compatible && sb_evergreen_compatible_package) {
+      deps += [ "//starboard/loader_app:copy_crashpad_handler_named_as_so" ]
+    }
   }
 }
 
@@ -146,7 +149,7 @@
       ":elf_loader_sys",
       ":evergreen_info",
       ":sabi_string",
-      "//starboard",
+      "//starboard:starboard_group",
     ]
 
     if (!sb_is_evergreen_compatible) {
@@ -161,7 +164,7 @@
     testonly = true
     sources = [ "//starboard/common/test_main.cc" ]
     deps = [
-      "//starboard",
+      "//starboard:starboard_group",
       "//testing/gmock",
       "//testing/gtest",
     ]
diff --git a/starboard/evergreen/shared/gyp_configuration.py b/starboard/evergreen/shared/gyp_configuration.py
index c5f355c..5b8441d 100644
--- a/starboard/evergreen/shared/gyp_configuration.py
+++ b/starboard/evergreen/shared/gyp_configuration.py
@@ -42,3 +42,7 @@
       'elf_loader_test',
       'installation_manager_test',
   ]
+
+  def GetTestBlackBoxTargets(self):
+    tests = super().GetTestBlackBoxTargets()
+    return [test for test in tests if test not in self.__FORBIDDEN_TESTS]
diff --git a/starboard/examples/glclear/BUILD.gn b/starboard/examples/glclear/BUILD.gn
index 60c6d62..7a7e49a 100644
--- a/starboard/examples/glclear/BUILD.gn
+++ b/starboard/examples/glclear/BUILD.gn
@@ -14,5 +14,5 @@
 
 target(final_executable_type, "starboard_glclear_example") {
   sources = [ "main.cc" ]
-  deps = [ "//starboard" ]
+  deps = [ "//starboard:starboard_group" ]
 }
diff --git a/starboard/examples/hello_world/BUILD.gn b/starboard/examples/hello_world/BUILD.gn
index 36642f6..d6560ce 100644
--- a/starboard/examples/hello_world/BUILD.gn
+++ b/starboard/examples/hello_world/BUILD.gn
@@ -13,6 +13,6 @@
 # limitations under the License.
 
 target(final_executable_type, "starboard_hello_world_example") {
-  deps = [ "//starboard" ]
+  deps = [ "//starboard:starboard_group" ]
   sources = [ "main.cc" ]
 }
diff --git a/starboard/examples/window/BUILD.gn b/starboard/examples/window/BUILD.gn
index 93c3aae..1d31d6a 100644
--- a/starboard/examples/window/BUILD.gn
+++ b/starboard/examples/window/BUILD.gn
@@ -16,6 +16,6 @@
   testonly = true
 
   sources = [ "main.cc" ]
-  public_deps = [ "//starboard" ]
+  public_deps = [ "//starboard:starboard_group" ]
   data_deps = [ "//third_party/icu:icudata" ]
 }
diff --git a/starboard/extension/BUILD.gn b/starboard/extension/BUILD.gn
index 57b95b1..47197ab 100644
--- a/starboard/extension/BUILD.gn
+++ b/starboard/extension/BUILD.gn
@@ -22,7 +22,7 @@
   deps = [
     "//cobalt/base",
     "//cobalt/test:run_all_unittests",
-    "//starboard",
+    "//starboard:starboard_group",
     "//testing/gmock",
     "//testing/gtest",
   ]
diff --git a/starboard/extension/extension_test.cc b/starboard/extension/extension_test.cc
index 874cce1..7bbce73 100644
--- a/starboard/extension/extension_test.cc
+++ b/starboard/extension/extension_test.cc
@@ -21,6 +21,7 @@
 #include "starboard/extension/font.h"
 #include "starboard/extension/free_space.h"
 #include "starboard/extension/graphics.h"
+#include "starboard/extension/h5vcc_config.h"
 #include "starboard/extension/ifa.h"
 #include "starboard/extension/installation_manager.h"
 #include "starboard/extension/javascript_cache.h"
@@ -28,6 +29,7 @@
 #include "starboard/extension/memory_mapped_file.h"
 #include "starboard/extension/platform_info.h"
 #include "starboard/extension/platform_service.h"
+#include "starboard/extension/player_set_max_video_input_size.h"
 #include "starboard/extension/time_zone.h"
 #include "starboard/extension/updater_notification.h"
 #include "starboard/extension/url_fetcher_observer.h"
@@ -481,5 +483,46 @@
       << "Extension struct should be a singleton";
 }
 
+TEST(ExtensionTest, PlayerSetMaxVideoInputSize) {
+  typedef StarboardExtensionPlayerSetMaxVideoInputSizeApi ExtensionApi;
+  const char* kExtensionName =
+      kStarboardExtensionPlayerSetMaxVideoInputSizeName;
+
+  const ExtensionApi* extension_api =
+      static_cast<const ExtensionApi*>(SbSystemGetExtension(kExtensionName));
+  if (!extension_api) {
+    return;
+  }
+
+  EXPECT_STREQ(extension_api->name, kExtensionName);
+  EXPECT_EQ(extension_api->version, 1u);
+  EXPECT_NE(extension_api->SetMaxVideoInputSizeForCurrentThread, nullptr);
+
+  const ExtensionApi* second_extension_api =
+      static_cast<const ExtensionApi*>(SbSystemGetExtension(kExtensionName));
+  EXPECT_EQ(second_extension_api, extension_api)
+      << "Extension struct should be a singleton";
+}
+
+TEST(ExtensionTest, H5vccConfig) {
+  typedef StarboardExtensionH5vccConfigApi ExtensionApi;
+  const char* kExtensionName = kStarboardExtensionH5vccConfigName;
+
+  const ExtensionApi* extension_api =
+      static_cast<const ExtensionApi*>(SbSystemGetExtension(kExtensionName));
+  if (!extension_api) {
+    return;
+  }
+
+  EXPECT_STREQ(extension_api->name, kExtensionName);
+  EXPECT_EQ(extension_api->version, 1u);
+  EXPECT_NE(extension_api->EnableBackgroundPlayback, nullptr);
+
+  const ExtensionApi* second_extension_api =
+      static_cast<const ExtensionApi*>(SbSystemGetExtension(kExtensionName));
+  EXPECT_EQ(second_extension_api, extension_api)
+      << "Extension struct should be a singleton";
+}
+
 }  // namespace extension
 }  // namespace starboard
diff --git a/starboard/extension/h5vcc_config.h b/starboard/extension/h5vcc_config.h
new file mode 100644
index 0000000..a88a2f3
--- /dev/null
+++ b/starboard/extension/h5vcc_config.h
@@ -0,0 +1,43 @@
+// Copyright 2024 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef STARBOARD_EXTENSION_H5VCC_CONFIG_H_
+#define STARBOARD_EXTENSION_H5VCC_CONFIG_H_
+
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define kStarboardExtensionH5vccConfigName "dev.starboard.extension.H5vccConfig"
+
+typedef struct StarboardExtensionH5vccConfigApi {
+  // Name should be the string |kStarboardExtensionH5vccConfigName|.
+  // This helps to validate that the extension API is correct.
+  const char* name;
+
+  // This specifies the version of the API that is implemented.
+  uint32_t version;
+
+  // This API enable the Cobalt background playback mode.
+  void (*EnableBackgroundPlayback)(bool value);
+
+} StarboardExtensionH5vccConfigApi;
+
+#ifdef __cplusplus
+}  // extern "C"
+#endif
+
+#endif  // STARBOARD_EXTENSION_H5VCC_CONFIG_H_
diff --git a/starboard/extension/player_set_max_video_input_size.h b/starboard/extension/player_set_max_video_input_size.h
new file mode 100644
index 0000000..3a9cb13
--- /dev/null
+++ b/starboard/extension/player_set_max_video_input_size.h
@@ -0,0 +1,51 @@
+// Copyright 2024 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef STARBOARD_EXTENSION_PLAYER_SET_MAX_VIDEO_INPUT_SIZE_H_
+#define STARBOARD_EXTENSION_PLAYER_SET_MAX_VIDEO_INPUT_SIZE_H_
+
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define kStarboardExtensionPlayerSetMaxVideoInputSizeName \
+  "dev.starboard.extension.PlayerSetMaxVideoInputSize"
+
+typedef struct StarboardExtensionPlayerSetMaxVideoInputSizeApi {
+  // Name should be the string
+  // |kStarboardExtensionPlayerSetMaxVideoInputSizeName|. This helps to validate
+  // that the extension API is correct.
+  const char* name;
+
+  // This specifies the version of the API that is implemented.
+  uint32_t version;
+
+  // The fields below this point were added in version 1 or later.
+
+  // 1. This is utilized to establish the maximum video input size
+  //    for any subsequently created SbPlayer on the current calling thread.
+  // 2. The maximum video input dimensions serve as a suggestion; the
+  //    implementation is not obligated to adhere to it, and there is no
+  //    feedback provided.
+  // 3. Set it to 0 disable the setting.
+  void (*SetMaxVideoInputSizeForCurrentThread)(int max_video_input_size);
+} StarboardExtensionPlayerSetMaxVideoInputSizeApi;
+
+#ifdef __cplusplus
+}  // extern "C"
+#endif
+
+#endif  // STARBOARD_EXTENSION_PLAYER_SET_MAX_VIDEO_INPUT_SIZE_H_
diff --git a/starboard/linux/shared/cobalt/configuration.py b/starboard/linux/shared/cobalt/configuration.py
index 6deb19f..b66816c 100644
--- a/starboard/linux/shared/cobalt/configuration.py
+++ b/starboard/linux/shared/cobalt/configuration.py
@@ -63,11 +63,19 @@
     ],
 }
 
-# Tracked by b/294070803
 if os.getenv('MODULAR_BUILD', '0') == '1':
+  # Tracked by b/294070803
   _FILTERED_TESTS['layout_tests'] = [
       'CobaltSpecificLayoutTests/Layout.Test/platform_object_user_properties_survive_gc',  # pylint: disable=line-too-long
   ]
+  # TODO: b/303260272 Re-enable these tests.
+  _FILTERED_TESTS['blackbox'] = [
+      'cancel_sync_loads_when_suspended',
+      'preload_font',
+      'preload_launch_parameter',
+      'preload_visibility',
+      'suspend_visibility',
+  ]
 
 
 class CobaltLinuxConfiguration(cobalt_configuration.CobaltConfiguration):
diff --git a/starboard/linux/shared/platform_configuration/BUILD.gn b/starboard/linux/shared/platform_configuration/BUILD.gn
index 4e7334a..6a06cc6 100644
--- a/starboard/linux/shared/platform_configuration/BUILD.gn
+++ b/starboard/linux/shared/platform_configuration/BUILD.gn
@@ -62,14 +62,10 @@
 
       # Do not warn about unused function params.
       "-Wno-unused-parameter",
-    ]
-    if (sb_is_modular && !sb_is_evergreen) {
-      # If we're building with cobalt toolchain and native linker, we need visibility.
-      cflags += [ "-fvisibility=default" ]
-    } else {
+
       # Default visibility to hidden, to enable dead stripping.
-      cflags += [ "-fvisibility=hidden" ]
-    }
+      "-fvisibility=hidden",
+    ]
 
     if (is_gold) {
       cflags += [
diff --git a/starboard/linux/x64x11/clang/3.9/BUILD.gn b/starboard/linux/x64x11/clang/3.9/BUILD.gn
index f947b50..a70887a 100644
--- a/starboard/linux/x64x11/clang/3.9/BUILD.gn
+++ b/starboard/linux/x64x11/clang/3.9/BUILD.gn
@@ -27,3 +27,9 @@
 
   configs += [ "//starboard/build/config:starboard_implementation" ]
 }
+
+if (build_with_separate_cobalt_toolchain) {
+  group("starboard_platform_with_main") {
+    deps = [ "//starboard/linux/x64x11:starboard_platform_with_main" ]
+  }
+}
diff --git a/starboard/linux/x64x11/clang/3.9/args.gn b/starboard/linux/x64x11/clang/3.9/args.gn
index 7473f4a..490cee2 100644
--- a/starboard/linux/x64x11/clang/3.9/args.gn
+++ b/starboard/linux/x64x11/clang/3.9/args.gn
@@ -16,3 +16,4 @@
 target_os = "linux"
 target_cpu = "x64"
 using_old_compiler = true
+build_with_separate_cobalt_toolchain = true
diff --git a/starboard/linux/x64x11/clang/3.9/platform_configuration/BUILD.gn b/starboard/linux/x64x11/clang/3.9/platform_configuration/BUILD.gn
index ef3052c..b2037fd 100644
--- a/starboard/linux/x64x11/clang/3.9/platform_configuration/BUILD.gn
+++ b/starboard/linux/x64x11/clang/3.9/platform_configuration/BUILD.gn
@@ -16,9 +16,12 @@
   cflags = []
   cflags_c = []
   cflags_cc = []
-  ldflags = []
   defines = []
 
+  ldflags = [
+    # Cleanup unused sections
+    "-Wl,-gc-sections",
+  ]
   cflags += [
     "-Werror",
     "-fcolor-diagnostics",
@@ -180,10 +183,15 @@
 }
 
 config("platform_configuration") {
-  configs = [
-    "//starboard/linux/shared/platform_configuration",
-    "//starboard/linux/x64x11/shared/platform_configuration:libraries",
-    "//starboard/build/config/sabi",
-    ":compiler_flags",
-  ]
+  if (current_toolchain == default_toolchain &&
+      build_with_separate_cobalt_toolchain) {
+    configs = [ "//starboard/evergreen/x64/platform_configuration" ]
+  } else {
+    configs = [
+      "//starboard/linux/shared/platform_configuration",
+      "//starboard/linux/x64x11/shared/platform_configuration:libraries",
+      "//starboard/build/config/sabi",
+      ":compiler_flags",
+    ]
+  }
 }
diff --git a/starboard/linux/x64x11/clang/3.9/platform_configuration/configuration.gni b/starboard/linux/x64x11/clang/3.9/platform_configuration/configuration.gni
index a0ffcd5..08b17b6 100644
--- a/starboard/linux/x64x11/clang/3.9/platform_configuration/configuration.gni
+++ b/starboard/linux/x64x11/clang/3.9/platform_configuration/configuration.gni
@@ -12,38 +12,46 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import("//starboard/build/config/base_configuration.gni")
+if (current_toolchain == default_toolchain &&
+    build_with_separate_cobalt_toolchain) {
+  import("//starboard/evergreen/x64/platform_configuration/configuration.gni")
+  platform_tests_path =
+      "//starboard/linux/shared:starboard_platform_tests($starboard_toolchain)"
+  cobalt_font_package = "standard"
 
-nasm_exists = true
+  sb_has_unused_symbol_issue = true
+} else {
+  import("//starboard/build/config/base_configuration.gni")
 
-sb_static_contents_output_data_dir = "$root_out_dir/content"
+  nasm_exists = true
 
-sb_enable_benchmark = true
+  sb_static_contents_output_data_dir = "$root_out_dir/content"
 
-install_target_path = "//starboard/build/install/install_target.gni"
+  sb_enable_benchmark = true
 
-sb_enable_opus_sse = false
+  install_target_path = "//starboard/build/install/install_target.gni"
 
-speed_config_path = "//starboard/linux/shared/platform_configuration:speed"
-size_config_path = "//starboard/linux/shared/platform_configuration:size"
+  sb_enable_opus_sse = false
 
-pedantic_warnings_config_path =
-    "//starboard/linux/shared/platform_configuration:pedantic_warnings"
-no_pedantic_warnings_config_path = "//starboard/linux/x64x11/clang/3.9/platform_configuration:no_pedantic_warnings"
+  speed_config_path = "//starboard/linux/shared/platform_configuration:speed"
+  size_config_path = "//starboard/linux/shared/platform_configuration:size"
 
-sb_widevine_platform = "linux"
+  pedantic_warnings_config_path =
+      "//starboard/linux/shared/platform_configuration:pedantic_warnings"
+  no_pedantic_warnings_config_path = "//starboard/linux/x64x11/clang/3.9/platform_configuration:no_pedantic_warnings"
 
-platform_tests_path = "//starboard/linux/shared:starboard_platform_tests"
+  sb_widevine_platform = "linux"
 
-enable_in_app_dial = true
+  platform_tests_path = "//starboard/linux/shared:starboard_platform_tests"
 
-sabi_path = "//starboard/sabi/x64/sysv/sabi-v$sb_api_version.json"
+  enable_in_app_dial = true
 
-gl_type = "angle"
-sb_angle_enable_gl = true
+  sabi_path = "//starboard/sabi/x64/sysv/sabi-v$sb_api_version.json"
 
-cobalt_v8_emit_builtins_as_inline_asm = true
+  gl_type = "angle"
+  sb_angle_enable_gl = true
 
-sb_enable_cpp17_audit = false
+  cobalt_v8_emit_builtins_as_inline_asm = true
 
-v8_enable_webassembly = false
+  v8_enable_webassembly = false
+}
diff --git a/starboard/linux/x64x11/clang/3.9/starboard_loader.cc b/starboard/linux/x64x11/clang/3.9/starboard_loader.cc
new file mode 100644
index 0000000..065bfaa
--- /dev/null
+++ b/starboard/linux/x64x11/clang/3.9/starboard_loader.cc
@@ -0,0 +1,19 @@
+// Copyright 2023 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/event.h"
+
+int main(int argc, char** argv) {
+  return SbRunStarboardMain(argc, argv, SbEventHandle);
+}
diff --git a/starboard/linux/x64x11/clang/3.9/toolchain/BUILD.gn b/starboard/linux/x64x11/clang/3.9/toolchain/BUILD.gn
index 79cd0f0..c306880 100644
--- a/starboard/linux/x64x11/clang/3.9/toolchain/BUILD.gn
+++ b/starboard/linux/x64x11/clang/3.9/toolchain/BUILD.gn
@@ -13,10 +13,16 @@
 # limitations under the License.
 
 import("//build/config/clang/clang.gni")
+import("//build/toolchain/gcc_toolchain.gni")
+import("//starboard/build/toolchain/cobalt_toolchains.gni")
 import("//starboard/shared/toolchain/overridable_gcc_toolchain.gni")
 
 _target_llvm_3_9_bin_dir = "/usr/lib/llvm-3.9/bin"
 
+cobalt_clang_toolchain("cobalt") {
+  native_linker_path = "${_target_llvm_3_9_bin_dir}/clang++"
+}
+
 overridable_gcc_toolchain("target") {
   cc = "${_target_llvm_3_9_bin_dir}/clang"
   cxx = "${_target_llvm_3_9_bin_dir}/clang++"
@@ -27,3 +33,14 @@
     is_clang = true
   }
 }
+
+overridable_gcc_toolchain("starboard") {
+  cc = "${_target_llvm_3_9_bin_dir}/clang"
+  cxx = "${_target_llvm_3_9_bin_dir}/clang++"
+  ld = cxx
+  ar = "ar"
+
+  toolchain_args = {
+    is_clang = true
+  }
+}
diff --git a/starboard/linux/x64x11/gcc/6.3/BUILD.gn b/starboard/linux/x64x11/gcc/6.3/BUILD.gn
index f947b50..a70887a 100644
--- a/starboard/linux/x64x11/gcc/6.3/BUILD.gn
+++ b/starboard/linux/x64x11/gcc/6.3/BUILD.gn
@@ -27,3 +27,9 @@
 
   configs += [ "//starboard/build/config:starboard_implementation" ]
 }
+
+if (build_with_separate_cobalt_toolchain) {
+  group("starboard_platform_with_main") {
+    deps = [ "//starboard/linux/x64x11:starboard_platform_with_main" ]
+  }
+}
diff --git a/starboard/linux/x64x11/gcc/6.3/args.gn b/starboard/linux/x64x11/gcc/6.3/args.gn
index 879e5db..f42d308 100644
--- a/starboard/linux/x64x11/gcc/6.3/args.gn
+++ b/starboard/linux/x64x11/gcc/6.3/args.gn
@@ -15,5 +15,5 @@
 target_platform = "linux-x64x11-gcc-6-3"
 target_os = "linux"
 target_cpu = "x64"
-is_clang = false
 using_old_compiler = true
+build_with_separate_cobalt_toolchain = true
diff --git a/starboard/linux/x64x11/gcc/6.3/cobalt/configuration.py b/starboard/linux/x64x11/gcc/6.3/cobalt/configuration.py
index 8300298..7b5a759 100644
--- a/starboard/linux/x64x11/gcc/6.3/cobalt/configuration.py
+++ b/starboard/linux/x64x11/gcc/6.3/cobalt/configuration.py
@@ -13,6 +13,8 @@
 # limitations under the License.
 """Starboard Linux x64x11 GCC 6.3 Cobalt configuration."""
 
+import os
+
 from starboard.linux.shared.cobalt import configuration as shared_configuration
 from starboard.tools.testing import test_filter
 
@@ -33,3 +35,8 @@
           'ZipReaderTest.ExtractToFileAsync_RegularFile',
       ],
   }
+  if os.getenv('MODULAR_BUILD', '0') == '1':
+    # TODO: b/303845477 Re-enable.
+    __FILTERED_TESTS['blackbox'] = [
+        'wasm_basic_test',
+    ]
diff --git a/starboard/linux/x64x11/gcc/6.3/platform_configuration/BUILD.gn b/starboard/linux/x64x11/gcc/6.3/platform_configuration/BUILD.gn
index 0ba189c..1be472a 100644
--- a/starboard/linux/x64x11/gcc/6.3/platform_configuration/BUILD.gn
+++ b/starboard/linux/x64x11/gcc/6.3/platform_configuration/BUILD.gn
@@ -16,7 +16,11 @@
   cflags = []
   cflags_c = []
   cflags_cc = []
-  ldflags = []
+
+  ldflags = [
+    # Cleanup unused sections
+    "-Wl,-gc-sections",
+  ]
 
   # from common_compiler_flags
   cflags += [
@@ -99,10 +103,15 @@
 }
 
 config("platform_configuration") {
-  configs = [
-    "//starboard/linux/shared/platform_configuration",
-    "//starboard/linux/x64x11/shared/platform_configuration:libraries",
-    "//starboard/build/config/sabi",
-    ":compiler_flags",
-  ]
+  if (current_toolchain == default_toolchain &&
+      build_with_separate_cobalt_toolchain) {
+    configs = [ "//starboard/evergreen/x64/platform_configuration" ]
+  } else {
+    configs = [
+      "//starboard/linux/shared/platform_configuration",
+      "//starboard/linux/x64x11/shared/platform_configuration:libraries",
+      "//starboard/build/config/sabi",
+      ":compiler_flags",
+    ]
+  }
 }
diff --git a/starboard/linux/x64x11/gcc/6.3/platform_configuration/configuration.gni b/starboard/linux/x64x11/gcc/6.3/platform_configuration/configuration.gni
index ddb3a33..46daa23 100644
--- a/starboard/linux/x64x11/gcc/6.3/platform_configuration/configuration.gni
+++ b/starboard/linux/x64x11/gcc/6.3/platform_configuration/configuration.gni
@@ -12,10 +12,17 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import("//starboard/linux/shared/platform_configuration/configuration.gni")
+if (current_toolchain == default_toolchain &&
+    build_with_separate_cobalt_toolchain) {
+  import("//starboard/evergreen/x64/platform_configuration/configuration.gni")
+  platform_tests_path =
+      "//starboard/linux/shared:starboard_platform_tests($starboard_toolchain)"
+  cobalt_font_package = "standard"
+  sb_has_unused_symbol_issue = true
+} else {
+  import("//starboard/linux/shared/platform_configuration/configuration.gni")
 
-sabi_path = "//starboard/sabi/x64/sysv/sabi-v$sb_api_version.json"
-gl_type = "angle"
-sb_angle_enable_gl = true
-
-sb_enable_cpp17_audit = false
+  sabi_path = "//starboard/sabi/x64/sysv/sabi-v$sb_api_version.json"
+  gl_type = "angle"
+  sb_angle_enable_gl = true
+}
diff --git a/starboard/linux/x64x11/gcc/6.3/starboard_loader.cc b/starboard/linux/x64x11/gcc/6.3/starboard_loader.cc
new file mode 100644
index 0000000..7f23deb
--- /dev/null
+++ b/starboard/linux/x64x11/gcc/6.3/starboard_loader.cc
@@ -0,0 +1,21 @@
+// Copyright 2023 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include <stdio.h>
+#include "starboard/event.h"
+
+int main(int argc, char** argv) {
+  printf("starboard_loader: SbRunStarboardMain\n");
+  return SbRunStarboardMain(argc, argv, SbEventHandle);
+}
diff --git a/starboard/linux/x64x11/gcc/6.3/toolchain/BUILD.gn b/starboard/linux/x64x11/gcc/6.3/toolchain/BUILD.gn
index c962435..b421195 100644
--- a/starboard/linux/x64x11/gcc/6.3/toolchain/BUILD.gn
+++ b/starboard/linux/x64x11/gcc/6.3/toolchain/BUILD.gn
@@ -12,17 +12,21 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import("//build/toolchain/gcc_toolchain.gni")
+import("//starboard/build/toolchain/cobalt_toolchains.gni")
 import("//starboard/shared/toolchain/overridable_gcc_toolchain.gni")
 
 # Directory for GCC 6.3 if it is installed as a system dependency.
 _default_gcc_6_3_bin_dir = "/usr/bin"
 
-overridable_gcc_toolchain("target") {
+cobalt_clang_toolchain("cobalt") {
+  native_linker_path = "${_default_gcc_6_3_bin_dir}/clang++"
+}
+
+overridable_gcc_toolchain("starboard") {
   cc = "${_default_gcc_6_3_bin_dir}/gcc-6"
   cxx = "${_default_gcc_6_3_bin_dir}/g++-6"
   ld = cxx
-
-  # We use whatever 'ar' resolves to.
   ar = "ar"
 
   toolchain_args = {
diff --git a/starboard/linux/x64x11/toolchain/BUILD.gn b/starboard/linux/x64x11/toolchain/BUILD.gn
index 79b7991..9d6fd32 100644
--- a/starboard/linux/x64x11/toolchain/BUILD.gn
+++ b/starboard/linux/x64x11/toolchain/BUILD.gn
@@ -21,9 +21,7 @@
 }
 
 cobalt_clang_toolchain("cobalt") {
-  variables = {
-    native_linker_path = "$clang_base_path/bin/clang++"
-  }
+  native_linker_path = "$clang_base_path/bin/clang++"
 }
 
 overridable_clang_toolchain("target") {
diff --git a/starboard/loader_app/BUILD.gn b/starboard/loader_app/BUILD.gn
index 053c0c2..da5eaee 100644
--- a/starboard/loader_app/BUILD.gn
+++ b/starboard/loader_app/BUILD.gn
@@ -29,7 +29,7 @@
     ":memory_tracker_thread",
     ":reset_evergreen_update",
     ":slot_management",
-    "//starboard",
+    "//starboard:starboard_group",
     "//starboard/elf_loader:constants",
     "//starboard/elf_loader:evergreen_info",
     "//starboard/elf_loader:sabi_string",
@@ -54,18 +54,6 @@
     }
     outputs = [ "$sb_static_contents_output_data_dir/app/cobalt/content" ]
   }
-  copy("copy_loader_app_lib") {
-    install_content = true
-    if (target_cpu == "arm" && arm_float_abi == "softfp") {
-      sources = [ "$root_out_dir/../evergreen-$target_cpu-${arm_float_abi}_$build_type/install/lib/libcobalt.so" ]
-    } else if (target_cpu == "arm64") {
-      sources = [ "$root_out_dir/../evergreen-$target_cpu_$build_type/install/lib/libcobalt.so" ]
-    } else {
-      sources = []
-    }
-    outputs =
-        [ "$sb_static_contents_output_data_dir/app/cobalt/lib/libcobalt.so" ]
-  }
   copy("copy_loader_app_manifest") {
     install_content = true
     if (target_cpu == "arm" && arm_float_abi == "softfp") {
@@ -115,14 +103,14 @@
         data_deps += [
           ":copy_crashpad_handler_named_as_so",
           ":copy_loader_app_content",
-          ":copy_loader_app_lib",
           ":copy_loader_app_manifest",
+          "//cobalt/browser:copy_loader_app_libcobalt",
         ]
         deps += [
           ":copy_crashpad_handler_named_as_so",
           ":copy_loader_app_content",
-          ":copy_loader_app_lib",
           ":copy_loader_app_manifest",
+          "//cobalt/browser:copy_loader_app_libcobalt",
         ]
       }
     }
@@ -158,7 +146,7 @@
     "app_key_files.cc",
     "app_key_files.h",
   ]
-  deps = [ "//starboard" ]
+  deps = [ "//starboard:starboard_group" ]
 }
 
 target(gtest_target_type, "app_key_files_test") {
@@ -182,7 +170,7 @@
     "app_key_internal.h",
   ]
   deps = [
-    "//starboard",
+    "//starboard:starboard_group",
     "//third_party/modp_b64",
   ]
 }
@@ -245,7 +233,7 @@
   deps = [
     ":installation_store_proto",
     ":pending_restart",
-    "//starboard",
+    "//starboard:starboard_group",
   ]
 }
 
@@ -277,7 +265,7 @@
     ":app_key_files",
     ":drain_file",
     ":installation_manager",
-    "//starboard",
+    "//starboard:starboard_group",
     "//starboard/elf_loader",
     "//starboard/elf_loader:constants",
     "//starboard/elf_loader:sabi_string",
@@ -337,7 +325,7 @@
     "reset_evergreen_update.cc",
     "reset_evergreen_update.h",
   ]
-  deps = [ "//starboard" ]
+  deps = [ "//starboard:starboard_group" ]
 }
 
 # TODO: b/309493306 - Stop building evergreen targets for all non-evergreen platforms.
diff --git a/starboard/loader_app/drain_file.cc b/starboard/loader_app/drain_file.cc
index c84d7ac..dc0b9df 100644
--- a/starboard/loader_app/drain_file.cc
+++ b/starboard/loader_app/drain_file.cc
@@ -98,7 +98,8 @@
 
   std::vector<std::string> filenames = FindAllWithPrefix(dir, kDrainFilePrefix);
 
-  std::remove_if(filenames.begin(), filenames.end(), IsExpired);
+  filenames.erase(std::remove_if(filenames.begin(), filenames.end(), IsExpired),
+                  filenames.end());
 
   if (filenames.empty())
     return;
diff --git a/starboard/loader_app/drain_file_test.cc b/starboard/loader_app/drain_file_test.cc
index bf0863c..8265829 100644
--- a/starboard/loader_app/drain_file_test.cc
+++ b/starboard/loader_app/drain_file_test.cc
@@ -19,6 +19,7 @@
 
 #include "starboard/common/file.h"
 #include "starboard/common/log.h"
+#include "starboard/common/string.h"
 #include "starboard/configuration_constants.h"
 #include "starboard/directory.h"
 #include "starboard/loader_app/drain_file_helper.h"
@@ -40,6 +41,11 @@
     temp_dir_.resize(kSbFileMaxPath);
     ASSERT_TRUE(SbSystemGetPath(kSbSystemPathTempDirectory, temp_dir_.data(),
                                 temp_dir_.size()));
+
+    // Use dedicated dir for testing to avoid meddling with other files.
+    starboard::strlcat(temp_dir_.data(), kSbFileSepString, kSbFileMaxPath);
+    starboard::strlcat(temp_dir_.data(), "df", kSbFileMaxPath);
+    ASSERT_TRUE(SbDirectoryCreate(temp_dir_.data()));
   }
 
   void TearDown() override { DrainFileClearForApp(GetTempDir(), ""); }
@@ -168,6 +174,29 @@
   EXPECT_TRUE(SbFileDelete(later_and_greatest.path().c_str()));
 }
 
+// Ranking drain files should ignore expired files.
+TEST_F(DrainFileTest, SunnyDayRankCorrectlyIgnoresExpired) {
+  const SbTime timestamp = SbTimeGetNow();
+
+  ScopedDrainFile early_and_expired(GetTempDir(), "a",
+                                    timestamp - kDrainFileMaximumAge);
+  ScopedDrainFile later_and_least(GetTempDir(), "c", timestamp);
+  ScopedDrainFile later_and_greatest(GetTempDir(), "b",
+                                     timestamp + kDrainFileAgeUnit);
+
+  std::vector<char> result(kSbFileMaxName);
+
+  EXPECT_TRUE(DrainFileRankAndCheck(GetTempDir(), "c"));
+  EXPECT_TRUE(SbFileDelete(later_and_least.path().c_str()));
+
+  EXPECT_TRUE(DrainFileRankAndCheck(GetTempDir(), "b"));
+  EXPECT_TRUE(SbFileDelete(later_and_greatest.path().c_str()));
+
+  // Even though "a" is still there Rank should find nothing since it's expired.
+  EXPECT_TRUE(DrainFileRankAndCheck(GetTempDir(), ""));
+  EXPECT_TRUE(SbFileDelete(early_and_expired.path().c_str()));
+}
+
 // All files in the directory should be cleared except for drain files with an
 // app key matching the provided app key.
 TEST_F(DrainFileTest, SunnyDayPrepareDirectory) {
diff --git a/starboard/media.h b/starboard/media.h
index 8e30e81..4c36c8d 100644
--- a/starboard/media.h
+++ b/starboard/media.h
@@ -606,7 +606,7 @@
   // The number of bytes per second expected with this format.
   uint32_t average_bytes_per_second;
 
-  // Byte block alignment, e.g, 4.
+  // Byte block alignment, e.g., 4.
   uint16_t block_alignment;
 
   // The bit depth for the stream this represents, e.g. |8| or |16|.
@@ -805,7 +805,7 @@
 // media buffers will be stored in a temporary file in the system cache folder
 // acquired by calling SbSystemGetPath() with "kSbSystemPathCacheDirectory".
 // Note that when its value is "file" the media stack will still allocate memory
-// to cache the the buffers in use.
+// to cache the buffers in use.
 SB_EXPORT SbMediaBufferStorageType SbMediaGetBufferStorageType();
 
 // If SbMediaGetBufferUsingMemoryPool returns true, it indicates that media
diff --git a/starboard/nplb/BUILD.gn b/starboard/nplb/BUILD.gn
index 3f314cf..9880bd4 100644
--- a/starboard/nplb/BUILD.gn
+++ b/starboard/nplb/BUILD.gn
@@ -240,7 +240,7 @@
   configs -= [ "//build/config/compiler:no_exceptions" ]
 
   deps = [
-    "//starboard",
+    "//starboard:starboard_group",
     "//starboard/common",
     "//starboard/nplb/compiler_compliance:cpp14_supported",
     "//starboard/shared/starboard/media:media_util",
@@ -271,8 +271,8 @@
     cflags = [ "-Wno-enum-constexpr-conversion" ]
   }
 
-  #  TODO: b/297808555 - Add these tests for windows based platform modular builds.
-  if (sb_is_modular && !sb_is_evergreen && is_host_win) {
+  #  TODO: b/297808555 - Add these tests for all  modular builds.
+  if (sb_has_unused_symbol_issue) {
     sources -= [
       "maximum_player_configuration_explorer.cc",
       "maximum_player_configuration_explorer.h",
diff --git a/starboard/nplb/compiler_compliance/BUILD.gn b/starboard/nplb/compiler_compliance/BUILD.gn
index 58f1dd1..e3638c1 100644
--- a/starboard/nplb/compiler_compliance/BUILD.gn
+++ b/starboard/nplb/compiler_compliance/BUILD.gn
@@ -18,7 +18,7 @@
     "cpp14_initialization.cc",
   ]
   cflags_cc = [ "-std=c++14" ]
-  deps = [ "//starboard" ]
+  deps = [ "//starboard:starboard_group" ]
 }
 
 if (sb_enable_cpp17_audit) {
@@ -26,7 +26,7 @@
     sources = [ "cpp17_support.cc" ]
     deps = [
       ":cpp17_supported_config_shim",
-      "//starboard",
+      "//starboard:starboard_group",
     ]
   }
 
diff --git a/starboard/nplb/nplb_evergreen_compat_tests/BUILD.gn b/starboard/nplb/nplb_evergreen_compat_tests/BUILD.gn
index 6978098..c3d1590 100644
--- a/starboard/nplb/nplb_evergreen_compat_tests/BUILD.gn
+++ b/starboard/nplb/nplb_evergreen_compat_tests/BUILD.gn
@@ -27,7 +27,7 @@
   ]
 
   public_deps = [
-    "//starboard",
+    "//starboard:starboard_group",
     "//testing/gmock",
     "//testing/gtest",
   ]
diff --git a/starboard/nplb/player_write_sample_test.cc b/starboard/nplb/player_write_sample_test.cc
index 5bc1653..07ee97a 100644
--- a/starboard/nplb/player_write_sample_test.cc
+++ b/starboard/nplb/player_write_sample_test.cc
@@ -173,7 +173,7 @@
   }
 
   const SbTime kDurationToPlay = kSbTimeSecond;
-  const float kSegmentSize = 0.1f;
+  const float kSegmentSize = 0.3f;
 
   GroupedSamples samples;
   if (player_fixture.HasVideo()) {
@@ -229,7 +229,7 @@
                 << ".";
 }
 
-TEST_P(SbPlayerWriteSampleTest, PartialAudioDiscardAll) {
+TEST_P(SbPlayerWriteSampleTest, DiscardAllAudio) {
   if (!IsPartialAudioSupported()) {
     // TODO: Use GTEST_SKIP when we have a newer version of gtest.
     SB_LOG(INFO)
diff --git a/starboard/player.h b/starboard/player.h
index abf17a6..e7771c5 100644
--- a/starboard/player.h
+++ b/starboard/player.h
@@ -286,7 +286,7 @@
 
 // Callback to free the given sample buffer data.  When more than one buffer
 // are sent in SbPlayerWriteSample(), the implementation only has to call this
-// callback with |sample_buffer| points to the the first buffer.
+// callback with |sample_buffer| points to the first buffer.
 typedef void (*SbPlayerDeallocateSampleFunc)(SbPlayer player,
                                              void* context,
                                              const void* sample_buffer);
diff --git a/starboard/raspi/2/skia/toolchain/BUILD.gn b/starboard/raspi/2/skia/toolchain/BUILD.gn
index 8524670..83c0798 100644
--- a/starboard/raspi/2/skia/toolchain/BUILD.gn
+++ b/starboard/raspi/2/skia/toolchain/BUILD.gn
@@ -32,9 +32,7 @@
 }
 
 cobalt_clang_toolchain("cobalt") {
-  variables = {
-    native_linker_path = gcc_toolchain_cxx
-  }
+  native_linker_path = gcc_toolchain_cxx
 }
 
 gcc_toolchain("starboard") {
diff --git a/starboard/raspi/2/toolchain/BUILD.gn b/starboard/raspi/2/toolchain/BUILD.gn
index 2c49b20..2347494 100644
--- a/starboard/raspi/2/toolchain/BUILD.gn
+++ b/starboard/raspi/2/toolchain/BUILD.gn
@@ -17,9 +17,7 @@
 import("//starboard/raspi/shared/toolchain/raspi_shared_toolchain.gni")
 
 cobalt_clang_toolchain("cobalt") {
-  variables = {
-    native_linker_path = gcc_toolchain_cxx
-  }
+  native_linker_path = gcc_toolchain_cxx
 }
 
 gcc_toolchain("starboard") {
diff --git a/starboard/raspi/shared/install_target.gni b/starboard/raspi/shared/install_target.gni
index 7413840..cf74ac4 100644
--- a/starboard/raspi/shared/install_target.gni
+++ b/starboard/raspi/shared/install_target.gni
@@ -12,8 +12,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import("//starboard/build/config/starboard_target_type.gni")
 import("//starboard/raspi/shared/toolchain/raspi_shared_toolchain.gni")
+
 template("install_target") {
+  not_needed(invoker, [ "shared_library_target_name" ])
+
   installable_target_name = invoker.installable_target_name
 
   # TODO(b/218889313): raspi relies on install_content being adjacent to the
@@ -25,7 +29,12 @@
     source_name = installable_target_name
   } else if (invoker.type == "shared_library") {
     install_subdir = "lib"
-    source_name = "lib${installable_target_name}.so"
+    if (installable_target_name == "starboard") {
+      source_name =
+          "lib${installable_target_name}.${starboard_shared_library_extension}"
+    } else {
+      source_name = "lib${installable_target_name}.so"
+    }
   } else {
     assert(false, "You can only install an executable or shared library.")
   }
diff --git a/starboard/shared/ffmpeg/BUILD.gn b/starboard/shared/ffmpeg/BUILD.gn
index 5ad4693..ed5b5e4 100644
--- a/starboard/shared/ffmpeg/BUILD.gn
+++ b/starboard/shared/ffmpeg/BUILD.gn
@@ -116,7 +116,7 @@
   deps = [
     ":ffmpeg_dispatch_sources",
     "//cobalt/test:run_all_unittests",
-    "//starboard",
+    "//starboard:starboard_group",
     "//starboard/common",
     "//testing/gmock",
     "//testing/gtest",
diff --git a/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.cc b/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.cc
index 0816518..d56b562 100644
--- a/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.cc
+++ b/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.cc
@@ -83,6 +83,7 @@
       audio_stream_info_(creation_param->audio_sample_info),
 #endif  // SB_API_VERSION >= 15
       output_mode_(creation_param->output_mode),
+      max_video_input_size_(0),
       decode_target_graphics_context_provider_(provider),
 #if SB_API_VERSION >= 15
       video_stream_info_(creation_param->video_stream_info) {
@@ -138,7 +139,8 @@
 
   PlayerComponents::Factory::CreationParameters creation_parameters(
       audio_stream_info_, video_stream_info_, player_, output_mode_,
-      decode_target_graphics_context_provider_, drm_system_);
+      max_video_input_size_, decode_target_graphics_context_provider_,
+      drm_system_);
 
   {
     ::starboard::ScopedLock lock(player_components_existence_mutex_);
@@ -546,6 +548,13 @@
   return decode_target;
 }
 
+void FilterBasedPlayerWorkerHandler::SetMaxVideoInputSize(
+    int max_video_input_size) {
+  SB_LOG(INFO) << "Set max_video_input_size from " << max_video_input_size_
+               << " to " << max_video_input_size;
+  max_video_input_size_ = max_video_input_size;
+}
+
 }  // namespace filter
 }  // namespace player
 }  // namespace starboard
diff --git a/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.h b/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.h
index e553774..d195e15 100644
--- a/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.h
+++ b/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.h
@@ -61,6 +61,7 @@
   HandlerResult SetPlaybackRate(double playback_rate) override;
   void SetVolume(double volume) override;
   HandlerResult SetBounds(const Bounds& bounds) override;
+  void SetMaxVideoInputSize(int max_video_input_size) override;
   void Stop() override;
 
   void Update();
@@ -111,6 +112,7 @@
   bool video_ended_ = false;
 
   SbPlayerOutputMode output_mode_;
+  int max_video_input_size_;
   SbDecodeTargetGraphicsContextProvider*
       decode_target_graphics_context_provider_;
   const media::VideoStreamInfo video_stream_info_;
diff --git a/starboard/shared/starboard/player/filter/player_components.cc b/starboard/shared/starboard/player/filter/player_components.cc
index 624efd6..04dfc4d 100644
--- a/starboard/shared/starboard/player/filter/player_components.cc
+++ b/starboard/shared/starboard/player/filter/player_components.cc
@@ -93,12 +93,14 @@
     const media::VideoStreamInfo& video_stream_info,
     SbPlayer player,
     SbPlayerOutputMode output_mode,
+    int max_video_input_size,
     SbDecodeTargetGraphicsContextProvider*
         decode_target_graphics_context_provider,
     SbDrmSystem drm_system)
     : video_stream_info_(video_stream_info),
       player_(player),
       output_mode_(output_mode),
+      max_video_input_size_(max_video_input_size),
       decode_target_graphics_context_provider_(
           decode_target_graphics_context_provider),
       drm_system_(drm_system) {
@@ -112,6 +114,7 @@
     const media::VideoStreamInfo& video_stream_info,
     SbPlayer player,
     SbPlayerOutputMode output_mode,
+    int max_video_input_size,
     SbDecodeTargetGraphicsContextProvider*
         decode_target_graphics_context_provider,
     SbDrmSystem drm_system)
@@ -119,6 +122,7 @@
       video_stream_info_(video_stream_info),
       player_(player),
       output_mode_(output_mode),
+      max_video_input_size_(max_video_input_size),
       decode_target_graphics_context_provider_(
           decode_target_graphics_context_provider),
       drm_system_(drm_system) {
@@ -132,6 +136,7 @@
   this->video_stream_info_ = that.video_stream_info_;
   this->player_ = that.player_;
   this->output_mode_ = that.output_mode_;
+  this->max_video_input_size_ = that.max_video_input_size_;
   this->decode_target_graphics_context_provider_ =
       that.decode_target_graphics_context_provider_;
   this->drm_system_ = that.drm_system_;
diff --git a/starboard/shared/starboard/player/filter/player_components.h b/starboard/shared/starboard/player/filter/player_components.h
index 8e067e9..4990ec4 100644
--- a/starboard/shared/starboard/player/filter/player_components.h
+++ b/starboard/shared/starboard/player/filter/player_components.h
@@ -66,6 +66,7 @@
       CreationParameters(const media::VideoStreamInfo& video_stream_info,
                          SbPlayer player,
                          SbPlayerOutputMode output_mode,
+                         int max_video_input_size,
                          SbDecodeTargetGraphicsContextProvider*
                              decode_target_graphics_context_provider,
                          SbDrmSystem drm_system = kSbDrmSystemInvalid);
@@ -73,6 +74,7 @@
                          const media::VideoStreamInfo& video_stream_info,
                          SbPlayer player,
                          SbPlayerOutputMode output_mode,
+                         int max_video_input_size,
                          SbDecodeTargetGraphicsContextProvider*
                              decode_target_graphics_context_provider,
                          SbDrmSystem drm_system = kSbDrmSystemInvalid);
@@ -117,6 +119,7 @@
 
       SbPlayer player() const { return player_; }
       SbPlayerOutputMode output_mode() const { return output_mode_; }
+      int max_video_input_size() const { return max_video_input_size_; }
       SbDecodeTargetGraphicsContextProvider*
       decode_target_graphics_context_provider() const {
         SB_DCHECK(video_stream_info_.codec != kSbMediaVideoCodecNone);
@@ -137,6 +140,7 @@
       media::VideoStreamInfo video_stream_info_;
       SbPlayer player_ = kSbPlayerInvalid;
       SbPlayerOutputMode output_mode_ = kSbPlayerOutputModeInvalid;
+      int max_video_input_size_ = 0;
       SbDecodeTargetGraphicsContextProvider*
           decode_target_graphics_context_provider_ = nullptr;
 
diff --git a/starboard/shared/starboard/player/filter/testing/BUILD.gn b/starboard/shared/starboard/player/filter/testing/BUILD.gn
index d1cb5be..ad2dd0e 100644
--- a/starboard/shared/starboard/player/filter/testing/BUILD.gn
+++ b/starboard/shared/starboard/player/filter/testing/BUILD.gn
@@ -79,7 +79,7 @@
     public_configs = [ "//starboard/build/config:starboard_implementation" ]
 
     public_deps = [
-      "//starboard",
+      "//starboard:starboard_group",
       "//starboard/shared/starboard/media:media_util",
       "//starboard/shared/starboard/player:player_download_test_data",
       "//starboard/shared/starboard/player:video_dmp",
diff --git a/starboard/shared/starboard/player/filter/testing/player_components_test.cc b/starboard/shared/starboard/player/filter/testing/player_components_test.cc
index 0e3b3ad..618c0b1 100644
--- a/starboard/shared/starboard/player/filter/testing/player_components_test.cc
+++ b/starboard/shared/starboard/player/filter/testing/player_components_test.cc
@@ -49,7 +49,7 @@
 typedef VideoDmpReader::AudioAccessUnit AudioAccessUnit;
 typedef VideoDmpReader::VideoAccessUnit VideoAccessUnit;
 typedef PlayerComponents::Factory::CreationParameters CreationParameters;
-typedef std::tuple<const char*, const char*, SbPlayerOutputMode>
+typedef std::tuple<const char*, const char*, SbPlayerOutputMode, int>
     PlayerComponentsTestParam;
 
 const SbTimeMonotonic kDefaultPrerollTimeOut = 5 * kSbTimeSecond;
@@ -64,12 +64,14 @@
   PlayerComponentsTest()
       : audio_filename_(std::get<0>(GetParam())),
         video_filename_(std::get<1>(GetParam())),
-        output_mode_(std::get<2>(GetParam())) {
+        output_mode_(std::get<2>(GetParam())),
+        max_video_input_size_(std::get<3>(GetParam())) {
     SB_LOG(INFO) << "Testing: \"" << audio_filename_ << "\", \""
                  << video_filename_
                  << (output_mode_ == kSbPlayerOutputModeDecodeToTexture
-                         ? "\", kSbPlayerOutputModeDecodeToTexture."
-                         : "\", kSbPlayerOutputModePunchOut.");
+                         ? "\", kSbPlayerOutputModeDecodeToTexture, "
+                         : "\", kSbPlayerOutputModePunchOut, ")
+                 << max_video_input_size_ << ".";
   }
 
   void SetUp() override {
@@ -89,7 +91,10 @@
       CreationParameters creation_parameters(
           audio_reader_->audio_stream_info(),
           video_reader_->video_stream_info(), kDummyPlayer, output_mode_,
+          max_video_input_size_,
           fake_graphics_context_provider_.decoder_target_provider());
+      ASSERT_EQ(creation_parameters.max_video_input_size(),
+                max_video_input_size_);
       player_components_ =
           factory->CreateComponents(creation_parameters, &error_message);
     } else if (audio_reader_) {
@@ -103,7 +108,10 @@
       ASSERT_TRUE(video_reader_);
       CreationParameters creation_parameters(
           video_reader_->video_stream_info(), kDummyPlayer, output_mode_,
+          max_video_input_size_,
           fake_graphics_context_provider_.decoder_target_provider());
+      ASSERT_EQ(creation_parameters.max_video_input_size(),
+                max_video_input_size_);
       player_components_ =
           factory->CreateComponents(creation_parameters, &error_message);
     }
@@ -471,6 +479,7 @@
   const std::string audio_filename_;
   const std::string video_filename_;
   const SbPlayerOutputMode output_mode_;
+  const int max_video_input_size_;
   JobQueue job_queue_;
   FakeGraphicsContextProvider fake_graphics_context_provider_;
   unique_ptr<VideoDmpReader> audio_reader_;
@@ -491,12 +500,14 @@
   std::string audio_filename(std::get<0>(info.param));
   std::string video_filename(std::get<1>(info.param));
   SbPlayerOutputMode output_mode = std::get<2>(info.param);
+  int max_video_input_size = std::get<3>(info.param);
 
   std::string config_name(FormatString(
-      "%s_%s_%s", audio_filename.empty() ? "null" : audio_filename.c_str(),
+      "%s_%s_%s_%d", audio_filename.empty() ? "null" : audio_filename.c_str(),
       video_filename.empty() ? "null" : video_filename.c_str(),
       output_mode == kSbPlayerOutputModeDecodeToTexture ? "DecodeToTexture"
-                                                        : "Punchout"));
+                                                        : "Punchout",
+      max_video_input_size));
 
   std::replace(config_name.begin(), config_name.end(), '.', '_');
   return config_name;
@@ -675,13 +686,15 @@
 }
 
 PlayerComponentsTestParam CreateParam(const char* audio_file,
-                                      const VideoTestParam& video_param) {
+                                      const VideoTestParam& video_param,
+                                      const int max_video_input_size) {
   return std::make_tuple(audio_file, std::get<0>(video_param),
-                         std::get<1>(video_param));
+                         std::get<1>(video_param), max_video_input_size);
 }
 
 vector<PlayerComponentsTestParam> GetSupportedCreationParameters() {
   vector<PlayerComponentsTestParam> supported_parameters;
+  int max_video_input_size = 0;
 
   // TODO: Enable tests of "heaac.dmp".
   vector<const char*> audio_files =
@@ -708,10 +721,11 @@
   }
 
   for (size_t i = 0; i < video_params.size(); i++) {
-    supported_parameters.push_back(CreateParam("", video_params[i]));
+    supported_parameters.push_back(
+        CreateParam("", video_params[i], max_video_input_size));
     for (size_t j = 0; j < audio_files.size(); j++) {
       supported_parameters.push_back(
-          CreateParam(audio_files[j], video_params[i]));
+          CreateParam(audio_files[j], video_params[i], max_video_input_size));
     }
   }
   SB_DCHECK(supported_parameters.size() < 50)
@@ -723,13 +737,15 @@
             kSbPlayerOutputModeDecodeToTexture, kSbMediaVideoCodecNone,
             kSbDrmSystemInvalid)) {
       supported_parameters.push_back(std::make_tuple(
-          audio_files[i], "", kSbPlayerOutputModeDecodeToTexture));
+          audio_files[i], "", kSbPlayerOutputModeDecodeToTexture,
+          max_video_input_size));
     }
     if (PlayerComponents::Factory::OutputModeSupported(
             kSbPlayerOutputModePunchOut, kSbMediaVideoCodecNone,
             kSbDrmSystemInvalid)) {
       supported_parameters.push_back(
-          std::make_tuple(audio_files[i], "", kSbPlayerOutputModePunchOut));
+          std::make_tuple(audio_files[i], "", kSbPlayerOutputModePunchOut,
+                          max_video_input_size));
     }
   }
 
diff --git a/starboard/shared/starboard/player/filter/testing/video_decoder_test.cc b/starboard/shared/starboard/player/filter/testing/video_decoder_test.cc
index 02013b6..559dad7 100644
--- a/starboard/shared/starboard/player/filter/testing/video_decoder_test.cc
+++ b/starboard/shared/starboard/player/filter/testing/video_decoder_test.cc
@@ -143,54 +143,59 @@
       kSbMediaVideoCodecNone,  kSbMediaVideoCodecH264,   kSbMediaVideoCodecH265,
       kSbMediaVideoCodecMpeg2, kSbMediaVideoCodecTheora, kSbMediaVideoCodecVc1,
       kSbMediaVideoCodecAv1,   kSbMediaVideoCodecVp8,    kSbMediaVideoCodecVp9};
+  int kMaxVideoInputSizes[] = {0, 777000, 3110500};
 
   for (auto output_mode : kOutputModes) {
     for (auto video_codec : kVideoCodecs) {
-      if (PlayerComponents::Factory::OutputModeSupported(
-              output_mode, video_codec, kSbDrmSystemInvalid)) {
-        SbPlayerPrivate players[kDecodersToCreate];
-        scoped_ptr<VideoDecoder> video_decoders[kDecodersToCreate];
-        scoped_ptr<VideoRenderAlgorithm>
-            video_render_algorithms[kDecodersToCreate];
-        scoped_refptr<VideoRendererSink>
-            video_renderer_sinks[kDecodersToCreate];
+      for (auto max_video_input_size : kMaxVideoInputSizes) {
+        if (PlayerComponents::Factory::OutputModeSupported(
+                output_mode, video_codec, kSbDrmSystemInvalid)) {
+          SbPlayerPrivate players[kDecodersToCreate];
+          scoped_ptr<VideoDecoder> video_decoders[kDecodersToCreate];
+          scoped_ptr<VideoRenderAlgorithm>
+              video_render_algorithms[kDecodersToCreate];
+          scoped_refptr<VideoRendererSink>
+              video_renderer_sinks[kDecodersToCreate];
 
-        for (int i = 0; i < kDecodersToCreate; ++i) {
-          SbMediaAudioSampleInfo dummy_audio_sample_info = {
-              kSbMediaAudioCodecNone};
-          PlayerComponents::Factory::CreationParameters creation_parameters(
-              CreateVideoStreamInfo(fixture_.dmp_reader().video_codec()),
-              &players[i], output_mode,
-              fake_graphics_context_provider_.decoder_target_provider(),
-              nullptr);
+          for (int i = 0; i < kDecodersToCreate; ++i) {
+            SbMediaAudioSampleInfo dummy_audio_sample_info = {
+                kSbMediaAudioCodecNone};
+            PlayerComponents::Factory::CreationParameters creation_parameters(
+                CreateVideoStreamInfo(fixture_.dmp_reader().video_codec()),
+                &players[i], output_mode, max_video_input_size,
+                fake_graphics_context_provider_.decoder_target_provider(),
+                nullptr);
+            ASSERT_EQ(creation_parameters.max_video_input_size(),
+                      max_video_input_size);
 
-          std::string error_message;
-          ASSERT_TRUE(factory->CreateSubComponents(
-              creation_parameters, nullptr, nullptr, &video_decoders[i],
-              &video_render_algorithms[i], &video_renderer_sinks[i],
-              &error_message));
-          ASSERT_TRUE(video_decoders[i]);
+            std::string error_message;
+            ASSERT_TRUE(factory->CreateSubComponents(
+                creation_parameters, nullptr, nullptr, &video_decoders[i],
+                &video_render_algorithms[i], &video_renderer_sinks[i],
+                &error_message));
+            ASSERT_TRUE(video_decoders[i]);
 
-          if (video_renderer_sinks[i]) {
-            video_renderer_sinks[i]->SetRenderCB(
-                std::bind(&VideoDecoderTestFixture::Render, &fixture_, _1));
-          }
+            if (video_renderer_sinks[i]) {
+              video_renderer_sinks[i]->SetRenderCB(
+                  std::bind(&VideoDecoderTestFixture::Render, &fixture_, _1));
+            }
 
-          video_decoders[i]->Initialize(
-              std::bind(&VideoDecoderTestFixture::OnDecoderStatusUpdate,
-                        &fixture_, _1, _2),
-              std::bind(&VideoDecoderTestFixture::OnError, &fixture_));
+            video_decoders[i]->Initialize(
+                std::bind(&VideoDecoderTestFixture::OnDecoderStatusUpdate,
+                          &fixture_, _1, _2),
+                std::bind(&VideoDecoderTestFixture::OnError, &fixture_));
 
 #if SB_HAS(GLES2)
-          if (output_mode == kSbPlayerOutputModeDecodeToTexture) {
-            fixture_.AssertInvalidDecodeTarget();
-          }
+            if (output_mode == kSbPlayerOutputModeDecodeToTexture) {
+              fixture_.AssertInvalidDecodeTarget();
+            }
 #endif  // SB_HAS(GLES2)
-        }
-        if (fixture_.HasPendingEvents()) {
-          bool error_occurred = false;
-          ASSERT_NO_FATAL_FAILURE(fixture_.DrainOutputs(&error_occurred));
-          ASSERT_FALSE(error_occurred);
+          }
+          if (fixture_.HasPendingEvents()) {
+            bool error_occurred = false;
+            ASSERT_NO_FATAL_FAILURE(fixture_.DrainOutputs(&error_occurred));
+            ASSERT_FALSE(error_occurred);
+          }
         }
       }
     }
diff --git a/starboard/shared/starboard/player/filter/testing/video_decoder_test_fixture.cc b/starboard/shared/starboard/player/filter/testing/video_decoder_test_fixture.cc
index 0d73ff0..bf9a2e7 100644
--- a/starboard/shared/starboard/player/filter/testing/video_decoder_test_fixture.cc
+++ b/starboard/shared/starboard/player/filter/testing/video_decoder_test_fixture.cc
@@ -84,10 +84,13 @@
   SbPlayerOutputMode output_mode = output_mode_;
   ASSERT_TRUE(PlayerComponents::Factory::OutputModeSupported(
       output_mode, dmp_reader_.video_codec(), kSbDrmSystemInvalid));
+  int max_video_input_size = 0;
 
   PlayerComponents::Factory::CreationParameters creation_parameters(
       GetVideoInputBuffer(0)->video_stream_info(), &player_, output_mode,
+      max_video_input_size,
       fake_graphics_context_provider_->decoder_target_provider(), nullptr);
+  ASSERT_EQ(creation_parameters.max_video_input_size(), max_video_input_size);
 
   scoped_ptr<PlayerComponents::Factory> factory;
   if (using_stub_decoder_) {
diff --git a/starboard/shared/starboard/player/filter/wsola_internal.cc b/starboard/shared/starboard/player/filter/wsola_internal.cc
index deb2928..ad4e1bf 100644
--- a/starboard/shared/starboard/player/filter/wsola_internal.cc
+++ b/starboard/shared/starboard/player/filter/wsola_internal.cc
@@ -33,11 +33,13 @@
 #include "starboard/common/scoped_ptr.h"
 #include "starboard/memory.h"
 
-// TODO: Detect Neon on ARM platform and enable SIMD.
 #if SB_IS(ARCH_X86) || SB_IS(ARCH_X64)
 #define USE_SIMD 1
 #include <xmmintrin.h>
-#endif  // SB_IS(ARCH_X86) || SB_IS(ARCH_X64)
+#elif (SB_IS(ARCH_ARM) || SB_IS(ARCH_ARM64)) && defined(USE_NEON)
+#define USE_SIMD 1
+#include <arm_neon.h>
+#endif
 
 namespace starboard {
 namespace shared {
@@ -111,7 +113,7 @@
     // Reduce to a single float for this channel.
     float32x2_t m_half = vadd_f32(vget_high_f32(m_sum), vget_low_f32(m_sum));
     dot_product[ch] = vget_lane_f32(vpadd_f32(m_half, m_half), 0);
-#endif  // SB_IS(ARCH_X86) || SB_IS(ARCH_X64)
+#endif
   }
 
   if (!rem) {
diff --git a/starboard/shared/starboard/player/player_worker.h b/starboard/shared/starboard/player/player_worker.h
index 96bae3d..aed0650 100644
--- a/starboard/shared/starboard/player/player_worker.h
+++ b/starboard/shared/starboard/player/player_worker.h
@@ -111,6 +111,8 @@
 
     virtual SbDecodeTarget GetCurrentDecodeTarget() = 0;
 
+    virtual void SetMaxVideoInputSize(int max_video_input_size) = 0;
+
    private:
     Handler(const Handler&) = delete;
     Handler& operator=(const Handler&) = delete;
diff --git a/starboard/shared/uwp/extended_resources_manager.cc b/starboard/shared/uwp/extended_resources_manager.cc
index 21d2821..e8a730b 100644
--- a/starboard/shared/uwp/extended_resources_manager.cc
+++ b/starboard/shared/uwp/extended_resources_manager.cc
@@ -68,8 +68,10 @@
 //
 // To make playback more smooth it is better to increase the output queue size
 // up to 30-50 frames, but it should not exceed memory budgetd.
-// So, the value of 440 Mb looks as compromise.
-const uint64_t kFrameBuffersPoolMemorySize = 440 * 1024 * 1024;
+// Compromise value was found out experimentally.
+// 400 Mb leaves enough memory for stable working of the rest system.
+// Just in case to be more sure we reduce this value down to 380 Mb.
+const uint64_t kFrameBuffersPoolMemorySize = 380 * 1024 * 1024;
 
 bool IsExtendedResourceModeRequired() {
   if (!::starboard::xb1::shared::CanAcquire()) {
diff --git a/starboard/shared/widevine/drm_system_widevine.cc b/starboard/shared/widevine/drm_system_widevine.cc
index 3320eba..8ec4544 100644
--- a/starboard/shared/widevine/drm_system_widevine.cc
+++ b/starboard/shared/widevine/drm_system_widevine.cc
@@ -238,7 +238,7 @@
 
   static WidevineStorage s_storage(GetWidevineStoragePath());
   EnsureWidevineCdmIsInitialized(company_name, model_name, &s_storage);
-  const bool kEnablePrivacyMode = true;
+  const bool kEnablePrivacyMode = false;
   cdm_.reset(wv3cdm::create(this, &s_storage, kEnablePrivacyMode));
   SB_DCHECK(cdm_);
 
@@ -633,8 +633,8 @@
   }
 }
 
-void DrmSystemWidevine::onKeyStatusesChange(
-    const std::string& wvcdm_session_id) {
+void DrmSystemWidevine::onKeyStatusesChange(const std::string& wvcdm_session_id,
+                                            bool has_new_usable_key) {
   wv3cdm::KeyStatusMap key_statuses;
   wv3cdm::Status status = cdm_->getKeyStatuses(wvcdm_session_id, &key_statuses);
 
diff --git a/starboard/shared/widevine/drm_system_widevine.h b/starboard/shared/widevine/drm_system_widevine.h
index af39389..6a9d286 100644
--- a/starboard/shared/widevine/drm_system_widevine.h
+++ b/starboard/shared/widevine/drm_system_widevine.h
@@ -117,7 +117,9 @@
                  ::widevine::Cdm::MessageType message_type,
                  const std::string& message) override;
   // There has been a change in the keys in the session or their status.
-  void onKeyStatusesChange(const std::string& wvcdm_session_id) override;
+  void onKeyStatusesChange(const std::string& wvcdm_session_id,
+                           bool has_new_usable_key) override;
+
   // A remove() operation has been completed.
   void onRemoveComplete(const std::string& wvcdm_session_id) override;
   // Called when a deferred action has completed.
diff --git a/starboard/shared/win32/socket_set_tcp_window_scaling.cc b/starboard/shared/win32/socket_set_tcp_window_scaling.cc
index 0e73066..091af3c 100644
--- a/starboard/shared/win32/socket_set_tcp_window_scaling.cc
+++ b/starboard/shared/win32/socket_set_tcp_window_scaling.cc
@@ -30,6 +30,9 @@
   // later, receive window auto-tuning is enabled and the TCP window scale
   // factor is reduced to 2 from the default value of 8."
 
+  if (socket == kSbSocketInvalid)
+    return false;
+
   const ULONG target_os_version =
       enable_window_scaling ? NTDDI_VISTA : NTDDI_WS03;
   WSA_COMPATIBILITY_MODE compatibility_mode = {WsaBehaviorAutoTuning,
diff --git a/starboard/tools/BUILD.gn b/starboard/tools/BUILD.gn
index 27dca14..6e1cc2f 100644
--- a/starboard/tools/BUILD.gn
+++ b/starboard/tools/BUILD.gn
@@ -12,7 +12,15 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-action("build_app_launcher_zip") {
+group("build_app_launcher_zip") {
+  deps = [
+    ":package_app_launcher_directory",
+    ":package_app_launcher_zip",
+  ]
+}
+
+# TODO(b/294130306): Get rid of app_launcher.zip.
+action("package_app_launcher_zip") {
   script = "//starboard/tools/app_launcher_packager.py"
 
   file_list = exec_script(script, [ "-l" ], "trim string")
@@ -20,7 +28,23 @@
   outputs = [ "$root_out_dir/app_launcher.zip" ]
 
   args = [
+    # TODO(b/294130306): Control this flag with a GN variable.
+    "--include_integration_tests",
     "-z",
     rebase_path(outputs[0], root_build_dir),
   ]
 }
+
+# Platforms that has windows based toolchains (ps4/5, xb1, switch) expect the
+# app launcher files to be in a folder in the test archive as opposed to in a
+# zip file.
+copy("package_app_launcher_directory") {
+  script = "//starboard/tools/app_launcher_packager.py"
+
+  app_launcher_dir = "$root_out_dir/app_launcher"
+
+  file_list = exec_script(script, [ "-l" ], "trim string")
+  sources = string_split(file_list)
+  outputs =
+      [ "$app_launcher_dir/{{source_root_relative_dir}}/{{source_file_part}}" ]
+}
diff --git a/starboard/tools/app_launcher_packager.py b/starboard/tools/app_launcher_packager.py
index f8ae9ba..fff419b 100644
--- a/starboard/tools/app_launcher_packager.py
+++ b/starboard/tools/app_launcher_packager.py
@@ -45,7 +45,7 @@
     ('starboard/tools/testing', 'sharding_configuration.json')
 ]
 
-_INCLUDE_BLACK_BOX_TESTS_PATTERNS = [
+_INCLUDE_INTEGRATION_TESTS_PATTERNS = [
     # Black box and web platform tests have non-py assets, so everything
     # is picked up.
     ('cobalt/black_box_tests', '*'),
@@ -105,7 +105,8 @@
 def CopyAppLauncherTools(repo_root,
                          dest_root,
                          additional_glob_patterns=None,
-                         include_black_box_tests=True):
+                         include_black_box_tests=False,
+                         include_integration_tests=False):
   """Copies app launcher related files to the destination root.
 
   Args:
@@ -114,12 +115,16 @@
     additional_glob_patterns: Some platforms may need to include certain
       dependencies beyond the default include file patterns. The results here
       will be merged in with _INCLUDE_FILE_PATTERNS.
-    include_black_box_tests: If True then the resources for the black box tests
-      are included.
+    include_integration_tests: If True then the resources for the integration
+      tests are included.
+    include_black_box_tests: Same as above. Kept for compatibility reasons.
   """
+  # TODO(b/294129333): Remove include_black_box_tests when DS is gone.
+  include_integration_tests = (
+      include_integration_tests or include_black_box_tests)
   dest_root = _PrepareDestination(dest_root)
   copy_list = _GetSourceFilesList(repo_root, additional_glob_patterns,
-                                  include_black_box_tests)
+                                  include_integration_tests)
   _CopyFiles(repo_root, dest_root, copy_list)
 
 
@@ -140,13 +145,13 @@
 def _GetSourceFilesList(  # pylint: disable=missing-docstring
     repo_root,
     additional_glob_patterns=None,
-    include_black_box_tests=True):
+    include_integration_tests=False):
   # Find all glob files from specified search directories.
   include_glob_patterns = _INCLUDE_FILE_PATTERNS
   if additional_glob_patterns:
     include_glob_patterns += additional_glob_patterns
-  if include_black_box_tests:
-    include_glob_patterns += _INCLUDE_BLACK_BOX_TESTS_PATTERNS
+  if include_integration_tests:
+    include_glob_patterns += _INCLUDE_INTEGRATION_TESTS_PATTERNS
   copy_list = []
   for d, glob_pattern in include_glob_patterns:
     flist = _FindFilesRecursive(os.path.join(repo_root, d), glob_pattern)
@@ -222,6 +227,10 @@
       action='store_true',
       help='Return the application resources instead of printing them.')
   parser.add_argument(
+      '--include_integration_tests',
+      action='store_true',
+      help='Includes integration test files.')
+  parser.add_argument(
       '-v',
       '--verbose',
       action='store_true',
@@ -232,17 +241,25 @@
   log_level.InitializeLogging(args)
 
   if args.destination_root:
-    CopyAppLauncherTools(REPOSITORY_ROOT, args.destination_root)
+    CopyAppLauncherTools(
+        REPOSITORY_ROOT,
+        args.destination_root,
+        include_integration_tests=args.include_integration_tests)
   elif args.zip_file:
     try:
       temp_dir = tempfile.mkdtemp(prefix='cobalt_app_launcher_')
-      CopyAppLauncherTools(REPOSITORY_ROOT, temp_dir)
+      CopyAppLauncherTools(
+          REPOSITORY_ROOT,
+          temp_dir,
+          include_integration_tests=args.include_integration_tests)
       MakeZipArchive(temp_dir, args.zip_file)
     finally:
       shutil.rmtree(temp_dir)
   elif args.list:
     src_files = []
-    for src_file in _GetSourceFilesList(REPOSITORY_ROOT):
+    for src_file in _GetSourceFilesList(
+        REPOSITORY_ROOT,
+        include_integration_tests=args.include_integration_tests):
       # Skip paths with '$' since they won't get through the Ninja generator.
       if '$' in src_file:
         continue
@@ -257,10 +274,5 @@
   return 0
 
 
-def DoMain(argv):
-  """Script main function."""
-  return main(argv)
-
-
 if __name__ == '__main__':
   sys.exit(main(sys.argv[1:]))
diff --git a/starboard/tools/build.py b/starboard/tools/build.py
index ae9fc04..4c9f513 100644
--- a/starboard/tools/build.py
+++ b/starboard/tools/build.py
@@ -15,8 +15,9 @@
 #
 """Build related constants and helper functions."""
 
-import imp  # pylint: disable=deprecated-module
 import importlib
+import importlib.machinery
+import importlib.util
 import logging
 import os
 import sys
@@ -94,7 +95,12 @@
                                    PLATFORMS[platform_name])
       module_path = os.path.join(platform_path, file_name)
       if not _ModuleLoaded('platform_module', module_path):
-        platform_module = imp.load_source('platform_module', module_path)
+        loader = importlib.machinery.SourceFileLoader('platform_module',
+                                                      module_path)
+        spec = importlib.util.spec_from_file_location(
+            'platform_module', module_path, loader=loader)
+        platform_module = importlib.util.module_from_spec(spec)
+        loader.exec_module(platform_module)
       else:
         platform_module = sys.modules['platform_module']
     else:
diff --git a/starboard/tools/testing/test_runner.py b/starboard/tools/testing/test_runner.py
index 0fb343a..0c48536 100755
--- a/starboard/tools/testing/test_runner.py
+++ b/starboard/tools/testing/test_runner.py
@@ -86,13 +86,14 @@
 def _VerifyConfig(config, filters):
   """Ensures a platform or app config is self-consistent."""
   targets = config.GetTestTargets()
+  blackbox_targets = config.GetTestBlackBoxTargets()
   filter_targets = [
       f.target_name for f in filters if f != test_filter.DISABLE_TESTING
   ]
 
   # Filters must be defined in the same config as the targets they're filtering,
   # platform filters in platform config, and app filters in app config.
-  unknown_targets = set(filter_targets) - set(targets)
+  unknown_targets = set(filter_targets) - set(targets) - set(blackbox_targets)
   if unknown_targets:
     raise ValueError("Unknown filter targets in {} config ({}): {}".format(
         config.GetName(), config.__class__.__name__, sorted(unknown_targets)))
diff --git a/starboard/win/shared/platform_configuration/configuration.gni b/starboard/win/shared/platform_configuration/configuration.gni
index 1798610..74fe806 100644
--- a/starboard/win/shared/platform_configuration/configuration.gni
+++ b/starboard/win/shared/platform_configuration/configuration.gni
@@ -27,5 +27,3 @@
     "//starboard/win/shared/platform_configuration:pedantic_warnings"
 
 cobalt_platform_dependencies = [ "//starboard/egl_and_gles" ]
-
-sb_enable_cpp17_audit = false
diff --git a/starboard/xb1/platform_configuration/BUILD.gn b/starboard/xb1/platform_configuration/BUILD.gn
index db2a0b2..85a72d6 100644
--- a/starboard/xb1/platform_configuration/BUILD.gn
+++ b/starboard/xb1/platform_configuration/BUILD.gn
@@ -39,6 +39,7 @@
     # The warning "Padding was added at the end of a structure" happens
     # in the library third_party/internal/libav1_xb1.
     "/wd4324",
+    "/Zc:__cplusplus",  # enable preprocessor macro for language support
   ]
 
   if (is_debug || is_devel) {
diff --git a/starboard/xb1/shared/BUILD.gn b/starboard/xb1/shared/BUILD.gn
index 9fd99b9..a3a3538 100644
--- a/starboard/xb1/shared/BUILD.gn
+++ b/starboard/xb1/shared/BUILD.gn
@@ -23,7 +23,7 @@
   configs += [ "//starboard/build/config:starboard_implementation" ]
 
   deps = [
-    "//starboard",
+    "//starboard:starboard_group",
     "//testing/gmock",
     "//testing/gtest",
   ]
diff --git a/starboard/xb1/shared/gpu_base_video_decoder.cc b/starboard/xb1/shared/gpu_base_video_decoder.cc
index 84bab91..6cdc999 100644
--- a/starboard/xb1/shared/gpu_base_video_decoder.cc
+++ b/starboard/xb1/shared/gpu_base_video_decoder.cc
@@ -555,11 +555,14 @@
   {
     ScopedLock input_queue_lock(written_inputs_mutex_);
     const auto iter = FindByTimestamp(written_inputs_, timestamp);
-    SB_DCHECK(iter != written_inputs_.cend());
-    if (is_hdr_video_) {
-      image->AttachColorMetadata((*iter)->video_stream_info().color_metadata);
+    // Reset might be called too early, cause clearing of written_inputs_ and
+    // absence of requested timestamp.
+    if (iter != written_inputs_.cend()) {
+      if (is_hdr_video_) {
+        image->AttachColorMetadata((*iter)->video_stream_info().color_metadata);
+      }
+      written_inputs_.erase(iter);
     }
-    written_inputs_.erase(iter);
   }
   scoped_refptr<VideoFrameImpl> frame(new VideoFrameImpl(
       timestamp, std::bind(&GpuVideoDecoderBase::DeleteVideoFrame, this,
diff --git a/third_party/QR-Code-generator/BUILD.gn b/third_party/QR-Code-generator/BUILD.gn
index 53153fd..260aed5 100644
--- a/third_party/QR-Code-generator/BUILD.gn
+++ b/third_party/QR-Code-generator/BUILD.gn
@@ -22,5 +22,5 @@
     "cpp/QrSegment.hpp",
   ]
   include_dirs = [ "." ]
-  deps = [ "//starboard" ]
+  deps = [ "//starboard:starboard_group", ]
 }
diff --git a/third_party/boringssl/BUILD.gn b/third_party/boringssl/BUILD.gn
index 51f71e4..fbc4a85 100644
--- a/third_party/boringssl/BUILD.gn
+++ b/third_party/boringssl/BUILD.gn
@@ -1,5 +1,6 @@
 import("//starboard/sabi/sabi.gni")
 import("//third_party/boringssl/buildfiles.gni")
+import("//starboard/build/config/os_definitions.gni")
 
 declare_args() {
   asm_target_arch = target_cpu
@@ -107,7 +108,7 @@
       if ((calling_convention != "aarch64" && calling_convention != "eabi" &&
            calling_convention != "sysv" && calling_convention != "windows") ||
           (asm_target_arch != "x86" && asm_target_arch != "x64" &&
-           asm_target_arch != "arm" && asm_target_arch != "arm64")) {
+           asm_target_arch != "arm" && asm_target_arch != "arm64") || is_host_win) {  # is_host_win : windows host modular builds need OPENSSL_NO_ASM ) 
         defines = [ "OPENSSL_NO_ASM" ]
       } else {
         if (calling_convention == "aarch64" || calling_convention == "eabi" ||
diff --git a/third_party/chromium/media/BUILD.gn b/third_party/chromium/media/BUILD.gn
index e914124..4ed113c 100644
--- a/third_party/chromium/media/BUILD.gn
+++ b/third_party/chromium/media/BUILD.gn
@@ -247,7 +247,7 @@
     "//build:chromecast_buildflags",
     "//build:chromeos_buildflags",
     "//net",
-    "//starboard",
+    "//starboard:starboard_group",
     "//url",
   ]
 }
diff --git a/third_party/chromium/media/base/pipeline_status.cc b/third_party/chromium/media/base/pipeline_status.cc
index 3e4861e..7e439f2 100644
--- a/third_party/chromium/media/base/pipeline_status.cc
+++ b/third_party/chromium/media/base/pipeline_status.cc
@@ -94,11 +94,6 @@
       return StatusCode::kPipelineErrorDemuxerErrorDetectedHLS;
     case PIPELINE_ERROR_HARDWARE_CONTEXT_RESET:
       return StatusCode::kPipelineErrorHardwareContextReset;
-#if defined(STARBOARD)
-    case PLAYBACK_CAPABILITY_CHANGED:
-      NOTREACHED();
-      return StatusCode::kPipelineErrorDecode;
-#endif  // defined(STARBOARD)
   }
 
   NOTREACHED();
@@ -132,9 +127,6 @@
     STRINGIFY_STATUS_CASE(CHUNK_DEMUXER_ERROR_EOS_STATUS_DECODE_ERROR);
     STRINGIFY_STATUS_CASE(CHUNK_DEMUXER_ERROR_EOS_STATUS_NETWORK_ERROR);
     STRINGIFY_STATUS_CASE(AUDIO_RENDERER_ERROR);
-#if defined(STARBOARD)
-    STRINGIFY_STATUS_CASE(PLAYBACK_CAPABILITY_CHANGED);
-#endif  // defined(STARBOARD)
   }
 
 #undef STRINGIFY_STATUS_CASE
diff --git a/third_party/chromium/media/base/pipeline_status.h b/third_party/chromium/media/base/pipeline_status.h
index 808c6a8..88b6c8c 100644
--- a/third_party/chromium/media/base/pipeline_status.h
+++ b/third_party/chromium/media/base/pipeline_status.h
@@ -63,15 +63,8 @@
   // https://crbug.com/1208618
   PIPELINE_ERROR_HARDWARE_CONTEXT_RESET = 23,
 
-#if defined(STARBOARD)
-  // Transient errors.
-  PLAYBACK_CAPABILITY_CHANGED = 24,
-
-  PIPELINE_STATUS_MAX = PLAYBACK_CAPABILITY_CHANGED,
-#else  // defined(STARBOARD)
   // Must be equal to the largest value ever logged.
   PIPELINE_STATUS_MAX = PIPELINE_ERROR_HARDWARE_CONTEXT_RESET,
-#endif  // defined(STARBOARD)
 };
 
 MEDIA_EXPORT absl::optional<PipelineStatus> StatusCodeToPipelineStatus(
diff --git a/third_party/crashpad/handler/BUILD.gn b/third_party/crashpad/handler/BUILD.gn
index 2b9d2e4..c1f3204 100644
--- a/third_party/crashpad/handler/BUILD.gn
+++ b/third_party/crashpad/handler/BUILD.gn
@@ -105,7 +105,7 @@
   }
 
   if (crashpad_is_in_starboard) {
-    public_deps += [ "//starboard" ]
+    public_deps += [ "//starboard:starboard_group", ]
   }
 }
 
diff --git a/third_party/crashpad/tools/BUILD.gn b/third_party/crashpad/tools/BUILD.gn
index 76d6d28..ef25513 100644
--- a/third_party/crashpad/tools/BUILD.gn
+++ b/third_party/crashpad/tools/BUILD.gn
@@ -48,7 +48,7 @@
 
     if (crashpad_is_in_starboard) {
       deps += [
-        "//starboard",
+        "//starboard:starboard_group",
       ]
     }
 
diff --git a/third_party/devtools/front_end/sdk/TracingModel.js b/third_party/devtools/front_end/sdk/TracingModel.js
index ee8632f..f69b051 100644
--- a/third_party/devtools/front_end/sdk/TracingModel.js
+++ b/third_party/devtools/front_end/sdk/TracingModel.js
@@ -105,7 +105,7 @@
     if (!processes.length) {
       return null;
     }
-    const browserMainThreadName = 'CrBrowserMain';
+    const browserMainThreadName = 'cobalt';
     const browserProcesses = [];
     const browserMainThreads = [];
     for (const process of processes) {
diff --git a/third_party/devtools/front_end/timeline_model/TimelineModel.js b/third_party/devtools/front_end/timeline_model/TimelineModel.js
index 68e9bf6..e1f3d05 100644
--- a/third_party/devtools/front_end/timeline_model/TimelineModel.js
+++ b/third_party/devtools/front_end/timeline_model/TimelineModel.js
@@ -815,8 +815,15 @@
       }
 
       case recordTypes.Layout: {
+        let frameId = -1;
+        if (event.args && event.args['beginData'] && event.args['beginData']['frame']) {
+          frameId = event.args['beginData']['frame'];
+        }
+        if (frameId === -1) {
+          break;
+        }
+
         this._invalidationTracker.didLayout(event);
-        const frameId = event.args['beginData']['frame'];
         timelineData.setInitiator(this._layoutInvalidate[frameId]);
         // In case we have no closing Layout event, endData is not available.
         if (event.args['endData']) {
diff --git a/third_party/googletest/BUILD.gn b/third_party/googletest/BUILD.gn
index 143b025..a20c56e 100644
--- a/third_party/googletest/BUILD.gn
+++ b/third_party/googletest/BUILD.gn
@@ -156,7 +156,7 @@
   # line, so it happens to work in this case.
   all_dependent_configs = [ "//build/config/compiler:rtti" ]
 
-  public_deps = [  "//starboard"  ]
+  public_deps = [  "//starboard:starboard_group",  ]
 }
 
 # Do NOT depend on this directly. Use //testing/gtest:gtest_main instead.
diff --git a/third_party/musl/src/exit/atexit.c b/third_party/musl/src/exit/atexit.c
index 254eeb7..9a6ae8d 100644
--- a/third_party/musl/src/exit/atexit.c
+++ b/third_party/musl/src/exit/atexit.c
@@ -55,7 +55,11 @@
 }
 
 #if !defined(ADDRESS_SANITIZER)
+#if defined(USE_CUSTOM_MUSL_FINALIZE_SIGNATURE)
+void __musl_cxa_finalize(void *dso)
+#else  // defined(USE_CUSTOM_MUSL_FINALIZE_SIGNATURE)
 void __cxa_finalize(void *dso)
+#endif  // defined(USE_CUSTOM_MUSL_FINALIZE_SIGNATURE)
 {
 #ifdef STARBOARD
   __funcs_on_exit();
@@ -63,7 +67,11 @@
 }
 #endif  // !defined(ADDRESS_SANITIZER)
 
+#if defined(USE_CUSTOM_MUSL_ATEXIT_SIGNATURE)
+int __musl_cxa_atexit(void (*func)(void *), void *arg, void *dso)
+#else  // defined(USE_CUSTOM_MUSL_ATEXIT_SIGNATURE)
 int __cxa_atexit(void (*func)(void *), void *arg, void *dso)
+#endif  // defined(USE_CUSTOM_MUSL_ATEXIT_SIGNATURE)
 {
 	LOCK(lock);
 
@@ -98,5 +106,9 @@
 
 int atexit(void (*func)(void))
 {
+#if defined(USE_CUSTOM_MUSL_ATEXIT_SIGNATURE)
+	return __musl_cxa_atexit(call, (void *)(uintptr_t)func, 0);
+#else  // defined(USE_CUSTOM_MUSL_ATEXIT_SIGNATURE)
 	return __cxa_atexit(call, (void *)(uintptr_t)func, 0);
+#endif  // defined(USE_CUSTOM_MUSL_ATEXIT_SIGNATURE)
 }
diff --git a/third_party/v8/BUILD.gn b/third_party/v8/BUILD.gn
index 3999486..10ef47c 100644
--- a/third_party/v8/BUILD.gn
+++ b/third_party/v8/BUILD.gn
@@ -2383,6 +2383,8 @@
   # Split static libraries on windows into two.
   split_count = 2
 
+  cflags = []
+
   sources = [
     "//base/trace_event/common/trace_event_common.h",
 
@@ -3938,7 +3940,7 @@
   }
 
   if (is_clang_16 && use_cobalt_customizations) {
-    cflags = [ "-Wno-implicit-const-int-float-conversion"]
+    cflags += [ "-Wno-implicit-const-int-float-conversion"]
   }
 
   configs = [
@@ -3947,7 +3949,7 @@
   ]
 
   if (is_starboard && is_win) {
-    cflags = [
+    cflags += [
       "/wd4267",
       "/wd4312",
       "/wd4351",
diff --git a/third_party/v8/include/v8-profiler.h b/third_party/v8/include/v8-profiler.h
index 74b6df8..85d3f8a 100644
--- a/third_party/v8/include/v8-profiler.h
+++ b/third_party/v8/include/v8-profiler.h
@@ -259,6 +259,17 @@
 };
 
 /**
+ * Delegate for when max samples reached and samples are discarded.
+ */
+class V8_EXPORT DiscardedSamplesDelegate {
+ public:
+  DiscardedSamplesDelegate() {}
+
+  virtual ~DiscardedSamplesDelegate() = default;
+  virtual void Notify() = 0;
+};
+
+/**
  * Optional profiling attributes.
  */
 class V8_EXPORT CpuProfilingOptions {
@@ -346,8 +357,9 @@
    * profiles may be collected at once. Attempts to start collecting several
    * profiles with the same title are silently ignored.
    */
-  CpuProfilingStatus StartProfiling(Local<String> title,
-                                    CpuProfilingOptions options);
+  CpuProfilingStatus StartProfiling(
+      Local<String> title, CpuProfilingOptions options,
+      std::unique_ptr<DiscardedSamplesDelegate> delegate = nullptr);
 
   /**
    * Starts profiling with the same semantics as above, except with expanded
diff --git a/third_party/v8/src/api/api.cc b/third_party/v8/src/api/api.cc
index 6d4e322..74ea43b 100644
--- a/third_party/v8/src/api/api.cc
+++ b/third_party/v8/src/api/api.cc
@@ -10750,10 +10750,11 @@
       use_precise_sampling);
 }
 
-CpuProfilingStatus CpuProfiler::StartProfiling(Local<String> title,
-                                               CpuProfilingOptions options) {
+CpuProfilingStatus CpuProfiler::StartProfiling(
+    Local<String> title, CpuProfilingOptions options,
+    std::unique_ptr<DiscardedSamplesDelegate> delegate) {
   return reinterpret_cast<i::CpuProfiler*>(this)->StartProfiling(
-      *Utils::OpenHandle(*title), options);
+      *Utils::OpenHandle(*title), options, std::move(delegate));
 }
 
 CpuProfilingStatus CpuProfiler::StartProfiling(Local<String> title,
diff --git a/third_party/v8/src/profiler/cpu-profiler.cc b/third_party/v8/src/profiler/cpu-profiler.cc
index 6ee7539..81e4c09 100644
--- a/third_party/v8/src/profiler/cpu-profiler.cc
+++ b/third_party/v8/src/profiler/cpu-profiler.cc
@@ -535,9 +535,11 @@
   }
 }
 
-CpuProfilingStatus CpuProfiler::StartProfiling(const char* title,
-                                               CpuProfilingOptions options) {
-  StartProfilingStatus status = profiles_->StartProfiling(title, options);
+CpuProfilingStatus CpuProfiler::StartProfiling(
+    const char* title, CpuProfilingOptions options,
+    std::unique_ptr<DiscardedSamplesDelegate> delegate) {
+  StartProfilingStatus status =
+      profiles_->StartProfiling(title, options, std::move(delegate));
 
   // TODO(nicodubus): Revisit logic for if we want to do anything different for
   // kAlreadyStarted
@@ -551,9 +553,11 @@
   return status;
 }
 
-CpuProfilingStatus CpuProfiler::StartProfiling(String title,
-                                               CpuProfilingOptions options) {
-  return StartProfiling(profiles_->GetName(title), options);
+CpuProfilingStatus CpuProfiler::StartProfiling(
+    String title, CpuProfilingOptions options,
+    std::unique_ptr<DiscardedSamplesDelegate> delegate) {
+  return StartProfiling(profiles_->GetName(title), options,
+                        std::move(delegate));
 }
 
 void CpuProfiler::StartProcessorIfNotStarted() {
diff --git a/third_party/v8/src/profiler/cpu-profiler.h b/third_party/v8/src/profiler/cpu-profiler.h
index e7ca3fb..292b4a9 100644
--- a/third_party/v8/src/profiler/cpu-profiler.h
+++ b/third_party/v8/src/profiler/cpu-profiler.h
@@ -314,10 +314,12 @@
   void set_sampling_interval(base::TimeDelta value);
   void set_use_precise_sampling(bool);
   void CollectSample();
-  StartProfilingStatus StartProfiling(const char* title,
-                                      CpuProfilingOptions options = {});
-  StartProfilingStatus StartProfiling(String title,
-                                      CpuProfilingOptions options = {});
+  StartProfilingStatus StartProfiling(
+      const char* title, CpuProfilingOptions options = {},
+      std::unique_ptr<DiscardedSamplesDelegate> delegate = nullptr);
+  StartProfilingStatus StartProfiling(
+      String title, CpuProfilingOptions options = {},
+      std::unique_ptr<DiscardedSamplesDelegate> delegate = nullptr);
 
   CpuProfile* StopProfiling(const char* title);
   CpuProfile* StopProfiling(String title);
diff --git a/third_party/v8/src/profiler/profile-generator.cc b/third_party/v8/src/profiler/profile-generator.cc
index f3344c5..1694aad 100644
--- a/third_party/v8/src/profiler/profile-generator.cc
+++ b/third_party/v8/src/profiler/profile-generator.cc
@@ -468,9 +468,11 @@
 std::atomic<uint32_t> CpuProfile::last_id_;
 
 CpuProfile::CpuProfile(CpuProfiler* profiler, const char* title,
-                       CpuProfilingOptions options)
+                       CpuProfilingOptions options,
+                       std::unique_ptr<DiscardedSamplesDelegate> delegate)
     : title_(title),
       options_(options),
+      delegate_(std::move(delegate)),
       start_time_(base::TimeTicks::HighResolutionNow()),
       top_down_(profiler->isolate()),
       profiler_(profiler),
@@ -517,8 +519,19 @@
       (options_.max_samples() == CpuProfilingOptions::kNoSampleLimit ||
        samples_.size() < options_.max_samples());
 
-  if (should_record_sample)
+  if (should_record_sample) {
     samples_.push_back({top_frame_node, timestamp, src_line});
+  }
+
+  if (!should_record_sample && delegate_ != nullptr) {
+    const auto task_runner = V8::GetCurrentPlatform()->GetForegroundTaskRunner(
+        reinterpret_cast<v8::Isolate*>(profiler_->isolate()));
+
+    task_runner->PostTask(std::make_unique<CpuProfileMaxSamplesCallbackTask>(
+        std::move(delegate_)));
+    // std::move ensures that the delegate_ will be null on the next sample,
+    // so we don't post a task multiple times.
+  }
 
   const int kSamplesFlushCount = 100;
   const int kNodesFlushCount = 10;
@@ -734,7 +747,8 @@
     : profiler_(nullptr), current_profiles_semaphore_(1) {}
 
 CpuProfilingStatus CpuProfilesCollection::StartProfiling(
-    const char* title, CpuProfilingOptions options) {
+    const char* title, CpuProfilingOptions options,
+    std::unique_ptr<DiscardedSamplesDelegate> delegate) {
   current_profiles_semaphore_.Wait();
 
   if (static_cast<int>(current_profiles_.size()) >= kMaxSimultaneousProfiles) {
@@ -750,7 +764,9 @@
       return CpuProfilingStatus::kAlreadyStarted;
     }
   }
-  current_profiles_.emplace_back(new CpuProfile(profiler_, title, options));
+
+  current_profiles_.emplace_back(
+      new CpuProfile(profiler_, title, options, std::move(delegate)));
   current_profiles_semaphore_.Signal();
   return CpuProfilingStatus::kStarted;
 }
diff --git a/third_party/v8/src/profiler/profile-generator.h b/third_party/v8/src/profiler/profile-generator.h
index 9183d56..f819dfd 100644
--- a/third_party/v8/src/profiler/profile-generator.h
+++ b/third_party/v8/src/profiler/profile-generator.h
@@ -351,8 +351,9 @@
     int line;
   };
 
-  V8_EXPORT_PRIVATE CpuProfile(CpuProfiler* profiler, const char* title,
-                               CpuProfilingOptions options);
+  V8_EXPORT_PRIVATE CpuProfile(
+      CpuProfiler* profiler, const char* title, CpuProfilingOptions options,
+      std::unique_ptr<DiscardedSamplesDelegate> delegate = nullptr);
 
   // Checks whether or not the given TickSample should be (sub)sampled, given
   // the sampling interval of the profiler that recorded it (in microseconds).
@@ -386,6 +387,7 @@
 
   const char* title_;
   const CpuProfilingOptions options_;
+  std::unique_ptr<DiscardedSamplesDelegate> delegate_;
   base::TimeTicks start_time_;
   base::TimeTicks end_time_;
   std::deque<SampleInfo> samples_;
@@ -402,6 +404,18 @@
   DISALLOW_COPY_AND_ASSIGN(CpuProfile);
 };
 
+class CpuProfileMaxSamplesCallbackTask : public v8::Task {
+ public:
+  CpuProfileMaxSamplesCallbackTask(
+      std::unique_ptr<DiscardedSamplesDelegate> delegate)
+      : delegate_(std::move(delegate)) {}
+
+  void Run() override { delegate_->Notify(); }
+
+ private:
+  std::unique_ptr<DiscardedSamplesDelegate> delegate_;
+};
+
 class V8_EXPORT_PRIVATE CodeMap {
  public:
   CodeMap();
@@ -446,8 +460,9 @@
   explicit CpuProfilesCollection(Isolate* isolate);
 
   void set_cpu_profiler(CpuProfiler* profiler) { profiler_ = profiler; }
-  CpuProfilingStatus StartProfiling(const char* title,
-                                    CpuProfilingOptions options = {});
+  CpuProfilingStatus StartProfiling(
+      const char* title, CpuProfilingOptions options = {},
+      std::unique_ptr<DiscardedSamplesDelegate> delegate = nullptr);
 
   CpuProfile* StopProfiling(const char* title);
   std::vector<std::unique_ptr<CpuProfile>>* profiles() {
diff --git a/third_party/v8/test/cctest/test-profile-generator.cc b/third_party/v8/test/cctest/test-profile-generator.cc
index 02e65e7..1e22aaa 100644
--- a/third_party/v8/test/cctest/test-profile-generator.cc
+++ b/third_party/v8/test/cctest/test-profile-generator.cc
@@ -518,6 +518,117 @@
   }
 }
 
+namespace {
+class DiscardedSamplesDelegateImpl : public v8::DiscardedSamplesDelegate {
+ public:
+  DiscardedSamplesDelegateImpl() : DiscardedSamplesDelegate() {}
+  void Notify() override {}
+};
+
+class MockPlatform : public TestPlatform {
+ public:
+  MockPlatform()
+      : old_platform_(i::V8::GetCurrentPlatform()),
+        mock_task_runner_(new MockTaskRunner()) {
+    // Now that it's completely constructed, make this the current platform.
+    i::V8::SetPlatformForTesting(this);
+  }
+
+  // When done, explicitly revert to old_platform_.
+  ~MockPlatform() override { i::V8::SetPlatformForTesting(old_platform_); }
+
+  std::shared_ptr<v8::TaskRunner> GetForegroundTaskRunner(
+      v8::Isolate*) override {
+    return mock_task_runner_;
+  }
+
+  int posted_count() { return mock_task_runner_->posted_count(); }
+
+ private:
+  class MockTaskRunner : public v8::TaskRunner {
+   public:
+    void PostTask(std::unique_ptr<v8::Task> task) override {
+      task->Run();
+      posted_count_++;
+    }
+
+    void PostDelayedTask(std::unique_ptr<Task> task,
+                         double delay_in_seconds) override {
+      task_ = std::move(task);
+      delay_ = delay_in_seconds;
+    }
+
+    void PostIdleTask(std::unique_ptr<IdleTask> task) override {
+      UNREACHABLE();
+    }
+
+    bool IdleTasksEnabled() override { return false; }
+
+    int posted_count() { return posted_count_; }
+
+   private:
+    int posted_count_ = 0;
+    double delay_ = -1;
+    std::unique_ptr<Task> task_;
+  };
+
+  v8::Platform* old_platform_;
+  std::shared_ptr<MockTaskRunner> mock_task_runner_;
+};
+}  // namespace
+
+TEST(MaxSamplesCallback) {
+  i::Isolate* isolate = CcTest::i_isolate();
+  CpuProfilesCollection profiles(isolate);
+  CpuProfiler profiler(isolate);
+  profiles.set_cpu_profiler(&profiler);
+  MockPlatform* mock_platform = new MockPlatform();
+  std::unique_ptr<DiscardedSamplesDelegateImpl> impl =
+      std::make_unique<DiscardedSamplesDelegateImpl>(
+          DiscardedSamplesDelegateImpl());
+  profiles.StartProfiling("",
+                          {v8::CpuProfilingMode::kLeafNodeLineNumbers, 1, 1,
+                           MaybeLocal<v8::Context>()},
+                          std::move(impl));
+
+  StringsStorage strings;
+  CodeMap code_map(strings);
+  Symbolizer symbolizer(&code_map);
+  TickSample sample1;
+  sample1.timestamp = v8::base::TimeTicks::HighResolutionNow();
+  sample1.pc = ToPointer(0x1600);
+  sample1.stack[0] = ToPointer(0x1510);
+  sample1.frames_count = 1;
+  auto symbolized = symbolizer.SymbolizeTickSample(sample1);
+  profiles.AddPathToCurrentProfiles(sample1.timestamp, symbolized.stack_trace,
+                                    symbolized.src_line, true,
+                                    base::TimeDelta());
+  CHECK_EQ(0, mock_platform->posted_count());
+  TickSample sample2;
+  sample2.timestamp = v8::base::TimeTicks::HighResolutionNow();
+  sample2.pc = ToPointer(0x1925);
+  sample2.stack[0] = ToPointer(0x1780);
+  sample2.frames_count = 2;
+  symbolized = symbolizer.SymbolizeTickSample(sample2);
+  profiles.AddPathToCurrentProfiles(sample2.timestamp, symbolized.stack_trace,
+                                    symbolized.src_line, true,
+                                    base::TimeDelta());
+  CHECK_EQ(1, mock_platform->posted_count());
+  TickSample sample3;
+  sample3.timestamp = v8::base::TimeTicks::HighResolutionNow();
+  sample3.pc = ToPointer(0x1510);
+  sample3.frames_count = 3;
+  symbolized = symbolizer.SymbolizeTickSample(sample3);
+  profiles.AddPathToCurrentProfiles(sample3.timestamp, symbolized.stack_trace,
+                                    symbolized.src_line, true,
+                                    base::TimeDelta());
+  CHECK_EQ(1, mock_platform->posted_count());
+
+  // Teardown
+  profiles.StopProfiling("");
+  delete mock_platform;
+}
+
 TEST(NoSamples) {
   TestSetup test_setup;
   i::Isolate* isolate = CcTest::i_isolate();
diff --git a/tools/install_visual_studio_22.ps1 b/tools/install_visual_studio_22.ps1
index 9849141..86fd659 100644
--- a/tools/install_visual_studio_22.ps1
+++ b/tools/install_visual_studio_22.ps1
@@ -2,8 +2,12 @@
 
 New-Item -Path "C:\" -Name "src" -ItemType "directory" -Force
 
-Invoke-WebRequest -Uri https://aka.ms/vs/17/release/vs_professional.exe `
-    -OutFile C:\src\vs_professional.exe
+# Pins Visual Studio 2022 release version to 17.4.6 (includes Clang 15.0.1).
+# This should be kept in sync with the VS installer used in Build CI containers
+# defined in `docker/windows/base/visualstudio2022/Dockerfile`
+$VS_INSTALL_URL="https://download.visualstudio.microsoft.com/download/pr/d1ed8638-9e88-461e-92b7-4e29cc6172c3/30be9c2a5e40d5666eeae683e319b472c8bcc8231c7b346fe798f0ad0f7e498b/vs_Professional.exe"
+
+Invoke-WebRequest -Uri $VS_INSTALL_URL -OutFile C:\src\vs_professional.exe
 
 C:\src\vs_professional.exe --wait --installPath `
     "C:/Program Files (x86)/Microsoft Visual Studio/2022/Professional" `
diff --git a/tools/update_certs.py b/tools/update_certs.py
new file mode 100755
index 0000000..e3b33b8
--- /dev/null
+++ b/tools/update_certs.py
@@ -0,0 +1,138 @@
+#!/usr/bin/env python3
+# Copyright 2024 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Tool for updating Cobalt SSL Certificates.
+
+Usage:
+  update_certs.py -r <cobalt_repo> -b <openssl_bin> -p <pem_files>
+
+Args:
+    cobalt_repo: The path to the Cobalt repository root.
+    openssl_bin: The path to the OpenSSL binary, defaults to "/usr/bin/openssl"
+      when not specified.
+    pem_files: The paths to the source pem files.
+"""
+
+import argparse
+import os
+import shutil
+import subprocess
+
+from typing import List
+from typing import Set
+
+_CERTS_PATH = 'cobalt/content/ssl/certs'
+_BUILD_PATH = 'cobalt/network/certs.gni'
+
+
+def SplitCerts(concatenated_cert_file: str) -> List[str]:
+  """Split concatenated .pem file into a list of individual certs."""
+  begin_anchor = '-----BEGIN CERTIFICATE-----'
+  end_anchor = '-----END CERTIFICATE-----'
+
+  cert_list = []
+  current_cert = ''
+  in_cert = False
+
+  for line in concatenated_cert_file:
+    if not in_cert and line.find(begin_anchor) != -1:
+      in_cert = True
+      current_cert += line
+    elif in_cert and line.find(end_anchor) != -1:
+      in_cert = False
+      current_cert += line
+      cert_list.append(current_cert)
+      current_cert = ''
+    elif in_cert:
+      current_cert += line
+
+  return cert_list
+
+
+def ComputeCertFilename(openssl_bin: str, cert: str) -> str:
+  """Use x509 to get the hashed filename for the individual cert."""
+  command_args = [openssl_bin, 'x509', '-subject_hash', '-noout']
+  output = subprocess.check_output(command_args, input=cert.encode('utf-8'))
+
+  return output.decode().rstrip() + '.0'
+
+
+def UpdateBuild(build_file: str, cert_filepaths: Set[str]) -> None:
+  cert_filepaths = list(cert_filepaths)
+  cert_filepaths.sort()
+
+  # Adds build file
+  cert_lines = ['network_certs = [\n']
+  cert_lines += [f'  "//{path}",\n' for path in cert_filepaths]
+  cert_lines += [']\n']
+  with open(build_file, 'w', encoding='utf-8') as f:
+    f.writelines(cert_lines)
+
+
+def UpdateCerts(certs_repo: str, openssl_bin: str, pem_files: str) -> None:
+  certs_path = os.path.join(certs_repo, _CERTS_PATH)
+
+  # Removes existing certs
+  if os.path.exists(certs_path):
+    shutil.rmtree(certs_path)
+  os.mkdir(certs_path)
+
+  # Adds certs
+  relative_filepaths = set()
+  for pem_file in pem_files:
+    cert_list = []
+    with open(pem_file, encoding='utf-8') as p:
+      cert_list = SplitCerts(p)
+    for cert in cert_list:
+      filename = ComputeCertFilename(openssl_bin, cert)
+      filepath = os.path.join(certs_path, filename)
+      relative_filepath = os.path.join(_CERTS_PATH, filename)
+      relative_filepaths.add(relative_filepath)
+      with open(filepath, 'w', encoding='utf-8') as f:
+        f.write(cert)
+
+  # Updates certs.gni with updated certs
+  build_file = os.path.join(certs_repo, _BUILD_PATH)
+  UpdateBuild(build_file, relative_filepaths)
+
+
+def main() -> None:
+  parser = argparse.ArgumentParser()
+  parser.add_argument(
+      '-r',
+      '--cobalt_repo',
+      type=str,
+      required=True,
+      help='The path to the Cobalt repository root.')
+  parser.add_argument(
+      '-b',
+      '--openssl_bin',
+      type=str,
+      required=False,
+      default='/usr/bin/openssl',
+      help='The path to the OpenSSL binary.')
+  parser.add_argument(
+      '-p',
+      '--pem_files',
+      type=str,
+      nargs='+',
+      required=True,
+      help='The paths to the source pem files.')
+  args = parser.parse_args()
+
+  UpdateCerts(args.cobalt_repo, args.openssl_bin, args.pem_files)
+
+
+if __name__ == '__main__':
+  main()
diff --git a/tools/update_certs_test.py b/tools/update_certs_test.py
new file mode 100644
index 0000000..469f375
--- /dev/null
+++ b/tools/update_certs_test.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python3
+# Copyright 2024 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Test for tool for updating Cobalt SSL Certificates."""
+
+import io
+import tempfile
+import unittest
+
+from tools import update_certs
+
+_CERT_NAME = '8cb5ee0f.0'
+_CERT = '''\
+-----BEGIN CERTIFICATE-----
+MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5
+MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g
+Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG
+A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg
+Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl
+ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j
+QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr
+ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr
+BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM
+YyRIHN8wfdVoOw==
+-----END CERTIFICATE-----
+'''
+
+
+class UpdateCertsTest(unittest.TestCase):
+
+  def testSplitCerts(self):
+    pem = io.StringIO(_CERT + _CERT)
+    output = update_certs.SplitCerts(pem)
+    self.assertEqual(len(output), 2)
+    self.assertEqual(output[0], _CERT)
+    self.assertEqual(output[1], _CERT)
+
+  def testUpdateBuild(self):
+    filepaths = {'foo', 'bar'}
+    build_content = '''\
+network_certs = [
+  "//bar",
+  "//foo",
+]
+'''
+    with tempfile.NamedTemporaryFile(delete=False) as tmp:
+      update_certs.UpdateBuild(tmp.name, filepaths)
+      with open(tmp.name, encoding='utf-8') as f:
+        self.assertEqual(f.read(), build_content)
+
+
+if __name__ == '__main__':
+  unittest.main()
