Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Oracle JET uses Knockout.js as its default binding layer: Knockout connects ViewModel state to JET components and carries user changes back to that state. JET custom elements provide the UI, while Knockout supplies the observable ViewModel and two-way data binding. Older ojComponent bindings are deprecated; applications moving to JET 12 or later should use custom-element markup and check whether each component also needs ViewModel or DOM changes.

What KnockoutJS does in Oracle JET

Oracle JET follows the Model-View-ViewModel (MVVM) pattern. The model represents application data, the ViewModel exposes the state and behavior the interface needs, and JET HTML5 custom elements render the view. Knockout.js connects the ViewModel to those UI elements through data binding.

In practical terms, Knockout observables let the interface react to ViewModel changes, and let user input update the ViewModel. Oracle describes Knockout as the layer that performs data binding between UI elements and the ViewModel. That relationship is why observables, computed observables, and binding expressions matter when diagnosing a screen that is not updating as expected.

Where data comes from

JET applications can work with data from sources such as REST services, server-sent events, and WebSockets. Oracle’s Common Model and Collection APIs can map records and collections to Knockout observables with oj.KnockoutUtils. The transport or model supplies data; Knockout makes relevant ViewModel state available to the bound interface.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

How changes travel

  • ViewModel to view: when an observable changes, the binding updates the corresponding component state.
  • View to ViewModel: when a user changes a bound control, the value is written back to the ViewModel observable.

This two-way contract is useful, but it also gives you a debugging path: check whether the expected observable changes, whether the expression refers to the intended state, and whether the component property is bound to that expression.

Does Oracle JET still use Knockout?

Yes. Knockout remains the default binding provider for JET custom elements. Its presence does not mean the UI is built from Knockout widgets: the view is rendered by JET custom elements, with Knockout providing the default binding between those elements and the ViewModel.

A subtree that contains no Knockout binding expressions can opt out of that provider with data-oj-binding-provider="none". Oracle’s JET 17.1 guidance says this can allow custom elements in that subtree to finish upgrading without waiting for bindings. This setting is for markup that does not use Knockout expressions; it is not a general replacement for Knockout binding in the rest of an application.

Even when using the no-binding option, wait for the JET BusyContext before interacting with elements whose modules are still loading. Element upgrade and module readiness are separate concerns from whether a subtree uses Knockout bindings.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Legacy ojComponent versus custom elements

Older JET applications may declare components through a Knockout expression such as data-bind="ojComponent: {...}". Oracle’s JET 12 adoption guidance treats this syntax as deprecated and directs applications toward JET custom-element markup. The migration is not always a one-for-one markup substitution: straightforward controls may need only HTML changes, while charts, tables, and DOM-oriented components can also require ViewModel or DOM changes.

Approach What it means Migration consideration
Legacy ojComponent binding Declares a JET component inside a Knockout binding expression. Deprecated; convert to custom-element markup for JET 12 and later, following Oracle’s adoption guidance.
JET custom-element markup Uses the component’s oj-* HTML element as the view. Simple controls may require only markup edits; complex components can also require ViewModel or DOM updates.

How to investigate and migrate an existing screen

Work component by component rather than replacing strings blindly. The binding expression often contains the clues needed to preserve behavior, but complex components may depend on surrounding DOM structure or ViewModel logic.

  1. Inventory the old bindings. Find each ojComponent expression and record its component type, configured properties, callbacks, and surrounding markup.
  2. Trace the binding contract. Identify the observables, computed observables, and event handlers used by each expression. Note which values must update the component and which user actions must write back to state.
  3. Replace the component declaration. Change the legacy binding to the matching oj-* custom element, using Oracle’s migration guidance for the JET version being adopted.
  4. Reconcile component behavior. Check property names and values, event handling, slots, and any ViewModel or DOM changes required by the component. Pay particular attention to charts, tables, and components that interact with DOM structure.
  5. Check readiness and data flow. Confirm that the custom element has upgraded and that modules are ready before code interacts with it. Verify that ViewModel changes reach the component and user input updates the intended observable.

Choosing a binding approach for a subtree

Use the default Knockout binding provider where the markup contains Knockout expressions or depends on Knockout-managed ViewModel state. Use data-oj-binding-provider="none" only for a page or subtree that has no Knockout expressions and where skipping binding-provider work is appropriate. This is an opt-out for a defined region, not a reason to remove Knockout from an application that still relies on observable bindings elsewhere.

JET custom elements can also be wired through programmatic property and event handling rather than declarative Knockout expressions. That changes how state synchronization is implemented: the application must explicitly manage the property and event connections that declarative bindings otherwise provide. The choice depends on the existing application architecture; opting out of the provider does not itself establish those connections.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Starting a new Oracle JET application

Oracle’s setup guidance uses Node.js and the @oracle/ojet-cli package. The ojet create command scaffolds an application, and the CLI supports TypeScript scaffolding as well as JavaScript. Choose the language option appropriate to the project; either way, the architecture still needs a clear ViewModel and a deliberate strategy for component state and events.

Oracle’s official repository listed Oracle JET version 20.1.0 in its 2026 repository state. That version figure describes the repository listing at that time, not a guarantee that it is the newest release available when you read this. Oracle characterizes JET as a toolkit for intermediate to advanced JavaScript developers working on client-side applications.

Where to learn the JET and Knockout model

Oracle Learn’s Week 1 Oracle JET Basics course covers the CLI, architecture, Cookbook, binding and data layers, debugging and testing, localization and accessibility, security, and performance optimization. For self-guided study, Oracle’s documentation covers the architecture and migration rules; a technical book, Oracle JET for Developers (ISBN 9781787284746; 2018 listing), includes a chapter on Knockout JS. The course and book are learning routes, not substitutes for checking migration details against the JET version used by an application.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.