Three versions, one deploy
Every Fjall deploy involves three independently versioned pieces:
Your application pins its constructs version. The CLI that runs the deploy is chosen separately, on your machine or in CI. If the engine is older than the constructs that synthesised your infrastructure, the deploy can go wrong silently: services dropped from the build set, images built without the options your runtime needs, or permissions that no longer line up.
Fjall closes this gap with an engine-compatibility check.
How the check runs
- At synth, the constructs stamp an
engineCompatblock into the cloud assembly (cdk.out/fjall-manifest.json). It carries the minimum deploy-engine version and the minimum bundled AWS CDK CLI version those constructs need. - After the final synth, before any build, push, or CloudFormation call, the engine reads that block and classifies the pairing.
- Incompatible pairings refuse loudly. A refusal always happens before anything in AWS is changed.
The compatibility check never refuses a newer engine deploying an older
application. The constructs deliberately never stamp an upper bound, so this
check cannot lock you out of redeploying an application synthesised by an
earlier version. It only bites in the unsafe direction: an old engine driving
newer infrastructure code.Two gates sit outside it and can refuse a newer engine: the capacity-identity
pin gate and, from fjall 38, the backup-vault ownership gate. Both are covered
under Emergency override.
Refusal messages and their cures
One more verdict never refuses. An engine newer than an assembly’s declared maximum is warned about and then proceeds. That verdict is dormant by design, not by accident: capping a newer engine would break the ordinary upgrade-then-redeploy path, so the constructs never emit an upper bound and no Fjall-synthesised application can reach this state. It exists for reading a foreign assembly that stamped a maximum by hand.
Keep the engine and constructs in step
The rule is a floor, not an equality: the engine major must be at least the constructs major. A 38.x engine deploys every 38.x application and every older application. A 37.x engine cannot deploy a 38.x application. The engine-compatibility check never refuses a newer engine. Two gates outside that check can refuse a newer engine against an older assembly: the capacity-identity pin gate and, from fjall 38, the backup-vault ownership gate. Both are covered under Emergency override. When your application moves to@fjall/components-infrastructure 39.x, upgrade the engine everywhere a deploy runs:
cli-version input:
The same steps apply to any earlier major move, 36.x to 37 and so on.
Emergency override
If you have verified an engine and constructs pairing yourself and need to push a deploy through anyway, set:FJALL_ALLOW_ENGINE_SKEW="" from a CI env-file leaves the refusal in place.
Next Steps
CI/CD Integration
Pin or auto-derive the engine version in your pipelines
Install the Fjall CLI
Install or upgrade the fjall CLI
Deploy Application
Run a deploy and read the approval gate
Boot Gates & Deployment Safety
The other gates Fjall puts in front of a bad task