MCPcopy
hub / github.com/hairyhenderson/gomplate

github.com/hairyhenderson/gomplate @v5.1.0 sqlite

repository ↗ · DeepWiki ↗ · release v5.1.0 ↗
1,476 symbols 5,956 edges 218 files 615 documented · 42%
README

gomplate logo

Read the docs at docs.gomplate.ca, chat with developers and community in the #gomplate channel on Gophers Slack

Build Go Report Card Codebeat Status Coverage Total Downloads CII Best Practices

DockerHub Pulls

Chocolatey Chocolatey

Install Docs Slack Discussions

gomplate is a template renderer which supports a growing list of datasources, such as: JSON (including EJSON - encrypted JSON), YAML, AWS EC2 metadata, Hashicorp Consul and Hashicorp Vault secrets.

Come chat with developers and community in the #gomplate channel on Gophers Slack and on GitHub Discussions!

Here are some hands-on examples of how gomplate works:

$ # at its most basic, gomplate can be used with environment variables...
$ echo 'Hello, {{ .Env.USER }}' | gomplate
Hello, hairyhenderson

$ # but that's kind of boring. gomplate has tons of functions to do useful stuff, too
$ gomplate -i 'the answer is: {{ mul 6 7 }}'
the answer is: 42

$ # and, since gomplate uses Go's templating syntax, you can do fun things like:
$ gomplate -i '{{ range seq 5 1 }}{{ . }} {{ if eq . 1 }}{{ "blastoff" | toUpper }}{{ end }}{{ end }}'
5 4 3 2 1 BLASTOFF

$ # the real fun comes when you use datasources!
$ cat ./config.yaml
foo:
  bar:
    baz: qux
$ gomplate -d config=./config.yaml -i 'the value we want is: {{ (datasource "config").foo.bar.baz }}'
the value we want is: qux

$ # datasources are defined by URLs, and gomplate is not limited to just file-based datasources:
$ gomplate -d ip=https://ipinfo.io -i 'country code: {{ (ds "ip").country }}'
country code: CA

$ # standard input can be used as a datasource too:
$ echo '{"cities":["London", "Johannesburg", "Windhoek"]}' | gomplate -d city=stdin:///in.json -i '{{ range (ds "city").cities }}{{.}}, {{end}}'
London, Johannesburg, Windhoek, 

$ # and here's something a little more complicated:
$ export CITIES='city: [London, Johannesburg, Windhoek]'
$ cat in.tmpl
{{ range $i, $city := (ds "cities").city -}}
{{ add 1 $i }}: {{ include "weather" (print $city "?0") }}
{{ end }}
$ gomplate -d 'cities=env:///CITIES?type=application/yaml' -d 'weather=https://wttr.in/?0' -H 'weather=User-Agent: curl' -f in.tmpl
1: Weather report: London

    \  /       Partly cloudy
  _ /"".-.     4-7 °C
    \_(   ).   ↑ 20 km/h
    /(___(__)  10 km
               0.0 mm

2: Weather report: Johannesburg

    \  /       Partly cloudy
  _ /"".-.     15 °C
    \_(   ).   ↘ 0 km/h
    /(___(__)  10 km
               2.2 mm

3: Weather report: Windhoek

    \  /       Partly cloudy
  _ /"".-.     20 °C
    \_(   ).   ↑ 6 km/h
    /(___(__)  20 km
               0.0 mm

Read the documentation at docs.gomplate.ca, and join the discussion in GitHub Discussions!

Please report any bugs found in the issue tracker.

License

The MIT License

Copyright (c) 2016-2023 Dave Henderson

Analytics

Extension points exported contracts — how you extend this code

KMSAPI (Interface)
KMSAPI is a subset of kmsiface.KMSAPI [2 implementers]
internal/aws/kms.go
Renderer (Interface)
Renderer provides gomplate's core template rendering functionality. See [NewRenderer]. [1 implementers]
render.go
DataSourceReader (Interface)
DataSourceReader reads content from a datasource [1 implementers]
internal/datafs/reader.go
CallerIdentitifier (Interface)
CallerIdentitifier - an interface to wrap GetCallerIdentity [1 implementers]
internal/aws/sts.go
Registry (Interface)
Registry - a registry of datasources [1 implementers]
internal/datafs/registry.go
InstanceDescriber (Interface)
InstanceDescriber - A subset of ec2iface.EC2API that we can use to call EC2.DescribeInstances [1 implementers]
internal/aws/ec2info.go
EC2Metadata (Interface)
(no doc) [1 implementers]
internal/aws/ec2meta.go

Core symbols most depended-on inside this repo

Join
called by 184
internal/funcs/conv.go
String
called by 144
internal/funcs/random.go
ToString
called by 129
conv/conv.go
Write
called by 54
internal/funcs/file.go
Path
called by 49
tmpl/tmpl.go
ToInt64
called by 46
conv/conv.go
ReadFile
called by 45
internal/datafs/wdfs.go
Contains
called by 40
internal/funcs/strings.go

Shape

Function 951
Method 418
Struct 88
Interface 12
TypeAlias 6
FuncType 1

Languages

Go98%
TypeScript2%

Modules by API surface

internal/funcs/crypto.go44 symbols
internal/funcs/strings.go31 symbols
internal/parsers/parsefuncs.go28 symbols
internal/datafs/envfs.go25 symbols
internal/tests/integration/integration_test.go24 symbols
internal/parsers/parsefuncs_test.go23 symbols
internal/funcs/coll.go23 symbols
internal/tests/integration/config_test.go22 symbols
internal/datafs/wdfs.go22 symbols
internal/funcs/sockaddr.go21 symbols
docs/static/js/buttons.js21 symbols
internal/iohelpers/writers.go20 symbols

Dependencies from manifests, versioned

cel.dev/exprv0.25.1 · 1×
cloud.google.com/gov0.123.0 · 1×
cloud.google.com/go/authv0.20.0 · 1×
cloud.google.com/go/auth/oauth2adaptv0.2.8 · 1×
cloud.google.com/go/compute/metadatav0.9.0 · 1×
cloud.google.com/go/monitoringv1.24.3 · 1×
cloud.google.com/go/secretmanagerv1.19.0 · 1×
cloud.google.com/go/storagev1.60.0 · 1×
cuelang.org/gov0.16.1 · 1×
dario.cat/mergov1.0.1 · 1×
github.com/Azure/azure-sdk-for-go/sdk/azcorev1.20.0 · 1×

For agents

$ claude mcp add gomplate \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact