01/04/24

Year in Review 2023

Our best new releases and engineering blogs in 2023

6 Min Read

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.

2023 Release Highlights

January: Secrets 2.0

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.

Feb-Mar: Custom Metrics and Exporting to Grafana/Datadog

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.

April: Service Catalog & OpenAPI spec generation

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:

  • Fuzzy search endpoints with ⌘ + K - find what you need, fast!
  • Enhanced sidebar navigation - get a better overview at a glance
  • Upgraded endpoint testing - save authentication data with ease
  • Handy cross-links - view pre-filtered traces, jump to code, and see the flow diagrams per service/endpoint

We also introduced the ability to generate API clients according to the OpenAPI specification. Learn more in the docs.

May: Pub/Sub Ordered Topics + Exactly-once Delivery + Transactional Outbox

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.

June: Infrastructure Configuration

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:

  • Compute instances
  • Database clusters
  • Redis clusters

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.

July: Kubernetes support on GCP & Importing existing GKE clusters

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.

  • You can now choose your desired compute platform on GCP: Cloud Run, GKE Autopilot, or GKE Standard.
  • Encore provisions all the necessary infrastructure, IAM, and orchestrates deployments to Kubernetes.
  • You can also import an existing GKE cluster and Encore will deploy your app to it.

August: Infrastructure namespaces & pgvector support

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.

September: Local Dev Dash 2.0 & Neon SQL databases for Preview Environments

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.

Neon Databases for Preview Environments

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.

October: Kubernetes support on AWS

In October we launched support for deploying Encore apps to Kubernetes on AWS using EKS AWS Fargate.

  • Encore automatically provisions the cluster and all necessarry sub-resources.
  • It uses serverless compute and removes the need to provision and manage servers.
  • It improves security through application isolation by design.

Nov-Dec: Encore.ts Preview & Streaming Traces

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!)

Streaming Traces

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.

Best of the Blog

Retries: An interactive study of common retry methods

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

Event-Driven Architecture: What you need to know

Matt Boyle wrote a much appreciated introduction to Event-Driven architectures. The first in a four-part series. Check it out here

Event-Driven Architecture: Building for failure

Elliot Forbes wrote an excellent piece in the Event-Driven series about uncovering hidden dangers when designing Event-Driven Systems. Check it out here

Understanding Go 1.21 Generics type inference

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

Scrubbing sensitive data at 180MiB/sec/core

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

Encore

This blog is presented by Encore, the backend framework for building robust type-safe distributed systems with declarative infrastructure.

Like this article?
Get future ones straight to your mailbox.

You can unsubscribe at any time.