[ AxiomCore · Documentation ]
Build a frontend
Choose between an Acore UI application and a generated client SDK for the frontend you already have.
A frontend reaches your backend through its .axiom contract, the compiled
description of every operation, type and error the backend exposes. You can
build that frontend in two ways: write the UI itself in Acore, or keep your
existing app and call the contract through a client SDK.
Choose a path
Diagram source
flowchart TD
A[Backend .axiom contract] --> B{Do you already have a frontend?}
B -->|No| C[Write the UI in .acore]
C --> D[axiom ui build]
D --> E[.axiomapp artifact]
E --> F[UI host: web, Android Emulator, iOS Simulator]
B -->|Yes| G{Which framework?}
G -->|Browser or React| H[atmx-web or atmx-react]
G -->|Flutter| I[axiom_flutter]
G -->|Anything else| J[Call the HTTP API directly]
H --> K[axiom pull generates a typed client]
I --> K- Acore UI. You write pages, components and styles in
.acore. The compiler checks them against target capabilities and a locked backend contract, then a UI host runs the app. A UI host is the signed browser, Android Emulator or iOS Simulator shell that renders compiled Acore UI. The build output is a target-specific.axiomappartifact. - Client SDK. Your React, browser or Flutter code stays as it is.
axiom pullcopies the contract into your project and generates a typed client. A runtime inside the SDK builds requests, validates responses, applies cache policy and attaches credentials.
| Acore UI | Client SDK | |
|---|---|---|
| You write | .acore pages and components | Your framework code |
| Generated for you | Compiled UI, kept in memory by the CLI | sdk.ts and models.ts, or axiom_sdk.dart and models.dart |
| Runs in | Axiom UI host | Your app, with a Wasm or native runtime |
| Contract binding | use contract checked against a committed lock | AxiomDeps.toml written by axiom pull |
| Status | Alpha | Web Available; React and Flutter Alpha; Swift Experimental |
| Start with | Acore UI | Client SDKs |
Physical-device certification and app-store publishing are Coming soon for both paths. See Support and availability.
What every client path needs
- A pinned
.axiomartifact and, for a Cloud release, its signature proof. - A target-specific client: generated SDK code or Acore UI source.
- Runtime configuration: where to load the contract and the backend base URL.
- Application-owned authentication, error UI, cache privacy and startup order.
The contract is portable. The lifecycle is not. A browser client uses Wasm, browser storage, CORS and cookie rules. Flutter uses a native runtime, bundled contract assets and an optional cache database path. An Acore UI app depends on its UI host version. Test every target you ship, including a release build and a contract integrity failure.
Other frameworks and languages
A framework without a first-party SDK can still call your backend over HTTP.
You can keep using the .axiom artifact for review, mocks, tests and change
control without routing production calls through an Axiom runtime. The
artifact format alone does not imply a client bridge for another stack.
Next steps
- Build your first UI
- Acore UI reference
- App lifecycle and targets
- Client SDKs for an existing frontend
Execution plan
Reference for the private server execution plan, its companion files, and the runtime rules for actions, guards, resources, effects, sandboxes and request handling.
Acore UI
Reference for the Acore UI profile, covering pages, state, actions, components, contract operations, routes, forms, styles and target capabilities.