14.2.0
diff --git a/NEWS b/NEWS
index 20a258d..a266599 100644
--- a/NEWS
+++ b/NEWS
@@ -1,235 +1,227 @@
-Overview of changes leading to NEXT (REPLACEME)
+Overview of changes leading to 14.2.0
+Monday, April 20, 2026
 =====================================
 
-- GPU library:
+In this release, the experimental raster, vector, and GPU libraries went
+through several rounds of code review and cleanup to make sure they follow the
+high standards expected of HarfBuzz code. The API has also been extensively
+reviewed based on experience gained from using these libraries. We consider the
+code and API to be ready for stabilization, and we expect to graduate them from
+experimental in the near future. If you are using or planning to use these
+libraries and have any concerns about the API, it is time to raise them. Once a
+library is deemed stable, we will never change the API or ABI in an
+incompatible way.
 
+- GPU library:
   * New color-glyph paint renderer, based on design by Lê Duy Quang.
-    hb_gpu_paint_t walks a font's paint tree (COLRv0 or COLRv1) and
-    encodes its layers -- solid fills, linear / radial / sweep
-    gradients, transforms, composite groups -- into a compact blob.
-    A new fragment-shader function hb_gpu_paint() renders the blob
-    in premultiplied RGBA; monochrome glyphs are handled
-    transparently via a synthesized foreground-colored layer.
+    `hb_gpu_paint_t` walks a font's paint tree (COLRv0 or COLRv1) and encodes
+    its layers (solid fills, linear / radial / sweep gradients, transforms,
+    composite groups) into a compact blob.
+    A new fragment-shader function `hb_gpu_paint()` renders the blob in
+    premultiplied RGBA; monochrome glyphs are handled transparently via a
+    synthesized foreground-colored layer.
     Shader sources provided in GLSL, WGSL, MSL, and HLSL.
-  * Paint encoder limitations: the encoder sets `unsupported` and
-    returns NULL when `num_ops` would exceed 32767, `push_group`
-    nests deeper than 4, or the paint tree calls back through the
-    image callback (PaintImage).  Nested glyph clips are
-    intersected up to 3 levels; a few composite modes use
-    approximate fallbacks; `push_clip_rectangle` is silently
-    ignored.
-  * Encode entry point now returns extents and auto-clears the
-    encoder; the standalone get_extents() is gone.
-  * hb_gpu_paint() now takes an `out float coverage` parameter
-    that returns the maximum antialiasing edge coverage across
-    all paint layers.  Callers should apply stem darkening and
-    gamma correction to this coverage value rather than to the
-    composited color, so interior paint colors stay undistorted.
-  * Gradient color stop interpolation now happens in
-    premultiplied space per the OpenType COLR specification.
-  * The foreground color sentinel (is_foreground) now correctly
-    preserves the paint-tree alpha from the encoded color data
-    instead of discarding it.
-  * The hb-gpu utility gains --draw / --paint flags with per-font
-    auto-detect, and --output-file / -o for headless single-frame
-    rendering to a PPM image (P6).
+  * Paint encoder limitations: the encoder sets `unsupported` and returns
+    `NULL` when `num_ops` would exceed 32767, `push_group` nests deeper than 4,
+    or the paint tree calls back through the image callback (PaintImage).
+    Nested glyph clips are intersected up to 3 levels; a few composite modes
+    use approximate fallbacks; `push_clip_rectangle` is silently ignored.
+  * Encode entry point now returns extents and auto-clears the encoder; the
+    standalone `get_extents()` is gone.
+  * Gradient color stop interpolation now happens in premultiplied space per
+    the OpenType COLR specification.
+  * The foreground color sentinel (`is_foreground`) now correctly preserves the
+    paint-tree alpha from the encoded color data instead of discarding it.
+  * The hb-gpu utility gains `--draw` / `--paint` flags with per-font
+    auto-detect, and `--output-file` / `-o` for headless single-frame rendering
+    to a PPM image.
 
 - Vector library:
-  * New PDF output backend.  Vector paint glyphs now render to
-    PDF page content, producing scalable COLRv0 / COLRv1
-    color-glyph artwork (solid fills, linear / radial / sweep
-    gradients, blend modes, PNG images with transparency) that
-    can be embedded directly in PDF documents -- useful for PDF
-    producers such as LibreOffice that want crisp, resolution-
-    independent color emoji.
-  * New SVG id prefix API on paint allows prefixing document
-    references, which allows for embedding multiple SVGs in the
-    same page without name clashes (hb_vector_paint_set_svg_prefix).
-  * Removed pen_x/pen_y parameters from all vector and
-    raster _glyph functions.  Callers use set_transform()
-    for glyph positioning instead.
-  * Removed glyph path dedup from vector draw and paint.
-    Each glyph is emitted inline; no <defs>/<use> caching.
-  * _glyph() functions are now thin convenience wrappers
-    documented as equivalent expansions of the underlying
-    font draw/paint API.
+  * New PDF output backend. Vector paint glyphs now render to PDF page content,
+    producing scalable COLRv0 / COLRv1 color-glyph artwork (solid fills, linear
+    / radial / sweep gradients, blend modes, PNG images with transparency) that
+    can be embedded directly in PDF documents. Useful for PDF producers such as
+    LibreOffice that want crisp, resolution-independent color emoji.
+  * New SVG id prefix API on paint allows prefixing document references, which
+    allows for embedding multiple SVGs in the same page without name clashes
+    (`hb_vector_paint_set_svg_prefix`).
+  * Removed glyph path dedup from vector draw and paint. Each glyph is emitted
+    inline; no `<defs>` / `<use>` caching.
+  * `_glyph()` functions are now thin convenience wrappers documented as
+    equivalent expansions of the underlying font draw/paint API.
   * Drop glyph-source rendering of SVG-in-OT fonts.
 
 - Raster library:
   * Drop glyph-source rendering of SVG-in-OT fonts.
 
-- Across Draw / Paint subsystems: _reset() methods gain matching
-  _clear() companions that drop accumulated data while preserving
-  user configuration.  Getter companions added for setters across
-  raster, vector, and gpu types.
+- Across Draw / Paint subsystems:
+  * `_reset()` methods gain matching`_clear()` companions that drop accumulated
+    data while preserving user configuration. Getter companions added for
+    setters across raster, vector, and gpu types.
 
-- Various fuzzer fixes for `harfbuzz-raster`, `harfbuzz-vector`,
-  and `harfbuzz-gpu` libraries.
+- Various fuzzer fixes for raster, vector, and GPU libraries.
 
 - Paint API:
-  * New arbitrary-path clip:
-    hb_paint_push_clip_path_start / _end let callers clip to
-    a caller-supplied outline, not just a font glyph.
-    push_clip_path_start returns the draw-funcs (and matching
-    draw data) for the backend's path accumulator; the caller
-    drives hb_draw_*() into it, then calls
-    push_clip_path_end, followed by painted ops, then
-    hb_paint_pop_clip() to release the clip.  Implemented for
-    all paint backends: vector (SVG defs + clipPath + url ref),
-    vector PDF (q / path / W n), raster (path rendered to an
-    alpha mask, intersected with the current clip), and GPU
-    (the path is encoded into a Slug sub-blob so the fragment
-    shader clips against it the same way it clips against
-    glyph outlines).
+  * New arbitrary-path clip: `hb_paint_push_clip_path_start` / `_end` let
+    callers clip to a caller-supplied outline, not just a font glyph.
+    `push_clip_path_start()` returns the draw-funcs (and matching draw data)
+    for the backend’s path accumulator; the caller drives `hb_draw_*()` into
+    it, then calls `push_clip_path_end()`, followed by painted ops, then
+    `hb_paint_pop_clip()` to release the clip. Implemented for all paint
+    backends: vector (SVG defs + clipPath + url ref), vector PDF (q / path / W
+    n), raster (path rendered to an alpha mask, intersected with the current
+    clip), and GPU (the path is encoded into a Slug sub-blob so the fragment
+    shader clips against it the same way it clips against glyph outlines).
 
-- New API, Draw:
-  +hb_draw_line()
-  +hb_draw_rectangle()
-  +hb_draw_circle()
-  +hb_draw_line_cap_t
-  +HB_DRAW_LINE_CAP_BUTT
-  +HB_DRAW_LINE_CAP_ROUND
-  +HB_DRAW_LINE_CAP_SQUARE
+- Shaping:
+  * Indic: categorize U+1CF5 and U+1CF6 as CS.
 
-- New API, Paint:
-  +hb_paint_push_group_for()
-  +hb_paint_funcs_set_push_group_for_func()
-  +hb_paint_push_group_for_func_t
-  +hb_paint_reduce_linear_anchors()
-  +hb_paint_normalize_color_line()
-  +hb_paint_sweep_gradient_tiles()
-  +hb_paint_sweep_gradient_tile_func_t
-  +hb_paint_push_clip_path_start()
-  +hb_paint_push_clip_path_end()
-  +hb_paint_funcs_set_push_clip_path_start_func()
-  +hb_paint_funcs_set_push_clip_path_end_func()
-  +hb_paint_push_clip_path_start_func_t
-  +hb_paint_push_clip_path_end_func_t
+- Changed API
+  * GPU library:
+    - `hb_gpu_draw_glyph()` now returns `void` (was `hb_bool_t`). Use
+      `hb_gpu_draw_glyph_or_fail()` if you need the success status.
+    - `hb_gpu_paint_glyph()` now returns `void` (was `hb_bool_t`) and
+      internally synthesizes a foreground-colored layer for non-color glyphs
+      via `hb_font_paint_glyph()`, so every glyph with an outline produces
+      output. Use `hb_gpu_paint_glyph_or_fail()` (which delegates to
+      `hb_font_paint_glyph_or_fail()`) if you need to distinguish color vs
+      synthesized paint. Encoder-level limits (unsupported ops, group-stack
+      overflow) no longer fail paint_glyph; they surface from
+      `hb_gpu_paint_encode()` returning `NULL`.
+    - `hb_gpu_draw_encode()` now takes an `extents` out-parameter and
+      auto-clears the encoder on return.
+    - `hb_gpu_draw_darken()` renamed to `hb_gpu_stem_darken()`.
 
-- New API, GPU library:
-  +hb_gpu_paint_t
-  +hb_gpu_paint_create_or_fail()
-  +hb_gpu_paint_reference()
-  +hb_gpu_paint_destroy()
-  +hb_gpu_paint_set_user_data()
-  +hb_gpu_paint_get_user_data()
-  +hb_gpu_paint_get_funcs()
-  +hb_gpu_paint_set_palette()
-  +hb_gpu_paint_get_palette()
-  +hb_gpu_paint_set_custom_palette_color()
-  +hb_gpu_paint_clear_custom_palette_colors()
-  +hb_gpu_paint_set_scale()
-  +hb_gpu_paint_get_scale()
-  +hb_gpu_paint_glyph()
-  +hb_gpu_paint_encode()
-  +hb_gpu_paint_clear()
-  +hb_gpu_paint_reset()
-  +hb_gpu_paint_recycle_blob()
-  +hb_gpu_paint_shader_source()
-  +hb_gpu_paint_glyph_or_fail()
-  +HB_GPU_SHADER_STAGE_VERTEX
-  +HB_GPU_SHADER_STAGE_FRAGMENT
-  +hb_gpu_shader_source()
-  +hb_gpu_draw_shader_source()
-  +hb_gpu_draw_clear()
-  +hb_gpu_draw_get_scale()
-  +hb_gpu_draw_glyph_or_fail()
+  * Vector library:
+    - `hb_vector_svg_set_precision()` and its paint counterpart renamed to
+      `hb_vector_draw_set_precision()` / `hb_vector_paint_set_precision()`
+      (SVG-specific naming is inaccurate with the PDF backend added).
+    - `hb_vector_draw_glyph()` / `hb_vector_paint_glyph()` now return `void`
+      (were `hb_bool_t`). Paint additionally gains a draw fallback for
+      non-color glyphs. Use the matching `_or_fail()` variants for the
+      `hb_bool_t` return.
 
-- Changed shader API, GPU library:
-  hb_gpu_paint() now takes an additional `out float coverage`
-  parameter.  Existing callers must update their shader code to
-  pass this argument.
+  * Raster library:
+    - `hb_raster_draw_glyph()` / `hb_raster_paint_glyph()` now return `void`
+      (were `hb_bool_t`). Paint additionally gains a draw fallback for
+      non-color glyphs. Use the matching `_or_fail()` variants for the
+      `hb_bool_t` return.
 
-- New API, Raster library:
-  +hb_raster_draw_clear()
-  +hb_raster_draw_glyph_or_fail()
-  +hb_raster_paint_clear()
-  +hb_raster_paint_glyph_or_fail()
-  +hb_raster_paint_set_palette()
-  +hb_raster_paint_get_palette()
-  +hb_raster_paint_get_foreground()
-  +hb_raster_paint_set_background()
-  +hb_raster_paint_get_background()
+  * General:
+    - Many read-only getters gained const on their object argument.
+    - Six public draw / paint funcs getters across raster, vector, and gpu now
+      take a const-pointer to the relevant context instance instead of being
+      singletons:
+        hb_raster_draw_get_funcs (const hb_raster_draw_t *)`
+        hb_raster_paint_get_funcs (const hb_raster_paint_t *)
+        hb_vector_draw_get_funcs (const hb_vector_draw_t *)
+        hb_vector_paint_get_funcs (const hb_vector_paint_t *)
+        hb_gpu_draw_get_funcs (const hb_gpu_draw_t *)
+        hb_gpu_paint_get_funcs (const hb_gpu_paint_t *)
+      This is what lets vector_paint dispatch to SVG- vs PDF- flavored
+      callbacks transparently when called from outside code; the others
+      currently use the instance for symmetry only.
 
-- New API, Vector library:
-  +HB_VECTOR_FORMAT_PDF
-  +hb_vector_draw_clear()
-  +hb_vector_draw_get_precision()
-  +hb_vector_draw_get_format()
-  +hb_vector_draw_glyph_or_fail()
-  +hb_vector_draw_set_foreground()
-  +hb_vector_draw_get_foreground()
-  +hb_vector_draw_set_background()
-  +hb_vector_draw_get_background()
-  +hb_vector_paint_clear()
-  +hb_vector_paint_get_precision()
-  +hb_vector_paint_get_format()
-  +hb_vector_paint_get_foreground()
-  +hb_vector_paint_set_background()
-  +hb_vector_paint_get_background()
-  +hb_vector_paint_get_palette()
-  +hb_vector_paint_glyph_or_fail()
-  +hb_vector_paint_set_svg_prefix()
-  +hb_vector_paint_get_svg_prefix()
+- New API
+  * Draw:
+    +HB_DRAW_LINE_CAP_BUTT
+    +HB_DRAW_LINE_CAP_ROUND
+    +HB_DRAW_LINE_CAP_SQUARE
+    +hb_draw_line_cap_t
+    +hb_draw_line()
+    +hb_draw_rectangle()
+    +hb_draw_circle()
 
-- Removed API, GPU library:
-  -hb_gpu_shader_fragment_source()   (replaced by hb_gpu_shader_source(stage))
-  -hb_gpu_shader_vertex_source()     (replaced by hb_gpu_shader_source(stage))
-  -hb_gpu_draw_get_extents()         (extents are now an out-parameter of hb_gpu_draw_encode())
+  * Paint:
+    +hb_paint_push_clip_path_start_func_t
+    +hb_paint_push_clip_path_end_func_t
+    +hb_paint_sweep_gradient_tile_func_t
+    +hb_paint_push_group_for_func_t
+    +hb_paint_push_group_for()
+    +hb_paint_funcs_set_push_group_for_func()
+    +hb_paint_reduce_linear_anchors()
+    +hb_paint_normalize_color_line()
+    +hb_paint_sweep_gradient_tiles()
+    +hb_paint_push_clip_path_start()
+    +hb_paint_push_clip_path_end()
+    +hb_paint_funcs_set_push_clip_path_start_func()
+    +hb_paint_funcs_set_push_clip_path_end_func()
 
-- Removed API, Vector library:
-  -hb_vector_draw_set_flat()
-  -hb_vector_draw_get_flat()
-  -hb_vector_paint_set_flat()
-  -hb_vector_paint_get_flat()
+  * GPU library:
+    +HB_GPU_SHADER_STAGE_VERTEX
+    +HB_GPU_SHADER_STAGE_FRAGMENT
+    +HB_GPU_SHADER_LANG_INVALID
+    +hb_gpu_shader_stage_t
+    +hb_gpu_paint_t
+    +hb_gpu_paint_create_or_fail()
+    +hb_gpu_paint_reference()
+    +hb_gpu_paint_destroy()
+    +hb_gpu_paint_set_user_data()
+    +hb_gpu_paint_get_user_data()
+    +hb_gpu_paint_get_funcs()
+    +hb_gpu_paint_set_palette()
+    +hb_gpu_paint_get_palette()
+    +hb_gpu_paint_set_custom_palette_color()
+    +hb_gpu_paint_clear_custom_palette_colors()
+    +hb_gpu_paint_set_scale()
+    +hb_gpu_paint_get_scale()
+    +hb_gpu_paint_glyph()
+    +hb_gpu_paint_encode()
+    +hb_gpu_paint_clear()
+    +hb_gpu_paint_reset()
+    +hb_gpu_paint_recycle_blob()
+    +hb_gpu_paint_shader_source()
+    +hb_gpu_paint_glyph_or_fail()
+    +hb_gpu_shader_source()
+    +hb_gpu_draw_shader_source()
+    +hb_gpu_draw_clear()
+    +hb_gpu_draw_get_scale()
+    +hb_gpu_draw_glyph_or_fail()
 
-- Changed API, GPU library:
-  * hb_gpu_draw_glyph() now returns void (was hb_bool_t).  Use
-    hb_gpu_draw_glyph_or_fail() if you need the success status.
-  * hb_gpu_paint_glyph() now returns void (was hb_bool_t) and
-    internally synthesizes a foreground-colored layer for
-    non-color glyphs via hb_font_paint_glyph(), so every glyph
-    with an outline produces output.  Use
-    hb_gpu_paint_glyph_or_fail() -- which delegates to
-    hb_font_paint_glyph_or_fail() -- if you need to distinguish
-    color vs synthesized paint.  Encoder-level limits
-    (unsupported ops, group-stack overflow) no longer fail
-    paint_glyph; they surface from hb_gpu_paint_encode()
-    returning NULL.
-  * hb_gpu_draw_encode() now takes an extents out-parameter and
-    auto-clears the encoder on return.
-  * hb_gpu_draw_darken() renamed to hb_gpu_stem_darken().
+  * Raster library:
+    +hb_raster_draw_clear()
+    +hb_raster_draw_glyph_or_fail()
+    +hb_raster_paint_clear()
+    +hb_raster_paint_glyph_or_fail()
+    +hb_raster_paint_set_palette()
+    +hb_raster_paint_get_palette()
+    +hb_raster_paint_get_foreground()
+    +hb_raster_paint_set_background()
+    +hb_raster_paint_get_background()
 
-- Changed API, Vector library:
-  * hb_vector_svg_set_precision() and its paint counterpart renamed
-    to hb_vector_draw_set_precision() / hb_vector_paint_set_precision()
-    (SVG-specific naming is inaccurate with the PDF backend added).
-  * hb_vector_draw_glyph() / hb_vector_paint_glyph() now return
-    void (were hb_bool_t).  Paint additionally gains a draw
-    fallback for non-color glyphs.  Use the matching _or_fail()
-    variants for the bool return.
+  * Vector library:
+    +HB_VECTOR_FORMAT_PDF
+    +hb_vector_draw_clear()
+    +hb_vector_draw_get_precision()
+    +hb_vector_draw_get_format()
+    +hb_vector_draw_glyph_or_fail()
+    +hb_vector_draw_new_path()
+    +hb_vector_draw_set_foreground()
+    +hb_vector_draw_get_foreground()
+    +hb_vector_draw_set_background()
+    +hb_vector_draw_get_background()
+    +hb_vector_paint_clear()
+    +hb_vector_paint_get_precision()
+    +hb_vector_paint_get_format()
+    +hb_vector_paint_get_foreground()
+    +hb_vector_paint_set_background()
+    +hb_vector_paint_get_background()
+    +hb_vector_paint_get_palette()
+    +hb_vector_paint_glyph_or_fail()
+    +hb_vector_paint_set_svg_prefix()
+    +hb_vector_paint_get_svg_prefix()
 
-- Changed API, Raster library:
-  * hb_raster_draw_glyph() / hb_raster_paint_glyph() now return
-    void (were hb_bool_t).  Paint additionally gains a draw
-    fallback for non-color glyphs.  Use the matching _or_fail()
-    variants for the bool return.
+- Removed API
+  * GPU library:
+    -hb_gpu_shader_fragment_source()   (replaced by hb_gpu_shader_source(stage))
+    -hb_gpu_shader_vertex_source()     (replaced by hb_gpu_shader_source(stage))
+    -hb_gpu_draw_get_extents()         (extents are now an out-parameter of hb_gpu_draw_encode())
 
-- Changed API, general:
-  * Many read-only getters gained const on their object argument.
-  * Six public draw / paint funcs getters across raster,
-    vector, and gpu now take a const-pointer to the relevant
-    context instance instead of being singletons:
-      hb_raster_draw_get_funcs (const hb_raster_draw_t *)
-      hb_raster_paint_get_funcs (const hb_raster_paint_t *)
-      hb_vector_draw_get_funcs (const hb_vector_draw_t *)
-      hb_vector_paint_get_funcs (const hb_vector_paint_t *)
-      hb_gpu_draw_get_funcs (const hb_gpu_draw_t *)
-      hb_gpu_paint_get_funcs (const hb_gpu_paint_t *)
-    This is what lets vector_paint dispatch to SVG- vs PDF-
-    flavored callbacks transparently when called from outside
-    code; the others currently use the instance for symmetry
-    only.
+  * Vector library:
+    -hb_vector_draw_set_flat()
+    -hb_vector_draw_get_flat()
+    -hb_vector_paint_set_flat()
+    -hb_vector_paint_get_flat()
 
 
 Overview of changes leading to 14.1.0
diff --git a/docs/harfbuzz-docs.xml b/docs/harfbuzz-docs.xml
index 8859806..505951c 100644
--- a/docs/harfbuzz-docs.xml
+++ b/docs/harfbuzz-docs.xml
@@ -131,6 +131,7 @@
       <index id="api-index-full"><title>API Index</title><xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include></index>
       <index id="deprecated-api-index"><title>Index of deprecated API</title><xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include></index>
 
+      <index id="api-index-14-2-0"><title>Index of new symbols in 14.2.0</title><xi:include href="xml/api-index-14.2.0.xml"><xi:fallback /></xi:include></index>
       <index id="api-index-14-1-0"><title>Index of new symbols in 14.1.0</title><xi:include href="xml/api-index-14.1.0.xml"><xi:fallback /></xi:include></index>
       <index id="api-index-14-0-0"><title>Index of new symbols in 14.0.0</title><xi:include href="xml/api-index-14.0.0.xml"><xi:fallback /></xi:include></index>
       <index id="api-index-13-2-0"><title>Index of new symbols in 13.2.0</title><xi:include href="xml/api-index-13.2.0.xml"><xi:fallback /></xi:include></index>
diff --git a/meson.build b/meson.build
index 78d1d41..bc72451 100644
--- a/meson.build
+++ b/meson.build
@@ -1,6 +1,6 @@
 project('harfbuzz', ['c', 'cpp'],
   meson_version: '>= 0.60.0',
-  version: '14.1.0',
+  version: '14.2.0',
   default_options: [
     'cpp_eh=none',          # Just to support msvc, we are passing -fno-exceptions also anyway
     # 'cpp_rtti=false',     # Do NOT enable, wraps inherit it and ICU needs RTTI
diff --git a/src/hb-draw.cc b/src/hb-draw.cc
index 67972a4..0997153 100644
--- a/src/hb-draw.cc
+++ b/src/hb-draw.cc
@@ -486,7 +486,7 @@
  * `hb_draw_line()` calls form a closed rectangle without gaps
  * at the corners.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 void
 hb_draw_line (hb_draw_funcs_t *dfuncs, void *draw_data,
@@ -576,7 +576,7 @@
  * emitting four hb_draw_line() segments (one per edge) is
  * considerably cheaper per frame.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 void
 hb_draw_rectangle (hb_draw_funcs_t *dfuncs, void *draw_data,
@@ -695,7 +695,7 @@
  * the nominal radius; if @stroke_width is `NaN`, the circle is
  * rendered as a filled disc.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 void
 hb_draw_circle (hb_draw_funcs_t *dfuncs, void *draw_data,
diff --git a/src/hb-draw.h b/src/hb-draw.h
index 1e60db6..fe5a5c8 100644
--- a/src/hb-draw.h
+++ b/src/hb-draw.h
@@ -358,7 +358,7 @@
  *
  * End-cap shape for hb_draw_line().
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 typedef enum {
   HB_DRAW_LINE_CAP_BUTT   = 0,
diff --git a/src/hb-gpu-draw.cc b/src/hb-gpu-draw.cc
index 8051f28..ea47532 100644
--- a/src/hb-gpu-draw.cc
+++ b/src/hb-gpu-draw.cc
@@ -951,7 +951,7 @@
  * Return value: (transfer none):
  * The GPU draw functions
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 hb_draw_funcs_t *
 hb_gpu_draw_get_funcs (const hb_gpu_draw_t *draw HB_UNUSED)
@@ -989,7 +989,7 @@
  * Gets the font scale previously set via hb_gpu_draw_set_scale() or
  * hb_gpu_draw_glyph().
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 void
 hb_gpu_draw_get_scale (const hb_gpu_draw_t *draw,
@@ -1017,7 +1017,7 @@
  * Return value: `true` if the glyph was drawn, `false` if the font
  * has no outlines for @glyph.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 hb_bool_t
 hb_gpu_draw_glyph_or_fail (hb_gpu_draw_t  *draw,
@@ -1060,7 +1060,7 @@
  * encode.  User configuration (font scale) is preserved.  Call
  * hb_gpu_draw_reset() to also reset user configuration to defaults.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 void
 hb_gpu_draw_clear (hb_gpu_draw_t *draw)
@@ -1145,7 +1145,7 @@
  * A shader source string, or `NULL` if @stage or @lang is
  * unsupported.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 const char *
 hb_gpu_draw_shader_source (hb_gpu_shader_stage_t stage,
diff --git a/src/hb-gpu-paint.cc b/src/hb-gpu-paint.cc
index 81d539b..ca89265 100644
--- a/src/hb-gpu-paint.cc
+++ b/src/hb-gpu-paint.cc
@@ -995,7 +995,7 @@
  * A newly allocated #hb_gpu_paint_t, or `NULL` on allocation
  * failure.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 hb_gpu_paint_t *
 hb_gpu_paint_create_or_fail (void)
@@ -1012,7 +1012,7 @@
  * Return value: (transfer full):
  * The referenced #hb_gpu_paint_t.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 hb_gpu_paint_t *
 hb_gpu_paint_reference (hb_gpu_paint_t *paint)
@@ -1027,7 +1027,7 @@
  * Decreases the reference count on @paint by one.  When the
  * reference count reaches zero, the encoder is freed.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 void
 hb_gpu_paint_destroy (hb_gpu_paint_t *paint)
@@ -1057,7 +1057,7 @@
  *
  * Return value: `true` if success, `false` otherwise
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 hb_bool_t
 hb_gpu_paint_set_user_data (hb_gpu_paint_t     *paint,
@@ -1079,7 +1079,7 @@
  * Return value: (transfer none):
  * A pointer to the user data.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 void *
 hb_gpu_paint_get_user_data (const hb_gpu_paint_t *paint,
@@ -1099,7 +1099,7 @@
  * Return value: (transfer none):
  * The GPU paint functions
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 hb_paint_funcs_t *
 hb_gpu_paint_get_funcs (const hb_gpu_paint_t *paint HB_UNUSED)
@@ -1115,7 +1115,7 @@
  * Selects which font palette is used when paint callbacks look up
  * indexed colors.  Default is palette 0.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 void
 hb_gpu_paint_set_palette (hb_gpu_paint_t *paint,
@@ -1133,7 +1133,7 @@
  *
  * Return value: the palette index.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 unsigned
 hb_gpu_paint_get_palette (const hb_gpu_paint_t *paint)
@@ -1147,7 +1147,7 @@
  *
  * Clears all custom palette color overrides previously set on @paint.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 void
 hb_gpu_paint_clear_custom_palette_colors (hb_gpu_paint_t *paint)
@@ -1168,7 +1168,7 @@
  *
  * Return value: `true` if the override was set; `false` on allocation failure.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 hb_bool_t
 hb_gpu_paint_set_custom_palette_color (hb_gpu_paint_t *paint,
@@ -1195,7 +1195,7 @@
  * inside the encoded blob.  Called automatically by
  * hb_gpu_paint_glyph().
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 void
 hb_gpu_paint_set_scale (hb_gpu_paint_t *paint,
@@ -1214,7 +1214,7 @@
  *
  * Fetches the font scale previously set on @paint.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 void
 hb_gpu_paint_get_scale (const hb_gpu_paint_t *paint,
@@ -1248,7 +1248,7 @@
  * Return value: `true` if the font had paint data for @glyph,
  * `false` otherwise.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 hb_bool_t
 hb_gpu_paint_glyph_or_fail (hb_gpu_paint_t *paint,
@@ -1284,7 +1284,7 @@
  * transparently via a synthesized foreground-colored layer,
  * so any glyph with an outline produces output.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 void
 hb_gpu_paint_glyph (hb_gpu_paint_t *paint,
@@ -1329,7 +1329,7 @@
  * callers can distinguish "nothing to render" (length 0) from a
  * real failure (`NULL`).
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 hb_blob_t *
 hb_gpu_paint_encode (hb_gpu_paint_t     *paint,
@@ -1488,7 +1488,7 @@
  * Discards accumulated paint state so @paint can be reused for
  * another encode.  User configuration (font scale) is preserved.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 void
 hb_gpu_paint_clear (hb_gpu_paint_t *paint)
@@ -1521,7 +1521,7 @@
  * Resets @paint, discarding accumulated state and user
  * configuration.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 void
 hb_gpu_paint_reset (hb_gpu_paint_t *paint)
@@ -1546,7 +1546,7 @@
  * will be reused by the next call to hb_gpu_paint_encode(),
  * avoiding a malloc / blob allocation per glyph.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 void
 hb_gpu_paint_recycle_blob (hb_gpu_paint_t *paint,
@@ -1589,7 +1589,7 @@
  * A shader source string, or `NULL` if @stage or @lang is
  * unsupported.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 const char *
 hb_gpu_paint_shader_source (hb_gpu_shader_stage_t stage,
diff --git a/src/hb-gpu.cc b/src/hb-gpu.cc
index 624b58e..ee98cb6 100644
--- a/src/hb-gpu.cc
+++ b/src/hb-gpu.cc
@@ -550,7 +550,7 @@
  * A shader source string, or `NULL` if @stage or @lang is
  * unsupported.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 const char *
 hb_gpu_shader_source (hb_gpu_shader_stage_t stage,
diff --git a/src/hb-gpu.h b/src/hb-gpu.h
index bebf52e..4b75220 100644
--- a/src/hb-gpu.h
+++ b/src/hb-gpu.h
@@ -59,7 +59,7 @@
  *
  * Shader pipeline stage.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 typedef enum {
   HB_GPU_SHADER_STAGE_VERTEX,
@@ -184,7 +184,7 @@
  * paint state via paint callbacks, then encodes it into a compact
  * blob for GPU rendering.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 typedef struct hb_gpu_paint_t hb_gpu_paint_t;
 
diff --git a/src/hb-paint.cc b/src/hb-paint.cc
index f5ed66c..4565635 100644
--- a/src/hb-paint.cc
+++ b/src/hb-paint.cc
@@ -625,7 +625,7 @@
  *   the clip path, or `NULL` if the backend does not implement
  *   arbitrary-path clipping.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 hb_draw_funcs_t *
 hb_paint_push_clip_path_start (hb_paint_funcs_t  *funcs,
@@ -647,7 +647,7 @@
  * accumulated path now acts as a clip on the paint context
  * until a matching hb_paint_pop_clip() call.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 void
 hb_paint_push_clip_path_end (hb_paint_funcs_t *funcs, void *paint_data)
@@ -815,7 +815,7 @@
  * mode known in advance.  By default, this calls
  * hb_paint_push_group().
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 void
 hb_paint_push_group_for (hb_paint_funcs_t *funcs, void *paint_data,
@@ -884,7 +884,7 @@
  * gradient's actual direction (perpendicular to the rotation
  * line).  Degenerate (P0 == P2) passes through unchanged.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 void
 hb_paint_reduce_linear_anchors (float x0, float y0,
@@ -923,7 +923,7 @@
  * to keep the rendered gradient visually unchanged after the
  * rescale.  Empty input is safe: both out-parameters set to 0.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 void
 hb_paint_normalize_color_line (hb_color_stop_t *stops,
@@ -973,7 +973,7 @@
  * offset; use hb_paint_normalize_color_line() first if they
  * aren't.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 void
 hb_paint_sweep_gradient_tiles (hb_color_stop_t                     *stops,
diff --git a/src/hb-paint.h b/src/hb-paint.h
index 027470e..9057e3b 100644
--- a/src/hb-paint.h
+++ b/src/hb-paint.h
@@ -235,7 +235,7 @@
  *   the clip path, or `NULL` if arbitrary-path clipping is not
  *   supported.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 typedef hb_draw_funcs_t * (*hb_paint_push_clip_path_start_func_t) (hb_paint_funcs_t *funcs,
                                                                    void             *paint_data,
@@ -254,7 +254,7 @@
  * paint ops are masked by it until a matching
  * #hb_paint_pop_clip_func_t call.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 typedef void (*hb_paint_push_clip_path_end_func_t) (hb_paint_funcs_t *funcs,
                                                     void             *paint_data,
@@ -744,7 +744,7 @@
  * compositing mode is provided at push time. By default
  * this calls #hb_paint_push_group_func_t.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 typedef void (*hb_paint_push_group_for_func_t) (hb_paint_funcs_t *funcs,
                                                 void *paint_data,
@@ -897,7 +897,7 @@
  *
  * Sets the push-clip-path-start callback on the paint functions struct.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 HB_EXTERN void
 hb_paint_funcs_set_push_clip_path_start_func (hb_paint_funcs_t                     *funcs,
@@ -914,7 +914,7 @@
  *
  * Sets the push-clip-path-end callback on the paint functions struct.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 HB_EXTERN void
 hb_paint_funcs_set_push_clip_path_end_func (hb_paint_funcs_t                   *funcs,
@@ -1050,7 +1050,7 @@
  *
  * Sets the push-group-for callback on the paint functions struct.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 HB_EXTERN void
 hb_paint_funcs_set_push_group_for_func (hb_paint_funcs_t               *funcs,
@@ -1224,7 +1224,7 @@
  * Callback invoked once per (a0, a1) sector of a sweep
  * gradient tiling.  See hb_paint_sweep_gradient_tiles().
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 typedef void (*hb_paint_sweep_gradient_tile_func_t) (float       a0,
                                                      hb_color_t  c0,
diff --git a/src/hb-raster-draw.cc b/src/hb-raster-draw.cc
index 9334a12..ba06756 100644
--- a/src/hb-raster-draw.cc
+++ b/src/hb-raster-draw.cc
@@ -413,7 +413,7 @@
  * is preserved.  Call hb_raster_draw_reset() to also reset user
  * configuration to defaults.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 void
 hb_raster_draw_clear (hb_raster_draw_t *draw)
@@ -944,7 +944,7 @@
  * Return value: (transfer none):
  * The rasterizer draw functions
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 hb_draw_funcs_t *
 hb_raster_draw_get_funcs (const hb_raster_draw_t *draw HB_UNUSED)
@@ -968,7 +968,7 @@
  * Return value: `true` if the glyph was drawn, `false` if the font has
  * no outlines for @glyph.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 hb_bool_t
 hb_raster_draw_glyph_or_fail (hb_raster_draw_t *draw,
@@ -989,7 +989,7 @@
  * transform.  Equivalent to hb_raster_draw_glyph_or_fail() with the
  * return value ignored.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 void
 hb_raster_draw_glyph (hb_raster_draw_t *draw,
diff --git a/src/hb-raster-paint.cc b/src/hb-raster-paint.cc
index 02f1076..d5bcdd8 100644
--- a/src/hb-raster-paint.cc
+++ b/src/hb-raster-paint.cc
@@ -2034,7 +2034,7 @@
  *
  * Return value: the foreground color.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 hb_color_t
 hb_raster_paint_get_foreground (const hb_raster_paint_t *paint)
@@ -2051,7 +2051,7 @@
  * value, the rendered image is pre-filled with this color before
  * glyph content is composited on top.  Default is transparent.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 void
 hb_raster_paint_set_background (hb_raster_paint_t *paint,
@@ -2069,7 +2069,7 @@
  *
  * Return value: the background color.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 hb_color_t
 hb_raster_paint_get_background (const hb_raster_paint_t *paint)
@@ -2085,7 +2085,7 @@
  * Selects which font palette is used when paint callbacks look up
  * indexed colors.  Default is palette 0.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 void
 hb_raster_paint_set_palette (hb_raster_paint_t *paint,
@@ -2103,7 +2103,7 @@
  *
  * Return value: the palette index.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 unsigned
 hb_raster_paint_get_palette (const hb_raster_paint_t *paint)
@@ -2172,7 +2172,7 @@
  * Return value: (transfer none):
  * The rasterizer paint functions
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 hb_paint_funcs_t *
 hb_raster_paint_get_funcs (const hb_raster_paint_t *paint HB_UNUSED)
@@ -2229,7 +2229,7 @@
  *
  * Return value: `true` if painting succeeded, `false` otherwise.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 hb_bool_t
 hb_raster_paint_glyph_or_fail (hb_raster_paint_t *paint,
@@ -2250,7 +2250,7 @@
  * fall back to a synthesized foreground-colored outline, so any
  * glyph with an outline or bitmap image produces output.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 void
 hb_raster_paint_glyph (hb_raster_paint_t *paint,
@@ -2322,7 +2322,7 @@
  * hb_raster_paint_reset() to also reset user configuration to
  * defaults.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  **/
 void
 hb_raster_paint_clear (hb_raster_paint_t *paint)
diff --git a/src/hb-vector-draw.cc b/src/hb-vector-draw.cc
index fbf3d27..1a96cb0 100644
--- a/src/hb-vector-draw.cc
+++ b/src/hb-vector-draw.cc
@@ -434,7 +434,7 @@
  *
  * Return value: the output format.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 hb_vector_format_t
 hb_vector_draw_get_format (const hb_vector_draw_t *draw)
@@ -451,7 +451,7 @@
  *
  * Return value: (transfer none): immutable #hb_draw_funcs_t.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 hb_draw_funcs_t *
 hb_vector_draw_get_funcs (const hb_vector_draw_t *draw)
@@ -472,7 +472,7 @@
  * between glyphs to separate their outlines so fill rules
  * don't interact across glyphs.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 void
 hb_vector_draw_new_path (hb_vector_draw_t *draw)
@@ -498,7 +498,7 @@
  *
  * Return value: `true` if glyph data was emitted, `false` otherwise.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 hb_bool_t
 hb_vector_draw_glyph_or_fail (hb_vector_draw_t *draw,
@@ -537,7 +537,7 @@
  * Draws one glyph into @draw.  Equivalent to
  * hb_vector_draw_glyph_or_fail() with the return value ignored.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 void
 hb_vector_draw_glyph (hb_vector_draw_t *draw,
@@ -556,7 +556,7 @@
  *
  * Sets numeric output precision for draw output.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 void
 hb_vector_draw_set_precision (hb_vector_draw_t *draw,
@@ -574,7 +574,7 @@
  *
  * Return value: the precision.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 unsigned
 hb_vector_draw_get_precision (const hb_vector_draw_t *draw)
@@ -590,7 +590,7 @@
  * Sets the fill color for drawn glyph outlines.
  * Default is opaque black.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 void
 hb_vector_draw_set_foreground (hb_vector_draw_t *draw,
@@ -608,7 +608,7 @@
  *
  * Return value: the foreground color.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 hb_color_t
 hb_vector_draw_get_foreground (const hb_vector_draw_t *draw)
@@ -625,7 +625,7 @@
  * rectangle covering the extents is emitted behind all content.
  * Default is transparent (no background).
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 void
 hb_vector_draw_set_background (hb_vector_draw_t *draw,
@@ -642,7 +642,7 @@
  *
  * Return value: the background color.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 hb_color_t
 hb_vector_draw_get_background (const hb_vector_draw_t *draw)
@@ -885,7 +885,7 @@
  * precision) is preserved.  Call hb_vector_draw_reset() to
  * also reset user configuration to defaults.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 void
 hb_vector_draw_clear (hb_vector_draw_t *draw)
diff --git a/src/hb-vector-paint.cc b/src/hb-vector-paint.cc
index 0ff998b..5d66c2a 100644
--- a/src/hb-vector-paint.cc
+++ b/src/hb-vector-paint.cc
@@ -365,7 +365,7 @@
  *
  * Return value: the foreground color.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 hb_color_t
 hb_vector_paint_get_foreground (const hb_vector_paint_t *paint)
@@ -382,7 +382,7 @@
  * value, the renderer emits a filled rectangle covering the extents
  * behind all glyph content.  Default is transparent (no background).
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 void
 hb_vector_paint_set_background (hb_vector_paint_t *paint,
@@ -400,7 +400,7 @@
  *
  * Return value: the background color.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 hb_color_t
 hb_vector_paint_get_background (const hb_vector_paint_t *paint)
@@ -433,7 +433,7 @@
  *
  * Return value: the palette index.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 int
 hb_vector_paint_get_palette (const hb_vector_paint_t *paint)
@@ -489,7 +489,7 @@
  *
  * Return value: the output format.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 hb_vector_format_t
 hb_vector_paint_get_format (const hb_vector_paint_t *paint)
@@ -506,7 +506,7 @@
  *
  * Return value: (transfer none): immutable #hb_paint_funcs_t.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 hb_paint_funcs_t *
 hb_vector_paint_get_funcs (const hb_vector_paint_t *paint)
@@ -590,7 +590,7 @@
  *
  * Return value: `true` if glyph paint data was emitted, `false` otherwise.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 hb_bool_t
 hb_vector_paint_glyph_or_fail (hb_vector_paint_t *paint,
@@ -614,7 +614,7 @@
  * data fall back to a synthesized foreground-colored outline,
  * so any glyph with an outline or bitmap image produces output.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 void
 hb_vector_paint_glyph (hb_vector_paint_t *paint,
@@ -640,7 +640,7 @@
  *
  * No effect on PDF output.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 void
 hb_vector_paint_set_svg_prefix (hb_vector_paint_t *paint,
@@ -675,7 +675,7 @@
  *
  * Return value: the SVG id prefix.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 const char *
 hb_vector_paint_get_svg_prefix (const hb_vector_paint_t *paint)
@@ -690,7 +690,7 @@
  *
  * Sets numeric output precision for paint output.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 void
 hb_vector_paint_set_precision (hb_vector_paint_t *paint,
@@ -708,7 +708,7 @@
  *
  * Return value: the precision.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 unsigned
 hb_vector_paint_get_precision (const hb_vector_paint_t *paint)
@@ -726,7 +726,7 @@
  * is preserved.  Call hb_vector_paint_reset() to also reset
  * user configuration to defaults.
  *
- * XSince: REPLACEME
+ * Since: 14.2.0
  */
 void
 hb_vector_paint_clear (hb_vector_paint_t *paint)
diff --git a/src/hb-version.h b/src/hb-version.h
index cc67563..f44973e 100644
--- a/src/hb-version.h
+++ b/src/hb-version.h
@@ -47,7 +47,7 @@
  *
  * The minor component of the library version available at compile-time.
  */
-#define HB_VERSION_MINOR 1
+#define HB_VERSION_MINOR 2
 /**
  * HB_VERSION_MICRO:
  *
@@ -60,7 +60,7 @@
  *
  * A string literal containing the library version available at compile-time.
  */
-#define HB_VERSION_STRING "14.1.0"
+#define HB_VERSION_STRING "14.2.0"
 
 /**
  * HB_VERSION_ATLEAST: