# Table of Contents
- [Getting Started | BaklavaJS](#getting-started-baklavajs)
- [BaklavaJS](#baklavajs)
- [Reference - BaklavaJS](#reference-baklavajs)
- [Forward Engine | BaklavaJS](#forward-engine-baklavajs)
- [Node Lifecycle | BaklavaJS](#node-lifecycle-baklavajs)
- [Core Concepts | BaklavaJS](#core-concepts-baklavajs)
- [Migrating from Baklava V1 | BaklavaJS](#migrating-from-baklava-v1-baklavajs)
- [Dependency Engine | BaklavaJS](#dependency-engine-baklavajs)
- [Browser Build | BaklavaJS](#browser-build-baklavajs)
- [Saving and Loading | BaklavaJS](#saving-and-loading-baklavajs)
- [Registering Nodes | BaklavaJS](#registering-nodes-baklavajs)
- [Pre-defined interfaces | BaklavaJS](#pre-defined-interfaces-baklavajs)
- [Graph Execution | BaklavaJS](#graph-execution-baklavajs)
- [Event System | BaklavaJS](#event-system-baklavajs)
- [Interface Types | BaklavaJS](#interface-types-baklavajs)
- [Toolbar | BaklavaJS](#toolbar-baklavajs)
- [Subgraphs | BaklavaJS](#subgraphs-baklavajs)
- [Commands | BaklavaJS](#commands-baklavajs)
- [Dynamic Nodes | BaklavaJS](#dynamic-nodes-baklavajs)
- [Sidebar | BaklavaJS](#sidebar-baklavajs)
- [Creating Nodes | BaklavaJS](#creating-nodes-baklavajs)
- [Setup | BaklavaJS](#setup-baklavajs)
- [Node Interfaces | BaklavaJS](#node-interfaces-baklavajs)
- [Customization | BaklavaJS](#customization-baklavajs)
- [Reference - BaklavaJS](#reference-baklavajs)
- [NodeInterface | Reference - BaklavaJS](#nodeinterface-reference-baklavajs)
- [@baklavajs/engine | Reference - BaklavaJS](#-baklavajs-engine-reference-baklavajs)
- [@baklavajs/events | Reference - BaklavaJS](#-baklavajs-events-reference-baklavajs)
- [@baklavajs/interface-types | Reference - BaklavaJS](#-baklavajs-interface-types-reference-baklavajs)
- [@baklavajs/renderer-vue | Reference - BaklavaJS](#-baklavajs-renderer-vue-reference-baklavajs)
- [@baklavajs/core | Reference - BaklavaJS](#-baklavajs-core-reference-baklavajs)
- [AbstractNode | Reference - BaklavaJS](#abstractnode-reference-baklavajs)
- [GraphTemplate | Reference - BaklavaJS](#graphtemplate-reference-baklavajs)
- [defineDynamicNode | Reference - BaklavaJS](#definedynamicnode-reference-baklavajs)
- [Connection | Reference - BaklavaJS](#connection-reference-baklavajs)
- [INodeDefinition | Reference - BaklavaJS](#inodedefinition-reference-baklavajs)
- [EngineStatus | Reference - BaklavaJS](#enginestatus-reference-baklavajs)
- [CycleError | Reference - BaklavaJS](#cycleerror-reference-baklavajs)
- [AfterNodeCalculationEventData | Reference - BaklavaJS](#afternodecalculationeventdata-reference-baklavajs)
- [BeforeNodeCalculationEventData | Reference - BaklavaJS](#beforenodecalculationeventdata-reference-baklavajs)
- [BaseEngine | Reference - BaklavaJS](#baseengine-reference-baklavajs)
- [ITopologicalSortingResult | Reference - BaklavaJS](#itopologicalsortingresult-reference-baklavajs)
- [allowMultipleConnections | Reference - BaklavaJS](#allowmultipleconnections-reference-baklavajs)
- [DependencyEngine | Reference - BaklavaJS](#dependencyengine-reference-baklavajs)
- [applyResult | Reference - BaklavaJS](#applyresult-reference-baklavajs)
- [containsCycle | Reference - BaklavaJS](#containscycle-reference-baklavajs)
- [sortTopologically | Reference - BaklavaJS](#sorttopologically-reference-baklavajs)
- [DummyConnection | Reference - BaklavaJS](#dummyconnection-reference-baklavajs)
- [CheckConnectionHookResult | Reference - BaklavaJS](#checkconnectionhookresult-reference-baklavajs)
- [DynamicNode | Reference - BaklavaJS](#dynamicnode-reference-baklavajs)
- [CalculationContext | Reference - BaklavaJS](#calculationcontext-reference-baklavajs)
- [DynamicNodeUpdateResult | Reference - BaklavaJS](#dynamicnodeupdateresult-reference-baklavajs)
- [IAddConnectionEventData | Reference - BaklavaJS](#iaddconnectioneventdata-reference-baklavajs)
- [IConnectionState | Reference - BaklavaJS](#iconnectionstate-reference-baklavajs)
- [IAddNodeTypeEventData | Reference - BaklavaJS](#iaddnodetypeeventdata-reference-baklavajs)
- [GraphInputNode | Reference - BaklavaJS](#graphinputnode-reference-baklavajs)
- [IConnection | Reference - BaklavaJS](#iconnection-reference-baklavajs)
- [IEditorState | Reference - BaklavaJS](#ieditorstate-reference-baklavajs)
- [GraphOutputNode | Reference - BaklavaJS](#graphoutputnode-reference-baklavajs)
- [IDynamicNodeDefinition | Reference - BaklavaJS](#idynamicnodedefinition-reference-baklavajs)
- [Node | Reference - BaklavaJS](#node-reference-baklavajs)
- [Editor | Reference - BaklavaJS](#editor-reference-baklavajs)
- [Graph | Reference - BaklavaJS](#graph-reference-baklavajs)
- [IEngine | Reference - BaklavaJS](#iengine-reference-baklavajs)
- [IGraphInterface | Reference - BaklavaJS](#igraphinterface-reference-baklavajs)
- [IGraphNodeState | Reference - BaklavaJS](#igraphnodestate-reference-baklavajs)
- [IGraphNode | Reference - BaklavaJS](#igraphnode-reference-baklavajs)
- [IGraphState | Reference - BaklavaJS](#igraphstate-reference-baklavajs)
- [IGraphTemplateState | Reference - BaklavaJS](#igraphtemplatestate-reference-baklavajs)
- [INodeInterfaceState | Reference - BaklavaJS](#inodeinterfacestate-reference-baklavajs)
- [INodeState | Reference - BaklavaJS](#inodestate-reference-baklavajs)
- [INodeTypeInformation | Reference - BaklavaJS](#inodetypeinformation-reference-baklavajs)
- [INodeUpdateEventData | Reference - BaklavaJS](#inodeupdateeventdata-reference-baklavajs)
- [IRegisterNodeTypeOptions | Reference - BaklavaJS](#iregisternodetypeoptions-reference-baklavajs)
- [AbstractNodeConstructor | Reference - BaklavaJS](#abstractnodeconstructor-reference-baklavajs)
- [CalculateFunction | Reference - BaklavaJS](#calculatefunction-reference-baklavajs)
- [CalculateFunctionReturnType | Reference - BaklavaJS](#calculatefunctionreturntype-reference-baklavajs)
- [CalculationResult | Reference - BaklavaJS](#calculationresult-reference-baklavajs)
- [CheckConnectionResult | Reference - BaklavaJS](#checkconnectionresult-reference-baklavajs)
- [DynamicNodeDefinition | Reference - BaklavaJS](#dynamicnodedefinition-reference-baklavajs)
- [GraphOutputNodeState | Reference - BaklavaJS](#graphoutputnodestate-reference-baklavajs)
- [GraphInputNodeState | Reference - BaklavaJS](#graphinputnodestate-reference-baklavajs)
- [InterfaceFactory | Reference - BaklavaJS](#interfacefactory-reference-baklavajs)
- [NodeConstructor | Reference - BaklavaJS](#nodeconstructor-reference-baklavajs)
- [NodeInstanceOf | Reference - BaklavaJS](#nodeinstanceof-reference-baklavajs)
- [NodeInterfaceDefinition | Reference - BaklavaJS](#nodeinterfacedefinition-reference-baklavajs)
- [NodeInterfaceDefinitionStates | Reference - BaklavaJS](#nodeinterfacedefinitionstates-reference-baklavajs)
- [NodeInterfaceFactory | Reference - BaklavaJS](#nodeinterfacefactory-reference-baklavajs)
- [NodeInterfaceMiddleware | Reference - BaklavaJS](#nodeinterfacemiddleware-reference-baklavajs)
- [GRAPH_INPUT_NODE_TYPE | Reference - BaklavaJS](#graph-input-node-type-reference-baklavajs)
- [GRAPH_NODE_TYPE_PREFIX | Reference - BaklavaJS](#graph-node-type-prefix-reference-baklavajs)
- [GRAPH_OUTPUT_NODE_TYPE | Reference - BaklavaJS](#graph-output-node-type-reference-baklavajs)
- [createGraphNodeType | Reference - BaklavaJS](#creategraphnodetype-reference-baklavajs)
- [defineNode | Reference - BaklavaJS](#definenode-reference-baklavajs)
- [getGraphNodeTypeString | Reference - BaklavaJS](#getgraphnodetypestring-reference-baklavajs)
- [BaklavaEvent | Reference - BaklavaJS](#baklavaevent-reference-baklavajs)
- [DynamicSequentialHook | Reference - BaklavaJS](#dynamicsequentialhook-reference-baklavajs)
- [ParallelHook | Reference - BaklavaJS](#parallelhook-reference-baklavajs)
- [PreventableBaklavaEvent | Reference - BaklavaJS](#preventablebaklavaevent-reference-baklavajs)
- [SequentialHook | Reference - BaklavaJS](#sequentialhook-reference-baklavajs)
- [IBaklavaEventEmitter | Reference - BaklavaJS](#ibaklavaeventemitter-reference-baklavajs)
- [IBaklavaTapable | Reference - BaklavaJS](#ibaklavatapable-reference-baklavajs)
- [ISubscribableProxy | Reference - BaklavaJS](#isubscribableproxy-reference-baklavajs)
- [Subscribable | Reference - BaklavaJS](#subscribable-reference-baklavajs)
- [EventListener | Reference - BaklavaJS](#eventlistener-reference-baklavajs)
- [GetListenersFn | Reference - BaklavaJS](#getlistenersfn-reference-baklavajs)
- [HookTap | Reference - BaklavaJS](#hooktap-reference-baklavajs)
- [PreventableEventListener | Reference - BaklavaJS](#preventableeventlistener-reference-baklavajs)
- [TokenType | Reference - BaklavaJS](#tokentype-reference-baklavajs)
- [createProxy | Reference - BaklavaJS](#createproxy-reference-baklavajs)
- [BaklavaInterfaceTypesOptions | Reference - BaklavaJS](#baklavainterfacetypesoptions-reference-baklavajs)
- [IConversion | Reference - BaklavaJS](#iconversion-reference-baklavajs)
- [getType | Reference - BaklavaJS](#gettype-reference-baklavajs)
- [NodeInterfaceType | Reference - BaklavaJS](#nodeinterfacetype-reference-baklavajs)
- [setType | Reference - BaklavaJS](#settype-reference-baklavajs)
- [BaklavaInterfaceTypes | Reference - BaklavaJS](#baklavainterfacetypes-reference-baklavajs)
- [setTypeForMultipleConnections | Reference - BaklavaJS](#settypeformultipleconnections-reference-baklavajs)
- [StartSelectionBoxCommand | Reference - BaklavaJS](#startselectionboxcommand-reference-baklavajs)
- [START_SELECTION_BOX_COMMAND | Reference - BaklavaJS](#start-selection-box-command-reference-baklavajs)
- [Components | Reference - BaklavaJS](#components-reference-baklavajs)
- [TemporaryConnectionState | Reference - BaklavaJS](#temporaryconnectionstate-reference-baklavajs)
- [ButtonInterface | Reference - BaklavaJS](#buttoninterface-reference-baklavajs)
- [CheckboxInterface | Reference - BaklavaJS](#checkboxinterface-reference-baklavajs)
- [IntegerInterface | Reference - BaklavaJS](#integerinterface-reference-baklavajs)
- [NumberInterface | Reference - BaklavaJS](#numberinterface-reference-baklavajs)
- [SelectInterface | Reference - BaklavaJS](#selectinterface-reference-baklavajs)
- [SliderInterface | Reference - BaklavaJS](#sliderinterface-reference-baklavajs)
- [SubgraphInputNode | Reference - BaklavaJS](#subgraphinputnode-reference-baklavajs)
- [TextareaInputInterface | Reference - BaklavaJS](#textareainputinterface-reference-baklavajs)
- [IAdvancedSelectInterfaceItem | Reference - BaklavaJS](#iadvancedselectinterfaceitem-reference-baklavajs)
- [TextInputInterface | Reference - BaklavaJS](#textinputinterface-reference-baklavajs)
- [IClipboard | Reference - BaklavaJS](#iclipboard-reference-baklavajs)
- [TextInterface | Reference - BaklavaJS](#textinterface-reference-baklavajs)
- [SubgraphOutputNode | Reference - BaklavaJS](#subgraphoutputnode-reference-baklavajs)
- [ICommand | Reference - BaklavaJS](#icommand-reference-baklavajs)
- [IResolvedDomElements | Reference - BaklavaJS](#iresolveddomelements-reference-baklavajs)
- [IHistory | Reference - BaklavaJS](#ihistory-reference-baklavajs)
- [ISubgraphInterfaceNode | Reference - BaklavaJS](#isubgraphinterfacenode-reference-baklavajs)
- [ICommandHandler | Reference - BaklavaJS](#icommandhandler-reference-baklavajs)
- [ITemporaryConnectionHandler | Reference - BaklavaJS](#itemporaryconnectionhandler-reference-baklavajs)
- [ITemporaryConnection | Reference - BaklavaJS](#itemporaryconnection-reference-baklavajs)
- [IBaklavaViewModel | Reference - BaklavaJS](#ibaklavaviewmodel-reference-baklavajs)
- [IViewNodeState | Reference - BaklavaJS](#iviewnodestate-reference-baklavajs)
- [SetViewNodePropertiesSettings | Reference - BaklavaJS](#setviewnodepropertiessettings-reference-baklavajs)
- [ToolbarCommand | Reference - BaklavaJS](#toolbarcommand-reference-baklavajs)
- [Commands | Reference - BaklavaJS](#commands-reference-baklavajs)
- [IViewSettings | Reference - BaklavaJS](#iviewsettings-reference-baklavajs)
- [ClearClipboardCommand | Reference - BaklavaJS](#clearclipboardcommand-reference-baklavajs)
- [ClearHistoryCommand | Reference - BaklavaJS](#clearhistorycommand-reference-baklavajs)
- [CommitTransactionCommand | Reference - BaklavaJS](#committransactioncommand-reference-baklavajs)
- [ContextMenuItem | Reference - BaklavaJS](#contextmenuitem-reference-baklavajs)
- [CopyCommand | Reference - BaklavaJS](#copycommand-reference-baklavajs)
- [CreateSubgraphCommand | Reference - BaklavaJS](#createsubgraphcommand-reference-baklavajs)
- [DeleteNodesCommand | Reference - BaklavaJS](#deletenodescommand-reference-baklavajs)
- [InputNode | Reference - BaklavaJS](#inputnode-reference-baklavajs)
- [OpenSidebarCommand | Reference - BaklavaJS](#opensidebarcommand-reference-baklavajs)
- [OutputNode | Reference - BaklavaJS](#outputnode-reference-baklavajs)
- [PasteCommand | Reference - BaklavaJS](#pastecommand-reference-baklavajs)
- [RedoCommand | Reference - BaklavaJS](#redocommand-reference-baklavajs)
- [SaveSubgraphCommand | Reference - BaklavaJS](#savesubgraphcommand-reference-baklavajs)
- [SelectInterfaceItem | Reference - BaklavaJS](#selectinterfaceitem-reference-baklavajs)
- [StartTransactionCommand | Reference - BaklavaJS](#starttransactioncommand-reference-baklavajs)
- [SwitchGraph | Reference - BaklavaJS](#switchgraph-reference-baklavajs)
- [SwitchToMainGraphCommand | Reference - BaklavaJS](#switchtomaingraphcommand-reference-baklavajs)
- [UndoCommand | Reference - BaklavaJS](#undocommand-reference-baklavajs)
- [ZoomToFitGraphCommand | Reference - BaklavaJS](#zoomtofitgraphcommand-reference-baklavajs)
- [ZoomToFitNodesCommand | Reference - BaklavaJS](#zoomtofitnodescommand-reference-baklavajs)
- [ZoomToFitRectCommand | Reference - BaklavaJS](#zoomtofitrectcommand-reference-baklavajs)
- [CLEAR_CLIPBOARD_COMMAND | Reference - BaklavaJS](#clear-clipboard-command-reference-baklavajs)
- [CLEAR_HISTORY_COMMAND | Reference - BaklavaJS](#clear-history-command-reference-baklavajs)
- [COMMIT_TRANSACTION_COMMAND | Reference - BaklavaJS](#commit-transaction-command-reference-baklavajs)
- [COPY_COMMAND | Reference - BaklavaJS](#copy-command-reference-baklavajs)
- [CREATE_SUBGRAPH_COMMAND | Reference - BaklavaJS](#create-subgraph-command-reference-baklavajs)
- [DEFAULT_SETTINGS | Reference - BaklavaJS](#default-settings-reference-baklavajs)
- [DEFAULT_TOOLBAR_SUBGRAPH_COMMANDS | Reference - BaklavaJS](#default-toolbar-subgraph-commands-reference-baklavajs)
- [DEFAULT_TOOLBAR_COMMANDS | Reference - BaklavaJS](#default-toolbar-commands-reference-baklavajs)
- [DELETE_NODES_COMMAND | Reference - BaklavaJS](#delete-nodes-command-reference-baklavajs)
- [EditorComponent | Reference - BaklavaJS](#editorcomponent-reference-baklavajs)
- [OPEN_SIDEBAR_COMMAND | Reference - BaklavaJS](#open-sidebar-command-reference-baklavajs)
- [PASTE_COMMAND | Reference - BaklavaJS](#paste-command-reference-baklavajs)
- [REDO_COMMAND | Reference - BaklavaJS](#redo-command-reference-baklavajs)
- [SAVE_SUBGRAPH_COMMAND | Reference - BaklavaJS](#save-subgraph-command-reference-baklavajs)
- [START_TRANSACTION_COMMAND | Reference - BaklavaJS](#start-transaction-command-reference-baklavajs)
- [SUBGRAPH_INPUT_NODE_TYPE | Reference - BaklavaJS](#subgraph-input-node-type-reference-baklavajs)
- [SUBGRAPH_OUTPUT_NODE_TYPE | Reference - BaklavaJS](#subgraph-output-node-type-reference-baklavajs)
- [SWITCH_TO_MAIN_GRAPH_COMMAND | Reference - BaklavaJS](#switch-to-main-graph-command-reference-baklavajs)
- [TOOLBAR_COMMANDS | Reference - BaklavaJS](#toolbar-commands-reference-baklavajs)
- [TOOLBAR_SUBGRAPH_COMMANDS | Reference - BaklavaJS](#toolbar-subgraph-commands-reference-baklavajs)
- [UNDO_COMMAND | Reference - BaklavaJS](#undo-command-reference-baklavajs)
- [useCommandHandler | Reference - BaklavaJS](#usecommandhandler-reference-baklavajs)
- [ZOOM_TO_FIT_GRAPH_COMMAND | Reference - BaklavaJS](#zoom-to-fit-graph-command-reference-baklavajs)
- [ZOOM_TO_FIT_NODES_COMMAND | Reference - BaklavaJS](#zoom-to-fit-nodes-command-reference-baklavajs)
- [ZOOM_TO_FIT_RECT_COMMAND | Reference - BaklavaJS](#zoom-to-fit-rect-command-reference-baklavajs)
- [displayInSidebar | Reference - BaklavaJS](#displayinsidebar-reference-baklavajs)
- [getDomElementOfNode | Reference - BaklavaJS](#getdomelementofnode-reference-baklavajs)
- [getDomElements | Reference - BaklavaJS](#getdomelements-reference-baklavajs)
- [getNodePosition | Reference - BaklavaJS](#getnodeposition-reference-baklavajs)
- [getPortCoordinates | Reference - BaklavaJS](#getportcoordinates-reference-baklavajs)
- [isInputElement | Reference - BaklavaJS](#isinputelement-reference-baklavajs)
- [providePlugin | Reference - BaklavaJS](#provideplugin-reference-baklavajs)
- [provideTemporaryConnection | Reference - BaklavaJS](#providetemporaryconnection-reference-baklavajs)
- [registerCreateSubgraphCommand | Reference - BaklavaJS](#registercreatesubgraphcommand-reference-baklavajs)
- [registerDeleteNodesCommand | Reference - BaklavaJS](#registerdeletenodescommand-reference-baklavajs)
- [registerGraphCommands | Reference - BaklavaJS](#registergraphcommands-reference-baklavajs)
- [registerSaveSubgraphCommand | Reference - BaklavaJS](#registersavesubgraphcommand-reference-baklavajs)
- [registerSidebarCommands | Reference - BaklavaJS](#registersidebarcommands-reference-baklavajs)
- [registerSwitchToMainGraphCommand | Reference - BaklavaJS](#registerswitchtomaingraphcommand-reference-baklavajs)
- [registerZoomToFitCommands | Reference - BaklavaJS](#registerzoomtofitcommands-reference-baklavajs)
- [setNodePosition | Reference - BaklavaJS](#setnodeposition-reference-baklavajs)
- [setViewNodeProperties | Reference - BaklavaJS](#setviewnodeproperties-reference-baklavajs)
- [useBaklava | Reference - BaklavaJS](#usebaklava-reference-baklavajs)
- [useClipboard | Reference - BaklavaJS](#useclipboard-reference-baklavajs)
- [useDragMove | Reference - BaklavaJS](#usedragmove-reference-baklavajs)
- [useGraph | Reference - BaklavaJS](#usegraph-reference-baklavajs)
- [useHistory | Reference - BaklavaJS](#usehistory-reference-baklavajs)
- [useNodeCategories | Reference - BaklavaJS](#usenodecategories-reference-baklavajs)
- [useSwitchGraph | Reference - BaklavaJS](#useswitchgraph-reference-baklavajs)
- [useTemporaryConnection | Reference - BaklavaJS](#usetemporaryconnection-reference-baklavajs)
- [useTransform | Reference - BaklavaJS](#usetransform-reference-baklavajs)
- [useViewModel | Reference - BaklavaJS](#useviewmodel-reference-baklavajs)
---
# Getting Started | BaklavaJS
[Skip to content](https://baklava.tech/getting-started.html#VPContent)
Return to top
Getting Started [](https://baklava.tech/getting-started.html#getting-started)
===============================================================================
Installation [](https://baklava.tech/getting-started.html#installation)
-------------------------------------------------------------------------
TIP
While not recommended, it is possible to use BaklavaJS standalone; without Vue and any build tools. For more information see [Browser Build](https://baklava.tech/browser-build.html)
BaklavaJS is split into multiple packages:
* `@baklavajs/core`: Contains all the core elements that Baklava needs to work
* `@baklavajs/engine`: The engine is used to execute the graph
* `@baklavajs/interface-types`: Adds the functionality to assign types to interfaces, which allows only certain connections to be created
* `@baklavajs/renderer-vue`: Used to display and edit the graph in a Vue 3 application
You can install the packages individually or use the combined `baklavajs` package:
bash
# npm
npm i baklavajs
# yarn
yarn add baklavajs
# pnpm
pnpm add baklavajs
Now you can use Baklava in your Vue application:
vue
Creating your first node [](https://baklava.tech/getting-started.html#creating-your-first-node)
-------------------------------------------------------------------------------------------------
When initializing Baklava, you can't see any nodes in the palette. This is because you haven't registered any nodes yet. To do this, we first need to create a node type, which is essentially a template for the node instances. In object-oriented programming, the node type is similar to a class and the node instances are instances of that class.
To create a node you can use the `defineNode()` method:
ts
// file: MyNode.ts
import { defineNode, NodeInterface, NumberInterface, SelectInterface } from "baklavajs";
export default defineNode({
type: "MyNode",
inputs: {
number1: () => new NumberInterface("Number", 1),
number2: () => new NumberInterface("Number", 10),
operation: () => new SelectInterface("Operation", "Add", ["Add", "Subtract"]).setPort(false),
},
outputs: {
output: () => new NodeInterface("Output", 0),
},
});
Now register the node type so the editor knows it exists:
ts
import MyNode from "./MyNode";
// this code is from the setup function above
const baklava = useBaklava();
baklava.editor.registerNodeType(MyNode);
return { baklava };
That's it! You should now be able to create nodes and connect them.
---
# BaklavaJS
[Skip to content](https://baklava.tech/#VPContent)
BaklavaJS
=========
Graph / node editor in the browser using VueJS
[Get Started](https://baklava.tech/getting-started.html)
[View on GitHub](https://github.com/newcat/baklavajs)
🏗️
Modular
-------
BaklavaJS puts a strong emphasis on extensibility by leveraging a versatile plugin system

Type-Safe
---------
To guarantee type safety, the entirety of the BaklavaJS ecosystem is written in TypeScript
🛠️
Packages
--------
A single package for the core functionality; any other functionality can be added a-la-carte by installing the desired plugins
---
# Reference - BaklavaJS
Reference - BaklavaJS
=====================
BaklavaJS[](https://baklava.tech/api/#baklavajs)
=================================================
 
Graph / node editor in the browser using VueJS
**[Online Demo](https://codesandbox.io/s/baklavajs-v2-example-zpfkec?file=/src/App.vue)
**

| Package | Version |
| --- | --- |
| baklavajs |  |
| @baklavajs/core |  |
| @baklavajs/engine |  |
| @baklavajs/interface-types |  |
| @baklavajs/renderer-vue |  |
| @baklavajs/themes |  |
Introduction[](https://baklava.tech/api/#introduction)
-------------------------------------------------------
BaklavaJS is a graph/node editor for the web. It provides an easy-to-use editor together with the ability to create custom nodes. Aditionally, it puts a strong emphasis on extensibility, which leads to a versatile plugin system. To guarantee type safety, the entirety of the BaklavaJS ecosystem is written in TypeScript.
The core functionality is shipped in the `@baklavajs/core` package. Any other functionality can be added a-la-carte by installing the desired plugins:
* **Engine**: Provides functions to run calculations with the graph.
* **Interface Types**: Adds types to node interfaces and allowing connections only between types that you want to. It can also automatically convert values from one type to another.
* **Vue Renderer**: Displays the editor in the browser using VueJS
* **Themes**: A collection of pre-built themes for BaklavaJS
There is also the `baklavajs` package, which contains the core package as well as all plugins.
Getting Started & Documentation[](https://baklava.tech/api/#getting-started-documentation)
-------------------------------------------------------------------------------------------
You can find the documentation here: [https://baklava.tech](https://baklava.tech/)
BaklavaJS v1[](https://baklava.tech/api/#baklavajs-v1)
-------------------------------------------------------
The old version of BaklavaJS can be found here: [https://github.com/newcat/baklavajs/tree/v1](https://github.com/newcat/baklavajs/tree/v1)
Sponsors[](https://baklava.tech/api/#sponsors)
-----------------------------------------------
### Top Sponsors[](https://baklava.tech/api/#top-sponsors)
[ThePixelDeveloper](https://github.com/ThePixelDeveloper)
· [Reece Dunham](https://github.com/RDIL)
· [Adrian Rudnik](https://github.com/adrianrudnik)
· [Chris Bolton](https://github.com/yochrisbolton)
· [LittleMouseGames](https://github.com/LittleMouseGames)
· [Andrei Bosco B. Torres](https://github.com/andreibosco)
· [eviltik](https://github.com/eviltik)
### Gold Sponsors[](https://baklava.tech/api/#gold-sponsors)
[Tiger Tang](https://github.com/TigerHix)
### Sponsors[](https://baklava.tech/api/#sponsors-1)
[John Nunley](https://github.com/notgull)
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
[BaklavaJS](https://baklava.tech/api/#baklavajs)
* [Introduction](https://baklava.tech/api/#introduction)
* [Getting Started & Documentation](https://baklava.tech/api/#getting-started-documentation)
* [BaklavaJS v1](https://baklava.tech/api/#baklavajs-v1)
* [Sponsors](https://baklava.tech/api/#sponsors)
* * [Top Sponsors](https://baklava.tech/api/#top-sponsors)
* [Gold Sponsors](https://baklava.tech/api/#gold-sponsors)
* [Sponsors](https://baklava.tech/api/#sponsors-1)
---
# Forward Engine | BaklavaJS
[Skip to content](https://baklava.tech/execution/forward.html#VPContent)
Return to top
Forward Engine [](https://baklava.tech/execution/forward.html#forward-engine)
===============================================================================
Info
This engine is still WIP
---
# Node Lifecycle | BaklavaJS
[Skip to content](https://baklava.tech/nodes/lifecycle.html#VPContent)
Return to top
Node Lifecycle [](https://baklava.tech/nodes/lifecycle.html#node-lifecycle)
=============================================================================
Each node exposes lifecycle methods that can be overridden. When using the `defineNode()` approach for creating node types, the lifecycle methods have `this` bound to the node instance.
`onCreate` [](https://baklava.tech/nodes/lifecycle.html#oncreate)
-------------------------------------------------------------------
This method is called when the node is instantiated. It can be seen as the "constructor".
TIP
This lifecycle is only available when using the `defineNode()` approach. When using the class-based approach, use the `constructor` instead
`onPlaced` [](https://baklava.tech/nodes/lifecycle.html#onplaced)
-------------------------------------------------------------------
This method is called as soon as the node instance has been placed into a graph. Therefore, the `this.graph` property has been set and can be used when this method is called.
`onDestroy` [](https://baklava.tech/nodes/lifecycle.html#ondestroy)
---------------------------------------------------------------------
This method is called when the node instance is removed from the graph. You can use this method for clean-up.
---
# Core Concepts | BaklavaJS
[Skip to content](https://baklava.tech/core-concepts.html#VPContent)
Return to top
Core Concepts [](https://baklava.tech/core-concepts.html#core-concepts)
=========================================================================
Baklava consists of different building blocks. This chapter provides a brief overview of those blocks as well as describe, how they relate to each other.
Editor [](https://baklava.tech/core-concepts.html#editor)
-----------------------------------------------------------
The _editor_ is the main model class in Baklava. Everything lives inside the editor. It provides functions for saving and loading, [registering node types](https://baklava.tech/editor/registering-nodes.html)
and allows [subscribing to events](https://baklava.tech/event-system.html)
.
An editor instance always has one main _Graph_, called **root graph** (`editor.graph`). It also maintains a list of all graph instances inside the editor, since graphs can have _[subgraphs](https://baklava.tech/editor/subgraphs.html)
_ inside them. The list can be accessed via `editor.graphs`.
Graph [](https://baklava.tech/core-concepts.html#graph)
---------------------------------------------------------
A _graph_ contains a set of [nodes](https://baklava.tech/nodes/nodes.html)
as well as connections between these nodes. It also provides functions to modify these sets and listen to events.
Graph Template [](https://baklava.tech/core-concepts.html#graph-template)
---------------------------------------------------------------------------
A _graph template_ is basically a "save-state" of a graph. It is used to implement _[subgraphs](https://baklava.tech/editor/subgraphs.html)
_.
Engine [](https://baklava.tech/core-concepts.html#engine)
-----------------------------------------------------------
An _[engine](https://baklava.tech/execution/setup.html)
_ is used to execute logic based on the graph.
---
# Migrating from Baklava V1 | BaklavaJS
[Skip to content](https://baklava.tech/migration.html#VPContent)
Return to top
Migrating from Baklava V1 [](https://baklava.tech/migration.html#migrating-from-baklava-v1)
=============================================================================================
Editor [](https://baklava.tech/migration.html#editor)
-------------------------------------------------------
* Nodes and Connections are not part of the editor anymore. They moved to `editor.graph`
* There is no "plugin" concept anymore. Instead of calling `editor.use(...)` for engine etc., use the new constructors
* The parameters of the `editor.registerNodeType()` method have changed. See the documentation for more details.
Nodes [](https://baklava.tech/migration.html#nodes)
-----------------------------------------------------
* The `NodeBuilder` doesn't exist in V2 anymore. You can either use [class-based](https://baklava.tech/nodes/nodes.html#class-based-approach)
or [declaration-based](https://baklava.tech/nodes/nodes.html#definenode)
approach.
* The [class-based approach](https://baklava.tech/nodes/nodes.html#class-based-approach)
has been completely changed in comparison to v1
* Node options have been removed. They are now interfaces with `.setPort(false)`
* The `calculate` function behaves differently, see [Graph Execution](https://baklava.tech/execution/setup.html)
* The `name` property has been changed to `title` to reduce confusion
* Node interfaces don't receive a `name` prop anymore. Instead, use the `name` property of the interface instance provided by the `intf` prop: `intf.name`
* The sidebar is now per-node instead of per-option / per-interface as before. See TODO: Sidebar
Events [](https://baklava.tech/migration.html#events)
-------------------------------------------------------
* `addListener` has been renamed to `subscribe`
* `removeListener` has been renamed to `unsubscribe`
* The way preventable events works has [slightly changed](https://baklava.tech/event-system.html)
Engine [](https://baklava.tech/migration.html#engine)
-------------------------------------------------------
* Instead of a single engine there are multiple different Engine implementations now. If you want to keep the behavior of the v1 engine, use the new `DependencyEngine`
* There is no longer a boolean parameter for the constructor to enable the calculate-on-change-behavior. Instead, call `engine.start()`
Interface Types [](https://baklava.tech/migration.html#interface-types)
-------------------------------------------------------------------------
* The interface type plugin does not use strings anymore to identify node interface types. Instead, you need to create `NodeInterfaceType`s. See the [documentation](https://baklava.tech/nodes/interface-types.html)
for more information.
* Conversions have to be added directly to the `NodeInterfaceType`.
* It is no longer possible to specify the color of the port using JS/TS. Instead, you need to use CSS.
Vue Renderer [](https://baklava.tech/migration.html#vue-renderer)
-------------------------------------------------------------------
* Since the plugin concept has been abandoned, the `ViewPlugin` is now called `ViewModel`
* The `registerOption` method has been removed, since the options are now directly defined in the node interfaces.
---
# Dependency Engine | BaklavaJS
[Skip to content](https://baklava.tech/execution/dependency.html#VPContent)
Return to top
Dependency Engine [](https://baklava.tech/execution/dependency.html#dependency-engine)
========================================================================================
The dependency engine determines the execution order by [topologically sorting](https://en.wikipedia.org/wiki/Topological_sorting)
the node graph.

In this example, the node execution order is either
* `A -> D -> B -> C`
* `D -> A -> B -> C`
Multiple Connections to a Single Input [](https://baklava.tech/execution/dependency.html#multiple-connections-to-a-single-input)
----------------------------------------------------------------------------------------------------------------------------------
By default, the dependency engine doesn't allow multiple connections to a single input interface. You can, however, opt-in and allow multiple connections:
ts
import { defineNode, NodeInterface } from "@baklavajs/core";
import { allowMultipleConnections } from "@baklavajs/engine";
export default defineNode({
inputs: {
multiple: () => new NodeInterface("Multiple Numbers", []).use(allowMultipleConnections),
},
// ...
});
If you are using TypeScript, make sure the type of your node interface is an array (like `number[]` in this case). The value of the interface is an array with all the values of all incoming connections.
---
# Browser Build | BaklavaJS
[Skip to content](https://baklava.tech/browser-build.html#VPContent)
Return to top
Browser Build [](https://baklava.tech/browser-build.html#browser-build)
=========================================================================
While not recommended, it is possible to use BaklavaJS standalone; without Vue and any build tools.
html
Document
---
# Saving and Loading | BaklavaJS
[Skip to content](https://baklava.tech/editor/saving-loading.html#VPContent)
Return to top
Saving and Loading [](https://baklava.tech/editor/saving-loading.html#saving-and-loading)
===========================================================================================
Saving [](https://baklava.tech/editor/saving-loading.html#saving)
-------------------------------------------------------------------
The editor provides a `[save()](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#save-1) ` method. This method can be used to save the current state into a plain JS object. This object can, for example, be JSONified and saved.
### Saving custom data [](https://baklava.tech/editor/saving-loading.html#saving-custom-data)
It is possible to add additional data to the save object. This can be done using the `afterSave` hook:
ts
node.hooks.afterSave.subscribe(token, (state) => {
state.myCustomValue = "hello world";
return state;
});
If you want to do it for all nodes in all graphs, use the `nodeHooks` property of the editor instance:
ts
editor.nodeHooks.afterSave.subscribe(token, (state, node) => {
state.myCustomValue = "hello world";
return state;
});
Loading [](https://baklava.tech/editor/saving-loading.html#loading)
---------------------------------------------------------------------
Similar to saving, the editor also provides a `[load(state)](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#load-1) ` method. It receives the previously saved JS object as its only parameter.
The function returns an array of strings with every entry in the array being an error that occured during loading. If the array is empty, there were no errors.
### Loading custom data [](https://baklava.tech/editor/saving-loading.html#loading-custom-data)
To load your previously saved custom data, use the `beforeLoad` hook:
ts
node.hooks.beforeLoad.subscribe(token, (state) => {
console.log(state.myCustomValue);
});
If you want to do it for all nodes in all graphs, use the `nodeHooks` property of the editor instance as shown in the example for saving.
---
# Registering Nodes | BaklavaJS
[Skip to content](https://baklava.tech/editor/registering-nodes.html#VPContent)
Return to top
Registering Nodes [](https://baklava.tech/editor/registering-nodes.html#registering-nodes)
============================================================================================
Basic Usage [](https://baklava.tech/editor/registering-nodes.html#basic-usage)
--------------------------------------------------------------------------------
ts
import MyNode from "./MyNode";
editor.registerNodeType(MyNode);
Advanced Options [](https://baklava.tech/editor/registering-nodes.html#advanced-options)
------------------------------------------------------------------------------------------
### Category [](https://baklava.tech/editor/registering-nodes.html#category)
When you have a lot of node types, the node palette can get a bit convoluted. To help your users find node types quicker, you can divide them into **categories**. You don't need to create the category manually; just specify the name of the category when registering the node type:
ts
editor.registerNodeType(MyNode, { category: "My Category" });
### Custom Title [](https://baklava.tech/editor/registering-nodes.html#custom-title)
By default, the node title is determined by the `title` property of the node type. However, you can set a custom title for the node palette:
ts
editor.registerNodeType(MyNode, { title: "Custom title" });
WARNING
This only changes the title in the node palette. It does not change the title of the nodes being created. For that, you need to modify the title property of your node type.
---
# Pre-defined interfaces | BaklavaJS
[Skip to content](https://baklava.tech/nodes/pre-defined-interfaces.html#VPContent)
Return to top
Pre-defined interfaces [](https://baklava.tech/nodes/pre-defined-interfaces.html#pre-defined-interfaces)
==========================================================================================================
ButtonInterface [](https://baklava.tech/nodes/pre-defined-interfaces.html#buttoninterface)
--------------------------------------------------------------------------------------------
Displays a button and calls the provided callback when the button is clicked.
js
import { ButtonInterface } from "baklavajs";
new ButtonInterface("Name", () => console.log("Button clicked"));
CheckboxInterface [](https://baklava.tech/nodes/pre-defined-interfaces.html#checkboxinterface)
------------------------------------------------------------------------------------------------
Displays a checkbox. Expects a `boolean` value.
js
import { CheckboxInterface } from "baklavajs";
new CheckboxInterface("Name", true);
IntegerInterface [](https://baklava.tech/nodes/pre-defined-interfaces.html#integerinterface)
----------------------------------------------------------------------------------------------
Displays a numeric input that accepts integers. You can optionally provide minimum and maximum values.
js
import { IntegerInterface } from "baklavajs";
// without min and max values
new IntegerInterface("Name", 5);
// with min and max values
new IntegerInterface("Name", 5, 0, 10);
NumberInterface [](https://baklava.tech/nodes/pre-defined-interfaces.html#numberinterface)
--------------------------------------------------------------------------------------------
Similar to the [`IntegerInterface`](https://baklava.tech/nodes/pre-defined-interfaces.html#integerinterface)
, but also accepts decimal values.
js
import { NumberInterface } from "baklavajs";
// without min and max values
new NumberInterface("Name", 0.5);
// with min and max values
new NumberInterface("Name", 0.5, 0, 1);
SelectInterface [](https://baklava.tech/nodes/pre-defined-interfaces.html#selectinterface)
--------------------------------------------------------------------------------------------
Displays a dropdown from which a single value can be chosen. Expects a list of possible values as the third parameter. The list of values can either be an array of strings (`string[]`) or an array of objects with this format:
js
{
text: "I will be displayed", // must be a string
value: 1 // can be any type
}
js
import { SelectInterface } from "baklavajs";
new SelectInterface("Name", "Add", ["Add", "Subtract"]);
new SelectInterface("Name", 1, [\
{ text: "A", value: 1 },\
{ text: "B", value: 2 },\
{ text: "C", value: 3 },\
]);
SliderInterface [](https://baklava.tech/nodes/pre-defined-interfaces.html#sliderinterface)
--------------------------------------------------------------------------------------------
Similar to the [`NumberInterface`](https://baklava.tech/nodes/pre-defined-interfaces.html#numberinterface)
but displays a slider instead of increase/decrease buttons. Minimum and maximum values are required for this interface.
js
import { SliderInterface } from "baklavajs";
new SliderInterface("Name", 0.5, 0, 1);
TextInterface [](https://baklava.tech/nodes/pre-defined-interfaces.html#textinterface)
----------------------------------------------------------------------------------------
A simple interface that just displays the value as text. Can't be used to edit the value.
WARNING
The name of this interface will likely change in the future.
js
import { TextInterface } from "baklavajs";
new TextInterface("Name", "Hello World!");
TextInputInterface [](https://baklava.tech/nodes/pre-defined-interfaces.html#textinputinterface)
--------------------------------------------------------------------------------------------------
This interface displays a text field that the user can type into.
js
import { TextInputInterface } from "baklavajs";
new TextInputInterface("Name", "Edit me");
TextareaInputInterface [](https://baklava.tech/nodes/pre-defined-interfaces.html#textareainputinterface)
----------------------------------------------------------------------------------------------------------
This interface displays a textarea field that the user can type into.
js
import { TextareaInputInterface } from "baklavajs";
new TextareaInputInterface("Name", "Edit me");
---
# Graph Execution | BaklavaJS
[Skip to content](https://baklava.tech/execution/setup.html#VPContent)
Return to top
Graph Execution [](https://baklava.tech/execution/setup.html#graph-execution)
===============================================================================
BaklavaJS not only offers a way to edit compute graphs but also to execute them. This is done by _engines_. There are different types of engines which execute the graph in different ways.
* [Dependency Engine](https://baklava.tech/execution/dependency.html)
* [Forward Engine](https://baklava.tech/execution/forward.html)
TIP
If you want the behavior of Baklava V1's engine, use the dependency engine.
There are, however, some prerequisites that are indenpendent of the engine implementation:
Node calculate function [](https://baklava.tech/execution/setup.html#node-calculate-function)
-----------------------------------------------------------------------------------------------
Each node needs to have a caluate function. The calculate function receives the node inputs as a JavaScript object (and optionally some [global calculation data](https://baklava.tech/execution/setup.html#global-calculation-data)
), does the calculation and returns the values for the outputs as a JavaScript object.
Let's take a simple "Add Node" as an example. Mathematically speaking, it should perform this function: `f(a, b) = a + b`. This is done in Baklava as follows:
js
import { defineNode, NodeInterface } from "@baklavajs/core";
import { NumberInterface, SelectInterface } from "@baklavajs/renderer-vue";
export default defineNode({
type: "AddNode",
inputs: {
number1: () => new NumberInterface("Number", 1),
number2: () => new NumberInterface("Number", 10),
},
outputs: {
result: () => new NodeInterface("Result", 0),
},
calculate(inputs) {
return {
result: inputs.number1 + inputs.number2,
};
},
});
`inputs` in this case has the following format:
js
{
number1: 1,
number2: 10
}
Of course the actual values depend on the values of the input interfaces.
The calculate function needs to return an object that contains all the outputs as keys mapping to their corresponding values (see example above).
Setting up the engine [](https://baklava.tech/execution/setup.html#setting-up-the-engine)
-------------------------------------------------------------------------------------------
The general setup is independent of which engine you choose.
js
import { Editor } from "@baklavajs/core";
import { DependencyEngine } from "@baklavajs/engine";
const editor = new Editor();
const engine = new DependencyEngine(editor);
engine.start();
Global calculation data [](https://baklava.tech/execution/setup.html#global-calculation-data)
-----------------------------------------------------------------------------------------------
You can provide data that is passed to every node's `calculate()` function as a second parameter. There are two ways to provide the global calculation to the engine:
### When using the engine in manual mode with `runOnce` [](https://baklava.tech/execution/setup.html#when-using-the-engine-in-manual-mode-with-runonce)
ts
engine.runOnce({ offset: 5 });
### When using the engine in automatic mode (after `engine.start()`) [](https://baklava.tech/execution/setup.html#when-using-the-engine-in-automatic-mode-after-engine-start)
In this case you need to register a hook beforehand. This hook is called for every calculation; except the ones triggered manually with `engine.runOnce()`
ts
const token = Symbol("token");
engine.hooks.gatherCalculationData.subscribe(token, () => {
return { offset: 5 };
});
engine.start();
You can find more information about hooks in the documentation for the [event system](https://baklava.tech/event-system.html)
.
### Consuming global data [](https://baklava.tech/execution/setup.html#consuming-global-data)
You can now use the global data in the `calculate` function of your nodes:
ts
export default defineNode({
// ...
calculate(inputs, { globalValues }) {
return {
result: inputs.number1 + inputs.number2 + globalValues.offset,
};
},
});
Applying the result to the graph [](https://baklava.tech/execution/setup.html#applying-the-result-to-the-graph)
-----------------------------------------------------------------------------------------------------------------
By default, you just get the calculated values of the output interfaces in the calculation result object. The values are not applied to the output interfaces inside the graph. If you want to use the output interfaces to display the calculation result in the graph, you can use the `applyResult` function provided by the engine:
ts
import { applyResult } from "@baklavajs/engine";
const token = Symbol();
engine.events.afterRun.subscribe(token, (result) => {
engine.pause();
applyResult(result, editor);
engine.resume();
});
WARNING
It is important to call `engine.pause()` before calling `applyResult()`. Otherwise it would lead to an infinite loop.
---
# Event System | BaklavaJS
[Skip to content](https://baklava.tech/event-system.html#VPContent)
Return to top
Event System [](https://baklava.tech/event-system.html#event-system)
======================================================================
BaklavaJS uses a custom event system to allow for extensibility and plugins. Each class that supports it has an `events` and/or a `hook` property, which can be used to subscribe to an event or tap into a hook.
Most JS event systems need a reference to the listener function to remove an event listener. However, this doesn't work well with inline arrow-functions. To support such functions as well, Baklava uses so-called `tokens` for adding and removing a listener. The token can be any reference-type (for example and object, array, or `this` when you are in a class) or symbol. It is provided when adding an event listener and provided again when removing the listener.
ts
import { BaklavaEvent } from "@baklavajs/events";
const ev = new BaklavaEvent(null);
const token = Symbol();
ev.subscribe(token, (data) => {
console.log("Event triggered:", data);
});
ev.emit("Hello World");
ev.unsubscribe(token);
ev.emit("This won't be printed");
// Console output:
// Event triggered: Hello World
Events [](https://baklava.tech/event-system.html#events)
----------------------------------------------------------
There are two types of events: _normal_ and _preventable_ events. _Normal_ events are usually fired after an action, to react to that action. _Preventable_ events, on the other hand, are fired before an action and can be used by the listener to prevent the action from happening. This is done by calling the `prevent` function in a listener function. Most preventable events have the `before` prefix in their name.
ts
import { PreventableBaklavaEvent } from "@baklavajs/events";
const ev = new PreventableBaklavaEvent(null);
const token = Symbol();
ev.subscribe(token, (data, prevent) => {
if (data === "prevent me") {
prevent();
return;
}
console.log(data);
});
function emit(data: string) {
if (ev.emit(data)) {
console.log("prevented");
}
}
emit("prevent me");
emit("this works");
// Console output:
// prevented
// this works
This can for example be used to prevent certain connections from being created:
ts
editor.graphEvents.beforeAddConnection.subscribe(token, (conn, prevent) => {
// check, whether the user should be able to create this connection.
if (/* user not allowed to create connection */) {
prevent();
return;
}
});
Hooks [](https://baklava.tech/event-system.html#hooks)
--------------------------------------------------------
Hooks are similar to events, however, hooks have the ability to pass data from one hook to another. They are executed in the order they have been tapped into.
Proxied Events and the Entity Argument [](https://baklava.tech/event-system.html#proxied-events-and-the-entity-argument)
--------------------------------------------------------------------------------------------------------------------------
When you wanted to listen to an event on every node in Baklava v1, you had to subscribe to the event for every node manually. Thanks to _proxied events_ this is no longer the case in Baklava v2.
Let's say you want to listen to the `update` event of every node in all graphs:
ts
const token = Symbol()
editor.nodeEvents.update.subscribe(token, (data, node) => {
// put your code here
});
As you can see, events actually receive two arguments:
1. The event data, like in Baklava v1
2. The entity that emitted the event
In our case this allows us to determine which node emitted the event and do some special handling, for example.
You can find out what event provides what entity type in the API reference, but usually node events provide the emitting node, graph events the emitting graph and so on.
---
# Interface Types | BaklavaJS
[Skip to content](https://baklava.tech/nodes/interface-types.html#VPContent)
Return to top
Interface Types [](https://baklava.tech/nodes/interface-types.html#interface-types)
=====================================================================================
This plugin allows you to add types to node interfaces. By default, two node interfaces can only be connected if they have the same type. You can, however, override this behavior by using conversions.
Usage [](https://baklava.tech/nodes/interface-types.html#usage)
-----------------------------------------------------------------
The plugin is included in the `baklavajs` package. If you installed the packages individually, make sure to also install `@baklavajs/interface-types`
Afterwards you can use the plugin like this:
1. Create the types that you need
js
// Create the types. It is recommended to define them
// in a separate file and import them when creating the nodes.
import { NodeInterfaceType } from "@baklavajs/interface-types";
export const stringType = new NodeInterfaceType("string");
export const numberType = new NodeInterfaceType("number");
export const booleanType = new NodeInterfaceType("boolean");
TIP
The constructor of the `NodeInterfaceType` class expects a name for the type. This name can be arbitrary and is used for [styling](https://baklava.tech/nodes/interface-types.html#styling)
.
2. Create the `BaklavaInterfaceTypes` instance
js
// In your App.vue or wherever you use the
import { BaklavaInterfaceTypes, NodeInterfaceType } from "@baklavajs/interface-types";
import { stringType, numberType, booleanType } from "./interfaceTypes";
const baklavaView = useBaklava();
const editor = baklavaView.editor;
const nodeInterfaceTypes = new BaklavaInterfaceTypes(editor, { viewPlugin: baklavaView });
nodeInterfaceTypes.addTypes(stringType, numberType, booleanType);
3. Set the types of your node interfaces
js
// when creating a node
import { setType } from "@baklavajs/interface-types";
import { stringType } from "./interfaceTypes";
defineNode({
inputs: {
myInput: () => new NodeInterface("My Input", "default1").use(setType, stringType),
},
// ...
});
TypeScript [](https://baklava.tech/nodes/interface-types.html#typescript)
---------------------------------------------------------------------------
When using TypeScript, it is recommended to specify the value type when creating a new `NodeInterfaceType`:
ts
new NodeInterfaceType("number");
This allows typechecking for both conversions, as well as when setting the type for a `NodeInterface`:
ts
const stringType = new NodeInterfaceType("string");
const numberType = new NodeInterfaceType("number");
// Argument of type 'NodeInterfaceType' is not assignable to parameter of type 'NodeInterfaceType'.
// Type 'number' is not assignable to type 'string'.
new NodeInterface("Foo", "value").use(setType, numberType);
// Type 'boolean' is not assignable to type 'string'.
numberType.addConversion(stringType, () => false);
When using `allowMultipleConnections`, use the `setTypeForMultipleConnections` function:
ts
new NodeInterface("Foo", []).use(allowMultipleConnections).use(setTypeForMultipleConnections, numberType);
Conversions [](https://baklava.tech/nodes/interface-types.html#conversions)
-----------------------------------------------------------------------------
By default, only connections between two interfaces of the same type are allowed. To allow one type to be connected to another type, you can create a conversion. A conversion optionally accepts a _transformation function_, that can convert values. This is used when executing the graph.
ts
export const stringType = new NodeInterfaceType("string");
export const numberType = new NodeInterfaceType("number");
stringType.addConversion(numberType, (v) => parseFloat(v));
In this example, node interfaces with type `stringType` can be connected to node interfaces with type `numberType`. Note, however, that conversions are not commutative, meaning while connections from `stringType` to `numberType` are allowed, connections from `numberType` to `stringType` are not! To achieve this, another conversion is needed:
ts
numberType.addConversion(stringType, (v) => (v !== null && v !== undefined && v.toString()) || "0");
Styling [](https://baklava.tech/nodes/interface-types.html#styling)
---------------------------------------------------------------------
It is recommended to tell the user, what type a node interface has. The plugin therefore adds the `data-interface-type` attribute when rendering the node interface. This attribute can be used to style the interfaces using CSS.
Here is an example of how to set the color of the ports depending on the interface type:
css
.baklava-node-interface[data-interface-type="string"] {
--baklava-node-interface-port-color: green;
}
.baklava-node-interface[data-interface-type="number"] {
--baklava-node-interface-port-color: red;
}
.baklava-node-interface[data-interface-type="boolean"] {
--baklava-node-interface-port-color: purple;
}
Options [](https://baklava.tech/nodes/interface-types.html#options)
---------------------------------------------------------------------
The `BaklavaInterfaceTypes` can receive up to two arguments:
* The editor instance (required)
* Configuration options (not required)
The configuration options have the following format:
ts
interface BaklavaInterfaceTypesOptions {
viewPlugin?: IBaklavaView;
engine?: BaseEngine;
}
Both the `viewPlugin` and `engine` are optional. The `viewPlugin` is used for applying the `data-interface-type` attribute on node interfaces. The `engine` plugin is used for applying the conversions during calculation.
Backend Usage [](https://baklava.tech/nodes/interface-types.html#backend-usage)
---------------------------------------------------------------------------------
By default, the `BaklavaInterfaceTypes` constructor expects two arguments: the editor and the return value of the `useBaklava` function. The second parameter, however, is optional and can be omitted. This is especially useful when running BaklavaJS in the backend and just needing the conversions.
js
new BaklavaInterfaceTypes(editor);
---
# Toolbar | BaklavaJS
[Skip to content](https://baklava.tech/visual-editor/toolbar.html#VPContent)
Return to top
Toolbar [](https://baklava.tech/visual-editor/toolbar.html#toolbar)
=====================================================================
The toolbar provides a set of clickable buttons for common editor operations. BaklavaJS includes a default set of commands like copy, paste, undo, redo, and more that can be customized to fit your application's needs.
Default Toolbar [](https://baklava.tech/visual-editor/toolbar.html#default-toolbar)
-------------------------------------------------------------------------------------
By default, the toolbar includes these commands:
* Copy - Copy selected nodes
* Paste - Paste copied nodes
* Delete Selected Nodes - Remove selected nodes from the graph
* Undo - Revert the last action
* Redo - Reapply a reverted action
* Zoom to Fit - Adjust the view to fit all nodes
* Box Select - Enable box selection mode
* Create Subgraph - Create a subgraph from selected nodes
Enabling/Disabling the Toolbar [](https://baklava.tech/visual-editor/toolbar.html#enabling-disabling-the-toolbar)
-------------------------------------------------------------------------------------------------------------------
You can enable or disable the toolbar through view settings:
typescript
// Enable toolbar
baklavaView.settings.toolbar.enabled = true;
// Disable toolbar
baklavaView.settings.toolbar.enabled = false;
Using a Subset of Default Commands [](https://baklava.tech/visual-editor/toolbar.html#using-a-subset-of-default-commands)
---------------------------------------------------------------------------------------------------------------------------
If you want to use only specific default commands, you can import `TOOLBAR_COMMANDS` and select just the ones you need:
typescript
import { useBaklava, TOOLBAR_COMMANDS } from "@baklavajs/renderer-vue";
const baklavaView = useBaklava();
// Use only copy, paste, and undo commands
baklavaView.settings.toolbar.commands = [TOOLBAR_COMMANDS.COPY, TOOLBAR_COMMANDS.PASTE, TOOLBAR_COMMANDS.UNDO];
Adding Custom Commands [](https://baklava.tech/visual-editor/toolbar.html#adding-custom-commands)
---------------------------------------------------------------------------------------------------
You can add your own custom commands to the toolbar by:
1. Registering a new command with the command handler
2. Creating a toolbar command object
3. Adding it to the toolbar commands array
typescript
import { useBaklava, DEFAULT_TOOLBAR_COMMANDS } from "@baklavajs/renderer-vue";
import { defineComponent, h, markRaw } from "vue";
const baklavaView = useBaklava();
// 1. Register a custom command
const CLEAR_ALL_COMMAND = "CLEAR_ALL";
baklavaView.commandHandler.registerCommand(CLEAR_ALL_COMMAND, {
execute: () => {
// Clear all nodes from the graph
baklavaView.displayedGraph.nodes.forEach((node) => {
baklavaView.displayedGraph.removeNode(node);
});
},
// Optional: Define when the command can be executed
canExecute: () => baklavaView.displayedGraph.nodes.length > 0,
});
// 2. & 3. Add the command to the toolbar
baklavaView.settings.toolbar.commands = [\
...DEFAULT_TOOLBAR_COMMANDS,\
{\
command: CLEAR_ALL_COMMAND,\
title: "Clear All", // Tooltip text\
icon: markRaw(\
defineComponent(() => {\
return () => h("div", "Clear All");\
}),\
),\
},\
];
Creating Icons for Custom Commands [](https://baklava.tech/visual-editor/toolbar.html#creating-icons-for-custom-commands)
---------------------------------------------------------------------------------------------------------------------------
You can create custom icons for your toolbar commands in several ways:
1. Using a Vue component:
typescript
import { defineComponent, h, markRaw } from "vue";
const ClearAllIcon = markRaw(defineComponent(() => {
return () => h("div", { class: "my-icon-class" }, "X");
}));
// Use the component as the icon
{
command: CLEAR_ALL_COMMAND,
title: "Clear All",
icon: ClearAllIcon
}
2. Using an SVG icon library:
typescript
import { markRaw } from "vue";
import { TrashIcon } from "@heroicons/vue/24/outline";
// Use the imported icon component directly
{
command: CLEAR_ALL_COMMAND,
title: "Clear All",
icon: markRaw(TrashIcon)
}
Subgraph Toolbar Commands [](https://baklava.tech/visual-editor/toolbar.html#subgraph-toolbar-commands)
---------------------------------------------------------------------------------------------------------
When working with subgraphs, BaklavaJS provides special commands for navigating and working with them:
typescript
import { TOOLBAR_SUBGRAPH_COMMANDS } from "@baklavajs/renderer-vue";
// Default subgraph commands include:
// - SAVE_SUBGRAPH: Save changes to the subgraph
// - SWITCH_TO_MAIN_GRAPH: Return to the main graph
// You can customize the subgraph toolbar:
baklavaView.settings.toolbar.subgraphCommands = [\
TOOLBAR_SUBGRAPH_COMMANDS.SWITCH_TO_MAIN_GRAPH,\
// Add your custom subgraph commands here\
];
Complete Toolbar Customization Example [](https://baklava.tech/visual-editor/toolbar.html#complete-toolbar-customization-example)
-----------------------------------------------------------------------------------------------------------------------------------
Here's a complete example showing how to customize the toolbar:
typescript
import { useBaklava, TOOLBAR_COMMANDS, TOOLBAR_SUBGRAPH_COMMANDS } from "@baklavajs/renderer-vue";
import { defineComponent, h, markRaw } from "vue";
const baklavaView = useBaklava();
// Register a custom command
const TOGGLE_MINIMAP_COMMAND = "TOGGLE_MINIMAP";
baklavaView.commandHandler.registerCommand(TOGGLE_MINIMAP_COMMAND, {
execute: () => {
baklavaView.settings.enableMinimap = !baklavaView.settings.enableMinimap;
},
canExecute: () => true,
});
// Customize the toolbar with a mix of default and custom commands
baklavaView.settings.toolbar.commands = [\
TOOLBAR_COMMANDS.COPY,\
TOOLBAR_COMMANDS.PASTE,\
TOOLBAR_COMMANDS.DELETE_NODES,\
TOOLBAR_COMMANDS.UNDO,\
TOOLBAR_COMMANDS.REDO,\
{\
command: TOGGLE_MINIMAP_COMMAND,\
title: "Toggle Minimap",\
icon: markRaw(\
defineComponent(() => {\
return () => h("div", "Map");\
}),\
),\
},\
];
// Customize subgraph commands
baklavaView.settings.toolbar.subgraphCommands = [\
TOOLBAR_SUBGRAPH_COMMANDS.SAVE_SUBGRAPH,\
TOOLBAR_SUBGRAPH_COMMANDS.SWITCH_TO_MAIN_GRAPH,\
];
By following these patterns, you can fully customize the toolbar to meet your application's specific needs.
---
# Subgraphs | BaklavaJS
[Skip to content](https://baklava.tech/editor/subgraphs.html#VPContent)
Return to top
Subgraphs [](https://baklava.tech/editor/subgraphs.html#subgraphs)
====================================================================
Subgraphs are a way to have graphs inside graphs. The core of the subgraph concept is a [Graph Template](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
. A graph template contains the saved state of a graph (nodes and connections). It can be used to create one or multiple graphs based on the template.
Additionally, a graph template can have inputs and outputs. This allows the graph template to act similar to a node and is the basis for GraphNodes. With this concept, users can create their own reusable nodes from other nodes.
Creating a Subgraph [](https://baklava.tech/editor/subgraphs.html#creating-a-subgraph)
----------------------------------------------------------------------------------------
Users can create subgraphs by
1. Selecting one or more nodes
2. Clicking on the "Create Subgraph" button in the toolbar
This action will also create an entry in the node palette so users are able to create graph nodes for this subgraph.
Editing a Subgraph [](https://baklava.tech/editor/subgraphs.html#editing-a-subgraph)
--------------------------------------------------------------------------------------
Users can edit existing subgraphs by clicking the menu icon on either the subgraph in the node palette or any instance of a subgraph node and selecting "Edit Subgraph". The editor will then switch to _Subgraph Mode_, meaning it displays the subgraph only. Subgraph instances in the corresponding GraphNodes aren't updated until the "Save" or "Back" buttons in the toolbar are pressed.
When in _Subgraph Mode_, users can add inputs and output to the subgraph via the node palette. Other subgraphs can also be added, unless this leads to an infinite recursion (e. g. when adding `Subgraph A` inside `Subgraph A`). If that is the case for a specific subgraph it is not displayed in the node palette.
How it works [](https://baklava.tech/editor/subgraphs.html#how-it-works)
--------------------------------------------------------------------------
Each Graph Node has an internal graph instance that is based on the graph template of the subgraph.
graph TD subgraph Editor subgraph RG\["Root Graph (displayed)"\] subgraph GN1\[GraphNode\] G1\[Graph\] end subgraph GN2\[GraphNode\] G2\[Graph\] end subgraph GN3\[GraphNode\] G3\[Graph\] end end GT\[Graph Template\] G1 -->|references| GT G2 -->|references| GT G3 -->|references| GT end
graph TD subgraph Editor subgraph RG\["Root Graph"\] subgraph GN1\[GraphNode\] G1\[Graph\] end subgraph GN2\[GraphNode\] G2\[Graph\] end subgraph GN3\[GraphNode\] G3\[Graph\] end end DG\["Temporary Graph (displayed)"\] GT\[Graph Template\] G1 -->|references| GT G2 -->|references| GT G3 -->|references| GT DG -->|based on, updates| GT end
---
# Commands | BaklavaJS
[Skip to content](https://baklava.tech/visual-editor/commands.html#VPContent)
Return to top
Commands [](https://baklava.tech/visual-editor/commands.html#commands)
========================================================================
Commands are an abstraction to allow for extension of actions in Baklava. You can do everything related to commands using the [`commandHandler`](https://baklava.tech/api/interfaces/_baklavajs_renderer_vue.ICommandHandler.html)
Executing existing commands [](https://baklava.tech/visual-editor/commands.html#executing-existing-commands)
--------------------------------------------------------------------------------------------------------------
You can invoke an existing command by its name:
ts
import { Commands } from "@baklavajs/renderer-vue";
viewModel.commandHandler.executeCommand(Commands.UNDO_COMMAND);
Creating new commands [](https://baklava.tech/visual-editor/commands.html#creating-new-commands)
--------------------------------------------------------------------------------------------------
Let's say you want to create a command that deletes the node with a given id and returns its node type. You can create the command like this:
ts
import type { ICommandHandler, ICommand } from "../commands";
// first type argument is the return value of the command
// second type argument are the inputs to the command
type MyCommand = ICommand;
viewModel.commandHandler.registerCommand("MyCommand", {
canExecute: (id) => !!viewModel.displayedGraph.findNodeById(id),
execute: (id) => {
const node = viewModel.displayedGraph.findNodeById(id)!;
viewModel.displayedGraph.removeNode(node);
return node.type;
},
});
// for invoking this command:
viewModel.commandHandler.executeCommand("MyCommand", true, "myNodeId");
---
# Dynamic Nodes | BaklavaJS
[Skip to content](https://baklava.tech/nodes/dynamic-nodes.html#VPContent)
Return to top
Dynamic Nodes [](https://baklava.tech/nodes/dynamic-nodes.html#dynamic-nodes)
===============================================================================
Sometimes you may want to have nodes, that have a different set interfaces based on certain parameters. For example, a `Math Node` that can add or subtract two numeric values, but also calculate the sine of a single number.
To easily implement this, you can use the `[defineDynamicNode](https://baklava.tech/api/functions/_baklavajs_core.defineDynamicNode.html) ` function:
js
import { defineDynamicNode, NodeInterface, NumberInterface, SelectInterface } from "baklavajs";
export default defineDynamicNode({
type: "DynamicMathNode",
inputs: {
operation: () => new SelectInterface("Operation", "Addition", ["Addition", "Subtraction", "Sine"]),
},
outputs: {
result: () => new NodeInterface("Result", 0),
},
onUpdate({ operation }) {
if (operation === "Sine") {
return {
inputs: {
input1: () => new NumberInterface("Input", 0),
},
};
} else {
return {
inputs: {
input1: () => new NumberInterface("Input", 0),
input2: () => new NumberInterface("Input", 0),
},
};
}
},
calculate(inputs) {
let result = 0;
switch (inputs.operation) {
case "Addition":
result = inputs.input1 + inputs.input2;
break;
case "Subtraction":
result = inputs.input1 - inputs.input2;
break;
case "Sine":
result = Math.sin(inputs.input1);
break;
}
return { result };
},
});
The definition of a dynamic node is similar to the one of a normal node with these notable differences:
* The inputs and outputs defined as part of the node definition are called _static interfaces_. They are always present in the dynamic node.
* A dynamic node definition requires an `onUpdate` function. This function is called once the node is placed as well as whenever the value of one of the static interfaces changes.
The `onUpdate(inputValues, outputValues)` function receives the values of the static interfaces as parameters. Based on that, it must return an object with the following type:
ts
type DynamicNodeDefinition = Record NodeInterface>;
interface DynamicNodeUpdateResult {
inputs?: DynamicNodeDefinition;
outputs?: DynamicNodeDefinition;
forceUpdateInputs?: string[];
forceUpdateOutputs?: string[];
}
The `inputs` and `outputs` properties have the same format as when defining a normal node. They define, which _dynamic interfaces_ the dynamic node should have based on the values of the static interfaces. The keys of the object are used as identifiers. If an interface with the specified key does not exist on the dynamic node yet, it will be created. Similarly, if there is an interface with a key that is not specified in the `DynamicNodeUpdateResult` it is removed. Essentially, the `DynamicNodeUpdateResult` describes a target state and the dynamic node automatically performs the necessary steps (adding / removing interfaces) to achieve that target state.
Force Updates [](https://baklava.tech/nodes/dynamic-nodes.html#force-updates)
-------------------------------------------------------------------------------
By default, when an interface with a key is specified in the `DynamicNodeUpdateResult` and the key does already exist on the dynamic node, nothing is done for that key. This can be an issue, for example when switching types of node interfaces. Let's consider this `onUpdate` method:
js
onUpdate({ type }) {
return type === "Number"
? { inputs: { myInput: () => new NumberInterface("Input", 0) } }
: { inputs: { myInput: () => new TextInputInterface("Input", "") } };
}
In this case, the `myInput` node interface is not replaced, as the key already exists. To fix this issue, you can provide keys that should always be updated:
js
onUpdate({ type }) {
const inputs = type === "Number"
? { myInput: () => new NumberInterface("Input", 0) }
: { myInput: () => new TextInputInterface("Input", "") };
return {
input,
forceUpdateInputs: ["myInput"]
};
}
Note, however, that this will always delete any interfaces with key `myInput` and therefore destroy all connections to it, even if a node interface of the same type is created afterwards.
---
# Sidebar | BaklavaJS
[Skip to content](https://baklava.tech/visual-editor/sidebar.html#VPContent)
Return to top
The sidebar can be used to display additional settings for a node, that wouldn't fit inside the node (a code editor or a chart).
Defining Sidebar Node Interfaces [](https://baklava.tech/visual-editor/sidebar.html#defining-sidebar-node-interfaces)
-----------------------------------------------------------------------------------------------------------------------
To display a node interface in the sidebar, use the [`displayInSidebar`](https://baklava.tech/api/functions/_baklavajs_renderer_vue.displayInSidebar.html)
function:
ts
import { defineNode, NodeInterface, NumberInterface, SelectInterface, displayInSidebar } from "baklavajs";
export default defineNode({
type: "SidebarNode",
inputs: {
sidebarOption1: () =>
new SelectInterface("Dropdown", "foo", ["foo", "bar", "blub"]).use(displayInSidebar, true).setPort(false),
sidebarOption2: () => new NumberInterface("Test", 4).setHidden(true).use(displayInSidebar, true),
},
});
Opening the Sidebar [](https://baklava.tech/visual-editor/sidebar.html#opening-the-sidebar)
---------------------------------------------------------------------------------------------
There are two options to open the sidebar:
* Use the `OPEN_SIDEBAR` command
* Emit an `openSidebar` event in your node interface display component
For example: `SidebarButton.vue`:
vue
`SidebarNode.ts`:
ts
import { markRaw } from "vue";
import { defineNode, NodeInterface, NumberInterface, SelectInterface, displayInSidebar } from "baklavajs";
import SidebarButton from "./SidebarButton.vue";
export default defineNode({
type: "SidebarNode",
inputs: {
openButton: () =>
new NodeInterface("Open Sidebar", undefined).setComponent(markRaw(SidebarButton)).setPort(false),
sidebarOption1: () =>
new SelectInterface("Dropdown", "foo", ["foo", "bar", "blub"]).use(displayInSidebar, true).setPort(false),
sidebarOption2: () => new NumberInterface("Test", 4).setHidden(true).use(displayInSidebar, true),
},
});
---
# Creating Nodes | BaklavaJS
[Skip to content](https://baklava.tech/nodes/nodes.html#VPContent)
Return to top
Creating Nodes [](https://baklava.tech/nodes/nodes.html#creating-nodes)
=========================================================================
A graph is comprised of nodes as well as connections between these nodes. A node inside the graph can be seen as the instance of a class. You have to define the "class" before being able to create the node.
Each node is similar to a function in programming: It receives input data, performs some calculation and returns output data. For input and output so-called [Node Interfaces](https://baklava.tech/nodes/interfaces.html)
are used. The calculation is done inside the `calculate` function. You can find more about it [here](https://baklava.tech/execution/setup.html)
.
There are two approaches for defining node types:
defineNode() [](https://baklava.tech/nodes/nodes.html#definenode)
-------------------------------------------------------------------
This is the recommended way to create node types as it is easier to understand what's happening and provides more type safety when using TypeScript. The `defineNode` function is similar to the `defineComponent` function of Vue (hence the name). It expects a single argument, which is an object defining the node type.
You can find all the properties of the object [here](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html)
, but these are the most important ones:
* `type`: This is the only required property. The node type is used for saving and loading graphs, for example. It can essentially be seen as the name of your class. Therefore, it has to be unique.
* `title`: (_optional_) The default title of the node. If this property isn't specified, the `type` is used as the default title. (Note that users can rename nodes, so don't rely on the title for identifying nodes).
* `inputs`: (_optional_) An object specifying the input interfaces of the node. The keys are the "handle" for the node interface, while the values are functions that return a `NodeInterface` instance (or an instance of a subclass of `NodeInterface`).
* `outputs`: (_optional_) An object specifying the output interfaces of the node. It has the same structure as the `inputs` object.
* `calculate`: (_optional_) A function that is called whenever the node is executed. You can find more details on the [Graph Execution](https://baklava.tech/execution/setup.html)
page.
Additionally, you can provide [lifecycle callbacks](https://baklava.tech/nodes/lifecycle.html)
.
Let's put it all together into an example. In this case, we want to have a node that receives two numbers, performs an arithmetic operation on them and outputs the result. This means we need three inputs (the two numbers and the arithmetic operation) and one output (the result of the calculation):
ts
import { defineNode, NodeInterface, NumberInterface, SelectInterface } from "baklavajs";
export default defineNode({
type: "MathNode",
inputs: {
number1: () => new NumberInterface("Number", 1),
number2: () => new NumberInterface("Number", 10),
operation: () => new SelectInterface("Operation", "Add", ["Add", "Subtract"]).setPort(false),
},
outputs: {
output: () => new NodeInterface("Output", 0),
},
calculate({ number1, number2, operation }) {
let output: number;
if (operation === "Add") {
output = number1 + number2;
} else if (operation === "Subtract") {
output = number1 - number2;
} else {
throw new Error("Unknown operation: " + operation);
}
return { output };
},
});
There are also other properties that allow you to customize your nodes :
| name | data type | default |
| --- | --- | --- |
| position.x | number | 0 |
| position.y | number | 0 |
| width | number | settings.defaultWidth |
| disablePointerEvents | boolean | false |
| twoColumn | boolean | false |
| reverseY | boolean? | undefined |
ts
import { AbstractNode, CalculateFunction, NodeInterface } from "@baklavajs/core";
import { TextareaInputInterface } from "../src/nodeinterfaces/textareainput/TextareaInputInterface";
import { ButtonInterface } from "../src";
import { InputAnswerInterface } from "./interface/InputAnswerInterface";
export default class AnswerNode extends AbstractNode {
public type = "answer";
public inputs: Record> = {
input: new NodeInterface("Content", ""),
description: new TextareaInputInterface("", "").setPort(false),
};
public outputs: Record> = {};
private counter = 0;
public constructor() {
super();
this.initializeIo();
this.width = 400;
this.title = "Answer";
this.reverseY = true;
}
public addChoice(value?: string) {
const name = "answer" + ++this.counter;
this.addOutput(
name,
new InputAnswerInterface(name, value, () => {
this.removeOutput(name);
}),
);
}
public onPlaced() {
this.addInput("addAnswer", new ButtonInterface("Add " + this.title, () => this.addChoice()));
}
calculate?: CalculateFunction | undefined;
}
Class-based approach [](https://baklava.tech/nodes/nodes.html#class-based-approach)
-------------------------------------------------------------------------------------
For nodes that have dynamic inputs and outputs, it is also possible to use a class-based approach similar to BaklavaJS v1.
WARNING
It is very important to call `this.initializeIo()` in your constructor! Otherwise, the node might not work properly.
Although it doesn't really make sense to use it in this case, here is the `MathNode` from the example above written using the class-based approach:
---
# Setup | BaklavaJS
[Skip to content](https://baklava.tech/visual-editor/setup.html#VPContent)
Return to top
Setup [](https://baklava.tech/visual-editor/setup.html#setup)
===============================================================
View Model [](https://baklava.tech/visual-editor/setup.html#view-model)
-------------------------------------------------------------------------
There is one key component you need when using the visual editor: the _view model_. You can create a new view model by using the [`useBaklava`](https://baklava.tech/api/functions/_baklavajs_renderer_vue.useBaklava.html)
function. The view model has the following type:
ts
interface IBaklavaViewModel {
editor: Editor;
/** Currently displayed graph */
displayedGraph: Graph;
/** True if the currently displayed graph is a subgraph, false if it is the root graph */
isSubgraph: Readonly;
settings: IViewSettings;
commandHandler: ICommandHandler;
history: IHistory;
clipboard: IClipboard;
hooks: {
/** Called whenever a node is rendered */
renderNode: SequentialHook<{ node: AbstractNode; el: HTMLElement }, null>;
/** Called whenever an interface is rendered */
renderInterface: SequentialHook<{ intf: NodeInterface; el: HTMLElement }, null>;
};
switchGraph: (newGraph: Graph | GraphTemplate) => void;
}
The view model is reactive so it can be used in watchers, computed properties, etc.
WARNING
The `useBaklava` function accepts an existing editor instance as parameter. However, because of the way Vue's reactivity system works you'll need to use the viewModel.editor property afterwards instead of your own reference to the editor.
Editor Component [](https://baklava.tech/visual-editor/setup.html#editor-component)
-------------------------------------------------------------------------------------
Now you can pass the view model to the editor component:
vue
To use this component, use the `setComponent()` function of the node interface:
js
import { markRaw } from "vue";
import { NodeInterface } from "baklavajs";
import MyComponent from "MyComponent.vue";
new NodeInterface("My Interface", 0).setComponent(markRaw(MyComponent));
WARNING
Use Vue's `markRaw` function, since the node interface will be made reactive. This can cause performance issues (and will also print warnings to the console).
TIP
If you'll be using the node interface multiple times, it makes sense to [create a custom node interface class](https://baklava.tech/nodes/interfaces.html#extending-the-node-interface-class)
.
Middleware [](https://baklava.tech/nodes/interfaces.html#middleware)
----------------------------------------------------------------------
The node interface class also provides the option to use _middleware_. This can be used to set additional meta-data of the node interface in a type-safe way. A middleware is essentially just a function that is called with the node interface as the first parameter and an arbitrary amount of other parameters.
Let's take the `setType` middleware of the [Interface Types Plugin](https://baklava.tech/nodes/interface-types.html)
as an example:
js
function setType(intf, type) {
intf.type = type.name;
}
// usage - just an example, the interface types plugin works a bit different
new NodeInterface("My Interface", 0).use(setType, "number");
As can be seen, the function just sets a new `type` property on the interface to the value it receives as parameter.
Extending the Node Interface Class [](https://baklava.tech/nodes/interfaces.html#extending-the-node-interface-class)
----------------------------------------------------------------------------------------------------------------------
Always setting the component and middleware when creating a node interface is very tedious and leads to a lot of code duplication. Instead, a new class can be created that extends the base `NodeInterface` (or one of the [pre-defined interfaces](https://baklava.tech/nodes/pre-defined-interfaces.html)
, which in turn are also just subclasses of the base `NodeInterface` class):
js
import { markRaw } from "vue";
import { NodeInterface, setType } from "baklavajs";
import MyComponent from "MyComponent.vue";
class MyNodeInterface extends NodeInterface {
constructor(name: string) {
super(name, 0);
this.setComponent(markRaw(MyComponent));
// this is just an example, the interface types plugin works a bit different
this.use(setType, "number");
}
}
const i = new MyNodeInterface("My Interface");
i.value; // -> 0
i.component === MyComponent; // -> true
i.type; // -> "number"
---
# Customization | BaklavaJS
[Skip to content](https://baklava.tech/visual-editor/customization.html#VPContent)
Return to top
Customization [](https://baklava.tech/visual-editor/customization.html#customization)
=======================================================================================
Baklava offers many levels of customization, from simple theming up to full-blown custom components.
Theming [](https://baklava.tech/visual-editor/customization.html#theming)
---------------------------------------------------------------------------
You can use a theme by installing the `@baklavajs/themes` package and importing the theme-specific CSS file.
For example:
js
import "@baklavajs/themes/syrup-dark.css";
There are currently two themes available:
* Classic (Baklava v1 theme): `classic.css`
* Syrup Dark: `syrup-dark.css`
Baklava's themes make heavy use of CSS variables. This means that you can easily change colors or other visual properties by overriding the values of the variables in your CSS. Check out [this file](https://github.com/newcat/baklavajs/blob/master/packages/themes/src/classic/variables.scss)
for a list of variables.
CSS Classes [](https://baklava.tech/visual-editor/customization.html#css-classes)
-----------------------------------------------------------------------------------
Baklava applies different CSS classes to the HTML elements to make customization via CSS as easy as possible. You can override styles to customize most aspects of the look and feel. Apart from the [standard CSS classes](https://baklava.tech/visual-editor/customization.html#list-of-css-classes)
, Baklava also sets certain `data-` properties you can use for styling.
For example, to make all nodes of type `MyNodeType` have a blue background, you can use the following CSS:
css
.baklava-node[data-node-type="MyNodeType"] {
background-color: lightblue;
}
Custom Components [](https://baklava.tech/visual-editor/customization.html#custom-components)
-----------------------------------------------------------------------------------------------
If these options don't fulfill your needs for customization, you can provide custom components. For this, the editor provides the following slots:
* `background` [(default component)](https://github.com/newcat/baklavajs/blob/master/packages/renderer-vue/src/editor/Background.vue)
* `toolbar` [(default component)](https://github.com/newcat/baklavajs/blob/master/packages/renderer-vue/src/toolbar/Toolbar.vue)
* `palette` [(default component)](https://github.com/newcat/baklavajs/blob/master/packages/renderer-vue/src/nodepalette/NodePalette.vue)
* `connection` [(default component)](https://github.com/newcat/baklavajs/blob/master/packages/renderer-vue/src/connection/ConnectionWrapper.vue)
* Props:
* `connection` (type: `[Connection](https://baklava.tech/api/classes/_baklavajs_core.Connection.html) `)
* `temporaryConnection` [(default component)](https://github.com/newcat/baklavajs/blob/master/packages/renderer-vue/src/connection/TemporaryConnection.vue)
* Props:
* `temporaryConnection` (type: `[ITemporaryConnection](https://baklava.tech/api/interfaces/_baklavajs_core.ITemporaryConnection.html) | null`)
* `node` [(default component)](https://github.com/newcat/baklavajs/blob/master/packages/renderer-vue/src/node/Node.vue)
* Props:
* `node` (type: `[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html) `)
* `selected` (type: `boolean`)
* `select` (type: `() => void`) callback for node being selected
* `sidebar` [(default component)](https://github.com/newcat/baklavajs/blob/master/packages/renderer-vue/src/sidebar/Sidebar.vue)
* `minimap` [(default component)](https://github.com/newcat/baklavajs/blob/master/packages/renderer-vue/src/components/Minimap.vue)
* `contextMenu` [(default component)](https://github.com/newcat/baklavajs/blob/master/packages/renderer-vue/src/components/ContextMenu.vue)
* Props:
* `contextMenu` (type: return value of [`useContextMenu`](https://github.com/newcat/baklavajs/blob/master/packages/renderer-vue/src/contextMenu.ts)
)
There are other components that provide slots as well:
* Node
* `nodeInterface` [(default component)](https://github.com/newcat/baklavajs/blob/master/packages/renderer-vue/src/node/NodeInterface.vue)
* Props:
* `type` (type: `"input"|"output"`)
* `node` (type: `[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html) `)
* `intf` (type: `[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html) `)
* NodeInterface
* `portTooltip` [(default component)](https://github.com/newcat/baklavajs/blob/master/packages/renderer-vue/src/node/NodeInterface.vue#L11-L13)
* Props:
* `showTooltip` (type: `boolean`)
So, for example, if you want to use a custom component for a certain node type, you could do it like this:
vue
List of CSS Classes [](https://baklava.tech/visual-editor/customization.html#list-of-css-classes)
---------------------------------------------------------------------------------------------------
Below you can find a list of CSS classes used in Baklava:
* **Editor:**
* `baklava-editor`: Base class for the editor
* **Nodes:**
* `baklava-node`: Base class for each node
* `--selected`: Applied when a node is selected
* `--dragging`: Applied when a node is being dragged
* `--two-column`: Applied if a node is a two-column node
* `--palette`: Applied to a node if it is used as an entry in the node palette
* `__title`: Title (top-bar) of a node
* `__title-label`: Actual title (label) of the node
* `__menu`: Contains the three dots (menu button) on the right side of each node
* `__content`: Container for the inputs and outputs of the node
* `__inputs`: Container for all inputs
* `__outputs`: Container for all outputs
* **Node Interfaces:**
* `baklava-node-interface`: Base class for each node interface
* `--input`: Applied when the node interface is an input
* `--output`: Applied when the node interface is an output
* `--connected`: Applied when the node interface has a connection
* `__port`: The "dot" via which the node interface can be connected
* `__tooltip`: The tooltip that is shown when hovering over the node interface
* **Connection:**
* `baklava-connection`: Base class for each connection
* `--temporary`: Applied when the connection is still being dragged (in the process of being created or changed)
* `--allowed`: Applied when the connection can be created (the default styles display the connection green in this case)
* `--forbidden`: Applied when the connection can not be created (the default styles display the connection red in this case) or when this connection would be destroyed when creating a different connection
* **Sidebar:**
* `baklava-sidebar`: Base class for the sidebar
* `--open`: Applied when the sidebar should be visible
* `__resizer`: Handle for resizing the sidebar
* `__header`: Header of the sidebar.
* `__close`: Close button
* `__node-name`: The title of the currently selected node
* `__interface`: Each interface shown in the sidebar
* **Toolbar:**
* `baklava-toolbar`: Base class for the toolbar
* `baklava-toolbar-entry`: Base class for each entry in the toolbar
* `baklava-toolbar-button`: This class is applied to every entry that is clickable
* **Others:**
* `baklava-node-palette`: Base class for the node palette
---
# Reference - BaklavaJS
Reference - BaklavaJS
=====================
Modules
-------
[@baklavajs/core](https://baklava.tech/api/modules/_baklavajs_core.html)
[](https://baklava.tech/api/modules.html#baklavajscore)
[@baklavajs/engine](https://baklava.tech/api/modules/_baklavajs_engine.html)
[](https://baklava.tech/api/modules.html#baklavajsengine)
[@baklavajs/events](https://baklava.tech/api/modules/_baklavajs_events.html)
[](https://baklava.tech/api/modules.html#baklavajsevents)
[@baklavajs/interface-types](https://baklava.tech/api/modules/_baklavajs_interface-types.html)
[](https://baklava.tech/api/modules.html#baklavajsinterface-types)
[@baklavajs/renderer-vue](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html)
[](https://baklava.tech/api/modules.html#baklavajsrenderer-vue)
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Modules
[@baklavajs/core](https://baklava.tech/api/modules.html#baklavajscore)
[@baklavajs/engine](https://baklava.tech/api/modules.html#baklavajsengine)
[@baklavajs/events](https://baklava.tech/api/modules.html#baklavajsevents)
[@baklavajs/interface-types](https://baklava.tech/api/modules.html#baklavajsinterface-types)
[@baklavajs/renderer-vue](https://baklava.tech/api/modules.html#baklavajsrenderer-vue)
---
# NodeInterface | Reference - BaklavaJS
* [@baklavajs/core](https://baklava.tech/api/modules/_baklavajs_core.html)
* [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
Class NodeInterface
======================
#### Type Parameters
* T = any
#### Implements
* IBaklavaEventEmitter
* IBaklavaTapable
##### Index
### Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructor)
### Properties
[component?](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#component)
[events](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#events)
[hidden](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#hidden)
[hooks](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#hooks)
[id](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#id)
[isInput?](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#isinput)
[name](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#name)
[nodeId](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#nodeid)
[port](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#port)
[templateId?](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#templateid)
### Accessors
[connectionCount](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#connectioncount)
[value](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#value)
### Methods
[load](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#load)
[save](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#save)
[setComponent](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#setcomponent)
[setHidden](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#sethidden)
[setPort](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#setport)
[use](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#use)
Constructors
------------
### constructor[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructor)
* new NodeInterface<[T](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterfacet)
\= any\>(name: string, value: [T](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterfacet)
): [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
<[T](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterfacet)
\>[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterface)
#### Type Parameters
* T = any
#### Parameters
* name: string
* value: [T](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterfacet)
#### Returns [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
<[T](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterfacet)
\>
Properties
----------
### `Optional`component[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#component)
component?: any
The component which will be displayed when the interface is not connected or port === false
### events[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#events)
events: {
beforeSetValue: PreventableBaklavaEvent<[T](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterfacet)
, [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
<[T](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterfacet)
\>\>;
setConnectionCount: BaklavaEvent\>;
setValue: BaklavaEvent<[T](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterfacet)
, [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
<[T](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterfacet)
\>\>;
updated: BaklavaEvent\>;
} = ...
### hidden[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#hidden)
hidden: boolean = false
Whether to hide the node interface in the UI
### hooks[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#hooks)
hooks: {
load: SequentialHook<
[INodeInterfaceState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeInterfaceState.html)
<[T](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterfacet)
\>,
[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
<[T](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterfacet)
\>,
[INodeInterfaceState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeInterfaceState.html)
<[T](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterfacet)
\>,
\>;
save: SequentialHook<
[INodeInterfaceState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeInterfaceState.html)
<[T](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterfacet)
\>,
[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
<[T](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterfacet)
\>,
[INodeInterfaceState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeInterfaceState.html)
<[T](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterfacet)
\>,
\>;
} = ...
### id[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#id)
id: string = ...
### `Optional`isInput[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#isinput)
isInput?: boolean
Will be set automatically after the node was created
### name[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#name)
name: string
Display name of the interface
### nodeId[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#nodeid)
nodeId: string = ""
Id of the node this interface is part of
### port[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#port)
port: boolean = true
Whether to show the port (the thing connections connect to)
### `Optional`templateId[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#templateid)
templateId?: string
If the interface is instantiated by a graph template, this property will be set to the id of the corresponding instance in the template
Accessors
---------
### connectionCount[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#connectioncount)
* get connectionCount(): number
#### Returns number
* set connectionCount(v: number): void
#### Parameters
* v: number
#### Returns void
### value[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#value)
* get value(): [T](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterfacet)
#### Returns [T](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterfacet)
* set value(v: [T](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterfacet)
): void
#### Parameters
* v: [T](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterfacet)
#### Returns void
Methods
-------
### load[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#load)
* load(state: [INodeInterfaceState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeInterfaceState.html)
<[T](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterfacet)
\>): void[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#load-1)
#### Parameters
* state: [INodeInterfaceState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeInterfaceState.html)
<[T](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterfacet)
\>
#### Returns void
### save[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#save)
* save(): [INodeInterfaceState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeInterfaceState.html)
<[T](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterfacet)
\>[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#save-1)
#### Returns [INodeInterfaceState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeInterfaceState.html)
<[T](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterfacet)
\>
### setComponent[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#setcomponent)
* setComponent(value: any): this[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#setcomponent-1)
#### Parameters
* value: any
#### Returns this
### setHidden[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#sethidden)
* setHidden(value: boolean): this[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#sethidden-1)
#### Parameters
* value: boolean
#### Returns this
### setPort[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#setport)
* setPort(value: boolean): this[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#setport-1)
#### Parameters
* value: boolean
#### Returns this
### use[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#use)
* use<[A](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#usea)
extends any\[\]\>(
middleware: [NodeInterfaceMiddleware](https://baklava.tech/api/types/_baklavajs_core.NodeInterfaceMiddleware.html)
<[T](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterfacet)
, [A](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#usea)
\>,
...args: [A](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#usea)
,
): this[](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#use-1)
#### Type Parameters
* A extends any\[\]
#### Parameters
* middleware: [NodeInterfaceMiddleware](https://baklava.tech/api/types/_baklavajs_core.NodeInterfaceMiddleware.html)
<[T](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructornodeinterfacet)
, [A](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#usea)
\>
* ...args: [A](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#usea)
#### Returns this
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#constructor)
Properties
[component](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#component)
[events](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#events)
[hidden](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#hidden)
[hooks](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#hooks)
[id](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#id)
[isInput](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#isinput)
[name](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#name)
[nodeId](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#nodeid)
[port](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#port)
[templateId](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#templateid)
Accessors
[connectionCount](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#connectioncount)
[value](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#value)
Methods
[load](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#load)
[save](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#save)
[setComponent](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#setcomponent)
[setHidden](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#sethidden)
[setPort](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#setport)
[use](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html#use)
MMNEPVFCICPMFPCPTTAAATR
---
# @baklavajs/engine | Reference - BaklavaJS
* [@baklavajs/engine](https://baklava.tech/api/modules/_baklavajs_engine.html)
Module @baklavajs/engine
========================
Enumerations
------------
[EngineStatus](https://baklava.tech/api/enums/_baklavajs_engine.EngineStatus.html)
[](https://baklava.tech/api/modules/_baklavajs_engine.html#enginestatus)
Classes
-------
[BaseEngine](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html)
[](https://baklava.tech/api/modules/_baklavajs_engine.html#baseengine)
[CycleError](https://baklava.tech/api/classes/_baklavajs_engine.CycleError.html)
[](https://baklava.tech/api/modules/_baklavajs_engine.html#cycleerror)
[DependencyEngine](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html)
[](https://baklava.tech/api/modules/_baklavajs_engine.html#dependencyengine)
Interfaces
----------
[AfterNodeCalculationEventData](https://baklava.tech/api/interfaces/_baklavajs_engine.AfterNodeCalculationEventData.html)
[](https://baklava.tech/api/modules/_baklavajs_engine.html#afternodecalculationeventdata)
[BeforeNodeCalculationEventData](https://baklava.tech/api/interfaces/_baklavajs_engine.BeforeNodeCalculationEventData.html)
[](https://baklava.tech/api/modules/_baklavajs_engine.html#beforenodecalculationeventdata)
[ITopologicalSortingResult](https://baklava.tech/api/interfaces/_baklavajs_engine.ITopologicalSortingResult.html)
[](https://baklava.tech/api/modules/_baklavajs_engine.html#itopologicalsortingresult)
Functions
---------
[allowMultipleConnections](https://baklava.tech/api/functions/_baklavajs_engine.allowMultipleConnections.html)
[](https://baklava.tech/api/modules/_baklavajs_engine.html#allowmultipleconnections)
[applyResult](https://baklava.tech/api/functions/_baklavajs_engine.applyResult.html)
[](https://baklava.tech/api/modules/_baklavajs_engine.html#applyresult)
[containsCycle](https://baklava.tech/api/functions/_baklavajs_engine.containsCycle.html)
[](https://baklava.tech/api/modules/_baklavajs_engine.html#containscycle)
[sortTopologically](https://baklava.tech/api/functions/_baklavajs_engine.sortTopologically.html)
[](https://baklava.tech/api/modules/_baklavajs_engine.html#sorttopologically)
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Enumerations
[EngineStatus](https://baklava.tech/api/modules/_baklavajs_engine.html#enginestatus)
Classes
[BaseEngine](https://baklava.tech/api/modules/_baklavajs_engine.html#baseengine)
[CycleError](https://baklava.tech/api/modules/_baklavajs_engine.html#cycleerror)
[DependencyEngine](https://baklava.tech/api/modules/_baklavajs_engine.html#dependencyengine)
Interfaces
[AfterNodeCalculationEventData](https://baklava.tech/api/modules/_baklavajs_engine.html#afternodecalculationeventdata)
[BeforeNodeCalculationEventData](https://baklava.tech/api/modules/_baklavajs_engine.html#beforenodecalculationeventdata)
[ITopologicalSortingResult](https://baklava.tech/api/modules/_baklavajs_engine.html#itopologicalsortingresult)
Functions
[allowMultipleConnections](https://baklava.tech/api/modules/_baklavajs_engine.html#allowmultipleconnections)
[applyResult](https://baklava.tech/api/modules/_baklavajs_engine.html#applyresult)
[containsCycle](https://baklava.tech/api/modules/_baklavajs_engine.html#containscycle)
[sortTopologically](https://baklava.tech/api/modules/_baklavajs_engine.html#sorttopologically)
MMNEPVFCICPMFPCPTTAAATR
---
# @baklavajs/events | Reference - BaklavaJS
* [@baklavajs/events](https://baklava.tech/api/modules/_baklavajs_events.html)
Module @baklavajs/events
========================
Classes
-------
[BaklavaEvent](https://baklava.tech/api/classes/_baklavajs_events.BaklavaEvent.html)
[](https://baklava.tech/api/modules/_baklavajs_events.html#baklavaevent)
[DynamicSequentialHook](https://baklava.tech/api/classes/_baklavajs_events.DynamicSequentialHook.html)
[](https://baklava.tech/api/modules/_baklavajs_events.html#dynamicsequentialhook)
[ParallelHook](https://baklava.tech/api/classes/_baklavajs_events.ParallelHook.html)
[](https://baklava.tech/api/modules/_baklavajs_events.html#parallelhook)
[PreventableBaklavaEvent](https://baklava.tech/api/classes/_baklavajs_events.PreventableBaklavaEvent.html)
[](https://baklava.tech/api/modules/_baklavajs_events.html#preventablebaklavaevent)
[SequentialHook](https://baklava.tech/api/classes/_baklavajs_events.SequentialHook.html)
[](https://baklava.tech/api/modules/_baklavajs_events.html#sequentialhook)
[Subscribable](https://baklava.tech/api/classes/_baklavajs_events.Subscribable.html)
[](https://baklava.tech/api/modules/_baklavajs_events.html#subscribable)
Interfaces
----------
[IBaklavaEventEmitter](https://baklava.tech/api/interfaces/_baklavajs_events.IBaklavaEventEmitter.html)
[](https://baklava.tech/api/modules/_baklavajs_events.html#ibaklavaeventemitter)
[IBaklavaTapable](https://baklava.tech/api/interfaces/_baklavajs_events.IBaklavaTapable.html)
[](https://baklava.tech/api/modules/_baklavajs_events.html#ibaklavatapable)
[ISubscribableProxy](https://baklava.tech/api/interfaces/_baklavajs_events.ISubscribableProxy.html)
[](https://baklava.tech/api/modules/_baklavajs_events.html#isubscribableproxy)
Type Aliases
------------
[EventListener](https://baklava.tech/api/types/_baklavajs_events.EventListener.html)
[](https://baklava.tech/api/modules/_baklavajs_events.html#eventlistener)
[GetListenersFn](https://baklava.tech/api/types/_baklavajs_events.GetListenersFn.html)
[](https://baklava.tech/api/modules/_baklavajs_events.html#getlistenersfn)
[HookTap](https://baklava.tech/api/types/_baklavajs_events.HookTap.html)
[](https://baklava.tech/api/modules/_baklavajs_events.html#hooktap)
[PreventableEventListener](https://baklava.tech/api/types/_baklavajs_events.PreventableEventListener.html)
[](https://baklava.tech/api/modules/_baklavajs_events.html#preventableeventlistener)
[TokenType](https://baklava.tech/api/types/_baklavajs_events.TokenType.html)
[](https://baklava.tech/api/modules/_baklavajs_events.html#tokentype)
Functions
---------
[createProxy](https://baklava.tech/api/functions/_baklavajs_events.createProxy.html)
[](https://baklava.tech/api/modules/_baklavajs_events.html#createproxy)
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Classes
[BaklavaEvent](https://baklava.tech/api/modules/_baklavajs_events.html#baklavaevent)
[DynamicSequentialHook](https://baklava.tech/api/modules/_baklavajs_events.html#dynamicsequentialhook)
[ParallelHook](https://baklava.tech/api/modules/_baklavajs_events.html#parallelhook)
[PreventableBaklavaEvent](https://baklava.tech/api/modules/_baklavajs_events.html#preventablebaklavaevent)
[SequentialHook](https://baklava.tech/api/modules/_baklavajs_events.html#sequentialhook)
[Subscribable](https://baklava.tech/api/modules/_baklavajs_events.html#subscribable)
Interfaces
[IBaklavaEventEmitter](https://baklava.tech/api/modules/_baklavajs_events.html#ibaklavaeventemitter)
[IBaklavaTapable](https://baklava.tech/api/modules/_baklavajs_events.html#ibaklavatapable)
[ISubscribableProxy](https://baklava.tech/api/modules/_baklavajs_events.html#isubscribableproxy)
Type Aliases
[EventListener](https://baklava.tech/api/modules/_baklavajs_events.html#eventlistener)
[GetListenersFn](https://baklava.tech/api/modules/_baklavajs_events.html#getlistenersfn)
[HookTap](https://baklava.tech/api/modules/_baklavajs_events.html#hooktap)
[PreventableEventListener](https://baklava.tech/api/modules/_baklavajs_events.html#preventableeventlistener)
[TokenType](https://baklava.tech/api/modules/_baklavajs_events.html#tokentype)
Functions
[createProxy](https://baklava.tech/api/modules/_baklavajs_events.html#createproxy)
MMNEPVFCICPMFPCPTTAAATR
---
# @baklavajs/interface-types | Reference - BaklavaJS
* [@baklavajs/interface-types](https://baklava.tech/api/modules/_baklavajs_interface-types.html)
Module @baklavajs/interface-types
=================================
Classes
-------
[BaklavaInterfaceTypes](https://baklava.tech/api/classes/_baklavajs_interface-types.BaklavaInterfaceTypes.html)
[](https://baklava.tech/api/modules/_baklavajs_interface-types.html#baklavainterfacetypes)
[NodeInterfaceType](https://baklava.tech/api/classes/_baklavajs_interface-types.NodeInterfaceType.html)
[](https://baklava.tech/api/modules/_baklavajs_interface-types.html#nodeinterfacetype)
Interfaces
----------
[BaklavaInterfaceTypesOptions](https://baklava.tech/api/interfaces/_baklavajs_interface-types.BaklavaInterfaceTypesOptions.html)
[](https://baklava.tech/api/modules/_baklavajs_interface-types.html#baklavainterfacetypesoptions)
[IConversion](https://baklava.tech/api/interfaces/_baklavajs_interface-types.IConversion.html)
[](https://baklava.tech/api/modules/_baklavajs_interface-types.html#iconversion)
Functions
---------
[getType](https://baklava.tech/api/functions/_baklavajs_interface-types.getType.html)
[](https://baklava.tech/api/modules/_baklavajs_interface-types.html#gettype)
[setType](https://baklava.tech/api/functions/_baklavajs_interface-types.setType.html)
[](https://baklava.tech/api/modules/_baklavajs_interface-types.html#settype)
[setTypeForMultipleConnections](https://baklava.tech/api/functions/_baklavajs_interface-types.setTypeForMultipleConnections.html)
[](https://baklava.tech/api/modules/_baklavajs_interface-types.html#settypeformultipleconnections)
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Classes
[BaklavaInterfaceTypes](https://baklava.tech/api/modules/_baklavajs_interface-types.html#baklavainterfacetypes)
[NodeInterfaceType](https://baklava.tech/api/modules/_baklavajs_interface-types.html#nodeinterfacetype)
Interfaces
[BaklavaInterfaceTypesOptions](https://baklava.tech/api/modules/_baklavajs_interface-types.html#baklavainterfacetypesoptions)
[IConversion](https://baklava.tech/api/modules/_baklavajs_interface-types.html#iconversion)
Functions
[getType](https://baklava.tech/api/modules/_baklavajs_interface-types.html#gettype)
[setType](https://baklava.tech/api/modules/_baklavajs_interface-types.html#settype)
[setTypeForMultipleConnections](https://baklava.tech/api/modules/_baklavajs_interface-types.html#settypeformultipleconnections)
MMNEPVFCICPMFPCPTTAAATR
---
# @baklavajs/renderer-vue | Reference - BaklavaJS
* [@baklavajs/renderer-vue](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html)
Module @baklavajs/renderer-vue
==============================
Namespaces
----------
[Commands](https://baklava.tech/api/modules/_baklavajs_renderer-vue.Commands.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#commands)
[Components](https://baklava.tech/api/modules/_baklavajs_renderer-vue.Components.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#components)
Enumerations
------------
[TemporaryConnectionState](https://baklava.tech/api/enums/_baklavajs_renderer-vue.TemporaryConnectionState.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#temporaryconnectionstate)
Classes
-------
[ButtonInterface](https://baklava.tech/api/classes/_baklavajs_renderer-vue.ButtonInterface.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#buttoninterface)
[CheckboxInterface](https://baklava.tech/api/classes/_baklavajs_renderer-vue.CheckboxInterface.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#checkboxinterface)
[IntegerInterface](https://baklava.tech/api/classes/_baklavajs_renderer-vue.IntegerInterface.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#integerinterface)
[NumberInterface](https://baklava.tech/api/classes/_baklavajs_renderer-vue.NumberInterface.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#numberinterface)
[SelectInterface](https://baklava.tech/api/classes/_baklavajs_renderer-vue.SelectInterface.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#selectinterface)
[SliderInterface](https://baklava.tech/api/classes/_baklavajs_renderer-vue.SliderInterface.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#sliderinterface)
[SubgraphInputNode](https://baklava.tech/api/classes/_baklavajs_renderer-vue.SubgraphInputNode.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#subgraphinputnode)
[SubgraphOutputNode](https://baklava.tech/api/classes/_baklavajs_renderer-vue.SubgraphOutputNode.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#subgraphoutputnode)
[TextareaInputInterface](https://baklava.tech/api/classes/_baklavajs_renderer-vue.TextareaInputInterface.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#textareainputinterface)
[TextInputInterface](https://baklava.tech/api/classes/_baklavajs_renderer-vue.TextInputInterface.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#textinputinterface)
[TextInterface](https://baklava.tech/api/classes/_baklavajs_renderer-vue.TextInterface.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#textinterface)
Interfaces
----------
[IAdvancedSelectInterfaceItem](https://baklava.tech/api/interfaces/_baklavajs_renderer-vue.IAdvancedSelectInterfaceItem.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#iadvancedselectinterfaceitem)
[IBaklavaViewModel](https://baklava.tech/api/interfaces/_baklavajs_renderer-vue.IBaklavaViewModel.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#ibaklavaviewmodel)
[IClipboard](https://baklava.tech/api/interfaces/_baklavajs_renderer-vue.IClipboard.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#iclipboard)
[ICommand](https://baklava.tech/api/interfaces/_baklavajs_renderer-vue.ICommand.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#icommand)
[ICommandHandler](https://baklava.tech/api/interfaces/_baklavajs_renderer-vue.ICommandHandler.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#icommandhandler)
[IHistory](https://baklava.tech/api/interfaces/_baklavajs_renderer-vue.IHistory.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#ihistory)
[IResolvedDomElements](https://baklava.tech/api/interfaces/_baklavajs_renderer-vue.IResolvedDomElements.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#iresolveddomelements)
[ISubgraphInterfaceNode](https://baklava.tech/api/interfaces/_baklavajs_renderer-vue.ISubgraphInterfaceNode.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#isubgraphinterfacenode)
[ITemporaryConnection](https://baklava.tech/api/interfaces/_baklavajs_renderer-vue.ITemporaryConnection.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#itemporaryconnection)
[ITemporaryConnectionHandler](https://baklava.tech/api/interfaces/_baklavajs_renderer-vue.ITemporaryConnectionHandler.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#itemporaryconnectionhandler)
[IViewNodeState](https://baklava.tech/api/interfaces/_baklavajs_renderer-vue.IViewNodeState.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#iviewnodestate)
[IViewSettings](https://baklava.tech/api/interfaces/_baklavajs_renderer-vue.IViewSettings.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#iviewsettings)
[SetViewNodePropertiesSettings](https://baklava.tech/api/interfaces/_baklavajs_renderer-vue.SetViewNodePropertiesSettings.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#setviewnodepropertiessettings)
[ToolbarCommand](https://baklava.tech/api/interfaces/_baklavajs_renderer-vue.ToolbarCommand.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#toolbarcommand)
Type Aliases
------------
[ClearClipboardCommand](https://baklava.tech/api/types/_baklavajs_renderer-vue.ClearClipboardCommand.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#clearclipboardcommand)
[ClearHistoryCommand](https://baklava.tech/api/types/_baklavajs_renderer-vue.ClearHistoryCommand.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#clearhistorycommand)
[CommitTransactionCommand](https://baklava.tech/api/types/_baklavajs_renderer-vue.CommitTransactionCommand.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#committransactioncommand)
[ContextMenuItem](https://baklava.tech/api/types/_baklavajs_renderer-vue.ContextMenuItem.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#contextmenuitem)
[CopyCommand](https://baklava.tech/api/types/_baklavajs_renderer-vue.CopyCommand.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#copycommand)
[CreateSubgraphCommand](https://baklava.tech/api/types/_baklavajs_renderer-vue.CreateSubgraphCommand.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#createsubgraphcommand)
[DeleteNodesCommand](https://baklava.tech/api/types/_baklavajs_renderer-vue.DeleteNodesCommand.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#deletenodescommand)
[InputNode](https://baklava.tech/api/types/_baklavajs_renderer-vue.InputNode.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#inputnode)
[OpenSidebarCommand](https://baklava.tech/api/types/_baklavajs_renderer-vue.OpenSidebarCommand.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#opensidebarcommand)
[OutputNode](https://baklava.tech/api/types/_baklavajs_renderer-vue.OutputNode.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#outputnode)
[PasteCommand](https://baklava.tech/api/types/_baklavajs_renderer-vue.PasteCommand.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#pastecommand)
[RedoCommand](https://baklava.tech/api/types/_baklavajs_renderer-vue.RedoCommand.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#redocommand)
[SaveSubgraphCommand](https://baklava.tech/api/types/_baklavajs_renderer-vue.SaveSubgraphCommand.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#savesubgraphcommand)
[SelectInterfaceItem](https://baklava.tech/api/types/_baklavajs_renderer-vue.SelectInterfaceItem.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#selectinterfaceitem)
[StartTransactionCommand](https://baklava.tech/api/types/_baklavajs_renderer-vue.StartTransactionCommand.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#starttransactioncommand)
[SwitchGraph](https://baklava.tech/api/types/_baklavajs_renderer-vue.SwitchGraph.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#switchgraph)
[SwitchToMainGraphCommand](https://baklava.tech/api/types/_baklavajs_renderer-vue.SwitchToMainGraphCommand.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#switchtomaingraphcommand)
[UndoCommand](https://baklava.tech/api/types/_baklavajs_renderer-vue.UndoCommand.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#undocommand)
[ZoomToFitGraphCommand](https://baklava.tech/api/types/_baklavajs_renderer-vue.ZoomToFitGraphCommand.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#zoomtofitgraphcommand)
[ZoomToFitNodesCommand](https://baklava.tech/api/types/_baklavajs_renderer-vue.ZoomToFitNodesCommand.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#zoomtofitnodescommand)
[ZoomToFitRectCommand](https://baklava.tech/api/types/_baklavajs_renderer-vue.ZoomToFitRectCommand.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#zoomtofitrectcommand)
Variables
---------
[CLEAR\_CLIPBOARD\_COMMAND](https://baklava.tech/api/variables/_baklavajs_renderer-vue.CLEAR_CLIPBOARD_COMMAND.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#clear_clipboard_command)
[CLEAR\_HISTORY\_COMMAND](https://baklava.tech/api/variables/_baklavajs_renderer-vue.CLEAR_HISTORY_COMMAND.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#clear_history_command)
[COMMIT\_TRANSACTION\_COMMAND](https://baklava.tech/api/variables/_baklavajs_renderer-vue.COMMIT_TRANSACTION_COMMAND.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#commit_transaction_command)
[COPY\_COMMAND](https://baklava.tech/api/variables/_baklavajs_renderer-vue.COPY_COMMAND.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#copy_command)
[CREATE\_SUBGRAPH\_COMMAND](https://baklava.tech/api/variables/_baklavajs_renderer-vue.CREATE_SUBGRAPH_COMMAND.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#create_subgraph_command)
[DEFAULT\_SETTINGS](https://baklava.tech/api/variables/_baklavajs_renderer-vue.DEFAULT_SETTINGS.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#default_settings)
[DEFAULT\_TOOLBAR\_COMMANDS](https://baklava.tech/api/variables/_baklavajs_renderer-vue.DEFAULT_TOOLBAR_COMMANDS.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#default_toolbar_commands)
[DEFAULT\_TOOLBAR\_SUBGRAPH\_COMMANDS](https://baklava.tech/api/variables/_baklavajs_renderer-vue.DEFAULT_TOOLBAR_SUBGRAPH_COMMANDS.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#default_toolbar_subgraph_commands)
[DELETE\_NODES\_COMMAND](https://baklava.tech/api/variables/_baklavajs_renderer-vue.DELETE_NODES_COMMAND.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#delete_nodes_command)
[EditorComponent](https://baklava.tech/api/variables/_baklavajs_renderer-vue.EditorComponent.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#editorcomponent)
[OPEN\_SIDEBAR\_COMMAND](https://baklava.tech/api/variables/_baklavajs_renderer-vue.OPEN_SIDEBAR_COMMAND.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#open_sidebar_command)
[PASTE\_COMMAND](https://baklava.tech/api/variables/_baklavajs_renderer-vue.PASTE_COMMAND.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#paste_command)
[REDO\_COMMAND](https://baklava.tech/api/variables/_baklavajs_renderer-vue.REDO_COMMAND.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#redo_command)
[SAVE\_SUBGRAPH\_COMMAND](https://baklava.tech/api/variables/_baklavajs_renderer-vue.SAVE_SUBGRAPH_COMMAND.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#save_subgraph_command)
[START\_TRANSACTION\_COMMAND](https://baklava.tech/api/variables/_baklavajs_renderer-vue.START_TRANSACTION_COMMAND.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#start_transaction_command)
[SUBGRAPH\_INPUT\_NODE\_TYPE](https://baklava.tech/api/variables/_baklavajs_renderer-vue.SUBGRAPH_INPUT_NODE_TYPE.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#subgraph_input_node_type)
[SUBGRAPH\_OUTPUT\_NODE\_TYPE](https://baklava.tech/api/variables/_baklavajs_renderer-vue.SUBGRAPH_OUTPUT_NODE_TYPE.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#subgraph_output_node_type)
[SWITCH\_TO\_MAIN\_GRAPH\_COMMAND](https://baklava.tech/api/variables/_baklavajs_renderer-vue.SWITCH_TO_MAIN_GRAPH_COMMAND.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#switch_to_main_graph_command)
[TOOLBAR\_COMMANDS](https://baklava.tech/api/variables/_baklavajs_renderer-vue.TOOLBAR_COMMANDS.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#toolbar_commands)
[TOOLBAR\_SUBGRAPH\_COMMANDS](https://baklava.tech/api/variables/_baklavajs_renderer-vue.TOOLBAR_SUBGRAPH_COMMANDS.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#toolbar_subgraph_commands)
[UNDO\_COMMAND](https://baklava.tech/api/variables/_baklavajs_renderer-vue.UNDO_COMMAND.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#undo_command)
[useCommandHandler](https://baklava.tech/api/variables/_baklavajs_renderer-vue.useCommandHandler.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#usecommandhandler)
[ZOOM\_TO\_FIT\_GRAPH\_COMMAND](https://baklava.tech/api/variables/_baklavajs_renderer-vue.ZOOM_TO_FIT_GRAPH_COMMAND.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#zoom_to_fit_graph_command)
[ZOOM\_TO\_FIT\_NODES\_COMMAND](https://baklava.tech/api/variables/_baklavajs_renderer-vue.ZOOM_TO_FIT_NODES_COMMAND.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#zoom_to_fit_nodes_command)
[ZOOM\_TO\_FIT\_RECT\_COMMAND](https://baklava.tech/api/variables/_baklavajs_renderer-vue.ZOOM_TO_FIT_RECT_COMMAND.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#zoom_to_fit_rect_command)
Functions
---------
[displayInSidebar](https://baklava.tech/api/functions/_baklavajs_renderer-vue.displayInSidebar.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#displayinsidebar)
[getDomElementOfNode](https://baklava.tech/api/functions/_baklavajs_renderer-vue.getDomElementOfNode.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#getdomelementofnode)
[getDomElements](https://baklava.tech/api/functions/_baklavajs_renderer-vue.getDomElements.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#getdomelements)
[getNodePosition](https://baklava.tech/api/functions/_baklavajs_renderer-vue.getNodePosition.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#getnodeposition)
[getPortCoordinates](https://baklava.tech/api/functions/_baklavajs_renderer-vue.getPortCoordinates.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#getportcoordinates)
[isInputElement](https://baklava.tech/api/functions/_baklavajs_renderer-vue.isInputElement.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#isinputelement)
[providePlugin](https://baklava.tech/api/functions/_baklavajs_renderer-vue.providePlugin.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#provideplugin)
[provideTemporaryConnection](https://baklava.tech/api/functions/_baklavajs_renderer-vue.provideTemporaryConnection.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#providetemporaryconnection)
[registerCreateSubgraphCommand](https://baklava.tech/api/functions/_baklavajs_renderer-vue.registerCreateSubgraphCommand.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#registercreatesubgraphcommand)
[registerDeleteNodesCommand](https://baklava.tech/api/functions/_baklavajs_renderer-vue.registerDeleteNodesCommand.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#registerdeletenodescommand)
[registerGraphCommands](https://baklava.tech/api/functions/_baklavajs_renderer-vue.registerGraphCommands.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#registergraphcommands)
[registerSaveSubgraphCommand](https://baklava.tech/api/functions/_baklavajs_renderer-vue.registerSaveSubgraphCommand.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#registersavesubgraphcommand)
[registerSidebarCommands](https://baklava.tech/api/functions/_baklavajs_renderer-vue.registerSidebarCommands.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#registersidebarcommands)
[registerSwitchToMainGraphCommand](https://baklava.tech/api/functions/_baklavajs_renderer-vue.registerSwitchToMainGraphCommand.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#registerswitchtomaingraphcommand)
[registerZoomToFitCommands](https://baklava.tech/api/functions/_baklavajs_renderer-vue.registerZoomToFitCommands.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#registerzoomtofitcommands)
[setNodePosition](https://baklava.tech/api/functions/_baklavajs_renderer-vue.setNodePosition.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#setnodeposition)
[setViewNodeProperties](https://baklava.tech/api/functions/_baklavajs_renderer-vue.setViewNodeProperties.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#setviewnodeproperties)
[useBaklava](https://baklava.tech/api/functions/_baklavajs_renderer-vue.useBaklava.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#usebaklava)
[useClipboard](https://baklava.tech/api/functions/_baklavajs_renderer-vue.useClipboard.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#useclipboard)
[useDragMove](https://baklava.tech/api/functions/_baklavajs_renderer-vue.useDragMove.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#usedragmove)
[useGraph](https://baklava.tech/api/functions/_baklavajs_renderer-vue.useGraph.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#usegraph)
[useHistory](https://baklava.tech/api/functions/_baklavajs_renderer-vue.useHistory.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#usehistory)
[useNodeCategories](https://baklava.tech/api/functions/_baklavajs_renderer-vue.useNodeCategories.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#usenodecategories)
[useSwitchGraph](https://baklava.tech/api/functions/_baklavajs_renderer-vue.useSwitchGraph.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#useswitchgraph)
[useTemporaryConnection](https://baklava.tech/api/functions/_baklavajs_renderer-vue.useTemporaryConnection.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#usetemporaryconnection)
[useTransform](https://baklava.tech/api/functions/_baklavajs_renderer-vue.useTransform.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#usetransform)
[useViewModel](https://baklava.tech/api/functions/_baklavajs_renderer-vue.useViewModel.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#useviewmodel)
References
----------
BaklavaEditor → [EditorComponent](https://baklava.tech/api/variables/_baklavajs_renderer-vue.EditorComponent.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#baklavaeditor)
ButtonInterfaceComponent → [EditorComponent](https://baklava.tech/api/variables/_baklavajs_renderer-vue.EditorComponent.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#buttoninterfacecomponent)
CheckboxInterfaceComponent → [EditorComponent](https://baklava.tech/api/variables/_baklavajs_renderer-vue.EditorComponent.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#checkboxinterfacecomponent)
IntegerInterfaceComponent → [EditorComponent](https://baklava.tech/api/variables/_baklavajs_renderer-vue.EditorComponent.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#integerinterfacecomponent)
NumberInterfaceComponent → [EditorComponent](https://baklava.tech/api/variables/_baklavajs_renderer-vue.EditorComponent.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#numberinterfacecomponent)
SelectInterfaceComponent → [EditorComponent](https://baklava.tech/api/variables/_baklavajs_renderer-vue.EditorComponent.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#selectinterfacecomponent)
SliderInterfaceComponent → [EditorComponent](https://baklava.tech/api/variables/_baklavajs_renderer-vue.EditorComponent.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#sliderinterfacecomponent)
TextareaInputInterfaceComponent → [EditorComponent](https://baklava.tech/api/variables/_baklavajs_renderer-vue.EditorComponent.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#textareainputinterfacecomponent)
TextInputInterfaceComponent → [EditorComponent](https://baklava.tech/api/variables/_baklavajs_renderer-vue.EditorComponent.html)
[](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#textinputinterfacecomponent)
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Namespaces
[Commands](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#commands)
[Components](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#components)
Enumerations
[TemporaryConnectionState](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#temporaryconnectionstate)
Classes
[ButtonInterface](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#buttoninterface)
[CheckboxInterface](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#checkboxinterface)
[IntegerInterface](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#integerinterface)
[NumberInterface](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#numberinterface)
[SelectInterface](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#selectinterface)
[SliderInterface](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#sliderinterface)
[SubgraphInputNode](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#subgraphinputnode)
[SubgraphOutputNode](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#subgraphoutputnode)
[TextareaInputInterface](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#textareainputinterface)
[TextInputInterface](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#textinputinterface)
[TextInterface](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#textinterface)
Interfaces
[IAdvancedSelectInterfaceItem](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#iadvancedselectinterfaceitem)
[IBaklavaViewModel](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#ibaklavaviewmodel)
[IClipboard](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#iclipboard)
[ICommand](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#icommand)
[ICommandHandler](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#icommandhandler)
[IHistory](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#ihistory)
[IResolvedDomElements](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#iresolveddomelements)
[ISubgraphInterfaceNode](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#isubgraphinterfacenode)
[ITemporaryConnection](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#itemporaryconnection)
[ITemporaryConnectionHandler](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#itemporaryconnectionhandler)
[IViewNodeState](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#iviewnodestate)
[IViewSettings](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#iviewsettings)
[SetViewNodePropertiesSettings](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#setviewnodepropertiessettings)
[ToolbarCommand](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#toolbarcommand)
Type Aliases
[ClearClipboardCommand](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#clearclipboardcommand)
[ClearHistoryCommand](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#clearhistorycommand)
[CommitTransactionCommand](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#committransactioncommand)
[ContextMenuItem](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#contextmenuitem)
[CopyCommand](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#copycommand)
[CreateSubgraphCommand](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#createsubgraphcommand)
[DeleteNodesCommand](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#deletenodescommand)
[InputNode](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#inputnode)
[OpenSidebarCommand](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#opensidebarcommand)
[OutputNode](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#outputnode)
[PasteCommand](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#pastecommand)
[RedoCommand](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#redocommand)
[SaveSubgraphCommand](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#savesubgraphcommand)
[SelectInterfaceItem](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#selectinterfaceitem)
[StartTransactionCommand](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#starttransactioncommand)
[SwitchGraph](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#switchgraph)
[SwitchToMainGraphCommand](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#switchtomaingraphcommand)
[UndoCommand](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#undocommand)
[ZoomToFitGraphCommand](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#zoomtofitgraphcommand)
[ZoomToFitNodesCommand](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#zoomtofitnodescommand)
[ZoomToFitRectCommand](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#zoomtofitrectcommand)
Variables
[CLEAR\_CLIPBOARD\_COMMAND](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#clear_clipboard_command)
[CLEAR\_HISTORY\_COMMAND](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#clear_history_command)
[COMMIT\_TRANSACTION\_COMMAND](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#commit_transaction_command)
[COPY\_COMMAND](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#copy_command)
[CREATE\_SUBGRAPH\_COMMAND](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#create_subgraph_command)
[DEFAULT\_SETTINGS](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#default_settings)
[DEFAULT\_TOOLBAR\_COMMANDS](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#default_toolbar_commands)
[DEFAULT\_TOOLBAR\_SUBGRAPH\_COMMANDS](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#default_toolbar_subgraph_commands)
[DELETE\_NODES\_COMMAND](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#delete_nodes_command)
[EditorComponent](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#editorcomponent)
[OPEN\_SIDEBAR\_COMMAND](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#open_sidebar_command)
[PASTE\_COMMAND](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#paste_command)
[REDO\_COMMAND](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#redo_command)
[SAVE\_SUBGRAPH\_COMMAND](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#save_subgraph_command)
[START\_TRANSACTION\_COMMAND](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#start_transaction_command)
[SUBGRAPH\_INPUT\_NODE\_TYPE](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#subgraph_input_node_type)
[SUBGRAPH\_OUTPUT\_NODE\_TYPE](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#subgraph_output_node_type)
[SWITCH\_TO\_MAIN\_GRAPH\_COMMAND](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#switch_to_main_graph_command)
[TOOLBAR\_COMMANDS](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#toolbar_commands)
[TOOLBAR\_SUBGRAPH\_COMMANDS](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#toolbar_subgraph_commands)
[UNDO\_COMMAND](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#undo_command)
[useCommandHandler](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#usecommandhandler)
[ZOOM\_TO\_FIT\_GRAPH\_COMMAND](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#zoom_to_fit_graph_command)
[ZOOM\_TO\_FIT\_NODES\_COMMAND](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#zoom_to_fit_nodes_command)
[ZOOM\_TO\_FIT\_RECT\_COMMAND](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#zoom_to_fit_rect_command)
Functions
[displayInSidebar](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#displayinsidebar)
[getDomElementOfNode](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#getdomelementofnode)
[getDomElements](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#getdomelements)
[getNodePosition](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#getnodeposition)
[getPortCoordinates](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#getportcoordinates)
[isInputElement](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#isinputelement)
[providePlugin](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#provideplugin)
[provideTemporaryConnection](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#providetemporaryconnection)
[registerCreateSubgraphCommand](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#registercreatesubgraphcommand)
[registerDeleteNodesCommand](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#registerdeletenodescommand)
[registerGraphCommands](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#registergraphcommands)
[registerSaveSubgraphCommand](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#registersavesubgraphcommand)
[registerSidebarCommands](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#registersidebarcommands)
[registerSwitchToMainGraphCommand](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#registerswitchtomaingraphcommand)
[registerZoomToFitCommands](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#registerzoomtofitcommands)
[setNodePosition](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#setnodeposition)
[setViewNodeProperties](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#setviewnodeproperties)
[useBaklava](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#usebaklava)
[useClipboard](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#useclipboard)
[useDragMove](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#usedragmove)
[useGraph](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#usegraph)
[useHistory](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#usehistory)
[useNodeCategories](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#usenodecategories)
[useSwitchGraph](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#useswitchgraph)
[useTemporaryConnection](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#usetemporaryconnection)
[useTransform](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#usetransform)
[useViewModel](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#useviewmodel)
References
[BaklavaEditor](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#baklavaeditor)
[ButtonInterfaceComponent](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#buttoninterfacecomponent)
[CheckboxInterfaceComponent](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#checkboxinterfacecomponent)
[IntegerInterfaceComponent](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#integerinterfacecomponent)
[NumberInterfaceComponent](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#numberinterfacecomponent)
[SelectInterfaceComponent](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#selectinterfacecomponent)
[SliderInterfaceComponent](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#sliderinterfacecomponent)
[TextareaInputInterfaceComponent](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#textareainputinterfacecomponent)
[TextInputInterfaceComponent](https://baklava.tech/api/modules/_baklavajs_renderer-vue.html#textinputinterfacecomponent)
MMNEPVFCICPMFPCPTTAAATR
---
# @baklavajs/core | Reference - BaklavaJS
* [@baklavajs/core](https://baklava.tech/api/modules/_baklavajs_core.html)
Module @baklavajs/core
======================
Classes
-------
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#abstractnode)
[Connection](https://baklava.tech/api/classes/_baklavajs_core.Connection.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#connection)
[DummyConnection](https://baklava.tech/api/classes/_baklavajs_core.DummyConnection.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#dummyconnection)
[DynamicNode](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#dynamicnode)
[Editor](https://baklava.tech/api/classes/_baklavajs_core.Editor.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#editor)
[Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#graph)
[GraphInputNode](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#graphinputnode)
[GraphOutputNode](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#graphoutputnode)
[GraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#graphtemplate)
[Node](https://baklava.tech/api/classes/_baklavajs_core.Node.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#node)
[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#nodeinterface)
Interfaces
----------
[CalculationContext](https://baklava.tech/api/interfaces/_baklavajs_core.CalculationContext.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#calculationcontext)
[CheckConnectionHookResult](https://baklava.tech/api/interfaces/_baklavajs_core.CheckConnectionHookResult.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#checkconnectionhookresult)
[DynamicNodeUpdateResult](https://baklava.tech/api/interfaces/_baklavajs_core.DynamicNodeUpdateResult.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#dynamicnodeupdateresult)
[IAddConnectionEventData](https://baklava.tech/api/interfaces/_baklavajs_core.IAddConnectionEventData.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#iaddconnectioneventdata)
[IAddNodeTypeEventData](https://baklava.tech/api/interfaces/_baklavajs_core.IAddNodeTypeEventData.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#iaddnodetypeeventdata)
[IConnection](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#iconnection)
[IConnectionState](https://baklava.tech/api/interfaces/_baklavajs_core.IConnectionState.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#iconnectionstate)
[IDynamicNodeDefinition](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#idynamicnodedefinition)
[IEditorState](https://baklava.tech/api/interfaces/_baklavajs_core.IEditorState.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#ieditorstate)
[IEngine](https://baklava.tech/api/interfaces/_baklavajs_core.IEngine.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#iengine)
[IGraphInterface](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphInterface.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#igraphinterface)
[IGraphNode](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphNode.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#igraphnode)
[IGraphNodeState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphNodeState.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#igraphnodestate)
[IGraphState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphState.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#igraphstate)
[IGraphTemplateState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphTemplateState.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#igraphtemplatestate)
[INodeDefinition](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#inodedefinition)
[INodeInterfaceState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeInterfaceState.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#inodeinterfacestate)
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#inodestate)
[INodeTypeInformation](https://baklava.tech/api/interfaces/_baklavajs_core.INodeTypeInformation.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#inodetypeinformation)
[INodeUpdateEventData](https://baklava.tech/api/interfaces/_baklavajs_core.INodeUpdateEventData.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#inodeupdateeventdata)
[IRegisterNodeTypeOptions](https://baklava.tech/api/interfaces/_baklavajs_core.IRegisterNodeTypeOptions.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#iregisternodetypeoptions)
Type Aliases
------------
[AbstractNodeConstructor](https://baklava.tech/api/types/_baklavajs_core.AbstractNodeConstructor.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#abstractnodeconstructor)
[CalculateFunction](https://baklava.tech/api/types/_baklavajs_core.CalculateFunction.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#calculatefunction)
[CalculateFunctionReturnType](https://baklava.tech/api/types/_baklavajs_core.CalculateFunctionReturnType.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#calculatefunctionreturntype)
[CalculationResult](https://baklava.tech/api/types/_baklavajs_core.CalculationResult.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#calculationresult)
[CheckConnectionResult](https://baklava.tech/api/types/_baklavajs_core.CheckConnectionResult.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#checkconnectionresult)
[DynamicNodeDefinition](https://baklava.tech/api/types/_baklavajs_core.DynamicNodeDefinition.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#dynamicnodedefinition)
[GraphInputNodeState](https://baklava.tech/api/types/_baklavajs_core.GraphInputNodeState.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#graphinputnodestate)
[GraphOutputNodeState](https://baklava.tech/api/types/_baklavajs_core.GraphOutputNodeState.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#graphoutputnodestate)
[InterfaceFactory](https://baklava.tech/api/types/_baklavajs_core.InterfaceFactory.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#interfacefactory)
[NodeConstructor](https://baklava.tech/api/types/_baklavajs_core.NodeConstructor.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#nodeconstructor)
[NodeInstanceOf](https://baklava.tech/api/types/_baklavajs_core.NodeInstanceOf.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#nodeinstanceof)
[NodeInterfaceDefinition](https://baklava.tech/api/types/_baklavajs_core.NodeInterfaceDefinition.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#nodeinterfacedefinition)
[NodeInterfaceDefinitionStates](https://baklava.tech/api/types/_baklavajs_core.NodeInterfaceDefinitionStates.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#nodeinterfacedefinitionstates)
[NodeInterfaceFactory](https://baklava.tech/api/types/_baklavajs_core.NodeInterfaceFactory.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#nodeinterfacefactory)
[NodeInterfaceMiddleware](https://baklava.tech/api/types/_baklavajs_core.NodeInterfaceMiddleware.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#nodeinterfacemiddleware)
Variables
---------
[GRAPH\_INPUT\_NODE\_TYPE](https://baklava.tech/api/variables/_baklavajs_core.GRAPH_INPUT_NODE_TYPE.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#graph_input_node_type)
[GRAPH\_NODE\_TYPE\_PREFIX](https://baklava.tech/api/variables/_baklavajs_core.GRAPH_NODE_TYPE_PREFIX.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#graph_node_type_prefix)
[GRAPH\_OUTPUT\_NODE\_TYPE](https://baklava.tech/api/variables/_baklavajs_core.GRAPH_OUTPUT_NODE_TYPE.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#graph_output_node_type)
Functions
---------
[createGraphNodeType](https://baklava.tech/api/functions/_baklavajs_core.createGraphNodeType.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#creategraphnodetype)
[defineDynamicNode](https://baklava.tech/api/functions/_baklavajs_core.defineDynamicNode.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#definedynamicnode)
[defineNode](https://baklava.tech/api/functions/_baklavajs_core.defineNode.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#definenode)
[getGraphNodeTypeString](https://baklava.tech/api/functions/_baklavajs_core.getGraphNodeTypeString.html)
[](https://baklava.tech/api/modules/_baklavajs_core.html#getgraphnodetypestring)
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Classes
[AbstractNode](https://baklava.tech/api/modules/_baklavajs_core.html#abstractnode)
[Connection](https://baklava.tech/api/modules/_baklavajs_core.html#connection)
[DummyConnection](https://baklava.tech/api/modules/_baklavajs_core.html#dummyconnection)
[DynamicNode](https://baklava.tech/api/modules/_baklavajs_core.html#dynamicnode)
[Editor](https://baklava.tech/api/modules/_baklavajs_core.html#editor)
[Graph](https://baklava.tech/api/modules/_baklavajs_core.html#graph)
[GraphInputNode](https://baklava.tech/api/modules/_baklavajs_core.html#graphinputnode)
[GraphOutputNode](https://baklava.tech/api/modules/_baklavajs_core.html#graphoutputnode)
[GraphTemplate](https://baklava.tech/api/modules/_baklavajs_core.html#graphtemplate)
[Node](https://baklava.tech/api/modules/_baklavajs_core.html#node)
[NodeInterface](https://baklava.tech/api/modules/_baklavajs_core.html#nodeinterface)
Interfaces
[CalculationContext](https://baklava.tech/api/modules/_baklavajs_core.html#calculationcontext)
[CheckConnectionHookResult](https://baklava.tech/api/modules/_baklavajs_core.html#checkconnectionhookresult)
[DynamicNodeUpdateResult](https://baklava.tech/api/modules/_baklavajs_core.html#dynamicnodeupdateresult)
[IAddConnectionEventData](https://baklava.tech/api/modules/_baklavajs_core.html#iaddconnectioneventdata)
[IAddNodeTypeEventData](https://baklava.tech/api/modules/_baklavajs_core.html#iaddnodetypeeventdata)
[IConnection](https://baklava.tech/api/modules/_baklavajs_core.html#iconnection)
[IConnectionState](https://baklava.tech/api/modules/_baklavajs_core.html#iconnectionstate)
[IDynamicNodeDefinition](https://baklava.tech/api/modules/_baklavajs_core.html#idynamicnodedefinition)
[IEditorState](https://baklava.tech/api/modules/_baklavajs_core.html#ieditorstate)
[IEngine](https://baklava.tech/api/modules/_baklavajs_core.html#iengine)
[IGraphInterface](https://baklava.tech/api/modules/_baklavajs_core.html#igraphinterface)
[IGraphNode](https://baklava.tech/api/modules/_baklavajs_core.html#igraphnode)
[IGraphNodeState](https://baklava.tech/api/modules/_baklavajs_core.html#igraphnodestate)
[IGraphState](https://baklava.tech/api/modules/_baklavajs_core.html#igraphstate)
[IGraphTemplateState](https://baklava.tech/api/modules/_baklavajs_core.html#igraphtemplatestate)
[INodeDefinition](https://baklava.tech/api/modules/_baklavajs_core.html#inodedefinition)
[INodeInterfaceState](https://baklava.tech/api/modules/_baklavajs_core.html#inodeinterfacestate)
[INodeState](https://baklava.tech/api/modules/_baklavajs_core.html#inodestate)
[INodeTypeInformation](https://baklava.tech/api/modules/_baklavajs_core.html#inodetypeinformation)
[INodeUpdateEventData](https://baklava.tech/api/modules/_baklavajs_core.html#inodeupdateeventdata)
[IRegisterNodeTypeOptions](https://baklava.tech/api/modules/_baklavajs_core.html#iregisternodetypeoptions)
Type Aliases
[AbstractNodeConstructor](https://baklava.tech/api/modules/_baklavajs_core.html#abstractnodeconstructor)
[CalculateFunction](https://baklava.tech/api/modules/_baklavajs_core.html#calculatefunction)
[CalculateFunctionReturnType](https://baklava.tech/api/modules/_baklavajs_core.html#calculatefunctionreturntype)
[CalculationResult](https://baklava.tech/api/modules/_baklavajs_core.html#calculationresult)
[CheckConnectionResult](https://baklava.tech/api/modules/_baklavajs_core.html#checkconnectionresult)
[DynamicNodeDefinition](https://baklava.tech/api/modules/_baklavajs_core.html#dynamicnodedefinition)
[GraphInputNodeState](https://baklava.tech/api/modules/_baklavajs_core.html#graphinputnodestate)
[GraphOutputNodeState](https://baklava.tech/api/modules/_baklavajs_core.html#graphoutputnodestate)
[InterfaceFactory](https://baklava.tech/api/modules/_baklavajs_core.html#interfacefactory)
[NodeConstructor](https://baklava.tech/api/modules/_baklavajs_core.html#nodeconstructor)
[NodeInstanceOf](https://baklava.tech/api/modules/_baklavajs_core.html#nodeinstanceof)
[NodeInterfaceDefinition](https://baklava.tech/api/modules/_baklavajs_core.html#nodeinterfacedefinition)
[NodeInterfaceDefinitionStates](https://baklava.tech/api/modules/_baklavajs_core.html#nodeinterfacedefinitionstates)
[NodeInterfaceFactory](https://baklava.tech/api/modules/_baklavajs_core.html#nodeinterfacefactory)
[NodeInterfaceMiddleware](https://baklava.tech/api/modules/_baklavajs_core.html#nodeinterfacemiddleware)
Variables
[GRAPH\_INPUT\_NODE\_TYPE](https://baklava.tech/api/modules/_baklavajs_core.html#graph_input_node_type)
[GRAPH\_NODE\_TYPE\_PREFIX](https://baklava.tech/api/modules/_baklavajs_core.html#graph_node_type_prefix)
[GRAPH\_OUTPUT\_NODE\_TYPE](https://baklava.tech/api/modules/_baklavajs_core.html#graph_output_node_type)
Functions
[createGraphNodeType](https://baklava.tech/api/modules/_baklavajs_core.html#creategraphnodetype)
[defineDynamicNode](https://baklava.tech/api/modules/_baklavajs_core.html#definedynamicnode)
[defineNode](https://baklava.tech/api/modules/_baklavajs_core.html#definenode)
[getGraphNodeTypeString](https://baklava.tech/api/modules/_baklavajs_core.html#getgraphnodetypestring)
MMNEPVFCICPMFPCPTTAAATR
---
# AbstractNode | Reference - BaklavaJS
* [@baklavajs/core](https://baklava.tech/api/modules/_baklavajs_core.html)
* [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
Class AbstractNode`Abstract`
============================
#### Hierarchy ([View Summary](https://baklava.tech/api/hierarchy.html#@baklavajs/core.AbstractNode)
, Expand)
* AbstractNode
* [Node](https://baklava.tech/api/classes/_baklavajs_core.Node.html)
#### Implements
* IBaklavaEventEmitter
* IBaklavaTapable
##### Index
### Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#constructor)
### Properties
[\_title](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#_title)
[calculate?](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#calculate)
[events](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#events)
[graphInstance?](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#graphinstance)
[hooks](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#hooks)
[id](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#id)
[inputs](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#inputs)
[outputs](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#outputs)
[type](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#type)
### Accessors
[graph](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#graph)
[title](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#title)
### Methods
[addInput](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#addinput)
[addOutput](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#addoutput)
[initializeIo](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#initializeio)
[load](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#load)
[onDestroy](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#ondestroy)
[onPlaced](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#onplaced)
[registerGraph](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#registergraph)
[removeInput](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#removeinput)
[removeOutput](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#removeoutput)
[save](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#save)
Constructors
------------
### constructor[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#constructor)
* new AbstractNode(): [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#constructorabstractnode)
#### Returns [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
Properties
----------
### `Protected`\_title[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#_title)
\_title: string = ""
### `Optional` `Abstract`calculate[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#calculate)
calculate?: [CalculateFunction](https://baklava.tech/api/types/_baklavajs_core.CalculateFunction.html)
\>\>
### events[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#events)
events: {
addInput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
addOutput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeAddInput: PreventableBaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeAddOutput: PreventableBaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeRemoveInput: PreventableBaklavaEvent<
[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
\>;
beforeRemoveOutput: PreventableBaklavaEvent<
[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
\>;
beforeTitleChanged: PreventableBaklavaEvent;
loaded: BaklavaEvent<[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
removeInput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
removeOutput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
titleChanged: BaklavaEvent;
update: BaklavaEvent<[INodeUpdateEventData](https://baklava.tech/api/interfaces/_baklavajs_core.INodeUpdateEventData.html)
| null, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
} = ...
### `Protected` `Optional`graphInstance[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#graphinstance)
graphInstance?: [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
### hooks[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#hooks)
hooks: {
afterSave: SequentialHook<
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
\>;
beforeLoad: SequentialHook<
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
\>;
} = ...
### id[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#id)
id: string = ...
Unique identifier of the node
### `Abstract`inputs[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#inputs)
inputs: Record\>
### `Abstract`outputs[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#outputs)
outputs: Record\>
### `Abstract` `Readonly`type[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#type)
type: string
Type of the node
Accessors
---------
### graph[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#graph)
* get graph(): [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
| undefined
The graph instance the node is placed in. `undefined` if the node hasn't been placed in a graph yet.
#### Returns [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
| undefined
### title[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#title)
* get title(): string
Customizable display name of the node.
#### Returns string
* set title(v: string): void
#### Parameters
* v: string
#### Returns void
Methods
-------
### `Protected`addInput[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#addinput)
* addInput(key: string, input: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
): boolean[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#addinput-1)
Add an input interface to the node
#### Parameters
* key: string
Key of the input
* input: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
The input instance
#### Returns boolean
True when the input was added, otherwise false (prevented by an event handler)
### `Protected`addOutput[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#addoutput)
* addOutput(key: string, output: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
): boolean[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#addoutput-1)
Add an output interface to the node
#### Parameters
* key: string
Key of the output
* output: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
The output instance
#### Returns boolean
True when the output was added, otherwise false (prevented by an event handler)
### `Protected`initializeIo[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#initializeio)
* initializeIo(): void[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#initializeio-1)
#### Returns void
### load[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#load)
* load(state: [INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
): void[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#load-1)
#### Parameters
* state: [INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
#### Returns void
### onDestroy[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#ondestroy)
* onDestroy(): void[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#ondestroy-1)
Override this method to perform cleanup when the node is deleted
#### Returns void
### onPlaced[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#onplaced)
* onPlaced(): void[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#onplaced-1)
Override this method to execute logic when the node is placed inside a graph
#### Returns void
### registerGraph[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#registergraph)
* registerGraph(graph: [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
): void[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#registergraph-1)
This function will automatically be called as soon as the node is added to a graph.
#### Parameters
* graph: [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
#### Returns void
### `Protected`removeInput[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#removeinput)
* removeInput(key: string): boolean[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#removeinput-1)
Remove an existing input
#### Parameters
* key: string
Key of the input.
#### Returns boolean
### `Protected`removeOutput[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#removeoutput)
* removeOutput(key: string): boolean[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#removeoutput-1)
Remove an existing output
#### Parameters
* key: string
Key of the output.
#### Returns boolean
### save[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#save)
* save(): [INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
[](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#save-1)
#### Returns [INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#constructor)
Properties
[\_title](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#_title)
[calculate](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#calculate)
[events](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#events)
[graphInstance](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#graphinstance)
[hooks](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#hooks)
[id](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#id)
[inputs](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#inputs)
[outputs](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#outputs)
[type](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#type)
Accessors
[graph](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#graph)
[title](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#title)
Methods
[addInput](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#addinput)
[addOutput](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#addoutput)
[initializeIo](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#initializeio)
[load](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#load)
[onDestroy](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#ondestroy)
[onPlaced](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#onplaced)
[registerGraph](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#registergraph)
[removeInput](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#removeinput)
[removeOutput](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#removeoutput)
[save](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html#save)
MMNEPVFCICPMFPCPTTAAATR
---
# GraphTemplate | Reference - BaklavaJS
* [@baklavajs/core](https://baklava.tech/api/modules/_baklavajs_core.html)
* [GraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
Class GraphTemplate
===================
#### Implements
* [IGraphState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphState.html)
##### Index
### Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#constructor)
### Properties
[connections](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#connections)
[editor](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#editor)
[events](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#events)
[hooks](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#hooks)
[id](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#id)
[nodes](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#nodes)
### Accessors
[inputs](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#inputs)
[name](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#name)
[outputs](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#outputs)
### Methods
[createGraph](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#creategraph)
[save](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#save)
[update](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#update)
[fromGraph](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#fromgraph)
Constructors
------------
### constructor[](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#constructor)
* new GraphTemplate(
state: Optional<[IGraphTemplateState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphTemplateState.html)
, "id" | "name"\>,
editor: [Editor](https://baklava.tech/api/classes/_baklavajs_core.Editor.html)
,
): [GraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
[](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#constructorgraphtemplate)
#### Parameters
* state: Optional<[IGraphTemplateState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphTemplateState.html)
, "id" | "name"\>
* editor: [Editor](https://baklava.tech/api/classes/_baklavajs_core.Editor.html)
#### Returns [GraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
Properties
----------
### connections[](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#connections)
connections: [IConnectionState](https://baklava.tech/api/interfaces/_baklavajs_core.IConnectionState.html)
\[\]
List of all connection states in this graph template
### editor[](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#editor)
editor: [Editor](https://baklava.tech/api/classes/_baklavajs_core.Editor.html)
Editor instance
### events[](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#events)
events: {
nameChanged: BaklavaEvent;
updated: BaklavaEvent;
} = ...
### hooks[](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#hooks)
hooks: {
afterSave: SequentialHook<
[IGraphTemplateState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphTemplateState.html)
,
[GraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
,
[IGraphTemplateState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphTemplateState.html)
,
\>;
beforeLoad: SequentialHook<
[IGraphTemplateState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphTemplateState.html)
,
[GraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
,
[IGraphTemplateState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphTemplateState.html)
,
\>;
} = ...
### id[](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#id)
id: string = ...
Graph template id
### nodes[](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#nodes)
nodes: [INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
\[\]
List of all node states in this graph template
Accessors
---------
### inputs[](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#inputs)
* get inputs(): readonly [IGraphInterface](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphInterface.html)
\[\]
List of all inputs to the graph template
#### Returns readonly [IGraphInterface](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphInterface.html)
\[\]
### name[](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#name)
* get name(): string
Get the name of the graph template
#### Returns string
* set name(v: string): void
Set the name of the graph template
#### Parameters
* v: string
#### Returns void
### outputs[](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#outputs)
* get outputs(): readonly [IGraphInterface](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphInterface.html)
\[\]
List of all outputs of the graph template
#### Returns readonly [IGraphInterface](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphInterface.html)
\[\]
Methods
-------
### createGraph[](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#creategraph)
* createGraph(graph?: [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
): [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
[](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#creategraph-1)
Create a new graph instance from this template or load the state into the provided graph instance.
#### Parameters
* `Optional`graph: [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
#### Returns [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
### save[](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#save)
* save(): [IGraphTemplateState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphTemplateState.html)
[](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#save-1)
#### Returns [IGraphTemplateState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphTemplateState.html)
### update[](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#update)
* update(state: Omit<[IGraphState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphState.html)
, "id"\>): void[](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#update-1)
Update the state of the graph template with the provided state
#### Parameters
* state: Omit<[IGraphState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphState.html)
, "id"\>
#### Returns void
### `Static`fromGraph[](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#fromgraph)
* fromGraph(graph: [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
, editor: [Editor](https://baklava.tech/api/classes/_baklavajs_core.Editor.html)
): [GraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
[](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#fromgraph-1)
Create a new GraphTemplate from the nodes and connections inside the graph instance
#### Parameters
* graph: [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
* editor: [Editor](https://baklava.tech/api/classes/_baklavajs_core.Editor.html)
#### Returns [GraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#constructor)
Properties
[connections](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#connections)
[editor](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#editor)
[events](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#events)
[hooks](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#hooks)
[id](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#id)
[nodes](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#nodes)
Accessors
[inputs](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#inputs)
[name](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#name)
[outputs](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#outputs)
Methods
[createGraph](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#creategraph)
[save](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#save)
[update](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#update)
[fromGraph](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html#fromgraph)
MMNEPVFCICPMFPCPTTAAATR
---
# defineDynamicNode | Reference - BaklavaJS
* [@baklavajs/core](https://baklava.tech/api/modules/_baklavajs_core.html)
* [defineDynamicNode](https://baklava.tech/api/functions/_baklavajs_core.defineDynamicNode.html)
Function defineDynamicNode
==========================
* defineDynamicNode<[I](https://baklava.tech/api/functions/_baklavajs_core.defineDynamicNode.html#definedynamicnodei)
, [O](https://baklava.tech/api/functions/_baklavajs_core.defineDynamicNode.html#definedynamicnodeo)
\>(
definition: [IDynamicNodeDefinition](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html)
<[I](https://baklava.tech/api/functions/_baklavajs_core.defineDynamicNode.html#definedynamicnodei)
, [O](https://baklava.tech/api/functions/_baklavajs_core.defineDynamicNode.html#definedynamicnodeo)
\>,
): new () \=> [DynamicNode](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html)
<[I](https://baklava.tech/api/functions/_baklavajs_core.defineDynamicNode.html#definedynamicnodei)
, [O](https://baklava.tech/api/functions/_baklavajs_core.defineDynamicNode.html#definedynamicnodeo)
\>[](https://baklava.tech/api/functions/_baklavajs_core.defineDynamicNode.html#definedynamicnode)
#### Type Parameters
* I
* O
#### Parameters
* definition: [IDynamicNodeDefinition](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html)
<[I](https://baklava.tech/api/functions/_baklavajs_core.defineDynamicNode.html#definedynamicnodei)
, [O](https://baklava.tech/api/functions/_baklavajs_core.defineDynamicNode.html#definedynamicnodeo)
\>
#### Returns new () \=> [DynamicNode](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html)
<[I](https://baklava.tech/api/functions/_baklavajs_core.defineDynamicNode.html#definedynamicnodei)
, [O](https://baklava.tech/api/functions/_baklavajs_core.defineDynamicNode.html#definedynamicnodeo)
\>
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
MMNEPVFCICPMFPCPTTAAATR
---
# Connection | Reference - BaklavaJS
* [@baklavajs/core](https://baklava.tech/api/modules/_baklavajs_core.html)
* [Connection](https://baklava.tech/api/classes/_baklavajs_core.Connection.html)
Class Connection
================
#### Implements
* [IConnection](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html)
* IBaklavaEventEmitter
##### Index
### Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_core.Connection.html#constructor)
### Properties
[destructed](https://baklava.tech/api/classes/_baklavajs_core.Connection.html#destructed)
[events](https://baklava.tech/api/classes/_baklavajs_core.Connection.html#events)
[from](https://baklava.tech/api/classes/_baklavajs_core.Connection.html#from)
[id](https://baklava.tech/api/classes/_baklavajs_core.Connection.html#id)
[to](https://baklava.tech/api/classes/_baklavajs_core.Connection.html#to)
### Methods
[destruct](https://baklava.tech/api/classes/_baklavajs_core.Connection.html#destruct)
Constructors
------------
### constructor[](https://baklava.tech/api/classes/_baklavajs_core.Connection.html#constructor)
* new Connection(from: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, to: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
): [Connection](https://baklava.tech/api/classes/_baklavajs_core.Connection.html)
[](https://baklava.tech/api/classes/_baklavajs_core.Connection.html#constructorconnection)
#### Parameters
* from: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
* to: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
#### Returns [Connection](https://baklava.tech/api/classes/_baklavajs_core.Connection.html)
Properties
----------
### destructed[](https://baklava.tech/api/classes/_baklavajs_core.Connection.html#destructed)
destructed: boolean = false
### events[](https://baklava.tech/api/classes/_baklavajs_core.Connection.html#events)
events: { destruct: BaklavaEvent } = ...
### from[](https://baklava.tech/api/classes/_baklavajs_core.Connection.html#from)
from: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
### id[](https://baklava.tech/api/classes/_baklavajs_core.Connection.html#id)
id: string
### to[](https://baklava.tech/api/classes/_baklavajs_core.Connection.html#to)
to: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
Methods
-------
### destruct[](https://baklava.tech/api/classes/_baklavajs_core.Connection.html#destruct)
* destruct(): void[](https://baklava.tech/api/classes/_baklavajs_core.Connection.html#destruct-1)
#### Returns void
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_core.Connection.html#constructor)
Properties
[destructed](https://baklava.tech/api/classes/_baklavajs_core.Connection.html#destructed)
[events](https://baklava.tech/api/classes/_baklavajs_core.Connection.html#events)
[from](https://baklava.tech/api/classes/_baklavajs_core.Connection.html#from)
[id](https://baklava.tech/api/classes/_baklavajs_core.Connection.html#id)
[to](https://baklava.tech/api/classes/_baklavajs_core.Connection.html#to)
Methods
[destruct](https://baklava.tech/api/classes/_baklavajs_core.Connection.html#destruct)
MMNEPVFCICPMFPCPTTAAATR
---
# INodeDefinition | Reference - BaklavaJS
* [@baklavajs/core](https://baklava.tech/api/modules/_baklavajs_core.html)
* [INodeDefinition](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html)
Interface INodeDefinition
===============================
interface INodeDefinition<[I](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#i)
, [O](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#o)
\> {
[calculate](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#calculate)
?: [CalculateFunction](https://baklava.tech/api/types/_baklavajs_core.CalculateFunction.html)
, NoInfer<[O](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#o)
\>\>;
[inputs](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#inputs)
?: [InterfaceFactory](https://baklava.tech/api/types/_baklavajs_core.InterfaceFactory.html)
<[I](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#i)
\>;
[onCreate](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#oncreate)
?: (this: [Node](https://baklava.tech/api/classes/_baklavajs_core.Node.html)
<[I](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#i)
, [O](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#o)
\>) \=> void;
[onDestroy](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#ondestroy)
?: (this: [Node](https://baklava.tech/api/classes/_baklavajs_core.Node.html)
<[I](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#i)
, [O](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#o)
\>) \=> void;
[onPlaced](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#onplaced)
?: (this: [Node](https://baklava.tech/api/classes/_baklavajs_core.Node.html)
<[I](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#i)
, [O](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#o)
\>) \=> void;
[outputs](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#outputs)
?: [InterfaceFactory](https://baklava.tech/api/types/_baklavajs_core.InterfaceFactory.html)
<[O](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#o)
\>;
[title](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#title)
?: string;
[type](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#type)
: string;
}
#### Type Parameters
* I
* O
##### Index
### Properties
[calculate?](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#calculate)
[inputs?](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#inputs)
[onCreate?](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#oncreate)
[onDestroy?](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#ondestroy)
[onPlaced?](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#onplaced)
[outputs?](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#outputs)
[title?](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#title)
[type](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#type)
Properties
----------
### `Optional`calculate[](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#calculate)
calculate?: [CalculateFunction](https://baklava.tech/api/types/_baklavajs_core.CalculateFunction.html)
, NoInfer<[O](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#o)
\>\>
This function is called by the engine with the input values. It should perform the necessary calculation and then return the output values
### `Optional`inputs[](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#inputs)
inputs?: [InterfaceFactory](https://baklava.tech/api/types/_baklavajs_core.InterfaceFactory.html)
<[I](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#i)
\>
Inputs of the node
### `Optional`onCreate[](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#oncreate)
onCreate?: (this: [Node](https://baklava.tech/api/classes/_baklavajs_core.Node.html)
<[I](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#i)
, [O](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#o)
\>) \=> void
Called as soon as an instance of the node is created but before it is placed into a graph
### `Optional`onDestroy[](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#ondestroy)
onDestroy?: (this: [Node](https://baklava.tech/api/classes/_baklavajs_core.Node.html)
<[I](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#i)
, [O](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#o)
\>) \=> void
Called after the node is removed from a graph. Can be used for cleanup
### `Optional`onPlaced[](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#onplaced)
onPlaced?: (this: [Node](https://baklava.tech/api/classes/_baklavajs_core.Node.html)
<[I](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#i)
, [O](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#o)
\>) \=> void
Called when the node is placed into a graph
### `Optional`outputs[](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#outputs)
outputs?: [InterfaceFactory](https://baklava.tech/api/types/_baklavajs_core.InterfaceFactory.html)
<[O](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#o)
\>
Outputs of the node
### `Optional`title[](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#title)
title?: string
Default title when creating the node. If not specified, it is set to the nodeType
### type[](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#type)
type: string
NodeType
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Properties
[calculate](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#calculate)
[inputs](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#inputs)
[onCreate](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#oncreate)
[onDestroy](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#ondestroy)
[onPlaced](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#onplaced)
[outputs](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#outputs)
[title](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#title)
[type](https://baklava.tech/api/interfaces/_baklavajs_core.INodeDefinition.html#type)
MMNEPVFCICPMFPCPTTAAATR
---
# EngineStatus | Reference - BaklavaJS
* [@baklavajs/engine](https://baklava.tech/api/modules/_baklavajs_engine.html)
* [EngineStatus](https://baklava.tech/api/enums/_baklavajs_engine.EngineStatus.html)
Enumeration EngineStatus
========================
##### Index
### Enumeration Members
[Idle](https://baklava.tech/api/enums/_baklavajs_engine.EngineStatus.html#idle)
[Paused](https://baklava.tech/api/enums/_baklavajs_engine.EngineStatus.html#paused)
[Running](https://baklava.tech/api/enums/_baklavajs_engine.EngineStatus.html#running)
[Stopped](https://baklava.tech/api/enums/_baklavajs_engine.EngineStatus.html#stopped)
Enumeration Members
-------------------
### Idle[](https://baklava.tech/api/enums/_baklavajs_engine.EngineStatus.html#idle)
Idle: "Idle"
The engine is not currently running a calculation but will do so when the graph changes
### Paused[](https://baklava.tech/api/enums/_baklavajs_engine.EngineStatus.html#paused)
Paused: "Paused"
The engine is temporarily paused
### Running[](https://baklava.tech/api/enums/_baklavajs_engine.EngineStatus.html#running)
Running: "Running"
The engine is currently running a calculation
### Stopped[](https://baklava.tech/api/enums/_baklavajs_engine.EngineStatus.html#stopped)
Stopped: "Stopped"
The engine is not running
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Enumeration Members
[Idle](https://baklava.tech/api/enums/_baklavajs_engine.EngineStatus.html#idle)
[Paused](https://baklava.tech/api/enums/_baklavajs_engine.EngineStatus.html#paused)
[Running](https://baklava.tech/api/enums/_baklavajs_engine.EngineStatus.html#running)
[Stopped](https://baklava.tech/api/enums/_baklavajs_engine.EngineStatus.html#stopped)
---
# CycleError | Reference - BaklavaJS
* [@baklavajs/engine](https://baklava.tech/api/modules/_baklavajs_engine.html)
* [CycleError](https://baklava.tech/api/classes/_baklavajs_engine.CycleError.html)
Class CycleError
================
#### Hierarchy
* Error
* CycleError
##### Index
### Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_engine.CycleError.html#constructor)
Constructors
------------
### constructor[](https://baklava.tech/api/classes/_baklavajs_engine.CycleError.html#constructor)
* new CycleError(): [CycleError](https://baklava.tech/api/classes/_baklavajs_engine.CycleError.html)
[](https://baklava.tech/api/classes/_baklavajs_engine.CycleError.html#constructorcycleerror)
#### Returns [CycleError](https://baklava.tech/api/classes/_baklavajs_engine.CycleError.html)
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_engine.CycleError.html#constructor)
---
# AfterNodeCalculationEventData | Reference - BaklavaJS
* [@baklavajs/engine](https://baklava.tech/api/modules/_baklavajs_engine.html)
* [AfterNodeCalculationEventData](https://baklava.tech/api/interfaces/_baklavajs_engine.AfterNodeCalculationEventData.html)
Interface AfterNodeCalculationEventData
=======================================
interface AfterNodeCalculationEventData {
[node](https://baklava.tech/api/interfaces/_baklavajs_engine.AfterNodeCalculationEventData.html#node)
: AbstractNode;
[outputValues](https://baklava.tech/api/interfaces/_baklavajs_engine.AfterNodeCalculationEventData.html#outputvalues)
: Record;
}
##### Index
### Properties
[node](https://baklava.tech/api/interfaces/_baklavajs_engine.AfterNodeCalculationEventData.html#node)
[outputValues](https://baklava.tech/api/interfaces/_baklavajs_engine.AfterNodeCalculationEventData.html#outputvalues)
Properties
----------
### node[](https://baklava.tech/api/interfaces/_baklavajs_engine.AfterNodeCalculationEventData.html#node)
node: AbstractNode
The node that has just been calculated
### outputValues[](https://baklava.tech/api/interfaces/_baklavajs_engine.AfterNodeCalculationEventData.html#outputvalues)
outputValues: Record
Output values of the node's calculate method (key: node interface key, value: value for the node interface)
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Properties
[node](https://baklava.tech/api/interfaces/_baklavajs_engine.AfterNodeCalculationEventData.html#node)
[outputValues](https://baklava.tech/api/interfaces/_baklavajs_engine.AfterNodeCalculationEventData.html#outputvalues)
---
# BeforeNodeCalculationEventData | Reference - BaklavaJS
* [@baklavajs/engine](https://baklava.tech/api/modules/_baklavajs_engine.html)
* [BeforeNodeCalculationEventData](https://baklava.tech/api/interfaces/_baklavajs_engine.BeforeNodeCalculationEventData.html)
Interface BeforeNodeCalculationEventData
========================================
interface BeforeNodeCalculationEventData {
[inputValues](https://baklava.tech/api/interfaces/_baklavajs_engine.BeforeNodeCalculationEventData.html#inputvalues)
: Record;
[node](https://baklava.tech/api/interfaces/_baklavajs_engine.BeforeNodeCalculationEventData.html#node)
: AbstractNode;
}
##### Index
### Properties
[inputValues](https://baklava.tech/api/interfaces/_baklavajs_engine.BeforeNodeCalculationEventData.html#inputvalues)
[node](https://baklava.tech/api/interfaces/_baklavajs_engine.BeforeNodeCalculationEventData.html#node)
Properties
----------
### inputValues[](https://baklava.tech/api/interfaces/_baklavajs_engine.BeforeNodeCalculationEventData.html#inputvalues)
inputValues: Record
Values for the node's input interfaces (key: node interface key, value: value for the node interface)
### node[](https://baklava.tech/api/interfaces/_baklavajs_engine.BeforeNodeCalculationEventData.html#node)
node: AbstractNode
The node that is about to be calculated
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Properties
[inputValues](https://baklava.tech/api/interfaces/_baklavajs_engine.BeforeNodeCalculationEventData.html#inputvalues)
[node](https://baklava.tech/api/interfaces/_baklavajs_engine.BeforeNodeCalculationEventData.html#node)
---
# BaseEngine | Reference - BaklavaJS
* [@baklavajs/engine](https://baklava.tech/api/modules/_baklavajs_engine.html)
* [BaseEngine](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html)
Class BaseEngine`Abstract`
============================================================
#### Type Parameters
* CalculationData
* CalculationArgs extends any\[\]
#### Hierarchy ([View Summary](https://baklava.tech/api/hierarchy.html#@baklavajs/engine.BaseEngine)
)
* BaseEngine
* [DependencyEngine](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html)
#### Implements
* IEngine<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationdata)
\>
##### Index
### Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructor)
### Properties
[editor](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#editor)
[events](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#events)
[hooks](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#hooks)
[recalculateOrder](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#recalculateorder)
### Accessors
[status](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#status)
### Methods
[calculateOrder](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#calculateorder)
[calculateWithoutData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#calculatewithoutdata)
[checkConnection](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#checkconnection)
[execute](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#execute)
[getInputValues](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#getinputvalues)
[onChange](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#onchange)
[pause](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#pause)
[resume](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#resume)
[runGraph](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#rungraph)
[runOnce](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#runonce)
[start](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#start)
[stop](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#stop)
[validateNodeCalculationOutput](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#validatenodecalculationoutput)
Constructors
------------
### constructor[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructor)
* new BaseEngine<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationdata)
, [CalculationArgs](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationargs)
extends any\[\]\>(
editor: Editor,
): [BaseEngine](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html)
<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationdata)
, [CalculationArgs](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationargs)
\>[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseengine)
#### Type Parameters
* CalculationData
* CalculationArgs extends any\[\]
#### Parameters
* editor: Editor
#### Returns [BaseEngine](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html)
<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationdata)
, [CalculationArgs](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationargs)
\>
Properties
----------
### `Protected`editor[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#editor)
editor: Editor
### events[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#events)
events: {
afterNodeCalculation: BaklavaEvent<
[AfterNodeCalculationEventData](https://baklava.tech/api/interfaces/_baklavajs_engine.AfterNodeCalculationEventData.html)
,
[BaseEngine](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html)
<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationdata)
, [CalculationArgs](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationargs)
\>,
\>;
afterRun: BaklavaEvent<
CalculationResult,
[BaseEngine](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html)
<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationdata)
, [CalculationArgs](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationargs)
\>,
\>;
beforeNodeCalculation: BaklavaEvent<
[BeforeNodeCalculationEventData](https://baklava.tech/api/interfaces/_baklavajs_engine.BeforeNodeCalculationEventData.html)
,
[BaseEngine](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html)
<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationdata)
, [CalculationArgs](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationargs)
\>,
\>;
beforeRun: PreventableBaklavaEvent<
[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationdata)
,
[BaseEngine](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html)
<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationdata)
, [CalculationArgs](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationargs)
\>,
\>;
statusChange: BaklavaEvent<
[EngineStatus](https://baklava.tech/api/enums/_baklavajs_engine.EngineStatus.html)
,
[BaseEngine](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html)
<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationdata)
, [CalculationArgs](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationargs)
\>,
\>;
} = ...
#### Type Declaration
* ##### afterNodeCalculation: BaklavaEvent<
[AfterNodeCalculationEventData](https://baklava.tech/api/interfaces/_baklavajs_engine.AfterNodeCalculationEventData.html)
,
[BaseEngine](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html)
<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationdata)
, [CalculationArgs](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationargs)
\>,
\>
This event is called after a node has been calculated.
* ##### afterRun: BaklavaEvent\>
This event is called as soon as a run is completed. The argument is the result of the calculation.
* ##### beforeNodeCalculation: BaklavaEvent<
[BeforeNodeCalculationEventData](https://baklava.tech/api/interfaces/_baklavajs_engine.BeforeNodeCalculationEventData.html)
,
[BaseEngine](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html)
<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationdata)
, [CalculationArgs](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationargs)
\>,
\>
This event is called before a node is calculated. It is not preventable since this would break calculation.
* ##### beforeRun: PreventableBaklavaEvent<
[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationdata)
,
[BaseEngine](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html)
<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationdata)
, [CalculationArgs](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationargs)
\>,
\>
This event will be called before all the nodes `calculate` functions are called. The argument is the calculationData that the nodes will receive
* ##### statusChange: BaklavaEvent<[EngineStatus](https://baklava.tech/api/enums/_baklavajs_engine.EngineStatus.html)
, [BaseEngine](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html)
<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationdata)
, [CalculationArgs](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationargs)
\>\>
### hooks[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#hooks)
hooks: {
gatherCalculationData: SequentialHook<
[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationdata)
| undefined,
[BaseEngine](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html)
<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationdata)
, [CalculationArgs](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationargs)
\>,
[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationdata)
,
\>;
transferData: DynamicSequentialHook;
} = ...
### `Protected`recalculateOrder[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#recalculateorder)
recalculateOrder: boolean = true
Accessors
---------
### status[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#status)
* get status(): [EngineStatus](https://baklava.tech/api/enums/_baklavajs_engine.EngineStatus.html)
#### Returns [EngineStatus](https://baklava.tech/api/enums/_baklavajs_engine.EngineStatus.html)
Methods
-------
### calculateOrder[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#calculateorder)
* calculateOrder(): void[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#calculateorder-1)
Force the engine to recalculate the node execution order before the next run. This is normally done automatically. Use this method if the default change detection does not work in your scenario.
#### Returns void
### `Protected`calculateWithoutData[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#calculatewithoutdata)
* calculateWithoutData(
...args: [CalculationArgs](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationargs)
,
): Promise[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#calculatewithoutdata-1)
Use the `gatherCalculationData` hook to get the calculation data
#### Parameters
* ...args: [CalculationArgs](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationargs)
The calculation arguments with which the engine's calculate method will be called (in addition to the `calculationData`)
#### Returns Promise
The calculation result
### checkConnection[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#checkconnection)
* checkConnection(
from: NodeInterface,
to: NodeInterface,
): CheckConnectionHookResult[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#checkconnection-1)
Check whether a connection can be created. A connection can not be created when it would result in a cyclic graph.
#### Parameters
* from: NodeInterface
The interface from which the connection would start
* to: NodeInterface
The interface where the connection would end
#### Returns CheckConnectionHookResult
Whether the connection can be created
### `Protected` `Abstract`execute[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#execute)
* execute(
calculationData: [CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationdata)
,
...calculationArgs: [CalculationArgs](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationargs)
,
): Promise[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#execute-1)
Overwrite this method to perform the calculation
#### Parameters
* calculationData: [CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationdata)
The data which is provided to each node's `calculate` method
* ...calculationArgs: [CalculationArgs](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationargs)
Additional data which is only provided to the engine
#### Returns Promise
The calculation result
### `Abstract`getInputValues[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#getinputvalues)
* getInputValues(graph: Graph): Map[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#getinputvalues-1)
Gathers the values of all unconnected input interfaces in the graph
#### Parameters
* graph: Graph
#### Returns Map
Map [nodeInterface.id](http://nodeinterface.id/)
-> value
### `Protected` `Abstract`onChange[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#onchange)
* onChange(
recalculateOrder: boolean,
updatedNode?: AbstractNode,
data?: INodeUpdateEventData,
): void[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#onchange-1)
This method is called whenever the graph or values of node interfaces have been changed. You can overwrite this method to automatically trigger a calculation on change. Note: This method is only called when the engine is either idle or running.
#### Parameters
* recalculateOrder: boolean
Whether the change modified the graph itself, e. g. a connection or a node was added/removed
* `Optional`updatedNode: AbstractNode
If a node was updated (which means the value a node's interface has been changed): the node that was updated; `undefined` otherwise
* `Optional`data: INodeUpdateEventData
If a node was updated: The `update` event payload to determine, which interface exactly has been changed; `undefined` otherwise
#### Returns void
### pause[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#pause)
* pause(): void[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#pause-1)
Temporarily pause the engine. Use this method when you want to update the graph with the calculation results.
#### Returns void
### resume[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#resume)
* resume(): void[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#resume-1)
Resume the engine from the paused state
#### Returns void
### `Abstract`runGraph[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#rungraph)
* runGraph(
graph: Graph,
inputs: Map,
calculationData: [CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationdata)
,
): Promise[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#rungraph-1)
Run a non-root graph. This method can be used by nodes to calculate internal graphs (e. g. GraphNode). DO NOT use this method for calculation of the root graph! It won't emit any events.
#### Parameters
* graph: Graph
The graph to execute
* inputs: Map
Map
* calculationData: [CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationdata)
The data which is provided to each node's `calculate` method
#### Returns Promise
A promise that resolves to a map that maps rootNodes to their calculated value (what the calculation function of the node returned)
### runOnce[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#runonce)
* runOnce(
calculationData: [CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationdata)
,
...args: [CalculationArgs](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationargs)
,
): Promise[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#runonce-1)
Calculate all nodes once. This will automatically calculate the node calculation order if necessary and transfer values between connected node interfaces.
#### Parameters
* calculationData: [CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationdata)
The data which is provided to each node's `calculate` method
* ...args: [CalculationArgs](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructorbaseenginecalculationargs)
#### Returns Promise
A promise that resolves to either
* a map from each node's id to its calculated value (what the calculation function of the node returned)
* null if the calculation was prevented from the beforeRun event
### start[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#start)
* start(): void[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#start-1)
Start the engine. After started, it will run everytime the graph is changed.
#### Returns void
### stop[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#stop)
* stop(): void[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#stop-1)
Stop the engine
#### Returns void
### `Protected`validateNodeCalculationOutput[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#validatenodecalculationoutput)
* validateNodeCalculationOutput(node: AbstractNode, output: any): void[](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#validatenodecalculationoutput-1)
Validate the result of a node's `calculate` method. A result is valid if:
* is has the correct format (it must be an object, where the key is the interface key and the value is the output value for that interface)
* every output interface has a value assigned to it (null and undefined are also valid, but the key must exist in the object)
#### Parameters
* node: AbstractNode
The node which produced the output data
* output: any
The result of the node's `calculate` method
#### Returns void
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#constructor)
Properties
[editor](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#editor)
[events](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#events)
[hooks](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#hooks)
[recalculateOrder](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#recalculateorder)
Accessors
[status](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#status)
Methods
[calculateOrder](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#calculateorder)
[calculateWithoutData](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#calculatewithoutdata)
[checkConnection](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#checkconnection)
[execute](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#execute)
[getInputValues](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#getinputvalues)
[onChange](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#onchange)
[pause](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#pause)
[resume](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#resume)
[runGraph](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#rungraph)
[runOnce](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#runonce)
[start](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#start)
[stop](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#stop)
[validateNodeCalculationOutput](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html#validatenodecalculationoutput)
---
# ITopologicalSortingResult | Reference - BaklavaJS
* [@baklavajs/engine](https://baklava.tech/api/modules/_baklavajs_engine.html)
* [ITopologicalSortingResult](https://baklava.tech/api/interfaces/_baklavajs_engine.ITopologicalSortingResult.html)
Interface ITopologicalSortingResult
===================================
interface ITopologicalSortingResult {
[calculationOrder](https://baklava.tech/api/interfaces/_baklavajs_engine.ITopologicalSortingResult.html#calculationorder)
: AbstractNode\[\];
[connectionsFromNode](https://baklava.tech/api/interfaces/_baklavajs_engine.ITopologicalSortingResult.html#connectionsfromnode)
: Map;
[interfaceIdToNodeId](https://baklava.tech/api/interfaces/_baklavajs_engine.ITopologicalSortingResult.html#interfaceidtonodeid)
: Map;
}
##### Index
### Properties
[calculationOrder](https://baklava.tech/api/interfaces/_baklavajs_engine.ITopologicalSortingResult.html#calculationorder)
[connectionsFromNode](https://baklava.tech/api/interfaces/_baklavajs_engine.ITopologicalSortingResult.html#connectionsfromnode)
[interfaceIdToNodeId](https://baklava.tech/api/interfaces/_baklavajs_engine.ITopologicalSortingResult.html#interfaceidtonodeid)
Properties
----------
### calculationOrder[](https://baklava.tech/api/interfaces/_baklavajs_engine.ITopologicalSortingResult.html#calculationorder)
calculationOrder: AbstractNode\[\]
### connectionsFromNode[](https://baklava.tech/api/interfaces/_baklavajs_engine.ITopologicalSortingResult.html#connectionsfromnode)
connectionsFromNode: Map
### interfaceIdToNodeId[](https://baklava.tech/api/interfaces/_baklavajs_engine.ITopologicalSortingResult.html#interfaceidtonodeid)
interfaceIdToNodeId: Map
[NodeInterface.id](http://nodeinterface.id/)
-> parent [Node.id](http://node.id/)
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Properties
[calculationOrder](https://baklava.tech/api/interfaces/_baklavajs_engine.ITopologicalSortingResult.html#calculationorder)
[connectionsFromNode](https://baklava.tech/api/interfaces/_baklavajs_engine.ITopologicalSortingResult.html#connectionsfromnode)
[interfaceIdToNodeId](https://baklava.tech/api/interfaces/_baklavajs_engine.ITopologicalSortingResult.html#interfaceidtonodeid)
---
# allowMultipleConnections | Reference - BaklavaJS
* [@baklavajs/engine](https://baklava.tech/api/modules/_baklavajs_engine.html)
* [allowMultipleConnections](https://baklava.tech/api/functions/_baklavajs_engine.allowMultipleConnections.html)
Function allowMultipleConnections
=================================
* allowMultipleConnections<[T](https://baklava.tech/api/functions/_baklavajs_engine.allowMultipleConnections.html#allowmultipleconnectionst)
extends any\[\]\>(intf: NodeInterface<[T](https://baklava.tech/api/functions/_baklavajs_engine.allowMultipleConnections.html#allowmultipleconnectionst)
\>): void[](https://baklava.tech/api/functions/_baklavajs_engine.allowMultipleConnections.html#allowmultipleconnections)
#### Type Parameters
* T extends any\[\]
#### Parameters
* intf: NodeInterface<[T](https://baklava.tech/api/functions/_baklavajs_engine.allowMultipleConnections.html#allowmultipleconnectionst)
\>
#### Returns void
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
---
# DependencyEngine | Reference - BaklavaJS
* [@baklavajs/engine](https://baklava.tech/api/modules/_baklavajs_engine.html)
* [DependencyEngine](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html)
Class DependencyEngine
=======================================
#### Type Parameters
* CalculationData = any
#### Hierarchy ([View Summary](https://baklava.tech/api/hierarchy.html#@baklavajs/engine.DependencyEngine)
)
* [BaseEngine](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html)
<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructordependencyenginecalculationdata)
, \[\]\>
* DependencyEngine
##### Index
### Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructor)
### Properties
[editor](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#editor)
[events](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#events)
[hooks](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#hooks)
[recalculateOrder](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#recalculateorder)
### Accessors
[status](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#status)
### Methods
[calculateOrder](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#calculateorder)
[calculateWithoutData](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#calculatewithoutdata)
[checkConnection](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#checkconnection)
[execute](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#execute)
[getInputValues](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#getinputvalues)
[onChange](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#onchange)
[pause](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#pause)
[resume](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#resume)
[runGraph](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#rungraph)
[runOnce](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#runonce)
[start](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#start)
[stop](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#stop)
[validateNodeCalculationOutput](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#validatenodecalculationoutput)
Constructors
------------
### constructor[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructor)
* new DependencyEngine<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructordependencyenginecalculationdata)
\= any\>(
editor: Editor,
): [DependencyEngine](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html)
<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructordependencyenginecalculationdata)
\>[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructordependencyengine)
#### Type Parameters
* CalculationData = any
#### Parameters
* editor: Editor
#### Returns [DependencyEngine](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html)
<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructordependencyenginecalculationdata)
\>
Properties
----------
### `Protected`editor[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#editor)
editor: Editor
### events[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#events)
events: {
afterNodeCalculation: BaklavaEvent<
[AfterNodeCalculationEventData](https://baklava.tech/api/interfaces/_baklavajs_engine.AfterNodeCalculationEventData.html)
,
[BaseEngine](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html)
<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructordependencyenginecalculationdata)
, \[\]\>,
\>;
afterRun: BaklavaEvent\>;
beforeNodeCalculation: BaklavaEvent<
[BeforeNodeCalculationEventData](https://baklava.tech/api/interfaces/_baklavajs_engine.BeforeNodeCalculationEventData.html)
,
[BaseEngine](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html)
<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructordependencyenginecalculationdata)
, \[\]\>,
\>;
beforeRun: PreventableBaklavaEvent<
[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructordependencyenginecalculationdata)
,
[BaseEngine](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html)
<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructordependencyenginecalculationdata)
, \[\]\>,
\>;
statusChange: BaklavaEvent<[EngineStatus](https://baklava.tech/api/enums/_baklavajs_engine.EngineStatus.html)
, [BaseEngine](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html)
<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructordependencyenginecalculationdata)
, \[\]\>\>;
} = ...
#### Type Declaration
* ##### afterNodeCalculation: BaklavaEvent<[AfterNodeCalculationEventData](https://baklava.tech/api/interfaces/_baklavajs_engine.AfterNodeCalculationEventData.html)
, [BaseEngine](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html)
<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructordependencyenginecalculationdata)
, \[\]\>\>
This event is called after a node has been calculated.
* ##### afterRun: BaklavaEvent\>
This event is called as soon as a run is completed. The argument is the result of the calculation.
* ##### beforeNodeCalculation: BaklavaEvent<[BeforeNodeCalculationEventData](https://baklava.tech/api/interfaces/_baklavajs_engine.BeforeNodeCalculationEventData.html)
, [BaseEngine](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html)
<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructordependencyenginecalculationdata)
, \[\]\>\>
This event is called before a node is calculated. It is not preventable since this would break calculation.
* ##### beforeRun: PreventableBaklavaEvent<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructordependencyenginecalculationdata)
, [BaseEngine](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html)
<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructordependencyenginecalculationdata)
, \[\]\>\>
This event will be called before all the nodes `calculate` functions are called. The argument is the calculationData that the nodes will receive
* ##### statusChange: BaklavaEvent<[EngineStatus](https://baklava.tech/api/enums/_baklavajs_engine.EngineStatus.html)
, [BaseEngine](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html)
<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructordependencyenginecalculationdata)
, \[\]\>\>
### hooks[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#hooks)
hooks: {
gatherCalculationData: SequentialHook<
[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructordependencyenginecalculationdata)
| undefined,
[BaseEngine](https://baklava.tech/api/classes/_baklavajs_engine.BaseEngine.html)
<[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructordependencyenginecalculationdata)
, \[\]\>,
[CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructordependencyenginecalculationdata)
,
\>;
transferData: DynamicSequentialHook;
} = ...
### `Protected`recalculateOrder[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#recalculateorder)
recalculateOrder: boolean = true
Accessors
---------
### status[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#status)
* get status(): [EngineStatus](https://baklava.tech/api/enums/_baklavajs_engine.EngineStatus.html)
#### Returns [EngineStatus](https://baklava.tech/api/enums/_baklavajs_engine.EngineStatus.html)
Methods
-------
### calculateOrder[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#calculateorder)
* calculateOrder(): void[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#calculateorder-1)
Force the engine to recalculate the node execution order before the next run. This is normally done automatically. Use this method if the default change detection does not work in your scenario.
#### Returns void
### `Protected`calculateWithoutData[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#calculatewithoutdata)
* calculateWithoutData(...args: \[\]): Promise[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#calculatewithoutdata-1)
Use the `gatherCalculationData` hook to get the calculation data
#### Parameters
* ...args: \[\]
The calculation arguments with which the engine's calculate method will be called (in addition to the `calculationData`)
#### Returns Promise
The calculation result
### checkConnection[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#checkconnection)
* checkConnection(
from: NodeInterface,
to: NodeInterface,
): CheckConnectionHookResult[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#checkconnection-1)
Check whether a connection can be created. A connection can not be created when it would result in a cyclic graph.
#### Parameters
* from: NodeInterface
The interface from which the connection would start
* to: NodeInterface
The interface where the connection would end
#### Returns CheckConnectionHookResult
Whether the connection can be created
### `Protected`execute[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#execute)
* execute(calculationData: [CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructordependencyenginecalculationdata)
): Promise[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#execute-1)
Overwrite this method to perform the calculation
#### Parameters
* calculationData: [CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructordependencyenginecalculationdata)
The data which is provided to each node's `calculate` method
#### Returns Promise
The calculation result
### getInputValues[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#getinputvalues)
* getInputValues(graph: Graph): Map[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#getinputvalues-1)
Gathers the values of all unconnected input interfaces in the graph
#### Parameters
* graph: Graph
#### Returns Map
Map [nodeInterface.id](http://nodeinterface.id/)
-> value
### `Protected`onChange[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#onchange)
* onChange(recalculateOrder: boolean): void[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#onchange-1)
This method is called whenever the graph or values of node interfaces have been changed. You can overwrite this method to automatically trigger a calculation on change. Note: This method is only called when the engine is either idle or running.
#### Parameters
* recalculateOrder: boolean
Whether the change modified the graph itself, e. g. a connection or a node was added/removed
#### Returns void
### pause[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#pause)
* pause(): void[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#pause-1)
Temporarily pause the engine. Use this method when you want to update the graph with the calculation results.
#### Returns void
### resume[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#resume)
* resume(): void[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#resume-1)
Resume the engine from the paused state
#### Returns void
### runGraph[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#rungraph)
* runGraph(
graph: Graph,
inputs: Map,
calculationData: [CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructordependencyenginecalculationdata)
,
): Promise[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#rungraph-1)
Run a non-root graph. This method can be used by nodes to calculate internal graphs (e. g. GraphNode). DO NOT use this method for calculation of the root graph! It won't emit any events.
#### Parameters
* graph: Graph
The graph to execute
* inputs: Map
Map
* calculationData: [CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructordependencyenginecalculationdata)
The data which is provided to each node's `calculate` method
#### Returns Promise
A promise that resolves to a map that maps rootNodes to their calculated value (what the calculation function of the node returned)
### runOnce[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#runonce)
* runOnce(
calculationData: [CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructordependencyenginecalculationdata)
,
...args: \[\],
): Promise[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#runonce-1)
Calculate all nodes once. This will automatically calculate the node calculation order if necessary and transfer values between connected node interfaces.
#### Parameters
* calculationData: [CalculationData](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructordependencyenginecalculationdata)
The data which is provided to each node's `calculate` method
* ...args: \[\]
#### Returns Promise
A promise that resolves to either
* a map from each node's id to its calculated value (what the calculation function of the node returned)
* null if the calculation was prevented from the beforeRun event
### start[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#start)
* start(): void[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#start-1)
Start the engine. After started, it will run everytime the graph is changed.
#### Returns void
### stop[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#stop)
* stop(): void[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#stop-1)
Stop the engine
#### Returns void
### `Protected`validateNodeCalculationOutput[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#validatenodecalculationoutput)
* validateNodeCalculationOutput(node: AbstractNode, output: any): void[](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#validatenodecalculationoutput-1)
Validate the result of a node's `calculate` method. A result is valid if:
* is has the correct format (it must be an object, where the key is the interface key and the value is the output value for that interface)
* every output interface has a value assigned to it (null and undefined are also valid, but the key must exist in the object)
#### Parameters
* node: AbstractNode
The node which produced the output data
* output: any
The result of the node's `calculate` method
#### Returns void
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#constructor)
Properties
[editor](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#editor)
[events](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#events)
[hooks](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#hooks)
[recalculateOrder](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#recalculateorder)
Accessors
[status](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#status)
Methods
[calculateOrder](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#calculateorder)
[calculateWithoutData](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#calculatewithoutdata)
[checkConnection](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#checkconnection)
[execute](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#execute)
[getInputValues](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#getinputvalues)
[onChange](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#onchange)
[pause](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#pause)
[resume](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#resume)
[runGraph](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#rungraph)
[runOnce](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#runonce)
[start](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#start)
[stop](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#stop)
[validateNodeCalculationOutput](https://baklava.tech/api/classes/_baklavajs_engine.DependencyEngine.html#validatenodecalculationoutput)
---
# applyResult | Reference - BaklavaJS
* [@baklavajs/engine](https://baklava.tech/api/modules/_baklavajs_engine.html)
* [applyResult](https://baklava.tech/api/functions/_baklavajs_engine.applyResult.html)
Function applyResult
====================
* applyResult(result: CalculationResult, editor: Editor): void[](https://baklava.tech/api/functions/_baklavajs_engine.applyResult.html#applyresult)
Apply the calculation result values to the output interfaces in the graph
#### Parameters
* result: CalculationResult
Calculation result
* editor: Editor
Editor instance
#### Returns void
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
---
# containsCycle | Reference - BaklavaJS
* [@baklavajs/engine](https://baklava.tech/api/modules/_baklavajs_engine.html)
* [containsCycle](https://baklava.tech/api/functions/_baklavajs_engine.containsCycle.html)
Function containsCycle
======================
* containsCycle(graph: Graph): boolean[](https://baklava.tech/api/functions/_baklavajs_engine.containsCycle.html#containscycle)
Checks whether a graph contains a cycle
#### Parameters
* graph: Graph
#### Returns boolean
* containsCycle(
nodes: readonly AbstractNode\[\],
connections: readonly IConnection\[\],
): boolean[](https://baklava.tech/api/functions/_baklavajs_engine.containsCycle.html#containscycle-1)
Checks whether the provided set of nodes and connections contains a cycle
#### Parameters
* nodes: readonly AbstractNode\[\]
* connections: readonly IConnection\[\]
#### Returns boolean
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
---
# sortTopologically | Reference - BaklavaJS
* [@baklavajs/engine](https://baklava.tech/api/modules/_baklavajs_engine.html)
* [sortTopologically](https://baklava.tech/api/functions/_baklavajs_engine.sortTopologically.html)
Function sortTopologically
==========================
* sortTopologically(graph: Graph): [ITopologicalSortingResult](https://baklava.tech/api/interfaces/_baklavajs_engine.ITopologicalSortingResult.html)
[](https://baklava.tech/api/functions/_baklavajs_engine.sortTopologically.html#sorttopologically)
Uses Kahn's algorithm to topologically sort the nodes in the graph
#### Parameters
* graph: Graph
#### Returns [ITopologicalSortingResult](https://baklava.tech/api/interfaces/_baklavajs_engine.ITopologicalSortingResult.html)
* sortTopologically(
nodes: readonly AbstractNode\[\],
connections: readonly IConnection\[\],
): [ITopologicalSortingResult](https://baklava.tech/api/interfaces/_baklavajs_engine.ITopologicalSortingResult.html)
[](https://baklava.tech/api/functions/_baklavajs_engine.sortTopologically.html#sorttopologically-1)
Uses Kahn's algorithm to topologically sort the nodes in the graph
#### Parameters
* nodes: readonly AbstractNode\[\]
* connections: readonly IConnection\[\]
#### Returns [ITopologicalSortingResult](https://baklava.tech/api/interfaces/_baklavajs_engine.ITopologicalSortingResult.html)
* sortTopologically(
nodesOrGraph: Graph | readonly AbstractNode\[\],
connections?: readonly IConnection\[\],
): [ITopologicalSortingResult](https://baklava.tech/api/interfaces/_baklavajs_engine.ITopologicalSortingResult.html)
[](https://baklava.tech/api/functions/_baklavajs_engine.sortTopologically.html#sorttopologically-2)
This overload is only used for internal purposes
#### Parameters
* nodesOrGraph: Graph | readonly AbstractNode\[\]
* `Optional`connections: readonly IConnection\[\]
#### Returns [ITopologicalSortingResult](https://baklava.tech/api/interfaces/_baklavajs_engine.ITopologicalSortingResult.html)
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
---
# DummyConnection | Reference - BaklavaJS
* [@baklavajs/core](https://baklava.tech/api/modules/_baklavajs_core.html)
* [DummyConnection](https://baklava.tech/api/classes/_baklavajs_core.DummyConnection.html)
Class DummyConnection
=====================
This class is used for calculation purposes only. It won't alter any state of the connected nodes
#### Implements
* [IConnection](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html)
##### Index
### Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_core.DummyConnection.html#constructor)
### Properties
[from](https://baklava.tech/api/classes/_baklavajs_core.DummyConnection.html#from)
[id](https://baklava.tech/api/classes/_baklavajs_core.DummyConnection.html#id)
[to](https://baklava.tech/api/classes/_baklavajs_core.DummyConnection.html#to)
Constructors
------------
### constructor[](https://baklava.tech/api/classes/_baklavajs_core.DummyConnection.html#constructor)
* new DummyConnection(from: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, to: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
): [DummyConnection](https://baklava.tech/api/classes/_baklavajs_core.DummyConnection.html)
[](https://baklava.tech/api/classes/_baklavajs_core.DummyConnection.html#constructordummyconnection)
#### Parameters
* from: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
* to: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
#### Returns [DummyConnection](https://baklava.tech/api/classes/_baklavajs_core.DummyConnection.html)
Properties
----------
### from[](https://baklava.tech/api/classes/_baklavajs_core.DummyConnection.html#from)
from: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
### id[](https://baklava.tech/api/classes/_baklavajs_core.DummyConnection.html#id)
id: string
### to[](https://baklava.tech/api/classes/_baklavajs_core.DummyConnection.html#to)
to: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_core.DummyConnection.html#constructor)
Properties
[from](https://baklava.tech/api/classes/_baklavajs_core.DummyConnection.html#from)
[id](https://baklava.tech/api/classes/_baklavajs_core.DummyConnection.html#id)
[to](https://baklava.tech/api/classes/_baklavajs_core.DummyConnection.html#to)
---
# CheckConnectionHookResult | Reference - BaklavaJS
* [@baklavajs/core](https://baklava.tech/api/modules/_baklavajs_core.html)
* [CheckConnectionHookResult](https://baklava.tech/api/interfaces/_baklavajs_core.CheckConnectionHookResult.html)
Interface CheckConnectionHookResult
===================================
interface CheckConnectionHookResult {
[connectionAllowed](https://baklava.tech/api/interfaces/_baklavajs_core.CheckConnectionHookResult.html#connectionallowed)
: boolean;
[connectionsInDanger](https://baklava.tech/api/interfaces/_baklavajs_core.CheckConnectionHookResult.html#connectionsindanger)
: [IConnection](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html)
\[\];
}
##### Index
### Properties
[connectionAllowed](https://baklava.tech/api/interfaces/_baklavajs_core.CheckConnectionHookResult.html#connectionallowed)
[connectionsInDanger](https://baklava.tech/api/interfaces/_baklavajs_core.CheckConnectionHookResult.html#connectionsindanger)
Properties
----------
### connectionAllowed[](https://baklava.tech/api/interfaces/_baklavajs_core.CheckConnectionHookResult.html#connectionallowed)
connectionAllowed: boolean
### connectionsInDanger[](https://baklava.tech/api/interfaces/_baklavajs_core.CheckConnectionHookResult.html#connectionsindanger)
connectionsInDanger: [IConnection](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html)
\[\]
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Properties
[connectionAllowed](https://baklava.tech/api/interfaces/_baklavajs_core.CheckConnectionHookResult.html#connectionallowed)
[connectionsInDanger](https://baklava.tech/api/interfaces/_baklavajs_core.CheckConnectionHookResult.html#connectionsindanger)
---
# DynamicNode | Reference - BaklavaJS
* [@baklavajs/core](https://baklava.tech/api/modules/_baklavajs_core.html)
* [DynamicNode](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html)
Class DynamicNode`Abstract` `Internal`
============================================
Abstract base class for every dynamic node
#### Type Parameters
* I
* O
#### Hierarchy ([View Summary](https://baklava.tech/api/hierarchy.html#@baklavajs/core.DynamicNode)
)
* [Node](https://baklava.tech/api/classes/_baklavajs_core.Node.html)
, Dynamic<[O](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#constructordynamicnodeo)
\>\>
* DynamicNode
##### Index
### Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#constructor)
### Properties
[\_title](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#_title)
[calculate?](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#calculate)
[events](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#events)
[graphInstance?](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#graphinstance)
[hooks](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#hooks)
[id](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#id)
[inputs](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#inputs)
[outputs](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#outputs)
[type](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#type)
### Accessors
[graph](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#graph)
[title](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#title)
### Methods
[addInput](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#addinput)
[addOutput](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#addoutput)
[initializeIo](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#initializeio)
[load](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#load)
[onDestroy](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#ondestroy)
[onPlaced](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#onplaced)
[registerGraph](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#registergraph)
[removeInput](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#removeinput)
[removeOutput](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#removeoutput)
[save](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#save)
Constructors
------------
### constructor[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#constructor)
* new DynamicNode<[I](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#constructordynamicnodei)
, [O](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#constructordynamicnodeo)
\>(): [DynamicNode](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html)
<[I](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#constructordynamicnodei)
, [O](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#constructordynamicnodeo)
\>[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#constructordynamicnode)
#### Type Parameters
* I
* O
#### Returns [DynamicNode](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html)
<[I](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#constructordynamicnodei)
, [O](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#constructordynamicnodeo)
\>
Properties
----------
### `Protected`\_title[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#_title)
\_title: string = ""
### `Optional`calculate[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#calculate)
calculate?: [CalculateFunction](https://baklava.tech/api/types/_baklavajs_core.CalculateFunction.html)
, Dynamic<[O](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#constructordynamicnodeo)
\>\>
The default implementation does nothing. Overwrite this method to do calculation.
#### Param: inputs[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#param-inputs)
Values of all input interfaces
#### Param: globalValues[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#param-globalvalues)
Set of values passed to every node by the engine plugin
#### Returns[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#returns)
Values for output interfaces
### events[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#events)
events: {
addInput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
addOutput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeAddInput: PreventableBaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeAddOutput: PreventableBaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeRemoveInput: PreventableBaklavaEvent<
[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
\>;
beforeRemoveOutput: PreventableBaklavaEvent<
[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
\>;
beforeTitleChanged: PreventableBaklavaEvent;
loaded: BaklavaEvent<[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
removeInput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
removeOutput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
titleChanged: BaklavaEvent;
update: BaklavaEvent<[INodeUpdateEventData](https://baklava.tech/api/interfaces/_baklavajs_core.INodeUpdateEventData.html)
| null, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
} = ...
### `Protected` `Optional`graphInstance[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#graphinstance)
graphInstance?: [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
### hooks[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#hooks)
hooks: {
afterSave: SequentialHook<
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
\>;
beforeLoad: SequentialHook<
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
\>;
} = ...
### id[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#id)
id: string = ...
Unique identifier of the node
### `Abstract`inputs[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#inputs)
inputs: [NodeInterfaceDefinition](https://baklava.tech/api/types/_baklavajs_core.NodeInterfaceDefinition.html)
\>
### `Abstract`outputs[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#outputs)
outputs: [NodeInterfaceDefinition](https://baklava.tech/api/types/_baklavajs_core.NodeInterfaceDefinition.html)
\>
### `Abstract` `Readonly`type[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#type)
type: string
Type of the node
Accessors
---------
### graph[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#graph)
* get graph(): [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
| undefined
The graph instance the node is placed in. `undefined` if the node hasn't been placed in a graph yet.
#### Returns [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
| undefined
### title[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#title)
* get title(): string
Customizable display name of the node.
#### Returns string
* set title(v: string): void
#### Parameters
* v: string
#### Returns void
Methods
-------
### `Protected`addInput[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#addinput)
* addInput(key: string, input: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
): boolean[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#addinput-1)
Add an input interface to the node
#### Parameters
* key: string
Key of the input
* input: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
The input instance
#### Returns boolean
True when the input was added, otherwise false (prevented by an event handler)
### `Protected`addOutput[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#addoutput)
* addOutput(key: string, output: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
): boolean[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#addoutput-1)
Add an output interface to the node
#### Parameters
* key: string
Key of the output
* output: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
The output instance
#### Returns boolean
True when the output was added, otherwise false (prevented by an event handler)
### `Protected`initializeIo[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#initializeio)
* initializeIo(): void[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#initializeio-1)
#### Returns void
### `Abstract`load[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#load)
* load(state: [INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
, Dynamic<[O](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#constructordynamicnodeo)
\>\>): void[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#load-1)
#### Parameters
* state: [INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
, Dynamic<[O](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#constructordynamicnodeo)
\>\>
#### Returns void
### onDestroy[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#ondestroy)
* onDestroy(): void[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#ondestroy-1)
Override this method to perform cleanup when the node is deleted
#### Returns void
### onPlaced[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#onplaced)
* onPlaced(): void[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#onplaced-1)
Override this method to execute logic when the node is placed inside a graph
#### Returns void
### registerGraph[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#registergraph)
* registerGraph(graph: [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
): void[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#registergraph-1)
This function will automatically be called as soon as the node is added to a graph.
#### Parameters
* graph: [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
#### Returns void
### `Protected`removeInput[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#removeinput)
* removeInput(key: string): boolean[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#removeinput-1)
Remove an existing input
#### Parameters
* key: string
Key of the input.
#### Returns boolean
### `Protected`removeOutput[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#removeoutput)
* removeOutput(key: string): boolean[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#removeoutput-1)
Remove an existing output
#### Parameters
* key: string
Key of the output.
#### Returns boolean
### save[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#save)
* save(): [INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
, Dynamic<[O](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#constructordynamicnodeo)
\>\>[](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#save-1)
#### Returns [INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
, Dynamic<[O](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#constructordynamicnodeo)
\>\>
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#constructor)
Properties
[\_title](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#_title)
[calculate](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#calculate)
[events](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#events)
[graphInstance](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#graphinstance)
[hooks](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#hooks)
[id](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#id)
[inputs](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#inputs)
[outputs](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#outputs)
[type](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#type)
Accessors
[graph](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#graph)
[title](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#title)
Methods
[addInput](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#addinput)
[addOutput](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#addoutput)
[initializeIo](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#initializeio)
[load](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#load)
[onDestroy](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#ondestroy)
[onPlaced](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#onplaced)
[registerGraph](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#registergraph)
[removeInput](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#removeinput)
[removeOutput](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#removeoutput)
[save](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html#save)
---
# CalculationContext | Reference - BaklavaJS
* [@baklavajs/core](https://baklava.tech/api/modules/_baklavajs_core.html)
* [CalculationContext](https://baklava.tech/api/interfaces/_baklavajs_core.CalculationContext.html)
Interface CalculationContext
==================================
interface CalculationContext<[G](https://baklava.tech/api/interfaces/_baklavajs_core.CalculationContext.html#g)
\= any, [E](https://baklava.tech/api/interfaces/_baklavajs_core.CalculationContext.html#e)
extends [IEngine](https://baklava.tech/api/interfaces/_baklavajs_core.IEngine.html)
<[G](https://baklava.tech/api/interfaces/_baklavajs_core.CalculationContext.html#g)
\> \= [IEngine](https://baklava.tech/api/interfaces/_baklavajs_core.IEngine.html)
<[G](https://baklava.tech/api/interfaces/_baklavajs_core.CalculationContext.html#g)
\>\> {
[engine](https://baklava.tech/api/interfaces/_baklavajs_core.CalculationContext.html#engine)
: [E](https://baklava.tech/api/interfaces/_baklavajs_core.CalculationContext.html#e)
;
[globalValues](https://baklava.tech/api/interfaces/_baklavajs_core.CalculationContext.html#globalvalues)
: [G](https://baklava.tech/api/interfaces/_baklavajs_core.CalculationContext.html#g)
;
}
#### Type Parameters
* G = any
* E extends [IEngine](https://baklava.tech/api/interfaces/_baklavajs_core.IEngine.html)
<[G](https://baklava.tech/api/interfaces/_baklavajs_core.CalculationContext.html#g)
\> = [IEngine](https://baklava.tech/api/interfaces/_baklavajs_core.IEngine.html)
<[G](https://baklava.tech/api/interfaces/_baklavajs_core.CalculationContext.html#g)
\>
##### Index
### Properties
[engine](https://baklava.tech/api/interfaces/_baklavajs_core.CalculationContext.html#engine)
[globalValues](https://baklava.tech/api/interfaces/_baklavajs_core.CalculationContext.html#globalvalues)
Properties
----------
### engine[](https://baklava.tech/api/interfaces/_baklavajs_core.CalculationContext.html#engine)
engine: [E](https://baklava.tech/api/interfaces/_baklavajs_core.CalculationContext.html#e)
### globalValues[](https://baklava.tech/api/interfaces/_baklavajs_core.CalculationContext.html#globalvalues)
globalValues: [G](https://baklava.tech/api/interfaces/_baklavajs_core.CalculationContext.html#g)
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Properties
[engine](https://baklava.tech/api/interfaces/_baklavajs_core.CalculationContext.html#engine)
[globalValues](https://baklava.tech/api/interfaces/_baklavajs_core.CalculationContext.html#globalvalues)
---
# DynamicNodeUpdateResult | Reference - BaklavaJS
* [@baklavajs/core](https://baklava.tech/api/modules/_baklavajs_core.html)
* [DynamicNodeUpdateResult](https://baklava.tech/api/interfaces/_baklavajs_core.DynamicNodeUpdateResult.html)
Interface DynamicNodeUpdateResult
=================================
interface DynamicNodeUpdateResult {
[forceUpdateInputs](https://baklava.tech/api/interfaces/_baklavajs_core.DynamicNodeUpdateResult.html#forceupdateinputs)
?: string\[\];
[forceUpdateOutputs](https://baklava.tech/api/interfaces/_baklavajs_core.DynamicNodeUpdateResult.html#forceupdateoutputs)
?: string\[\];
[inputs](https://baklava.tech/api/interfaces/_baklavajs_core.DynamicNodeUpdateResult.html#inputs)
?: [DynamicNodeDefinition](https://baklava.tech/api/types/_baklavajs_core.DynamicNodeDefinition.html)
;
[outputs](https://baklava.tech/api/interfaces/_baklavajs_core.DynamicNodeUpdateResult.html#outputs)
?: [DynamicNodeDefinition](https://baklava.tech/api/types/_baklavajs_core.DynamicNodeDefinition.html)
;
}
##### Index
### Properties
[forceUpdateInputs?](https://baklava.tech/api/interfaces/_baklavajs_core.DynamicNodeUpdateResult.html#forceupdateinputs)
[forceUpdateOutputs?](https://baklava.tech/api/interfaces/_baklavajs_core.DynamicNodeUpdateResult.html#forceupdateoutputs)
[inputs?](https://baklava.tech/api/interfaces/_baklavajs_core.DynamicNodeUpdateResult.html#inputs)
[outputs?](https://baklava.tech/api/interfaces/_baklavajs_core.DynamicNodeUpdateResult.html#outputs)
Properties
----------
### `Optional`forceUpdateInputs[](https://baklava.tech/api/interfaces/_baklavajs_core.DynamicNodeUpdateResult.html#forceupdateinputs)
forceUpdateInputs?: string\[\]
### `Optional`forceUpdateOutputs[](https://baklava.tech/api/interfaces/_baklavajs_core.DynamicNodeUpdateResult.html#forceupdateoutputs)
forceUpdateOutputs?: string\[\]
### `Optional`inputs[](https://baklava.tech/api/interfaces/_baklavajs_core.DynamicNodeUpdateResult.html#inputs)
inputs?: [DynamicNodeDefinition](https://baklava.tech/api/types/_baklavajs_core.DynamicNodeDefinition.html)
### `Optional`outputs[](https://baklava.tech/api/interfaces/_baklavajs_core.DynamicNodeUpdateResult.html#outputs)
outputs?: [DynamicNodeDefinition](https://baklava.tech/api/types/_baklavajs_core.DynamicNodeDefinition.html)
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Properties
[forceUpdateInputs](https://baklava.tech/api/interfaces/_baklavajs_core.DynamicNodeUpdateResult.html#forceupdateinputs)
[forceUpdateOutputs](https://baklava.tech/api/interfaces/_baklavajs_core.DynamicNodeUpdateResult.html#forceupdateoutputs)
[inputs](https://baklava.tech/api/interfaces/_baklavajs_core.DynamicNodeUpdateResult.html#inputs)
[outputs](https://baklava.tech/api/interfaces/_baklavajs_core.DynamicNodeUpdateResult.html#outputs)
---
# IAddConnectionEventData | Reference - BaklavaJS
* [@baklavajs/core](https://baklava.tech/api/modules/_baklavajs_core.html)
* [IAddConnectionEventData](https://baklava.tech/api/interfaces/_baklavajs_core.IAddConnectionEventData.html)
Interface IAddConnectionEventData
=================================
interface IAddConnectionEventData {
[from](https://baklava.tech/api/interfaces/_baklavajs_core.IAddConnectionEventData.html#from)
: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
;
[to](https://baklava.tech/api/interfaces/_baklavajs_core.IAddConnectionEventData.html#to)
: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
;
}
##### Index
### Properties
[from](https://baklava.tech/api/interfaces/_baklavajs_core.IAddConnectionEventData.html#from)
[to](https://baklava.tech/api/interfaces/_baklavajs_core.IAddConnectionEventData.html#to)
Properties
----------
### from[](https://baklava.tech/api/interfaces/_baklavajs_core.IAddConnectionEventData.html#from)
from: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
### to[](https://baklava.tech/api/interfaces/_baklavajs_core.IAddConnectionEventData.html#to)
to: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Properties
[from](https://baklava.tech/api/interfaces/_baklavajs_core.IAddConnectionEventData.html#from)
[to](https://baklava.tech/api/interfaces/_baklavajs_core.IAddConnectionEventData.html#to)
---
# IConnectionState | Reference - BaklavaJS
* [@baklavajs/core](https://baklava.tech/api/modules/_baklavajs_core.html)
* [IConnectionState](https://baklava.tech/api/interfaces/_baklavajs_core.IConnectionState.html)
Interface IConnectionState
==========================
interface IConnectionState {
[from](https://baklava.tech/api/interfaces/_baklavajs_core.IConnectionState.html#from)
: string;
[id](https://baklava.tech/api/interfaces/_baklavajs_core.IConnectionState.html#id)
: string;
[to](https://baklava.tech/api/interfaces/_baklavajs_core.IConnectionState.html#to)
: string;
\[key: string\]: any;
}
#### Hierarchy
* Record
* IConnectionState
#### Indexable
* \[key: string\]: any
##### Index
### Properties
[from](https://baklava.tech/api/interfaces/_baklavajs_core.IConnectionState.html#from)
[id](https://baklava.tech/api/interfaces/_baklavajs_core.IConnectionState.html#id)
[to](https://baklava.tech/api/interfaces/_baklavajs_core.IConnectionState.html#to)
Properties
----------
### from[](https://baklava.tech/api/interfaces/_baklavajs_core.IConnectionState.html#from)
from: string
id of the source interface
### id[](https://baklava.tech/api/interfaces/_baklavajs_core.IConnectionState.html#id)
id: string
id of the connection
### to[](https://baklava.tech/api/interfaces/_baklavajs_core.IConnectionState.html#to)
to: string
id of the target interface
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Properties
[from](https://baklava.tech/api/interfaces/_baklavajs_core.IConnectionState.html#from)
[id](https://baklava.tech/api/interfaces/_baklavajs_core.IConnectionState.html#id)
[to](https://baklava.tech/api/interfaces/_baklavajs_core.IConnectionState.html#to)
---
# IAddNodeTypeEventData | Reference - BaklavaJS
* [@baklavajs/core](https://baklava.tech/api/modules/_baklavajs_core.html)
* [IAddNodeTypeEventData](https://baklava.tech/api/interfaces/_baklavajs_core.IAddNodeTypeEventData.html)
Interface IAddNodeTypeEventData
===============================
interface IAddNodeTypeEventData {
[options](https://baklava.tech/api/interfaces/_baklavajs_core.IAddNodeTypeEventData.html#options)
?: [IRegisterNodeTypeOptions](https://baklava.tech/api/interfaces/_baklavajs_core.IRegisterNodeTypeOptions.html)
;
[type](https://baklava.tech/api/interfaces/_baklavajs_core.IAddNodeTypeEventData.html#type)
: [AbstractNodeConstructor](https://baklava.tech/api/types/_baklavajs_core.AbstractNodeConstructor.html)
;
}
##### Index
### Properties
[options?](https://baklava.tech/api/interfaces/_baklavajs_core.IAddNodeTypeEventData.html#options)
[type](https://baklava.tech/api/interfaces/_baklavajs_core.IAddNodeTypeEventData.html#type)
Properties
----------
### `Optional`options[](https://baklava.tech/api/interfaces/_baklavajs_core.IAddNodeTypeEventData.html#options)
options?: [IRegisterNodeTypeOptions](https://baklava.tech/api/interfaces/_baklavajs_core.IRegisterNodeTypeOptions.html)
### type[](https://baklava.tech/api/interfaces/_baklavajs_core.IAddNodeTypeEventData.html#type)
type: [AbstractNodeConstructor](https://baklava.tech/api/types/_baklavajs_core.AbstractNodeConstructor.html)
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Properties
[options](https://baklava.tech/api/interfaces/_baklavajs_core.IAddNodeTypeEventData.html#options)
[type](https://baklava.tech/api/interfaces/_baklavajs_core.IAddNodeTypeEventData.html#type)
---
# GraphInputNode | Reference - BaklavaJS
* [@baklavajs/core](https://baklava.tech/api/modules/_baklavajs_core.html)
* [GraphInputNode](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html)
Class GraphInputNode
====================
#### Hierarchy
* GraphInterfaceNode<{ name: string }, { placeholder: any }\>
* GraphInputNode
##### Index
### Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#constructor)
### Properties
[\_title](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#_title)
[calculate?](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#calculate)
[events](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#events)
[graphInstance?](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#graphinstance)
[graphInterfaceId](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#graphinterfaceid)
[hooks](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#hooks)
[id](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#id)
[inputs](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#inputs)
[outputs](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#outputs)
[type](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#type)
### Accessors
[graph](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#graph)
[title](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#title)
### Methods
[addInput](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#addinput)
[addOutput](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#addoutput)
[initializeIo](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#initializeio)
[load](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#load)
[onDestroy](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#ondestroy)
[onPlaced](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#onplaced)
[registerGraph](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#registergraph)
[removeInput](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#removeinput)
[removeOutput](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#removeoutput)
[save](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#save)
[isGraphInputNode](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#isgraphinputnode)
Constructors
------------
### constructor[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#constructor)
* new GraphInputNode(): [GraphInputNode](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html)
[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#constructorgraphinputnode)
#### Returns [GraphInputNode](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html)
Properties
----------
### `Protected`\_title[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#_title)
\_title: string = ""
### `Optional`calculate[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#calculate)
calculate?: [CalculateFunction](https://baklava.tech/api/types/_baklavajs_core.CalculateFunction.html)
<
{ name: string },
{ placeholder: any },
[CalculationContext](https://baklava.tech/api/interfaces/_baklavajs_core.CalculationContext.html)
\>,
\>
The default implementation does nothing. Overwrite this method to do calculation.
#### Param: inputs[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#param-inputs)
Values of all input interfaces
#### Param: globalValues[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#param-globalvalues)
Set of values passed to every node by the engine plugin
#### Returns[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#returns)
Values for output interfaces
### events[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#events)
events: {
addInput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
addOutput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeAddInput: PreventableBaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeAddOutput: PreventableBaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeRemoveInput: PreventableBaklavaEvent<
[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
\>;
beforeRemoveOutput: PreventableBaklavaEvent<
[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
\>;
beforeTitleChanged: PreventableBaklavaEvent;
loaded: BaklavaEvent<[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
removeInput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
removeOutput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
titleChanged: BaklavaEvent;
update: BaklavaEvent<[INodeUpdateEventData](https://baklava.tech/api/interfaces/_baklavajs_core.INodeUpdateEventData.html)
| null, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
} = ...
### `Protected` `Optional`graphInstance[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#graphinstance)
graphInstance?: [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
### graphInterfaceId[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#graphinterfaceid)
graphInterfaceId: string
### hooks[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#hooks)
hooks: {
afterSave: SequentialHook<
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
\>;
beforeLoad: SequentialHook<
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
\>;
} = ...
### id[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#id)
id: string = ...
Unique identifier of the node
### inputs[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#inputs)
inputs: { name: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
} = ...
### outputs[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#outputs)
outputs: { placeholder: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
} = ...
### `Readonly`type[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#type)
type: "\_\_baklava\_SubgraphInputNode" = GRAPH\_INPUT\_NODE\_TYPE
Type of the node
Accessors
---------
### graph[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#graph)
* get graph(): [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
| undefined
The graph instance the node is placed in. `undefined` if the node hasn't been placed in a graph yet.
#### Returns [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
| undefined
### title[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#title)
* get title(): string
Customizable display name of the node.
#### Returns string
* set title(v: string): void
#### Parameters
* v: string
#### Returns void
Methods
-------
### `Protected`addInput[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#addinput)
* addInput(key: string, input: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
): boolean[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#addinput-1)
Add an input interface to the node
#### Parameters
* key: string
Key of the input
* input: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
The input instance
#### Returns boolean
True when the input was added, otherwise false (prevented by an event handler)
### `Protected`addOutput[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#addoutput)
* addOutput(key: string, output: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
): boolean[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#addoutput-1)
Add an output interface to the node
#### Parameters
* key: string
Key of the output
* output: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
The output instance
#### Returns boolean
True when the output was added, otherwise false (prevented by an event handler)
### `Protected`initializeIo[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#initializeio)
* initializeIo(): void[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#initializeio-1)
#### Returns void
### load[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#load)
* load(
state: IGraphInterfaceNodeState<{ name: string }, { placeholder: any }\>,
): void[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#load-1)
#### Parameters
* state: IGraphInterfaceNodeState<{ name: string }, { placeholder: any }\>
#### Returns void
### onDestroy[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#ondestroy)
* onDestroy(): void[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#ondestroy-1)
Override this method to perform cleanup when the node is deleted
#### Returns void
### onPlaced[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#onplaced)
* onPlaced(): void[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#onplaced-1)
Override this method to execute logic when the node is placed inside a graph
#### Returns void
### registerGraph[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#registergraph)
* registerGraph(graph: [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
): void[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#registergraph-1)
This function will automatically be called as soon as the node is added to a graph.
#### Parameters
* graph: [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
#### Returns void
### `Protected`removeInput[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#removeinput)
* removeInput(key: string): boolean[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#removeinput-1)
Remove an existing input
#### Parameters
* key: string
Key of the input.
#### Returns boolean
### `Protected`removeOutput[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#removeoutput)
* removeOutput(key: string): boolean[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#removeoutput-1)
Remove an existing output
#### Parameters
* key: string
Key of the output.
#### Returns boolean
### save[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#save)
* save(): IGraphInterfaceNodeState<{ name: string }, { placeholder: any }\>[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#save-1)
#### Returns IGraphInterfaceNodeState<{ name: string }, { placeholder: any }\>
### `Static`isGraphInputNode[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#isgraphinputnode)
* isGraphInputNode(v: [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
): v is [GraphInputNode](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html)
[](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#isgraphinputnode-1)
#### Parameters
* v: [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
#### Returns v is [GraphInputNode](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html)
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#constructor)
Properties
[\_title](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#_title)
[calculate](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#calculate)
[events](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#events)
[graphInstance](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#graphinstance)
[graphInterfaceId](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#graphinterfaceid)
[hooks](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#hooks)
[id](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#id)
[inputs](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#inputs)
[outputs](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#outputs)
[type](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#type)
Accessors
[graph](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#graph)
[title](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#title)
Methods
[addInput](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#addinput)
[addOutput](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#addoutput)
[initializeIo](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#initializeio)
[load](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#load)
[onDestroy](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#ondestroy)
[onPlaced](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#onplaced)
[registerGraph](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#registergraph)
[removeInput](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#removeinput)
[removeOutput](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#removeoutput)
[save](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#save)
[isGraphInputNode](https://baklava.tech/api/classes/_baklavajs_core.GraphInputNode.html#isgraphinputnode)
---
# IConnection | Reference - BaklavaJS
* [@baklavajs/core](https://baklava.tech/api/modules/_baklavajs_core.html)
* [IConnection](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html)
Interface IConnection
=====================
interface IConnection {
[from](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html#from)
: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
;
[id](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html#id)
: string;
[to](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html#to)
: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
;
}
#### Implemented by
* [Connection](https://baklava.tech/api/classes/_baklavajs_core.Connection.html)
* [DummyConnection](https://baklava.tech/api/classes/_baklavajs_core.DummyConnection.html)
##### Index
### Properties
[from](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html#from)
[id](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html#id)
[to](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html#to)
Properties
----------
### from[](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html#from)
from: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
### id[](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html#id)
id: string
### to[](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html#to)
to: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Properties
[from](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html#from)
[id](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html#id)
[to](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html#to)
---
# IEditorState | Reference - BaklavaJS
* [@baklavajs/core](https://baklava.tech/api/modules/_baklavajs_core.html)
* [IEditorState](https://baklava.tech/api/interfaces/_baklavajs_core.IEditorState.html)
Interface IEditorState
======================
interface IEditorState {
[graph](https://baklava.tech/api/interfaces/_baklavajs_core.IEditorState.html#graph)
: [IGraphState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphState.html)
;
[graphTemplates](https://baklava.tech/api/interfaces/_baklavajs_core.IEditorState.html#graphtemplates)
: [IGraphTemplateState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphTemplateState.html)
\[\];
\[key: string\]: any;
}
#### Hierarchy
* Record
* IEditorState
#### Indexable
* \[key: string\]: any
##### Index
### Properties
[graph](https://baklava.tech/api/interfaces/_baklavajs_core.IEditorState.html#graph)
[graphTemplates](https://baklava.tech/api/interfaces/_baklavajs_core.IEditorState.html#graphtemplates)
Properties
----------
### graph[](https://baklava.tech/api/interfaces/_baklavajs_core.IEditorState.html#graph)
graph: [IGraphState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphState.html)
### graphTemplates[](https://baklava.tech/api/interfaces/_baklavajs_core.IEditorState.html#graphtemplates)
graphTemplates: [IGraphTemplateState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphTemplateState.html)
\[\]
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Properties
[graph](https://baklava.tech/api/interfaces/_baklavajs_core.IEditorState.html#graph)
[graphTemplates](https://baklava.tech/api/interfaces/_baklavajs_core.IEditorState.html#graphtemplates)
---
# GraphOutputNode | Reference - BaklavaJS
* [@baklavajs/core](https://baklava.tech/api/modules/_baklavajs_core.html)
* [GraphOutputNode](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html)
Class GraphOutputNode
=====================
#### Hierarchy
* GraphInterfaceNode<{ name: string; placeholder: any }, { output: any }\>
* GraphOutputNode
##### Index
### Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#constructor)
### Properties
[\_title](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#_title)
[calculate](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#calculate)
[events](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#events)
[graphInstance?](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#graphinstance)
[graphInterfaceId](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#graphinterfaceid)
[hooks](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#hooks)
[id](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#id)
[inputs](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#inputs)
[outputs](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#outputs)
[type](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#type)
### Accessors
[graph](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#graph)
[title](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#title)
### Methods
[addInput](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#addinput)
[addOutput](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#addoutput)
[initializeIo](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#initializeio)
[load](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#load)
[onDestroy](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#ondestroy)
[onPlaced](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#onplaced)
[registerGraph](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#registergraph)
[removeInput](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#removeinput)
[removeOutput](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#removeoutput)
[save](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#save)
[isGraphOutputNode](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#isgraphoutputnode)
Constructors
------------
### constructor[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#constructor)
* new GraphOutputNode(): [GraphOutputNode](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html)
[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#constructorgraphoutputnode)
#### Returns [GraphOutputNode](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html)
Properties
----------
### `Protected`\_title[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#_title)
\_title: string = ""
### calculate[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#calculate)
calculate: [CalculateFunction](https://baklava.tech/api/types/_baklavajs_core.CalculateFunction.html)
<{ placeholder: any }, { output: any }\> = ...
The default implementation does nothing. Overwrite this method to do calculation.
#### Param: inputs[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#param-inputs)
Values of all input interfaces
#### Param: globalValues[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#param-globalvalues)
Set of values passed to every node by the engine plugin
#### Returns[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#returns)
Values for output interfaces
### events[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#events)
events: {
addInput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
addOutput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeAddInput: PreventableBaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeAddOutput: PreventableBaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeRemoveInput: PreventableBaklavaEvent<
[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
\>;
beforeRemoveOutput: PreventableBaklavaEvent<
[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
\>;
beforeTitleChanged: PreventableBaklavaEvent;
loaded: BaklavaEvent<[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
removeInput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
removeOutput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
titleChanged: BaklavaEvent;
update: BaklavaEvent<[INodeUpdateEventData](https://baklava.tech/api/interfaces/_baklavajs_core.INodeUpdateEventData.html)
| null, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
} = ...
### `Protected` `Optional`graphInstance[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#graphinstance)
graphInstance?: [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
### graphInterfaceId[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#graphinterfaceid)
graphInterfaceId: string
### hooks[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#hooks)
hooks: {
afterSave: SequentialHook<
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
\>;
beforeLoad: SequentialHook<
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
\>;
} = ...
### id[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#id)
id: string = ...
Unique identifier of the node
### inputs[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#inputs)
inputs: { name: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
; placeholder: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
} = ...
### outputs[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#outputs)
outputs: { output: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
} = ...
### `Readonly`type[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#type)
type: "\_\_baklava\_SubgraphOutputNode" = GRAPH\_OUTPUT\_NODE\_TYPE
Type of the node
Accessors
---------
### graph[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#graph)
* get graph(): [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
| undefined
The graph instance the node is placed in. `undefined` if the node hasn't been placed in a graph yet.
#### Returns [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
| undefined
### title[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#title)
* get title(): string
Customizable display name of the node.
#### Returns string
* set title(v: string): void
#### Parameters
* v: string
#### Returns void
Methods
-------
### `Protected`addInput[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#addinput)
* addInput(key: string, input: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
): boolean[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#addinput-1)
Add an input interface to the node
#### Parameters
* key: string
Key of the input
* input: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
The input instance
#### Returns boolean
True when the input was added, otherwise false (prevented by an event handler)
### `Protected`addOutput[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#addoutput)
* addOutput(key: string, output: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
): boolean[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#addoutput-1)
Add an output interface to the node
#### Parameters
* key: string
Key of the output
* output: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
The output instance
#### Returns boolean
True when the output was added, otherwise false (prevented by an event handler)
### `Protected`initializeIo[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#initializeio)
* initializeIo(): void[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#initializeio-1)
#### Returns void
### load[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#load)
* load(
state: IGraphInterfaceNodeState<
{ name: string; placeholder: any },
{ output: any },
\>,
): void[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#load-1)
#### Parameters
* state: IGraphInterfaceNodeState<{ name: string; placeholder: any }, { output: any }\>
#### Returns void
### onDestroy[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#ondestroy)
* onDestroy(): void[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#ondestroy-1)
Override this method to perform cleanup when the node is deleted
#### Returns void
### onPlaced[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#onplaced)
* onPlaced(): void[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#onplaced-1)
Override this method to execute logic when the node is placed inside a graph
#### Returns void
### registerGraph[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#registergraph)
* registerGraph(graph: [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
): void[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#registergraph-1)
This function will automatically be called as soon as the node is added to a graph.
#### Parameters
* graph: [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
#### Returns void
### `Protected`removeInput[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#removeinput)
* removeInput(key: string): boolean[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#removeinput-1)
Remove an existing input
#### Parameters
* key: string
Key of the input.
#### Returns boolean
### `Protected`removeOutput[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#removeoutput)
* removeOutput(key: string): boolean[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#removeoutput-1)
Remove an existing output
#### Parameters
* key: string
Key of the output.
#### Returns boolean
### save[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#save)
* save(): IGraphInterfaceNodeState<
{ name: string; placeholder: any },
{ output: any },
\>[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#save-1)
#### Returns IGraphInterfaceNodeState<{ name: string; placeholder: any }, { output: any }\>
### `Static`isGraphOutputNode[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#isgraphoutputnode)
* isGraphOutputNode(v: [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
): v is [GraphOutputNode](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html)
[](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#isgraphoutputnode-1)
#### Parameters
* v: [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
#### Returns v is [GraphOutputNode](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html)
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#constructor)
Properties
[\_title](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#_title)
[calculate](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#calculate)
[events](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#events)
[graphInstance](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#graphinstance)
[graphInterfaceId](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#graphinterfaceid)
[hooks](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#hooks)
[id](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#id)
[inputs](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#inputs)
[outputs](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#outputs)
[type](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#type)
Accessors
[graph](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#graph)
[title](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#title)
Methods
[addInput](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#addinput)
[addOutput](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#addoutput)
[initializeIo](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#initializeio)
[load](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#load)
[onDestroy](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#ondestroy)
[onPlaced](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#onplaced)
[registerGraph](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#registergraph)
[removeInput](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#removeinput)
[removeOutput](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#removeoutput)
[save](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#save)
[isGraphOutputNode](https://baklava.tech/api/classes/_baklavajs_core.GraphOutputNode.html#isgraphoutputnode)
---
# IDynamicNodeDefinition | Reference - BaklavaJS
* [@baklavajs/core](https://baklava.tech/api/modules/_baklavajs_core.html)
* [IDynamicNodeDefinition](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html)
Interface IDynamicNodeDefinition
======================================
interface IDynamicNodeDefinition<[I](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#i)
, [O](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#o)
\> {
[calculate](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#calculate)
?: [CalculateFunction](https://baklava.tech/api/types/_baklavajs_core.CalculateFunction.html)
, Dynamic<[O](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#o)
\>\>;
[inputs](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#inputs)
?: [InterfaceFactory](https://baklava.tech/api/types/_baklavajs_core.InterfaceFactory.html)
<[I](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#i)
\>;
[onCreate](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#oncreate)
?: (this: [DynamicNode](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html)
<[I](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#i)
, [O](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#o)
\>) \=> void;
[onDestroy](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#ondestroy)
?: (this: [DynamicNode](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html)
<[I](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#i)
, [O](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#o)
\>) \=> void;
[onPlaced](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#onplaced)
?: (this: [DynamicNode](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html)
<[I](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#i)
, [O](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#o)
\>) \=> void;
[onUpdate](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#onupdate)
: (
this: [DynamicNode](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html)
<[I](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#i)
, [O](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#o)
\>,
inputs: [I](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#i)
,
outputs: [O](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#o)
,
) \=> [DynamicNodeUpdateResult](https://baklava.tech/api/interfaces/_baklavajs_core.DynamicNodeUpdateResult.html)
;
[outputs](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#outputs)
?: [InterfaceFactory](https://baklava.tech/api/types/_baklavajs_core.InterfaceFactory.html)
<[O](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#o)
\>;
[title](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#title)
?: string;
[type](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#type)
: string;
}
#### Type Parameters
* I
* O
##### Index
### Properties
[calculate?](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#calculate)
[inputs?](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#inputs)
[onCreate?](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#oncreate)
[onDestroy?](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#ondestroy)
[onPlaced?](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#onplaced)
[onUpdate](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#onupdate)
[outputs?](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#outputs)
[title?](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#title)
[type](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#type)
Properties
----------
### `Optional`calculate[](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#calculate)
calculate?: [CalculateFunction](https://baklava.tech/api/types/_baklavajs_core.CalculateFunction.html)
, Dynamic<[O](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#o)
\>\>
This function is called by the engine with the input values. It should perform the necessary calculation and then return the output values
### `Optional`inputs[](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#inputs)
inputs?: [InterfaceFactory](https://baklava.tech/api/types/_baklavajs_core.InterfaceFactory.html)
<[I](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#i)
\>
Inputs of the node
### `Optional`onCreate[](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#oncreate)
onCreate?: (this: [DynamicNode](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html)
<[I](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#i)
, [O](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#o)
\>) \=> void
Called as soon as an instance of the node is created but before it is placed into a graph
### `Optional`onDestroy[](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#ondestroy)
onDestroy?: (this: [DynamicNode](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html)
<[I](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#i)
, [O](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#o)
\>) \=> void
Called after the node is removed from a graph. Can be used for cleanup
### `Optional`onPlaced[](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#onplaced)
onPlaced?: (this: [DynamicNode](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html)
<[I](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#i)
, [O](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#o)
\>) \=> void
Called when the node is placed into a graph
### onUpdate[](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#onupdate)
onUpdate: (
this: [DynamicNode](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html)
<[I](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#i)
, [O](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#o)
\>,
inputs: [I](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#i)
,
outputs: [O](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#o)
,
) \=> [DynamicNodeUpdateResult](https://baklava.tech/api/interfaces/_baklavajs_core.DynamicNodeUpdateResult.html)
This function is called whenever the value of one of the static input or output interfaces is changed. It should return a definition for every dynamic interface based on the values of the static interfaces.
### `Optional`outputs[](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#outputs)
outputs?: [InterfaceFactory](https://baklava.tech/api/types/_baklavajs_core.InterfaceFactory.html)
<[O](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#o)
\>
Outputs of the node
### `Optional`title[](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#title)
title?: string
Default title when creating the node. If not specified, it is set to the nodeType
### type[](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#type)
type: string
NodeType
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Properties
[calculate](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#calculate)
[inputs](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#inputs)
[onCreate](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#oncreate)
[onDestroy](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#ondestroy)
[onPlaced](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#onplaced)
[onUpdate](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#onupdate)
[outputs](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#outputs)
[title](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#title)
[type](https://baklava.tech/api/interfaces/_baklavajs_core.IDynamicNodeDefinition.html#type)
---
# Node | Reference - BaklavaJS
* [@baklavajs/core](https://baklava.tech/api/modules/_baklavajs_core.html)
* [Node](https://baklava.tech/api/classes/_baklavajs_core.Node.html)
Class Node`Abstract`
==========================
Abstract base class for every node
#### Type Parameters
* I
* O
#### Hierarchy ([View Summary](https://baklava.tech/api/hierarchy.html#@baklavajs/core.Node)
)
* [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
* Node
* [DynamicNode](https://baklava.tech/api/classes/_baklavajs_core.DynamicNode.html)
##### Index
### Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_core.Node.html#constructor)
### Properties
[\_title](https://baklava.tech/api/classes/_baklavajs_core.Node.html#_title)
[calculate?](https://baklava.tech/api/classes/_baklavajs_core.Node.html#calculate)
[events](https://baklava.tech/api/classes/_baklavajs_core.Node.html#events)
[graphInstance?](https://baklava.tech/api/classes/_baklavajs_core.Node.html#graphinstance)
[hooks](https://baklava.tech/api/classes/_baklavajs_core.Node.html#hooks)
[id](https://baklava.tech/api/classes/_baklavajs_core.Node.html#id)
[inputs](https://baklava.tech/api/classes/_baklavajs_core.Node.html#inputs)
[outputs](https://baklava.tech/api/classes/_baklavajs_core.Node.html#outputs)
[type](https://baklava.tech/api/classes/_baklavajs_core.Node.html#type)
### Accessors
[graph](https://baklava.tech/api/classes/_baklavajs_core.Node.html#graph)
[title](https://baklava.tech/api/classes/_baklavajs_core.Node.html#title)
### Methods
[addInput](https://baklava.tech/api/classes/_baklavajs_core.Node.html#addinput)
[addOutput](https://baklava.tech/api/classes/_baklavajs_core.Node.html#addoutput)
[initializeIo](https://baklava.tech/api/classes/_baklavajs_core.Node.html#initializeio)
[load](https://baklava.tech/api/classes/_baklavajs_core.Node.html#load)
[onDestroy](https://baklava.tech/api/classes/_baklavajs_core.Node.html#ondestroy)
[onPlaced](https://baklava.tech/api/classes/_baklavajs_core.Node.html#onplaced)
[registerGraph](https://baklava.tech/api/classes/_baklavajs_core.Node.html#registergraph)
[removeInput](https://baklava.tech/api/classes/_baklavajs_core.Node.html#removeinput)
[removeOutput](https://baklava.tech/api/classes/_baklavajs_core.Node.html#removeoutput)
[save](https://baklava.tech/api/classes/_baklavajs_core.Node.html#save)
Constructors
------------
### constructor[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#constructor)
* new Node<[I](https://baklava.tech/api/classes/_baklavajs_core.Node.html#constructornodei)
, [O](https://baklava.tech/api/classes/_baklavajs_core.Node.html#constructornodeo)
\>(): [Node](https://baklava.tech/api/classes/_baklavajs_core.Node.html)
<[I](https://baklava.tech/api/classes/_baklavajs_core.Node.html#constructornodei)
, [O](https://baklava.tech/api/classes/_baklavajs_core.Node.html#constructornodeo)
\>[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#constructornode)
#### Type Parameters
* I
* O
#### Returns [Node](https://baklava.tech/api/classes/_baklavajs_core.Node.html)
<[I](https://baklava.tech/api/classes/_baklavajs_core.Node.html#constructornodei)
, [O](https://baklava.tech/api/classes/_baklavajs_core.Node.html#constructornodeo)
\>
Properties
----------
### `Protected`\_title[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#_title)
\_title: string = ""
### `Optional`calculate[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#calculate)
calculate?: [CalculateFunction](https://baklava.tech/api/types/_baklavajs_core.CalculateFunction.html)
<[I](https://baklava.tech/api/classes/_baklavajs_core.Node.html#constructornodei)
, [O](https://baklava.tech/api/classes/_baklavajs_core.Node.html#constructornodeo)
, [CalculationContext](https://baklava.tech/api/interfaces/_baklavajs_core.CalculationContext.html)
\>\>
The default implementation does nothing. Overwrite this method to do calculation.
#### Param: inputs[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#param-inputs)
Values of all input interfaces
#### Param: globalValues[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#param-globalvalues)
Set of values passed to every node by the engine plugin
#### Returns[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#returns)
Values for output interfaces
### events[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#events)
events: {
addInput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
addOutput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeAddInput: PreventableBaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeAddOutput: PreventableBaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeRemoveInput: PreventableBaklavaEvent<
[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
\>;
beforeRemoveOutput: PreventableBaklavaEvent<
[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
\>;
beforeTitleChanged: PreventableBaklavaEvent;
loaded: BaklavaEvent<[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
removeInput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
removeOutput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
titleChanged: BaklavaEvent;
update: BaklavaEvent<[INodeUpdateEventData](https://baklava.tech/api/interfaces/_baklavajs_core.INodeUpdateEventData.html)
| null, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
} = ...
### `Protected` `Optional`graphInstance[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#graphinstance)
graphInstance?: [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
### hooks[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#hooks)
hooks: {
afterSave: SequentialHook<
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
\>;
beforeLoad: SequentialHook<
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
\>;
} = ...
### id[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#id)
id: string = ...
Unique identifier of the node
### `Abstract`inputs[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#inputs)
inputs: [NodeInterfaceDefinition](https://baklava.tech/api/types/_baklavajs_core.NodeInterfaceDefinition.html)
<[I](https://baklava.tech/api/classes/_baklavajs_core.Node.html#constructornodei)
\>
### `Abstract`outputs[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#outputs)
outputs: [NodeInterfaceDefinition](https://baklava.tech/api/types/_baklavajs_core.NodeInterfaceDefinition.html)
<[O](https://baklava.tech/api/classes/_baklavajs_core.Node.html#constructornodeo)
\>
### `Abstract` `Readonly`type[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#type)
type: string
Type of the node
Accessors
---------
### graph[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#graph)
* get graph(): [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
| undefined
The graph instance the node is placed in. `undefined` if the node hasn't been placed in a graph yet.
#### Returns [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
| undefined
### title[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#title)
* get title(): string
Customizable display name of the node.
#### Returns string
* set title(v: string): void
#### Parameters
* v: string
#### Returns void
Methods
-------
### `Protected`addInput[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#addinput)
* addInput(key: string, input: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
): boolean[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#addinput-1)
Add an input interface to the node
#### Parameters
* key: string
Key of the input
* input: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
The input instance
#### Returns boolean
True when the input was added, otherwise false (prevented by an event handler)
### `Protected`addOutput[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#addoutput)
* addOutput(key: string, output: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
): boolean[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#addoutput-1)
Add an output interface to the node
#### Parameters
* key: string
Key of the output
* output: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
The output instance
#### Returns boolean
True when the output was added, otherwise false (prevented by an event handler)
### `Protected`initializeIo[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#initializeio)
* initializeIo(): void[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#initializeio-1)
#### Returns void
### load[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#load)
* load(state: [INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
<[I](https://baklava.tech/api/classes/_baklavajs_core.Node.html#constructornodei)
, [O](https://baklava.tech/api/classes/_baklavajs_core.Node.html#constructornodeo)
\>): void[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#load-1)
#### Parameters
* state: [INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
<[I](https://baklava.tech/api/classes/_baklavajs_core.Node.html#constructornodei)
, [O](https://baklava.tech/api/classes/_baklavajs_core.Node.html#constructornodeo)
\>
#### Returns void
### onDestroy[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#ondestroy)
* onDestroy(): void[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#ondestroy-1)
Override this method to perform cleanup when the node is deleted
#### Returns void
### onPlaced[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#onplaced)
* onPlaced(): void[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#onplaced-1)
Override this method to execute logic when the node is placed inside a graph
#### Returns void
### registerGraph[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#registergraph)
* registerGraph(graph: [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
): void[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#registergraph-1)
This function will automatically be called as soon as the node is added to a graph.
#### Parameters
* graph: [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
#### Returns void
### `Protected`removeInput[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#removeinput)
* removeInput(key: string): boolean[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#removeinput-1)
Remove an existing input
#### Parameters
* key: string
Key of the input.
#### Returns boolean
### `Protected`removeOutput[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#removeoutput)
* removeOutput(key: string): boolean[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#removeoutput-1)
Remove an existing output
#### Parameters
* key: string
Key of the output.
#### Returns boolean
### save[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#save)
* save(): [INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
<[I](https://baklava.tech/api/classes/_baklavajs_core.Node.html#constructornodei)
, [O](https://baklava.tech/api/classes/_baklavajs_core.Node.html#constructornodeo)
\>[](https://baklava.tech/api/classes/_baklavajs_core.Node.html#save-1)
#### Returns [INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
<[I](https://baklava.tech/api/classes/_baklavajs_core.Node.html#constructornodei)
, [O](https://baklava.tech/api/classes/_baklavajs_core.Node.html#constructornodeo)
\>
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_core.Node.html#constructor)
Properties
[\_title](https://baklava.tech/api/classes/_baklavajs_core.Node.html#_title)
[calculate](https://baklava.tech/api/classes/_baklavajs_core.Node.html#calculate)
[events](https://baklava.tech/api/classes/_baklavajs_core.Node.html#events)
[graphInstance](https://baklava.tech/api/classes/_baklavajs_core.Node.html#graphinstance)
[hooks](https://baklava.tech/api/classes/_baklavajs_core.Node.html#hooks)
[id](https://baklava.tech/api/classes/_baklavajs_core.Node.html#id)
[inputs](https://baklava.tech/api/classes/_baklavajs_core.Node.html#inputs)
[outputs](https://baklava.tech/api/classes/_baklavajs_core.Node.html#outputs)
[type](https://baklava.tech/api/classes/_baklavajs_core.Node.html#type)
Accessors
[graph](https://baklava.tech/api/classes/_baklavajs_core.Node.html#graph)
[title](https://baklava.tech/api/classes/_baklavajs_core.Node.html#title)
Methods
[addInput](https://baklava.tech/api/classes/_baklavajs_core.Node.html#addinput)
[addOutput](https://baklava.tech/api/classes/_baklavajs_core.Node.html#addoutput)
[initializeIo](https://baklava.tech/api/classes/_baklavajs_core.Node.html#initializeio)
[load](https://baklava.tech/api/classes/_baklavajs_core.Node.html#load)
[onDestroy](https://baklava.tech/api/classes/_baklavajs_core.Node.html#ondestroy)
[onPlaced](https://baklava.tech/api/classes/_baklavajs_core.Node.html#onplaced)
[registerGraph](https://baklava.tech/api/classes/_baklavajs_core.Node.html#registergraph)
[removeInput](https://baklava.tech/api/classes/_baklavajs_core.Node.html#removeinput)
[removeOutput](https://baklava.tech/api/classes/_baklavajs_core.Node.html#removeoutput)
[save](https://baklava.tech/api/classes/_baklavajs_core.Node.html#save)
---
# Editor | Reference - BaklavaJS
* [@baklavajs/core](https://baklava.tech/api/modules/_baklavajs_core.html)
* [Editor](https://baklava.tech/api/classes/_baklavajs_core.Editor.html)
Class Editor
============
The main model class for BaklavaJS
#### Implements
* IBaklavaEventEmitter
* IBaklavaTapable
##### Index
### Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#constructor)
### Properties
[connectionEvents](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#connectionevents)
[events](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#events)
[graphEvents](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#graphevents)
[graphHooks](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#graphhooks)
[graphTemplateEvents](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#graphtemplateevents)
[graphTemplateHooks](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#graphtemplatehooks)
[hooks](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#hooks)
[nodeEvents](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#nodeevents)
[nodeHooks](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#nodehooks)
### Accessors
[graph](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#graph)
[graphs](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#graphs)
[graphTemplates](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#graphtemplates)
[loading](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#loading)
[nodeTypes](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#nodetypes)
### Methods
[addGraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#addgraphtemplate)
[load](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#load)
[registerGraph](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#registergraph)
[registerNodeType](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#registernodetype)
[removeGraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#removegraphtemplate)
[save](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#save)
[unregisterGraph](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#unregistergraph)
[unregisterNodeType](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#unregisternodetype)
Constructors
------------
### constructor[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#constructor)
* new Editor(): [Editor](https://baklava.tech/api/classes/_baklavajs_core.Editor.html)
[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#constructoreditor)
#### Returns [Editor](https://baklava.tech/api/classes/_baklavajs_core.Editor.html)
Properties
----------
### connectionEvents[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#connectionevents)
connectionEvents: { destruct: BaklavaEvent } & ISubscribableProxy<
{ destruct: BaklavaEvent },
\> = ...
### events[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#events)
events: {
addGraphTemplate: BaklavaEvent<[GraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
, [Editor](https://baklava.tech/api/classes/_baklavajs_core.Editor.html)
\>;
beforeAddGraphTemplate: PreventableBaklavaEvent<[GraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
, [Editor](https://baklava.tech/api/classes/_baklavajs_core.Editor.html)
\>;
beforeRegisterNodeType: PreventableBaklavaEvent<
[IAddNodeTypeEventData](https://baklava.tech/api/interfaces/_baklavajs_core.IAddNodeTypeEventData.html)
,
[Editor](https://baklava.tech/api/classes/_baklavajs_core.Editor.html)
,
\>;
beforeRemoveGraphTemplate: PreventableBaklavaEvent<[GraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
, [Editor](https://baklava.tech/api/classes/_baklavajs_core.Editor.html)
\>;
beforeUnregisterNodeType: PreventableBaklavaEvent;
loaded: BaklavaEvent;
registerGraph: BaklavaEvent<[Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
, [Editor](https://baklava.tech/api/classes/_baklavajs_core.Editor.html)
\>;
registerNodeType: BaklavaEvent<[IAddNodeTypeEventData](https://baklava.tech/api/interfaces/_baklavajs_core.IAddNodeTypeEventData.html)
, [Editor](https://baklava.tech/api/classes/_baklavajs_core.Editor.html)
\>;
removeGraphTemplate: BaklavaEvent<[GraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
, [Editor](https://baklava.tech/api/classes/_baklavajs_core.Editor.html)
\>;
unregisterGraph: BaklavaEvent<[Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
, [Editor](https://baklava.tech/api/classes/_baklavajs_core.Editor.html)
\>;
unregisterNodeType: BaklavaEvent;
} = ...
### graphEvents[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#graphevents)
graphEvents: {
addConnection: BaklavaEvent<[IConnection](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>;
addNode: BaklavaEvent<[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>;
beforeAddConnection: PreventableBaklavaEvent<
[IAddConnectionEventData](https://baklava.tech/api/interfaces/_baklavajs_core.IAddConnectionEventData.html)
,
[Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
,
\>;
beforeAddNode: PreventableBaklavaEvent<[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>;
beforeRemoveConnection: PreventableBaklavaEvent<[IConnection](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>;
beforeRemoveNode: PreventableBaklavaEvent<[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>;
checkConnection: PreventableBaklavaEvent<[IAddConnectionEventData](https://baklava.tech/api/interfaces/_baklavajs_core.IAddConnectionEventData.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>;
removeConnection: BaklavaEvent<[IConnection](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>;
removeNode: BaklavaEvent<[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>;
} & ISubscribableProxy<
{
addConnection: BaklavaEvent<[IConnection](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>;
addNode: BaklavaEvent<[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>;
beforeAddConnection: PreventableBaklavaEvent<
[IAddConnectionEventData](https://baklava.tech/api/interfaces/_baklavajs_core.IAddConnectionEventData.html)
,
[Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
,
\>;
beforeAddNode: PreventableBaklavaEvent<[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>;
beforeRemoveConnection: PreventableBaklavaEvent<[IConnection](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>;
beforeRemoveNode: PreventableBaklavaEvent<[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>;
checkConnection: PreventableBaklavaEvent<[IAddConnectionEventData](https://baklava.tech/api/interfaces/_baklavajs_core.IAddConnectionEventData.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>;
removeConnection: BaklavaEvent<[IConnection](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>;
removeNode: BaklavaEvent<[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>;
},
\> = ...
### graphHooks[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#graphhooks)
graphHooks: {
checkConnection: ParallelHook<
[IAddConnectionEventData](https://baklava.tech/api/interfaces/_baklavajs_core.IAddConnectionEventData.html)
,
[CheckConnectionHookResult](https://baklava.tech/api/interfaces/_baklavajs_core.CheckConnectionHookResult.html)
,
[Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
,
\>;
load: SequentialHook<[IGraphState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphState.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
, [IGraphState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphState.html)
\>;
save: SequentialHook<[IGraphState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphState.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
, [IGraphState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphState.html)
\>;
} & ISubscribableProxy<
{
checkConnection: ParallelHook<
[IAddConnectionEventData](https://baklava.tech/api/interfaces/_baklavajs_core.IAddConnectionEventData.html)
,
[CheckConnectionHookResult](https://baklava.tech/api/interfaces/_baklavajs_core.CheckConnectionHookResult.html)
,
[Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
,
\>;
load: SequentialHook<[IGraphState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphState.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
, [IGraphState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphState.html)
\>;
save: SequentialHook<[IGraphState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphState.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
, [IGraphState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphState.html)
\>;
},
\> = ...
### graphTemplateEvents[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#graphtemplateevents)
graphTemplateEvents: {
nameChanged: BaklavaEvent;
updated: BaklavaEvent;
} & ISubscribableProxy<
{
nameChanged: BaklavaEvent;
updated: BaklavaEvent;
},
\> = ...
### graphTemplateHooks[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#graphtemplatehooks)
graphTemplateHooks: {
afterSave: SequentialHook<
[IGraphTemplateState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphTemplateState.html)
,
[GraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
,
[IGraphTemplateState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphTemplateState.html)
,
\>;
beforeLoad: SequentialHook<
[IGraphTemplateState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphTemplateState.html)
,
[GraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
,
[IGraphTemplateState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphTemplateState.html)
,
\>;
} & ISubscribableProxy<
{
afterSave: SequentialHook<
[IGraphTemplateState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphTemplateState.html)
,
[GraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
,
[IGraphTemplateState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphTemplateState.html)
,
\>;
beforeLoad: SequentialHook<
[IGraphTemplateState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphTemplateState.html)
,
[GraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
,
[IGraphTemplateState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphTemplateState.html)
,
\>;
},
\> = ...
### hooks[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#hooks)
hooks: {
load: SequentialHook<[IEditorState](https://baklava.tech/api/interfaces/_baklavajs_core.IEditorState.html)
, [Editor](https://baklava.tech/api/classes/_baklavajs_core.Editor.html)
, [IEditorState](https://baklava.tech/api/interfaces/_baklavajs_core.IEditorState.html)
\>;
save: SequentialHook<[IEditorState](https://baklava.tech/api/interfaces/_baklavajs_core.IEditorState.html)
, [Editor](https://baklava.tech/api/classes/_baklavajs_core.Editor.html)
, [IEditorState](https://baklava.tech/api/interfaces/_baklavajs_core.IEditorState.html)
\>;
} = ...
### nodeEvents[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#nodeevents)
nodeEvents: {
addInput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
addOutput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeAddInput: PreventableBaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeAddOutput: PreventableBaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeRemoveInput: PreventableBaklavaEvent<
[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
\>;
beforeRemoveOutput: PreventableBaklavaEvent<
[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
\>;
beforeTitleChanged: PreventableBaklavaEvent;
loaded: BaklavaEvent<[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
removeInput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
removeOutput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
titleChanged: BaklavaEvent;
update: BaklavaEvent<[INodeUpdateEventData](https://baklava.tech/api/interfaces/_baklavajs_core.INodeUpdateEventData.html)
| null, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
} & ISubscribableProxy<
{
addInput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
addOutput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeAddInput: PreventableBaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeAddOutput: PreventableBaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeRemoveInput: PreventableBaklavaEvent<
[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
\>;
beforeRemoveOutput: PreventableBaklavaEvent<
[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
\>;
beforeTitleChanged: PreventableBaklavaEvent;
loaded: BaklavaEvent<[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
removeInput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
removeOutput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
titleChanged: BaklavaEvent;
update: BaklavaEvent<[INodeUpdateEventData](https://baklava.tech/api/interfaces/_baklavajs_core.INodeUpdateEventData.html)
| null, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
},
\> = ...
### nodeHooks[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#nodehooks)
nodeHooks: {
afterSave: SequentialHook<
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
\>;
beforeLoad: SequentialHook<
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
\>;
} & ISubscribableProxy<
{
afterSave: SequentialHook<
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
\>;
beforeLoad: SequentialHook<
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
\>;
},
\> = ...
Accessors
---------
### graph[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#graph)
* get graph(): [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
The root graph
#### Returns [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
### graphs[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#graphs)
* get graphs(): ReadonlySet<[Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>
Set of all graphs in the editor, including subgraphs
#### Returns ReadonlySet<[Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>
### graphTemplates[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#graphtemplates)
* get graphTemplates(): readonly [GraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
\[\]
List of all registered graph templates (subgraphs)
#### Returns readonly [GraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
\[\]
### loading[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#loading)
* get loading(): boolean
Whether the editor is currently in the process of loading a saved graph
#### Returns boolean
### nodeTypes[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#nodetypes)
* get nodeTypes(): ReadonlyMap
List of all registered node types
#### Returns ReadonlyMap
Methods
-------
### addGraphTemplate[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#addgraphtemplate)
* addGraphTemplate(template: [GraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
): void[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#addgraphtemplate-1)
#### Parameters
* template: [GraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
#### Returns void
### load[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#load)
* load(state: [IEditorState](https://baklava.tech/api/interfaces/_baklavajs_core.IEditorState.html)
): string\[\][](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#load-1)
Load a state
#### Parameters
* state: [IEditorState](https://baklava.tech/api/interfaces/_baklavajs_core.IEditorState.html)
State to load
#### Returns string\[\]
An array of warnings that occured during loading. If the array is empty, the state was successfully loaded.
### registerGraph[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#registergraph)
* registerGraph(graph: [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
): void[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#registergraph-1)
#### Parameters
* graph: [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
#### Returns void
### registerNodeType[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#registernodetype)
* registerNodeType(
type: [AbstractNodeConstructor](https://baklava.tech/api/types/_baklavajs_core.AbstractNodeConstructor.html)
,
options?: [IRegisterNodeTypeOptions](https://baklava.tech/api/interfaces/_baklavajs_core.IRegisterNodeTypeOptions.html)
,
): void[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#registernodetype-1)
Register a new node type
#### Parameters
* type: [AbstractNodeConstructor](https://baklava.tech/api/types/_baklavajs_core.AbstractNodeConstructor.html)
Actual type / constructor of the node
* `Optional`options: [IRegisterNodeTypeOptions](https://baklava.tech/api/interfaces/_baklavajs_core.IRegisterNodeTypeOptions.html)
Optionally specify a title and/or a category for this node
#### Returns void
### removeGraphTemplate[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#removegraphtemplate)
* removeGraphTemplate(template: [GraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
): void[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#removegraphtemplate-1)
#### Parameters
* template: [GraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
#### Returns void
### save[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#save)
* save(): [IEditorState](https://baklava.tech/api/interfaces/_baklavajs_core.IEditorState.html)
[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#save-1)
Save a state
#### Returns [IEditorState](https://baklava.tech/api/interfaces/_baklavajs_core.IEditorState.html)
Current state
### unregisterGraph[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#unregistergraph)
* unregisterGraph(graph: [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
): void[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#unregistergraph-1)
#### Parameters
* graph: [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
#### Returns void
### unregisterNodeType[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#unregisternodetype)
* unregisterNodeType(type: string | [AbstractNodeConstructor](https://baklava.tech/api/types/_baklavajs_core.AbstractNodeConstructor.html)
): void[](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#unregisternodetype-1)
Unregister an existing node type. Will also remove all the nodes of this type in all graphs.
#### Parameters
* type: string | [AbstractNodeConstructor](https://baklava.tech/api/types/_baklavajs_core.AbstractNodeConstructor.html)
String type or node constructor, from which the type will be detected
#### Returns void
### Settings
Member Visibility
* Protected
* Inherited
ThemeOSLightDark
### On This Page
Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#constructor)
Properties
[connectionEvents](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#connectionevents)
[events](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#events)
[graphEvents](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#graphevents)
[graphHooks](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#graphhooks)
[graphTemplateEvents](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#graphtemplateevents)
[graphTemplateHooks](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#graphtemplatehooks)
[hooks](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#hooks)
[nodeEvents](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#nodeevents)
[nodeHooks](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#nodehooks)
Accessors
[graph](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#graph)
[graphs](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#graphs)
[graphTemplates](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#graphtemplates)
[loading](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#loading)
[nodeTypes](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#nodetypes)
Methods
[addGraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#addgraphtemplate)
[load](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#load)
[registerGraph](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#registergraph)
[registerNodeType](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#registernodetype)
[removeGraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#removegraphtemplate)
[save](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#save)
[unregisterGraph](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#unregistergraph)
[unregisterNodeType](https://baklava.tech/api/classes/_baklavajs_core.Editor.html#unregisternodetype)
---
# Graph | Reference - BaklavaJS
* [@baklavajs/core](https://baklava.tech/api/modules/_baklavajs_core.html)
* [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
Class Graph
===========
#### Implements
* IBaklavaEventEmitter
* IBaklavaTapable
##### Index
### Constructors
[constructor](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#constructor)
### Properties
[\_connections](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#_connections)
[\_destroying](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#_destroying)
[\_loading](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#_loading)
[\_nodes](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#_nodes)
[activeTransactions](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#activetransactions)
[connectionEvents](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#connectionevents)
[editor](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#editor)
[events](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#events)
[hooks](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#hooks)
[id](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#id)
[nodeEvents](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#nodeevents)
[nodeHooks](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#nodehooks)
[template?](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#template)
### Accessors
[connections](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#connections)
[destroying](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#destroying)
[inputs](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#inputs)
[loading](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#loading)
[nodes](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#nodes)
[outputs](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#outputs)
### Methods
[addConnection](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#addconnection)
[addNode](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#addnode)
[checkConnection](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#checkconnection)
[destroy](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#destroy)
[findNodeById](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#findnodebyid)
[findNodeInterface](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#findnodeinterface)
[load](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#load)
[removeConnection](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#removeconnection)
[removeNode](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#removenode)
[save](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#save)
Constructors
------------
### constructor[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#constructor)
* new Graph(editor: [Editor](https://baklava.tech/api/classes/_baklavajs_core.Editor.html)
, template?: [GraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
): [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#constructorgraph)
#### Parameters
* editor: [Editor](https://baklava.tech/api/classes/_baklavajs_core.Editor.html)
* `Optional`template: [GraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
#### Returns [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
Properties
----------
### `Protected`\_connections[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#_connections)
\_connections: [Connection](https://baklava.tech/api/classes/_baklavajs_core.Connection.html)
\[\] = \[\]
### `Protected`\_destroying[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#_destroying)
\_destroying: boolean = false
### `Protected`\_loading[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#_loading)
\_loading: boolean = false
### `Protected`\_nodes[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#_nodes)
\_nodes: [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\[\] = \[\]
### activeTransactions[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#activetransactions)
activeTransactions: number = 0
### connectionEvents[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#connectionevents)
connectionEvents: { destruct: BaklavaEvent } & ISubscribableProxy<
{ destruct: BaklavaEvent },
\> = ...
### editor[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#editor)
editor: [Editor](https://baklava.tech/api/classes/_baklavajs_core.Editor.html)
### events[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#events)
events: {
addConnection: BaklavaEvent<[IConnection](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>;
addNode: BaklavaEvent<[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>;
beforeAddConnection: PreventableBaklavaEvent<
[IAddConnectionEventData](https://baklava.tech/api/interfaces/_baklavajs_core.IAddConnectionEventData.html)
,
[Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
,
\>;
beforeAddNode: PreventableBaklavaEvent<[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>;
beforeRemoveConnection: PreventableBaklavaEvent<[IConnection](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>;
beforeRemoveNode: PreventableBaklavaEvent<[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>;
checkConnection: PreventableBaklavaEvent<[IAddConnectionEventData](https://baklava.tech/api/interfaces/_baklavajs_core.IAddConnectionEventData.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>;
removeConnection: BaklavaEvent<[IConnection](https://baklava.tech/api/interfaces/_baklavajs_core.IConnection.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>;
removeNode: BaklavaEvent<[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
\>;
} = ...
### hooks[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#hooks)
hooks: {
checkConnection: ParallelHook<
[IAddConnectionEventData](https://baklava.tech/api/interfaces/_baklavajs_core.IAddConnectionEventData.html)
,
[CheckConnectionHookResult](https://baklava.tech/api/interfaces/_baklavajs_core.CheckConnectionHookResult.html)
,
[Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
,
\>;
load: SequentialHook<[IGraphState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphState.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
, [IGraphState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphState.html)
\>;
save: SequentialHook<[IGraphState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphState.html)
, [Graph](https://baklava.tech/api/classes/_baklavajs_core.Graph.html)
, [IGraphState](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphState.html)
\>;
} = ...
### id[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#id)
id: string = ...
### nodeEvents[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#nodeevents)
nodeEvents: {
addInput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
addOutput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeAddInput: PreventableBaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeAddOutput: PreventableBaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeRemoveInput: PreventableBaklavaEvent<
[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
\>;
beforeRemoveOutput: PreventableBaklavaEvent<
[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
\>;
beforeTitleChanged: PreventableBaklavaEvent;
loaded: BaklavaEvent<[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
removeInput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
removeOutput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
titleChanged: BaklavaEvent;
update: BaklavaEvent<[INodeUpdateEventData](https://baklava.tech/api/interfaces/_baklavajs_core.INodeUpdateEventData.html)
| null, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
} & ISubscribableProxy<
{
addInput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
addOutput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeAddInput: PreventableBaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeAddOutput: PreventableBaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
beforeRemoveInput: PreventableBaklavaEvent<
[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
\>;
beforeRemoveOutput: PreventableBaklavaEvent<
[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
\>;
beforeTitleChanged: PreventableBaklavaEvent;
loaded: BaklavaEvent<[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
removeInput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
removeOutput: BaklavaEvent<[NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
titleChanged: BaklavaEvent;
update: BaklavaEvent<[INodeUpdateEventData](https://baklava.tech/api/interfaces/_baklavajs_core.INodeUpdateEventData.html)
| null, [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>;
},
\> = ...
### nodeHooks[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#nodehooks)
nodeHooks: {
afterSave: SequentialHook<
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
\>;
beforeLoad: SequentialHook<
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
\>;
} & ISubscribableProxy<
{
afterSave: SequentialHook<
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
\>;
beforeLoad: SequentialHook<
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
[AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
,
[INodeState](https://baklava.tech/api/interfaces/_baklavajs_core.INodeState.html)
,
\>;
},
\> = ...
### `Optional`template[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#template)
template?: [GraphTemplate](https://baklava.tech/api/classes/_baklavajs_core.GraphTemplate.html)
Accessors
---------
### connections[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#connections)
* get connections(): readonly [Connection](https://baklava.tech/api/classes/_baklavajs_core.Connection.html)
\[\]
List of all connections in this graph
#### Returns readonly [Connection](https://baklava.tech/api/classes/_baklavajs_core.Connection.html)
\[\]
### destroying[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#destroying)
* get destroying(): boolean
Whether the graph is currently in the process of destroying itself
#### Returns boolean
### inputs[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#inputs)
* get inputs(): [IGraphInterface](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphInterface.html)
\[\]
#### Returns [IGraphInterface](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphInterface.html)
\[\]
### loading[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#loading)
* get loading(): boolean
Whether the graph is currently in the process of loading a saved graph
#### Returns boolean
### nodes[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#nodes)
* get nodes(): readonly [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\[\]
List of all nodes in this graph
#### Returns readonly [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\[\]
### outputs[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#outputs)
* get outputs(): [IGraphInterface](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphInterface.html)
\[\]
#### Returns [IGraphInterface](https://baklava.tech/api/interfaces/_baklavajs_core.IGraphInterface.html)
\[\]
Methods
-------
### addConnection[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#addconnection)
* addConnection(
from: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
,
to: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
,
): [Connection](https://baklava.tech/api/classes/_baklavajs_core.Connection.html)
| undefined[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#addconnection-1)
Add a connection to the list of connections.
#### Parameters
* from: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
Start interface for the connection
* to: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
Target interface for the connection
#### Returns [Connection](https://baklava.tech/api/classes/_baklavajs_core.Connection.html)
| undefined
The created connection. If no connection could be created, returns `undefined`.
### addNode[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#addnode)
* addNode<[T](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#addnodet)
extends [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
\>(node: [T](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#addnodet)
): [T](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#addnodet)
| undefined[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#addnode-1)
Add a node to the list of nodes.
#### Type Parameters
* T extends [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
#### Parameters
* node: [T](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#addnodet)
Instance of a node
#### Returns [T](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#addnodet)
| undefined
Instance of the node or undefined if the node was not added
### checkConnection[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#checkconnection)
* checkConnection(
from: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
,
to: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
,
): [CheckConnectionResult](https://baklava.tech/api/types/_baklavajs_core.CheckConnectionResult.html)
[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#checkconnection-1)
Checks, whether a connection between two node interfaces would be valid.
#### Parameters
* from: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
The starting node interface (must be an output interface)
* to: [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
The target node interface (must be an input interface)
#### Returns [CheckConnectionResult](https://baklava.tech/api/types/_baklavajs_core.CheckConnectionResult.html)
Whether the connection is allowed or not.
### destroy[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#destroy)
* destroy(): void[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#destroy-1)
#### Returns void
### findNodeById[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#findnodebyid)
* findNodeById(id: string): [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
| undefined[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#findnodebyid-1)
Finds the Node with the provided id, as long as it exists in this graph
#### Parameters
* id: string
id of the Node to find
#### Returns [AbstractNode](https://baklava.tech/api/classes/_baklavajs_core.AbstractNode.html)
| undefined
The Node if found, otherwise undefined
### findNodeInterface[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#findnodeinterface)
* findNodeInterface(id: string): [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)
| undefined[](https://baklava.tech/api/classes/_baklavajs_core.Graph.html#findnodeinterface-1)
Finds the NodeInterface with the provided id, as long as it exists in this graph
#### Parameters
* id: string
id of the NodeInterface to find
#### Returns [NodeInterface](https://baklava.tech/api/classes/_baklavajs_core.NodeInterface.html)