diff --git a/.yarnrc.yml b/.yarnrc.yml
index ef183939f..ed595f583 100644
--- a/.yarnrc.yml
+++ b/.yarnrc.yml
@@ -20,9 +20,6 @@ packageExtensions:
     dependencies:
       react: "*"
       react-dom: "*"
-  rc-dropdown@*:
-    dependencies:
-      rc-util: "*"
   rc-input-number@*:
     dependencies:
       react: "*"
diff --git a/packages/api/package.json b/packages/api/package.json
index f8c7e4711..5345b0410 100644
--- a/packages/api/package.json
+++ b/packages/api/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/api",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/build/package.json b/packages/build/package.json
index 4fbfd97ff..365bcf371 100644
--- a/packages/build/package.json
+++ b/packages/build/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/build",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/build/src/lowdefySchema.js b/packages/build/src/lowdefySchema.js
index f768c70ed..4d13b3344 100644
--- a/packages/build/src/lowdefySchema.js
+++ b/packages/build/src/lowdefySchema.js
@@ -652,6 +652,12 @@ export default {
         type: 'App "license" should be a string.',
       },
     },
+    version: {
+      type: 'string',
+      errorMessage: {
+        type: 'App "version" should be a string.',
+      },
+    },
     app: {
       $ref: '#/definitions/app',
     },
diff --git a/packages/cli/src/commands/dev/runDevServer.js b/packages/cli/src/commands/dev/runDevServer.js
index 3c88c87df..4df548b9a 100644
--- a/packages/cli/src/commands/dev/runDevServer.js
+++ b/packages/cli/src/commands/dev/runDevServer.js
@@ -28,6 +28,7 @@ async function runDevServer({ context, directory }) {
         LOWDEFY_BUILD_REF_RESOLVER: context.options.refResolver,
         LOWDEFY_DIRECTORY_CONFIG: context.directories.config,
         LOWDEFY_PACKAGE_MANAGER: context.packageManager,
+        LOWDEFY_SERVER_DEV_OPEN_BROWSER: !!context.options.open,
         LOWDEFY_SERVER_DEV_WATCH: JSON.stringify(context.options.watch),
         LOWDEFY_SERVER_DEV_WATCH_IGNORE: JSON.stringify(context.options.watchIgnore),
         PORT: context.options.port,
diff --git a/packages/cli/src/index.js b/packages/cli/src/index.js
index 55b7cf1b6..88e0782a0 100755
--- a/packages/cli/src/index.js
+++ b/packages/cli/src/index.js
@@ -69,6 +69,7 @@ program
     'Change config directory. Default is the current working directory.'
   )
   .option('--disable-telemetry', 'Disable telemetry.')
+  .option('--no-open', 'Do not open a new tab in the default browser.')
   .option(
     '--package-manager <package-manager>',
     'The package manager to use. Options are "npm" or "yarn".'
diff --git a/packages/docs/concepts/lowdefy-schema.yaml b/packages/docs/concepts/lowdefy-schema.yaml
index 716d08c81..277080240 100644
--- a/packages/docs/concepts/lowdefy-schema.yaml
+++ b/packages/docs/concepts/lowdefy-schema.yaml
@@ -29,7 +29,7 @@ _ref:
             The root schema for a Lowdefy app is:
             - `lowdefy: string`: __Required__ - The Lowdefy version number the app uses. This is required and cannot be a reference to another file.
             - `name: string`: A name for the application.
-            - `licence: string`: A [SPDX licence ID](https://spdx.org/licenses/). You can use this to indicate the project's  licence if you are licencing your project under a specific software licence. If you wish to indicate to others that you do not grant the right to use your project, you can optionally use `UNLICENSED` for this field. How you share your Lowdefy config is up to you.
+            - `license: string`: A [SPDX license ID](https://spdx.org/licenses/). You can use this to indicate the project's  license if you are licencing your project under a specific software license. If you wish to indicate to others that you do not grant the right to use your project, you can optionally use `UNLICENSED` for this field. How you share your Lowdefy config is up to you.
             - `cli: object`: An object with configuration for the CLI.
             - `config: object`: An object with app configuration like the home page pageId.
             - `global: object`: A data object that can be accessed anywhere in the app using the [`_global`](/_global) operator.
diff --git a/packages/docs/lowdefy.yaml b/packages/docs/lowdefy.yaml
index 04a6ab851..b17040a45 100644
--- a/packages/docs/lowdefy.yaml
+++ b/packages/docs/lowdefy.yaml
@@ -14,7 +14,7 @@
 
 name: '@lowdefy/docs'
 lowdefy: 4.0.0-alpha.12
-licence: Apache-2.0
+license: Apache-2.0
 
 cli:
   disableTelemetry: true
diff --git a/packages/docs/tutorial/tutorial-deploy.yaml b/packages/docs/tutorial/tutorial-deploy.yaml
index 6765fa385..c69fb53b6 100644
--- a/packages/docs/tutorial/tutorial-deploy.yaml
+++ b/packages/docs/tutorial/tutorial-deploy.yaml
@@ -55,7 +55,7 @@ _ref:
 
             #### Step 6.1 - Create a Github repository
 
-            Create a new Github repository. You can do that [here](https://github.com/new). Do not initialize the repository with a `.gitignore`, `README`, or licence file.
+            Create a new Github repository. You can do that [here](https://github.com/new). Do not initialize the repository with a `.gitignore`, `README`, or license file.
 
             #### Step 6.2 - Add your files to the repository
 
diff --git a/packages/engine/package.json b/packages/engine/package.json
index 3d2c599af..7b5e52154 100644
--- a/packages/engine/package.json
+++ b/packages/engine/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/engine",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/layout/package.json b/packages/layout/package.json
index 92380068b..1339da233 100644
--- a/packages/layout/package.json
+++ b/packages/layout/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/layout",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/operators/package.json b/packages/operators/package.json
index 76c97d390..704bc3cc5 100644
--- a/packages/operators/package.json
+++ b/packages/operators/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/operators",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/plugins/actions/actions-core/package.json b/packages/plugins/actions/actions-core/package.json
index e92c5e136..cbcac816d 100644
--- a/packages/plugins/actions/actions-core/package.json
+++ b/packages/plugins/actions/actions-core/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/actions-core",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/plugins/connections/connection-axios-http/package.json b/packages/plugins/connections/connection-axios-http/package.json
index 61d946f32..e543201d2 100644
--- a/packages/plugins/connections/connection-axios-http/package.json
+++ b/packages/plugins/connections/connection-axios-http/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/connection-axios-http",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/plugins/connections/connection-elasticsearch/package.json b/packages/plugins/connections/connection-elasticsearch/package.json
index 68dfd610d..362b54dd9 100644
--- a/packages/plugins/connections/connection-elasticsearch/package.json
+++ b/packages/plugins/connections/connection-elasticsearch/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/connection-elasticsearch",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/plugins/connections/connection-google-sheets/package.json b/packages/plugins/connections/connection-google-sheets/package.json
index 48e6bf482..65a639a98 100644
--- a/packages/plugins/connections/connection-google-sheets/package.json
+++ b/packages/plugins/connections/connection-google-sheets/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/connection-google-sheets",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/plugins/connections/connection-knex/package.json b/packages/plugins/connections/connection-knex/package.json
index fdacfbf80..be5c5af37 100644
--- a/packages/plugins/connections/connection-knex/package.json
+++ b/packages/plugins/connections/connection-knex/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/connection-knex",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/plugins/connections/connection-mongodb/package.json b/packages/plugins/connections/connection-mongodb/package.json
index 40f6dde5c..55d529da3 100644
--- a/packages/plugins/connections/connection-mongodb/package.json
+++ b/packages/plugins/connections/connection-mongodb/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/connection-mongodb",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/plugins/connections/connection-redis/package.json b/packages/plugins/connections/connection-redis/package.json
index b6528e8c1..dcad96ff6 100644
--- a/packages/plugins/connections/connection-redis/package.json
+++ b/packages/plugins/connections/connection-redis/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/connection-redis",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/plugins/connections/connection-sendgrid/package.json b/packages/plugins/connections/connection-sendgrid/package.json
index f727d302e..14b522fd0 100644
--- a/packages/plugins/connections/connection-sendgrid/package.json
+++ b/packages/plugins/connections/connection-sendgrid/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/connection-sendgrid",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/plugins/connections/connection-stripe/package.json b/packages/plugins/connections/connection-stripe/package.json
index 950ea7f59..84b2a414b 100644
--- a/packages/plugins/connections/connection-stripe/package.json
+++ b/packages/plugins/connections/connection-stripe/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/connection-stripe",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/plugins/operators/operators-change-case/package.json b/packages/plugins/operators/operators-change-case/package.json
index f88d3b679..213b60407 100644
--- a/packages/plugins/operators/operators-change-case/package.json
+++ b/packages/plugins/operators/operators-change-case/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/operators-change-case",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/plugins/operators/operators-diff/package.json b/packages/plugins/operators/operators-diff/package.json
index efa71dfea..f62d25e40 100644
--- a/packages/plugins/operators/operators-diff/package.json
+++ b/packages/plugins/operators/operators-diff/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/operators-diff",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/plugins/operators/operators-js/package.json b/packages/plugins/operators/operators-js/package.json
index 77ab2760e..12f34a7ec 100644
--- a/packages/plugins/operators/operators-js/package.json
+++ b/packages/plugins/operators/operators-js/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/operators-js",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/plugins/operators/operators-mql/package.json b/packages/plugins/operators/operators-mql/package.json
index 0081ed4ab..5b0c254d4 100644
--- a/packages/plugins/operators/operators-mql/package.json
+++ b/packages/plugins/operators/operators-mql/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/operators-mql",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/plugins/operators/operators-nunjucks/package.json b/packages/plugins/operators/operators-nunjucks/package.json
index 1ae82966e..ef1f8273e 100644
--- a/packages/plugins/operators/operators-nunjucks/package.json
+++ b/packages/plugins/operators/operators-nunjucks/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/operators-nunjucks",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/plugins/operators/operators-uuid/package.json b/packages/plugins/operators/operators-uuid/package.json
index 7465f7661..553eb3645 100644
--- a/packages/plugins/operators/operators-uuid/package.json
+++ b/packages/plugins/operators/operators-uuid/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/operators-uuid",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/plugins/operators/operators-yaml/package.json b/packages/plugins/operators/operators-yaml/package.json
index 30d32270f..c1431015c 100644
--- a/packages/plugins/operators/operators-yaml/package.json
+++ b/packages/plugins/operators/operators-yaml/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/operators-yaml",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/plugins/plugins/plugin-aws/package.json b/packages/plugins/plugins/plugin-aws/package.json
index b8fca0d41..bfe79b11f 100644
--- a/packages/plugins/plugins/plugin-aws/package.json
+++ b/packages/plugins/plugins/plugin-aws/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/plugin-aws",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/plugins/plugins/plugin-next-auth/package.json b/packages/plugins/plugins/plugin-next-auth/package.json
index 0f3841929..fcfdf3c87 100644
--- a/packages/plugins/plugins/plugin-next-auth/package.json
+++ b/packages/plugins/plugins/plugin-next-auth/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/plugin-next-auth",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/server-dev/manager/run.mjs b/packages/server-dev/manager/run.mjs
index 1864eb39a..00e34aa2d 100644
--- a/packages/server-dev/manager/run.mjs
+++ b/packages/server-dev/manager/run.mjs
@@ -80,7 +80,9 @@ async function run() {
   try {
     const serverPromise = startServer(context);
     await wait(800);
-    opener(`http://localhost:${context.options.port}`);
+    if (process.env.LOWDEFY_SERVER_DEV_OPEN_BROWSER === 'true') {
+      opener(`http://localhost:${context.options.port}`);
+    }
     await serverPromise;
   } catch (error) {
     console.log(error);
diff --git a/packages/utils/ajv/package.json b/packages/utils/ajv/package.json
index 72d3b5dad..f5f2188c4 100644
--- a/packages/utils/ajv/package.json
+++ b/packages/utils/ajv/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/ajv",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/utils/block-dev/package.json b/packages/utils/block-dev/package.json
index 6e297e103..e6002f41b 100644
--- a/packages/utils/block-dev/package.json
+++ b/packages/utils/block-dev/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/block-dev",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "Lowdefy Block Development Tools",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/utils/block-utils/package.json b/packages/utils/block-utils/package.json
index c208ebdb0..cbed50494 100644
--- a/packages/utils/block-utils/package.json
+++ b/packages/utils/block-utils/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/block-utils",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "Lowdefy Block Utils",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/utils/helpers/package.json b/packages/utils/helpers/package.json
index 6292b995f..866a650ee 100644
--- a/packages/utils/helpers/package.json
+++ b/packages/utils/helpers/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/helpers",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/utils/jest-yaml-transform/package.json b/packages/utils/jest-yaml-transform/package.json
index 50285f686..2e2b2958c 100644
--- a/packages/utils/jest-yaml-transform/package.json
+++ b/packages/utils/jest-yaml-transform/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/jest-yaml-transform",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "A Jest Transform for YAML.",
   "main": "./dist/index.js",
   "homepage": "https://lowdefy.com",
diff --git a/packages/utils/node-utils/package.json b/packages/utils/node-utils/package.json
index 307b88c07..db1ee356a 100644
--- a/packages/utils/node-utils/package.json
+++ b/packages/utils/node-utils/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/node-utils",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [
diff --git a/packages/utils/nunjucks/package.json b/packages/utils/nunjucks/package.json
index 6aae9964b..8b4ff9deb 100644
--- a/packages/utils/nunjucks/package.json
+++ b/packages/utils/nunjucks/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@lowdefy/nunjucks",
   "version": "4.0.0-alpha.12",
-  "licence": "Apache-2.0",
+  "license": "Apache-2.0",
   "description": "",
   "homepage": "https://lowdefy.com",
   "keywords": [