---
title: Fundamentals for Go
editUrl: https://github.com/Cratis/Fundamentals.Go/edit/main/Documentation/index.md
description: Start with typed domain values in Fundamentals.Go v0.3.2, then find scalar, correlation, naming and optional dependency-injection contracts.
---


<!-- Copyright (c) Cratis. All rights reserved. -->
<!-- Licensed under the MIT license. See LICENSE file in the project root for full license information. -->

Fundamentals for Go provides shared domain-value primitives for Go programs and
the Cratis Go frameworks. Without it, each consumer must define its own UUID,
date, time and concept codecs. With it, you share precise scalar contracts while
keeping domain identity in your own Go types.

**Start with [a UUID-backed author and a JSON round trip](/fundamentals/go/getting-started/).**
You need Go 1.26 or later, not a server, DI container or C# background.

## Packages

This documentation targets the root module **v0.3.2; the API remains experimental**.
It uses only the standard library. Minor v0 releases may change APIs with migration
notes. Install the lowercase module path
`github.com/cratis/fundamentals.go@v0.3.2`; see [release status](/fundamentals/go/releases/).
Beginning with v0.3.0, `concepts.ParseDotNetGUID` adds explicit .NET 10.0.12
compatibility conversion without changing strict UUID defaults.

| Your task | Package and guide |
| --- | --- |
| Parse and serialize IDs, dates, times and durations | `concepts`: [scalar reference](/fundamentals/go/scalars/) |
| Define nominal domain values and validate their scalar output | `concepts`: [typed concepts](/fundamentals/go/concepts/) |
| Recognize concepts without executing application code | `concepts/conceptstypes`: [compile-time recognition](/fundamentals/go/concepts/#compile-time-recognition) |
| Propagate operation metadata without globals | `correlation`: [correlation context](/fundamentals/go/correlation/) |
| Share explicit property/model naming rules | `naming`: [naming policies](/fundamentals/go/naming/) |
| Compose services and manage resource lifetimes | `dependencyinjection` and `dependencyinjection/container`: [optional DI](/fundamentals/go/dependency-injection/) |
| Plan registrations from type-checked constructors | `dependencyinjection/bindingtypes`: [constructor planning](/fundamentals/go/constructor-bindings/) |
| Qualify a custom resolver or provider in tests | `dependencyinjection/ditest`: [conformance levels](/fundamentals/go/dependency-injection/#conformance-levels) |

The root `fundamentals` package contains package documentation, not runtime
entry points. [Ecosystem recipes](/fundamentals/go/recipes/) demonstrate UUID-library conversion,
native borrowed-singleton resolvers, Fx hosting and package loading. They live in
a separate **unpublished** module and do not add dependencies to the root.

## Scope and compatibility

This is a foundation, not an HTTP host, event store, universal serializer or
application framework. Ordinary constructors remain the first choice; no other
capability requires the optional container. The
[accepted integration decision](https://github.com/Cratis/Fundamentals.Go/blob/main/decisions/0001-keep-the-core-standard-library-only-with-recipes-first.md)
keeps standard interfaces and recipes ahead of additional integration modules.

The [parity map](/fundamentals/go/parity/) distinguishes implemented contracts, deliberate Go
adaptations and remaining C# gaps. Package documentation does not mean
whole-product parity. [Enum JSON compatibility](/fundamentals/go/enum-compatibility/) and
[dictionary-key JSON compatibility](/fundamentals/go/dictionary-key-compatibility/) describe
source-distributed contract fixtures included with v0.3.0, not Go enum or
complex-key codecs, runtime or schema support.

## Contribute or publish

The [contribution guide](https://github.com/Cratis/Fundamentals.Go/blob/main/CONTRIBUTING.md) covers both modules' local checks.
[Release policy](/fundamentals/go/releases/) covers immutable tags, proxy indexing and recovery;
[project context](https://github.com/Cratis/Fundamentals.Go/blob/main/Documentation/project-context.md)
describes the contributor workflow.
Fundamentals must not import its consumers, Arc.Go or Chronicle.Go. Consumer
adoption and compatibility must be verified in those products independently.
