Interactive command: run it bare and Fjall walks you through every choice. Every prompt has a flag equivalent for CI.
Overview
fjall create scaffolds infrastructure as CDK TypeScript on disk. It writes files and registers the result with Fjall. It does not call AWS and it does not deploy anything.
Four targets:
Usage
What would you like to build? with four choices: Application, Organisation, Domain, Patterns.
Where create fits
Creating is step one of three. Steps two and three touch AWS.- Single account
- Organisation
Targets
Organisation
infrastructure.ts, package.json and cdk.json:
fjall/organisation/declares member accounts, IAM Identity Center and guardrailsfjall/platform/declares shared servicesfjall/account/declares the per-account baseline
Organisation management requires a Pro plan. and a link to billing.
The governance profile you pick, --security <tier>, is written into fjall/account/infrastructure.ts as securityTier. It does two things: it decides which security services the account scaffold enables, and it selects the content of the deploy-role permissions boundary. Those are independent. Choosing Essentials, which writes no securityTier at all, still leaves the boundary on at hardened — the tier changes which ceiling the deploy role has, never whether it has one.
Account
fjall/account/infrastructure.ts, the declaration of everything Fjall manages in one AWS account: deploy roles, monitoring, CloudTrail audit logging, ECR, and the OIDC connector for CI/CD. fjall account deploy provisions it.
fjall create account has no --security flag, so a standalone account scaffold carries no governance profile and enables no security services. Its deploy role is still capped: the boundary defaults to hardened whenever no tier is set. To change the tier or opt out, edit the Account props directly — see Deploy Account.
Application
fjall/<app>/ with the CDK code for the tier you pick. See Application tiers.
Domain
fjall/domains/example.com/infrastructure.ts with a typed Domain construct and registers the domain in fjall-config.json so the organisation cascade picks it up. A name nested under an already-registered parent scaffolds the delegated-child variant instead of an apex.
The fjall domain create <domain> spelling does the same work and takes the name positionally.
Application tiers
Six starting points.-t/--type selects one non-interactively and pre-highlights it in the picker.
resilient requires a Pro plan and enterprise requires an Enterprise plan. Picking a gated tier interactively shows the plan message and offers Select a different tier?.Interactive flows
Create an organisation
Create an application
Use suggested container '<dir>'? appears when Fjall infers a monorepo container and --container was not passed. Select a deployment target: appears when your organisation config yields more than one target. A single target selects itself.
Picking Custom skips the database and service questions and asks Network configuration? instead, with five presets: Standard, Lightweight, Resilient, Tinkerer, No network.
What the review step says about posture
From fjall 36, the review step of the application flow — the tier picker above — prints a note under the settings list before the final confirmation:resilient and enterprise print fewer lines or none, and custom reads the standard column.
The note informs the choice and gates nothing: there is nothing to accept, and the settings it describes are the ones the tier table already declares. The posture setting is read live when the review step prints, never from a cached copy. If the wizard runs while logged out, the note says so instead of printing lines, because where a finding is listed depends on the organisation the application joins. If the control plane predates the posture field, or cannot be reached, the lead says the setting could not be read rather than promising a lane.
The pattern flow (bare fjall create → Patterns) prints no note: a pattern deploys Lambda and CloudFront rather than an ECS service, so the application tiers’ findings do not describe it.
Non-interactive examples
fjall apps create, which takes the same flags. It is not agent-only: the difference is that apps create never routes to the interactive wizard, so it is the flag-driven path in both human and agent mode. In agent mode it returns TOON output.
Options
Every target
Organisation
Account
Application
--offline conflicts with --github. --register-only conflicts with --dry-run and --offline.Domain
Patterns
Two patterns are deployable today:What gets created
Dockerfile. The Payload pattern adds open-next.config.ts at the project root.
After creating
1
Review the generated code
2
Add resources
Resource names are PascalCase by convention and take letters and digits only.
3
Deploy
fjall org deploy, fjall platform deploy, fjall account deploy.Troubleshooting
Application already exists
Pick a different name, or delete the existing scaffold withrm -rf fjall/<app> and re-run.
Scaffold files already exist with different content
fjall create organisation and fjall create account skip identical files and refuse to overwrite changed ones. Pass --force to overwrite. This is the flag to reach for when upgrading a standalone fjall/account scaffold to an organisation.
Authentication fails
Runfjall login to refresh your Fjall credentials, then re-run. Fjall derives every AWS credential from that one session, so there is no AWS profile to configure.
Region not available
Not every AWS service exists in every region. Check the region’s service list, preferus-east-1 for the widest availability, and add secondary regions for resilience.
fjall create generates CDK TypeScript. Edit the generated infrastructure.ts files directly to go beyond what the flags cover.Next Steps
Connect AWS
Install Fjall’s OIDC trust in the AWS account you just scaffolded.
Deploy
Ship an application to AWS, or run a tier deploy.
Add resources
Add a database, storage, or compute to an application’s infrastructure.ts.
Manage domains
Deploy, verify, and delegate the domains you create.