Releases: encoredev/encore
v1.44.0 — Object Storage is here!
We're very excited to announce that Encore (both Go and TypeScript versions) now supports Object Storage as a first-class cloud infrastructure resource! As always, update to the latest release with encore version update
!
Object Storage
Object Storage is a simple and scalable way to store files and unstructured data in your backend application. The most well-known implementation is Amazon S3 ("Simple Storage Service"), but it's universally supported by every major cloud provider.
Encore now provides a cloud-agnostic API for working with Object Storage, allowing you to store and retrieve files with ease. It has support for Amazon S3, Google Cloud Storage, as well as any other S3-compatible implementation (such as DigitalOcean Spaces, MinIO, etc.).
Here's how you might use it in Encore.ts:
import { Bucket } from "encore.dev/storage/objects";
export const profilePictures = new Bucket("profile-pictures", {
versioned: false
});
// Then use `profilePictures`:
profilePictures.upload(...);
profilePictures.download(...);
profilePictures.list(...);
Additionally, when you use Encore's Object Storage APIs you also automatically get:
- Automatic tracing and instrumentation of all Object Storage operations
- Built-in local development support, storing objects on the local filesystem
- Support for integration testing, using a local, in-memory storage backend
And with Encore's Cloud Platform you also get:
- Automatic infrastructure provisioning of Object Storage buckets
- Automatic fine-grained permission management of per-service storage operations (read, list, write, delete, etc.)
- Support for Object Storage in Preview Environments
- Native support for Object Storage in the Encore Platform's CI/CD pipeline
See the documentation (Encore.ts / Encore.go) for more information!
TypeScript parsing improvements
Encore.ts now has improved support for parsing more TypeScript language features:
- Interfaces extending other interfaces
- Namespaces and qualified names
- Re-exports (
export * from "./file"
)
Together, these improvements enable much wider support for referencing types defined in external libraries.
We're constantly working on bringing more improvements to the TypeScript parser, with more coming in the near future.
If you have use cases that the TypeScript parser doesn't support, please let us know in Discord!
What's Changed
- Share the db migration logic between the Encore platform and the daemon by @ekerfelt in #1561
- daemon: Add test for db migrations by @ekerfelt in #1562
- ts/prisma: additional instructions for deploying by @fredr in #1563
- Upgrade pingora to latest released version by @fredr in #1550
- supervisor: use vendored feature of openssl by @eandre in #1564
- cli: support client generation without linking app by @eandre in #1566
- Fixed test code example error in uptime.md by @LarsArtmann in #1559
- runtimes/core: fix semaphore use of sqs+sns by @eandre in #1567
- tsparser: support extends by @eandre in #1565
- build: Include secrets outside services in build config by @ekerfelt in #1568
- Add suport for forwarding go compiler flags by @ekerfelt in #1569
- add neon roles docs by @marcuskohlberg in #1571
- runtimes/go: fix rlog ctx with repeated fields by @eandre in #1573
- Update the TS database docs by @simon-johansson in #1575
- Fix
--openapi-exclude-private-endpoints
in client gen by @eandre in #1577
Thanks to our new contributors! ❤️
- @LarsArtmann made their first contribution in #1559
Full Changelog: v1.43.9...v1.44.0
v1.43.9 — First class ORM support in Encore.ts
In this release we've added greatly improved support for using ORMs and migration frameworks with Encore.ts.
Remember to update: encore version update
Since Encore’s approach to database management is flexible, i.e. it uses standard SQL migration files, it now supports integration with most popular ORMs.
📚 We've created examples and docs for how to use:
Many other ORMs are also supported. Here's how you can reason about it:
- ORM Compatibility: If an ORM can connect to a database via a standard SQL driver, it will work with Encore.
- Migration Tool Compatibility: If your migration tool generates SQL migration files without additional customization, it can be used with Encore.
Other improvements & Bugfixes
- runtimes/core: handle missing auth schema by @eandre in #1541
- runtimes/js: better handling of void returns by @eandre in #1543
- make it possible to override what rust builder to use by @fredr in #1551
- Tidy mods by @ekerfelt in #1558
Full Changelog: v1.43.7...v1.43.9
v1.43.7 - Minor improvements & Bugfixes
What's Changed
- runtimes/core: fix validation of nested objects in unions by @eandre in #1529
- runtimes/core: handle literal case in transform by @eandre in #1530
- runtimes/core: log listen address on startup by @eandre in #1531
- runtimes/core: fix array validation, add tracing support by @eandre in #1532
- runtimes/js: parse nulls in responses correctly by @eandre in #1534
- runtimes/core: fix nested union handling by @eandre in #1535
- Add more docs on database migration by @marcuskohlberg in #1536
- Clarify cron docs by @marcuskohlberg in #1537
Full Changelog: v1.43.3...v1.43.7
v1.43 - Date support in Encore.ts
We're excited to announce that Encore.ts now supports using Date types in API schemas, Pub/Sub topic messages, streaming APIs, and more! As always, update with encore version update
!
That means you can now do things like this:
export interface CreateBlogPostParams {
body: string;
publishAt?: Date; // set to schedule the publish in the future
}
export const createBlogPost = api(
{expose: true, method: "POST", path: "/blogpost" },
async (params: CreateBlogPostParams): Promise<BlogPost> {
// ...
}
)
Encore.ts will automatically validate the incoming request, ensuring the provided data is a valid RFC3339 timestamp,
and pass the data to the API handler as a fully constructed Date
object. No need to manually parse dates ever again. Additionally, Encore.ts's built-in API Explorer and Service Catalogs have also been updated to fully support dates.
Hiding internal messages in public errors
Encore.ts's errors can contain additional information in the internal_message
field. This field is now stripped when calling from the outside, ensuring private information about the error isn't leaked to external users. (This functionality is disabled when developing locally, to aid development.)
All changes
- cli: Move tutorial config flag to example repo by @ekerfelt in #1519
- runtimes/core+js: hide error internal message in responses by @fredr in #1518
- date handling by @eandre in #1504
- Include internal_message in all errors for local dev by @eandre in #1522
- runtimes/core: don't run gateway during tests by @fredr in #1524
- dashproxy caching by @eandre in #1523
- cli: improve app create form responsiveness by @eandre in #1525
- pkg/dockerbuild: handle junction points by @eandre in #1526
Full Changelog: v1.42.3...v1.43.3
v1.42.3 - Interactive tutorial
In this release we've added an interactive tutorial to help people learn how to use the framework.
In the tutorial, you get to take on coding challenges and answer quizzes about how Encore works.
Here's how you can try it out:
- Update to the latest version using
encore version update
and then - Run
encore app create
and selectTypeScript
(Go version coming soon) - Select the
Intro to Encore.ts
template. - Enter
Y
to start the app - You should now see the
Introduction
screen in the local development dashboard, here you can complete lessons to learn how Encore.ts works.
We hope you have fun completing these lessons and that you learn something new about Encore!
We'd love your feedback and bug-reports, join Discord and share your thoughts: https://encore.dev/discord 💙
Other improvements & Bugfixes
- Fix clippy lint by @fredr in #1506
- docs: correct field name is expose by @fredr in #1505
- tsparser: fix stream client types by @fredr in #1507
- fix 404 when requesting a path that doesnt exist by @fredr in #1509
- Improve self hosting documentation by @ekerfelt in #1508
- Fix broken docs links by @ekerfelt in #1510
- tsparser: improve auth handler errors by @fredr in #1511
- Fix broken link in self-host.md by @marcuskohlberg in #1513
- go codegen: Path escape URL path params by @ekerfelt in #1514
- propagate errors details between service calls by @fredr in #1516
Full Changelog: v1.42.1...v1.42.3
v1.42.1 - Simpler self-hosting, Infra cleanup, Cloud Platform API, Service-to-Service streaming, and more
We want to ensure it's simple to deploy your Encore application anywhere. In this release, we're very excited to introduce: encore build
. It's a much improved version of the old encore eject
functionality that makes it simpler to deploy your Encore application and requires much less manual configuration.
Remember to update Encore: encore version update
Deploy anywhere that supports Docker images
You can now build your own Docker image using encore build docker MY-IMAGE:TAG
from the CLI.
By default, all your services will be included and started by the Docker image. You can also specify specific services and gateways to include, using the --services
and --gateways
flags.
Infra cleanup
Encore's Cloud Platform now shows you if you have any unused infrastructure in your cloud environments and supports deleting unused infrastructure. This is based on Encore's understanding of what infrastructure is used by your application code, and any infrastructure resources that are no longer in use are automatically identified.
To use it, simply open your app in app.encore.dev and go to the Infrastructure page for your desired environment. If you have any unused infrastructure it will be listed in the section Unused infrastructure and by clicking the trashcan icon you can mark it for deletion at the next deploy.
Export-1729243598463.mp4
Cloud Platform API
Encore's Cloud Platform now provides an API to simplify integrations with your existing tooling and systems.
For instance you can hook into Encore's Rollouts system handling builds and deployments.
Learn more in the API reference
Service-to-Service streaming
Encore.ts now supports streaming APIs between services by importing ~encore/clients
.
You can configure the stream to only be reachable by other services in your application (and not from the public internet) by setting the expose
option to false
.
encore db shell
Roles support
encore db shell
is a simple way of connecting to your databases using Encore's CLI.
Based on your feedback and to improve security, the default role is now read-only and we've introduced support for specifying access roles when using the command.
Use the flags --write
, --admin
and --superuser
to modify which permissions you connect with.
For example, to connect to a database using an admin user you can use encore db shell --admin -e staging
.
Remember to upgrade Encore: encore version update
Encore.ts custom API error details
Encore.ts now supports the ability to add custom error details to any API error, using the new .withDetails({ key: "value" })
method.
Any details added will be encoded as JSON and added to the API response under the new "details"
field (which defaults to null
if not provided).
Other improvements & Bugfixes
- runtimes/core: propagate auth error from auth handler by @fredr in #1485
- internal/version: remove PATH arg by @eandre in #1473
- Update pubsub.md by @zarubto4 in #1474
- .devcontainer: upgrade to go 1.21 by @echarrod in #1476
- tsparser: fix codegen when file contains a period by @eandre in #1480
- tsparser: improve api error reporting by @eandre in #1479
- internal/version: capture original path by @eandre in #1481
- .devcontainer: upgrade to go 1.23 by @echarrod in #1483
- cli/daemon/run: avoid double-reporting parse errors by @eandre in #1482
- runtimes/js: fix tsc syntax issues, improve packaging by @eandre in #1493
- internal/version: remove PATH from config hash by @eandre in #1496
- cli: look up binaries using client PATH by @eandre in #1498
Thanks to our new Contributors ❤️
We want your feedback
Join Encore's Discord community to share your feedback, ask questions, and have fun: https://encore.dev/discord 👋
Full Changelog: v1.41.9...v1.42.1
v1.41.9 - Improved Encore.ts error messages and Encore.go middleware
In this release we're shipping a bunch of improvements to Encore.ts error messages, hopefully making the developer experience a lot smoother!
Remember to update Encore: encore version update
- Improve path parsing error by @fredr in #1456
- tsparser: better syntax errors by @fredr in #1460
- tsparser: better errors when defining secrets by @fredr in #1461
- tsparser: better endpoint parser errors by @fredr in #1463
- tsparser: detect conflicting paths in endpoints by @fredr in #1465
- Allow importing json files and handle module loader errors better by @fredr in #1459
Encore.go Middleware improvements
A small but mighty change: Incoming HTTP Request Headers are now available for introspection in middleware. This makes it simple to do things like IP rate limiting. Thanks to everyone in the community who suggested this!
Remember to update Encore: encore version update
Bounties - You can help fund community contributions
We're now set up to use Polar.sh to enable crowdfunding bounties for community driven open source contributions to Encore. If you create an issue in this repo, you can now use the label Fund
and it will automatically add a Polar.sh funding badge so that you and other community members can contribute to a bounty for whoever completes the issue.
Other improvements
- Corrected typo in url shortner ts example from tutorials by @gammaSpeck in #1454
- cli: support overriding dev dash listen addr by @eandre in #1468
- Add docs about database ORM by @simon-johansson in #1449
- Add validation TS docs by @simon-johansson in #1457
- Add flag to exclude private endpoints from OpenAPI spec by @nitsanshai in #1452
- bufgen: Update file to use v2 by @echarrod in #1296
Thanks to our new contributors ❤️
- @gammaSpeck made their first contribution in #1454
- @echarrod made their first contribution in #1296
Tell us what you think
We love to hear your feedback, join Discord to share your thoughts and ask questions! 👋
Full Changelog: v1.41.7...v1.41.9
v1.41.7 - Minor improvements & bugfixes
What's Changed
- Fix docs broken links by @marcuskohlberg in #1410
- clientgen: handle optional auth params by @eandre in #1411
- Add YouTube video to express docs by @simon-johansson in #1413
- Corrected typos in document about TS Benefits by @luisnquin in #1415
- cli/daemon: resolve local apps for client gen by @eandre in #1416
- Faq by @marcuskohlberg in #1418
- tsparser: fix symlink detection on Windows by @eandre in #1422
- Only include non-private endpoints in OpenAPI spec output by @nitsanshai in #1419
- Update service definition docs by @simon-johansson in #1423
- tsparser: support string literal members by @eandre in #1424
- Update uptime.md by @StefanoP21 in #1390
- cli: Add alpha support for triggering deploys from cli by @ekerfelt in #1417
- supervisor: Add option to launch encore services with supervisor by @ekerfelt in #1396
- Add TS GraphQL tutorial by @simon-johansson in #1425
- daemon: cap proc wait time to 500ms by @eandre in #1428
- Revert "Only include non-private endpoints in OpenAPI spec output" by @eandre in #1427
- Remove the code that has no practical effect by @cuishuang in #1420
- docs: fix markdown syntax by @eandre in #1429
- Allow app init without account by @ekerfelt in #1432
- encorebuild: only use zig when cross compiling or on release by @fredr in #1433
- runtimes/js: propagate APIError across API calls by @eandre in #1434
- Unhide alpha deploy command by @ekerfelt in #1435
- Corrected typos in booking system example from tutorials by @luisnquin in #1442
- Corrected typos in TS documents by @luisnquin in #1441
- Corrected typos in quickstart document by @luisnquin in #1440
- Corrected typos in go documents by @luisnquin in #1439
- Corrected typos in develop documents by @luisnquin in #1438
- Corrected typo in document about deployments by @luisnquin in #1437
- Fix broken links by @marcuskohlberg in #1443
- Add GraphQL TS docs by @simon-johansson in #1430
- Err on http err when downloading ssl certs by @ekerfelt in #1446
- Fetch docker image root certs from cached encore storage by @ekerfelt in #1447
- Add a "how to"-guide for template engine by @simon-johansson in #1444
- docs: Add troubleshooting for connecting GCP clouds by @ekerfelt in #1448
- Support filtering by tags in client generation by @nitsanshai in #1431
- tsparser: improve errors around tsconfig parsing by @fredr in #1451
Thanks to our first time contributors ❤️
- @luisnquin made their first contribution in #1415
- @nitsanshai made their first contribution in #1419
- @StefanoP21 made their first contribution in #1390
- @cuishuang made their first contribution in #1420
Full Changelog: v1.41.4...v1.41.7
v1.41.4 - Minor improvements & bugfixes
What's Changed
- runtimes/core: startup psql proxy early to allow initialization by @fredr in #1407
- Tweaks to the streaming docs by @simon-johansson in #1406
- tsparser: ignore tests by @eandre in #1408
Full Changelog: v1.41.3...v1.41.4
v1.41.3 - Minor improvements & bugfixes
What's Changed
- Add a rust-based supervisor by @ekerfelt in #1385
- runtimes/core: add string mapping for uuid fields by @fredr in #1393
- Add some related docs links by @marcuskohlberg in #1391
- Update app-structure.md by @marcuskohlberg in #1397
- parser: keep case for query paramters in typescript by @fredr in #1399
- Update Cargo.lock with supervisor deps by @fredr in #1400
- tsparser: fix relative paths for individual service codegen by @eandre in #1402
- tsparser: handle service names with dashes, name conflicts by @eandre in #1403
- tsparser: fall back to junction points on windows by @eandre in #1401
- runtimes/js: document
currentRequest()
by @eandre in #1404 - runtimes/js: flush headers on early close by @eandre in #1405
Full Changelog: v1.41.1...v1.41.3