store:authored-byWilliam Shakespeare store:authorstore:suggestsMacbeth store:bookstore:suggestsRomeo and Juliet store:booka:childof Books n:nodea:has_tagplay
The governed content repository at the core of Gitana
A graph-based repository for structured and unstructured content, with Git-like versioning, policy-driven security and a high-performance API for search, query, traversal and GraphQL.
Key features
-
Graph content model
Typed nodes and associations, with inheritance, aspects, validation and rules bound to the model.
-
Git-like versioning
Every change is a changeset. Work in branches and merge with field-level conflict detection.
-
High-performance API
REST and GraphQL, with full-text, vector and SQL-like query and traversal across version history.
The content graph and model
Content lives in a graph: nodes connected by typed associations. Both are first-class, both carry your properties and behaviors, and the graph can be traversed, queried or fetched with GraphQL.
-
Nodes and associations
Model custom properties at any depth on nodes and associations. Relator properties give editors pickers for linking content, and the engine keeps both ends of the graph in sync.
-
Types, inheritance and aspects
Types inherit from parent types. Aspects add properties and behaviors to any type at any level, such as rights metadata on every book.
-
Find across the graph
Combine traversal with SQL-like query, full-text search and vector search, scoped to one part of the graph.
HamletGraphstore:bookType{
"_qname": "store:book",
"_type": "d:type",
"_parent": "n:node",
"properties": {
"title": { "type": "string" },
"summary": { "type": "string" }
},
"mandatoryFeatures": {
"store:licensed": {}
}
}
A type defines the shape of a book. It inherits from n:node, and mandatoryFeatures requires every book to carry rights.
store:licensedFeature{
"_qname": "store:licensed",
"_type": "d:feature",
"properties": {
"rights": {
"license": { "type": "string" },
"holder": { "type": "string" },
"territories": { "type": "array" }
}
}
}
A feature adds shared fields and behavior to any type that needs them, or to a single node.
store:authored-byAssociation{
"_qname": "store:authored-by",
"_type": "d:association",
"_parent": "a:linked",
"properties": {
"role": {
"type": "string",
"enum": ["author", "editor"]
}
}
}
An association is a typed, directional link from a book to its author that carries its own properties. It extends a:linked, the built-in link type.
Git-like versioning for every node
The repository runs on changeset versioning: every create, update and delete is a commit you can compare, restore or merge. Editors work in branches, and merges detect conflicts and resolve them field by field.
-
Changesets for every change
Every write is stored on a transactional changeset, so you can compare any two points in time and roll back to a last known good state.
-
Branches and workspaces
Draft, test and review in isolated branches without stepping on each other’s work. Merge directly or through pull requests, with side-by-side differencing and cherry picking.
-
Tags, snapshots and aliases
Label branches to switch the live branch behind a site, or let deployment rules promote an approved branch to another project or data center.
HamletHistorymasterspring-catalogRelease: Spring 2026
44:95f85022Merge spring-catalog into master · 1 conflict resolved inrights.territories43:7c21d0a4Edit/summaryon spring-catalog · editor42:e9a03f61Add EU torights.territorieson spring-catalog41:3b5d8e17Add CA torights.territorieson master
Rules and access policies
Logic and security bind to the model. Rules, scripts and web hooks run on lifecycle events, and access policies decide who can do what to which content.
-
Lifecycle policies
beforeandafterhandlers fire as content, branches, merges and publications change. Bind a rule, a server-side script or a web hook to a handler and it runs as people work. -
Access policies
JSON documents that grant or revoke roles under conditions such as locale, assigned globally or per project to users, groups or teams.
-
Roles and teams
Group permissions such as
READ,WRITEandDELETEinto roles, then assign them through teams such as editors, managers or partners.
Lifecycle policies Workflow and automation Security overview
Editor of Spanish TranslationsAccess policy{
"title": "Editor of Spanish Translations",
"statements": [{
"action": "grant",
"roles": ["editor"],
"conditions": [{
"type": "locale",
"config": { "locale": "es" }
}]
}]
}
Security and operations built in
- Authentication
- Every API call needs an authenticated client and an authenticated user over OAuth 2.0. Single sign-on (SAML 2.0) and multifactor authentication are built in.
- Security overview
- Distributed jobs
- Long-running work such as bulk imports and publishing runs on a distributed job queue. Dedicated and priority queues keep live publishing ahead of drafts, and more queues can be added as you grow.
- Transfer
- Export projects, branches, content and files to archives, then restore them into any environment. The Packager library bulk-loads data from file systems, databases and CSV in one transactional import.
Easy to connect
A REST API, GraphQL and drivers for the major languages connect your applications to Gitana and its content.
-
Secure
One API for all of your content creation and retrieval needs. Authentication is performed using OAuth 2.0 and features encrypted bearer tokens that are compatible with your enterprise single sign-on.
-
Powerful
Every function and capability of Gitana is available via the API, no matter whether for editorial or delivery purposes. Take advantage of pagination, sorting and response payload size filtering universally across all methods and GraphQL.
-
Formats and drivers
Full support for JSON, XML, YAML and binary formats (Smile, CBOR, Avro and MessagePack among others) with request and response payloads. We also offer drivers for most popular languages and frameworks including JavaScript and Node.js, Java, Python, PHP, Ruby and Go.
# Read one node, with its rights and changeset curl -H "Authorization: Bearer $TOKEN" \ "$API/repositories/$REPO/branches/master/nodes/$NODE"
See how Gitana fits your contentSee that merge around your own use case
In a demo, a solutions engineer walks you through Gitana around your use case.In a demo, a solutions engineer walks through a merge like this one around your use case. The same call covers architecture, security, deployment and procurement questions. In a guided evaluation, you work on your own content with one of our engineers on Gitana Cloud.