Graphileon runs applications by loading application logic — functions and triggers — from a label-property graph stored in a graph database, and subsequently executing them. The central pattern is:

(:IA_Function)-[:TRIGGER {type: event_name}]->(:IA_Function)

Combined with around 60 different function types, this pattern provides exceptional flexibility for building graph-powered applications.

Graph Elements (Vertex Labels)

Graphileon’s application model is built around the following node (vertex) labels stored in the graph database:

IA_FunctionA view function in the frontend or a function in the backend. The type property determines behaviour and available events.

IA_DashboardA workspace that can contain shortcuts to functions, serving as the entry point for users.

IA_UserA Graphileon user. Can hold personal shortcuts and be a member of one or more teams.

IA_TeamA Graphileon team. Users and teams can be members of a team, enabling nested team structures.

IA_PermissionA permission to execute a function or read a data element. Use of permissions is optional.

Allowed Patterns

These are the graph patterns that define how Graphileon’s application logic is structured:

  • Function triggers Function — all IA_Function vertices have a required type property that determines their behaviour and the outgoing events that can be triggered.
    (source:IA_Function {type})-[:TRIGGER]->(target:IA_Function {type})
  • Function requires PermissionREQUIRE edges have a required for property. Use of permissions is optional.
    (:IA_Function {type})-[:REQUIRE {for: read|query|filter}]->(:IA_Permission)
  • Dashboard shortcut to Function — the shortcut materialises as a button; activating it initiates the function.
    (:IA_Dashboard)-[:SHORTCUT {name}]->(:IA_Function {type})
  • User personal shortcut — appears as a button in the user segment on all accessible dashboards.
    (:IA_User)-[:SHORTCUT {name}]->(:IA_Function {type})
  • Team shortcut — appears as a button in the team segment on all accessible dashboards.
    (:IA_Team)-[:SHORTCUT {name}]->(:IA_Function {type})
  • Dashboard auto-start — loading the dashboard automatically starts the linked function.
    (:IA_Dashboard)-[:START]->(:IA_Function {type})
  • Dashboard bookmark — makes functions accessible at a named URL pattern.
    (:IA_Dashboard {iaName})-[:BOOKMARK {name}]->(:IA_Function {type})
  • User can see Dashboard
    (:IA_User)-[:DASHBOARD]->(:IA_Dashboard)
  • Team can see Dashboard — a user who is a member of a team can see a dashboard.
    (:IA_Team)-[:DASHBOARD]->(:IA_Dashboard)
  • User is member of Team
    (:IA_User)-[:MEMBER]->(:IA_Team)
  • Nested Team structure — team A is a member of team B; patterns can be chained.
    (:IA_Team {name: 'A'})-[:MEMBER]->(:IA_Team {name: 'B'})
  • User granted Permission
    (:IA_User)-[:ALLOW]->(:IA_Permission)
  • Team granted Permission
    (:IA_Team)-[:ALLOW]->(:IA_Permission)

Core Mechanisms

Understanding these mechanisms is essential to building effective Graphileon applications:

  1. Graphileon loads application logic from a label-property graph and executes functions and triggers. The central pattern (:IA_Function)-[:TRIGGER {type:event_name}]->(:IA_Function), combined with ~60 function types, enables great flexibility.
  2. :TRIGGER edges match specific events using the type property. A trigger with no type property fires on any event. Multiple events can be matched using an includes expression: { true: includes(['functionExecuted','functionUpdated'],(%).type) }.
  3. Functions are stored in (:IA_Function) nodes. Triggers are stored on edges and fired when events occur. Triggers support matching (when to fire) and mapping (what data to pass).
  4. The value of the type property on a [:TRIGGER] relationship must correspond to one of the event names of the source function.
  5. Query statements must be configured inside a Query function. If a TreeView or GridView needs data, use a Query function with a TRIGGER {type: 'success'} to the consumer.
  6. Application flows can be recursive — a function may trigger itself: (a:IA_Function)-[:TRIGGER {type:event_name}]->(a).
  7. When a UI widget function is triggered, it automatically executes and appears in the designated area (default: content).
  8. [:TRIGGER|SHORTCUT|START] edge property keys belong to one of these categories: match, map_to_target, match_to_path, manage_appearance, manage_instance, permission, or id.
  9. A public: false|true property on a [:TRIGGER] determines whether it fires without a logged-in user. Default is false.
  10. To pass parameters to a Query function, use a $params object on the trigger: {'$params.myParameter': '123'}.
  11. Backend functions are killed after execution unless stayAlive is set to dashboard or session. Commonly used with IO, Timer, CustomStyle, and Iterate.
  12. A new function instance is created on every incoming event unless the function’s _instance property is set to a specific name.
  13. UI widget triggers with {type: 'context'} create right-click context menus. Triggers with {type: 'batch'} create buttons at the top of the container.
  14. Triggers can access the global object via (@) — e.g. (@).user.name for the current user or (@).instances.myInstance.data for named instances.
  15. Triggers access event data via the event object (%) — e.g. (%).data for the event payload or (%)._function.cypher to read the source function’s property.
  16. Property keys starting with $_path. or #_path. map values to the application path object, accessible downstream via (%)._path.
  17. Instance management uses $_instance, $kill, and $_instanceUpdateOnly. $_instance: '_new'|[name]|'_previous'|'_all' directs flow to specific instances.
  18. Trigger property keys that do not start with # or $ are matching properties — conditions that must be true for the trigger to fire.
  19. Multiple matching conditions can be combined using true as the key: { true: (@).user.name == 'Tom' && (%).data.length >= 5 }.
  20. Function properties whose keys start with # or $ can be updated at runtime. Properties without these prefixes are read-only.
  21. UI functions are rendered inside containers. Container properties (id, title, state, area, height, width) are set via the $container property key.
  22. If a function renders in a container with an existing id, the previous function is killed and replaced — preventing screen clutter.
  23. Four default display areas exist: content (centre), sidebar-right, sidebar-left, and modal.
  24. Property values that reference expressions or combine multiple event/global objects must be wrapped in evaluate(): { $message: "evaluate('Hello ' + (@).user.name)" }.
  25. All parameters support Mustache templating by default: {{ placeholder }} is replaced at execution time. Templating can be disabled per parameter with the :templating: none meta property.
  26. Routing between application branches is achieved by creating multiple outgoing triggers with matching properties to determine which branch fires.
  27. Property keys must be unique on a function, ignoring the #/$ prefix — you cannot have both $foo and #foo on the same function.

Function Types

Graphileon provides approximately 60 function types spanning backend logic, data management, UI views, maps, charts, graph visualisation, and administration.

Backend & Logic

Server-side / Flow control

API

Represents an API endpoint that can receive requests from outside or from within Graphileon.

Events: request

IO

The most basic function — for passing, branching, or storing data without additional processing.

Query

Executes database queries in Cypher, Gremlin, or SPARQL on a specified store and returns results.

Events: success error

Request

Performs a request to an internal or external endpoint with options for authentication, custom headers, and download functionality.

Events: success fail

ElasticsearchQuery

Executes a query in Elasticsearch and processes results for Graphileon.

Events: success

ExecuteFunction

Executes another function identified by its database ID or iaName.

Events: success

Iterate

Processes each item in an array or object, triggering events for each key-value pair iteratively. Supports serial and parallel modes.

Events: iteration iterationEnd

Timer

Counts down from a specified time and triggers actions upon reaching zero, with optional repeat functionality.

Events: end

EventListener

Listens for global events such as login, logout, dashboard load, and errors, then conveys them via triggers.

Events: environmentLoaded login logout dashboardLoaded error languageChanged

SessionMessage

Broadcasts a message to a specified channel for session-based messaging across connected clients.

Events: messageReceived

Websocket

A backend function that establishes a WebSocket connection.

Hash

Generates cryptographic hash values from input data using algorithms from the crypto library.

Events: success error

CSVParser

Parses a delimited data string or remote URL and converts it into JSON format.

Events: success

Email

Sends an email to specified recipients. Requires mail server configuration in config.json.

Events: success

PreloadFunctions

Preloads multiple functions to improve application loading times and performance.

Events: success

Data Management

Graph database operations

DataManagement

Bundles actions for managing nodes and relations in the database.

Events: success

NodeManagement

Bundles actions for managing nodes — create, delete, update, import, and read.

Events: success

DeleteNode

Deletes a node from the graph database with an optional confirmation prompt.

Events: deleted

DeleteRelation

Deletes a relation from the graph database with an optional confirmation prompt.

Events: deleted

AppManagement

Bundles actions for managing Graphileon Apps — packages of functions and triggers.

Events: success

UI Views — Data Display

Tables, trees & grids

AgGridView

A powerful grid with styling, editing, grouping, and inline editing functions.

Events: cellClicked rowClicked cellValueChanged rowDragEnd action context

TableView

Renders data in a table format with customisable columns and row interactions.

Events: rowClick context

GridView

Displays data in a grid format with customisable columns and rows.

Events: rowClick rowDoubleClick cellClick context

TreeView

Displays data in a collapsible tree format with optional checkboxes, icons, and search.

Events: itemSelect itemClick itemCheck itemExpand itemDrag

PropertiesView

Displays detailed properties of a node or relation with options for specific entities and stores.

NeighboursView

Lists neighbours of a selected node or relationship in a filterable tree format with grouping and search.

Events: itemAddClick itemClick

DiffView

Compares two data objects and displays the differences between them.

Events: diff

ContainerListView

Renders a panel-management widget that lists open containers and lets users focus or close them.

UI Views — Forms & Input

User input & editing

InputView

Creates a dynamic form based on a JSON schema, supporting a variety of input types, validations, and customisations.

Events: change submit button treeSearch

SearchView

Displays a search form with customisable options and triggers.

Events: execute

EntityFormView

Unified form view used to create or edit both nodes and relationships.

Events: submitted created updated

NodeFormView

Edits properties for creating or updating nodes with predefined fields and styling options.

Events: created updated

RelationFormView

Allows editing properties for new or existing relationships between nodes.

Events: created updated

MarkdownEditView

Allows users to edit Markdown documents in code or WYSIWYG modes.

UI Views — Charts & Timeline

Data visualisation

ChartJsView

Renders a Chart.js chart with customisable options and data.

Events: click

ChartView

Renders a Google Chart with customisable data and options.

Events: select

TimelineView

Displays events in a timeline format with customisable event and group properties, markers, and visible time range.

Events: eventClick timelineClick timeMarkerChange visibleRangeChange

CalendarView

Renders a calendar displaying events, with options for clicking on specific events and days.

Events: eventClick dayClick

UI Views — Maps & Geo

Spatial & geographic

LeafletMapView

Enables map rendering with multiple layers, markers, GeoJSON data, and drawing tools using Leaflet.

Events: mapClick markerClick featureClick boundsChanged drawCreate

MapView

Displays a map with interactive markers, features, and optional address search.

Events: mapClick markerClick featureClick addressSelected

ImageMapView

Displays an interactive HTML image map with zooming and panning functionality.

UI Views — Graph & Network Visualisation

Graph rendering

YFilesView

Advanced graph and network visualisation using yFiles with customisable layouts, node and relation styles, and many interaction events.

Events: nodeClick nodeDoubleClick relationClick canvasClick nodeSelect relationCreate zoomToFit

YFilesIsometricView

Renders an isometric graph visualisation using yFiles components with customisable node styles and interactions.

Events: nodeClick nodeRightClick context

NetworkStylesView

Opens the styles editor, allowing users to edit styles for specific nodes or relationships.

UI Views — Layout & Content Rendering

Layout & HTML

LayoutView

Displays multiple views in a split workspace using resizable panels and tabs.

Events: tabCreated tabSelected tabClosed lastTabClosed

HtmlView

Generates HTML from a template and data, with optional interactive features.

Events: click context submit

MarkdownView

Renders a Markdown document with support for HTML, emoji, tables, and more.

CustomStyle

Adds global CSS style to the current dashboard.

IFC3DView

Loads IFC files and displays 3D construction designs, with functionality to interact and highlight elements.

Events: modelLoaded mouseOver IFCItemClick IFCItemRightClick

Navigation & Diagrams

Navigation & diagrams

LoadDashboard

Loads a specified dashboard with optional bookmark and parameters.

Navigate

Navigates the browser to a specified URL.

SaveDiagram

Saves or updates a diagram in the application store, including nodes, relations, and filters.

Events: success error

LoadDiagram

Loads a saved diagram node created with the YFilesView Save function.

Events: success error

Output & File Generation

File output

PDFFile

Generates a PDF document based on a JSON definition and triggers optional download.

Events: success

FileDownload

Downloads text content, such as query results or evaluated data, from Graphileon to the user’s local machine.

Events: success

Console

Generates console log or error messages in the browser console for debugging purposes.

Administration

User & team management

UserManagement

Manages user actions including creation, deletion, activation, and password handling.

Events: success error

TeamEditView

Manages team details and members, enabling creation, updating, and deletion of teams.

Events: created updated deleted

PermissionEditView

Manages permissions, allowing viewing and editing of permissions granted to teams and users.

Events: created updated deleted

SetPasswordView

Renders a view for users to set or change their password, with visible error or success messages.

Events: success error

TranslateView

Displays a grid interface to manage translations for different languages and namespaces.

Universal Events

In addition to the events listed for each individual function type, all function types fire the following events:

Event Description
functionExecuted Fires when the function has completed its execution actions.
functionUpdated Fires when the function model was updated.
functionClosed Fires when the function instance was closed.
error Fires when the function encounters an error.

Example Configurations

The following examples illustrate common patterns using Graphileon’s graph-based application syntax.

A query sending results to a chart, activated by a button on a dashboard
(db:IA_Dashboard)-[:SHORTCUT {name: 'start query'}]->
(q:IA_Function {type: 'Query', cypher: 'MATCH () .. RETURN ..', store: 'data'})-
[s:TRIGGER {type: 'success', #data: '(%).data'}]->
(cjs:IA_Function {type: 'ChartJsView'})
A query that starts automatically when a dashboard loads, sending results to a table
(db:IA_Dashboard)-[:START]->
(q:IA_Function {type: 'Query', cypher: 'MATCH () .. RETURN ..', store: 'data'})-
[r:TRIGGER {type: 'success', #data: '(%).data'}]->
(tv:IA_Function {type: 'TableView|GridView|AgGridView'})
A query that initiates a serial Iterate function, sending one email per result row
(q:IA_Function {type: 'Query', cypher: 'MATCH () .. RETURN ..', store: 'data'})-
[r:TRIGGER {type: 'success', #data: '(%).data'}]->
(it:IA_Function {type: 'Iterate'})-
[r2:TRIGGER {type: 'iteration', #data: '(%).data'}]->
(em:IA_Function {type: 'Email'})-
[r3:TRIGGER {type: 'sent', $iterationNext: true, $_instance: '_previous'}]->
(it)