Important
Realm CLI is Deprecated
realm-cli is deprecated and will not receive future features or
bug fixes. Instead, use the App Services CLI.
App Services CLI is available on npm. To install the CLI on your system,
ensure that you have Node.js
installed and then run the following command in your shell:
npm install -g atlas-app-services-cli
Overview
The Atlas App Services Command Line Interface (realm-cli)
allows you to programmatically manage your Apps.
With realm-cli, you can create or update
Apps from a local directory as well as export
existing applications to a local directory.
Installation
realm-cli is available on npm. To install version 1 of the
realm-cli on your system, ensure that you have Node.js installed and then run the following
command in your shell:
npm install -g mongodb-realm-cli@^1
General Options
Important
Check your CLI version
This page documents commands, arguments, and flags for version 1 of
realm-cli. If you have a newer version of realm-cli, run realm-cli
--help for a list of updated commands and usage examples. To check
your CLI version, use: realm-cli --version.
The following options are available for all realm-cli commands:
--config-path <File System Path>- Optional.
If included with
realm-cli login, stores information about the authenticated session in a file at the specified path. Session information includes your MongoDB Cloud username, MongoDB Atlas programmatic API Key, and a session refresh token.If included with any other command, authenticates the request with the session saved at the specified path (if it exists) instead of the current CLI authentication state.
Warning
Since the session configuration file contains your MongoDB Atlas programmatic API private key, you should avoid sharing this file unintentionally.
Authentication
Authenticate a CLI User
Use realm-cli login to authenticate a MongoDB Cloud user
with a MongoDB Atlas programmatic API Key.
realm-cli login --api-key="<my api key>" --private-api-key="<my private api key>"
--api-key <api key>A valid public MongoDB Atlas programmatic API key for the MongoDB Cloud account you wish to log in with.
--private-api-key <private api key>A valid private MongoDB Atlas programmatic API key for the MongoDB Cloud account you wish to log in with.
--username <MongoDB Cloud username>(Deprecated) The username of the MongoDB Cloud account you wish to log in with using personal API keys.
Log Out the Current CLI User
Use realm-cli logout to log out the currently logged in user.
realm-cli logout
View the Currently Logged In User
Use realm-cli whoami to see details on the user that is currently
logged in to the CLI, if applicable.
realm-cli whoami
If there is a currently logged-in user, their information will display on the next line in the following format:
<username> [API Key: ********-****-****-****-<last 12 digits of API key>]
If no user is logged in, realm-cli will return the following
message:
no user info available
Apps
Import an Application
Use realm-cli import to import a local application directory into a
hosted App. If you import a directory into an application
that doesn't exist, realm-cli can create the application for you.
Tip
You must be a Project Owner to import an App. For more info,
see: Atlas User Roles.
realm-cli import \ --app-id=myapp-abcde \ --path=./path/to/app/dir \ --strategy=merge \ --include-hosting \ --include-dependencies
--app-id <App Services Application ID>- Optional.
The Application ID of your App.
If not specified,
realm-cliwill attempt to use the value ofapp_iddefined in config.json. Ifconfig.jsondoes not have anapp_idvalue,realm-cliprompts you to create a new application.Note
New Application App IDs
If you create a new application with
realm-cli, App Services generates a new App ID and ignores any value that you specify for the--app-idflag.
--path <path>- Optional.
The path to the directory containing files you wish to import. The directory must contain, at minimum, a valid config.json file.
If the
pathargument is omitted,realm-cliwill search for aconfig.jsonfile in the current application directory.
--strategy ['merge|replace|replace-by-name']- Optional.Default: Merge
The import strategy that
realm-clishould use when reconciling imported entities.
--project-id <MongoDB Cloud Project ID>- Optional.
The Project ID of the Atlas project on which you want to host a newly created App. If specified,
realm-cliwill not prompt you to select a project when creating a new app.Note
realm-cliignores the value of--project-idunless you are importing a new application.
Export an Application
Use realm-cli export to save an App configuration to
a local application directory.
realm-cli export \ --app-id=myRealmApp-abcde \ --output=path/to/exported/app/dir \ --include-hosting \ --as-template
--output <path>- Optional.
The path of the directory where App Services will export your application.
If specified,
realm-clicreates a directory at the given path and exports the application configuration into the new directory. If a file or directory already exists at the specified path, the export will fail.Note
If the
outputargument is omitted,realm-cliwill export the application configuration to a new directory within the current working directory.
--include-hosting- Optional.
If specified, exports all hosted static assets in the
hosting/filesdirectory of your App.
--for-source-control- Optional.
If enabled,
realm-cliexports the application configuration without any fields that conflict with deployment via GitHub source control, including fields likename,app_id,location, anddeployment_modelin theconfig.jsonfile as well as theconfig.clusterNamefield in theconfig.jsonof any Atlas data sources linked to the application.
Diff Pending Application Changes
Use realm-cli diff to return a diff of the configuration files between the
deployed application and your local application directory.
Diff application config files realm-cli diff Diff application config files and hosted files realm-cli diff --include-hosting
The diff resembles the following:
--- functions/oldFunctionName/config.json +++ functions/oldFunctionName/config.json @@ -1,6 +1 @@ -{ - "id": "5d4c6a5cd28e555496a705da", - "name": "oldFunctionName", - "private": false -} --- functions/newFunctionName/config.json +++ functions/newFunctionName/config.json @@ -1 +1,6 @@ +{ + "id": "5d4c6a5cd28e555496a705da", + "name": "newFunctionName", + "private": false +} Modified Files: * /index.html * /auth/confirmEmail.html * /auth/resetPassword.html
Secrets
List All Secrets
Use realm-cli secrets list to return a list that contains the Name
and ID of each Secret in your application.
realm-cli secrets list
The returned list of secrets resembles the following:
ID Name 5d5c25415e30c7ef857c6a10 test-secret-please-ignore 5d56dd453b467e2a48a6ec32 some-other-secret
Create a Secret
Use realm-cli secrets add to create a new Secret with the specified name and value.
realm-cli secrets add --name=mySecret --value=SuperSecretValue!
Update a Secret's Value
Use realm-cli secrets update to change the value of an existing
Secret in your application.
Update a Secret by name realm-cli secrets update --secret-name=mySecret --value=NewSecretValue realm-cli secrets update --name=mySecret --value=NewSecretValue Update a Secret by name realm-cli secrets update --secret-id=5ba9c5c2e707c02b38031412 --value=NewSecretValue realm-cli secrets update --id=5ba9c5c2e707c02b38031412 --value=NewSecretValue
Remove a Secret
Use realm-cli secrets remove to delete an existing Secret from your application.
Remove a Secret by name realm-cli secrets remove --secret-name=mySecret realm-cli secrets remove --name=mySecret Remove a Secret by ID realm-cli secrets remove --secret-id=5ba9c5c2e707c02b38031412 realm-cli secrets remove --id=5ba9c5c2e707c02b38031412
Import Strategies
When performing an application import, there are multiple built-in strategies for handling existing entities.
All imports default to the merge strategy unless otherwise
specified.
Merge
realm-cli import --strategy=merge
Under the merge strategy, entities in the application directory are
added to the application non-destructively. Any existing entities in an
application are left unchanged if they are not represented in the
imported application directory.
If an imported entity's id value matches the id of an existing
entity, the existing entity will be updated to match the imported
entity. App Services assigns system-generated id values to
entities without id values before importing them as new entities.
If an entity is imported with an id that does not match an
existing entity, the import will fail. Importing an entity with a
non-ObjectID id value causes an error.
Note
If an imported entity has an id field, the value must be an
ObjectID or the merge will fail.
Example
An existing application has three functions:
{ "id": <ObjectID 1>, "name": "FunctionA", ... } { "id": <ObjectID 2>, "name": "FunctionB", ... } { "id": <ObjectID 3>, "name": "FunctionC", ... }
merge
strategy.{ "id": <ObjectID 1>, "name": "FunctionA_Updated!", ... } { "name": "FunctionD", ... }
After importing, the application has the following functions:
{ "id": <ObjectID 1>, "name": "FunctionA_Updated!" } { "id": <ObjectID 2>, "name": "FunctionB", ... } { "id": <ObjectID 3>, "name": "FunctionC", ... } { "id": <ObjectID 4>, "name": "FunctionD", ... }
FunctionA was updated based on its imported configuration file.
FunctionB and FunctionC were not included in the imported
application directory, so they remained unchanged after importing
with the merge strategy. FunctionD was imported as a new
entity and assigned a system-generated id value.
Replace
realm-cli import --strategy=replace
Under the replace strategy, if an imported entity's id value
matches the id of an existing entity, App Services replaces the
existing entity with the imported entity. If an imported entity's id
value does not match an existing entity, the import fails.
If an existing entity's id does not match
the id of any imported entity, App Services deletes that
existing entity.
App Services generates id values for entities that lack id
values before importing them as new entities. Importing an entity with
a non-ObjectID id value does not throw an error.
Example
An existing application has three functions:
{ "id": <ObjectID 1>, "name": "FunctionA", ... } { "id": <ObjectID 2>, "name": "FunctionB", ... } { "id": <ObjectID 3>, "name": "FunctionC", ... }
replace
strategy.{ "id": <ObjectID 1>, "name": "FunctionA_Updated!", ... } { "name": "FunctionD", ... } { "id": "non-ObjectID-value", "name": "FunctionE", ... }
After importing, the application has the following functions:
{ "id": <ObjectID 1>, "name": "FunctionA_Updated!" } { "id": <ObjectID 4>, "name": "FunctionD", ... } { "id": <ObjectID 5>, "name": "FunctionE", ... }
FunctionA was updated based on its imported configuration file.
FunctionB and FunctionC were not included in the imported
application directory, so they are not present in the app after
importing with the replace strategy. FunctionD and
FunctionE were imported as new entities and assigned
system-generated id values.
Replace by Name
realm-cli import --strategy=replace-by-name
Under the replace-by-name strategy, if an imported
entity's name value matches the name of an existing
entity, App Services replaces the existing entity with the imported
entity. If an imported entity's name value does not
match an existing entity, the entity becomes a new entity.
If an existing entity's name does not match the name
of any imported entity, App Services deletes that existing entity.
If an imported entity has no name value, realm-cli will throw
an error.
Example
An existing application has three functions:
{ "id": <ObjectID 1>, "name": "FunctionA", ... } { "id": <ObjectID 2>, "name": "FunctionB", ... } { "id": <ObjectID 3>, "name": "FunctionC", ... }
replace
strategy.{ "name": "FunctionZ", ... } { "name": "FunctionB", ... } { "name": "FunctionC", ... }
After importing, the application has the following functions:
{ "id": <ObjectID 2>, "name": "FunctionB", ... } { "id": <ObjectID 3>, "name": "FunctionC", ... } { "id": <ObjectID 4>, "name": "FunctionZ", ... }
Both the existing application and the imported configuration directory
contained functions with the names FunctionB and FunctionC.
As a result, both functions retained their previous id values and
names. The rest of both function's values reflect the values uploaded
from the configuration files. FunctionA was not included in the
imported application directory, so it is not present in the app after
importing with the replace-by-name strategy. FunctionZ was
imported as a new entity and assigned a system-generated id
value.