diff --git a/docs/rules/README.md b/docs/rules/README.md
index 49a6c6389..127a622d3 100644
--- a/docs/rules/README.md
+++ b/docs/rules/README.md
@@ -396,6 +396,7 @@ The following rules extend the rules provided by ESLint itself and apply them to
| [vue/object-curly-newline](./object-curly-newline.md) | enforce consistent line breaks after opening and before closing braces | :wrench: |
| [vue/object-curly-spacing](./object-curly-spacing.md) | enforce consistent spacing inside braces | :wrench: |
| [vue/object-property-newline](./object-property-newline.md) | enforce placing object properties on separate lines | :wrench: |
+| [vue/object-shorthand](./object-shorthand.md) | require or disallow method and property shorthand syntax for object literals | :wrench: |
| [vue/operator-linebreak](./operator-linebreak.md) | enforce consistent linebreak style for operators | :wrench: |
| [vue/prefer-template](./prefer-template.md) | require template literals instead of string concatenation | :wrench: |
| [vue/space-in-parens](./space-in-parens.md) | enforce consistent spacing inside parentheses | :wrench: |
diff --git a/docs/rules/object-shorthand.md b/docs/rules/object-shorthand.md
new file mode 100644
index 000000000..e2e9249b5
--- /dev/null
+++ b/docs/rules/object-shorthand.md
@@ -0,0 +1,27 @@
+---
+pageClass: rule-details
+sidebarDepth: 0
+title: vue/object-shorthand
+description: require or disallow method and property shorthand syntax for object literals
+---
+# vue/object-shorthand
+
+> require or disallow method and property shorthand syntax for object literals
+
+- :exclamation: ***This rule has not been released yet.***
+- :wrench: The `--fix` option on the [command line](https://eslint.org/docs/user-guide/command-line-interface#fixing-problems) can automatically fix some of the problems reported by this rule.
+
+This rule is the same rule as core [object-shorthand] rule but it applies to the expressions in ``.
+
+## :books: Further Reading
+
+- [object-shorthand]
+
+[object-shorthand]: https://eslint.org/docs/rules/object-shorthand
+
+## :mag: Implementation
+
+- [Rule source](https://github.com/vuejs/eslint-plugin-vue/blob/master/lib/rules/object-shorthand.js)
+- [Test source](https://github.com/vuejs/eslint-plugin-vue/blob/master/tests/lib/rules/object-shorthand.js)
+
+Taken with ❤️ [from ESLint core](https://eslint.org/docs/rules/object-shorthand)
diff --git a/lib/index.js b/lib/index.js
index 021710984..895c615c6 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -151,6 +151,7 @@ module.exports = {
'object-curly-newline': require('./rules/object-curly-newline'),
'object-curly-spacing': require('./rules/object-curly-spacing'),
'object-property-newline': require('./rules/object-property-newline'),
+ 'object-shorthand': require('./rules/object-shorthand'),
'one-component-per-file': require('./rules/one-component-per-file'),
'operator-linebreak': require('./rules/operator-linebreak'),
'order-in-components': require('./rules/order-in-components'),
diff --git a/lib/rules/object-shorthand.js b/lib/rules/object-shorthand.js
new file mode 100644
index 000000000..79a3c8a32
--- /dev/null
+++ b/lib/rules/object-shorthand.js
@@ -0,0 +1,12 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+const { wrapCoreRule } = require('../utils')
+
+// eslint-disable-next-line no-invalid-meta, no-invalid-meta-docs-categories
+module.exports = wrapCoreRule('object-shorthand', {
+ skipDynamicArguments: true
+})
diff --git a/tests/lib/rules/object-shorthand.js b/tests/lib/rules/object-shorthand.js
new file mode 100644
index 000000000..62a9a9efa
--- /dev/null
+++ b/tests/lib/rules/object-shorthand.js
@@ -0,0 +1,81 @@
+/**
+ * @author Yosuke Ota
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+const RuleTester = require('eslint').RuleTester
+const rule = require('../../../lib/rules/object-shorthand')
+
+const tester = new RuleTester({
+ parser: require.resolve('vue-eslint-parser'),
+ parserOptions: {
+ ecmaVersion: 2020,
+ sourceType: 'module'
+ }
+})
+
+tester.run('object-shorthand', rule, {
+ valid: [
+ {
+ filename: 'test.vue',
+ code: `
+
+
+
+ `
+ },
+ {
+ filename: 'test.vue',
+ code: `
+
+
+
+ `,
+ options: ['never']
+ }
+ ],
+ invalid: [
+ {
+ filename: 'test.vue',
+ code: `
+
+
+
+ `,
+ output: `
+
+
+
+ `,
+ errors: [
+ {
+ message: 'Expected property shorthand.',
+ line: 3,
+ column: 23
+ }
+ ]
+ },
+ {
+ filename: 'test.vue',
+ code: `
+
+
+
+ `,
+ output: `
+
+
+
+ `,
+ options: ['never'],
+ errors: [
+ {
+ message: 'Expected longform property syntax.',
+ line: 3,
+ column: 23
+ }
+ ]
+ }
+ ]
+})