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 never calls AWS: it deploys no CloudFormation stack and connects no AWS account. It does call the Fjall API, so it needs a login. Before it scaffolds anything, it confirms that your plan includes organisations and the governance profile you picked (Essentials needs no check), then records the regions you chose in the organisation config. 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. From fjall 37 the note lists only the findings the workload you are creating can produce. An application at the standard tier creates an ECS cluster and no topic or bucket, so its note is the Container Insights line alone; the enterprise tier, which also writes VPC flow logs to a bucket, turns every default on and prints nothing. A custom application scaffolds nothing but its network, so its review step prints no note until resources are added with fjall add. 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 the same note from fjall 37, filtered to what the pattern builds. A Payload site at the standard or lightweight tier lists S3_VERSIONING_DISABLED for its media bucket, since neither tier versions buckets, and at the resilient tier lists nothing; a static site lists the same bucket line. Neither lists a cluster or topic finding, because a pattern deploys Lambda and CloudFront rather than an ECS service. Through fjall 36 the pattern flow printed no note.

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 beside infrastructure.ts, in fjall/<app>/.

Where the output goes

From fjall 38 fjall create app and fjall create org write the scaffolded directory path to stdout. The path is the result, so a shell captures it with nothing to strip:
Everything else goes to stderr: the step lines, the summary that repeats the path under Location:, and warnings. --dry-run is the exception. The preview it prints is that run’s result, and nothing exists at the path to move into, so no path is written. fjall create account and fjall create domain print no path. Neither does fjall apps create, which otherwise runs the same flow. At a TTY the interactive wizard runs instead and writes no path line. The split above describes the non-interactive lane, which is the one a shell capture takes.

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.

Application limit reached

Your plan caps how many applications you can register. At the cap the API refuses the registration and fjall create carries on: the scaffold files are written, the application is not registered, and the run prints the API’s refusal. The command still exits 0, so a CI step at the cap passes with an unregistered application.
The refusal arrives as one line. A link to the Change plan page is appended to it when the server can build one. The line is printed twice on stderr, once as [warn] where the refusal happens and again as Warning: at the end of the run. Two cures: fjall destroy does not free a slot. It removes the AWS infrastructure and leaves the registration behind, and de-registering is the only verb that frees one. See fjall apps. The files on disk are unaffected. Once a slot is free, register the tree you already have with fjall create app --name api --register-only instead of scaffolding again.

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 create never calls AWS, so it needs no AWS credentials and there is no AWS profile to configure for it. The commands that do call AWS get their credentials as AWS Profiles and Targets describes.

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.