Encore is the Backend Development Platform purpose-built to help you create event-driven and distributed systems.
Encore has had built-in secrets management from day one, but it was quite limited: each secret value only applied to either {production}
environments or to {development,preview,local}
environments. This worked fine for basic use cases but was insufficient for many other use cases. For example, it's common to want a different secret value for local development specifically. In other use cases it was common to want to use the same secret value for all environments, which previously required setting the same value twice.
Today we're excited to announce a much more flexible secrets management experience that better addresses these use cases! Starting today, 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
Read the docs for more information.
There's also a brand new secrets management UI on the Encore Platform:
Encore now supports redacting sensitive data from traces. Fields marked with the struct tag encore:"sensitive"
(in request/response structs) are automatically redacted. This works for both individual values as well as nested fields.
Note that inputs to auth handlers are automatically marked as sensitive and are always redacted.
Read the docs for more information.
The encore.dev/storage/sqldb
package now supports accessing the underlying connection pool using sqldb.Driver
.
See the package documentation for more information.
We rely on the community to improve Encore, and we're always amazed by your incredible support and encouragement. A massive thank you to Patryk Siemiński, Mason Stewart, Sami Moustachir, Alex Yakubenko, Sean Knowles, David Mytton, Prasanna Balaji, Gabriel Bellon, and others for your contributions and feedback!
We're very close to releasing support for metrics! We're also working on Kubernetes support, using existing infrastructure, and more. – Remember to vote on your favorite feature on the roadmap!
As always, if you have questions or feedback, tell us on Slack or post on the Community Forum.
We’re excited to hear your feedback! ❤️
Full Changelog: https://github.com/encoredev/encore/compare/v1.12.1...v1.13.0
We've finally added filtering to the tracing dashboard, making it easier to find exactly what you're looking for when working on a big system.
Thank you for all your bug reports and feedback! Here are some improvements we've made lately:
*sqldb.Error
type to expose information about underlying database errors
We rely on the community to improve Encore, and we're always amazed by your incredible support and encouragement. A massive thank you to Patryk Siemiński, Amr, Daniel Stocks, @Willyham, @klaidliadon, MaxD, @melkstam, Jakob Nordfeldt, Prasanna Balaji for your contributions and feedback!
We're very close to releasing a huge upgrade to Encore's infrastructure provisioning system. This will give you more flexibility, and it will be simple to add specific requirements, e.g. deploying to existing Kubernetes clusters. We're also about to release built-in metrics dashboards and an upgraded secrets manager! – Remember to vote on your favorite feature on the roadmap!
As always, if you have questions or feedback, tell us on Slack or post on the Community Forum.
We’re excited to hear your feedback! ❤️
Full Changelog: https://github.com/encoredev/encore/compare/v1.10.1...v1.11.0
We've just released a much-improved trace view. Here's what you need to know:
encore version update
To make Encore better for everyone with a very large code base, we've improved Encore's static analysis performance. The parser is now 5x faster!
With Encore you run tests with encore test
instead of go test
. This is a wrapper that compiles the Encore app and then runs go test
. It supports all the same flags that the go test
command does. For bigger projects, we want to make sure this is snappy! – In the latest release, we've improved test speed 2x, both for local development as well as for CI/CD
We're always thankful when we get feedback and bug reports from anyone using Encore. Here are some improvements we've made lately, thanks to your input:
Thanks to our contributors We rely on the community to improve Encore, and we continue to be surprised and humbled by your incredible support and encouragement. A massive thank you to @Minivera , Patryk Siemiński, Amr, Daniel Stocks, @Willyham, MaxD, @melkstam, Jakob Nordfeldt, Prasanna Balaji, and Juan Álvarez for your contributions and feedback!
We're close to releasing a big upgrade to infrastructure provisioning, making it more flexible and easier for you to add specific requirements like deploying to existing Kubernetes clusters. We'll also soon release new observability and metrics capabilities. – Remember to vote on your favorite feature on the roadmap!
As always, if you have questions or feedback, tell us on Slack or post on the Community Forum.
We’re excited to hear your feedback! ❤️
Full Changelog: https://github.com/encoredev/encore/compare/v1.9.3...v1.10.1
In this release, we're introducing a new config package that combines the power of CUE lang with the smooth Encore developer experience. It gives you both the type safety of Go, and the powerful flexibility of CUE. This lets you focus on writing your business logic, safe in the knowledge that Encore's compiler will prevent invalid configurations from ever reaching your production environment.
To use it, you simply call config.Load[*MyConfigType]()
and assign the returned instance of your config type to a package-level variable (Remember to first update with encore version update
.)
As with many of Encore's features, config comes with isolated test support. This allows you to override configuration values on inside tests, without impacting any other concurrently running tests.
For more information about Encore native config support, check out the docs.
We're always thankful when we get feedback and bug reports from anyone using Encore! Here are some improvements we've made lately, thanks to your input:
encore.dev
Go package to explain why those functions all panic, as well as including links to the underlying implementation (encoredev/encore.dev#11)We rely on the community to improve Encore, and we're overwhelmed by your support and encouragement. A huge thank you to @SarojWasti & @ArjunSharda for your contributions to this release!
Over the next couple of weeks, we're going to release a next-generation cloud provisioning system for Encore. Check out this blog post to get a sneak preview. – Remember to vote on your favorite feature on the roadmap!
As always, if you have questions or feedback, tell us on Slack or our Community Forums.
We're excited to hear your feedback! ❤️
Catch you in the cloud, Dom & the Encore team
Full Changelog: https://github.com/encoredev/encore/compare/v1.8.0...v1.9.0
Compiler errors are a source of frustration for most developers, as they often force us to decipher confusing or misleading error messages. To make this a better experience we've taken inspiration from Elm and Rust, and we've modified how Encore reports into human-readable errors.
Instead of simply reporting a filename, line number, and column number with a single line of text describing the error, Encore now shows a summary of the error, the line(s) of code which caused the error, and also show other lines of code to provide additional context.
All errors returned by Encore will now render in this format. Over the coming months, we plan to improve the readability of all errors by providing additional context or help text within the error itself.
We are happy to announce that Encore now has an official plugin for GoLand and IntelliJ. The plugin allows you to run unit tests on Encore applications from the comfort of your IDE, as well as allowing you to run those same tests in debug mode with breakpoint support!
As with Encore itself, the plugin is open source. Bug reports and contributions are welcome at encoredev/intellij-plugin.
Download the plugin today: https://plugins.jetbrains.com/plugin/20010-encore/
We're always thankful when we get feedback and bug reports from anyone using Encore. Here are some improvements we've made lately, thanks to your input:
encore logs
command to stream logs, we show a "waiting for logs" message to indicate that the stream is connected successfully.encore.gen.go
file was missing. (Thanks @Willyham for the bug report)We rely on the community to improve Encore, and we're overwhelmed by your support and encouragement. A huge thank you to @kVarunkk, @eddy-geek, @AM1TB, @Minivera, @michizhou for your contributions to this release!
Over the next couple of weeks, we're super excited to announce we'll be releasing Encore native support for per-service configuration, powered by the CUE language. Remember to vote on your favourite feature on the roadmap!
As always, if you have questions or feedback, tell us on Slack or our Community Forums.
We're excited to hear your feedback! ❤️
Catch you in the cloud, Dom & the Encore team
Full Changelog: https://github.com/encoredev/encore/compare/v1.7.0...v1.8.0
In-memory caches are vital when you're building real-time applications like games, ad systems, or financial applications. They're also practical when you want a convenient way to store key values without needing a database. That's why we're excited to let you know that Encore now has native support for in-memory caches, using Redis!
Here's what you need to know
encore version update
and thengo get encore.dev@latest
Check out the docs to see how the new cache API works.
We've also been busy making improvements to Encore Flow:
It's been a long time coming, but it's finally done: The local dev dash is now using the same styling as the web platform! We've also made a bunch of usability improvements to make it more intuitive and easier to use. We'd love to hear what you think on Slack!
We're always thankful when we get feedback and bug reports from anyone using Encore. Here are some improvements we've made lately, thanks to your input:
We rely on the community to improve Encore, and we're overwhelmed by your support and encouragement. Thanks to @BogDAAAMN, @Minivera, @Willyham, @davidmytton, @melkstam, MaxD for your ideas, bug reports and feedback!
For a long time, we've had an active Slack group. It's been a great way for everyone to engage in meaningful conversations, and for us quickly provide help when there are questions. Lately, we've noticed that the drawback with Slack is that it makes it hard for new joiners to discover answers to common questions and refer to past conversations.
That's why we've launched a community forum!
We'll use this for asynchronous conversations and to build up a knowledge base of community questions and answers.
We're not going to stop using Slack, rather we're going to focus it on synchronous and time-sensitive conversations.
In the coming weeks we'll be adding even more flexibility to the Encore framework, with improved support for configuration. We're also working on a big upgrade to infrastructure provisioning, making it more flexible and easier for you to add specific requirements like deploying to existing Kubernetes clusters. - Remember to vote on your favorite feature on the roadmap!
As always, if you have questions or feedback, tell us on Slack.
We're excited to hear your feedback! ❤️
Catch you in the cloud, André & the Encore team
Flow is the world's first intelligent visual backend architecture tool for the cloud. Flow helps you improve your microservices architecture, and makes it easy for everyone on the team to understand it. It lets you instantly identify which services depend on each other and how they work together. With Flow, building backends has never been easier – from designing your architecture and collaborating on pull requests, to onboarding new team members.
Flow is now available for all Encore users! If you haven’t tried Encore yet, get started here.
🥐 If you already have Encore installed, run encore version update
to upgrade.
Over the coming months we’ll extend Encore Flow with a suite of intelligent development tools, to make it even simpler to build your cloud backend. Follow us on Twitter or Star Encore on GitHub to stay up to date.
Encore Pub/Sub now officially supports Azure, bringing the support to all the major cloud providers! Give it a spin and let us know what you think.
We rely on the community to improve Encore, and we're overwhelmed by your support and encouragement. Thanks to @bjaanes, @Willyham, @raymondbutcher and others for your feedback and contributions!
Developers building with Encore are forward-thinkers working on exciting and innovative products. Join the conversation on Slack to see what's going on, learn from others, and share what you're working on.
Over the coming weeks we'll be adding support for configuration, caching, Kubernetes deployments, and more. Vote on your favorite feature on the roadmap!
If you like what we're up to, why not star Encore here on GitHub?
As always, if you have questions or feedback, tell us on Slack or just reply to this email.
We're excited to hear your feedback! ❤️
Catch you in the cloud,
The Encore Team
We're excited to announce Encore now supports three of the most highly requested features: Middleware, Validation support, and Dependency Injection! Each one is large enough to warrant its own release but here's a three-for-one!
This means you can now:
🥐 Run encore version update to grab the latest version, or read on for more information.
Middleware has been one of the most highly requested Encore features, and it's finally here! Unlike typical Go HTTP middleware, Encore's middleware operates on fully unmarshalled types which enables some incredible workflows. Here's how you define a middleware:
import (
"encore.dev/middleware"
"encore.dev/rlog"
)
//encore:middleware target=all
func MyMiddleware(req middleware.Request, next middleware.Next) middleware.Response {
resp := next(req)
rlog.Info("returning response", "payload", resp.Payload)
return resp
}
See the middleware docs for more information!
Encore now supports request validation out of the box! To use it, simplify define a Validate() error
method on your request types. For example:
//encore:api public
func MyEndpoint(ctx context.Context, p *Params) error {
// ...
}
type Params struct {
Worry bool
}
func (p *Params) Validate() error {
if p.Worry {
return errors.New("don't worry, be happy")
}
return nil
}
See the validation docs for more information!
You can now define Encore APIs as methods on a Service Struct, which allows you to use dependency injection for easier testing of your Encore API endpoints. It introduces the new //encore:service
directive that you can use to define a struct type as a Service Struct. It looks like this:
//encore:service
type Service struct { /* dependencies go here */ }
//encore:api public
func (s *Service) MyAPI(ctx context.Context) error { /* ... */ }
The new Service Struct approach also comes with several other features, like service initialization and graceful shutdown hooks! Read the docs on Service Structs and Dependency Injection for more information.
sqldb.Named
(#335)We rely on the community to improve Encore, and we're overwhelmed by your support and encouragement. Thanks to @Willyham, @melkstam, @bjaanes, @Minivera, @davidmytton, @MaxD and others for your feedback and contributions!
Developers building with Encore are forward-thinkers working on exciting and innovative products. Join the conversation on Slack to see what's going on, learn from others, and share what you're working on.
Over the coming weeks we'll be adding support for configuration, Azure Pub/Sub, caching, and more. Vote on your favorite feature on the roadmap!
If you like what we're up to, why not star Encore here on GitHub?
As always, if you have questions or feedback, tell us on Slack or just reply to this email.
We're excited to hear your feedback! ❤️
Catch you in the cloud,
The Encore Team
Asynchronous event processing, like PubSub, is a core building block in most modern distributed systems. It lets you build systems that communicate with each other by broadcasting events asynchronously. In the last release, we added added GCP support for Encore PubSub, and this week we're adding full AWS support.
This means you can now:
🥐 Run encore version update to grab the latest version, or check out the docs to learn how to build with Encore PubSub.
We rely on the community to improve Encore, and we're overwhelmed by your support and encouragement. Thanks to David Mytton, Minivera, Vilhelm Melkstam, MaxD, Nick Klauer, and John Stern for your feedback and contributions!
Developers building with Encore are forward-thinkers working on exciting and innovative products. Join the conversation on Slack to see what's going on, learn from others, and share what you're working on.
Over the coming weeks we'll be adding even more flexibility to the Encore framework, with things like: extended configuration support and dependency injection. Vote on your favorite feature on the roadmap!
If you like what we're up to, why not star Encore here on GitHub?
As always, if you have questions or feedback, tell us on Slack or just reply to this email.
We're excited to hear your feedback! ❤️
Catch you in the cloud,
The Encore Team
We're excited to share Encore's world-class developer experience now extends to asynchronous event processing with the addition of Encore PubSub!
Pub/Sub is one of the core building blocks of modern distributed systems. This means you can now easily:
Building such applications typically involves endless repetition and tedious boilerplate. No more.
Run encore version update
to grab the latest version and experience it for yourself!
— If you're new to Encore, check out the Quick Start Guide to get started building.
Encore PubSub takes the same approach to building distributed systems as the rest of Encore, and makes building event-driven, asynchronous a breeze. With Encore you define your topics and subscriptions directly in your backend code, like any other object.
With just a few lines of code we have a serverless backend that scales from zero to hundreds of millions of users, with zero boilerplate and with static type safety. Encore takes care of all the complex, boring parts, so you can focus on building your product:
The best part of all? It works the same way for local development as well as the major cloud providers. Encore provisions the cloud native infrastructure component for your specific cloud provider of choice, but the code works the same way.
To define a topic and begin publishing messages is just a handful lines of code:
import "encore.dev/pubsub"
type SignupEvent struct {
Username string
Email string
}
var Signups = pubsub.NewTopic[*SignupEvent]("user-signups", pubsub.TopicConfig{
DeliveryGuarantee: pubsub.AtLeastOnce,
})
// To publish a message:
_, err := Signups.Publish(ctx, &SignupEvent{Username: "jane.doe", Email: "[email protected]"})
To begin receiving messages is equally simple:
import "encore.dev/pubsub"
var _ = pubsub.NewSubscription(
user.Signups, "send-welcome-email",
pubsub.SubscriptionConfig[*user.SignupEvent] {
Handler: SendWelcomeEmail,
},
)
func SendWelcomeEmail(ctx context.Context, event *user.SignupEvent) error {
// .. send email ...
}
To complement the new PubSub support Encore now comes with a new et
(encore testing) package to simplify testing distributed systems.
We're starting with support for testing PubSub behavior, but over time we plan to expand on it to support easy testing of various distributed system behaviors. Read the package docs for more information.
encore db shell
database sessions (#263)GOARCH
and the docker base image for encore eject docker
(#269)encore run
before encore auth login
on new systems (#299)encore.dev/rlog
log output when using structured logging of booleans (#308)We rely on the community to improve Encore, and we're overwhelmed by your support and encouragement. Big thanks to @davidmytton, @bscott, @bjaanes and others for your bug reports and feedback!
Developers building with Encore are forward-thinkers working on exciting and innovative products. Join the conversation on Slack to see what's going on, learn from others, and share what you're working on.
Over the coming weeks we'll be adding much requested flexibility to the Encore framework, with improved support for things like: middleware, configuration and dependency injection. Vote on your favorite feature on the roadmap – If you like what's going on, why not give the project a star?
As always, if you have questions or ideas, come tell us on Slack. We’re excited to hear your feedback! ❤️
Catch you in the cloud, André & the Encore team