# Pebl Release 0.0.4!

## Quick Summary

Previously all pebl services were external facing. But a very common way of
organizing distributed systems is by creating internal (micro)services that
handle a localized part of the whole system.

With release 0.0.4, we introduce a new SDK binding that supports internal
only services.

## Longform

The previous `service` binding remains unchanged. Using it will create
a service that is exposed to external traffic.

Release 0.0.4 introduces the new `internal_service` binding. Unlike the
external counterpart, this method will create a service that's only
reachable from other running workloads.

```go
package main

import (
    "net/http"
    "github.com/peblcloud/go/sdk"
)

func main() {
    service := http.NewServeMux()

    service.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("some internal service!\n"))
    })

    sdk.InternalService(service, "svc.internal")
}
```

Note that the `endpoint` parameter here can be anything as long as it is
in a valid domain format. We recommend creating an internally consistent
scheme by adopting a TLD for all internal services, such as `.internal`
or `.local`.

## Upgrading

Make sure to download the latest pebl CLI, which will be needed in order
to utilize the new release on your local cluster. Follow the section
about installing the CLI in the [setup guide](https://docs.pebl.io/setup).

### Go

The Go SDK is available with the [0.0.4 tag](https://pkg.go.dev/github.com/peblcloud/go/sdk).
You can update your Go projects by running `go get github.com/peblcloud/go@v0.0.4`.

### Python

The Python SDK is available as pre-built [docker images](https://hub.docker.com/r/peblcloud/python).
Update your Python projects by changing the `Dockerfile` to utilize
one of the 0.0.4 images.

