Happy New Year! We hope you've had a fantastic start to 2024 and got some well deserved rest over the holidays.
As the new year kicks off, our team here at Encore is excited to soon be rolling out the public beta for Encore's upcoming TypeScript support — watch this space!
In the meantime, we'd like to share some of the release highlights of 2023 and some of the most loved posts on the engineering blog. Let's dive in.
Encore has had built-in secrets management from day one, but it used to be quite limited. So back in January we released a much more flexible secrets management experience that better addressed advanced use cases.
With it, each secret value can be individually configured to apply to exactly the environment(s) you want.
For example:
# Set for local only
$ encore secret set --type local MySecret
# Set for all environments
$ encore secret set --type prod,dev,pr,local SomeOtherSecret
# Set for all preview environments and the environment named 'staging'
$ encore secret set --type pr --env staging SecretPassword
Check out the docs for more information.
Having easy access to metrics is a critical part of application observability. Back in February we added built-in metrics for all Encore applications, covering everyday use cases such as Request rate, Memory usage, and Goroutines. These work in all environments and are accessible from the Cloud Dashboard.
By default, Encore also exports metrics data to your cloud provider's built-in monitoring service, so you can easily use your preferred observability tools. Learn more in the docs.
Many users wish to use observability tools like Grafana and Datadog, so we also introduced a built-in integration.
Back in April we introduced a Service Catalog that makes it easy to navigate the API documentation for large systems. It includes handy featues like:
We also introduced the ability to generate API clients according to the OpenAPI specification. Learn more in the docs.
In May we launched lots of improvements to Encore's Pub/Sub support, including key features like ordered topics, exactly-once delivery, and a utility package for implementing a Transaction Outbox.
A big release in June added infrastructure configuration directly from Encore's Cloud Dashboard.
It lets you configure your AWS and GCP environments' infrastructure settings, including:
When you make changes Encore automatically validates the configuration according to each cloud provider's constraints and applies the configuration during the next deploy. This makes it much simpler to manage and track changes as your needs evolve.
As with all things Kubernetes, this release took a lot of work! Finally, in July, we we're happy to share that Encore added support for deploying to Kubernetes on GCP.
Back in August we shipped a new feature called Infrastructure Namespaces. It allows you to create and switch between multiple, independent namespaces for your application's infrastructure. Infrastructure namespaces are isolated from each other, and each namespace contains its own independent data.
This makes it trivial to switch tasks, confident your old state and data will be waiting for you when you return. If you've ever worked on a new feature that involves making changes to the database schema, only to context switch to reviewing a Pull Request and had to reset your database, you know the feeling.
Create and switch to a new namespace with encore ns switch --create NAME
. Commands like encore run
, encore db shell
and so on automatically use the active infrastructure namespace (override this with -n).
Read the docs to learn more.
In September the Local Dev Dash has received a big upgrade! The main improvement was in the API explorer. It now features multiple tabs so you can work on multiple endpoints more easily.
We also added the ability to store and re-use custom requests. You can share requests with your team members and create your own internal repository of often-used requests.
As a first step toward full support for Neon SQL databases, we updated Preview Environments to provision databases using Neon. Eventually we plan to add support for configuring which type of database you want to use in all types of environments, so that you can take advantage of Neon's scalable, and cost-efficient, SQL offering.
In October we launched support for deploying Encore apps to Kubernetes on AWS using EKS AWS Fargate.
During the final months of the year we made lots of progress on Encore's upcoming TypeScript framework: Encore.ts
In December we launched the first Encore.ts documentation and started onboarding closed beta users. (Reach out on Discord if you want to sign up for access!)
In one of the final releases of the year, we introduced streaming traces. This means Encore apps will now stream traces to the Encore Platform as they're happening, instead of waiting for the request to complete. This dramatically improves trace ingestion latency and reduces the memory usage of Encore applications.
Sam Rose created a beatiful interactive blog about request retries and how different methods can cause unexpected behavior. It even features a playground where you can create your own scenarios and see servers explode! Check it out here
Matt Boyle wrote a much appreciated introduction to Event-Driven architectures. The first in a four-part series. Check it out here
Elliot Forbes wrote an excellent piece in the Event-Driven series about uncovering hidden dangers when designing Event-Driven Systems. Check it out here
I wrote a piece on Go's new generics type inference, breaking it down using concrete examples, which ended up being quite popular. Check it out here
Our very own Dominic Black wrote a piece on how we designed and open sourced a solution for scrubbing sensitive data in a performant way. We used it internally when we added support for redacting sensitive data from Encore's tracing feature. Check it out here