Palantir Workshop: Low-Code Enterprise Application Building
Every large organization has this pain point: business departments have endless custom application needs, but IT's development schedule is perpetually overbooked.
Palantir Workshop: Low-Code Enterprise Application Building
“Series: S1 Palantir Decoded · Article 10 | Level: Beginner | Reading Time: 15 min
#TL;DR
- Palantir Workshop is a low-code application builder, but fundamentally different from OutSystems/Mendix/PowerApps — every Workshop component binds directly to Ontology objects, so data, permissions, and Actions flow naturally without "connectors" or "data source configurations."
- Workshop can build operational dashboards, approval workflows, control panels, and data entry forms, with all operations automatically routed through the Action audit trail for built-in compliance.
- coomia-dip implements equivalent capabilities through DashboardService with 17 widget types, supporting everything from simple metric cards to complex interactive applications.
#Introduction: The Enterprise Application Development Dilemma
Every large organization has this pain point: business departments have endless custom application needs, but IT's development schedule is perpetually overbooked.
Business department's wish list:
├── Supplier Performance Dashboard (Priority: High) → IT schedule: Q3
├── Inventory Alert Console (Priority: High) → IT schedule: Q4
├── Approval Tracking Interface (Priority: Medium) → IT schedule: Next Q1
├── Customer Complaint System (Priority: Medium) → IT schedule: Next Q2
├── Equipment Maintenance Tickets (Priority: Low) → IT schedule: Can't fit
└── ...47 more requests → IT: Not enough people
Low-code platforms emerged to solve this — letting business users build their own applications. But traditional low-code platforms have a fundamental problem:
Traditional low-code architecture:
┌──────────────┐
│ Low-Code IDE │
│ (Drag & drop) │
└──────┬───────┘
│ Must configure
▼
┌──────────────┐ ┌──────────────┐
│ Data Source │────→│ Database/API │
│ Connectors │ │ (Various) │
│ (Manual setup)│ └──────────────┘
└──────────────┘
│ Must configure
▼
┌──────────────┐
│ Permission │
│ System │
│ (Yet another)│
└──────────────┘
│ Must integrate
▼
┌──────────────┐
│ Workflow │
│ Engine │
│ (Another one)│
└──────────────┘
Every layer requires separate configuration and integration. The result: "low-code" becomes "half-as-much code" — still requiring massive configuration work.
Workshop's revolution: all these layers are unified by the Ontology.
#Part 1: What Can Workshop Build?
#1.1 Operational Dashboards
Real-time display of key business metrics with drill-down and Action triggering:
┌──────────────────────────────────────────────────────────┐
│ Supply Chain Operations Center [Full] [Share] │
├──────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ In-Transit│ │ Inventory│ │ On-Time │ │ Supplier │ │
│ │ Orders │ │ Alerts │ │ Delivery │ │ Risks │ │
│ │ 1,247 │ │ 23 !! │ │ 94.2% │ │ 3 !! │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ ┌─────────────────────┐ ┌─────────────────────────┐ │
│ │ Orders by Region │ │ This Month vs Last │ │
│ │ │ │ │ │
│ │ ## East 420 │ │ --- This Month │ │
│ │ ## South 310 │ │ ... Last Month │ │
│ │ # North 267 │ │ /--\ /-- │ │
│ │ # West 250 │ │ / \/--/ │ │
│ │ │ │ / │ │
│ └─────────────────────┘ └─────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Orders Requiring Attention [Batch Op] │ │
│ │ ┌────┬──────────┬────────┬──────┬──────────────┐ │ │
│ │ │ [] │ Order# │ Vendor │ Stat │ Actions │ │ │
│ │ ├────┼──────────┼────────┼──────┼──────────────┤ │ │
│ │ │ [] │ PO-12847 │ Huawei │ Late │ [Rush][Swap] │ │ │
│ │ │ [] │ PO-12851 │ ZTE │ Warn │ [Rush] │ │ │
│ │ │ [] │ PO-12853 │ BYD │ Late │ [Rush][Swap] │ │ │
│ │ └────┴──────────┴────────┴──────┴──────────────┘ │ │
│ └──────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────┘
#1.2 Approval Workflows
Visual approval status with one-click approve/reject:
┌──────────────────────────────────────────────────────┐
│ Procurement Approval Workbench │
├──────────────────────────────────────────────────────┤
│ │
│ Pending (7) │ My Requests (12) │ Completed (156) │
│ ══════════ │
│ │
│ ┌────────────────────────────────────────────────┐ │
│ │ PR-2024-0847: Purchase CNC Tooling │ │
│ │ │ │
│ │ Requestor: Zhang (Production) Amt: $18,000 │ │
│ │ Date: 2024-01-15 Vendor: Sandvik │ │
│ │ │ │
│ │ Approval Chain: │ │
│ │ Zhang(Req) → Li(Lead) → [You](Dir) → Wang(VP) │ │
│ │ Done Done Pending │ │
│ │ │ │
│ │ Related Objects: │ │
│ │ * Supplier: Sandvik (Risk Score: Low) │ │
│ │ * History: 32 purchases in 12 months, $210K │ │
│ │ * Inventory: CNC tools remaining 15 (est 3 days)│ │
│ │ │ │
│ │ [Approve] [Reject] [Return] [Comment] │ │
│ └────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────┘
#1.3 Data Entry Forms
Structured data entry with automatic validation and linking:
┌──────────────────────────────────────────────────────┐
│ New Quality Inspection Record │
├──────────────────────────────────────────────────────┤
│ │
│ Batch Number: [BT-2024-01-0847 ] ← Auto-link │
│ Product Name: CNC Precision Bearing (auto-filled) │
│ Product Line: Line A (auto-filled) │
│ │
│ Inspection Type: o First * In-Process o Final │
│ Sample Size: [100] units │
│ Defect Count: [3 ] units │
│ Defect Rate: 3.0% ← Auto-calculated │
│ │
│ Defect Types (multi-select): │
│ [x] Dimensional [ ] Surface [x] Material [ ] Other│
│ │
│ Equipment: [CNC-007 v] ← Select from Onto │
│ Operator: [Zhang (Sr.) v] ← Select from Onto │
│ │
│ Attachments: [+ Upload photos/reports] │
│ Notes: [ ] │
│ │
│ !! Defect rate > 2%: investigation ticket auto-created│
│ │
│ [Save Draft] [Submit] [Cancel] │
└──────────────────────────────────────────────────────┘
#1.4 Control Panels
Equipment monitoring and remote operations:
┌──────────────────────────────────────────────────────┐
│ Shop Floor Equipment Control Center │
├──────────────────────────────────────────────────────┤
│ │
│ CNC-007 Status Panel │
│ ┌─────────────────────────────────────────────┐ │
│ │ Status: [OK] Running Uptime: 127h 23m │ │
│ │ Spindle: 3,200 rpm Feed: 120 mm/min │ │
│ │ Tool Wear: 73% !! Coolant: 42 C │ │
│ │ │ │
│ │ Vibration Trend (24h): │ │
│ │ ------/\-----/\/\----------- │ │
│ │ ^ Anomaly detected │ │
│ │ │ │
│ │ [Pause] [Adjust Params] [Maintenance] [Hist] │ │
│ └─────────────────────────────────────────────┘ │
│ │
│ All Equipment Overview: │
│ CNC-001 OK CNC-002 OK CNC-003 !! CNC-004 OK │
│ CNC-005 OK CNC-006 OK CNC-007 !! CNC-008 XX │
│ CNC-009 OK CNC-010 OK CNC-011 OK CNC-012 OK │
└──────────────────────────────────────────────────────┘
#Part 2: Workshop's Core Mechanism — Component-Ontology Binding
#2.1 Component Binding Model
Every Workshop component obtains data and triggers operations through Ontology binding:
┌──────────────────────────────────────────────────┐
│ Workshop Component Binding │
│ │
│ ┌─────────────┐ │
│ │ Widget │ │
│ │ (Table/Chart/│ │
│ │ Form/Button)│ │
│ └──────┬──────┘ │
│ │ │
│ ┌────┴────┐ │
│ │ Binding │ │
│ │ Config │ │
│ └────┬────┘ │
│ │ │
│ ┌────┼──────────┬──────────────┐ │
│ ▼ ▼ ▼ ▼ │
│ ┌────┐ ┌────────┐ ┌───────────┐ ┌────────────┐ │
│ │Data│ │Filters │ │Sort Rules │ │Action │ │
│ │Src │ │ │ │ │ │Binding │ │
│ │ │ │ObjectSet│ │property │ │ActionType │ │
│ │Obj │ │filter │ │+ direction│ │+ param map │ │
│ │Type│ │ │ │ │ │ │ │
│ └────┘ └────────┘ └───────────┘ └────────────┘ │
│ │ │ │
│ │ Ontology Layer │ │
│ ▼ ▼ │
│ ┌──────────────────────────────────────────┐ │
│ │ Object Type + Properties + LinkTypes │ │
│ │ + ActionTypes + Permissions │ │
│ └──────────────────────────────────────────┘ │
└──────────────────────────────────────────────────┘
#2.2 Concrete Binding Example
{
"widget": "DataTable",
"binding": {
"objectType": "PurchaseOrder",
"objectSet": {
"filter": {
"and": [
{ "property": "status", "eq": "DELAYED" },
{ "property": "amount", "gte": 100000 }
]
},
"orderBy": [
{ "property": "dueDate", "direction": "ASC" }
],
"limit": 50
},
"columns": [
{ "property": "orderId", "label": "Order ID" },
{ "property": "supplierName", "label": "Supplier", "link": "Supplier" },
{ "property": "amount", "label": "Amount", "format": "currency" },
{ "property": "dueDate", "label": "Due Date", "format": "date" },
{ "property": "daysOverdue", "label": "Days Overdue", "derived": true }
],
"rowActions": [
{
"actionType": "RushOrder",
"label": "Rush",
"icon": "bolt",
"parameterMapping": {
"orderId": "$row.orderId",
"priority": "HIGH"
}
},
{
"actionType": "ChangeSupplier",
"label": "Change Supplier",
"icon": "swap",
"parameterMapping": {
"orderId": "$row.orderId",
"currentSupplierId": "$row.supplierId"
}
}
]
}
}
#2.3 Why Ontology Binding Beats Data Source Binding
Traditional low-code (data source binding):
Component → Connector → API/DB → Raw data → Handle permissions → Handle relations
Workshop (Ontology binding):
Component → Ontology → Auto permissions → Auto relations → Auto Actions → Done
Specific differences:
| Dimension | Data Source Binding | Ontology Binding |
|---|---|---|
| Fetch data | Configure API/SQL queries | Select ObjectType |
| Access control | Manually implement row/column filtering | Ontology auto-filters |
| Navigation | Manual JOINs/subqueries | Navigate via LinkTypes |
| Trigger operations | Manual API calls | Select ActionType |
| Schema changes | Component may break | Ontology absorbs changes |
| Audit trail | Manual logging | Action auto-audits |
#Part 3: Workshop vs Traditional Low-Code Platforms
#3.1 Core Comparison
| Dimension | Palantir Workshop | OutSystems | Mendix | PowerApps |
|---|---|---|---|---|
| Data model | Ontology objects | Entity model | Domain model | Dataverse/connectors |
| Data source | Ontology single entry | Multiple connectors | Multiple connectors | Multiple connectors |
| Permission model | Ontology inheritance | Self-built | Self-built | Azure AD |
| Operation trigger | Action (with audit) | Logic flows | Microflows | Power Automate |
| Best fit | Data-intensive ops apps | Full-stack apps | Full-stack apps | Lightweight apps |
| Offline support | Limited | Full | Full | Limited |
| Mobile | Responsive | Native app | Native app | Native app |
| Custom code | TypeScript extensions | C#/.NET | Java | Power Fx |
| Deployment | SaaS / On-premise | SaaS / On-premise | SaaS / On-premise | SaaS |
| Price | Enterprise custom | $$$$ | $$$ | $ |
#3.2 The Fundamental Difference: Ontology-Backed Low-Code
Traditional low-code platforms are essentially simplified application development frameworks — they simplify UI building and API calls, but data models, permissions, and workflows still need to be redefined within the low-code platform.
Workshop's fundamental difference: it's not an independent application platform but the presentation layer of the Ontology.
Traditional low-code:
┌─────────────┐
│ Low-Code │ ← Everything defined inside here
│ Platform │
│ ┌─────────┐ │
│ │ UI │ │
│ │ Data mdl│ │ ← Duplicate definition (out of sync with source)
│ │ Perms │ │ ← Duplicate definition (out of sync with IAM)
│ │ Workflow│ │ ← Duplicate definition (out of sync with process)
│ └─────────┘ │
└─────────────┘
Workshop:
┌─────────────┐
│ Workshop │ ← Only handles UI and interaction
│ ┌─────────┐ │
│ │ UI Comp. │──┼──→ Ontology (Data + Perms + Actions)
│ └─────────┘ │ ^ Single Source of Truth
└─────────────┘
This means:
- Any app created in Workshop automatically stays consistent with all other tools (Contour, Pipeline, API)
- Permission changes at the Ontology layer automatically apply to all Workshop apps
- New Actions defined at the Ontology layer automatically become available in all Workshop apps
#Part 4: Real-World Workshop Applications
#4.1 Case Study: Supply Chain Control Center
A mid-size manufacturer built a complete supply chain control center with Workshop, replacing three separate systems:
Before:
Supplier Management → SAP module (complex, non-supply-chain staff can't use)
Inventory Monitoring → Excel + manual inspection (delayed, often missed)
Logistics Tracking → Third-party system (data not interconnected)
After (Workshop App):
One unified interface:
├── Tab 1: Supplier Performance Dashboard
│ └── Reads Supplier objects + linked PurchaseOrders from Ontology
├── Tab 2: Inventory Alerts
│ └── Reads Inventory objects, auto-calculates alert thresholds
├── Tab 3: Logistics Tracking
│ └── Reads Shipment objects + real-time locations
└── Tab 4: Operations Center
└── Actions: Rush order, reallocate, change supplier, emergency procurement
Build time: 2 weeks (1 business analyst + 1 IT support), replacing a project originally estimated at 6 months of development.
#4.2 Case Study: Compliance Approval Platform
A financial institution built a transaction compliance approval platform with Workshop:
Transaction Submitted
│
▼
Workshop Approval Interface
├── Auto-displays: Transaction details, customer profile, historical patterns
├── Auto-flags: Risk level (from Reasoning Engine)
├── Auto-links: Related compliance rules and regulatory requirements
├── Action options:
│ ├── Approve (auto-records approver, time, rationale)
│ ├── Reject (must provide rejection reason)
│ ├── Escalate (auto-routes to superior)
│ └── Request supplementary materials
└── Audit trail: Every step recorded automatically, tamper-proof
#Part 5: coomia-dip Dashboard Implementation
#5.1 DashboardService Architecture
┌──────────────────────────────────────────────────────┐
│ coomia-dip Dashboard Engine │
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │Dashboard IDE │ │SDK Client │ │
│ │(Web, drag-drop)│ │(Python/TS) │ │
│ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────────────────────────────────────────┐ │
│ │ DashboardService (gRPC) │ │
│ │ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │ │
│ │ │Widget │ │Layout │ │Data Binding │ │ │
│ │ │Registry │ │Engine │ │Engine │ │ │
│ │ │(17 types)│ │(Grid) │ │(Ontology) │ │ │
│ │ └──────────┘ └──────────┘ └──────────────┘ │ │
│ │ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │ │
│ │ │Action │ │Filter │ │Permission │ │ │
│ │ │Binding │ │Sync │ │Enforcement │ │ │
│ │ └──────────┘ └──────────┘ └──────────────┘ │ │
│ └──────────────────────┬───────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────┐ │
│ │ Ontology Layer │ │
│ │ (Objects, │ │
│ │ Actions, │ │
│ │ Permissions) │ │
│ └──────────────────┘ │
└──────────────────────────────────────────────────────┘
#5.2 17 Widget Types
from ontology_sdk.dashboard import DashboardBuilder, WidgetType
# coomia-dip supported 17 widget types
widget_types = {
# Data Display (7 types)
"METRIC_CARD": "Metric Card — single value + trend arrow",
"DATA_TABLE": "Data Table — sort/filter/paginate/row Actions",
"BAR_CHART": "Bar Chart — stacked/grouped/horizontal",
"LINE_CHART": "Line Chart — multi-series/area/dual Y-axis",
"PIE_CHART": "Pie/Donut Chart — TopN + Others",
"MAP": "Map — heatmap/markers/choropleth",
"TIMELINE": "Timeline — event sequence display",
# Interactive (5 types)
"FORM": "Form — data entry/edit, fields derived from Ontology",
"FILTER_BAR": "Filter Bar — global filters linked to all widgets",
"ACTION_BUTTON": "Action Button — bound to ActionType, batch support",
"APPROVAL_PANEL": "Approval Panel — chain display + one-click operation",
"SEARCH_BOX": "Search Box — Ontology full-text object search",
# Layout (3 types)
"TAB_GROUP": "Tab Group — multi-page organization",
"SECTION": "Section — content grouping + collapsible",
"MODAL": "Modal — detail view/action confirmation",
# Advanced (2 types)
"OBJECT_DETAIL": "Object Detail — shows all properties and links of one object",
"RELATIONSHIP_GRAPH":"Relationship Graph — visualize Ontology object networks",
}
#5.3 Code Example: Building a Dashboard with SDK
from ontology_sdk.dashboard import DashboardBuilder, WidgetType, Layout
# Build supply chain control center
dashboard = (
DashboardBuilder("supply_chain_control_center")
.title("Supply Chain Operations Center")
.description("Real-time supply chain key metrics monitoring")
# Row 1: 4 metric cards
.add_widget(
WidgetType.METRIC_CARD,
id="in_transit",
title="In-Transit Orders",
binding={
"objectType": "PurchaseOrder",
"filter": {"property": "status", "eq": "IN_TRANSIT"},
"aggregation": "COUNT",
},
position=Layout.grid(row=0, col=0, width=3, height=2),
)
.add_widget(
WidgetType.METRIC_CARD,
id="inventory_alert",
title="Inventory Alerts",
binding={
"objectType": "Inventory",
"filter": {"property": "daysOfSupply", "lt": 7},
"aggregation": "COUNT",
},
alert_threshold={"warning": 10, "critical": 20},
position=Layout.grid(row=0, col=3, width=3, height=2),
)
.add_widget(
WidgetType.METRIC_CARD,
id="on_time_rate",
title="On-Time Delivery",
binding={
"objectType": "Shipment",
"filter": {"property": "deliveredAt", "gte": "THIS_MONTH"},
"aggregation": "AVG",
"property": "isOnTime",
},
format="percentage",
position=Layout.grid(row=0, col=6, width=3, height=2),
)
.add_widget(
WidgetType.METRIC_CARD,
id="high_risk_suppliers",
title="High-Risk Suppliers",
binding={
"objectType": "Supplier",
"filter": {"property": "riskScore", "gt": 0.7},
"aggregation": "COUNT",
},
position=Layout.grid(row=0, col=9, width=3, height=2),
)
# Row 2: Charts
.add_widget(
WidgetType.BAR_CHART,
id="regional_orders",
title="Orders by Region",
binding={
"objectType": "PurchaseOrder",
"groupBy": "region",
"aggregation": "COUNT",
},
position=Layout.grid(row=2, col=0, width=6, height=4),
)
.add_widget(
WidgetType.LINE_CHART,
id="trend",
title="Order Trend",
binding={
"objectType": "PurchaseOrder",
"timeSeries": {"field": "orderDate", "bucket": "1w"},
"aggregation": "COUNT",
"comparePrevious": True,
},
position=Layout.grid(row=2, col=6, width=6, height=4),
)
# Row 3: Data Table + Actions
.add_widget(
WidgetType.DATA_TABLE,
id="attention_orders",
title="Orders Requiring Attention",
binding={
"objectType": "PurchaseOrder",
"filter": {
"or": [
{"property": "status", "eq": "DELAYED"},
{"property": "daysToDelivery", "lt": 3},
]
},
"columns": ["orderId", "supplierName", "amount", "dueDate", "status"],
"orderBy": {"property": "dueDate", "direction": "ASC"},
},
row_actions=[
{"actionType": "RushOrder", "label": "Rush"},
{"actionType": "ChangeSupplier", "label": "Change Supplier"},
],
batch_actions=[
{"actionType": "BatchRushOrder", "label": "Batch Rush"},
],
position=Layout.grid(row=6, col=0, width=12, height=5),
)
# Global filters
.add_global_filter("dateRange", type="date_range", default="THIS_MONTH")
.add_global_filter("region", type="enum", objectType="PurchaseOrder", property="region")
.add_global_filter("status", type="enum", objectType="PurchaseOrder", property="status")
# Permissions
.permission(read=["supply_chain_team", "management"], write=["supply_chain_admin"])
.build()
)
# Deploy the dashboard
dashboard.deploy()
#5.4 Widget Linking Mechanism
# Cross-widget linking configuration
dashboard.link_widgets(
source="regional_orders", # Source: bar chart
target="attention_orders", # Target: data table
interaction="click", # Interaction: click
mapping={
"region": "$clicked.category", # Clicked bar → filter table's region
},
)
# Effect: User clicks "East" bar → data table auto-filters to East region orders
#Part 6: The Future of Enterprise Applications Through Workshop
#6.1 Traditional Dev vs Low-Code vs Ontology Low-Code
Application
Complexity
^
│ ┌───────────────────────────────┐
│ │ │
High│ │ Traditional Development │ ← Can do anything, but expensive & slow
│ │ (React + Spring Boot) │
│ │ │
│ └───────────────────────────────┘
│ ┌───────────────────────────────┐
│ │ │
Mid │ │ Ontology Low-Code │ ← Workshop's sweet spot
│ │ (Workshop) │ Data-intensive operational apps
│ │ │
│ └───────────────────────────────┘
│ ┌───────────────────────────────┐
│ │ │
Low │ │ Traditional Low-Code │ ← Simple forms/workflows
│ │ (PowerApps, etc.) │
│ │ │
│ └───────────────────────────────┘
└──────────────────────────────────→ Build Speed
#6.2 Workshop's Limitations
Workshop isn't a silver bullet. It's not suitable for:
- Consumer-facing apps: Workshop is designed for internal operations staff, not end consumers
- Highly custom UI: Workshop's component library is rich but bounded; extremely custom interfaces still need traditional development
- Offline-first scenarios: Workshop depends on real-time Ontology connectivity
- Non-data-intensive apps: If the app is mainly workflow rather than data operations, traditional low-code may be better
#Part 7: Best Practices
#7.1 Dashboard Design Principles
- 5-second rule: Opening a dashboard should reveal the most critical information within 5 seconds
- Three-layer structure: Overview (metric cards) then Analysis (charts) then Operations (data table + Actions)
- Action reachability: Every insight that requires action should have an Action button — never let users "see but can't do"
- Mobile-friendly: Key operations should work on mobile devices
#7.2 Common Mistakes
| Mistake | Consequence | Correct Approach |
|---|---|---|
| Too much info on one dashboard | Information overload | Split dashboards by role |
| Charts without Actions | Users don't know what to do next | Pair every insight with an Action |
| Poor permission config | Data leaks or unauthorized ops | Use Ontology permission inheritance |
| No global filters | Users can't focus | Provide time/region/status filters |
#Key Takeaways
- The fundamental difference between Workshop and traditional low-code is Ontology binding — components bind to business objects, not data sources. This means data, permissions, and Actions flow naturally, eliminating the massive "glue configuration" work in traditional low-code platforms.
- Workshop's core value is the "see to do" closed loop — it's not just a visualization tool but an operations platform. Every chart, every table can directly trigger business operations, which is what enterprise applications truly need.
- coomia-dip DashboardService provides 17 widget types through the Ontology binding model for data-driven dashboard construction. The SDK's declarative API enables dashboards to be defined in code, version-controlled, and automatically deployed.
#Next Article Preview
“Article 11: Palantir's Actions and Rules — Bridging Data Insight to Business Operations
What's behind those "Rush Order," "Change Supplier," and "Approve" buttons in Workshop? Actions are the core mechanism by which Palantir achieves the "data to action" closed loop. Next, we'll deep-dive into Action internals, the Rule engine, the Function runtime, and why this is the fundamental difference between Palantir and every BI/analytics platform.
#palantir #workshop #low-code #enterprise-applications #ontology #coomia-dip #dashboard