diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0d7e2356a6..c0e9bf59e5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,7 +14,9 @@ This change log adheres to standards from [Keep a CHANGELOG](https://keepachange
 ### Fixed
 * configs: avoid legacy config system error ([#3461][] @ljharb)
 * [`sort-prop-types`]: restore autofixing ([#3452][] @ROSSROSALES)
+* [`no-unknown-property`]: do not check `fbs` elements ([#3494][] @brianogilvie)
 
+[#3494]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3494
 [#3461]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3461
 [#3452]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3452
 [#3449]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3449
diff --git a/lib/rules/no-unknown-property.js b/lib/rules/no-unknown-property.js
index 1ba13a60a5..12e8f5f9f8 100644
--- a/lib/rules/no-unknown-property.js
+++ b/lib/rules/no-unknown-property.js
@@ -544,7 +544,7 @@ module.exports = {
 
         const tagName = getTagName(node);
 
-        if (tagName === 'fbt') { return; } // fbt nodes are bonkers, let's not go there
+        if (tagName === 'fbt' || tagName === 'fbs') { return; } // fbt/fbs nodes are bonkers, let's not go there
 
         if (!isValidHTMLTagInJSX(node)) { return; }
 
diff --git a/tests/lib/rules/no-unknown-property.js b/tests/lib/rules/no-unknown-property.js
index 3928ffa334..62f2beb16b 100644
--- a/tests/lib/rules/no-unknown-property.js
+++ b/tests/lib/rules/no-unknown-property.js
@@ -153,6 +153,8 @@ ruleTester.run('no-unknown-property', rule, {
 
     // fbt
     { code: '<fbt desc="foo" doNotExtract />;' },
+    // fbs
+    { code: '<fbs desc="foo" doNotExtract />;' },
   ]),
   invalid: parsers.all([
     {