Build toolBuild tooltypeRuns at build time. Nothing of it ships in the deployed application.See every one →What this type is →independently maintainedindependently maintainedoriginPublished by one person or a small company outside SAP. Says nothing about quality; the readings say that.See every one →

ui5-middleware-odata-recorder

A UI5 server middleware that records the OData traffic a running app makes against a real backend and writes entity JSON files and metadata.xml that the Fiori elements mock server can replay.

Mock data for a Fiori app is usually written by hand from the metadata, which is the part that goes out of date first. This records it from a real backend instead: the middleware sits behind the Fiori tools proxy in ui5.yaml, recording starts from ?__record=1 on the URL or from its own /__recorder/start endpoint, and stopping writes entity JSON files and metadata.xml into the target directory configured per service alias, version and base path. A recordingId suffixes the filenames, so datasets for several SAP clients or several scenarios sit side by side and replay is chosen by the same parameter. removeSelectParams strips $select from the recorded requests so the files hold full entities rather than whatever the app happened to project, and redact drops named fields on the way out. Replay is the UI5 server started against a mock configuration, with no backend at all.

Facts

Latestv0.0.13ReleasedLast pushLicenceApache-2.0

Where it sits

Lives in
Provides
Build and dev-server toolingUI5Build and dev-server toolingcapabilityServing an app locally and building it for deployment — proxying a backend, transpiling, bundling, and shaping the result for whatever will host it.UI5 testingUI5UI5 testingcapabilityProving a UI still works — unit tests over controllers and formatters, integration tests that drive real controls, and end-to-end runs against a served app.

Who is behind it

Marian ZeisMarian ZeisPersonMaintains this
In the atlas: maintains 35, contributes to 86, wrote 25
@marianfoo
maintainer

Before choosing this

Conditions

PracticalFunctional boundary

It records what the app actually asked for, so an entity no recorded journey touched is not in the dataset and replay will not answer for it. Its own README asks for fiori-tools-appreload to be disabled while recording, because a reload loop is what happens otherwise.

What it declares

Every artifact

Type
Build tool
Origin
Independently maintained
Runtime
build time

As a build tool

Type declarations
declared
Distributed through
npm

Tasks this contributes to1Beta

Run a UI5 app's tests with no backend behind itThe application under test answers its own service calls from mock data, so the tests run with no backend reachable.Freestyle, Fiori elementsCovers, under conditionsdataset recorder
What it does

Supplies the data from the other direction: a server middleware records the OData traffic a running application makes and writes entity JSON files and metadata.xml, so the replay answers with what a real backend returned rather than with records written by hand.

Conditions

The project replays with the SAP Fiori elements mock server, which is what the recorder generates its files for; The recorded journey touched the entities the tests need: the dataset holds what the application asked for and nothing else

Remaining work

Record a journey that touches everything the tests touch, turn the Fiori tools app reload off while recording, as its README asks, and set up the mock server the files are written for.

All options on the UI5 testing page →

Connections2

Install

npm add ui5-middleware-odata-recorder

Derived from the package name. No recipe recorded; the README has the configuration.

README

quoted from marianfoo/ui5-middleware-odata-recorder under Apache-2.0, read
marianfoo/ui5-middleware-odata-recorder/README.mdOn GitHub

ui5-middleware-odata-recorder

🎬 Record OData traffic from your UI5 app and generate FE-mockserver-compatible datasets

Perfect for offline development, testing, and creating mock data without backend dependencies.

✨ Key Features

  • 🔄 Multi-service & Multi-tenant: Record from multiple OData services with tenant isolation
  • 📊 Complete Data Capture: Gets full entities by default (removes $select parameters)
  • ⚡ Smart & Fast: Deduplication, compression handling, real-time streaming
  • 🚫 304 Prevention: Automatically removes caching headers to ensure fresh metadata (v0.0.7+)
  • 🔧 Easy Control: REST API endpoints or URL parameters to start/stop recording
  • 📦 Ready-to-Use: Generates files compatible with SAP FE Mockserver

📦 Installation

npm install --save-dev ui5-middleware-odata-recorder

⚙️ Quick Setup

Add to your ui5.yaml:

server:
  customMiddleware:
    - name: fiori-tools-proxy
      afterMiddleware: compression
      configuration:
        backend:
          - path: /odata
            url: https://your-backend.com
    
    - name: ui5-middleware-odata-recorder
      afterMiddleware: fiori-tools-proxy
      configuration:
        services:
          - alias: mainService
            version: v4
            basePath: /odata/v4/main/
            targetDir: webapp/localService/mainService/data

💡 Tip: Disable fiori-tools-appreload during recording to prevent reload loops

🚀 Quick Start

1. Start Recording with recordingId

Using URL parameters (recommended):

# Start UI5 server
ui5 serve

# Open browser with recording enabled and recordingId
http://localhost:8080/index.html?__record=1&recordingId=demo

# Or for multi-tenant scenarios
http://localhost:8080/index.html?__record=1&recordingId=100  # SAP client 100
http://localhost:8080/index.html?__record=1&recordingId=200  # SAP client 200

Using REST API:

# Start recording with specific recordingId
curl "http://localhost:8080/__recorder/start?recordingId=demo&mode=stream"

# Check recording status
curl "http://localhost:8080/__recorder/status"

# Stop recording and save files
curl "http://localhost:8080/__recorder/stop"
2. What Gets Recorded

Files are created with recordingId suffix:

webapp/localService/mainService/data/
├── Books-demo.json      ← recordingId: "demo"
├── Orders-demo.json
├── Books-100.json       ← recordingId: "100"  
├── Orders-100.json
└── metadata.xml
3. Replay with Mockserver
# Switch to mockserver configuration
ui5 serve --config ui5.mock.yaml

# Open with specific dataset
http://localhost:8080/index.html?recordingId=demo
4. No recordingId (Simple Mode)
# Record without recordingId suffix
http://localhost:8080/index.html?__record=1

# Creates clean filenames
webapp/localService/mainService/data/
├── Books.json           ← No suffix
├── Orders.json
└── metadata.xml
5. Auto-start Configuration
configuration:
  autoStart: true
  defaultTenant: "demo"  # Default recordingId if not in URL

📂 Output

Creates mockserver-compatible files:

webapp/localService/mainService/
  metadata.xml          # Service metadata
  data/
    Books.json         # Entity data  
    Orders-100.json    # With tenant suffix (if configured)

🔧 Configuration Options

OptionDefaultDescription
autoStartfalseStart recording when middleware loads
autoSave"stream"Write mode: "stream" or "onStop"
removeSelectParamstrueRemove $select to capture full entities
defaultTenantundefinedTenant mode: "100" or "getTenantFromSAPClient"
controlEndpointstrueEnable /__recorder/* REST API
redact[]Field names to remove from recorded data

📖 Full Documentation

For detailed guides, advanced features, and troubleshooting:

📚 Getting Started Guide →

Covers installation, configuration, workflows, and troubleshooting.

🎯 recordingId Usage Guide →

Complete guide for multi-dataset recording:

  • Multi-tenant SAP client recording
  • Test scenario management
  • Environment-specific datasets
  • REST API control
  • Best practices and troubleshooting

📄 License

Apache-2.0 © Marian Zeis

Apache-2.0, read

History

Latest

v0.0.12

Changed 2, Fixes 4, Other

Notes
Fixed
  • CRITICAL: Fixed package.json main entry point from lib/ to dist/ to match TypeScript build output
  • Enhanced OData V2 association mapping logic to handle multiple name formats
  • Added extensive debug logging for association and association set lookup
  • Fixed navigation property to EntitySet mapping for V2 metadata
Changed
  • Improved association matching to try multiple name format variations (with/without namespace)
  • Added console logging for association lookup diagnostics
Impact

This is a critical fix for OData V2 expanded navigation support. Previous versions (0.0.11 and earlier) had an incorrect entry point that prevented the middleware from loading correctly when installed via npm.

  1. v0.0.11

    Features 4, Fixes 3

    Notes
    Added
    • Expanded navigation support for OData V2 and V4
    • Referential constraint detection and validation
    • Foreign key enrichment (bidirectional)
    • Hybrid navigation strategy (auto/always-separate/always-inline)
    Fixed
    • Single-entity navigation detection in V4 (using @odata.id)
    • V2 foreign key enrichment for parent entities
    • Metadata writing during proactive load
  2. v0.0.10

    Features 2

    Notes
    Added
    • Initial expanded navigation recording support
    • Basic V2 and V4 metadata parsing
1downloads per week, npm
Weekly downloads for ui5-middleware-odata-recorder26 complete calendar weeks from 2026-04-27 to 2026-10-25; the latest total is 1.27 Apr – 3 May: 24 May – 10 May: 2211 May – 17 May: 2818 May – 24 May: 925 May – 31 May: 31 Jun – 7 Jun: 198 Jun – 14 Jun: 415 Jun – 21 Jun: 2022 Jun – 28 Jun: 2229 Jun – 5 Jul: 196 Jul – 12 Jul: 2413 Jul – 19 Jul: 120 Jul – 26 Jul: 1927 Jul – 2 Aug: 143 Aug – 9 Aug: 2610 Aug – 16 Aug: 2917 Aug – 23 Aug: 724 Aug – 30 Aug: 731 Aug – 6 Sept: 297 Sept – 13 Sept: 1814 Sept – 20 Sept: 1021 Sept – 27 Sept: 1628 Sept – 4 Oct: 155 Oct – 11 Oct: 1512 Oct – 18 Oct: 319 Oct – 25 Oct: 1

Others providing53

Build and dev-server tooling
  1. UI5 ToolsVS Code extension to serve, proxy, build and deploy UI5 projectsfrom UI5
  2. ui5-middleware-route-proxyUI5 server middleware proxying route prefixes to a backendfrom UI5
  3. ui5-task-cachebuster-indexingUI5 builder task preparing build output for the cachebusterfrom UI5
  4. ui5-task-transpile-genUI5 builder task transpiling ES6 to ES5 with Babelfrom UI5
  5. ui5-plugin-loaderUI5 Tooling v4 extension that registers other extensionsfrom UI5
  6. ui5-deployerUI5 Tooling module deploying Fiori/UI5 apps to SAP systemsfrom UI5
  7. ui5-task-dts-generatorUI5 builder task generating d.ts type declarationsfrom UI5
  8. ui5-task-minifierUI5 builder task minifying HTML, CSS and JSON filesfrom UI5
  9. ui5-middleware-oidcUI5 dev server middleware adding an OpenID Connect loginfrom UI5
  10. generator-ui5-library-af-deployYeoman generator for Application Frontend config in UI5 librariesfrom UI5
  11. ui5-middleware-destinationUI5 Tooling middleware proxying destinations and neo-app.json routesfrom UI5
  12. ui5-task-check-eocpUI5 build task warning when the app's UI5 version reaches EOCPfrom UI5
  13. @ui5/cliUI5 Tooling command line for project setup, dev server and buildfrom UI5
  14. ui5-task-btp-manifestUI5 Tooling task writing the service name into the importer manifestfrom UI5
  15. ui5-middleware-approuterUI5 CLI middleware proxying the dev server through @sap/approuterfrom UI5
  16. ui5-middleware-capUI5 CLI middleware running a CDS server inside the UI5 dev serverfrom UI5
  17. ui5-middleware-hmrExperimental UI5 middleware for hot module replacementfrom UI5
  18. ui5-middleware-iasyncUI5 middleware syncing interactions across browsers over websocketfrom UI5
  19. ui5-middleware-indexUI5 middleware serving a chosen welcome page at the root pathfrom UI5
  20. ui5-middleware-livereloadLive reload middleware for the UI5 dev serverfrom UI5
  21. ui5-middleware-oneloginUI5 middleware logging in with Playwright and reusing the sessionfrom UI5
  22. ui5-middleware-serveframeworkUI5 middleware serving a locally built UI5 frameworkfrom UI5
  23. ui5-middleware-servestaticUI5 middleware serving static resources from a path or npm packagefrom UI5
  24. ui5-middleware-simpleproxyDev-server middleware proxying requests to a backend systemfrom UI5
  25. ui5-middleware-ui5UI5 middleware including one UI5 application in anotherfrom UI5
  26. ui5-middleware-webjarsUI5 middleware serving static resources from JAR files (WebJars)from UI5
  27. ui5-middleware-websocketWebSocket support for Express-based dev servers such as UI5'sfrom UI5
  28. ui5-task-cachebusterUI5 builder task cachebusting standalone UI5 applicationsfrom UI5
  29. ui5-task-copyrightUI5 builder task appending copyright headers to source filesfrom UI5
  30. ui5-task-flatten-libraryUI5 builder task flattening library output for SAP NetWeaverfrom UI5
  31. ui5-task-i18ncheckUI5 builder task checking XML views for missing i18n textsfrom UI5
  32. ui5-task-minify-xmlUI5 builder task minifying XML views and fragmentsfrom UI5
  33. ui5-task-pwa-enablerUI5 builder task turning a UI5 app into a progressive web appfrom UI5
  34. ui5-task-zipperBuild task packaging the UI5 build result as a zip archivefrom UI5
  35. ui5-tooling-lessUI5 CLI extension compiling Less files into CSSfrom UI5
  36. ui5-tooling-modulesUI5 tooling extensions loading npm packages as UI5 modulesfrom UI5
  37. ui5-tooling-stringreplaceUI5 CLI extension for string replacement during the buildfrom UI5
  38. ui5-tooling-transpileUI5 CLI extension transpiling code during the UI5 buildfrom UI5
  39. @ui5/loggerInternal logger of the UI5 CLIfrom UI5
  40. @ui5/middleware-code-coverageUI5 CLI middleware for Istanbul code coveragefrom UI5
  41. @ui5/tooling-webcDeprecated UI5 Tooling extensions for UI5 Web Components wrappersfrom UI5
UI5 testing
  1. ui5-test-runnerCommand line running UI5 QUnit and OPA tests in parallelfrom UI5
  2. jest-environment-ui5Jest environment running UI5 unit tests in Node.jsfrom UI5
  3. openui5-smart-mockserverUI5 MockServer extension generating mock data with Faker.jsfrom UI5
  4. vitest-environment-ui5Vitest environment running UI5 unit tests in Node.jsfrom UI5
  5. wdio-qunit-serviceWebdriverIO service running QUnit test pagesfrom UI5
  6. @openui5/sap.ui.coreFramework core: module loader, MVC runtime, binding, routing, themingfrom UI5
  7. karma-ui5-transpileKarma preprocessor transpiling UI5 sources via ui5-tooling-transpilefrom UI5
  8. ui5-journey-recorderChrome extension generating OPA5 or wdi5 tests from recorded journeysfrom UI5
  9. wdi5-cucumberwdi5 plugin for Cucumber-style BDD tests on Fiori Elements appsfrom UI5
  10. wdi5-fe-selectorswdi5 selectors for locating controls in Fiori Elements appsfrom UI5
  11. wdio-ui5-serviceEnd-to-end testing for UI5 on WebdriverIO with UI5 control selectorsfrom UI5
  12. @ui5/middleware-code-coverageUI5 CLI middleware for Istanbul code coveragefrom UI5
  13. vscode-ui5-odata-mock-generatorVS Code extension generating OData mock data from service metadatafrom UI5

Details

Sources4
GitHub APIdiscovered here, marianfoochecked
npm registry, ui5-middleware-odata-recorderversion, releases, installschecked
github.com/git+https://github.com/marianfoo/ui5-odata-recorder.gittree, pushes, contributors, CIchecked
README.mdquoted, and what the entry declareschecked

Sources are graph entities: the same page may back several entries, and an unreachable source flags every row that rests on it.

Compatibility and provenance
runtimesbuild-time
latestv0.0.13
first release
releases and cadence12, ~0d median
discovered viaGitHub API · marianfoo
first seen in the atlas
ecosystem and domainui5, developer-experience
History in the atlas2
  1. Read out of the marianfoo account listing. Two provides edges because the two halves are different claims: it is a UI5 server middleware, and what it produces is the mock-server dataset that capability:ui5-testing's core coverage already names as the framework's backend stand-in.
  2. First seen.
For your agent
Ref
artifact:marianfoo-ui5-middleware-odata-recorder
JSON
/artifacts/marianfoo-ui5-middleware-odata-recorder.json
MCP
Connecting an agent