And the system of action built on top.
An open-source foundation for modeling everything—your customers, your operations, your products, your people—as a unified knowledge graph. But we don't stop at insight. Define schemas. Enforce compliance rules. Trigger workflows. Turn your data model into a living, active system.
Palantir built a $50B company on one insight: enterprises are drowning in disconnected data, and the companies that can unify it win. But Palantir is for governments and Fortune 500s. What about everyone else?
| System | What it knows |
|---|---|
| Salesforce | your customers and deals |
| Stripe | your payments |
| Jira | your engineering work |
| Notion | your docs and processes |
| QuickBooks | your finances |
| Spreadsheets | fill the gaps between everything |
Each system has its own data model, its own API, its own way of thinking about entities. Want to answer "which customers who bought product X also had support tickets that mentioned feature Y, and what was the ARR impact?" Good luck stitching that together.
What if your database was as flexible as a spreadsheet, as queryable as SQL, and never forgot anything?
Most databases are passive. You query them, they answer. Open Ontology is different. Your ontology isn't just a model—it's a living system that knows what should exist, detects when reality diverges, and drives action to close the gap.
Define your domain with typed attributes, relationships, and validation rules. Want employees to have emails? Contracts to reference signers? The schema evolves with your understanding—no migrations, just new versions.
Write declarative rules that query for what shouldn't exist. "Onboarding employees without a signed contract." If the query returns results, you have violations. Rules run continuously or on-demand.
When violations are detected, automatically create tasks, assign to users or roles, and track through resolution. Your ontology doesn't just show you problems—it drives action to fix them.
Every fact in the system is stored as a triple: [entity, attribute, value]. No tables. No rigid schemas. Just facts about entities.
Define schemas, write compliance rules, and let the system drive resolution. Everything is declarative. Everything is queryable. Everything has history.
Built for the AI era. Your ontology becomes a shared language between humans and machines.
"Show me employees who started this quarter but haven't completed security training"
Compiles to:
| Audience | Why Open Ontology |
|---|---|
| Spreadsheet escapees | The flexibility you love without the fragility. Real relationships between entities. Actual query power. Plus rules that catch errors before they spread. |
| Airtable alumni | Break free from the table paradigm. Your data model evolves with your understanding. Build workflows on your data, not around it. |
| Salesforce survivors | Own your data model. Every fact is first-class. Define your own compliance rules, not theirs. Relationships are what you define. |
| Founders and operators | Build your own Palantir—not just for insight, but for action. Compliance rules, task workflows, audit trails. A unified operating system for your business. |
| Compliance teams | Define rules in Datalog, not spreadsheets. Continuous monitoring, automatic violation detection, and full audit trails. Ask "what was our compliance posture on January 15th?" and get an answer. |
| Operations teams | Turn your data model into a workflow engine. When data changes, rules fire, tasks get created, people get notified. No integration middleware—the ontology is the system. |
Datalog is a declarative query language that makes complex relational queries feel like pattern matching. Variables that appear in multiple patterns create implicit joins.
Your data. Your model. Your rules. Your workflows.
Schemas → Rules → Violations → Tasks ↑ ↓ └──── Data gets fixed ─────────┘[salesforce/account-123, :account:name, "Acme Corp"][salesforce/account-123, :account:industry, "Technology"][salesforce/account-123, :account:owner, salesforce/user-456][stripe/customer-789, :customer:email, "[email protected]"][stripe/customer-789, :same-as, salesforce/account-123][stripe/customer-789, :customer:mrr, 5000][jira/ticket-101, :ticket:reporter-org, salesforce/account-123][jira/ticket-101, :ticket:title, "API latency issues"][jira/ticket-101, :ticket:priority, "high"]{ entityType: "Employee", attributes: { name: { type: "string", required: true }, email: { type: "string", format: "email", required: true }, department: { type: "ref", target: "Department", required: true }, startDate: { type: "datetime", required: true } }}{ name: "contract-required", severity: "error", entityType: "Employee", query: { find: ["?emp", "?name"], where: [ ["?emp", ":employee:status", "onboarding"], ["?emp", ":employee:name", "?name"], ["not", ["?doc", ":document:employee", "?emp"], ["?doc", ":document:type", "contract"]] ] }, message: "{{?name}} is missing required contract"}{ find: ["?emp", "?name", "?startDate"], where: [ ["?emp", ":_meta/type", "Employee"], ["?emp", ":employee:name", "?name"], ["?emp", ":employee:start-date", "?startDate"], [">=", "?startDate", 1727740800000], ["not", ["?t", ":training:employee", "?emp"], ["?t", ":training:course", "?c"], ["?c", ":course:name", "Security Training"], ["?t", ":training:status", "completed"]] ]}// Find high-value customers with critical support issues{ find: ["?customer", "?name", "?mrr", "?ticket", "?issue"], where: [ ["?customer", ":customer:name", "?name"], ["?stripe", ":same-as", "?customer"], ["?stripe", ":customer:mrr", "?mrr"], [">=", "?mrr", 1000], ["?ticket", ":ticket:reporter-org", "?customer"], ["?ticket", ":ticket:priority", "high"], ["?ticket", ":ticket:title", "?issue"] ]}// What did our top accounts look like before the Q3 pricing change?const beforePriceChange = yield* store.queryAsOf( { attribute: ":account:arr" }, new Date("2024-06-30").getTime())// How has account health changed over time?const healthHistory = yield* store.history("crm/account-123")