Contributing
Repository Layout
| Path | Purpose |
|---|---|
server/cmd/gestaltd | Server entrypoint, command handling, and built-in registration. |
server/core | Public interfaces for auth, datastore, secrets, providers, and bindings. |
server/internal | Bootstrap, config loading, invocation, server routing, plugin process management, and other server internals. |
plugins | External plugin packages (declarative and compiled). |
sdk | Public SDKs and plugin manifest definitions. |
web | Frontend that is embedded into the server build. |
docs | Documentation site. |
server/deploy | Docker and Helm deployment assets. |
Working Principles
When you update docs, keep them aligned with:
- config structs in
server/internal/config - bootstrap wiring in
server/cmd/gestaltdandserver/internal/bootstrap - HTTP routes in
server/internal/server - deployment assets in
server/Dockerfileandserver/deploy/helm
The easiest way to make docs drift is to copy previous prose instead of reading the code path that actually implements the feature.
Useful Commands
go test ./...
gestaltd init --config ./config.yaml
gestaltd validate --config ./config.yaml
cd docs
npm ci
npm run typecheck
npm run buildRelease Tags
Release workflows use scoped tags:
- CLI:
gestalt/v<version> - Server:
gestaltd/v<version> - Go SDK:
sdk/go/v<version> - Plugins:
plugin/<plugin>/v<version>
Keep the bare semantic version aligned across artifacts when they are meant to ship together.
Adding New Built-Ins
If you add a new built-in auth provider, datastore, secret manager, binding, or named provider:
- register it in the relevant
server/cmd/gestaltdfile - add or update tests
- update Built-in Plugins
- update any docs or examples that describe the supported inventory