This release is a pre-release and may not be stable for production use.
Gestalt Python SDK
Use the Python SDK to build executable Gestalt providers with normal Python classes, functions, and type annotations.
The package is published to PyPI as gestalt-sdk and imported in provider code
as gestalt.
uv add gestalt-sdk
import gestalt
class SearchInput(gestalt.Model):
query: str = gestalt.field(description="Search query")
app = gestalt.App("search")
@app.operation(method="GET", title="Search")
def search(input: SearchInput, request: gestalt.Request):
return {"results": [input.query]}
Provider projects
Python source providers are discovered through [tool.gestalt].provider in
pyproject.toml.
[project]
name = "gestalt-search"
version = "0.0.1"
dependencies = ["gestalt-sdk"]
[tool.uv]
package = false
[tool.gestalt]
provider = "provider"
Use the provider manifest for static provider identity, connections, hosted HTTP routes, passthrough surfaces, and release metadata. Use Python code for executable operations, provider lifecycle hooks, host-service clients, and provider-specific runtimes.
Build entrypoint
The Python build entrypoint freezes a provider into a standalone executable with PyInstaller. It accepts seven explicit positional args, or zero args:
# explicit
python -m gestalt._build ROOT MODULE[:ATTRIBUTE] OUTPUT PLUGIN_NAME RUNTIME_KIND GOOS GOARCH
# zero-arg: derive from manifest.yaml + pyproject.toml + env
python -m gestalt._build
With zero args the entrypoint derives the target from
pyproject.toml's [tool.gestalt].provider, the output path from
manifest.yaml#entrypoint.artifactPath, the plugin name from the last segment
of manifest.yaml#source, the runtime kind from manifest.yaml#kind
(app maps to integration), and the target platform from the
GESTALT_TARGET_OS / GESTALT_TARGET_ARCH env vars (falling back to the host
platform). This lets a provider declare a fixed
build.command: [uv, run, python, -m, gestalt._build] with no per-provider
wrapper script.
Build cache
Python executable provider builds can opt into the generic Gestalt build cache
by setting GESTALT_BUILD_CACHE_DIR to a writable directory before running
gestaltd sync or another provider packaging command. The cache stores
SDK-internal packaging accelerators only; it is safe to delete, and unsetting
the variable returns builds to the default clean temporary behavior.
GESTALT_BUILD_CACHE_DIR="$PWD/.gestalt-build-cache" \
gestaltd sync --locked --config deploy/config.yaml
Public surface
The top-level gestalt package exposes the supported authoring API:
Model,field,App,operation, andRequestfor integration providers.IdentityProvider,CacheProvider,S3Provider,SecretsProvider,WorkflowProvider,AgentProvider, andRuntimeProviderfor host-service provider runtimes.Cache,IndexedDB,S3,Workflow,Agent, andRequest.app()for calling sibling host services.gestalt.testingfor native fixture helpers used by SDK transport tests.gestalt.telemetryfor provider-authored GenAI spans and metrics.
The SDK also exposes authored provider models for authentication, workflow,
agent, and runtime payloads. Agent provider handlers receive and return
native dataclasses such as CreateAgentProviderTurnRequest, AgentSession,
and AgentTurn; structured fields accept dictionaries or dataclass instances,
and timestamp fields use timezone-aware datetime values. Workflow helpers such as
bound_workflow_target, workflow_definition, workflow_run, and
workflow_signal accept plain dictionaries, dataclass instances, and native
datetime values for structured payloads and timestamp fields. Provider-facing
APIs should accept native Python values and keep transport serialization inside
SDK adapters.
App invocation migration
request.app().invoke(...) and request.app().invoke_graphql(...) now decode
JSON responses and unwrap only Gestalt success envelopes shaped as
{"status": "success", "data": ...}.
with request.app() as app:
# before
raw = app.invoke_raw("github", "get_issue", params)
issue = raw.decode_json()
# after
issue = app.invoke("github", "get_issue", params)
# escape hatch
raw = app.invoke_raw("github", "get_issue", params)
Typed GraphQL invocation raises InvokeError when the decoded top-level
payload has a non-empty errors list. Use invoke_graphql_raw() for callers
that need to classify GraphQL errors themselves.
API reference
The authored Python API reference is generated with Sphinx from the SDK's
docstrings. Build it locally from sdk/python with:
uv sync --group dev
uv run sphinx-build -W -b html -d docs/_build/doctrees docs docs/_build/html
The generated docs intentionally focus on the handwritten SDK surface. The
checked-in transport stubs live under the private gestalt/_gen package and are
not expanded as authored reference pages.
Publishing
The SDK is published publicly as gestalt-sdk while keeping the import path
gestalt.
Release tags stay aligned with the repo's SDK tag convention:
sdk/python/v0.0.1sdk/python/v0.0.1-alpha.1sdk/python/v0.0.1-beta.1sdk/python/v0.0.1-rc.1
The release workflow normalizes those tag versions to PEP 440 before building
and publishing with uv, so sdk/python/v0.0.1-alpha.1 becomes package
version 0.0.1a1.
Releases are published to PyPI through GitHub Actions Trusted Publishing. The
release workflow runs in the pypi environment and uses GitHub OIDC rather
than a checked-in upload token.
Local SDK checks
From sdk/python, install the SDK plus its dev tooling and run the checks used
in CI:
uv sync --group dev
uv run ruff check .
uv run ty check --exclude 'gestalt/_gen/**' gestalt scripts tests
uv run vulture --config pyproject.toml
uv run python -m unittest discover -s tests
uv run sphinx-build -W -b html -d docs/_build/doctrees docs docs/_build/html
The vendored transport stubs under gestalt/_gen are excluded from the static
analysis tools because they are generated output rather than hand-maintained SDK
code.
Metadata
Release files for gestalt-sdk 0.0.1a29
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| gestalt_sdk-0.0.1a29.tar.gz | 276.4 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| gestalt_sdk-0.0.1a29-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 544.3 kB
Release files / gestalt_sdk-0.0.1a29.tar.gz
| Download URL | gestalt_sdk-0.0.1a29.tar.gz |
|---|---|
| Size | 276.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fcf23e292adc13e425a380d4e88174acd599fbc649237465b55cb8603111e556
|
|
BLAKE2b-256 checksum How to use checksums |
f7a1199d89afe341ce587263cfb62a948125d2af7f4c3188afa02ac382726ef6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 14, 2026.
Transparency logRelease files / gestalt_sdk-0.0.1a29-py3-none-any.whl
| Download URL | gestalt_sdk-0.0.1a29-py3-none-any.whl |
|---|---|
| Size | 267.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2bfb20ceb1c8c3abbc59ad90ec819ed764390d455657b269b004b5df2ed636d9
|
|
BLAKE2b-256 checksum How to use checksums |
1488ac48d28c9a0e2607102ab2bc91b9d0f503463757447df66f13e78456fc6f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 14, 2026.
Transparency logSecurity for gestalt-sdk 0.0.1a29
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for gestalt_sdk-0.0.1a29.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 14, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.