Skip to main content
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

Run it with no target and Fjall asks 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.
Start with an account for standalone use. An organisation is an upgrade path, not a prerequisite.

Targets

Organisation

Scaffolds three components, each with its own infrastructure.ts, package.json and cdk.json:
  • fjall/organisation/ declares member accounts, IAM Identity Center and guardrails
  • fjall/platform/ declares shared services
  • fjall/account/ declares the per-account baseline
Organisation management requires a Pro plan. On a Free plan the flow stops with 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.
fjall create organisation writes files only. It does not open a browser, deploy a CloudFormation stack, or connect AWS. Run fjall connect next.

Account

Scaffolds 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

Scaffolds fjall/<app>/ with the CDK code for the tier you pick. See Application tiers.

Domain

Scaffolds 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

Two prompts appear conditionally. 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.
The interactive wizard ignores --pattern, --tier and --pattern-tier. fjall create app --pattern payload in a terminal lands in the six-tier picker with the flag dropped. Pass --non-interactive for the pattern path, or reach patterns through bare fjall create → Patterns.

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:
Each line is a finding the tier’s backup defaults produce, named by the rule the posture scan will list it under, with the setting that causes it and the expectation in the scan’s own words. The lead says where the scan lists them, which depends on your organisation’s posture setting: on a lenient organisation a development or staging account files them as expected at this stage and any other account as open; a strict organisation files them as open everywhere. Tiers that turn a default on drop its line, so 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

The application flow is also spelled 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:
The nextjs pattern is not deployable. It is hidden from the picker, and --pattern nextjs is refused at create time with a pointer to --pattern payload. For a Next.js application use payload, or staticsite for a pre-built static site.

What gets created

An application that builds containers also gets a 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

For tiers, use the noun-verb spelling: fjall org deploy, fjall platform deploy, fjall account deploy.

Troubleshooting

Application already exists

Pick a different name, or delete the existing scaffold with rm -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

Run fjall 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, prefer us-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.