Releases: suborbital/e2core
Beta-2.2
Beta-2.2 brings a number of small improvements:
- Atmo can now be launched without a bundle present using either the
--wait
flag or theATMO_WAIT=true
variable. This allows a bundle to be uploaded after-the-fact, facilitating deployments like the new experimental Kubernetes deployment - Atmo's HTTP port configuration is now respected by the LetsEncrypt challenge server, with the new default port set to 8080.
- During startup, Atmo's logs will now be more helpful.
Beta-2.1
Beta-2
Welcome to Atmo Beta-2!
This release contains a number of highly requested features along with some big performance and internal architecture improvements which will further accelerate the pace at which Atmo can be developed.
Notes:
- Atmo Beta-2 uses version 0.9.0 or higher of the Runnable API, you will need to update your Runnables to use this new version. Update Cargo.toml or Package.swift for each Runnable to use the new version and update your code to use the updated API methods.
- The
with
clause has been modified from an array of strings to a map, so you will need to update anywith
instances accordingly. For example:-"user: userobject"
would becomeuser: userobject
. - Subo Alpha-15 or above is required to build applications for Atmo Beta-2, please update the tool by following the install instructions from the Subo readme again.
Now, onto the fun stuff!
Scheduled jobs
Atmo can now run scheduled background jobs! Using the new schedules
section of the Directive, you can define several jobs to be run at an interval that you control. For example, cleanup tasks, scheduled reporting, and more work perfectly as background jobs. Schedules are a set of composed Runnables, exactly like the Atmo handlers you're used to building. You can use all of the state management and error handling tools available to handlers. You can read all about schedules in the docs.
Error handling
The most requested feature from Beta-1 was the ability to return and handle errors from your Runnables! Runnables can now return an error (Swift support is coming soon), which is comprised of an error code and a message. When an error is returned from a Runnable in one of your handlers or schedules, it can be handled using the new onErr
clause in the Directive. You can choose to return
or continue
for all errors returned by a Runnable (default behaviour is to return
), or choose what to do based on error code (for example, 404: continue, 401: return
). Error handling is detailed in the docs.
ForEach steps
Until now, a step
in your handlers could either be a single fn
or a group
. There is now a third type forEach
which allows iterating over an array in state. You can use a forEach
step to execute a Runnable against each element in a JSON array, which is extremely useful for performing batch operations, fanout operations, and more. You can read about forEach in the docs.
Response headers and ContentType
Runnables can now set response headers using the resp::set_header
API method, and the specific resp::content_type
alias for setting Content-Type. This is extremely useful when serving static files such as .js
, .css
, and .wasm
! Integrations with common web frameworks with static generation functionality will be coming soon, starting with the Yew framework for full-stack WebAssembly applications! Read about response headers in the docs.
Performance improvements
Atmo Beta-2 is running on the latest version of Reactr, which itself includes a whole host of performance improvements down to the lowest level, which is especially evident when working with large pieces of data.
Operational improvements
You can now use environment variables to control more of Atmo's behaviour, such as log level, execution of schedules, and more. Read all about it in the docs.
Beta-1
It's Beta time!
Atmo has finally reached beta! This release brings some awesome new features, so I'll cut right to the chase:
-
Multi-arch support: Atmo can now run on x86 or arm64! Docker images are provided for each, making it easy to run Atmo on Raspberry Pi. Mac with Apple Silicon will be coming soon as well.
-
Ability to serve static files: The
static
directory in an Atmo project will now be copied into the Bundle, and Runnables can now access those files via a read-only pseudo-filesystem using the Runnable API! This brings Atmo a step closer to being the perfect solution for JAMStack applications. -
Improved docs: The Atmo guide is now greatly improved and includes full documentation for the Runnable API.
-
Wasmer 1.0: With the release of Reactr came support for Wasmer 1.0, and now Atmo can take advantage of all the benefits that has to offer as well! Performance across the board is much improved, and it will help improve development pace in the future as well
Atmo has come a long way and finally joins its sibling projects with its Beta status. There are some more awesome features and improvements on their way, including support for more languages like AssemblyScript!
Alpha-7
This release brings in the latest version of the Runnable API (v0.5.0) which brings more HTTP request capabilities to Runnables!
Using this version, update all of your .runnable.yaml
, cargo.lock
, and Package.swift
files to use 0.5.0
of the API.
Alpha-6
This release brings in the latest Directive spec and the latest version of the Hive scheduler to allow for pre-warmed Runnables! This will reduce cold starts for "expensive" Runnables (such as Swift modules) to near-0!
Update your Directive:
version
field becomes appVersion
Add the atmoVersion
field and set it to "v0.0.6"
Alpha-5
Alpha-4
This release brings the latest version of the Runnable API to Atmo, with full support for Swift!
The Swift Runnable library has been updated to be feature-equivalent with the Rust crate.
Runnables must update to version 0.4.0 of the API, as this is a breaking change and 0.3.x is no longer supported.
Alpha-3
Alpha-3 brings new clauses to the Directive: as
and with
!
as
can be used to define the key that a function's return value gets set to in state, similar to "setting a variable"
with
can create a scoped state to pass into any function, essentially allowing for "function arguments"
See the docs for details!