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 projects
  2. ui5-middleware-route-proxyUI5 server middleware proxying route prefixes to a backend
  3. ui5-task-cachebuster-indexingUI5 builder task preparing build output for the cachebuster
  4. ui5-task-transpile-genUI5 builder task transpiling ES6 to ES5 with Babel
  5. ui5-plugin-loaderUI5 Tooling v4 extension that registers other extensions
  6. ui5-deployerUI5 Tooling module deploying Fiori/UI5 apps to SAP systems
  7. ui5-task-dts-generatorUI5 builder task generating d.ts type declarations
  8. ui5-task-minifierUI5 builder task minifying HTML, CSS and JSON files
  9. ui5-middleware-oidcUI5 dev server middleware adding an OpenID Connect login
  10. generator-ui5-library-af-deployYeoman generator for Application Frontend config in UI5 libraries
  11. ui5-middleware-destinationUI5 Tooling middleware proxying destinations and neo-app.json routes
  12. ui5-task-check-eocpUI5 build task warning when the app's UI5 version reaches EOCP
  13. @ui5/cliUI5 Tooling command line for project setup, dev server and build
  14. ui5-task-btp-manifestUI5 Tooling task writing the service name into the importer manifest
  15. ui5-middleware-approuterUI5 CLI middleware proxying the dev server through @sap/approuter
  16. ui5-middleware-capUI5 CLI middleware running a CDS server inside the UI5 dev server
  17. ui5-middleware-hmrExperimental UI5 middleware for hot module replacement
  18. ui5-middleware-iasyncUI5 middleware syncing interactions across browsers over websocket
  19. ui5-middleware-indexUI5 middleware serving a chosen welcome page at the root path
  20. ui5-middleware-livereloadLive reload middleware for the UI5 dev server
  21. ui5-middleware-oneloginUI5 middleware logging in with Playwright and reusing the session
  22. ui5-middleware-serveframeworkUI5 middleware serving a locally built UI5 framework
  23. ui5-middleware-servestaticUI5 middleware serving static resources from a path or npm package
  24. ui5-middleware-simpleproxyDev-server middleware proxying requests to a backend system
  25. ui5-middleware-ui5UI5 middleware including one UI5 application in another
  26. ui5-middleware-webjarsUI5 middleware serving static resources from JAR files (WebJars)
  27. ui5-middleware-websocketWebSocket support for Express-based dev servers such as UI5's
  28. ui5-task-cachebusterUI5 builder task cachebusting standalone UI5 applications
  29. ui5-task-copyrightUI5 builder task appending copyright headers to source files
  30. ui5-task-flatten-libraryUI5 builder task flattening library output for SAP NetWeaver
  31. ui5-task-i18ncheckUI5 builder task checking XML views for missing i18n texts
  32. ui5-task-minify-xmlUI5 builder task minifying XML views and fragments
  33. ui5-task-pwa-enablerUI5 builder task turning a UI5 app into a progressive web app
  34. ui5-task-zipperBuild task packaging the UI5 build result as a zip archive
  35. ui5-tooling-lessUI5 CLI extension compiling Less files into CSS
  36. ui5-tooling-modulesUI5 tooling extensions loading npm packages as UI5 modules
  37. ui5-tooling-stringreplaceUI5 CLI extension for string replacement during the build
  38. ui5-tooling-transpileUI5 CLI extension transpiling code during the UI5 build
  39. @ui5/loggerInternal logger of the UI5 CLI
  40. @ui5/middleware-code-coverageUI5 CLI middleware for Istanbul code coverage
  41. @ui5/tooling-webcDeprecated UI5 Tooling extensions for UI5 Web Components wrappers
UI5 testing
  1. ui5-test-runnerCommand line running UI5 QUnit and OPA tests in parallel
  2. jest-environment-ui5Jest environment running UI5 unit tests in Node.js
  3. openui5-smart-mockserverUI5 MockServer extension generating mock data with Faker.js
  4. vitest-environment-ui5Vitest environment running UI5 unit tests in Node.js
  5. wdio-qunit-serviceWebdriverIO service running QUnit test pages
  6. @openui5/sap.ui.coreFramework core: module loader, MVC runtime, binding, routing, theming
  7. karma-ui5-transpileKarma preprocessor transpiling UI5 sources via ui5-tooling-transpile
  8. ui5-journey-recorderChrome extension generating OPA5 or wdi5 tests from recorded journeys
  9. wdi5-cucumberwdi5 plugin for Cucumber-style BDD tests on Fiori Elements apps
  10. wdi5-fe-selectorswdi5 selectors for locating controls in Fiori Elements apps
  11. wdio-ui5-serviceEnd-to-end testing for UI5 on WebdriverIO with UI5 control selectors
  12. @ui5/middleware-code-coverageUI5 CLI middleware for Istanbul code coverage
  13. vscode-ui5-odata-mock-generatorVS Code extension generating OData mock data from service metadata

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