diff --git a/package.json b/package.json
index 42161e4807a9..9ae002532b6a 100644
--- a/package.json
+++ b/package.json
@@ -68,7 +68,7 @@
     "node-notifier": "^10.0.0",
     "p-limit": "^3.1.0",
     "pkg-dir": "^5.0.0",
-    "prettier": "^2.1.1",
+    "prettier": "3.0.0",
     "promise": "^8.0.2",
     "read-pkg": "^5.2.0",
     "resolve": "^1.20.0",
diff --git a/packages/babel-plugin-jest-hoist/package.json b/packages/babel-plugin-jest-hoist/package.json
index 3698c80ff7a9..d9a626ff302c 100644
--- a/packages/babel-plugin-jest-hoist/package.json
+++ b/packages/babel-plugin-jest-hoist/package.json
@@ -31,9 +31,8 @@
     "@babel/preset-typescript": "^7.0.0",
     "@types/babel__template": "^7.0.2",
     "@types/node": "*",
-    "@types/prettier": "^2.1.5",
     "babel-plugin-tester": "^11.0.2",
-    "prettier": "^2.1.1"
+    "prettier": "3.0.0"
   },
   "publishConfig": {
     "access": "public"
diff --git a/packages/jest-snapshot/package.json b/packages/jest-snapshot/package.json
index 2241c74253a4..8fbb75488fae 100644
--- a/packages/jest-snapshot/package.json
+++ b/packages/jest-snapshot/package.json
@@ -50,7 +50,7 @@
     "@types/semver": "^7.1.0",
     "ansi-regex": "^5.0.1",
     "ansi-styles": "^5.0.0",
-    "prettier": "^2.1.1",
+    "prettier": "3.0.0",
     "tsd-lite": "^0.7.0"
   },
   "engines": {
diff --git a/scripts/build.mjs b/scripts/build.mjs
index 50dc12493c66..aead3c9531d0 100644
--- a/scripts/build.mjs
+++ b/scripts/build.mjs
@@ -24,7 +24,7 @@ import chalk from 'chalk';
 import glob from 'glob';
 import fs from 'graceful-fs';
 import micromatch from 'micromatch';
-import prettier from 'prettier';
+import * as prettier from 'prettier';
 import transformOptions from '../babel.config.js';
 import {
   OK,
@@ -42,7 +42,7 @@ const IGNORE_PATTERN = '**/__{tests,mocks}__/**';
 const INLINE_REQUIRE_EXCLUDE_LIST =
   /packages\/expect|(jest-(circus|diff|get-type|jasmine2|matcher-utils|message-util|regex-util|snapshot))|pretty-format\//;
 
-const prettierConfig = prettier.resolveConfig.sync(
+const prettierConfig = await prettier.resolveConfig(
   fileURLToPath(import.meta.url),
 );
 prettierConfig.trailingComma = 'none';
@@ -60,13 +60,15 @@ function getBuildPath(file, buildFolder) {
   return path.resolve(pkgBuildPath, relativeToSrcPath).replace(/\.ts$/, '.js');
 }
 
-function buildNodePackage({packageDir, pkg}) {
+async function buildNodePackage({packageDir, pkg}) {
   const srcDir = path.resolve(packageDir, SRC_DIR);
   const files = glob.sync('**/*', {absolute: true, cwd: srcDir, nodir: true});
 
   process.stdout.write(adjustToTerminalWidth(`${pkg.name}\n`));
 
-  files.forEach(file => buildFile(file, true));
+  for (const file of files) {
+    await buildFile(file);
+  }
 
   assert.ok(
     fs.existsSync(path.resolve(packageDir, pkg.main)),
@@ -76,7 +78,7 @@ function buildNodePackage({packageDir, pkg}) {
   process.stdout.write(`${OK}\n`);
 }
 
-function buildFile(file, silent) {
+async function buildFile(file, silent) {
   const destPath = getBuildPath(file, BUILD_DIR);
 
   if (micromatch.isMatch(file, IGNORE_PATTERN)) {
@@ -131,7 +133,7 @@ function buildFile(file, silent) {
     }
 
     const transformed = babel.transformFileSync(file, options).code;
-    const prettyCode = prettier.format(transformed, prettierConfig);
+    const prettyCode = await prettier.format(transformed, prettierConfig);
 
     fs.writeFileSync(destPath, prettyCode);
 
@@ -150,9 +152,13 @@ function buildFile(file, silent) {
 const files = process.argv.slice(2);
 
 if (files.length) {
-  files.forEach(file => buildFile(file));
+  for (const file of files) {
+    await buildFile(file);
+  }
 } else {
   const packages = getPackages();
   process.stdout.write(chalk.inverse(' Building packages \n'));
-  packages.forEach(buildNodePackage);
+  for (const pkg of packages) {
+    await buildNodePackage(pkg);
+  }
 }
diff --git a/scripts/bundleTs.mjs b/scripts/bundleTs.mjs
index a9c6d5310743..898f80b76ce0 100644
--- a/scripts/bundleTs.mjs
+++ b/scripts/bundleTs.mjs
@@ -20,7 +20,7 @@ import prettier from 'prettier';
 import {rimraf} from 'rimraf';
 import {getPackages} from './buildUtils.mjs';
 
-const prettierConfig = prettier.resolveConfig.sync(
+const prettierConfig = await prettier.resolveConfig(
   fileURLToPath(import.meta.url).replace(/\.js$/, '.d.ts'),
 );
 
@@ -194,7 +194,7 @@ await Promise.all(
       ...definitionFile.split(copyrightSnippet),
     ].join('\n');
 
-    const formattedContent = prettier.format(definitionFile, {
+    const formattedContent = await prettier.format(definitionFile, {
       ...prettierConfig,
       filepath,
     });
diff --git a/yarn.lock b/yarn.lock
index 0c08ce49ae00..a2c7c9f28521 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2900,7 +2900,7 @@ __metadata:
     node-notifier: ^10.0.0
     p-limit: ^3.1.0
     pkg-dir: ^5.0.0
-    prettier: ^2.1.1
+    prettier: 3.0.0
     promise: ^8.0.2
     read-pkg: ^5.2.0
     resolve: ^1.20.0
@@ -6301,9 +6301,8 @@ __metadata:
     "@types/babel__template": ^7.0.2
     "@types/babel__traverse": ^7.0.6
     "@types/node": "*"
-    "@types/prettier": ^2.1.5
     babel-plugin-tester: ^11.0.2
-    prettier: ^2.1.1
+    prettier: 3.0.0
   languageName: unknown
   linkType: soft
 
@@ -13000,7 +12999,7 @@ __metadata:
     jest-message-util: "workspace:^"
     jest-util: "workspace:^"
     natural-compare: ^1.4.0
-    prettier: ^2.1.1
+    prettier: 3.0.0
     pretty-format: "workspace:^"
     semver: ^7.5.3
     tsd-lite: ^0.7.0
@@ -16916,7 +16915,16 @@ __metadata:
   languageName: node
   linkType: hard
 
-"prettier@npm:^2.1.1, prettier@npm:^2.8.3":
+"prettier@npm:3.0.0":
+  version: 3.0.0
+  resolution: "prettier@npm:3.0.0"
+  bin:
+    prettier: bin/prettier.cjs
+  checksum: 6a832876a1552dc58330d2467874e5a0b46b9ccbfc5d3531eb69d15684743e7f83dc9fbd202db6270446deba9c82b79d24383d09924c462b457136a759425e33
+  languageName: node
+  linkType: hard
+
+"prettier@npm:^2.8.3":
   version: 2.8.7
   resolution: "prettier@npm:2.8.7"
   bin: