Dmitrii Shilov 3b2efdb043 Address review: do not trade false-unhealthy for false-healthy
The previous revision removed the missing-phase signatures, but three of those
changes could report a load as healthy without establishing that it finished,
and one could prevent a slow initialization from recovering.

Preserve late initialization recovery. configurePortal() raced the iframe
handshake against a 30s reject while leaving the message listener active, so a
late init message would build an Explorer that the rejected caller never
received — turning a slow load into an unrecoverable one. The timeout is now a
watchdog that traces the stuck handshake and lets the caller keep waiting, so
recovery behaves as it did before. Initialization work inside the message
handler is wrapped so a throw reports and still yields a shell, instead of
leaving the promise pending forever.

Do not accept an earlier render as proof the loaded tree is ready. Phase
auto-start let a render of the databases-only tree complete DatabaseTreeRendered
with a zero-duration measurement, before collections had loaded. The producer
ordering is fixed instead: Explorer publishes a ready revision once the load has
produced the data the tree should show, and ResourceTree completes the phase only
for a render carrying that revision, acknowledging each revision once. Stale
callbacks from a superseded load, accounts with no databases and unchanged trees
are covered by tests. A completion for a phase that was never opened is now
refused and reported as phase_complete_unstarted rather than backdated, and the
early-completion buffer no longer accepts deferred phases, which must be opened
by their producer.

Do not turn unfinished background loads into successes. A timeout in a hidden tab
emitted healthy=true even with no phases completed. The emitted outcome again
reflects what actually happened; documentHidden continues to be reported so
alerting can apply a background policy without the load being relabelled.

Related: IcM 865096261
2026-09-14 10:57:57 +01:00
2026-09-02 13:28:31 -07:00
2026-01-08 13:27:57 +05:30
2026-09-02 13:28:31 -07:00
2021-01-20 09:15:01 -06:00
2026-08-27 08:40:59 -07:00
2023-06-08 18:32:42 -07:00
2026-09-02 13:28:31 -07:00

Cosmos DB Explorer

UI for Azure Cosmos DB. Powers the Azure Portal, https://cosmos.azure.com/, and the Cosmos DB Emulator

Getting Started

  • Install Node.js 22.x.
  • npm install
  • npm run build

Developing

Watch mode

Run npm start to start the development server and automatically rebuild on changes

Hosted Development (https://cosmos.azure.com)

  • Visit: https://localhost:1234/hostedExplorer.html
  • The default webpack dev server configuration will proxy requests to the production portal backend: https://cdb-ms-mpac-pbe.cosmos.azure.com. This will allow you to use production connection strings on your local machine.

Emulator Development

Setting up a Remote Emulator

The Cosmos emulator currently only runs in Windows environments. You can still develop on a non-Windows machine by setting up an emulator on a windows box and exposing its ports publicly:

  1. Expose these ports publicly: 8081, 8900, 8979, 10250, 10251, 10252, 10253, 10254, 10255, 10256

  2. Download and install the emulator: https://docs.microsoft.com/en-us/azure/cosmos-db/local-emulator

  3. Start the emulator from PowerShell:

> cd C:/

> .\CosmosDB.Emulator.exe -AllowNetworkAccess -Key="<EMULATOR MASTER KEY>"

Portal Development

Testing

Unit Tests

Unit tests are located adjacent to the code under test and run with Jest:

npm run test

End to End CI Tests

Jest and Puppeteer are used for end to end browser based tests and are contained in test/. To run these tests locally:

  1. Copy .env.example to .env
  2. Update the values in .env including your local data explorer endpoint (ask a teammate/codeowner for help with .env values)
  3. Make sure all packages are installed npm install
  4. Run the server npm run start and wait for it to start
  5. Run npm run test:e2e

Releasing

We generally adhere to the release strategy documented by the Azure SDK Guidelines. Most releases should happen from the master branch. If master contains commits that cannot be released, you may create a release from a release/ or hotfix/ branch. See linked documentation for more details.

Architecture

Contributing

Please read the contribution guidelines.

S
Description
UI for Azure Cosmos DB. Powers the Azure Portal, https://cosmos.azure.com/, and the Cosmos DB Emulator (Mirror of https://github.com/Azure/cosmos-explorer)
Readme MIT 140 MiB
Languages
TypeScript 93.2%
Less 4.8%
JavaScript 1%
HTML 0.6%
PowerShell 0.3%