diff --git a/NEWS b/NEWS
index a8b15f752..d8d219e43 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,54 @@
+Overview of changes leading to 3.0.0
+Friday, September 17, 2021
+====================================
+- Unicode 14.0 support (David Corbett).
+- The hb-subset API and the harfbuzz-subset library's ABI are now declared
+ stable. The harfbuzz-subset library would not have been possible without the
+ work of Garret Rieger and Qunxin Liu from Google Fonts, and the earlier work
+ of Michiharu Ariza from Adobe.
+- The hb-style API is now stable and no longer experimental.
+
+- New API:
++hb_style_tag_t
++hb_style_get_value()
++hb_subset_input_t
++hb_subset_flags_t
++hb_subset_sets_t
++hb_subset_input_create_or_fail()
++hb_subset_input_reference()
++hb_subset_input_destroy()
++hb_subset_input_set_user_data()
++hb_subset_input_get_user_data()
++hb_subset_input_unicode_set()
++hb_subset_input_glyph_set()
++hb_subset_input_set()
++hb_subset_input_get_flags()
++hb_subset_input_set_flags()
++hb_subset_or_fail()
+
+- Removed old unstable harfbuzz-subset API:
+-hb_subset_input_nameid_set()
+-hb_subset_input_namelangid_set()
+-hb_subset_input_layout_features_set()
+-hb_subset_input_no_subset_tables_set()
+-hb_subset_input_drop_tables_set()
+-hb_subset_input_set_drop_hints()
+-hb_subset_input_get_drop_hints()
+-hb_subset_input_set_desubroutinize()
+-hb_subset_input_get_desubroutinize()
+-hb_subset_input_set_retain_gids()
+-hb_subset_input_get_retain_gids()
+-hb_subset_input_set_name_legacy()
+-hb_subset_input_get_name_legacy()
+-hb_subset_input_set_overlaps_flag()
+-hb_subset_input_get_overlaps_flag()
+-hb_subset_input_set_notdef_outline()
+-hb_subset_input_get_notdef_outline()
+-hb_subset_input_set_no_prune_unicode_ranges()
+-hb_subset_input_get_no_prune_unicode_ranges()
+-hb_subset()
+
+
Overview of changes leading to 2.9.1
Tuesday, September 7, 2021
====================================
diff --git a/configure.ac b/configure.ac
index 507185735..5d6875830 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,6 +1,6 @@
AC_PREREQ([2.64])
AC_INIT([HarfBuzz],
- [2.9.1],
+ [3.0.0],
[https://github.com/harfbuzz/harfbuzz/issues/new],
[harfbuzz],
[http://harfbuzz.org/])
diff --git a/docs/harfbuzz-docs.xml b/docs/harfbuzz-docs.xml
index c2b232334..a7e9ca379 100644
--- a/docs/harfbuzz-docs.xml
+++ b/docs/harfbuzz-docs.xml
@@ -116,6 +116,7 @@
API Index
Index of deprecated API
+ Index of new symbols in 3.0.0
Index of new symbols in 2.9.1
Index of new symbols in 2.9.0
Index of new symbols in 2.8.2
diff --git a/meson.build b/meson.build
index 6b3d55876..389c49c36 100644
--- a/meson.build
+++ b/meson.build
@@ -1,6 +1,6 @@
project('harfbuzz', 'c', 'cpp',
meson_version: '>= 0.52.0',
- version: '2.9.1',
+ version: '3.0.0',
default_options: [
'cpp_rtti=false', # Just to support msvc, we are passing -fno-exceptions also anyway
'cpp_std=c++11',
diff --git a/src/hb-common.h b/src/hb-common.h
index faa27ff70..0384117a4 100644
--- a/src/hb-common.h
+++ b/src/hb-common.h
@@ -476,11 +476,11 @@ hb_language_get_default (void);
* @HB_SCRIPT_DIVES_AKURU: `Diak`, Since: 2.6.7
* @HB_SCRIPT_KHITAN_SMALL_SCRIPT: `Kits`, Since: 2.6.7
* @HB_SCRIPT_YEZIDI: `Yezi`, Since: 2.6.7
- * @HB_SCRIPT_CYPRO_MINOAN: `Cpmn`, Since: REPLACEME
- * @HB_SCRIPT_OLD_UYGHUR: `Ougr`, Since: REPLACEME
- * @HB_SCRIPT_TANGSA: `Tnsa`, Since: REPLACEME
- * @HB_SCRIPT_TOTO: `Toto`, Since: REPLACEME
- * @HB_SCRIPT_VITHKUQI: `Vith`, Since: REPLACEME
+ * @HB_SCRIPT_CYPRO_MINOAN: `Cpmn`, Since: 3.0.0
+ * @HB_SCRIPT_OLD_UYGHUR: `Ougr`, Since: 3.0.0
+ * @HB_SCRIPT_TANGSA: `Tnsa`, Since: 3.0.0
+ * @HB_SCRIPT_TOTO: `Toto`, Since: 3.0.0
+ * @HB_SCRIPT_VITHKUQI: `Vith`, Since: 3.0.0
* @HB_SCRIPT_INVALID: No script set
*
* Data type for scripts. Each #hb_script_t's value is an #hb_tag_t corresponding
@@ -689,7 +689,7 @@ typedef enum
HB_SCRIPT_YEZIDI = HB_TAG ('Y','e','z','i'), /*13.0*/
/*
- * Since REPLACEME
+ * Since 3.0.0
*/
HB_SCRIPT_CYPRO_MINOAN = HB_TAG ('C','p','m','n'), /*14.0*/
HB_SCRIPT_OLD_UYGHUR = HB_TAG ('O','u','g','r'), /*14.0*/
diff --git a/src/hb-style.cc b/src/hb-style.cc
index 126fcc058..dfb1017c8 100644
--- a/src/hb-style.cc
+++ b/src/hb-style.cc
@@ -67,7 +67,7 @@ _hb_ratio_to_angle (float r)
*
* Returns: Corresponding axis or default value to a style tag.
*
- * Since: REPLACEME
+ * Since: 3.0.0
**/
float
hb_style_get_value (hb_font_t *font, hb_style_tag_t style_tag)
diff --git a/src/hb-style.h b/src/hb-style.h
index 5af581f3e..30a6f2b87 100644
--- a/src/hb-style.h
+++ b/src/hb-style.h
@@ -55,7 +55,7 @@ HB_BEGIN_DECLS
*
* Defined by [OpenType Design-Variation Axis Tag Registry](https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg).
*
- * Since: REPLACEME
+ * Since: 3.0.0
**/
typedef enum
{
diff --git a/src/hb-version.h b/src/hb-version.h
index 34d10d665..70325f88e 100644
--- a/src/hb-version.h
+++ b/src/hb-version.h
@@ -41,26 +41,26 @@ HB_BEGIN_DECLS
*
* The major component of the library version available at compile-time.
*/
-#define HB_VERSION_MAJOR 2
+#define HB_VERSION_MAJOR 3
/**
* HB_VERSION_MINOR:
*
* The minor component of the library version available at compile-time.
*/
-#define HB_VERSION_MINOR 9
+#define HB_VERSION_MINOR 0
/**
* HB_VERSION_MICRO:
*
* The micro component of the library version available at compile-time.
*/
-#define HB_VERSION_MICRO 1
+#define HB_VERSION_MICRO 0
/**
* HB_VERSION_STRING:
*
* A string literal containing the library version available at compile-time.
*/
-#define HB_VERSION_STRING "2.9.1"
+#define HB_VERSION_STRING "3.0.0"
/**
* HB_VERSION_ATLEAST: