Skip to content

Git sync repository layout

From 6.0.0, a git-synced repository is organised by object type first — scripts under scripts/, flows under flows/, resources under resources/, and so on — rather than mirroring Orvanta’s internal folder paths the way earlier versions did. This page covers that layout, how to generate a ready-to-push repository from a workspace (“Initialise repository”), pushing it to GitHub, and what changes for the CLI.

For configuring which deploys a connected repository tracks, see Git sync. For the git_repository connection itself — personal access tokens vs. the GitHub App — see Git Integration.

Every object type gets its own top-level directory. <folder> is the folder the object lives in inside Orvanta; a metadata sidecar is written alongside the object’s own content file wherever the object needs one that its native format can’t hold.

WhatRepository path
CLI config (written once, at initialisation)orvanta.yaml
Scriptsscripts/<folder>/<name>.<ext> + <name>.script.yaml
Flows (DAG)flows/dag/<folder>/<name>/flow.yaml
BPMN flowsflows/bpmn/<folder>/<name>.bpmn + <name>.bpmn_flow.yaml
CMMN casesflows/cmmn/<folder>/<name>.cmmn + <name>.cmmn_case.yaml
DMN decisionsdecisions/dmn/<folder>/<name>.dmn + <name>.dmn_decision.yaml
Data migrationsdata-migrations/<folder>/<name>.yaml
Resourcesresources/<folder>/<name>.yaml
Variablesvariables/<folder>/<name>.yaml
Schedulesschedules/<folder>/<name>.yaml
Triggerstriggers/<kind>/<folder>/<name>.yaml (<kind> is the trigger type — http, websocket, kafka, sqs, gcp, azure, nats, postgres, mqtt, or email)
Foldersfolders/<name>.yaml
Resource typesresource-types/<name>.yaml
Groupsgroups/<name>.yaml
Workspace membersusers/<email>.yaml
Dependency manifestsdependencies/<manifest> — package.json, requirements.in, or composer.json, unchanged, since the manifest itself is the content
An object owned by a user rather than a folderusers/<user>/<type directory>/<name>… — for example users/alice/scripts/job.py
An object owned by a groupgroups/<group>/<type directory>/<name>…

Metadata sidecars are YAML. A kind with only one file at a given name drops the kind suffix (resources/a/db.yaml, not resources/a/db.resource.yaml) because the directory already says what it is; a kind with two files sharing a stem — a script’s code and its sidecar, a BPMN flow’s .bpmn and its sidecar — keeps the suffix so the two halves are easy to tell apart at a glance.

This mapping is applied only when a repository is written or read — nothing about how paths are stored or how permissions are resolved inside Orvanta changed. The same mapping is used whichever writer produces the repository: a deploy-triggered commit, a workspace export, the “Initialise repository” ZIP, or a direct push into a newly connected repository, so a checkout looks the same regardless of which of those wrote it.