diff --git a/.changeset/breezy-goats-nail.md b/.changeset/breezy-goats-nail.md
new file mode 100644
index 00000000000..e6247b7d36d
--- /dev/null
+++ b/.changeset/breezy-goats-nail.md
@@ -0,0 +1,27 @@
+---
+'@firebase/installations-types': patch
+'@firebase/performance-compat': patch
+'@firebase/rules-unit-testing': patch
+'@firebase/performance-types': patch
+'@firebase/firestore-compat': patch
+'@firebase/database-compat': patch
+'@firebase/storage-compat': patch
+'@firebase/remote-config': patch
+'@firebase/auth-compat': patch
+'@firebase/performance': patch
+'@firebase/app-compat': patch
+'@firebase/analytics': patch
+'@firebase/app-check': patch
+'@firebase/component': patch
+'@firebase/firestore': patch
+'@firebase/functions': patch
+'@firebase/database': patch
+'firebase': patch
+'@firebase/vertexai-preview': patch
+'@firebase/storage': patch
+'@firebase/auth': patch
+'@firebase/util': patch
+'@firebase/app': patch
+---
+
+Fixed typos in documentation and some internal variables and parameters.
diff --git a/.editorconfig b/.editorconfig
index f4d80702c64..83abd4e12b5 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -11,7 +11,7 @@ root = true
 end_of_line = lf
 insert_final_newline = true
 
-# Javascript and Typescript look like Google-style
+# JavaScript and TypeScript look like Google-style
 [*.{js,json,ts}]
 charset = utf-8
 indent_style = space
diff --git a/.github/ISSUE_TEMPLATE/bug_report_v2.yaml b/.github/ISSUE_TEMPLATE/bug_report_v2.yaml
index 30041068b61..289ab8125b0 100644
--- a/.github/ISSUE_TEMPLATE/bug_report_v2.yaml
+++ b/.github/ISSUE_TEMPLATE/bug_report_v2.yaml
@@ -22,7 +22,7 @@ body:
     attributes:
       value: |
         *[READ THIS]:* to evaluate if you are in the right place?
-        - For issues or feature requests related to __the code in this repository__, file a Github issue.
+        - For issues or feature requests related to __the code in this repository__, file a GitHub issue.
         - If this is a __feature request__, make sure the issue title starts with "FR:".
         - For general technical questions, post a question on [StackOverflow](http://stackoverflow.com/) with the firebase tag.
         - For general Firebase discussion, use the [firebase-talk](https://groups.google.com/forum/#!forum/firebase-talk) google group.
diff --git a/.github/workflows/release-prod.yml b/.github/workflows/release-prod.yml
index 426991d2e6c..3c5b3380fcf 100644
--- a/.github/workflows/release-prod.yml
+++ b/.github/workflows/release-prod.yml
@@ -120,7 +120,7 @@ jobs:
         curl -X POST -H "Content-Type:application/json" \
         -d "{\"version\":\"$BASE_VERSION\",\"date\":\"$DATE\"}" \
         $RELEASE_TRACKER_URL/logProduction
-    - name: Create Github release
+    - name: Create GitHub release
       env:
         GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
       run: |
diff --git a/.github/workflows/test-all.yml b/.github/workflows/test-all.yml
index 2264ab233fd..441abec0f5f 100644
--- a/.github/workflows/test-all.yml
+++ b/.github/workflows/test-all.yml
@@ -20,7 +20,7 @@ env:
   # make chromedriver detect installed Chrome version and download the corresponding driver
   DETECT_CHROMEDRIVER_VERSION: true
   # The default behavior of chromedriver uses the older Chrome download URLs. We need to override
-  # the beahvior to use the new URLs.
+  # the behavior to use the new URLs.
   CHROMEDRIVER_CDNURL: https://googlechromelabs.github.io/
   CHROMEDRIVER_CDNBINARIESURL: https://storage.googleapis.com/chrome-for-testing-public
   CHROME_VALIDATED_VERSION: linux-120.0.6099.71
diff --git a/.github/workflows/test-changed-auth.yml b/.github/workflows/test-changed-auth.yml
index 03674485c7f..3c0ba9d02e4 100644
--- a/.github/workflows/test-changed-auth.yml
+++ b/.github/workflows/test-changed-auth.yml
@@ -20,7 +20,7 @@ env:
   # make chromedriver detect installed Chrome version and download the corresponding driver
   DETECT_CHROMEDRIVER_VERSION: true
   # The default behavior of chromedriver uses the older Chrome download URLs. We need to override
-  # the beahvior to use the new URLs.
+  # the behavior to use the new URLs.
   CHROMEDRIVER_CDNURL: https://googlechromelabs.github.io/
   CHROMEDRIVER_CDNBINARIESURL: https://storage.googleapis.com/chrome-for-testing-public
   CHROME_VALIDATED_VERSION: linux-120.0.6099.71
diff --git a/README.md b/README.md
index cbac0a604d4..bedc25c3fb7 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# Firebase Javascript SDK
+# Firebase JavaScript SDK
 
 <!-- BADGES -->
 ![Build Status](https://img.shields.io/github/actions/workflow/status/firebase/firebase-js-sdk/test-all.yml)
diff --git a/config/karma.saucelabs.js b/config/karma.saucelabs.js
index 4517d5b6ee1..b6572d9eace 100644
--- a/config/karma.saucelabs.js
+++ b/config/karma.saucelabs.js
@@ -105,7 +105,7 @@ function getPackageLabels() {
 
 /**
  * Gets a list of file patterns for test, defined individually
- * in karma.conf.js in each package under worksapce packages or
+ * in karma.conf.js in each package under workspace packages or
  * integration.
  */
 function getTestFiles() {
diff --git a/docs-devsite/firestore_.md b/docs-devsite/firestore_.md
index 74a0c356523..0b374bdf3d8 100644
--- a/docs-devsite/firestore_.md
+++ b/docs-devsite/firestore_.md
@@ -179,7 +179,7 @@ https://github.com/firebase/firebase-js-sdk
 |  [PersistentCacheSettings](./firestore_.persistentcachesettings.md#persistentcachesettings_interface) | An settings object to configure an <code>PersistentLocalCache</code> instance.<!-- -->Persistent cache cannot be used in a Node.js environment. |
 |  [PersistentLocalCache](./firestore_.persistentlocalcache.md#persistentlocalcache_interface) | Provides a persistent cache backed by IndexedDb to the SDK.<!-- -->To use, create an instance using the factory function , then set the instance to <code>FirestoreSettings.cache</code> and call <code>initializeFirestore</code> using the settings object. |
 |  [PersistentMultipleTabManager](./firestore_.persistentmultipletabmanager.md#persistentmultipletabmanager_interface) | A tab manager supporting multiple tabs. SDK will synchronize queries and mutations done across all tabs using the SDK. |
-|  [PersistentSingleTabManager](./firestore_.persistentsingletabmanager.md#persistentsingletabmanager_interface) | A tab manager supportting only one tab, no synchronization will be performed across tabs. |
+|  [PersistentSingleTabManager](./firestore_.persistentsingletabmanager.md#persistentsingletabmanager_interface) | A tab manager supporting only one tab, no synchronization will be performed across tabs. |
 |  [PersistentSingleTabManagerSettings](./firestore_.persistentsingletabmanagersettings.md#persistentsingletabmanagersettings_interface) | Type to configure an <code>PersistentSingleTabManager</code> instance. |
 |  [SnapshotListenOptions](./firestore_.snapshotlistenoptions.md#snapshotlistenoptions_interface) | An options object that can be passed to [onSnapshot()](./firestore_.md#onsnapshot_0312fd7) and [QuerySnapshot.docChanges()](./firestore_.querysnapshot.md#querysnapshotdocchanges) to control which types of changes to include in the result set. |
 |  [SnapshotOptions](./firestore_.snapshotoptions.md#snapshotoptions_interface) | Options that configure how data is retrieved from a <code>DocumentSnapshot</code> (for example the desired behavior for server timestamps that have not yet been set to their final value). |
@@ -205,10 +205,10 @@ https://github.com/firebase/firebase-js-sdk
 |  [FirestoreErrorCode](./firestore_.md#firestoreerrorcode) | The set of Firestore status codes. The codes are the same at the ones exposed by gRPC here: https://github.com/grpc/grpc/blob/master/doc/statuscodes.md<!-- -->Possible values: - 'cancelled': The operation was cancelled (typically by the caller). - 'unknown': Unknown error or an error from a different error domain. - 'invalid-argument': Client specified an invalid argument. Note that this differs from 'failed-precondition'. 'invalid-argument' indicates arguments that are problematic regardless of the state of the system (e.g. an invalid field name). - 'deadline-exceeded': Deadline expired before operation could complete. For operations that change the state of the system, this error may be returned even if the operation has completed successfully. For example, a successful response from a server could have been delayed long enough for the deadline to expire. - 'not-found': Some requested document was not found. - 'already-exists': Some document that we attempted to create already exists. - 'permission-denied': The caller does not have permission to execute the specified operation. - 'resource-exhausted': Some resource has been exhausted, perhaps a per-user quota, or perhaps the entire file system is out of space. - 'failed-precondition': Operation was rejected because the system is not in a state required for the operation's execution. - 'aborted': The operation was aborted, typically due to a concurrency issue like transaction aborts, etc. - 'out-of-range': Operation was attempted past the valid range. - 'unimplemented': Operation is not implemented or not supported/enabled. - 'internal': Internal errors. Means some invariants expected by underlying system has been broken. If you see one of these errors, something is very broken. - 'unavailable': The service is currently unavailable. This is most likely a transient condition and may be corrected by retrying with a backoff. - 'data-loss': Unrecoverable data loss or corruption. - 'unauthenticated': The request does not have valid authentication credentials for the operation. |
 |  [FirestoreLocalCache](./firestore_.md#firestorelocalcache) | Union type from all supported SDK cache layer. |
 |  [ListenSource](./firestore_.md#listensource) | Describe the source a query listens to.<!-- -->Set to <code>default</code> to listen to both cache and server changes. Set to <code>cache</code> to listen to changes in cache only. |
-|  [MemoryGarbageCollector](./firestore_.md#memorygarbagecollector) | Union type from all support gabage collectors for memory local cache. |
+|  [MemoryGarbageCollector](./firestore_.md#memorygarbagecollector) | Union type from all support garbage collectors for memory local cache. |
 |  [NestedUpdateFields](./firestore_.md#nestedupdatefields) | For each field (e.g. 'bar'), find all nested keys (e.g. {<!-- -->'bar.baz': T1, 'bar.qux': T2<!-- -->}<!-- -->). Intersect them together to make a single map containing all possible keys that are all marked as optional |
 |  [OrderByDirection](./firestore_.md#orderbydirection) | The direction of a [orderBy()](./firestore_.md#orderby_006d61f) clause is specified as 'desc' or 'asc' (descending or ascending). |
-|  [PartialWithFieldValue](./firestore_.md#partialwithfieldvalue) | Similar to Typescript's <code>Partial&lt;T&gt;</code>, but allows nested fields to be omitted and FieldValues to be passed in as property values. |
+|  [PartialWithFieldValue](./firestore_.md#partialwithfieldvalue) | Similar to TypeScript's <code>Partial&lt;T&gt;</code>, but allows nested fields to be omitted and FieldValues to be passed in as property values. |
 |  [PersistentTabManager](./firestore_.md#persistenttabmanager) | A union of all available tab managers. |
 |  [Primitive](./firestore_.md#primitive) | Primitive types. |
 |  [QueryConstraintType](./firestore_.md#queryconstrainttype) | Describes the different query constraints available in this SDK. |
@@ -1954,7 +1954,7 @@ export declare function doc<AppModelType, DbModelType extends DocumentData>(refe
 |  Parameter | Type | Description |
 |  --- | --- | --- |
 |  reference | [CollectionReference](./firestore_.collectionreference.md#collectionreference_class)<!-- -->&lt;AppModelType, DbModelType&gt; | A reference to a collection. |
-|  path | string | A slash-separated path to a document. Has to be omitted to use auto-genrated IDs. |
+|  path | string | A slash-separated path to a document. Has to be omitted to use auto-generated IDs. |
 |  pathSegments | string\[\] | Additional path segments that will be applied relative to the first argument. |
 
 <b>Returns:</b>
@@ -2566,7 +2566,7 @@ export declare type ListenSource = 'default' | 'cache';
 
 ## MemoryGarbageCollector
 
-Union type from all support gabage collectors for memory local cache.
+Union type from all support garbage collectors for memory local cache.
 
 <b>Signature:</b>
 
@@ -2598,7 +2598,7 @@ export declare type OrderByDirection = 'desc' | 'asc';
 
 ## PartialWithFieldValue
 
-Similar to Typescript's `Partial<T>`<!-- -->, but allows nested fields to be omitted and FieldValues to be passed in as property values.
+Similar to TypeScript's `Partial<T>`<!-- -->, but allows nested fields to be omitted and FieldValues to be passed in as property values.
 
 <b>Signature:</b>
 
diff --git a/docs-devsite/firestore_.persistentsingletabmanager.md b/docs-devsite/firestore_.persistentsingletabmanager.md
index ee130b6fc6a..22601cf31fb 100644
--- a/docs-devsite/firestore_.persistentsingletabmanager.md
+++ b/docs-devsite/firestore_.persistentsingletabmanager.md
@@ -10,7 +10,7 @@ https://github.com/firebase/firebase-js-sdk
 {% endcomment %}
 
 # PersistentSingleTabManager interface
-A tab manager supportting only one tab, no synchronization will be performed across tabs.
+A tab manager supporting only one tab, no synchronization will be performed across tabs.
 
 <b>Signature:</b>
 
diff --git a/docs-devsite/firestore_lite.firestoredataconverter.md b/docs-devsite/firestore_lite.firestoredataconverter.md
index 9295c7055f7..83a80731b42 100644
--- a/docs-devsite/firestore_lite.firestoredataconverter.md
+++ b/docs-devsite/firestore_lite.firestoredataconverter.md
@@ -27,8 +27,8 @@ export declare interface FirestoreDataConverter<AppModelType, DbModelType extend
 |  Method | Description |
 |  --- | --- |
 |  [fromFirestore(snapshot)](./firestore_lite.firestoredataconverter.md#firestoredataconverterfromfirestore) | Called by the Firestore SDK to convert Firestore data into an object of type <code>AppModelType</code>. You can access your data by calling: <code>snapshot.data()</code>.<!-- -->Generally, the data returned from <code>snapshot.data()</code> can be cast to <code>DbModelType</code>; however, this is not guaranteed because Firestore does not enforce a schema on the database. For example, writes from a previous version of the application or writes from another client that did not use a type converter could have written data with different properties and/or property types. The implementation will need to choose whether to gracefully recover from non-conforming data or throw an error. |
-|  [toFirestore(modelObject)](./firestore_lite.firestoredataconverter.md#firestoredataconvertertofirestore) | Called by the Firestore SDK to convert a custom model object of type <code>AppModelType</code> into a plain Javascript object (suitable for writing directly to the Firestore database) of type <code>DbModelType</code>. Used with [setDoc()](./firestore_lite.md#setdoc_ee215ad)<!-- -->,  and .<!-- -->The <code>WithFieldValue&lt;T&gt;</code> type extends <code>T</code> to also allow FieldValues such as [deleteField()](./firestore_.md#deletefield) to be used as property values. |
-|  [toFirestore(modelObject, options)](./firestore_lite.firestoredataconverter.md#firestoredataconvertertofirestore) | Called by the Firestore SDK to convert a custom model object of type <code>AppModelType</code> into a plain Javascript object (suitable for writing directly to the Firestore database) of type <code>DbModelType</code>. Used with [setDoc()](./firestore_lite.md#setdoc_ee215ad)<!-- -->,  and  with <code>merge:true</code> or <code>mergeFields</code>.<!-- -->The <code>PartialWithFieldValue&lt;T&gt;</code> type extends <code>Partial&lt;T&gt;</code> to allow FieldValues such as [arrayUnion()](./firestore_.md#arrayunion_7d853aa) to be used as property values. It also supports nested <code>Partial</code> by allowing nested fields to be omitted. |
+|  [toFirestore(modelObject)](./firestore_lite.firestoredataconverter.md#firestoredataconvertertofirestore) | Called by the Firestore SDK to convert a custom model object of type <code>AppModelType</code> into a plain JavaScript object (suitable for writing directly to the Firestore database) of type <code>DbModelType</code>. Used with [setDoc()](./firestore_lite.md#setdoc_ee215ad)<!-- -->,  and .<!-- -->The <code>WithFieldValue&lt;T&gt;</code> type extends <code>T</code> to also allow FieldValues such as [deleteField()](./firestore_.md#deletefield) to be used as property values. |
+|  [toFirestore(modelObject, options)](./firestore_lite.firestoredataconverter.md#firestoredataconvertertofirestore) | Called by the Firestore SDK to convert a custom model object of type <code>AppModelType</code> into a plain JavaScript object (suitable for writing directly to the Firestore database) of type <code>DbModelType</code>. Used with [setDoc()](./firestore_lite.md#setdoc_ee215ad)<!-- -->,  and  with <code>merge:true</code> or <code>mergeFields</code>.<!-- -->The <code>PartialWithFieldValue&lt;T&gt;</code> type extends <code>Partial&lt;T&gt;</code> to allow FieldValues such as [arrayUnion()](./firestore_.md#arrayunion_7d853aa) to be used as property values. It also supports nested <code>Partial</code> by allowing nested fields to be omitted. |
 
 ## FirestoreDataConverter.fromFirestore()
 
@@ -54,7 +54,7 @@ AppModelType
 
 ## FirestoreDataConverter.toFirestore()
 
-Called by the Firestore SDK to convert a custom model object of type `AppModelType` into a plain Javascript object (suitable for writing directly to the Firestore database) of type `DbModelType`<!-- -->. Used with [setDoc()](./firestore_lite.md#setdoc_ee215ad)<!-- -->,  and .
+Called by the Firestore SDK to convert a custom model object of type `AppModelType` into a plain JavaScript object (suitable for writing directly to the Firestore database) of type `DbModelType`<!-- -->. Used with [setDoc()](./firestore_lite.md#setdoc_ee215ad)<!-- -->,  and .
 
 The `WithFieldValue<T>` type extends `T` to also allow FieldValues such as [deleteField()](./firestore_.md#deletefield) to be used as property values.
 
@@ -76,7 +76,7 @@ toFirestore(modelObject: WithFieldValue<AppModelType>): WithFieldValue<DbModelTy
 
 ## FirestoreDataConverter.toFirestore()
 
-Called by the Firestore SDK to convert a custom model object of type `AppModelType` into a plain Javascript object (suitable for writing directly to the Firestore database) of type `DbModelType`<!-- -->. Used with [setDoc()](./firestore_lite.md#setdoc_ee215ad)<!-- -->,  and  with `merge:true` or `mergeFields`<!-- -->.
+Called by the Firestore SDK to convert a custom model object of type `AppModelType` into a plain JavaScript object (suitable for writing directly to the Firestore database) of type `DbModelType`<!-- -->. Used with [setDoc()](./firestore_lite.md#setdoc_ee215ad)<!-- -->,  and  with `merge:true` or `mergeFields`<!-- -->.
 
 The `PartialWithFieldValue<T>` type extends `Partial<T>` to allow FieldValues such as [arrayUnion()](./firestore_.md#arrayunion_7d853aa) to be used as property values. It also supports nested `Partial` by allowing nested fields to be omitted.
 
diff --git a/docs-devsite/firestore_lite.md b/docs-devsite/firestore_lite.md
index d5b989f434c..3fbd19789d2 100644
--- a/docs-devsite/firestore_lite.md
+++ b/docs-devsite/firestore_lite.md
@@ -141,7 +141,7 @@ https://github.com/firebase/firebase-js-sdk
 |  [FirestoreErrorCode](./firestore_lite.md#firestoreerrorcode) | The set of Firestore status codes. The codes are the same at the ones exposed by gRPC here: https://github.com/grpc/grpc/blob/master/doc/statuscodes.md<!-- -->Possible values: - 'cancelled': The operation was cancelled (typically by the caller). - 'unknown': Unknown error or an error from a different error domain. - 'invalid-argument': Client specified an invalid argument. Note that this differs from 'failed-precondition'. 'invalid-argument' indicates arguments that are problematic regardless of the state of the system (e.g. an invalid field name). - 'deadline-exceeded': Deadline expired before operation could complete. For operations that change the state of the system, this error may be returned even if the operation has completed successfully. For example, a successful response from a server could have been delayed long enough for the deadline to expire. - 'not-found': Some requested document was not found. - 'already-exists': Some document that we attempted to create already exists. - 'permission-denied': The caller does not have permission to execute the specified operation. - 'resource-exhausted': Some resource has been exhausted, perhaps a per-user quota, or perhaps the entire file system is out of space. - 'failed-precondition': Operation was rejected because the system is not in a state required for the operation's execution. - 'aborted': The operation was aborted, typically due to a concurrency issue like transaction aborts, etc. - 'out-of-range': Operation was attempted past the valid range. - 'unimplemented': Operation is not implemented or not supported/enabled. - 'internal': Internal errors. Means some invariants expected by underlying system has been broken. If you see one of these errors, something is very broken. - 'unavailable': The service is currently unavailable. This is most likely a transient condition and may be corrected by retrying with a backoff. - 'data-loss': Unrecoverable data loss or corruption. - 'unauthenticated': The request does not have valid authentication credentials for the operation. |
 |  [NestedUpdateFields](./firestore_lite.md#nestedupdatefields) | For each field (e.g. 'bar'), find all nested keys (e.g. {<!-- -->'bar.baz': T1, 'bar.qux': T2<!-- -->}<!-- -->). Intersect them together to make a single map containing all possible keys that are all marked as optional |
 |  [OrderByDirection](./firestore_lite.md#orderbydirection) | The direction of a [orderBy()](./firestore_.md#orderby_006d61f) clause is specified as 'desc' or 'asc' (descending or ascending). |
-|  [PartialWithFieldValue](./firestore_lite.md#partialwithfieldvalue) | Similar to Typescript's <code>Partial&lt;T&gt;</code>, but allows nested fields to be omitted and FieldValues to be passed in as property values. |
+|  [PartialWithFieldValue](./firestore_lite.md#partialwithfieldvalue) | Similar to TypeScript's <code>Partial&lt;T&gt;</code>, but allows nested fields to be omitted and FieldValues to be passed in as property values. |
 |  [Primitive](./firestore_lite.md#primitive) | Primitive types. |
 |  [QueryConstraintType](./firestore_lite.md#queryconstrainttype) | Describes the different query constraints available in this SDK. |
 |  [QueryFilterConstraint](./firestore_lite.md#queryfilterconstraint) | <code>QueryFilterConstraint</code> is a helper union type that represents [QueryFieldFilterConstraint](./firestore_.queryfieldfilterconstraint.md#queryfieldfilterconstraint_class) and [QueryCompositeFilterConstraint](./firestore_.querycompositefilterconstraint.md#querycompositefilterconstraint_class)<!-- -->. |
@@ -1292,7 +1292,7 @@ export declare function doc<AppModelType, DbModelType extends DocumentData>(refe
 |  Parameter | Type | Description |
 |  --- | --- | --- |
 |  reference | [CollectionReference](./firestore_lite.collectionreference.md#collectionreference_class)<!-- -->&lt;AppModelType, DbModelType&gt; | A reference to a collection. |
-|  path | string | A slash-separated path to a document. Has to be omitted to use auto-genrated IDs. |
+|  path | string | A slash-separated path to a document. Has to be omitted to use auto-generated IDs. |
 |  pathSegments | string\[\] | Additional path segments that will be applied relative to the first argument. |
 
 <b>Returns:</b>
@@ -1662,7 +1662,7 @@ export declare type OrderByDirection = 'desc' | 'asc';
 
 ## PartialWithFieldValue
 
-Similar to Typescript's `Partial<T>`<!-- -->, but allows nested fields to be omitted and FieldValues to be passed in as property values.
+Similar to TypeScript's `Partial<T>`<!-- -->, but allows nested fields to be omitted and FieldValues to be passed in as property values.
 
 <b>Signature:</b>
 
diff --git a/docs-devsite/performance.performancetrace.md b/docs-devsite/performance.performancetrace.md
index c1362d013d1..2fa4d01a72a 100644
--- a/docs-devsite/performance.performancetrace.md
+++ b/docs-devsite/performance.performancetrace.md
@@ -173,7 +173,7 @@ record(startTime: number, duration: number, options?: {
 |  Parameter | Type | Description |
 |  --- | --- | --- |
 |  startTime | number | trace start time since epoch in millisec. |
-|  duration | number | The duraction of the trace in millisec. |
+|  duration | number | The duration of the trace in millisec. |
 |  options | { metrics?: { \[key: string\]: number; }; attributes?: { \[key: string\]: string; }; } | An object which can optionally hold maps of custom metrics and custom attributes. |
 
 <b>Returns:</b>
diff --git a/docs-devsite/storage.fullmetadata.md b/docs-devsite/storage.fullmetadata.md
index ca8d66e08d5..a2cedeb525e 100644
--- a/docs-devsite/storage.fullmetadata.md
+++ b/docs-devsite/storage.fullmetadata.md
@@ -24,7 +24,7 @@ export interface FullMetadata extends UploadMetadata
 |  Property | Type | Description |
 |  --- | --- | --- |
 |  [bucket](./storage.fullmetadata.md#fullmetadatabucket) | string | The bucket this object is contained in. |
-|  [downloadTokens](./storage.fullmetadata.md#fullmetadatadownloadtokens) | string\[\] \| undefined | Tokens to allow access to the downloatd URL. |
+|  [downloadTokens](./storage.fullmetadata.md#fullmetadatadownloadtokens) | string\[\] \| undefined | Tokens to allow access to the download URL. |
 |  [fullPath](./storage.fullmetadata.md#fullmetadatafullpath) | string | The full path of this object. |
 |  [generation](./storage.fullmetadata.md#fullmetadatageneration) | string | The object's generation. [https://cloud.google.com/storage/docs/metadata\#generation-number](https://cloud.google.com/storage/docs/metadata#generation-number) |
 |  [metageneration](./storage.fullmetadata.md#fullmetadatametageneration) | string | The object's metageneration. [https://cloud.google.com/storage/docs/metadata\#generation-number](https://cloud.google.com/storage/docs/metadata#generation-number) |
@@ -46,7 +46,7 @@ bucket: string;
 
 ## FullMetadata.downloadTokens
 
-Tokens to allow access to the downloatd URL.
+Tokens to allow access to the download URL.
 
 <b>Signature:</b>
 
diff --git a/docs-devsite/storage.md b/docs-devsite/storage.md
index ec2a408a8c8..e929246b5b9 100644
--- a/docs-devsite/storage.md
+++ b/docs-devsite/storage.md
@@ -26,7 +26,7 @@ Cloud Storage for Firebase
 |  [getBlob(ref, maxDownloadSizeBytes)](./storage.md#getblob_1c7a935) | Downloads the data at the object's location. Returns an error if the object is not found.<!-- -->To use this functionality, you have to whitelist your app's origin in your Cloud Storage bucket. See also https://cloud.google.com/storage/docs/configuring-cors<!-- -->This API is not available in Node. |
 |  [getBytes(ref, maxDownloadSizeBytes)](./storage.md#getbytes_1c7a935) | Downloads the data at the object's location. Returns an error if the object is not found.<!-- -->To use this functionality, you have to whitelist your app's origin in your Cloud Storage bucket. See also https://cloud.google.com/storage/docs/configuring-cors |
 |  [getDownloadURL(ref)](./storage.md#getdownloadurl_30df0b2) | Returns the download URL for the given [StorageReference](./storage.storagereference.md#storagereference_interface)<!-- -->. |
-|  [getMetadata(ref)](./storage.md#getmetadata_30df0b2) | A <code>Promise</code> that resolves with the metadata for this object. If this object doesn't exist or metadata cannot be retreived, the promise is rejected. |
+|  [getMetadata(ref)](./storage.md#getmetadata_30df0b2) | A <code>Promise</code> that resolves with the metadata for this object. If this object doesn't exist or metadata cannot be retrieved, the promise is rejected. |
 |  [getStream(ref, maxDownloadSizeBytes)](./storage.md#getstream_1c7a935) | Downloads the data at the object's location. Raises an error event if the object is not found.<!-- -->This API is only available in Node. |
 |  [list(ref, options)](./storage.md#list_36af757) | List items (files) and prefixes (folders) under this storage reference.<!-- -->List API is only available for Firebase Rules Version 2.<!-- -->GCS is a key-blob store. Firebase Storage imposes the semantic of '/' delimited folder structure. Refer to GCS's List API if you want to learn more.<!-- -->To adhere to Firebase Rules's Semantics, Firebase Storage does not support objects whose paths end with "/" or contain two consecutive "/"s. Firebase Storage List API will filter these unsupported objects. list() may fail if there are too many unsupported objects in the bucket. |
 |  [listAll(ref)](./storage.md#listall_30df0b2) | List all items (files) and prefixes (folders) under this storage reference.<!-- -->This is a helper method for calling list() repeatedly until there are no more results. The default pagination size is 1000.<!-- -->Note: The results may not be consistent if objects are changed while this operation is running.<!-- -->Warning: <code>listAll</code> may potentially consume too many resources if there are too many results. |
@@ -252,7 +252,7 @@ A `Promise` that resolves with the download URL for this object.
 
 ### getMetadata(ref) {:#getmetadata_30df0b2}
 
-A `Promise` that resolves with the metadata for this object. If this object doesn't exist or metadata cannot be retreived, the promise is rejected.
+A `Promise` that resolves with the metadata for this object. If this object doesn't exist or metadata cannot be retrieved, the promise is rejected.
 
 <b>Signature:</b>
 
diff --git a/packages/analytics/src/errors.ts b/packages/analytics/src/errors.ts
index 278fa7ba137..56c0ffe066c 100644
--- a/packages/analytics/src/errors.ts
+++ b/packages/analytics/src/errors.ts
@@ -41,7 +41,7 @@ const ERRORS: ErrorMap<AnalyticsError> = {
     'initializeAnalytics() cannot be called again with different options than those ' +
     'it was initially called with. It can be called again with the same options to ' +
     'return the existing instance, or getAnalytics() can be used ' +
-    'to get a reference to the already-intialized instance.',
+    'to get a reference to the already-initialized instance.',
   [AnalyticsError.ALREADY_INITIALIZED_SETTINGS]:
     'Firebase Analytics has already been initialized.' +
     'settings() must be called before initializing any Analytics instance' +
diff --git a/packages/analytics/src/helpers.ts b/packages/analytics/src/helpers.ts
index 2e9a46e03b2..2b5b9631f0c 100644
--- a/packages/analytics/src/helpers.ts
+++ b/packages/analytics/src/helpers.ts
@@ -252,7 +252,7 @@ async function gtagOnEvent(
 function wrapGtag(
   gtagCore: Gtag,
   /**
-   * Allows wrapped gtag calls to wait on whichever intialization promises are required,
+   * Allows wrapped gtag calls to wait on whichever initialization promises are required,
    * depending on the contents of the gtag params' `send_to` field, if any.
    */
   initializationPromisesMap: { [appId: string]: Promise<string> },
diff --git a/packages/app-check-compat/src/service.ts b/packages/app-check-compat/src/service.ts
index db3f2d1ef46..db98819e31c 100644
--- a/packages/app-check-compat/src/service.ts
+++ b/packages/app-check-compat/src/service.ts
@@ -99,7 +99,7 @@ export class AppCheckService
       this._delegate,
       /**
        * Exp onTokenChanged() will handle both overloads but we need
-       * to specify one to not confuse Typescript.
+       * to specify one to not confuse TypeScript.
        */
       onNextOrObserver as (tokenResult: AppCheckTokenResult) => void,
       onError,
diff --git a/packages/app-check/src/api.test.ts b/packages/app-check/src/api.test.ts
index c01cc5f4029..a6805d1b0b3 100644
--- a/packages/app-check/src/api.test.ts
+++ b/packages/app-check/src/api.test.ts
@@ -10,7 +10,7 @@
  *
  * 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 ied.
+ * 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.
  */
diff --git a/packages/app-check/src/storage.ts b/packages/app-check/src/storage.ts
index 5c680a08393..3f7257e1945 100644
--- a/packages/app-check/src/storage.ts
+++ b/packages/app-check/src/storage.ts
@@ -79,7 +79,7 @@ export async function readOrCreateDebugTokenFromStorage(): Promise<string> {
     // create a new debug token
     const newToken = uuidv4();
     // We don't need to block on writing to indexeddb
-    // In case persistence failed, a new debug token will be generated everytime the page is refreshed.
+    // In case persistence failed, a new debug token will be generated every time the page is refreshed.
     // It renders the debug token useless because you have to manually register(whitelist) the new token in the firebase console again and again.
     // If you see this error trying to use debug token, it probably means you are using a browser that doesn't support indexeddb.
     // You should switch to a different browser that supports indexeddb
diff --git a/packages/app-compat/src/firebaseApp.ts b/packages/app-compat/src/firebaseApp.ts
index 3fa944e9724..a4f7f6f9db1 100644
--- a/packages/app-compat/src/firebaseApp.ts
+++ b/packages/app-compat/src/firebaseApp.ts
@@ -125,7 +125,7 @@ export class FirebaseAppImpl implements Compat<_FirebaseAppExp>, _FirebaseApp {
   ): _FirebaseService {
     this._delegate.checkDestroyed();
 
-    // Initialize instance if InstatiationMode is `EXPLICIT`.
+    // Initialize instance if InstantiationMode is `EXPLICIT`.
     const provider = this._delegate.container.getProvider(name as Name);
     if (
       !provider.isInitialized() &&
diff --git a/packages/app-compat/src/public-types.ts b/packages/app-compat/src/public-types.ts
index 7c3aac1bed3..bc41cb2bd77 100644
--- a/packages/app-compat/src/public-types.ts
+++ b/packages/app-compat/src/public-types.ts
@@ -33,7 +33,7 @@ export interface FirebaseAppConfig {
   automaticDataCollectionEnabled?: boolean;
 }
 
-interface FirebaseAppContructor {
+interface FirebaseAppConstructor {
   new (): FirebaseApp;
 }
 
@@ -85,7 +85,7 @@ export interface FirebaseNamespace {
      *
      * DO NOT call this constuctor directly (use firebase.app() instead).
      */
-    App: FirebaseAppContructor;
+    App: FirebaseAppConstructor;
   };
 
   /**
diff --git a/packages/app/src/api.test.ts b/packages/app/src/api.test.ts
index f5577d092e2..f6cf922ba05 100644
--- a/packages/app/src/api.test.ts
+++ b/packages/app/src/api.test.ts
@@ -397,21 +397,21 @@ describe('API tests', () => {
       expect(getApp()).to.equal(app);
     });
 
-    it('retrives named App', () => {
+    it('retrieves named App', () => {
       const appName = 'MyApp';
       const app = initializeApp({}, appName);
       expect(getApp(appName)).to.equal(app);
     });
 
-    it('throws retrieving a non existing App (custom name)', () => {
+    it('throws retrieving a nonexistent App (custom name)', () => {
       expect(() => getApp('RandomName')).throws(/No Firebase App 'RandomName'/);
     });
 
-    it('throws retrieving a non existing App (default name)', () => {
+    it('throws retrieving a nonexistent App (default name)', () => {
       expect(() => getApp()).throws(/No Firebase App/);
     });
 
-    it('does not throw on a non existing App (default name) if a defaults object exists', () => {
+    it('does not throw on a nonexistent App (default name) if a defaults object exists', () => {
       global.__FIREBASE_DEFAULTS__ = { config: { apiKey: 'abcd' } };
       const app = getApp();
       expect(app.options.apiKey).to.equal('abcd');
@@ -420,7 +420,7 @@ describe('API tests', () => {
   });
 
   describe('getApps', () => {
-    it('retrives all Apps that have been created', () => {
+    it('retrieves all Apps that have been created', () => {
       const app1 = initializeApp({});
       const app2 = initializeApp({}, 'App2');
 
diff --git a/packages/app/src/firebaseServerApp.ts b/packages/app/src/firebaseServerApp.ts
index 8f0b703e187..0c41d4cd607 100644
--- a/packages/app/src/firebaseServerApp.ts
+++ b/packages/app/src/firebaseServerApp.ts
@@ -77,7 +77,7 @@ export class FirebaseServerAppImpl
     this._refCount = 0;
     this.incRefCount(this._serverConfig.releaseOnDeref);
 
-    // Do not retain a hard reference to the dref object, otherwise the FinalizationRegisry
+    // Do not retain a hard reference to the dref object, otherwise the FinalizationRegistry
     // will never trigger.
     this._serverConfig.releaseOnDeref = undefined;
     serverConfig.releaseOnDeref = undefined;
diff --git a/packages/app/src/heartbeatService.ts b/packages/app/src/heartbeatService.ts
index 221c5846c86..fbe24242654 100644
--- a/packages/app/src/heartbeatService.ts
+++ b/packages/app/src/heartbeatService.ts
@@ -59,7 +59,7 @@ export class HeartbeatServiceImpl implements HeartbeatService {
   /**
    * the initialization promise for populating heartbeatCache.
    * If getHeartbeatsHeader() is called before the promise resolves
-   * (hearbeatsCache == null), it should wait for this promise
+   * (heartbeatsCache == null), it should wait for this promise
    * Leave public for easier testing.
    */
   _heartbeatsCachePromise: Promise<HeartbeatsInIndexedDB>;
diff --git a/packages/auth-compat/CHANGELOG.md b/packages/auth-compat/CHANGELOG.md
index 3c5a4b035ea..5288768af40 100644
--- a/packages/auth-compat/CHANGELOG.md
+++ b/packages/auth-compat/CHANGELOG.md
@@ -332,7 +332,7 @@
 
 ### Patch Changes
 
-- [`63ac2ed28`](https://github.com/firebase/firebase-js-sdk/commit/63ac2ed28f237950290a7af2dcdcf1518ddaee4b) - Fix auth scheme reconition in capacitor env
+- [`63ac2ed28`](https://github.com/firebase/firebase-js-sdk/commit/63ac2ed28f237950290a7af2dcdcf1518ddaee4b) - Fix auth scheme recognition in capacitor env
 
 - Updated dependencies [[`63ac2ed28`](https://github.com/firebase/firebase-js-sdk/commit/63ac2ed28f237950290a7af2dcdcf1518ddaee4b), [`88517b591`](https://github.com/firebase/firebase-js-sdk/commit/88517b59179410e43d5d5129a1fefc355cd1d4eb)]:
   - @firebase/auth@0.20.2
diff --git a/packages/auth-compat/demo/public/manifest.json b/packages/auth-compat/demo/public/manifest.json
index 646c61a9320..ed13b7176b0 100644
--- a/packages/auth-compat/demo/public/manifest.json
+++ b/packages/auth-compat/demo/public/manifest.json
@@ -1,5 +1,5 @@
 {
-  "name": "Firebse Auth Test App",
+  "name": "Firebase Auth Test App",
   "short_name": "FirebaseAuthTest",
   "start_url": "/",
   "display": "standalone",
diff --git a/packages/auth-compat/demo/public/style.css b/packages/auth-compat/demo/public/style.css
index cdd999f8e8b..732d93eae6a 100644
--- a/packages/auth-compat/demo/public/style.css
+++ b/packages/auth-compat/demo/public/style.css
@@ -146,7 +146,7 @@ input + .form,
   margin-top: 5px;
 }
 
-/* Bootstrap .hidden adds the !important which invalides jQuery .show() */
+/* Bootstrap .hidden adds the !important which invalidates jQuery .show() */
 .hidden,
 .hide,
 .profile,
diff --git a/packages/auth-compat/karma.conf.js b/packages/auth-compat/karma.conf.js
index 1b95c95b8be..f3f14e8d1b1 100644
--- a/packages/auth-compat/karma.conf.js
+++ b/packages/auth-compat/karma.conf.js
@@ -31,7 +31,7 @@ module.exports = function (config) {
     // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
     frameworks: ['mocha'],
     // undici is a fetch polyfill that test helpers call for Node tests, and browser tests should
-    // ingore its import to avoid compilation errors in those test helpers.
+    // ignore its import to avoid compilation errors in those test helpers.
     webpack: {
       ...webpackBase,
       resolve: {
diff --git a/packages/auth-compat/src/auth.test.ts b/packages/auth-compat/src/auth.test.ts
index 2cab2890697..4dee1e4f29f 100644
--- a/packages/auth-compat/src/auth.test.ts
+++ b/packages/auth-compat/src/auth.test.ts
@@ -123,7 +123,7 @@ describe('auth compat', () => {
       }
     });
 
-    it('pulls the persistence and sets as the main persitsence if set', () => {
+    it('pulls the persistence and sets as the main persistence if set', () => {
       if (typeof self !== 'undefined') {
         sessionStorage.setItem(
           'firebase:persistence:api-key:undefined',
diff --git a/packages/auth-compat/test/integration/webdriver/static/index.html b/packages/auth-compat/test/integration/webdriver/static/index.html
index 385b2a6536c..5f444cb33bb 100644
--- a/packages/auth-compat/test/integration/webdriver/static/index.html
+++ b/packages/auth-compat/test/integration/webdriver/static/index.html
@@ -16,7 +16,7 @@
 -->
 
 <!--
-  type=module makes browers treat it as an ES6 module and enforces strict mode. This helps catch
+  type=module makes browsers treat it as an ES6 module and enforces strict mode. This helps catch
   some errors in the test (e.g. extending frozen objects or accidentally creating global variables).
 -->
 <script type="module" src="dist/bundle.js"></script>
diff --git a/packages/auth/cordova/demo/www/style.css b/packages/auth/cordova/demo/www/style.css
index c9f10255d00..e16d82e1154 100644
--- a/packages/auth/cordova/demo/www/style.css
+++ b/packages/auth/cordova/demo/www/style.css
@@ -146,7 +146,7 @@ input + .form,
   margin-top: 5px;
 }
 
-/* Bootstrap .hidden adds the !important which invalides jQuery .show() */
+/* Bootstrap .hidden adds the !important which invalidates jQuery .show() */
 .hidden,
 .hide,
 .profile,
diff --git a/packages/auth/demo/public/manifest.json b/packages/auth/demo/public/manifest.json
index 646c61a9320..ed13b7176b0 100644
--- a/packages/auth/demo/public/manifest.json
+++ b/packages/auth/demo/public/manifest.json
@@ -1,5 +1,5 @@
 {
-  "name": "Firebse Auth Test App",
+  "name": "Firebase Auth Test App",
   "short_name": "FirebaseAuthTest",
   "start_url": "/",
   "display": "standalone",
diff --git a/packages/auth/demo/public/style.css b/packages/auth/demo/public/style.css
index d164e0486f7..117ba5dd93f 100644
--- a/packages/auth/demo/public/style.css
+++ b/packages/auth/demo/public/style.css
@@ -165,7 +165,7 @@ input + .form,
   margin-top: 5px;
 }
 
-/* Bootstrap .hidden adds the !important which invalides jQuery .show() */
+/* Bootstrap .hidden adds the !important which invalidates jQuery .show() */
 .hidden,
 .hide,
 .profile,
diff --git a/packages/auth/demo/src/index.js b/packages/auth/demo/src/index.js
index 7b4a2e0cc01..ae5dd312965 100644
--- a/packages/auth/demo/src/index.js
+++ b/packages/auth/demo/src/index.js
@@ -903,7 +903,7 @@ async function onStartEnrollWithTotpMultiFactor() {
     console.log(
       'Finalize sign in by ' + totpSecret.enrollmentCompletionDeadline
     );
-    // display the numbr of seconds left to enroll.
+    // display the number of seconds left to enroll.
     $('p.totp-deadline').show();
     totpDeadlineId = setInterval(function () {
       var deadline = new Date(totpSecret.enrollmentCompletionDeadline);
diff --git a/packages/auth/index.ts b/packages/auth/index.ts
index 6ed92b361ac..df67fd1616b 100644
--- a/packages/auth/index.ts
+++ b/packages/auth/index.ts
@@ -36,7 +36,7 @@ export {
 // Core functionality shared by all clients
 export * from './src';
 
-// Additional DOM dependend functionality; we need to import and then
+// Additional DOM dependent functionality; we need to import and then
 // export separately so that the rollup alias will work (for aliasing these
 // imports in node environments to no-ops and errors... see
 // src/platform_node/index.ts).
diff --git a/packages/auth/karma.conf.js b/packages/auth/karma.conf.js
index 198b079a15b..1d28c329f55 100644
--- a/packages/auth/karma.conf.js
+++ b/packages/auth/karma.conf.js
@@ -28,7 +28,7 @@ module.exports = function (config) {
     // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
     frameworks: ['mocha'],
     // undici is a fetch polyfill that test helpers call for Node tests, and browser tests should
-    // ingore its import to avoid compilation errors in those test helpers.
+    // ignore its import to avoid compilation errors in those test helpers.
     webpack: {
       ...webpackBase,
       resolve: {
diff --git a/packages/auth/src/api/authentication/mfa.test.ts b/packages/auth/src/api/authentication/mfa.test.ts
index 6afc632cdc8..fd7d811ec36 100644
--- a/packages/auth/src/api/authentication/mfa.test.ts
+++ b/packages/auth/src/api/authentication/mfa.test.ts
@@ -34,7 +34,7 @@ describe('api/authentication/startSignInPhoneMfa', () => {
     mfaPendingCredential: 'my-creds',
     mfaEnrollmentId: 'my-enrollment-id',
     phoneSignInInfo: {
-      recaptchaToken: 'catpcha-token'
+      recaptchaToken: 'captcha-token'
     }
   };
 
diff --git a/packages/auth/src/api/index.test.ts b/packages/auth/src/api/index.test.ts
index af3b61610d2..d95be550867 100644
--- a/packages/auth/src/api/index.test.ts
+++ b/packages/auth/src/api/index.test.ts
@@ -367,11 +367,11 @@ describe('api/_performApiRequest', () => {
     });
   });
 
-  context('edgcase error mapping', () => {
+  context('edge case error mapping', () => {
     beforeEach(mockFetch.setUp);
     afterEach(mockFetch.tearDown);
 
-    it('should generate a need_conirmation error with the response', async () => {
+    it('should generate a need_confirmation error with the response', async () => {
       mockEndpoint(Endpoint.SIGN_UP, {
         needConfirmation: true,
         idToken: 'id-token'
diff --git a/packages/auth/src/core/auth/auth_impl.ts b/packages/auth/src/core/auth/auth_impl.ts
index eb7e2a322c8..fd6f1a82a76 100644
--- a/packages/auth/src/core/auth/auth_impl.ts
+++ b/packages/auth/src/core/auth/auth_impl.ts
@@ -862,7 +862,7 @@ export class AuthImpl implements AuthInternal, _FirebaseService {
 }
 
 /**
- * Method to be used to cast down to our private implmentation of Auth.
+ * Method to be used to cast down to our private implementation of Auth.
  * It will also handle unwrapping from the compat type if necessary
  *
  * @param auth Auth object passed in from developer
diff --git a/packages/auth/src/core/errors.ts b/packages/auth/src/core/errors.ts
index 66c43b2ca48..9494658b9f0 100644
--- a/packages/auth/src/core/errors.ts
+++ b/packages/auth/src/core/errors.ts
@@ -189,7 +189,7 @@ function _debugErrorMap(): ErrorMap<AuthErrorCode> {
       'The phone verification request contains an invalid application verifier.' +
       ' The reCAPTCHA token response is either invalid or expired.',
     [AuthErrorCode.INVALID_APP_ID]:
-      'The mobile app identifier is not registed for the current project.',
+      'The mobile app identifier is not registered for the current project.',
     [AuthErrorCode.INVALID_AUTH]:
       "This user's credential isn't valid for this project. This can happen " +
       "if the user's token has been tampered with, or if the user isn't for " +
diff --git a/packages/auth/src/core/persistence/persistence_user_manager.test.ts b/packages/auth/src/core/persistence/persistence_user_manager.test.ts
index 4022ae493c0..5c74a536739 100644
--- a/packages/auth/src/core/persistence/persistence_user_manager.test.ts
+++ b/packages/auth/src/core/persistence/persistence_user_manager.test.ts
@@ -297,7 +297,7 @@ describe('core/persistence/persistence_user_manager', () => {
         spy.restore();
       });
 
-      it('removes current user & sets it in the new persistene', async () => {
+      it('removes current user & sets it in the new persistence', async () => {
         const { persistence: nextPersistence, stub: nextStub } =
           makePersistence();
         const auth = await testAuth();
diff --git a/packages/auth/src/core/strategies/email_link.test.ts b/packages/auth/src/core/strategies/email_link.test.ts
index 7358b5a3512..945da88e47b 100644
--- a/packages/auth/src/core/strategies/email_link.test.ts
+++ b/packages/auth/src/core/strategies/email_link.test.ts
@@ -270,7 +270,7 @@ describe('core/strategies/sendSignInLinkToEmail', () => {
       stub
         .withArgs('wrong-site-key', { action: 'signInWithEmailLink' })
         .rejects();
-      // Second verifcation should succeed with site key refreshed
+      // Second verification should succeed with site key refreshed
       stub
         .withArgs('site-key', { action: 'signInWithEmailLink' })
         .returns(Promise.resolve('recaptcha-response'));
diff --git a/packages/auth/src/core/user/token_manager.test.ts b/packages/auth/src/core/user/token_manager.test.ts
index b2e1609692f..cdfc82e83e8 100644
--- a/packages/auth/src/core/user/token_manager.test.ts
+++ b/packages/auth/src/core/user/token_manager.test.ts
@@ -58,7 +58,7 @@ describe('core/user/token_manager', () => {
       expect(stsTokenManager.isExpired).to.eq(true);
     });
 
-    it('is fals if exp is far enough in future', () => {
+    it('is fails if exp is far enough in future', () => {
       stsTokenManager.expirationTime = now + (Buffer.TOKEN_REFRESH + 10);
       expect(stsTokenManager.isExpired).to.eq(false);
     });
@@ -77,7 +77,7 @@ describe('core/user/token_manager', () => {
       expect(stsTokenManager.refreshToken).to.eq('refresh-token');
     });
 
-    it('falls back to exp and iat when expiresIn is ommited (ie: MFA)', () => {
+    it('falls back to exp and iat when expiresIn is omitted (ie: MFA)', () => {
       const idToken = makeJWT({ 'exp': '180', 'iat': '120' });
       stsTokenManager.updateFromServerResponse({
         idToken,
diff --git a/packages/auth/src/core/util/handler.ts b/packages/auth/src/core/util/handler.ts
index 363e04a16d5..3b6aa674756 100644
--- a/packages/auth/src/core/util/handler.ts
+++ b/packages/auth/src/core/util/handler.ts
@@ -105,7 +105,7 @@ export async function _getRedirectUrl(
     params.tid = auth.tenantId;
   }
 
-  // TODO: maybe set eid as endipointId
+  // TODO: maybe set eid as endpointId
   // TODO: maybe set fw as Frameworks.join(",")
 
   const paramsDict = params as Record<string, string | number>;
diff --git a/packages/auth/src/platform_browser/iframe/gapi.ts b/packages/auth/src/platform_browser/iframe/gapi.ts
index 7d9633043fe..7279c2f61e0 100644
--- a/packages/auth/src/platform_browser/iframe/gapi.ts
+++ b/packages/auth/src/platform_browser/iframe/gapi.ts
@@ -25,7 +25,7 @@ import * as js from '../load_js';
 const NETWORK_TIMEOUT = new Delay(30000, 60000);
 
 /**
- * Reset unlaoded GApi modules. If gapi.load fails due to a network error,
+ * Reset unloaded GApi modules. If gapi.load fails due to a network error,
  * it will stop working after a retrial. This is a hack to fix this issue.
  */
 function resetUnloadedGapiModules(): void {
diff --git a/packages/auth/src/platform_browser/messagechannel/promise.test.ts b/packages/auth/src/platform_browser/messagechannel/promise.test.ts
index 0bf17f50772..b345ef81ff3 100644
--- a/packages/auth/src/platform_browser/messagechannel/promise.test.ts
+++ b/packages/auth/src/platform_browser/messagechannel/promise.test.ts
@@ -20,7 +20,7 @@ import { _allSettled } from './promise';
 
 describe('platform_browser/messagechannel/promise', () => {
   describe('_allSettled', () => {
-    it('should work with a single successfull promise', async () => {
+    it('should work with a single successful promise', async () => {
       const result = await _allSettled([Promise.resolve('foo')]);
       expect(result).to.have.deep.members([
         {
diff --git a/packages/auth/src/platform_browser/messagechannel/receiver.ts b/packages/auth/src/platform_browser/messagechannel/receiver.ts
index 5976f0c0133..de5fca309cd 100644
--- a/packages/auth/src/platform_browser/messagechannel/receiver.ts
+++ b/packages/auth/src/platform_browser/messagechannel/receiver.ts
@@ -34,7 +34,7 @@ export class Receiver {
   private readonly boundEventHandler: EventListener;
 
   private readonly handlersMap: {
-    // Typescript doesn't have existential types :(
+    // TypeScript doesn't have existential types :(
     // eslint-disable-next-line @typescript-eslint/no-explicit-any
     [eventType: string]: Set<ReceiverHandler<any, any>>;
   } = {};
@@ -135,7 +135,7 @@ export class Receiver {
    * Unsubscribe an event handler from a particular event.
    *
    * @param eventType - Event name to unsubscribe from.
-   * @param eventHandler - Optinoal event handler, if none provided, unsubscribe all handlers on this event.
+   * @param eventHandler - Optional event handler, if none provided, unsubscribe all handlers on this event.
    *
    */
   _unsubscribe<T extends _ReceiverResponse, S extends _SenderRequest>(
diff --git a/packages/auth/src/platform_browser/persistence/indexed_db.test.ts b/packages/auth/src/platform_browser/persistence/indexed_db.test.ts
index 53c752934a7..9d78e18de0d 100644
--- a/packages/auth/src/platform_browser/persistence/indexed_db.test.ts
+++ b/packages/auth/src/platform_browser/persistence/indexed_db.test.ts
@@ -86,7 +86,7 @@ describe('platform_browser/persistence/indexed_db', () => {
     expect(await persistence._get(key)).to.be.null;
   });
 
-  describe('#isAvaliable', () => {
+  describe('#isAvailable', () => {
     it('should return true if db is available', async () => {
       expect(await persistence._isAvailable()).to.be.true;
     });
diff --git a/packages/auth/src/platform_browser/recaptcha/recaptcha_loader.ts b/packages/auth/src/platform_browser/recaptcha/recaptcha_loader.ts
index f510436223f..6c1d7873295 100644
--- a/packages/auth/src/platform_browser/recaptcha/recaptcha_loader.ts
+++ b/packages/auth/src/platform_browser/recaptcha/recaptcha_loader.ts
@@ -77,8 +77,8 @@ export class ReCaptchaLoaderImpl implements ReCaptchaLoader {
           return;
         }
 
-        // Wrap the greptcha render function so that we know if the developer has
-        // called it separately
+        // Wrap the recaptcha render function so that we know if the developer has
+        // called it separately.
         const render = recaptcha.render;
         recaptcha.render = (container, params) => {
           const widgetId = render(container, params);
@@ -114,7 +114,7 @@ export class ReCaptchaLoaderImpl implements ReCaptchaLoader {
     //     2. there exists already a ReCaptcha on the page
     //     3. the library was already loaded by the app
     // In cases (2) and (3), we _can't_ reload as it would break the recaptchas
-    // that are already in the page
+    // that are already in the page.
     return (
       !!_window().grecaptcha?.render &&
       (hl === this.hostLanguage ||
diff --git a/packages/auth/src/platform_browser/strategies/phone.test.ts b/packages/auth/src/platform_browser/strategies/phone.test.ts
index c545a84f11a..1290375a1d1 100644
--- a/packages/auth/src/platform_browser/strategies/phone.test.ts
+++ b/packages/auth/src/platform_browser/strategies/phone.test.ts
@@ -394,7 +394,7 @@ describe('platform_browser/strategies/phone', () => {
       ).to.be.rejectedWith(FirebaseError, 'auth/argument-error');
     });
 
-    it('resets the verifer after successful verification', async () => {
+    it('resets the verifier after successful verification', async () => {
       sinon.spy(verifier, '_reset');
       expect(await _verifyPhoneNumber(auth, 'number', verifier)).to.eq(
         'session-info'
@@ -402,7 +402,7 @@ describe('platform_browser/strategies/phone', () => {
       expect(verifier._reset).to.have.been.called;
     });
 
-    it('resets the verifer after a failed verification', async () => {
+    it('resets the verifier after a failed verification', async () => {
       sinon.spy(verifier, '_reset');
       (verifier.verify as sinon.SinonStub).returns(Promise.resolve(123));
 
diff --git a/packages/auth/src/platform_cordova/popup_redirect/events.ts b/packages/auth/src/platform_cordova/popup_redirect/events.ts
index 100d11a1969..0b83f976202 100644
--- a/packages/auth/src/platform_cordova/popup_redirect/events.ts
+++ b/packages/auth/src/platform_cordova/popup_redirect/events.ts
@@ -34,9 +34,9 @@ const SESSION_ID_LENGTH = 20;
 /** Custom AuthEventManager that adds passive listeners to events */
 export class CordovaAuthEventManager extends AuthEventManager {
   private readonly passiveListeners = new Set<(e: AuthEvent) => void>();
-  private resolveInialized!: () => void;
+  private resolveInitialized!: () => void;
   private initPromise = new Promise<void>(resolve => {
-    this.resolveInialized = resolve;
+    this.resolveInitialized = resolve;
   });
 
   addPassiveListener(cb: (e: AuthEvent) => void): void {
@@ -56,7 +56,7 @@ export class CordovaAuthEventManager extends AuthEventManager {
 
   /** Override the onEvent method */
   onEvent(event: AuthEvent): boolean {
-    this.resolveInialized();
+    this.resolveInitialized();
     this.passiveListeners.forEach(cb => cb(event));
     return super.onEvent(event);
   }
diff --git a/packages/auth/src/platform_cordova/popup_redirect/utils.ts b/packages/auth/src/platform_cordova/popup_redirect/utils.ts
index ad3b55054e1..ca017332090 100644
--- a/packages/auth/src/platform_cordova/popup_redirect/utils.ts
+++ b/packages/auth/src/platform_cordova/popup_redirect/utils.ts
@@ -156,7 +156,7 @@ export async function _waitForAppResume(
         if (typeof closeBrowserTab === 'function') {
           closeBrowserTab();
         }
-        // Close inappbrowser emebedded webview in iOS7 and 8 case if still
+        // Close inappbrowser embedded webview in iOS7 and 8 case if still
         // open.
         if (typeof iabRef?.close === 'function') {
           iabRef.close();
@@ -170,7 +170,7 @@ export async function _waitForAppResume(
         }
 
         onCloseTimer = window.setTimeout(() => {
-          // Wait two seeconds after resume then reject.
+          // Wait two seconds after resume then reject.
           reject(_createError(auth, AuthErrorCode.REDIRECT_CANCELLED_BY_USER));
         }, REDIRECT_TIMEOUT_MS);
       }
diff --git a/packages/auth/src/platform_react_native/persistence/react_native.ts b/packages/auth/src/platform_react_native/persistence/react_native.ts
index c0813b1a526..31ce3f70d21 100644
--- a/packages/auth/src/platform_react_native/persistence/react_native.ts
+++ b/packages/auth/src/platform_react_native/persistence/react_native.ts
@@ -40,7 +40,7 @@ export function getReactNativePersistence(
   // be able to be instantiated (as a class) using "new". That function also
   // expects the constructor to be empty. Since ReactNativeStorage requires the
   // underlying storage layer, we need to be able to create subclasses
-  // (closures, esentially) that have the storage layer but empty constructor.
+  // (closures, essentially) that have the storage layer but empty constructor.
   return class implements PersistenceInternal {
     static type: 'LOCAL' = 'LOCAL';
     readonly type: PersistenceType = PersistenceType.LOCAL;
diff --git a/packages/auth/test/integration/flows/firebaseserverapp.test.ts b/packages/auth/test/integration/flows/firebaseserverapp.test.ts
index 917430089c4..268854e0935 100644
--- a/packages/auth/test/integration/flows/firebaseserverapp.test.ts
+++ b/packages/auth/test/integration/flows/firebaseserverapp.test.ts
@@ -115,7 +115,7 @@ describe('Integration test: Auth FirebaseServerApp tests', () => {
     await deleteApp(serverApp);
   });
 
-  it('getToken operations fullfilled or rejected', async () => {
+  it('getToken operations fulfilled or rejected', async () => {
     if (isBrowser()) {
       return;
     }
@@ -197,7 +197,7 @@ describe('Integration test: Auth FirebaseServerApp tests', () => {
     await deleteApp(serverApp);
   });
 
-  it('signs in with email crednetial user', async () => {
+  it('signs in with email credential user', async () => {
     if (isBrowser()) {
       return;
     }
diff --git a/packages/auth/test/integration/flows/totp.test.ts b/packages/auth/test/integration/flows/totp.test.ts
index 4a256b15659..9ae704637a2 100644
--- a/packages/auth/test/integration/flows/totp.test.ts
+++ b/packages/auth/test/integration/flows/totp.test.ts
@@ -51,7 +51,7 @@ let totpTimestamp: Date;
 let emulatorUrl: string | null;
 let mfaUser: MultiFactorUser | null;
 
-describe(' Integration tests: Mfa enrollement using totp', () => {
+describe(' Integration tests: Mfa enrollment using totp', () => {
   beforeEach(async () => {
     emulatorUrl = getEmulatorUrl();
     if (!emulatorUrl) {
diff --git a/packages/auth/test/integration/webdriver/popup.test.ts b/packages/auth/test/integration/webdriver/popup.test.ts
index 145d9431bf0..be2b6c3f5c3 100644
--- a/packages/auth/test/integration/webdriver/popup.test.ts
+++ b/packages/auth/test/integration/webdriver/popup.test.ts
@@ -223,7 +223,7 @@ browserDescribe('Popup IdP tests', driver => {
       'user@test.test'
     );
 
-    // Link using pre-poulated user
+    // Link using pre-populated user
     await driver.callNoWait(PopupFunction.IDP_LINK_POPUP);
     await driver.selectPopupWindow();
     const widget = new IdPPage(driver.webDriver);
@@ -246,7 +246,7 @@ browserDescribe('Popup IdP tests', driver => {
       'same@test.test'
     );
 
-    // Link using pre-poulated user
+    // Link using pre-populated user
     await driver.callNoWait(PopupFunction.IDP_LINK_POPUP);
     await driver.selectPopupWindow();
     const widget = new IdPPage(driver.webDriver);
@@ -283,7 +283,7 @@ browserDescribe('Popup IdP tests', driver => {
     });
 
     it('a user can sign in again', async () => {
-      // Sign in using pre-poulated user
+      // Sign in using pre-populated user
       await driver.callNoWait(PopupFunction.IDP_POPUP);
       await driver.selectPopupWindow();
 
@@ -300,7 +300,7 @@ browserDescribe('Popup IdP tests', driver => {
     });
 
     it('reauthenticate works for the correct user', async () => {
-      // Sign in using pre-poulated user
+      // Sign in using pre-populated user
       await driver.callNoWait(PopupFunction.IDP_POPUP);
       await driver.selectPopupWindow();
 
@@ -327,7 +327,7 @@ browserDescribe('Popup IdP tests', driver => {
     });
 
     it('reauthenticate throws for wrong user', async () => {
-      // Sign in using pre-poulated user
+      // Sign in using pre-populated user
       await driver.callNoWait(PopupFunction.IDP_POPUP);
       await driver.selectPopupWindow();
 
diff --git a/packages/auth/test/integration/webdriver/redirect.test.ts b/packages/auth/test/integration/webdriver/redirect.test.ts
index 4dbd4ea0665..3c3616dc796 100644
--- a/packages/auth/test/integration/webdriver/redirect.test.ts
+++ b/packages/auth/test/integration/webdriver/redirect.test.ts
@@ -232,7 +232,7 @@ browserDescribe('WebDriver redirect IdP test', driver => {
       'user@test.test'
     );
 
-    // Link using pre-poulated user
+    // Link using pre-populated user
     await driver.callNoWait(RedirectFunction.IDP_LINK_REDIRECT);
 
     const widget = new IdPPage(driver.webDriver);
@@ -255,7 +255,7 @@ browserDescribe('WebDriver redirect IdP test', driver => {
       'same@test.test'
     );
 
-    // Link using pre-poulated user
+    // Link using pre-populated user
     await driver.callNoWait(RedirectFunction.IDP_LINK_REDIRECT);
 
     const widget = new IdPPage(driver.webDriver);
@@ -292,7 +292,7 @@ browserDescribe('WebDriver redirect IdP test', driver => {
     });
 
     it('a user can sign in again', async () => {
-      // Sign in using pre-poulated user
+      // Sign in using pre-populated user
       await driver.callNoWait(RedirectFunction.IDP_REDIRECT);
 
       // This time, select an existing account
@@ -308,7 +308,7 @@ browserDescribe('WebDriver redirect IdP test', driver => {
     });
 
     it('reauthenticate works for the correct user', async () => {
-      // Sign in using pre-poulated user
+      // Sign in using pre-populated user
       await driver.callNoWait(RedirectFunction.IDP_REDIRECT);
 
       const widget = new IdPPage(driver.webDriver);
@@ -337,7 +337,7 @@ browserDescribe('WebDriver redirect IdP test', driver => {
       // TODO(b/297245662): Investigate and unskip the test.
       this.skip();
 
-      // Sign in using pre-poulated user
+      // Sign in using pre-populated user
       await driver.callNoWait(RedirectFunction.IDP_REDIRECT);
 
       const widget = new IdPPage(driver.webDriver);
diff --git a/packages/auth/test/integration/webdriver/static/index.html b/packages/auth/test/integration/webdriver/static/index.html
index 5773ea9083e..e789a224138 100644
--- a/packages/auth/test/integration/webdriver/static/index.html
+++ b/packages/auth/test/integration/webdriver/static/index.html
@@ -16,7 +16,7 @@
 -->
 
 <!--
-  type=module makes browers treat it as an ES6 module and enforces strict mode. This helps catch
+  type=module makes browsers treat it as an ES6 module and enforces strict mode. This helps catch
   some errors in the test (e.g. extending frozen objects or accidentally creating global variables).
 -->
 <script type="module" src="dist/bundle.js"></script>
diff --git a/packages/auth/test/integration/webdriver/util/auth_driver.ts b/packages/auth/test/integration/webdriver/util/auth_driver.ts
index 9d57f91c0cf..bef8b43dcd3 100644
--- a/packages/auth/test/integration/webdriver/util/auth_driver.ts
+++ b/packages/auth/test/integration/webdriver/util/auth_driver.ts
@@ -41,7 +41,7 @@ type DriverCallResult =
       stack: string;
     };
 
-/** Helper wraper around the WebDriver object */
+/** Helper wrapper around the WebDriver object */
 export class AuthDriver {
   webDriver!: WebDriver;
 
diff --git a/packages/auth/test/integration/webdriver/util/idp_page.ts b/packages/auth/test/integration/webdriver/util/idp_page.ts
index d52aad1f088..2fab7536c9a 100644
--- a/packages/auth/test/integration/webdriver/util/idp_page.ts
+++ b/packages/auth/test/integration/webdriver/util/idp_page.ts
@@ -71,8 +71,8 @@ export class IdPPage {
     return this.fillInput(SCREEN_NAME_INPUT, screenName);
   }
 
-  fillProfilePhoto(prophilePhoto: string): Promise<void> {
-    return this.fillInput(PROFILE_PHOTO_INPUT, prophilePhoto);
+  fillProfilePhoto(profilePhoto: string): Promise<void> {
+    return this.fillInput(PROFILE_PHOTO_INPUT, profilePhoto);
   }
 
   private async fillInput(input: By, text: string): Promise<void> {
diff --git a/packages/component/CHANGELOG.md b/packages/component/CHANGELOG.md
index 087ce66a506..64a805ef1a5 100644
--- a/packages/component/CHANGELOG.md
+++ b/packages/component/CHANGELOG.md
@@ -252,7 +252,7 @@
 
 ### Minor Changes
 
-- [`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3) [#4595](https://github.com/firebase/firebase-js-sdk/pull/4595) - Component facotry now takes an options object. And added `Provider.initialize()` that can be used to pass an options object to the component factory.
+- [`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3) [#4595](https://github.com/firebase/firebase-js-sdk/pull/4595) - Component factory now takes an options object. And added `Provider.initialize()` that can be used to pass an options object to the component factory.
 
 ## 0.2.1
 
diff --git a/packages/component/src/provider.test.ts b/packages/component/src/provider.test.ts
index 3f7e6c51023..1c3185ccd86 100644
--- a/packages/component/src/provider.test.ts
+++ b/packages/component/src/provider.test.ts
@@ -293,12 +293,12 @@ describe('Provider', () => {
     });
 
     describe('get()', () => {
-      it('get the service instance asynchronouly', async () => {
+      it('get the service instance asynchronously', async () => {
         provider.setComponent(getFakeComponent('test', () => ({ test: true })));
         await expect(provider.get()).to.eventually.deep.equal({ test: true });
       });
 
-      it('ignore parameter identifier and return the default service instance asyn', async () => {
+      it('ignore parameter identifier and return the default service instance async', async () => {
         provider.setComponent(getFakeComponent('test', () => ({ test: true })));
         const defaultService = provider.getImmediate();
         await expect(provider.get('spider1')).to.eventually.equal(
@@ -407,7 +407,7 @@ describe('Provider', () => {
     describe('clearCache()', () => {
       it('removes the service instance from cache', () => {
         provider.setComponent(getFakeComponent('test', () => ({})));
-        // create serviec instance
+        // create service instance
         const instance = provider.getImmediate();
         expect((provider as any).instances.size).to.equal(1);
 
@@ -453,7 +453,7 @@ describe('Provider', () => {
     });
 
     describe('get(identifier)', () => {
-      it('returns different service instances for different identifiers asynchronouly', async () => {
+      it('returns different service instances for different identifiers asynchronously', async () => {
         provider.setComponent(
           getFakeComponent('test', () => ({ test: true }), true)
         );
@@ -497,7 +497,7 @@ describe('Provider', () => {
         expect((provider as any).instances.size).to.equal(1);
       });
 
-      it(`instantiates the default serviec if there are pending promises for other identifiers 
+      it(`instantiates the default service if there are pending promises for other identifiers 
             but not for the default identifer and the service is eager`, () => {
         void provider.get('name1');
         provider.setComponent(
@@ -528,7 +528,7 @@ describe('Provider', () => {
           };
         }
 
-        // provide factory that produces mulitpleInstances
+        // provide factory that produces multipleInstances
         provider.setComponent(getFakeComponent('test', getService, true));
 
         // create 2 service instances with different names
@@ -546,7 +546,7 @@ describe('Provider', () => {
     describe('clearCache()', () => {
       it('returns new service instances sync after cache is cleared', () => {
         provider.setComponent(getFakeComponent('test', () => ({}), true));
-        // create serviec instances with different identifiers
+        // create service instances with different identifiers
         const defaultInstance = provider.getImmediate();
         const instance1 = provider.getImmediate({ identifier: 'instance1' });
 
@@ -569,7 +569,7 @@ describe('Provider', () => {
 
       it('returns new services asynchronously after cache is cleared', async () => {
         provider.setComponent(getFakeComponent('test', () => ({}), true));
-        // create serviec instances with different identifiers
+        // create service instances with different identifiers
         const defaultInstance = await provider.get();
         const instance1 = await provider.get('instance1');
 
diff --git a/packages/component/src/provider.ts b/packages/component/src/provider.ts
index c52f5c72536..3d9e58516b6 100644
--- a/packages/component/src/provider.ts
+++ b/packages/component/src/provider.ts
@@ -48,7 +48,7 @@ export class Provider<T extends Name> {
   ) {}
 
   /**
-   * @param identifier A provider can provide mulitple instances of a service
+   * @param identifier A provider can provide multiple instances of a service
    * if this.component.multipleInstances is true.
    */
   get(identifier?: string): Promise<NameServiceMapping[T]> {
@@ -83,7 +83,7 @@ export class Provider<T extends Name> {
 
   /**
    *
-   * @param options.identifier A provider can provide mulitple instances of a service
+   * @param options.identifier A provider can provide multiple instances of a service
    * if this.component.multipleInstances is true.
    * @param options.optional If optional is false or not provided, the method throws an error when
    * the service is not immediately available.
diff --git a/packages/component/src/types.ts b/packages/component/src/types.ts
index fee0692314c..57867b9fc9e 100644
--- a/packages/component/src/types.ts
+++ b/packages/component/src/types.ts
@@ -29,7 +29,7 @@ export const enum InstantiationMode {
  * to get the service by calling `firebase.test()` or `app.test()` where `app` is a `FirebaseApp` instance.
  *
  * PRIVATE: A private component provides a set of private APIs that are used internally by other
- * Firebase SDKs. No serivce namespace is created in `firebase` namespace and customers have no way to get them.
+ * Firebase SDKs. No service namespace is created in `firebase` namespace and customers have no way to get them.
  */
 export const enum ComponentType {
   PUBLIC = 'PUBLIC',
diff --git a/packages/database-compat/test/helpers/events.ts b/packages/database-compat/test/helpers/events.ts
index d50ab5b7b7c..7efebb26390 100644
--- a/packages/database-compat/test/helpers/events.ts
+++ b/packages/database-compat/test/helpers/events.ts
@@ -195,7 +195,7 @@ export function eventTestHelper(pathAndEvents, helperName?) {
     // running), the dedupe will have taken affect and we'll just send "listen a", which results in:
     // "a/b/c: value, a/b: child_added c, a/b: value, a: child_added b, a: value"
     // Notice the 3rd and 4th events are swapped.
-    // To mitigate this, we re-ordeer your event registrations and do them in order of shortest path to longest.
+    // To mitigate this, we re-order your event registrations and do them in order of shortest path to longest.
 
     pathsToListenOn.sort((a, b) => {
       return a.toString().length - b.toString().length;
diff --git a/packages/database-compat/test/helpers/util.ts b/packages/database-compat/test/helpers/util.ts
index a7625152ac2..e3ee4d018d1 100644
--- a/packages/database-compat/test/helpers/util.ts
+++ b/packages/database-compat/test/helpers/util.ts
@@ -93,7 +93,7 @@ export function getRootNode(i = 0, ref?: string) {
 
 /**
  * Create multiple refs to the same top level
- * push key - each on it's own Firebase.Context.
+ * push key - each on its own Firebase.Context.
  */
 export function getRandomNode(numNodes?): Reference | Reference[] {
   if (numNodes === undefined) {
diff --git a/packages/database-compat/test/info.test.ts b/packages/database-compat/test/info.test.ts
index 6832488bbf3..8bec1ff9173 100644
--- a/packages/database-compat/test/info.test.ts
+++ b/packages/database-compat/test/info.test.ts
@@ -29,7 +29,7 @@ import {
 
 /**
  * We have a test that depends on leveraging two properly
- * configured Firebase instances. we are skiping the test
+ * configured Firebase instances. we are skipping the test
  * but I want to leave the test here for when we can refactor
  * to remove the prod firebase dependency.
  */
diff --git a/packages/database-compat/test/promise.test.ts b/packages/database-compat/test/promise.test.ts
index 37773ddda27..255f057945c 100644
--- a/packages/database-compat/test/promise.test.ts
+++ b/packages/database-compat/test/promise.test.ts
@@ -22,11 +22,11 @@ import { Reference } from '../src/api/Reference';
 import { getRandomNode, getRootNode } from './helpers/util';
 
 /**
- * This test suite is super flakey, random test fail at random times for
- * no predicatble reason. Skipping for now but adding todo to come back
+ * This test suite is super flaky, random test fail at random times for
+ * no predictable reason. Skipping for now but adding todo to come back
  * later and fix this
  */
-// TODO: Fix the flakey test suite
+// TODO: Fix the flaky test suite
 describe.skip('Promise Tests', () => {
   it('wraps Query.once', () => {
     return (getRandomNode() as Reference).once('value').then(snap => {
@@ -110,7 +110,7 @@ describe.skip('Promise Tests', () => {
       });
   });
 
-  it('wraps Fireabse.setPriority', () => {
+  it('wraps Firebase.setPriority', () => {
     const ref = getRandomNode() as Reference;
     return ref
       .set({ a: 'b' })
diff --git a/packages/database-compat/test/query.test.ts b/packages/database-compat/test/query.test.ts
index a6bfd8703bb..3962f4c5b90 100644
--- a/packages/database-compat/test/query.test.ts
+++ b/packages/database-compat/test/query.test.ts
@@ -3806,7 +3806,7 @@ describe('Query Tests', () => {
     expect(removedSecond).to.deep.equal(['a']);
   });
 
-  it('Case 2003: Correctly get events for startAtfter/endAt queries when priority changes.', () => {
+  it('Case 2003: Correctly get events for startAfter/endAt queries when priority changes.', () => {
     const ref = getRandomNode() as Reference;
     const addedFirst = [],
       removedFirst = [],
diff --git a/packages/database-compat/test/transaction.test.ts b/packages/database-compat/test/transaction.test.ts
index 6ca010bee8a..55d7b5042c0 100644
--- a/packages/database-compat/test/transaction.test.ts
+++ b/packages/database-compat/test/transaction.test.ts
@@ -826,7 +826,7 @@ describe('Transaction Tests', () => {
 
   // This test is meant to ensure that with applyLocally=false, while the transaction is outstanding, we continue
   // to get events from other clients.
-  // TODO(mikelehen): Unfortunately this test is currently flaky.  It's inherently a racey test since it's
+  // TODO(mikelehen): Unfortunately this test is currently flaky.  It's inherently a racy test since it's
   // trying to do 4 sets before the transaction retries 25 times (and fails), using two different connections.
   // Disabling for now until we rework the approach.
   it.skip('Transaction without local events (2)', done => {
diff --git a/packages/database/CHANGELOG.md b/packages/database/CHANGELOG.md
index bb971e2cbbd..134602eeaaa 100644
--- a/packages/database/CHANGELOG.md
+++ b/packages/database/CHANGELOG.md
@@ -448,7 +448,7 @@
 
 ### Patch Changes
 
-- [`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3) [#4595](https://github.com/firebase/firebase-js-sdk/pull/4595) - Component facotry now takes an options object. And added `Provider.initialize()` that can be used to pass an options object to the component factory.
+- [`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3) [#4595](https://github.com/firebase/firebase-js-sdk/pull/4595) - Component factory now takes an options object. And added `Provider.initialize()` that can be used to pass an options object to the component factory.
 
 - Updated dependencies [[`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3)]:
   - @firebase/component@0.3.0
diff --git a/packages/database/src/core/AppCheckTokenProvider.ts b/packages/database/src/core/AppCheckTokenProvider.ts
index 5856fa4d06a..2bdd8fdadac 100644
--- a/packages/database/src/core/AppCheckTokenProvider.ts
+++ b/packages/database/src/core/AppCheckTokenProvider.ts
@@ -46,7 +46,7 @@ export class AppCheckTokenProvider {
         // Support delayed initialization of FirebaseAppCheck. This allows our
         // customers to initialize the RTDB SDK before initializing Firebase
         // AppCheck and ensures that all requests are authenticated if a token
-        // becomes available before the timoeout below expires.
+        // becomes available before the timeout below expires.
         setTimeout(() => {
           if (this.appCheck) {
             this.getToken(forceRefresh).then(resolve, reject);
diff --git a/packages/database/src/core/AuthTokenProvider.ts b/packages/database/src/core/AuthTokenProvider.ts
index 46ccf9b0a68..af3a0ed4b83 100644
--- a/packages/database/src/core/AuthTokenProvider.ts
+++ b/packages/database/src/core/AuthTokenProvider.ts
@@ -54,7 +54,7 @@ export class FirebaseAuthTokenProvider implements AuthTokenProvider {
         // Support delayed initialization of FirebaseAuth. This allows our
         // customers to initialize the RTDB SDK before initializing Firebase
         // Auth and ensures that all requests are authenticated if a token
-        // becomes available before the timoeout below expires.
+        // becomes available before the timeout below expires.
         setTimeout(() => {
           if (this.auth_) {
             this.getToken(forceRefresh).then(resolve, reject);
diff --git a/packages/database/src/core/WriteTree.ts b/packages/database/src/core/WriteTree.ts
index f586f194441..28f5d063c5a 100644
--- a/packages/database/src/core/WriteTree.ts
+++ b/packages/database/src/core/WriteTree.ts
@@ -48,7 +48,7 @@ import { CacheNode } from './view/CacheNode';
 
 /**
  * Defines a single user-initiated write operation. May be the result of a set(), transaction(), or update() call. In
- * the case of a set() or transaction, snap wil be non-null.  In the case of an update(), children will be non-null.
+ * the case of a set() or transaction, snap will be non-null.  In the case of an update(), children will be non-null.
  */
 export interface WriteRecord {
   writeId: number;
diff --git a/packages/database/src/core/util/NextPushId.ts b/packages/database/src/core/util/NextPushId.ts
index ba48f1a0b63..7007097f726 100644
--- a/packages/database/src/core/util/NextPushId.ts
+++ b/packages/database/src/core/util/NextPushId.ts
@@ -158,7 +158,7 @@ export const predecessor = function (key: string) {
   //
   // analogous to increment/decrement for base-10 integers.
   //
-  // This works because lexigographic comparison works character-by-character,
+  // This works because lexicographic comparison works character-by-character,
   // using length as a tie-breaker if one key is a prefix of the other.
   if (next[next.length - 1] === MIN_PUSH_CHAR) {
     if (next.length === 1) {
diff --git a/packages/database/src/core/util/Tree.ts b/packages/database/src/core/util/Tree.ts
index 7233b9ed948..083bf7d2640 100644
--- a/packages/database/src/core/util/Tree.ts
+++ b/packages/database/src/core/util/Tree.ts
@@ -100,7 +100,7 @@ export function treeHasChildren<T>(tree: Tree<T>): boolean {
 }
 
 /**
- * @returns Whethe rthe tree is empty (no value or children).
+ * @returns Whether the tree is empty (no value or children).
  */
 export function treeIsEmpty<T>(tree: Tree<T>): boolean {
   return treeGetValue(tree) === undefined && !treeHasChildren(tree);
diff --git a/packages/database/src/core/util/util.ts b/packages/database/src/core/util/util.ts
index 09c37bafe24..27b7426f13e 100644
--- a/packages/database/src/core/util/util.ts
+++ b/packages/database/src/core/util/util.ts
@@ -501,7 +501,7 @@ export const INTEGER_REGEXP_ = new RegExp('^-?(0*)\\d{1,10}$');
 export const INTEGER_32_MIN = -2147483648;
 
 /**
- * For use in kyes, the maximum possible 32-bit integer.
+ * For use in keys, the maximum possible 32-bit integer.
  */
 export const INTEGER_32_MAX = 2147483647;
 
diff --git a/packages/database/src/realtime/BrowserPollConnection.ts b/packages/database/src/realtime/BrowserPollConnection.ts
index 21396cecc8e..697eef109c5 100644
--- a/packages/database/src/realtime/BrowserPollConnection.ts
+++ b/packages/database/src/realtime/BrowserPollConnection.ts
@@ -435,7 +435,7 @@ export class FirebaseIFrameScriptHolder {
   onMessageCB: (...args: unknown[]) => void;
 
   /**
-   * @param commandCB - The callback to be called when control commands are recevied from the server.
+   * @param commandCB - The callback to be called when control commands are received from the server.
    * @param onMessageCB - The callback to be triggered when responses arrive from the server.
    * @param onDisconnect - The callback to be triggered when this tag holder is closed
    * @param urlFn - A function that provides the URL of the endpoint to send data to.
diff --git a/packages/database/test/connection.test.ts b/packages/database/test/connection.test.ts
index 7719b6dfbd4..6045ae10b25 100644
--- a/packages/database/test/connection.test.ts
+++ b/packages/database/test/connection.test.ts
@@ -40,7 +40,7 @@ describe('Connection', () => {
     );
   });
 
-  // TODO(koss) - Flakey Test.  When Dev Tools is closed on my Mac, this test
+  // TODO(koss) - Flaky Test.  When Dev Tools is closed on my Mac, this test
   // fails about 20% of the time (open - it never fails).  In the failing
   // case a long-poll is opened first.
   it.skip('disconnect old session on new connection', done => {
diff --git a/packages/database/test/helpers/syncPointSpec.json b/packages/database/test/helpers/syncPointSpec.json
index 931193f02b7..f467d16bbec 100644
--- a/packages/database/test/helpers/syncPointSpec.json
+++ b/packages/database/test/helpers/syncPointSpec.json
@@ -3729,7 +3729,7 @@
         "data": {
           "4": { "age": 41, "highscore": 400, "name": "old mama"},
           "5": { "age": 18, "highscore": 1200, "name": "young mama"},
-          "6": { "age": 20, "highscore": 1003, "name": "micheal blub"},
+          "6": { "age": 20, "highscore": 1003, "name": "michael blub"},
           "7": { "age": 30, "highscore": 10000, "name": "no. 7"}
         },
         "events": [
@@ -3752,7 +3752,7 @@
             "type": "child_added",
             "name": "6",
             "prevName": "5",
-            "data": { "age": 20, "highscore": 1003, "name": "micheal blub"}
+            "data": { "age": 20, "highscore": 1003, "name": "michael blub"}
           },
           {
             "path": "",
@@ -3767,7 +3767,7 @@
             "data": {
               "4": { "age": 41, "highscore": 400, "name": "old mama"},
               "5": { "age": 18, "highscore": 1200, "name": "young mama"},
-              "6": { "age": 20, "highscore": 1003, "name": "micheal blub"},
+              "6": { "age": 20, "highscore": 1003, "name": "michael blub"},
               "7": { "age": 30, "highscore": 10000, "name": "no. 7"}
             }
           }
@@ -3800,7 +3800,7 @@
             "data": {
               "4": { "age": 25, "highscore": 400, "name": "old mama"},
               "5": { "age": 18, "highscore": 1200, "name": "young mama"},
-              "6": { "age": 20, "highscore": 1003, "name": "micheal blub"},
+              "6": { "age": 20, "highscore": 1003, "name": "michael blub"},
               "7": { "age": 30, "highscore": 10000, "name": "no. 7"}
             }
           }
@@ -6968,7 +6968,7 @@
         ]
       },
       {
-        ".comment": "Server now incorperates user update",
+        ".comment": "Server now incorporates user update",
         "type": "serverUpdate",
         "tag": 1,
         "path": "key-2",
@@ -7200,7 +7200,7 @@
         ]
       },
       {
-        ".comment": "this caused vomitting in the past...",
+        ".comment": "this caused vomiting in the past...",
         "type": "set",
         "path": "a/foo/bar",
         "data": null,
diff --git a/packages/firebase/CHANGELOG.md b/packages/firebase/CHANGELOG.md
index 0e5b46646d2..ee4fa2b0e71 100644
--- a/packages/firebase/CHANGELOG.md
+++ b/packages/firebase/CHANGELOG.md
@@ -1745,7 +1745,7 @@
 
 ### Minor Changes
 
-- [`b3caa5158`](https://github.com/firebase/firebase-js-sdk/commit/b3caa515846d2bfcf4a95dedff69f08d503cbfc2) [#5149](https://github.com/firebase/firebase-js-sdk/pull/5149) - Add NodeJS support to Cloud Storage for Firebase. This release changes the `main` field in package.json to point to a Node specific build. If you are building a bundle for borwser usage, please make sure that your bundler uses the `browser` field (the default).
+- [`b3caa5158`](https://github.com/firebase/firebase-js-sdk/commit/b3caa515846d2bfcf4a95dedff69f08d503cbfc2) [#5149](https://github.com/firebase/firebase-js-sdk/pull/5149) - Add NodeJS support to Cloud Storage for Firebase. This release changes the `main` field in package.json to point to a Node specific build. If you are building a bundle for browser usage, please make sure that your bundler uses the `browser` field (the default).
 
 * [`02586c975`](https://github.com/firebase/firebase-js-sdk/commit/02586c9754318b01a0051561d2c7c4906059b5af) [#5070](https://github.com/firebase/firebase-js-sdk/pull/5070) - Add `firebase_screen` and `firebase_screen_class` to `logEvent()` overload for `screen_view` events.
 
@@ -2228,7 +2228,7 @@
 
 * [`8939aeca0`](https://github.com/firebase/firebase-js-sdk/commit/8939aeca02921f9eacf1badb1068de22f670293e) [#3944](https://github.com/firebase/firebase-js-sdk/pull/3944) - Removed the undocumented `Firestore.logLevel` property.
 
-- [`344bd8856`](https://github.com/firebase/firebase-js-sdk/commit/344bd88566e2c42fd7ee92f28bb0f784629b48ee) [#3943](https://github.com/firebase/firebase-js-sdk/pull/3943) - Removed depreacted `experimentalTabSynchronization` settings. To enable multi-tab sychronization, use `synchronizeTabs` instead.
+- [`344bd8856`](https://github.com/firebase/firebase-js-sdk/commit/344bd88566e2c42fd7ee92f28bb0f784629b48ee) [#3943](https://github.com/firebase/firebase-js-sdk/pull/3943) - Removed deprecated `experimentalTabSynchronization` settings. To enable multi-tab synchronization, use `synchronizeTabs` instead.
 
 * [`4b540f91d`](https://github.com/firebase/firebase-js-sdk/commit/4b540f91dbad217e8ec04b382b4c724308cb3df1) [#3939](https://github.com/firebase/firebase-js-sdk/pull/3939) - This releases removes all input validation. Please use our TypeScript types to validate API usage.
 
diff --git a/packages/firebase/compat/index.d.ts b/packages/firebase/compat/index.d.ts
index 4b2bc1e8a47..f738088eff7 100644
--- a/packages/firebase/compat/index.d.ts
+++ b/packages/firebase/compat/index.d.ts
@@ -1739,7 +1739,7 @@ declare namespace firebase.installations {
     delete(): Promise<void>;
 
     /**
-     * Sets a new callback that will get called when Installlation ID changes.
+     * Sets a new callback that will get called when Installation ID changes.
      * Returns an unsubscribe function that will remove the callback when called.
      */
     onIdChange(callback: (installationId: string) => void): () => void;
@@ -1803,7 +1803,7 @@ declare namespace firebase.performance {
      * directly be used (e.g. if the duration was captured before the Performance SDK was loaded).
      *
      * @param startTime Trace start time since epoch in millisec.
-     * @param duration The duraction of the trace in millisec.
+     * @param duration The duration of the trace in millisec.
      * @param options An object which can optionally hold maps of custom metrics and
      * custom attributes.
      */
@@ -3464,7 +3464,7 @@ declare namespace firebase.auth {
      * <h4>Error Codes</h4>
      * <dl>
      * <dt>auth/invalid-user-token</dt>
-     * <dd>Thrown if the user to be updated belongs to a diffent Firebase
+     * <dd>Thrown if the user to be updated belongs to a different Firebase
      *     project.</dd>
      * <dt>auth/user-token-expired</dt>
      * <dd>Thrown if the token of the user to be updated is expired.</dd>
@@ -3803,7 +3803,7 @@ declare namespace firebase.auth {
     /**
      * The tenant ID being used for sign-in/linking. If you use
      * {@link firebase.auth.Auth.signInWithRedirect} to sign in, you have to
-     * set the tenant ID on Auth instanace again as the tenant ID is not
+     * set the tenant ID on Auth instance again as the tenant ID is not
      * persisted after redirection.
      */
     tenantId?: string;
@@ -6365,7 +6365,7 @@ declare namespace firebase.database {
      *
      * The ending point is exclusive. If only a value is provided, children
      * with a value less than the specified value will be included in the query.
-     * If a key is specified, then children must have a value lesss than or equal
+     * If a key is specified, then children must have a value less than or equal
      * to the specified value and a a key name less than the specified key.
      *
      * @example
@@ -8459,7 +8459,7 @@ declare namespace firebase.firestore {
   export interface FirestoreDataConverter<T> {
     /**
      * Called by the Firestore SDK to convert a custom model object of type T
-     * into a plain Javascript object (suitable for writing directly to the
+     * into a plain JavaScript object (suitable for writing directly to the
      * Firestore database). To use `set()` with `merge` and `mergeFields`,
      * `toFirestore()` must be defined with `Partial<T>`.
      */
diff --git a/packages/firebase/compat/index.ts b/packages/firebase/compat/index.ts
index aa3fc53001c..9905ee4bdf0 100644
--- a/packages/firebase/compat/index.ts
+++ b/packages/firebase/compat/index.ts
@@ -31,7 +31,7 @@ ES Modules:
 import firebase from 'firebase/app';
 import 'firebase/<PACKAGE>';
 
-Typescript:
+TypeScript:
 import firebase from 'firebase/app';
 import 'firebase/<PACKAGE>';
 `);
diff --git a/packages/firestore-compat/test/bundle.test.ts b/packages/firestore-compat/test/bundle.test.ts
index ad1d730fedf..c4c557ae7df 100644
--- a/packages/firestore-compat/test/bundle.test.ts
+++ b/packages/firestore-compat/test/bundle.test.ts
@@ -44,7 +44,7 @@ function verifyInProgress(
   expect(p.documentsLoaded).to.equal(expectedDocuments);
 }
 
-// This template is generated from bundleWithTestDocsAndQueries in '../util/internal_helpsers.ts',
+// This template is generated from bundleWithTestDocsAndQueries in '../util/internal_helpers.ts',
 // and manually copied here.
 const BUNDLE_TEMPLATE = [
   '{"metadata":{"id":"test-bundle","createTime":{"seconds":1001,"nanos":9999},"version":1,"totalDocuments":2,"totalBytes":1503}}',
diff --git a/packages/firestore-compat/test/get_options.test.ts b/packages/firestore-compat/test/get_options.test.ts
index b5b1bb3afd7..fd76e5d2d1e 100644
--- a/packages/firestore-compat/test/get_options.test.ts
+++ b/packages/firestore-compat/test/get_options.test.ts
@@ -263,7 +263,7 @@ apiDescribe('GetOptions', (persistence: boolean) => {
       return (
         colRef
           .get()
-          // now go offine. Note that if persistence is disabled, this will cause
+          // now go offline. Note that if persistence is disabled, this will cause
           // the initialDocs to be garbage collected.
           .then(ignored => colRef.firestore.disableNetwork())
           .then(() => colRef.get({ source: 'server' }))
@@ -341,7 +341,7 @@ apiDescribe('GetOptions', (persistence: boolean) => {
       return (
         colRef
           .get()
-          // now go offine. Note that if persistence is disabled, this will cause
+          // now go offline. Note that if persistence is disabled, this will cause
           // the initialDocs to be garbage collected.
           .then(ignored => colRef.firestore.disableNetwork())
           .then(() => {
@@ -403,7 +403,7 @@ apiDescribe('GetOptions', (persistence: boolean) => {
     });
   });
 
-  it('get non existing doc while online with default get options', () => {
+  it('get nonexistent doc while online with default get options', () => {
     return withTestDocAndInitialData(persistence, null, docRef => {
       return docRef.get().then(doc => {
         expect(doc.exists).to.be.false;
@@ -413,7 +413,7 @@ apiDescribe('GetOptions', (persistence: boolean) => {
     });
   });
 
-  it('get non existing collection while online with default get options', () => {
+  it('get nonexistent collection while online with default get options', () => {
     return withTestCollection(persistence, {}, colRef => {
       return colRef.get().then(qrySnap => {
         //expect(qrySnap.count).to.equal(0);
@@ -425,7 +425,7 @@ apiDescribe('GetOptions', (persistence: boolean) => {
     });
   });
 
-  it('get non existing doc while offline with default get options', () => {
+  it('get nonexistent doc while offline with default get options', () => {
     return withTestDocAndInitialData(persistence, null, docRef => {
       return (
         docRef.firestore
@@ -461,7 +461,7 @@ apiDescribe('GetOptions', (persistence: boolean) => {
     });
   });
 
-  it('get non existing collection while offline with default get options', () => {
+  it('get nonexistent collection while offline with default get options', () => {
     return withTestCollection(persistence, {}, colRef => {
       return colRef.firestore
         .disableNetwork()
@@ -475,7 +475,7 @@ apiDescribe('GetOptions', (persistence: boolean) => {
     });
   });
 
-  it('get non existing doc while online with source=cache', () => {
+  it('get nonexistent doc while online with source=cache', () => {
     return withTestDocAndInitialData(persistence, null, docRef => {
       // Attempt to get doc.  This will fail since there's nothing in cache.
       return docRef.get({ source: 'cache' }).then(
@@ -487,7 +487,7 @@ apiDescribe('GetOptions', (persistence: boolean) => {
     });
   });
 
-  it('get non existing collection while online with source=cache', () => {
+  it('get nonexistent collection while online with source=cache', () => {
     return withTestCollection(persistence, {}, colRef => {
       return colRef.get({ source: 'cache' }).then(qrySnap => {
         expect(qrySnap.empty).to.be.true;
@@ -498,7 +498,7 @@ apiDescribe('GetOptions', (persistence: boolean) => {
     });
   });
 
-  it('get non existing doc while offline with source=cache', () => {
+  it('get nonexistent doc while offline with source=cache', () => {
     return withTestDocAndInitialData(persistence, null, docRef => {
       return (
         docRef.firestore
@@ -538,7 +538,7 @@ apiDescribe('GetOptions', (persistence: boolean) => {
     }
   );
 
-  it('get non existing collection while offline with source=cache', () => {
+  it('get nonexistent collection while offline with source=cache', () => {
     return withTestCollection(persistence, {}, colRef => {
       return colRef.firestore
         .disableNetwork()
@@ -552,7 +552,7 @@ apiDescribe('GetOptions', (persistence: boolean) => {
     });
   });
 
-  it('get non existing doc while online with source=server', () => {
+  it('get nonexistent doc while online with source=server', () => {
     return withTestDocAndInitialData(persistence, null, docRef => {
       return docRef.get({ source: 'server' }).then(doc => {
         expect(doc.exists).to.be.false;
@@ -562,7 +562,7 @@ apiDescribe('GetOptions', (persistence: boolean) => {
     });
   });
 
-  it('get non existing collection while online with source=server', () => {
+  it('get nonexistent collection while online with source=server', () => {
     return withTestCollection(persistence, {}, colRef => {
       return colRef.get({ source: 'server' }).then(qrySnap => {
         expect(qrySnap.empty).to.be.true;
@@ -573,7 +573,7 @@ apiDescribe('GetOptions', (persistence: boolean) => {
     });
   });
 
-  it('get non existing doc while offline with source=server', () => {
+  it('get nonexistent doc while offline with source=server', () => {
     return withTestDocAndInitialData(persistence, null, docRef => {
       return (
         docRef.firestore
@@ -590,7 +590,7 @@ apiDescribe('GetOptions', (persistence: boolean) => {
     });
   });
 
-  it('get non existing collection while offline with source=server', () => {
+  it('get nonexistent collection while offline with source=server', () => {
     return withTestCollection(persistence, {}, colRef => {
       return colRef.firestore
         .disableNetwork()
diff --git a/packages/firestore/CHANGELOG.md b/packages/firestore/CHANGELOG.md
index f138d91e82b..5263b943e13 100644
--- a/packages/firestore/CHANGELOG.md
+++ b/packages/firestore/CHANGELOG.md
@@ -26,7 +26,7 @@
 
 - [`224419457`](https://github.com/firebase/firebase-js-sdk/commit/224419457c3fd2e5813166dbd7d6d9a03322143c) [#8145](https://github.com/firebase/firebase-js-sdk/pull/8145) - Prevent spurious "Backend didn't respond within 10 seconds" errors when network is indeed responding, just slowly.
 
-- [`bd12e83cd`](https://github.com/firebase/firebase-js-sdk/commit/bd12e83cd1f0a10774dfb7e6ff7d4b0555a29a81) [#8150](https://github.com/firebase/firebase-js-sdk/pull/8150) - Updated protobufjs transitive dependency in Firetore.
+- [`bd12e83cd`](https://github.com/firebase/firebase-js-sdk/commit/bd12e83cd1f0a10774dfb7e6ff7d4b0555a29a81) [#8150](https://github.com/firebase/firebase-js-sdk/pull/8150) - Updated protobufjs transitive dependency in Firestore.
 
 - [`e1a7764cf`](https://github.com/firebase/firebase-js-sdk/commit/e1a7764cf36d246bb021d084e498604fe37e84aa) [#8197](https://github.com/firebase/firebase-js-sdk/pull/8197) - Go back using xmlhttprequest for bidi-streams, as fetch streams seem to be having connection issue.
 
@@ -242,7 +242,7 @@
 
 ### Patch Changes
 
-- [`b66908df6`](https://github.com/firebase/firebase-js-sdk/commit/b66908df6f280b4f7bfce984e07c169d426c990b) [#7212](https://github.com/firebase/firebase-js-sdk/pull/7212) (fixes [#7198](https://github.com/firebase/firebase-js-sdk/issues/7198)) - Fix a bug that sometimes prevented aggregations from being run when muli-tab persistence was enabled.
+- [`b66908df6`](https://github.com/firebase/firebase-js-sdk/commit/b66908df6f280b4f7bfce984e07c169d426c990b) [#7212](https://github.com/firebase/firebase-js-sdk/pull/7212) (fixes [#7198](https://github.com/firebase/firebase-js-sdk/issues/7198)) - Fix a bug that sometimes prevented aggregations from being run when multi-tab persistence was enabled.
 
 ## 3.10.0
 
@@ -514,7 +514,7 @@
 
 * [`f5ac47fb1`](https://github.com/firebase/firebase-js-sdk/commit/f5ac47fb1a44f7b985fcae1d934e1ffb6ba41d67) [#5982](https://github.com/firebase/firebase-js-sdk/pull/5982) - On browsers that support IndexedDB V3, we now invoke `transaction.commit()` to speed up data processing.
 
-- [`c1b9cf120`](https://github.com/firebase/firebase-js-sdk/commit/c1b9cf1201807fc177a89c9613c06130524563e4) [#5985](https://github.com/firebase/firebase-js-sdk/pull/5985) - Some database operations now use `IndexedDB.getAll()` on browsers where support is availbe.
+- [`c1b9cf120`](https://github.com/firebase/firebase-js-sdk/commit/c1b9cf1201807fc177a89c9613c06130524563e4) [#5985](https://github.com/firebase/firebase-js-sdk/pull/5985) - Some database operations now use `IndexedDB.getAll()` on browsers where support is available.
 
 * [`e9619685b`](https://github.com/firebase/firebase-js-sdk/commit/e9619685b9153f7d6f8767e09e2e1eacc337df76) [#5980](https://github.com/firebase/firebase-js-sdk/pull/5980) - Queries are now send to the backend before the SDK starts local processing, which reduces overall Query latency.
 
@@ -801,7 +801,7 @@
 
 ### Patch Changes
 
-- [`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3) [#4595](https://github.com/firebase/firebase-js-sdk/pull/4595) - Component facotry now takes an options object. And added `Provider.initialize()` that can be used to pass an options object to the component factory.
+- [`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3) [#4595](https://github.com/firebase/firebase-js-sdk/pull/4595) - Component factory now takes an options object. And added `Provider.initialize()` that can be used to pass an options object to the component factory.
 
 - Updated dependencies [[`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3)]:
   - @firebase/component@0.3.0
@@ -932,7 +932,7 @@
 
 - [`8939aeca0`](https://github.com/firebase/firebase-js-sdk/commit/8939aeca02921f9eacf1badb1068de22f670293e) [#3944](https://github.com/firebase/firebase-js-sdk/pull/3944) - Removed the undocumented `Firestore.logLevel` property.
 
-* [`344bd8856`](https://github.com/firebase/firebase-js-sdk/commit/344bd88566e2c42fd7ee92f28bb0f784629b48ee) [#3943](https://github.com/firebase/firebase-js-sdk/pull/3943) - Removed depreacted `experimentalTabSynchronization` settings. To enable multi-tab sychronization, use `synchronizeTabs` instead.
+* [`344bd8856`](https://github.com/firebase/firebase-js-sdk/commit/344bd88566e2c42fd7ee92f28bb0f784629b48ee) [#3943](https://github.com/firebase/firebase-js-sdk/pull/3943) - Removed deprecated `experimentalTabSynchronization` settings. To enable multi-tab synchronization, use `synchronizeTabs` instead.
 
 - [`4b540f91d`](https://github.com/firebase/firebase-js-sdk/commit/4b540f91dbad217e8ec04b382b4c724308cb3df1) [#3939](https://github.com/firebase/firebase-js-sdk/pull/3939) - This releases removes all input validation. Please use our TypeScript types to validate API usage.
 
@@ -1012,7 +1012,7 @@
 
 ### Patch Changes
 
-- [`e81c429ae`](https://github.com/firebase/firebase-js-sdk/commit/e81c429aec43cd4467089bfed68eafafba6e8ee2) [#3755](https://github.com/firebase/firebase-js-sdk/pull/3755) (fixes [#3742](https://github.com/firebase/firebase-js-sdk/issues/3742)) - Fixed a bug where CollectionReference.add() called FirestoreDataConverter.toFirestore() twice intead of once (#3742).
+- [`e81c429ae`](https://github.com/firebase/firebase-js-sdk/commit/e81c429aec43cd4467089bfed68eafafba6e8ee2) [#3755](https://github.com/firebase/firebase-js-sdk/pull/3755) (fixes [#3742](https://github.com/firebase/firebase-js-sdk/issues/3742)) - Fixed a bug where CollectionReference.add() called FirestoreDataConverter.toFirestore() twice instead of once (#3742).
 
 - Updated dependencies [[`f9004177e`](https://github.com/firebase/firebase-js-sdk/commit/f9004177e76f00fc484d30c0c0e7b1bc2da033f9), [`a8ff3dbaa`](https://github.com/firebase/firebase-js-sdk/commit/a8ff3dbaacd06371e6652a6d639ef2d9bead612b)]:
   - @firebase/firestore-types@1.13.0
@@ -1123,7 +1123,7 @@
 
 - [fixed] Fixed an issue that could cause Firestore to temporarily go
   offline when a Window visibility event occurred.
-- [feature] Added support for calling `FirebaseFiresore.settings` with
+- [feature] Added support for calling `FirebaseFirestore.settings` with
   `{ ignoreUndefinedProperties: true }`. When set, Firestore ignores
   undefined properties inside objects rather than rejecting the API call.
 
@@ -1307,7 +1307,7 @@
 ## 1.1.1
 
 - [changed] Increased a connection timeout that could lead to large writes
-  perputually retrying without ever succeeding (#1447).
+  perpetually retrying without ever succeeding (#1447).
 - [fixed] Fixed an issue with IndexedDb persistence that triggered an internal
   assert for Queries that use nested DocumentReferences in where() clauses
   (#1524, #1596).
diff --git a/packages/firestore/karma.conf.js b/packages/firestore/karma.conf.js
index d9227d7623a..70c5ffef546 100644
--- a/packages/firestore/karma.conf.js
+++ b/packages/firestore/karma.conf.js
@@ -62,17 +62,17 @@ module.exports = function (config) {
  */
 function getTestFiles(argv) {
   const unitTests = 'test/unit/bootstrap.ts';
-  const legcayIntegrationTests = 'test/integration/bootstrap.ts';
+  const legacyIntegrationTests = 'test/integration/bootstrap.ts';
   const liteIntegrationTests = 'test/lite/bootstrap.ts';
   if (argv.unit) {
     return [unitTests];
   } else if (argv.integration) {
-    return [legcayIntegrationTests];
+    return [legacyIntegrationTests];
   } else if (argv.lite) {
     process.env.TEST_PLATFORM = 'browser_lite';
     return [liteIntegrationTests];
   } else {
-    return [unitTests, legcayIntegrationTests];
+    return [unitTests, legacyIntegrationTests];
   }
 }
 
diff --git a/packages/firestore/lite/index.ts b/packages/firestore/lite/index.ts
index bec95b76124..d6ebad66cb5 100644
--- a/packages/firestore/lite/index.ts
+++ b/packages/firestore/lite/index.ts
@@ -116,10 +116,10 @@ export {
   UnionToIntersection
 } from '../src/lite-api/types';
 
-// TOOD(firestorelite): Add tests when Queries are usable
+// TODO(firestorelite): Add tests when Queries are usable
 export { FieldPath, documentId } from '../src/lite-api/field_path';
 
-// TOOD(firestorelite): Add tests when setDoc() is available
+// TODO(firestorelite): Add tests when setDoc() is available
 export { FieldValue } from '../src/lite-api/field_value';
 
 export {
diff --git a/packages/firestore/rollup.config.lite.js b/packages/firestore/rollup.config.lite.js
index 6a4f55ffa56..369a9210262 100644
--- a/packages/firestore/rollup.config.lite.js
+++ b/packages/firestore/rollup.config.lite.js
@@ -66,8 +66,8 @@ const browserPlugins = function () {
 };
 
 const allBuilds = [
-  // Intermidiate Node ESM build without build target reporting
-  // this is an intermidiate build used to generate the actual esm and cjs builds
+  // Intermediate Node ESM build without build target reporting
+  // this is an intermediate build used to generate the actual esm and cjs builds
   // which add build target reporting
   {
     input: './lite/index.ts',
@@ -132,8 +132,8 @@ const allBuilds = [
       moduleSideEffects: false
     }
   },
-  // Intermidiate browser build without build target reporting
-  // this is an intermidiate build used to generate the actual esm and cjs builds
+  // Intermediate browser build without build target reporting
+  // this is an intermediate build used to generate the actual esm and cjs builds
   // which add build target reporting
   {
     input: './lite/index.ts',
diff --git a/packages/firestore/rollup.shared.js b/packages/firestore/rollup.shared.js
index 92ec0e2ec9c..44253d24d38 100644
--- a/packages/firestore/rollup.shared.js
+++ b/packages/firestore/rollup.shared.js
@@ -46,7 +46,7 @@ const pkg = require('./package.json');
 // for calls to `enablePersistence()` or `clearPersistence()`.
 //
 // We use two different rollup pipelines to take advantage of tree shaking,
-// as Rollup does not support tree shaking for Typescript classes transpiled
+// as Rollup does not support tree shaking for TypeScript classes transpiled
 // down to ES5 (see https://bit.ly/340P23U). The build pipeline in this file
 // produces tree-shaken ES2017 builds that are consumed by the ES5 builds in
 // `rollup.config.es.js`.
diff --git a/packages/firestore/scripts/build-bundle.ts b/packages/firestore/scripts/build-bundle.ts
index f579c622310..e20106f5e25 100644
--- a/packages/firestore/scripts/build-bundle.ts
+++ b/packages/firestore/scripts/build-bundle.ts
@@ -38,7 +38,7 @@ const argv = yargs.options({
 }).parseSync();
 
 /**
- * Builds an ESM bundle for the Typescript file at `index` and writes it the
+ * Builds an ESM bundle for the TypeScript file at `index` and writes it the
  * file located at `output`.
  *
  * This is used in the `gendeps` build and does not minify or mangle property
diff --git a/packages/firestore/scripts/rename-internals.ts b/packages/firestore/scripts/rename-internals.ts
index 19d120911d3..dfe691e1913 100644
--- a/packages/firestore/scripts/rename-internals.ts
+++ b/packages/firestore/scripts/rename-internals.ts
@@ -65,7 +65,7 @@ export interface SDKMinifierOptions {
   publicIdentifiers: Set<string>;
   /**
    * A prefix to append to all identifiers that are not referencing the Public
-   * API. Defauls to '_'.
+   * API. Defaults to '_'.
    */
   prefix?: string;
 }
diff --git a/packages/firestore/src/api/aggregate.ts b/packages/firestore/src/api/aggregate.ts
index 5269a74429a..f0e2c1e1dc0 100644
--- a/packages/firestore/src/api/aggregate.ts
+++ b/packages/firestore/src/api/aggregate.ts
@@ -140,7 +140,7 @@ export function getAggregateFromServer<
 }
 
 /**
- * Converts the core aggregration result to an `AggregateQuerySnapshot`
+ * Converts the core aggregation result to an `AggregateQuerySnapshot`
  * that can be returned to the consumer.
  * @param query
  * @param aggregateResult Core aggregation result
diff --git a/packages/firestore/src/api/cache_config.ts b/packages/firestore/src/api/cache_config.ts
index 9d50568da83..dee2e73375d 100644
--- a/packages/firestore/src/api/cache_config.ts
+++ b/packages/firestore/src/api/cache_config.ts
@@ -125,7 +125,7 @@ class PersistentLocalCacheImpl implements PersistentLocalCache {
 export type FirestoreLocalCache = MemoryLocalCache | PersistentLocalCache;
 
 /**
- * Union type from all support gabage collectors for memory local cache.
+ * Union type from all support garbage collectors for memory local cache.
  */
 export type MemoryGarbageCollector =
   | MemoryEagerGarbageCollector
@@ -283,7 +283,7 @@ export function persistentLocalCache(
 }
 
 /**
- * A tab manager supportting only one tab, no synchronization will be
+ * A tab manager supporting only one tab, no synchronization will be
  * performed across tabs.
  */
 export type PersistentSingleTabManager = {
diff --git a/packages/firestore/src/api/transaction.ts b/packages/firestore/src/api/transaction.ts
index a1deab9e295..955866f19b4 100644
--- a/packages/firestore/src/api/transaction.ts
+++ b/packages/firestore/src/api/transaction.ts
@@ -18,7 +18,7 @@
 import { firestoreClientTransaction } from '../core/firestore_client';
 import { Transaction as InternalTransaction } from '../core/transaction';
 import {
-  TransactionOptions as TranasactionOptionsInternal,
+  TransactionOptions as TransactionOptionsInternal,
   DEFAULT_TRANSACTION_OPTIONS,
   validateTransactionOptions
 } from '../core/transaction_options';
@@ -106,7 +106,7 @@ export function runTransaction<T>(
   options?: TransactionOptions
 ): Promise<T> {
   firestore = cast(firestore, Firestore);
-  const optionsWithDefaults: TranasactionOptionsInternal = {
+  const optionsWithDefaults: TransactionOptionsInternal = {
     ...DEFAULT_TRANSACTION_OPTIONS,
     ...options
   };
diff --git a/packages/firestore/src/lite-api/reference.ts b/packages/firestore/src/lite-api/reference.ts
index 89836065c99..1d917358695 100644
--- a/packages/firestore/src/lite-api/reference.ts
+++ b/packages/firestore/src/lite-api/reference.ts
@@ -51,7 +51,7 @@ export interface DocumentData {
 }
 
 /**
- * Similar to Typescript's `Partial<T>`, but allows nested fields to be
+ * Similar to TypeScript's `Partial<T>`, but allows nested fields to be
  * omitted and FieldValues to be passed in as property values.
  */
 export type PartialWithFieldValue<T> =
@@ -520,7 +520,7 @@ export function doc(
  *
  * @param reference - A reference to a collection.
  * @param path - A slash-separated path to a document. Has to be omitted to use
- * auto-genrated IDs.
+ * auto-generated IDs.
  * @param pathSegments - Additional path segments that will be applied relative
  * to the first argument.
  * @throws If the final path has an odd number of segments and does not point to
diff --git a/packages/firestore/src/lite-api/snapshot.ts b/packages/firestore/src/lite-api/snapshot.ts
index af3e343f916..3024e2e9db0 100644
--- a/packages/firestore/src/lite-api/snapshot.ts
+++ b/packages/firestore/src/lite-api/snapshot.ts
@@ -229,7 +229,7 @@ export interface FirestoreDataConverter<
 > {
   /**
    * Called by the Firestore SDK to convert a custom model object of type
-   * `AppModelType` into a plain Javascript object (suitable for writing
+   * `AppModelType` into a plain JavaScript object (suitable for writing
    * directly to the Firestore database) of type `DbModelType`. Used with
    * {@link @firebase/firestore/lite#(setDoc:1)},
    * {@link @firebase/firestore/lite#(WriteBatch.set:1)} and
@@ -244,7 +244,7 @@ export interface FirestoreDataConverter<
 
   /**
    * Called by the Firestore SDK to convert a custom model object of type
-   * `AppModelType` into a plain Javascript object (suitable for writing
+   * `AppModelType` into a plain JavaScript object (suitable for writing
    * directly to the Firestore database) of type `DbModelType`. Used with
    * {@link @firebase/firestore/lite#(setDoc:1)},
    * {@link @firebase/firestore/lite#(WriteBatch.set:1)} and
diff --git a/packages/firestore/src/lite-api/timestamp.ts b/packages/firestore/src/lite-api/timestamp.ts
index f0b3104891e..e3d945aaf30 100644
--- a/packages/firestore/src/lite-api/timestamp.ts
+++ b/packages/firestore/src/lite-api/timestamp.ts
@@ -187,10 +187,10 @@ export class Timestamp {
     // This method returns a string of the form <seconds>.<nanoseconds> where
     // <seconds> is translated to have a non-negative value and both <seconds>
     // and <nanoseconds> are left-padded with zeroes to be a consistent length.
-    // Strings with this format then have a lexiographical ordering that matches
+    // Strings with this format then have a lexicographical ordering that matches
     // the expected ordering. The <seconds> translation is done to avoid having
     // a leading negative sign (i.e. a leading '-' character) in its string
-    // representation, which would affect its lexiographical ordering.
+    // representation, which would affect its lexicographical ordering.
     const adjustedSeconds = this.seconds - MIN_SECONDS;
     // Note: Up to 12 decimal digits are required to represent all valid
     // 'seconds' values.
diff --git a/packages/firestore/src/lite-api/transaction.ts b/packages/firestore/src/lite-api/transaction.ts
index 40bb70460e8..10a07ef252c 100644
--- a/packages/firestore/src/lite-api/transaction.ts
+++ b/packages/firestore/src/lite-api/transaction.ts
@@ -20,7 +20,7 @@ import { getModularInstance } from '@firebase/util';
 import { Transaction as InternalTransaction } from '../core/transaction';
 import {
   DEFAULT_TRANSACTION_OPTIONS,
-  TransactionOptions as TranasactionOptionsInternal,
+  TransactionOptions as TransactionOptionsInternal,
   validateTransactionOptions
 } from '../core/transaction_options';
 import { TransactionRunner } from '../core/transaction_runner';
@@ -290,7 +290,7 @@ export function runTransaction<T>(
 ): Promise<T> {
   firestore = cast(firestore, Firestore);
   const datastore = getDatastore(firestore);
-  const optionsWithDefaults: TranasactionOptionsInternal = {
+  const optionsWithDefaults: TransactionOptionsInternal = {
     ...DEFAULT_TRANSACTION_OPTIONS,
     ...options
   };
diff --git a/packages/firestore/src/local/index_backfiller.ts b/packages/firestore/src/local/index_backfiller.ts
index 1b3b16e288f..abb2260f89e 100644
--- a/packages/firestore/src/local/index_backfiller.ts
+++ b/packages/firestore/src/local/index_backfiller.ts
@@ -130,7 +130,7 @@ export class IndexBackfiller {
 
   /** Writes index entries until the cap is reached. Returns the number of documents processed. */
   private writeIndexEntries(
-    transation: PersistenceTransaction,
+    transaction: PersistenceTransaction,
     maxDocumentsToProcess: number
   ): PersistencePromise<number> {
     const processedCollectionGroups = new Set<string>();
@@ -140,7 +140,7 @@ export class IndexBackfiller {
       () => continueLoop === true && documentsRemaining > 0,
       () => {
         return this.localStore.indexManager
-          .getNextCollectionGroupToUpdate(transation)
+          .getNextCollectionGroupToUpdate(transaction)
           .next((collectionGroup: string | null) => {
             if (
               collectionGroup === null ||
@@ -150,7 +150,7 @@ export class IndexBackfiller {
             } else {
               logDebug(LOG_TAG, `Processing collection: ${collectionGroup}`);
               return this.writeEntriesForCollectionGroup(
-                transation,
+                transaction,
                 collectionGroup,
                 documentsRemaining
               ).next(documentsProcessed => {
diff --git a/packages/firestore/src/local/indexeddb_schema.ts b/packages/firestore/src/local/indexeddb_schema.ts
index b832f29a035..2ec12b05c44 100644
--- a/packages/firestore/src/local/indexeddb_schema.ts
+++ b/packages/firestore/src/local/indexeddb_schema.ts
@@ -203,7 +203,7 @@ export interface DbRemoteDocument {
   /** The path to the document's collection (excluding). */
   prefixPath: string[];
 
-  /** The collection ID the document is direclty nested under. */
+  /** The collection ID the document is directly nested under. */
   collectionGroup: string;
 
   /** The document ID. */
diff --git a/packages/firestore/src/local/memory_mutation_queue.ts b/packages/firestore/src/local/memory_mutation_queue.ts
index 91f51d8c5d6..e3902cc96fc 100644
--- a/packages/firestore/src/local/memory_mutation_queue.ts
+++ b/packages/firestore/src/local/memory_mutation_queue.ts
@@ -311,7 +311,7 @@ export class MemoryMutationQueue implements MutationQueue {
    *
    * @returns The computed index of the batch with the given batchId, based on
    * the state of the queue. Note this index can be negative if the requested
-   * batchId has already been remvoed from the queue or past the end of the
+   * batchId has already been removed from the queue or past the end of the
    * queue if the batchId is larger than the last added batch.
    */
   private indexOfBatchId(batchId: BatchId): number {
@@ -330,7 +330,7 @@ export class MemoryMutationQueue implements MutationQueue {
 
   /**
    * A version of lookupMutationBatch that doesn't return a promise, this makes
-   * other functions that uses this code easier to read and more efficent.
+   * other functions that uses this code easier to read and more efficient.
    */
   private findMutationBatch(batchId: BatchId): MutationBatch | null {
     const index = this.indexOfBatchId(batchId);
diff --git a/packages/firestore/src/local/memory_remote_document_cache.ts b/packages/firestore/src/local/memory_remote_document_cache.ts
index 1f598ba6cf9..2b145acdf9d 100644
--- a/packages/firestore/src/local/memory_remote_document_cache.ts
+++ b/packages/firestore/src/local/memory_remote_document_cache.ts
@@ -205,7 +205,7 @@ class MemoryRemoteDocumentCacheImpl implements MemoryRemoteDocumentCache {
     transaction: PersistenceTransaction,
     collectionGroup: string,
     offset: IndexOffset,
-    limti: number
+    limit: number
   ): PersistencePromise<MutableDocumentMap> {
     // This method should only be called from the IndexBackfiller if persistence
     // is enabled.
diff --git a/packages/firestore/src/local/simple_db.ts b/packages/firestore/src/local/simple_db.ts
index e79df248a0f..8665136a9f5 100644
--- a/packages/firestore/src/local/simple_db.ts
+++ b/packages/firestore/src/local/simple_db.ts
@@ -200,7 +200,7 @@ export class SimpleDb {
     const iOSVersion = SimpleDb.getIOSVersion(ua);
     const isUnsupportedIOS = 0 < iOSVersion && iOSVersion < 10;
 
-    // Android browser: Disable for userse running version < 4.5.
+    // Android browser: Disable for users running version < 4.5.
     const androidVersion = getAndroidVersion(ua);
     const isUnsupportedAndroid = 0 < androidVersion && androidVersion < 4.5;
 
@@ -531,7 +531,7 @@ export interface IterateOptions {
   /** Index to iterate over (else primary keys will be iterated) */
   index?: string;
 
-  /** IndxedDB Range to iterate over (else entire store will be iterated) */
+  /** IndexedDB Range to iterate over (else entire store will be iterated) */
   range?: IDBKeyRange;
 
   /** If true, values aren't read while iterating. */
diff --git a/packages/firestore/src/model/document.ts b/packages/firestore/src/model/document.ts
index 59cd82fcf3a..830983aec43 100644
--- a/packages/firestore/src/model/document.ts
+++ b/packages/firestore/src/model/document.ts
@@ -41,7 +41,7 @@ const enum DocumentType {
    * Represents a document in Firestore with a key, version, data and whether
    * the data has local mutations applied to it.
    *
-   * Found documents can be sycned or have or committed mutations applied.
+   * Found documents can be synced or have or committed mutations applied.
    */
   FOUND_DOCUMENT,
   /**
diff --git a/packages/firestore/src/model/path.ts b/packages/firestore/src/model/path.ts
index 4a4095ccfb1..3b68a67c68f 100644
--- a/packages/firestore/src/model/path.ts
+++ b/packages/firestore/src/model/path.ts
@@ -242,7 +242,7 @@ export class ResourcePath extends BasePath<ResourcePath> {
           `Invalid segment (${path}). Paths must not contain // in them.`
         );
       }
-      // Strip leading and traling slashed.
+      // Strip leading and trailing slashed.
       segments.push(...path.split('/').filter(segment => segment.length > 0));
     }
 
diff --git a/packages/firestore/src/protos/google/firestore/v1/firestore.proto b/packages/firestore/src/protos/google/firestore/v1/firestore.proto
index 63b497026bc..a8fc0d54b51 100644
--- a/packages/firestore/src/protos/google/firestore/v1/firestore.proto
+++ b/packages/firestore/src/protos/google/firestore/v1/firestore.proto
@@ -426,7 +426,7 @@ message BatchGetDocumentsResponse {
   bytes transaction = 3;
 
   // The time at which the document was read.
-  // This may be monotically increasing, in this case the previous documents in
+  // This may be monotonically increasing, in this case the previous documents in
   // the result stream are guaranteed not to have changed between their
   // read_time and this one.
   google.protobuf.Timestamp read_time = 4;
diff --git a/packages/firestore/src/remote/rpc_error.ts b/packages/firestore/src/remote/rpc_error.ts
index cbacb6c59ca..479ceea36c9 100644
--- a/packages/firestore/src/remote/rpc_error.ts
+++ b/packages/firestore/src/remote/rpc_error.ts
@@ -74,7 +74,7 @@ export function isPermanentError(code: Code): boolean {
     case Code.ALREADY_EXISTS:
     case Code.PERMISSION_DENIED:
     case Code.FAILED_PRECONDITION:
-    // Aborted might be retried in some scenarios, but that is dependant on
+    // Aborted might be retried in some scenarios, but that is dependent on
     // the context and should handled individually by the calling code.
     // See https://cloud.google.com/apis/design/errors.
     case Code.ABORTED:
diff --git a/packages/firestore/src/util/array.ts b/packages/firestore/src/util/array.ts
index f09f67da33b..c5ae37b71df 100644
--- a/packages/firestore/src/util/array.ts
+++ b/packages/firestore/src/util/array.ts
@@ -28,7 +28,7 @@ export function includes<T>(array: T[], value: T): boolean {
 }
 
 /**
- * Returns true iff the array contains any value mathching the predicate
+ * Returns true iff the array contains any value matching the predicate
  */
 export function some<T>(array: T[], predicate: (t: T) => boolean): boolean {
   for (let i = 0; i < array.length; i++) {
diff --git a/packages/firestore/src/util/async_queue.ts b/packages/firestore/src/util/async_queue.ts
index c430320a4c4..09171a9f038 100644
--- a/packages/firestore/src/util/async_queue.ts
+++ b/packages/firestore/src/util/async_queue.ts
@@ -236,7 +236,7 @@ export interface AsyncQueue {
    * `enqueueEvenWhileRestricted()`.
    *
    * @param purgeExistingTasks Whether already enqueued tasked should be
-   * rejected (unless enqueued wih `enqueueEvenWhileRestricted()`). Defaults
+   * rejected (unless enqueued with `enqueueEvenWhileRestricted()`). Defaults
    * to false.
    */
   enterRestrictedMode(purgeExistingTasks?: boolean): void;
diff --git a/packages/firestore/src/util/async_queue_impl.ts b/packages/firestore/src/util/async_queue_impl.ts
index 13bd7c79233..abb910cdfb7 100644
--- a/packages/firestore/src/util/async_queue_impl.ts
+++ b/packages/firestore/src/util/async_queue_impl.ts
@@ -216,7 +216,7 @@ export class AsyncQueueImpl implements AsyncQueue {
       `Attempted to schedule an operation with a negative delay of ${delayMs}`
     );
 
-    // Fast-forward delays for timerIds that have been overriden.
+    // Fast-forward delays for timerIds that have been overridden.
     if (this.timerIdsToSkip.indexOf(timerId) > -1) {
       delayMs = 0;
     }
diff --git a/packages/firestore/test/integration/api/aggregation.test.ts b/packages/firestore/test/integration/api/aggregation.test.ts
index 1ae2b67ce57..ba44dddf514 100644
--- a/packages/firestore/test/integration/api/aggregation.test.ts
+++ b/packages/firestore/test/integration/api/aggregation.test.ts
@@ -189,7 +189,7 @@ apiDescribe('Aggregation queries', persistence => {
     });
   });
 
-  it('can alias aggrregations using getAggregationFromServer', () => {
+  it('can alias aggregations using getAggregationFromServer', () => {
     const testDocs = {
       a: { author: 'authorA', title: 'titleA' },
       b: { author: 'authorB', title: 'titleB' }
@@ -239,10 +239,10 @@ apiDescribe('Aggregation queries', persistence => {
     };
     return withTestCollection(persistence, testDocs, async coll => {
       const snapshot = await getAggregateFromServer(coll, {
-        'with\\backshash\\es': count()
+        'with\\backslash\\es': count()
       });
 
-      expect(snapshot.data()['with\\backshash\\es']).to.equal(2);
+      expect(snapshot.data()['with\\backslash\\es']).to.equal(2);
     });
   });
 
diff --git a/packages/firestore/test/integration/api/bundle.test.ts b/packages/firestore/test/integration/api/bundle.test.ts
index f06a8b4c7b8..467026d3756 100644
--- a/packages/firestore/test/integration/api/bundle.test.ts
+++ b/packages/firestore/test/integration/api/bundle.test.ts
@@ -57,7 +57,7 @@ function verifyInProgress(
   expect(p.documentsLoaded).to.equal(expectedDocuments);
 }
 
-// This template is generated from bundleWithTestDocsAndQueries in '../util/internal_helpsers.ts',
+// This template is generated from bundleWithTestDocsAndQueries in '../util/internal_helpers.ts',
 // and manually copied here.
 const BUNDLE_TEMPLATE = [
   '{"metadata":{"id":"test-bundle","createTime":{"seconds":1001,"nanos":9999},"version":1,"totalDocuments":2,"totalBytes":1503}}',
diff --git a/packages/firestore/test/integration/api/get_options.test.ts b/packages/firestore/test/integration/api/get_options.test.ts
index 9eec596861f..dcb4a492864 100644
--- a/packages/firestore/test/integration/api/get_options.test.ts
+++ b/packages/firestore/test/integration/api/get_options.test.ts
@@ -269,7 +269,7 @@ apiDescribe('GetOptions', persistence => {
       // force local cache of these
       return (
         getDocs(colRef)
-          // now go offine. Note that if persistence is disabled, this will cause
+          // now go offline. Note that if persistence is disabled, this will cause
           // the initialDocs to be garbage collected.
           .then(() => disableNetwork(db))
           .then(() => getDocsFromServer(colRef))
@@ -336,7 +336,7 @@ apiDescribe('GetOptions', persistence => {
       onSnapshot(colRef, () => {});
       return (
         getDocs(colRef)
-          // now go offine. Note that if persistence is disabled, this will cause
+          // now go offline. Note that if persistence is disabled, this will cause
           // the initialDocs to be garbage collected.
           .then(() => disableNetwork(db))
           .then(() => {
@@ -393,7 +393,7 @@ apiDescribe('GetOptions', persistence => {
     });
   });
 
-  it('get non existing doc while online with default get options', () => {
+  it('get nonexistent doc while online with default get options', () => {
     return withTestDocAndInitialData(persistence, null, docRef => {
       return getDoc(docRef).then(doc => {
         expect(doc.exists()).to.be.false;
@@ -403,7 +403,7 @@ apiDescribe('GetOptions', persistence => {
     });
   });
 
-  it('get non existing collection while online with default get options', () => {
+  it('get nonexistent collection while online with default get options', () => {
     return withTestCollection(persistence, {}, colRef => {
       return getDocs(colRef).then(qrySnap => {
         //expect(qrySnap.count).to.equal(0);
@@ -415,7 +415,7 @@ apiDescribe('GetOptions', persistence => {
     });
   });
 
-  it('get non existing doc while offline with default get options', () => {
+  it('get nonexistent doc while offline with default get options', () => {
     return withTestDocAndInitialData(persistence, null, (docRef, db) => {
       return (
         disableNetwork(db)
@@ -447,7 +447,7 @@ apiDescribe('GetOptions', persistence => {
     });
   });
 
-  it('get non existing collection while offline with default get options', () => {
+  it('get nonexistent collection while offline with default get options', () => {
     return withTestCollection(persistence, {}, (colRef, db) => {
       return disableNetwork(db)
         .then(() => getDocs(colRef))
@@ -460,7 +460,7 @@ apiDescribe('GetOptions', persistence => {
     });
   });
 
-  it('get non existing doc while online with source=cache', () => {
+  it('get nonexistent doc while online with source=cache', () => {
     return withTestDocAndInitialData(persistence, null, docRef => {
       // Attempt to get doc.  This will fail since there's nothing in cache.
       return getDocFromCache(docRef).then(
@@ -470,7 +470,7 @@ apiDescribe('GetOptions', persistence => {
     });
   });
 
-  it('get non existing collection while online with source=cache', () => {
+  it('get nonexistent collection while online with source=cache', () => {
     return withTestCollection(persistence, {}, colRef => {
       return getDocsFromCache(colRef).then(qrySnap => {
         expect(qrySnap.empty).to.be.true;
@@ -481,7 +481,7 @@ apiDescribe('GetOptions', persistence => {
     });
   });
 
-  it('get non existing doc while offline with source=cache', () => {
+  it('get nonexistent doc while offline with source=cache', () => {
     return withTestDocAndInitialData(persistence, null, (docRef, db) => {
       return (
         disableNetwork(db)
@@ -519,7 +519,7 @@ apiDescribe('GetOptions', persistence => {
     }
   );
 
-  it('get non existing collection while offline with source=cache', () => {
+  it('get nonexistent collection while offline with source=cache', () => {
     return withTestCollection(persistence, {}, (colRef, db) => {
       return disableNetwork(db)
         .then(() => getDocsFromCache(colRef))
@@ -532,7 +532,7 @@ apiDescribe('GetOptions', persistence => {
     });
   });
 
-  it('get non existing doc while online with source=server', () => {
+  it('get nonexistent doc while online with source=server', () => {
     return withTestDocAndInitialData(persistence, null, docRef => {
       return getDocFromServer(docRef).then(doc => {
         expect(doc.exists()).to.be.false;
@@ -542,7 +542,7 @@ apiDescribe('GetOptions', persistence => {
     });
   });
 
-  it('get non existing collection while online with source=server', () => {
+  it('get nonexistent collection while online with source=server', () => {
     return withTestCollection(persistence, {}, (colRef, db) => {
       return getDocsFromServer(colRef).then(qrySnap => {
         expect(qrySnap.empty).to.be.true;
@@ -553,7 +553,7 @@ apiDescribe('GetOptions', persistence => {
     });
   });
 
-  it('get non existing doc while offline with source=server', () => {
+  it('get nonexistent doc while offline with source=server', () => {
     return withTestDocAndInitialData(persistence, null, (docRef, db) => {
       return (
         disableNetwork(db)
@@ -567,7 +567,7 @@ apiDescribe('GetOptions', persistence => {
     });
   });
 
-  it('get non existing collection while offline with source=server', () => {
+  it('get nonexistent collection while offline with source=server', () => {
     return withTestCollection(persistence, {}, (colRef, db) => {
       return disableNetwork(db)
         .then(() => getDocsFromServer(colRef))
diff --git a/packages/firestore/test/integration/api/numeric_transforms.test.ts b/packages/firestore/test/integration/api/numeric_transforms.test.ts
index dadeff1c5b3..1f3a65ddfd8 100644
--- a/packages/firestore/test/integration/api/numeric_transforms.test.ts
+++ b/packages/firestore/test/integration/api/numeric_transforms.test.ts
@@ -103,7 +103,7 @@ apiDescribe('Numeric Transforms:', persistence => {
   });
 
   // TODO(b/295872012): This test is skipped due to a timeout test flakiness
-  // We should investigate if this is an acutal bug.
+  // We should investigate if this is an actual bug.
   // eslint-disable-next-line no-restricted-properties
   it.skip('increment existing integer with integer', async () => {
     await withTestSetup(async () => {
@@ -163,7 +163,7 @@ apiDescribe('Numeric Transforms:', persistence => {
 
   // TODO(b/295872012): This test is skipped due to test flakiness:
   // AssertionError: expected 0.122 to be close to 0.111 +/- 0.000001
-  // We should investigate the root cause, it might be an acutal bug.
+  // We should investigate the root cause, it might be an actual bug.
   // eslint-disable-next-line no-restricted-properties
   it.skip('multiple double increments', async () => {
     await withTestSetup(async () => {
diff --git a/packages/firestore/test/integration/api/query.test.ts b/packages/firestore/test/integration/api/query.test.ts
index 7bb8d70c193..c7681fb56c9 100644
--- a/packages/firestore/test/integration/api/query.test.ts
+++ b/packages/firestore/test/integration/api/query.test.ts
@@ -446,7 +446,7 @@ apiDescribe('Queries', persistence => {
 
   // TODO(b/295872012): This test is skipped due to the flakiness around the
   // checks of hasPendingWrites.
-  // We should investigate if this is an acutal bug.
+  // We should investigate if this is an actual bug.
   // eslint-disable-next-line no-restricted-properties
   it.skip('can listen for the same query with different options', () => {
     const testDocs = { a: { v: 'a' }, b: { v: 'b' } };
diff --git a/packages/firestore/test/lite/integration.test.ts b/packages/firestore/test/lite/integration.test.ts
index 43a47c4e65c..7e88f810265 100644
--- a/packages/firestore/test/lite/integration.test.ts
+++ b/packages/firestore/test/lite/integration.test.ts
@@ -1719,7 +1719,7 @@ describe('withConverter() support', () => {
 
         // These tests exist to establish which object types are allowed to be
         // passed in by default when `T = DocumentData`. Some objects extend
-        // the Javascript `{}`, which is why they're allowed whereas others
+        // the JavaScript `{}`, which is why they're allowed whereas others
         // throw an error.
         return withTestDoc(async doc => {
           // @ts-expect-error
diff --git a/packages/firestore/test/unit/lite-api/types.test.ts b/packages/firestore/test/unit/lite-api/types.test.ts
index 105819ed4e4..5326a288be7 100644
--- a/packages/firestore/test/unit/lite-api/types.test.ts
+++ b/packages/firestore/test/unit/lite-api/types.test.ts
@@ -471,7 +471,7 @@ describe('UpdateData - v9', () => {
 
     describe('given nested objects with index properties', () => {
       it('supports object replacement at each layer (with partial)', () => {
-        // This unexpectidly fails in v9 when the object has index signature nested
+        // This unexpectedly fails in v9 when the object has index signature nested
         // two layers deep (e.g. layer.indexed.[name]).
         const _: UpdateData<MyV10ServerType> = {
           indexed: {
diff --git a/packages/firestore/test/unit/local/bundle_cache.test.ts b/packages/firestore/test/unit/local/bundle_cache.test.ts
index 44a06114cb4..3d625ddc137 100644
--- a/packages/firestore/test/unit/local/bundle_cache.test.ts
+++ b/packages/firestore/test/unit/local/bundle_cache.test.ts
@@ -211,7 +211,7 @@ function genericBundleCacheTests(cacheFn: () => TestBundleCache): void {
       LimitType.Last
     );
     // Simulating bundle building for limit-to-last queries from the server
-    // SDKs: they save the equivelent limit-to-first queries with a limitType
+    // SDKs: they save the equivalent limit-to-first queries with a limitType
     // value 'LAST'. Client SDKs should apply a withLimitToLast when they see
     // limitType 'LAST' from bundles.
     const limitQuery = queryWithLimit(query1, 3, LimitType.First);
diff --git a/packages/firestore/test/unit/local/indexeddb_persistence.test.ts b/packages/firestore/test/unit/local/indexeddb_persistence.test.ts
index 991b149cfc7..382ce2b0955 100644
--- a/packages/firestore/test/unit/local/indexeddb_persistence.test.ts
+++ b/packages/firestore/test/unit/local/indexeddb_persistence.test.ts
@@ -542,7 +542,7 @@ describe('IndexedDbSchema: createOrUpgradeDb', () => {
             DbMutationQueueKey,
             DbMutationQueue
           >(DbMutationQueueStore);
-          // Manually populate the mutation queue and create all indicies.
+          // Manually populate the mutation queue and create all indices.
           return PersistencePromise.forEach(
             testMutations,
             (testMutation: DbMutationBatch) => {
diff --git a/packages/firestore/test/unit/model/target_index_matcher.test.ts b/packages/firestore/test/unit/model/target_index_matcher.test.ts
index d35b25f82ef..6bede19f5cd 100644
--- a/packages/firestore/test/unit/model/target_index_matcher.test.ts
+++ b/packages/firestore/test/unit/model/target_index_matcher.test.ts
@@ -447,7 +447,7 @@ describe('Target Bounds', () => {
     validateServesTarget(q, 'a', IndexKind.ASCENDING, 'b', IndexKind.ASCENDING);
   });
 
-  it('with mutiple filters', () => {
+  it('with multiple filters', () => {
     const queriesMultipleFilters = queryWithAddedFilter(
       queryWithAddedFilter(query('collId'), filter('a', '==', 'a')),
       filter('b', '>', 'b')
diff --git a/packages/firestore/test/unit/remote/bloom_filter.test.ts b/packages/firestore/test/unit/remote/bloom_filter.test.ts
index eae3e5853ac..c439f668bf8 100644
--- a/packages/firestore/test/unit/remote/bloom_filter.test.ts
+++ b/packages/firestore/test/unit/remote/bloom_filter.test.ts
@@ -186,13 +186,13 @@ describe('BloomFilter', () => {
         TEST_DATA.count5000Rate1TestResult
       );
     });
-    it('mightContain result for 5000 documenta with 0.01 false positive rate', () => {
+    it('mightContain result for 5000 documents with 0.01 false positive rate', () => {
       testBloomFilterAgainstExpectedResult(
         TEST_DATA.count5000Rate01TestData,
         TEST_DATA.count5000Rate01TestResult
       );
     });
-    it('mightContain result for 5000 documenta with 0.0001 false positive rate', () => {
+    it('mightContain result for 5000 documents with 0.0001 false positive rate', () => {
       testBloomFilterAgainstExpectedResult(
         TEST_DATA.count5000Rate0001TestData,
         TEST_DATA.count5000Rate0001TestResult
diff --git a/packages/firestore/test/unit/remote/serializer.helper.ts b/packages/firestore/test/unit/remote/serializer.helper.ts
index afe85796965..969bbe7eb5a 100644
--- a/packages/firestore/test/unit/remote/serializer.helper.ts
+++ b/packages/firestore/test/unit/remote/serializer.helper.ts
@@ -816,7 +816,7 @@ export function serializerTest(
       expect(fromDocument(s, serialized, undefined).isEqual(d)).to.equal(true);
     });
 
-    describe('to/from UnaryOrieldFilter', () => {
+    describe('to/from UnaryOrFieldFilter', () => {
       addEqualityMatcher({ equalsFn: filterEquals, forType: FieldFilter });
 
       it('makes dotted-property names', () => {
diff --git a/packages/functions/CHANGELOG.md b/packages/functions/CHANGELOG.md
index bb2ea30939c..07f6eea448f 100644
--- a/packages/functions/CHANGELOG.md
+++ b/packages/functions/CHANGELOG.md
@@ -376,7 +376,7 @@
 
 ### Patch Changes
 
-- [`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3) [#4595](https://github.com/firebase/firebase-js-sdk/pull/4595) - Component facotry now takes an options object. And added `Provider.initialize()` that can be used to pass an options object to the component factory.
+- [`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3) [#4595](https://github.com/firebase/firebase-js-sdk/pull/4595) - Component factory now takes an options object. And added `Provider.initialize()` that can be used to pass an options object to the component factory.
 
 - Updated dependencies [[`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3)]:
   - @firebase/component@0.3.0
diff --git a/packages/functions/karma.conf.js b/packages/functions/karma.conf.js
index 83c7f21864b..3dc9b7d572c 100644
--- a/packages/functions/karma.conf.js
+++ b/packages/functions/karma.conf.js
@@ -28,7 +28,7 @@ module.exports = function (config) {
     // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
     frameworks: ['mocha'],
     // undici is a fetch polyfill that test helpers call for Node tests, and browser tests should
-    // ingore its import to avoid compilation errors in those test helpers.
+    // ignore its import to avoid compilation errors in those test helpers.
     webpack: {
       ...webpackBase,
       resolve: {
diff --git a/packages/installations-types/index.d.ts b/packages/installations-types/index.d.ts
index 80cfccfc74b..77ab6998896 100644
--- a/packages/installations-types/index.d.ts
+++ b/packages/installations-types/index.d.ts
@@ -39,7 +39,7 @@ export interface FirebaseInstallations {
   delete(): Promise<void>;
 
   /**
-   * Sets a new callback that will get called when Installlation ID changes.
+   * Sets a new callback that will get called when Installation ID changes.
    * Returns an unsubscribe function that will remove the callback when called.
    */
   onIdChange(callback: (installationId: string) => void): () => void;
diff --git a/packages/installations/src/util/errors.ts b/packages/installations/src/util/errors.ts
index 25cc69b1ff0..1a82753c3d2 100644
--- a/packages/installations/src/util/errors.ts
+++ b/packages/installations/src/util/errors.ts
@@ -45,7 +45,7 @@ interface ErrorParams {
   };
   [ErrorCode.REQUEST_FAILED]: {
     requestName: string;
-    [index: string]: string | number; // to make Typescript 3.8 happy
+    [index: string]: string | number; // to make TypeScript 3.8 happy
   } & ServerErrorData;
 }
 
diff --git a/packages/performance-compat/src/performance.test.ts b/packages/performance-compat/src/performance.test.ts
index 7dc2ff82fcd..e117101b4af 100644
--- a/packages/performance-compat/src/performance.test.ts
+++ b/packages/performance-compat/src/performance.test.ts
@@ -38,7 +38,7 @@ describe('Performance Compat', () => {
     );
   });
 
-  it('sets instrumnetation flag on the modular package', () => {
+  it('sets instrumentation flag on the modular package', () => {
     // Default value of the flag is true.
     performanceCompat.instrumentationEnabled = false;
 
diff --git a/packages/performance-types/index.d.ts b/packages/performance-types/index.d.ts
index c295b312625..507de345a6b 100644
--- a/packages/performance-types/index.d.ts
+++ b/packages/performance-types/index.d.ts
@@ -49,7 +49,7 @@ export interface PerformanceTrace {
    * (e.g. if the duration was captured before the Performance SDK was loaded).
    *
    * @param startTime trace start time since epoch in millisec.
-   * @param duration The duraction of the trace in millisec.
+   * @param duration The duration of the trace in millisec.
    * @param options An object which can optionally hold maps of custom metrics and
    * custom attributes.
    */
diff --git a/packages/performance/src/public_types.ts b/packages/performance/src/public_types.ts
index 56b3c177697..0a90c3b9a49 100644
--- a/packages/performance/src/public_types.ts
+++ b/packages/performance/src/public_types.ts
@@ -72,7 +72,7 @@ export interface PerformanceTrace {
    * (e.g. if the duration was captured before the Performance SDK was loaded).
    *
    * @param startTime - trace start time since epoch in millisec.
-   * @param duration - The duraction of the trace in millisec.
+   * @param duration - The duration of the trace in millisec.
    * @param options - An object which can optionally hold maps of custom metrics and
    * custom attributes.
    */
diff --git a/packages/performance/src/resources/trace.ts b/packages/performance/src/resources/trace.ts
index 45bd8b2f22e..792bf1677ea 100644
--- a/packages/performance/src/resources/trace.ts
+++ b/packages/performance/src/resources/trace.ts
@@ -123,7 +123,7 @@ export class Trace implements PerformanceTrace {
    * Records a trace with predetermined values. If this method is used a trace is created and logged
    * directly. No need to use start and stop methods.
    * @param startTime Trace start time since epoch in millisec
-   * @param duration The duraction of the trace in millisec
+   * @param duration The duration of the trace in millisec
    * @param options An object which can optionally hold maps of custom metrics and custom attributes
    */
   record(
diff --git a/packages/performance/src/services/api_service.ts b/packages/performance/src/services/api_service.ts
index 4283fe3aaed..494574f650c 100644
--- a/packages/performance/src/services/api_service.ts
+++ b/packages/performance/src/services/api_service.ts
@@ -43,7 +43,7 @@ export type EntryType =
  */
 export class Api {
   private readonly performance: Performance;
-  /** PreformanceObserver constructor function. */
+  /** PerformanceObserver constructor function. */
   private readonly PerformanceObserver: typeof PerformanceObserver;
   private readonly windowLocation: Location;
   readonly onFirstInputDelay?: (fn: (fid: number) => void) => void;
diff --git a/packages/performance/src/services/iid_service.test.ts b/packages/performance/src/services/iid_service.test.ts
index 476d720bffc..587280cb6a5 100644
--- a/packages/performance/src/services/iid_service.test.ts
+++ b/packages/performance/src/services/iid_service.test.ts
@@ -26,7 +26,7 @@ import {
 import '../../test/setup';
 import { _FirebaseInstallationsInternal } from '@firebase/installations';
 
-describe('Firebase Perofmrance > iid_service', () => {
+describe('Firebase Performance > iid_service', () => {
   const IID = 'fid';
   const AUTH_TOKEN = 'authToken';
 
diff --git a/packages/performance/src/services/initialization_service.test.ts b/packages/performance/src/services/initialization_service.test.ts
index a5953755a31..4a22a66d2e1 100644
--- a/packages/performance/src/services/initialization_service.test.ts
+++ b/packages/performance/src/services/initialization_service.test.ts
@@ -27,7 +27,7 @@ import '../../test/setup';
 import { FirebaseInstallations } from '@firebase/installations-types';
 import { PerformanceController } from '../controllers/perf';
 
-describe('Firebase Perofmrance > initialization_service', () => {
+describe('Firebase Performance > initialization_service', () => {
   const IID = 'fid';
   const AUTH_TOKEN = 'authToken';
   const getId = stub();
@@ -74,7 +74,7 @@ describe('Firebase Perofmrance > initialization_service', () => {
     expect(isPerfInitialized()).to.be.true;
   });
 
-  it('returns initilization as not done before promise is resolved', async () => {
+  it('returns initialized as not done before promise is resolved', async () => {
     getId.resolves(IID);
     getToken.resolves(AUTH_TOKEN);
     // eslint-disable-next-line @typescript-eslint/no-floating-promises
diff --git a/packages/performance/src/services/oob_resources_service.test.ts b/packages/performance/src/services/oob_resources_service.test.ts
index 0c9cf1ba427..6f8ba259a94 100644
--- a/packages/performance/src/services/oob_resources_service.test.ts
+++ b/packages/performance/src/services/oob_resources_service.test.ts
@@ -195,7 +195,7 @@ describe('Firebase Performance > oob_resources_service', () => {
       getIidStub.returns(MOCK_ID);
       const api = Api.getInstance();
       const FIRST_INPUT_DELAY = 123;
-      // Underscore is to avoid compiler comlaining about variable being declared but not used.
+      // Underscore is to avoid compiler complaining about variable being declared but not used.
       type FirstInputDelayCallback = (firstInputDelay: number) => void;
       let firstInputDelayCallback: FirstInputDelayCallback = (): void => {};
       //@ts-ignore Assignment to read-only property.
diff --git a/packages/performance/src/services/oob_resources_service.ts b/packages/performance/src/services/oob_resources_service.ts
index 66891e774fe..aede0fa85c9 100644
--- a/packages/performance/src/services/oob_resources_service.ts
+++ b/packages/performance/src/services/oob_resources_service.ts
@@ -57,7 +57,7 @@ function setupOobTraces(performanceController: PerformanceController): void {
     'navigation'
   ) as PerformanceNavigationTiming[];
   const paintTimings = api.getEntriesByType('paint');
-  // If First Input Desly polyfill is added to the page, report the fid value.
+  // If First Input Delay polyfill is added to the page, report the fid value.
   // https://github.com/GoogleChromeLabs/first-input-delay
   if (api.onFirstInputDelay) {
     // If the fid call back is not called for certain time, continue without it.
diff --git a/packages/performance/src/services/perf_logger.ts b/packages/performance/src/services/perf_logger.ts
index 74373b47f82..c3b986227bc 100644
--- a/packages/performance/src/services/perf_logger.ts
+++ b/packages/performance/src/services/perf_logger.ts
@@ -85,8 +85,6 @@ interface TraceMetric {
   custom_attributes?: { [key: string]: string };
 }
 
-/* eslint-enble camelcase */
-
 let logger: (
   resource: NetworkRequest | Trace,
   resourceType: ResourceType
@@ -248,3 +246,4 @@ function getApplicationInfo(firebaseApp: FirebaseApp): ApplicationInfo {
     application_process_state: 0
   };
 }
+/* eslint-enable camelcase */
diff --git a/packages/performance/src/services/remote_config_service.test.ts b/packages/performance/src/services/remote_config_service.test.ts
index 64fd1338340..78f1b1b4462 100644
--- a/packages/performance/src/services/remote_config_service.test.ts
+++ b/packages/performance/src/services/remote_config_service.test.ts
@@ -33,7 +33,7 @@ describe('Performance Monitoring > remote_config_service', () => {
   const LOG_URL = 'https://firebaselogging.test.com';
   const TRANSPORT_KEY = 'pseudo-transport-key';
   const LOG_SOURCE = 2;
-  const NETWORK_SAMPLIG_RATE = 0.25;
+  const NETWORK_SAMPLING_RATE = 0.25;
   const TRACE_SAMPLING_RATE = 0.5;
   const GLOBAL_CLOCK_NOW = 1556524895326;
   const STRINGIFIED_CONFIG = `{"entries":{"fpr_enabled":"true",\
@@ -146,7 +146,7 @@ describe('Performance Monitoring > remote_config_service', () => {
       expect(SettingsService.getInstance().logSource).to.equal(LOG_SOURCE);
       expect(
         SettingsService.getInstance().networkRequestsSamplingRate
-      ).to.equal(NETWORK_SAMPLIG_RATE);
+      ).to.equal(NETWORK_SAMPLING_RATE);
       expect(SettingsService.getInstance().tracesSamplingRate).to.equal(
         TRACE_SAMPLING_RATE
       );
@@ -186,7 +186,7 @@ describe('Performance Monitoring > remote_config_service', () => {
       expect(SettingsService.getInstance().logSource).to.equal(LOG_SOURCE);
       expect(
         SettingsService.getInstance().networkRequestsSamplingRate
-      ).to.equal(NETWORK_SAMPLIG_RATE);
+      ).to.equal(NETWORK_SAMPLING_RATE);
       expect(SettingsService.getInstance().tracesSamplingRate).to.equal(
         TRACE_SAMPLING_RATE
       );
@@ -275,7 +275,7 @@ describe('Performance Monitoring > remote_config_service', () => {
       expect(SettingsService.getInstance().logSource).to.equal(LOG_SOURCE);
       expect(
         SettingsService.getInstance().networkRequestsSamplingRate
-      ).to.equal(NETWORK_SAMPLIG_RATE);
+      ).to.equal(NETWORK_SAMPLING_RATE);
       expect(SettingsService.getInstance().tracesSamplingRate).to.equal(
         TRACE_SAMPLING_RATE
       );
diff --git a/packages/performance/src/services/remote_config_service.ts b/packages/performance/src/services/remote_config_service.ts
index 558e995e9d6..13787e2b693 100644
--- a/packages/performance/src/services/remote_config_service.ts
+++ b/packages/performance/src/services/remote_config_service.ts
@@ -198,7 +198,7 @@ function processConfig(
     settingsServiceInstance.logEndPointUrl = DEFAULT_CONFIGS.logEndPointUrl;
   }
 
-  // Key from Remote Config has to be non-empty string, otherwsie use local value.
+  // Key from Remote Config has to be non-empty string, otherwise use local value.
   if (entries.fpr_log_transport_key) {
     settingsServiceInstance.transportKey = entries.fpr_log_transport_key;
   } else if (DEFAULT_CONFIGS.transportKey) {
diff --git a/packages/performance/src/services/transport_service.test.ts b/packages/performance/src/services/transport_service.test.ts
index ed0664fe241..c249206c33e 100644
--- a/packages/performance/src/services/transport_service.test.ts
+++ b/packages/performance/src/services/transport_service.test.ts
@@ -86,7 +86,7 @@ describe('Firebase Performance > transport_service', () => {
     expect(fetchStub).to.have.been.calledOnce;
   });
 
-  it('successful send a meesage to transport', () => {
+  it('successful send a message to transport', () => {
     const setting = SettingsService.getInstance();
     const flTransportFullUrl =
       setting.flTransportEndpointUrl + '?key=' + setting.transportKey;
diff --git a/packages/performance/src/utils/metric_utils.test.ts b/packages/performance/src/utils/metric_utils.test.ts
index fea213911f7..7394a424f29 100644
--- a/packages/performance/src/utils/metric_utils.test.ts
+++ b/packages/performance/src/utils/metric_utils.test.ts
@@ -71,7 +71,7 @@ describe('Firebase Performance > metric_utils', () => {
     });
 
     it('returns false if first paint metric name is used outside of page load traces', () => {
-      expect(isValidMetricName(FIRST_PAINT_COUNTER_NAME, 'some_randome_trace'))
+      expect(isValidMetricName(FIRST_PAINT_COUNTER_NAME, 'some_random_trace'))
         .to.be.false;
     });
 
@@ -79,7 +79,7 @@ describe('Firebase Performance > metric_utils', () => {
       expect(
         isValidMetricName(
           FIRST_CONTENTFUL_PAINT_COUNTER_NAME,
-          'some_randome_trace'
+          'some_random_trace'
         )
       ).to.be.false;
     });
diff --git a/packages/remote-config/CHANGELOG.md b/packages/remote-config/CHANGELOG.md
index 57635889e99..58f2b7a0cb2 100644
--- a/packages/remote-config/CHANGELOG.md
+++ b/packages/remote-config/CHANGELOG.md
@@ -344,7 +344,7 @@
 
 ### Patch Changes
 
-- [`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3) [#4595](https://github.com/firebase/firebase-js-sdk/pull/4595) - Component facotry now takes an options object. And added `Provider.initialize()` that can be used to pass an options object to the component factory.
+- [`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3) [#4595](https://github.com/firebase/firebase-js-sdk/pull/4595) - Component factory now takes an options object. And added `Provider.initialize()` that can be used to pass an options object to the component factory.
 
 - Updated dependencies [[`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3)]:
   - @firebase/component@0.3.0
diff --git a/packages/remote-config/test/client/rest_client.test.ts b/packages/remote-config/test/client/rest_client.test.ts
index 0ab3d73d3a7..ffdf27a1525 100644
--- a/packages/remote-config/test/client/rest_client.test.ts
+++ b/packages/remote-config/test/client/rest_client.test.ts
@@ -120,7 +120,7 @@ describe('RestClient', () => {
     });
 
     it('throws on network failure', async () => {
-      // The Fetch API throws a TypeError on network falure:
+      // The Fetch API throws a TypeError on network faliure:
       // https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Exceptions
       const originalError = new TypeError('Network request failed');
       fetchStub.returns(Promise.reject(originalError));
diff --git a/packages/rules-unit-testing/src/impl/test_environment.ts b/packages/rules-unit-testing/src/impl/test_environment.ts
index 5b32e8776f4..cb325912c29 100644
--- a/packages/rules-unit-testing/src/impl/test_environment.ts
+++ b/packages/rules-unit-testing/src/impl/test_environment.ts
@@ -76,7 +76,7 @@ export class RulesTestEnvironmentImpl implements RulesTestEnvironment {
     try {
       await callback(context);
     } finally {
-      // We eagarly clean up this context to actively prevent misuse outside of the callback, e.g.
+      // We eagerly clean up this context to actively prevent misuse outside of the callback, e.g.
       // storing the context in a variable.
       context.cleanup();
       this.contexts.delete(context);
diff --git a/packages/rules-unit-testing/src/public_types/index.ts b/packages/rules-unit-testing/src/public_types/index.ts
index 2e6a2812806..060e8b8f15b 100644
--- a/packages/rules-unit-testing/src/public_types/index.ts
+++ b/packages/rules-unit-testing/src/public_types/index.ts
@@ -25,7 +25,7 @@ import 'firebase/compat/firestore';
 import 'firebase/compat/storage';
 
 /**
- * More options for the mock user token to be used for testing, including developer-specfied custom
+ * More options for the mock user token to be used for testing, including developer-specified custom
  * claims or optional overrides for Firebase Auth token payloads.
  * @public
  */
diff --git a/packages/rules-unit-testing/src/util.ts b/packages/rules-unit-testing/src/util.ts
index 9ec9d129b4d..c96b22d8597 100644
--- a/packages/rules-unit-testing/src/util.ts
+++ b/packages/rules-unit-testing/src/util.ts
@@ -72,7 +72,7 @@ export async function withFunctionTriggersDisabled<TResult>(
   if (!hub) {
     throw new Error(
       'Please specify the Emulator Hub host and port via arguments or set the environment ' +
-        `varible ${EMULATOR_HOST_ENV_VARS.hub}!`
+        `variable ${EMULATOR_HOST_ENV_VARS.hub}!`
     );
   }
 
diff --git a/packages/storage-compat/src/reference.ts b/packages/storage-compat/src/reference.ts
index ea2af1004fd..27ef056c241 100644
--- a/packages/storage-compat/src/reference.ts
+++ b/packages/storage-compat/src/reference.ts
@@ -189,7 +189,7 @@ export class ReferenceCompat
 
   /**
    * A `Promise` that resolves with the metadata for this object. If this
-   * object doesn't exist or metadata cannot be retreived, the promise is
+   * object doesn't exist or metadata cannot be retrieved, the promise is
    * rejected.
    */
   getMetadata(): Promise<types.FullMetadata> {
diff --git a/packages/storage/CHANGELOG.md b/packages/storage/CHANGELOG.md
index b8cbf7e2fcf..5e31838a93e 100644
--- a/packages/storage/CHANGELOG.md
+++ b/packages/storage/CHANGELOG.md
@@ -333,7 +333,7 @@
 
 ### Minor Changes
 
-- [`b3caa5158`](https://github.com/firebase/firebase-js-sdk/commit/b3caa515846d2bfcf4a95dedff69f08d503cbfc2) [#5149](https://github.com/firebase/firebase-js-sdk/pull/5149) - Add NodeJS support to Cloud Storage for Firebase. This release changes the `main` field in package.json to point to a Node specific build. If you are building a bundle for borwser usage, please make sure that your bundler uses the `browser` field (the default).
+- [`b3caa5158`](https://github.com/firebase/firebase-js-sdk/commit/b3caa515846d2bfcf4a95dedff69f08d503cbfc2) [#5149](https://github.com/firebase/firebase-js-sdk/pull/5149) - Add NodeJS support to Cloud Storage for Firebase. This release changes the `main` field in package.json to point to a Node specific build. If you are building a bundle for browser usage, please make sure that your bundler uses the `browser` field (the default).
 
 ## 0.5.6
 
@@ -413,7 +413,7 @@
 
 ### Patch Changes
 
-- [`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3) [#4595](https://github.com/firebase/firebase-js-sdk/pull/4595) - Component facotry now takes an options object. And added `Provider.initialize()` that can be used to pass an options object to the component factory.
+- [`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3) [#4595](https://github.com/firebase/firebase-js-sdk/pull/4595) - Component factory now takes an options object. And added `Provider.initialize()` that can be used to pass an options object to the component factory.
 
 - Updated dependencies [[`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3)]:
   - @firebase/component@0.3.0
@@ -487,7 +487,7 @@
 
 ### Patch Changes
 
-- [`ee33ebf7`](https://github.com/firebase/firebase-js-sdk/commit/ee33ebf726b1dc31ab4817e7a1923f7b2757e17c) [#3414](https://github.com/firebase/firebase-js-sdk/pull/3414) - Error messages for backend errors now include the backend's reponse message.
+- [`ee33ebf7`](https://github.com/firebase/firebase-js-sdk/commit/ee33ebf726b1dc31ab4817e7a1923f7b2757e17c) [#3414](https://github.com/firebase/firebase-js-sdk/pull/3414) - Error messages for backend errors now include the backend's response message.
 
 ## 0.3.39
 
diff --git a/packages/storage/src/api.ts b/packages/storage/src/api.ts
index b629c5d5b59..84c77ea0c8c 100644
--- a/packages/storage/src/api.ts
+++ b/packages/storage/src/api.ts
@@ -175,7 +175,7 @@ export function uploadBytesResumable(
 
 /**
  * A `Promise` that resolves with the metadata for this object. If this
- * object doesn't exist or metadata cannot be retreived, the promise is
+ * object doesn't exist or metadata cannot be retrieved, the promise is
  * rejected.
  * @public
  * @param ref - {@link StorageReference} to get metadata from.
diff --git a/packages/storage/src/public-types.ts b/packages/storage/src/public-types.ts
index 879b7058354..718356b596a 100644
--- a/packages/storage/src/public-types.ts
+++ b/packages/storage/src/public-types.ts
@@ -222,7 +222,7 @@ export interface FullMetadata extends UploadMetadata {
   updated: string;
 
   /**
-   * Tokens to allow access to the downloatd URL.
+   * Tokens to allow access to the download URL.
    */
   downloadTokens: string[] | undefined;
 
diff --git a/packages/storage/src/reference.ts b/packages/storage/src/reference.ts
index ceb3c7dcefa..46249da8146 100644
--- a/packages/storage/src/reference.ts
+++ b/packages/storage/src/reference.ts
@@ -415,7 +415,7 @@ export function list(
 
 /**
  * A `Promise` that resolves with the metadata for this object. If this
- * object doesn't exist or metadata cannot be retreived, the promise is
+ * object doesn't exist or metadata cannot be retrieved, the promise is
  * rejected.
  * @public
  * @param ref - StorageReference to get metadata from.
diff --git a/packages/template/README.md b/packages/template/README.md
index c1ef09d850f..cae9b4819b6 100644
--- a/packages/template/README.md
+++ b/packages/template/README.md
@@ -3,7 +3,7 @@
 This package can be used as a template for anyone creating new packages in the
 Firebase JS SDK. It will give you a couple things OOTB:
 
-- **Typescript Support:** Your code should be written in TS to be consistent
+- **TypeScript Support:** Your code should be written in TS to be consistent
   with the rest of the SDK.
 - **Isomorphic Testing/Coverage:** Your tests will be run in both Node.js and
   Browser environments and coverage from both, collected.
diff --git a/packages/util/CHANGELOG.md b/packages/util/CHANGELOG.md
index 73b74e5f6d4..a5b16149801 100644
--- a/packages/util/CHANGELOG.md
+++ b/packages/util/CHANGELOG.md
@@ -150,7 +150,7 @@
 
 ### Patch Changes
 
-- [`b835b4cba`](https://github.com/firebase/firebase-js-sdk/commit/b835b4cbabc4b7b180ae38b908c49205ce31a422) [#5506](https://github.com/firebase/firebase-js-sdk/pull/5506) - areCookiesEnabled could encounter runtime errors in certain enviornments
+- [`b835b4cba`](https://github.com/firebase/firebase-js-sdk/commit/b835b4cbabc4b7b180ae38b908c49205ce31a422) [#5506](https://github.com/firebase/firebase-js-sdk/pull/5506) - areCookiesEnabled could encounter runtime errors in certain environments
 
 ## 1.3.0
 
diff --git a/packages/util/src/deferred.ts b/packages/util/src/deferred.ts
index a135b29a580..5a5dbfb9ee4 100644
--- a/packages/util/src/deferred.ts
+++ b/packages/util/src/deferred.ts
@@ -27,7 +27,7 @@ export class Deferred<R> {
   }
 
   /**
-   * Our API internals are not promiseified and cannot because our callback APIs have subtle expectations around
+   * Our API internals are not promisified and cannot because our callback APIs have subtle expectations around
    * invoking promises inline, which Promises are forbidden to do. This method accepts an optional node-style callback
    * and returns a node-style callback which will resolve or reject the Deferred's promise.
    */
diff --git a/packages/util/src/errors.ts b/packages/util/src/errors.ts
index 7d6ec022101..7946d706ea3 100644
--- a/packages/util/src/errors.ts
+++ b/packages/util/src/errors.ts
@@ -19,7 +19,7 @@
  *
  * Usage:
  *
- *   // Typescript string literals for type-safe codes
+ *   // TypeScript string literals for type-safe codes
  *   type Err =
  *     'unknown' |
  *     'object-not-found'
diff --git a/packages/util/src/json.ts b/packages/util/src/json.ts
index 4df22562452..fcc71c3e782 100644
--- a/packages/util/src/json.ts
+++ b/packages/util/src/json.ts
@@ -26,8 +26,8 @@ export function jsonEval(str: string): unknown {
 }
 
 /**
- * Returns JSON representing a javascript object.
- * @param {*} data Javascript object to be stringified.
+ * Returns JSON representing a JavaScript object.
+ * @param {*} data JavaScript object to be stringified.
  * @return {string} The JSON contents of the object.
  */
 export function stringify(data: unknown): string {
diff --git a/packages/util/src/subscribe.ts b/packages/util/src/subscribe.ts
index 6420c18cca7..be0447e6fd0 100644
--- a/packages/util/src/subscribe.ts
+++ b/packages/util/src/subscribe.ts
@@ -122,7 +122,7 @@ class ObserverProxy<T> implements Observer<T> {
   /**
    * Subscribe function that can be used to add an Observer to the fan-out list.
    *
-   * - We require that no event is sent to a subscriber sychronously to their
+   * - We require that no event is sent to a subscriber synchronously to their
    *   call to subscribe().
    */
   subscribe(
diff --git a/packages/util/src/utf8.ts b/packages/util/src/utf8.ts
index 3f17a12c2b9..cf5b9873539 100644
--- a/packages/util/src/utf8.ts
+++ b/packages/util/src/utf8.ts
@@ -23,7 +23,7 @@ import { assert } from './assert';
 
 // Note that not all Unicode characters appear as single characters in JavaScript strings.
 // fromCharCode returns the UTF-16 encoding of a character - so some Unicode characters
-// use 2 characters in Javascript.  All 4-byte UTF-8 characters begin with a first
+// use 2 characters in JavaScript.  All 4-byte UTF-8 characters begin with a first
 // character in the range 0xD800 - 0xDBFF (the first character of a so-called surrogate
 // pair).
 // See http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3
diff --git a/packages/util/test/subscribe.test.ts b/packages/util/test/subscribe.test.ts
index 02250b76123..a180b09527e 100644
--- a/packages/util/test/subscribe.test.ts
+++ b/packages/util/test/subscribe.test.ts
@@ -74,7 +74,7 @@ describe('createSubscribe', () => {
         }
       });
     });
-    // Subscription before value emitted should be recieved.
+    // Subscription before value emitted should be received.
     subscribe({
       next(_value) {
         done();
diff --git a/packages/vertexai/src/types/enums.ts b/packages/vertexai/src/types/enums.ts
index 2f3f655e8f0..fd901241250 100644
--- a/packages/vertexai/src/types/enums.ts
+++ b/packages/vertexai/src/types/enums.ts
@@ -141,7 +141,7 @@ export enum FunctionCallingMode {
   // Unspecified function calling mode. This value should not be used.
   MODE_UNSPECIFIED = 'MODE_UNSPECIFIED',
   // Default model behavior, model decides to predict either a function call
-  // or a natural language repspose.
+  // or a natural language response.
   AUTO = 'AUTO',
   // Model is constrained to always predicting a function call only.
   // If "allowed_function_names" is set, the predicted function call will be
diff --git a/repo-scripts/api-documenter/src/documenters/IConfigFile.ts b/repo-scripts/api-documenter/src/documenters/IConfigFile.ts
index fd95a719dd6..2a7bf8ab358 100644
--- a/repo-scripts/api-documenter/src/documenters/IConfigFile.ts
+++ b/repo-scripts/api-documenter/src/documenters/IConfigFile.ts
@@ -19,7 +19,7 @@
 // See LICENSE in the project root for license information.
 
 /**
- * Typescript interface describing the config schema for toc.yml file format.
+ * TypeScript interface describing the config schema for toc.yml file format.
  */
 export interface IConfigTableOfContents {
   /**
diff --git a/repo-scripts/prune-dts/prune-dts.ts b/repo-scripts/prune-dts/prune-dts.ts
index 46ffecc19ec..917517fb342 100644
--- a/repo-scripts/prune-dts/prune-dts.ts
+++ b/repo-scripts/prune-dts/prune-dts.ts
@@ -141,8 +141,8 @@ function isExported(
 /**
  * Replaces an existing constructor implementation if the constructor is marked
  * with the JSDod tag `@hideconstructor`. The replaced constructor can either
- * have `private` visibility` or `proctected`. To generate a protected
- * constructor, specify `@hideconstructor proctected`.
+ * have `private` visibility` or `protected`. To generate a protected
+ * constructor, specify `@hideconstructor protected`.
  *
  * Returns either the modified constructor or the existing constructor if no
  * modification was needed.
diff --git a/repo-scripts/prune-dts/tests/firestore.input.d.ts b/repo-scripts/prune-dts/tests/firestore.input.d.ts
index 73e938a1b17..431a39552e2 100644
--- a/repo-scripts/prune-dts/tests/firestore.input.d.ts
+++ b/repo-scripts/prune-dts/tests/firestore.input.d.ts
@@ -794,7 +794,7 @@ export declare function disableNetwork(
 
 /**
  * Gets a `DocumentReference` instance that refers to the document at the
- * specified abosulute path.
+ * specified abosolute path.
  *
  * @param firestore - A reference to the root Firestore instance.
  * @param path - A slash-separated path to a document.
@@ -818,7 +818,7 @@ export declare function doc(
  *
  * @param reference - A reference to a collection.
  * @param path - A slash-separated path to a document. Has to be omitted to use
- * auto-genrated IDs.
+ * auto-generated IDs.
  * @param pathSegments - Additional path segments that will be applied relative
  * to the first argument.
  * @throws If the final path has an odd number of segments and does not point to
@@ -1643,14 +1643,14 @@ export declare interface FirestoreDataConverter<T>
 declare interface FirestoreDataConverter_2<T> {
   /**
    * Called by the Firestore SDK to convert a custom model object of type `T`
-   * into a plain Javascript object (suitable for writing directly to the
+   * into a plain JavaScript object (suitable for writing directly to the
    * Firestore database). Used with {@link setData}, {@link WriteBatch#set}
    * and {@link Transaction#set}.
    */
   toFirestore(modelObject: T): DocumentData;
   /**
    * Called by the Firestore SDK to convert a custom model object of type `T`
-   * into a plain Javascript object (suitable for writing directly to the
+   * into a plain JavaScript object (suitable for writing directly to the
    * Firestore database). Used with {@link setData}, {@link WriteBatch#set}
    * and {@link Transaction#set} with `merge:true` or `mergeFields`.
    */
diff --git a/repo-scripts/prune-dts/tests/firestore.output.d.ts b/repo-scripts/prune-dts/tests/firestore.output.d.ts
index 5b4945c9b27..9b607108bc3 100644
--- a/repo-scripts/prune-dts/tests/firestore.output.d.ts
+++ b/repo-scripts/prune-dts/tests/firestore.output.d.ts
@@ -262,7 +262,7 @@ export declare function disableNetwork(
 ): Promise<void>;
 /**
  * Gets a `DocumentReference` instance that refers to the document at the
- * specified abosulute path.
+ * specified abosolute path.
  *
  * @param firestore - A reference to the root Firestore instance.
  * @param path - A slash-separated path to a document.
@@ -285,7 +285,7 @@ export declare function doc(
  *
  * @param reference - A reference to a collection.
  * @param path - A slash-separated path to a document. Has to be omitted to use
- * auto-genrated IDs.
+ * auto-generated IDs.
  * @param pathSegments - Additional path segments that will be applied relative
  * to the first argument.
  * @throws If the final path has an odd number of segments and does not point to
diff --git a/repo-scripts/size-analysis/README.md b/repo-scripts/size-analysis/README.md
index d29eb882ee4..6f81162b789 100644
--- a/repo-scripts/size-analysis/README.md
+++ b/repo-scripts/size-analysis/README.md
@@ -28,13 +28,13 @@ $firebase-js-sdk/repo-scripts/size-analysis  `ts-node-script cli.ts  -o <path to
 $firebase-js-sdk/repo-scripts/size-analysis  `ts-node-script cli.ts --if <path to dts file> --ib <path to bundle file> -o <path to output FILE>`
 
 
-### Use the Tool Programatically 
+### Use the Tool Programmatically 
 ### `async generateReportForModule(moduleLocation: string): Promise<Report>`
 #### This function generates size analysis report for the given module specified by the `moduleLocation` argument.
 #### `@param moduleLocation: an absolute path to location of a firebase module`
 ```
 try {
-  const moduleLocation: string = "absoulte/path/to/firebase/module";
+  const moduleLocation: string = "absolute/path/to/firebase/module";
   const report: Report = await generateReportForModule(moduleLocation);
   console.log(report);
 
diff --git a/repo-scripts/size-analysis/bundle-analysis.ts b/repo-scripts/size-analysis/bundle-analysis.ts
index 4045b2fc886..98505ab6859 100644
--- a/repo-scripts/size-analysis/bundle-analysis.ts
+++ b/repo-scripts/size-analysis/bundle-analysis.ts
@@ -102,7 +102,7 @@ export async function run({
 function loadBundleDefinitions(path: string): BundleDefinition[] {
   if (!existsSync(path)) {
     throw new Error(
-      `${path} doesn't exist. Please provide a valid path to the bundle defintion file.`
+      `${path} doesn't exist. Please provide a valid path to the bundle definition file.`
     );
   }
 
diff --git a/repo-scripts/size-analysis/package-analysis.ts b/repo-scripts/size-analysis/package-analysis.ts
index 67a973c31b1..e8d179e19fc 100644
--- a/repo-scripts/size-analysis/package-analysis.ts
+++ b/repo-scripts/size-analysis/package-analysis.ts
@@ -31,7 +31,7 @@ const projectRoot = dirname(resolve(__dirname, '../../package.json'));
 /**
  * Support Command Line Options
  * -- inputModule (optional) : can be left unspecified which results in running analysis on all exp modules.
- *            can specify one to many module names seperated by space.
+ *            can specify one to many module names separated by space.
  *            eg: --inputModule "@firebase/functions-exp" "firebase/auth-exp"
  *
  * -- inputDtsFile (optional) : adhoc support. Specify a path to dts file. Must enable -- inputBundleFile if this flag is specified.
diff --git a/repo-scripts/size-analysis/test/size-analysis.test.ts b/repo-scripts/size-analysis/test/size-analysis.test.ts
index 790211e96d2..d3d32ce1fae 100644
--- a/repo-scripts/size-analysis/test/size-analysis.test.ts
+++ b/repo-scripts/size-analysis/test/size-analysis.test.ts
@@ -66,21 +66,21 @@ describe('extractExports', () => {
     expect(extractedDeclarations.variables).to.include.members([
       'basicVarDeclarationExport',
       'basicVarStatementExport',
-      'reExportVarStatmentExport'
+      'reExportVarStatementExport'
     ]);
   });
   it('test re-exported variable extractions from same module - named re-exports', () => {
     expect(extractedDeclarations.variables).to.include.members([
       'basicVarDeclarationExportFar',
       'basicVarStatementExportFar',
-      'reExportVarStatmentExportFar'
+      'reExportVarStatementExportFar'
     ]);
   });
   it('test re-exported variable extractions from same module - * re-exports', () => {
     expect(extractedDeclarations.variables).to.include.members([
       'basicVarDeclarationExportBar',
       'basicVarStatementExportBar',
-      'reExportVarStatmentExportBar'
+      'reExportVarStatementExportBar'
     ]);
   });
 
@@ -296,7 +296,7 @@ describe('test dedup helper function', () => {
 });
 
 describe('test replaceAll helper function', () => {
-  it('test replaceAll with multiple occurences of an element', () => {
+  it('test replaceAll with multiple occurrences of an element', () => {
     const memberList: MemberList = {
       functions: ['aFunc', 'aFunc', 'bFunc', 'cFunc'],
       classes: ['aClass', 'bClass', 'aClass', 'cClass'],
@@ -320,7 +320,7 @@ describe('test replaceAll helper function', () => {
     ).to.equal(2);
   });
 
-  it('test replaceAll with single occurence of an element', () => {
+  it('test replaceAll with single occurrence of an element', () => {
     const memberList: MemberList = {
       functions: ['aFunc', 'aFunc', 'bFunc', 'cFunc'],
       classes: ['aClass', 'bClass', 'aClass', 'cClass'],
@@ -344,7 +344,7 @@ describe('test replaceAll helper function', () => {
     ).to.equal(1);
   });
 
-  it('test replaceAll with zero occurence of an element', () => {
+  it('test replaceAll with zero occurrence of an element', () => {
     const memberList: MemberList = {
       functions: ['aFunc', 'aFunc', 'bFunc', 'cFunc'],
       classes: ['aClass', 'bClass', 'aClass', 'cClass'],
diff --git a/repo-scripts/size-analysis/test/test-inputs/bar.ts b/repo-scripts/size-analysis/test/test-inputs/bar.ts
index ee727e325ec..534f820d685 100644
--- a/repo-scripts/size-analysis/test/test-inputs/bar.ts
+++ b/repo-scripts/size-analysis/test/test-inputs/bar.ts
@@ -18,7 +18,7 @@ import { LogLevel } from '@firebase/logger';
 
 export let basicVarDeclarationExportBar: string;
 export const basicVarStatementExportBar = 'basicVarStatementExportBar';
-export const reExportVarStatmentExportBar = LogLevel;
+export const reExportVarStatementExportBar = LogLevel;
 
 export enum BasicEnumExportBar {
   DEBUG = 0,
diff --git a/repo-scripts/size-analysis/test/test-inputs/far.ts b/repo-scripts/size-analysis/test/test-inputs/far.ts
index 7688eef785c..7339c51e4e4 100644
--- a/repo-scripts/size-analysis/test/test-inputs/far.ts
+++ b/repo-scripts/size-analysis/test/test-inputs/far.ts
@@ -18,7 +18,7 @@ import { LogLevel } from '@firebase/logger';
 
 export let basicVarDeclarationExportFar: string;
 export const basicVarStatementExportFar = 'basicVarStatementExportFar';
-export const reExportVarStatmentExportFar = name;
+export const reExportVarStatementExportFar = name;
 
 export enum BasicEnumExportFar {
   DEBUG = 0,
diff --git a/repo-scripts/size-analysis/test/test-inputs/index.ts b/repo-scripts/size-analysis/test/test-inputs/index.ts
index 3a478abf165..f071a54fbd0 100644
--- a/repo-scripts/size-analysis/test/test-inputs/index.ts
+++ b/repo-scripts/size-analysis/test/test-inputs/index.ts
@@ -33,11 +33,11 @@ export {
   basicUniqueFuncFar,
   basicVarDeclarationExportFar,
   basicVarStatementExportFar,
-  reExportVarStatmentExportFar
+  reExportVarStatementExportFar
 } from './far';
 export let basicVarDeclarationExport: string;
 export const basicVarStatementExport = 'basicVarStatementExport';
-export const reExportVarStatmentExport = LogLevel1;
+export const reExportVarStatementExport = LogLevel1;
 
 export enum BasicEnumExport {
   DEBUG = 0,
diff --git a/scripts/ci-test/tasks.ts b/scripts/ci-test/tasks.ts
index cbe2a866326..503328c6abb 100644
--- a/scripts/ci-test/tasks.ts
+++ b/scripts/ci-test/tasks.ts
@@ -181,8 +181,8 @@ export function filterTasks(
 ): TestTask[] {
   let filteredTasks: TestTask[] = [];
 
-  // `ignorePacakges` and `onlyIncludePackages` should not be defined at same time,
-  // `ignorePacakges` will be ignored if that happens
+  // `ignorePackages` and `onlyIncludePackages` should not be defined at same time,
+  // `ignorePackages` will be ignored if that happens
   if (onlyIncludePackages) {
     filteredTasks = tasks.filter(t => onlyIncludePackages.includes(t.pkgName));
   } else if (ignorePackages) {
diff --git a/scripts/ci-test/testConfig.ts b/scripts/ci-test/testConfig.ts
index bfdfbfab674..5f458a07605 100644
--- a/scripts/ci-test/testConfig.ts
+++ b/scripts/ci-test/testConfig.ts
@@ -16,8 +16,8 @@
  */
 
 /**
- * Should not define `ignorePacakges` and `onlyIncludePackages` at same time,
- * `ignorePacakges` will be ignored if you do so
+ * Should not define `ignorePackages` and `onlyIncludePackages` at same time,
+ * `ignorePackages` will be ignored if you do so
  */
 export interface TestConfig {
   // Ignore the packages in test even if they changed
diff --git a/scripts/docgen-compat/theme/assets/css/main.css b/scripts/docgen-compat/theme/assets/css/main.css
index 27c67b02633..67a8fcd8b96 100644
--- a/scripts/docgen-compat/theme/assets/css/main.css
+++ b/scripts/docgen-compat/theme/assets/css/main.css
@@ -518,7 +518,7 @@ ul.tsd-descriptions.active > .tsd-description.fade-out { -webkit-animation: fade
 ul.tsd-descriptions h4, ul.tsd-descriptions .tsd-index-panel h3, .tsd-index-panel ul.tsd-descriptions h3 { font-size: 16px; margin: 1em 0 0.5em 0; }
 
 ul.tsd-parameters, ul.tsd-type-parameters { list-style: square; margin: 0; padding-left: 20px; }
-ul.tsd-parameters > li.tsd-parameter-siganture, ul.tsd-type-parameters > li.tsd-parameter-siganture { list-style: none; margin-left: -20px; }
+ul.tsd-parameters > li.tsd-parameter-signature, ul.tsd-type-parameters > li.tsd-parameter-signature { list-style: none; margin-left: -20px; }
 ul.tsd-parameters h5, ul.tsd-type-parameters h5 { font-size: 16px; margin: 1em 0 0.5em 0; }
 ul.tsd-parameters .tsd-comment, ul.tsd-type-parameters .tsd-comment { margin-top: -0.5em; }
 
diff --git a/scripts/release/cli.ts b/scripts/release/cli.ts
index de9f564fb0e..67f770ca1de 100755
--- a/scripts/release/cli.ts
+++ b/scripts/release/cli.ts
@@ -82,7 +82,7 @@ yargs
         type: 'string',
         alias: 'p',
         demandOption: true,
-        desc: 'The prerelease label used in verison number. e.g. 1.0.0-<prereleaseName>'
+        desc: 'The prerelease label used in version number. e.g. 1.0.0-<prereleaseName>'
       },
       npmTag: {
         type: 'string',