Repository navigation
ADR 0002 Git Native Datasets
- Status: Accepted
- Date: 2026-09-16
Niyān needs immutable file trees, content identifiers, commits, branches, tags, diffs, merges, concurrent-update protection, transport, and a way for research projects to pin an exact dataset version. Implementing a parallel version graph would duplicate mature Git behavior and create additional correctness and interoperability risk.
Represent every dataset as a standard Git repository. Git is authoritative for tree and history semantics, and Git object identifiers are the dataset version identifiers.
Niyān will provide hosting, authorization, browsing, policy, and workflow assistance around Git rather than reimplementing Git's bookkeeping.
A project may pin a dataset using a Git submodule. This is a supported consumption pattern, not a requirement that every dataset appear only as a submodule.
- Niyān inherits well-understood commit, branch, tag, merge, and transport behavior.
- Standard Git tooling remains useful, and datasets are not locked to a proprietary history format. Yet, they should sit behind our own tooling and clients.
- The control plane still must supply identity, ACLs, branch protection, audit behavior, quotas, and repository lifecycle management; Git does not provide those multi-user forge concerns.
- Branches are mutable refs, so stronger immutability and retention claims require explicit server policy.
- Git repository scale and checkout behavior constrain the first version. Niyān accepts Git and Git LFS limitations initially rather than adding an external manifest.
Niyān development
Specifications
- Index
- Authentication
- Authorization
- Namespaces and datasets
- Repository access
- Git write transport
- Git LFS and object storage
- Protected refs
- CLI
- CLI LFS tracking
- Python filesystem client
- Web application
- Browser uploads and commits
- Audit events
Architecture
- Decision index
- ADR 0001 — Modular monorepo
- ADR 0002 — Git-native datasets
- ADR 0003 — Git LFS data plane
- ADR 0004 — Dataset access boundary
- ADR 0005 — Direct object transfers
- ADR 0006 — Git repository hosting
- ADR 0007 — Shared S3 bucket
- ADR 0008 — Backend baseline
- ADR 0009 — Unified Python client
- ADR 0010 — Static Nuxt SPA
- ADR 0011 — Standard Git workflows
- ADR 0012 — Self-contained Compose