yarn add @resistdesign/voltra
Runtime peer dependencies:
react (required).react-dom.react-native.Prefer the public entrypoints below to keep imports stable and IDE auto-imports clean.
The root import @resistdesign/voltra is intentionally unsupported to avoid
cross-runtime bundling issues.
Preferred:
import { SimpleCFT } from "@resistdesign/voltra/iac";
import { addDNS } from "@resistdesign/voltra/iac/packs";
Not supported:
import addDNS from "@resistdesign/voltra/iac/packs/dns";
Public entrypoints:
@resistdesign/voltra/api@resistdesign/voltra/app@resistdesign/voltra/common@resistdesign/voltra/web@resistdesign/voltra/native@resistdesign/voltra/iac@resistdesign/voltra/iac/packs@resistdesign/voltra/build@resistdesign/voltra/healthCommon imports by domain:
import { addRoutesToRouteMap, handleCloudFunctionEvent } from "@resistdesign/voltra/api";
import { TypeInfo, TypeInfoORMServiceError } from "@resistdesign/voltra/common";
import { parseTemplate, computeTrackPixels } from "@resistdesign/voltra/app";
import { AutoField, AutoForm, createWebFormRenderer, getEasyLayout } from "@resistdesign/voltra/web";
import { createNativeFormRenderer, makeNativeEasyLayout } from "@resistdesign/voltra/native";
import { SimpleCFT } from "@resistdesign/voltra/iac";
import { addDNS } from "@resistdesign/voltra/iac/packs";
import { getTypeInfoMapFromTypeScript } from "@resistdesign/voltra/build";
import {
DriverHealthStore,
TypeInfoORMHealthMonitor,
} from "@resistdesign/voltra/health";
@resistdesign/voltra/health adds optional, infrastructure-neutral ORM/index
health monitoring. A monitor receives the application's configured ORM plus one
driver-backed Health store, then performs bounded/resumable integrity audits,
schema-drift reconciliation, retention cleanup, and strongly validated repairs.
Slow or failed ORM operations can be recorded separately through
TypeInfoORMHealthOperationRecorder. Native MCP helpers can expose bounded
Health preview/repair tools through the normal Voltra RouteMap authorization
model; destructive MCP repair is opt-in.
See examples/api/orm-health-monitoring.ts and the live demo under
site/api/health.ts.
When a gateway should allow requests through, handleCloudFunctionEvent can
resolve authentication separately from event normalization. Missing or invalid
authentication is treated as anonymous: public routes can still run, while
protected routes continue to enforce their normal Voltra route auth rules.
For Cognito user pools, AWS.getCognitoAuthInfo validates the incoming bearer
token and maps its subject and groups to Voltra AuthInfo. Voltra uses AWS's
aws-jwt-verify internally, caches verifier instances, and leaves JWKS
discovery, fetching, caching, key rotation, signature validation, and Cognito
claim validation to that AWS-maintained verifier. Consumers only provide the
user pool id, app client id, and accepted token type:
import {
AWS,
handleCloudFunctionEvent,
} from "@resistdesign/voltra/api";
const getAuthInfo = (event: AWS.IAWSCloudFunctionEvent) =>
AWS.getCognitoAuthInfo(event, {
userPoolId: process.env.USER_POOL_ID as string,
clientId: process.env.USER_POOL_CLIENT_ID as string,
tokenUse: "id",
});
export const handler = (event: AWS.IAWSCloudFunctionEvent) =>
handleCloudFunctionEvent(
event,
AWS.normalizeCloudFunctionEvent,
routes,
[process.env.CLIENT_ORIGIN as string],
undefined,
false,
getAuthInfo,
);
Use a gateway authorizer instead when unauthenticated requests must be rejected
before they reach the cloud function. See
examples/api/cognito-pass-through-auth.ts for a complete routing example.
addGateway authorizer provider ARNs can use CloudFormation intrinsics:
import { addGateway } from "@resistdesign/voltra/iac/packs";
import { SimpleCFT } from "@resistdesign/voltra/iac";
new SimpleCFT().applyPack(addGateway, {
id: "ApiGateway",
hostedZoneId: { Ref: "HostedZoneId" },
domainName: { Ref: "ApiDomainName" },
certificateArn: { Ref: "ApiCertificateArn" },
cloudFunction: { id: "ApiFunction" },
authorizer: {
providerARNs: [{ "Fn::GetAtt": ["MyUserPool", "Arn"] }],
},
});
addAuth can pass partial user-management id overrides without changing all defaults:
import { addAuth } from "@resistdesign/voltra/iac/packs";
import { SimpleCFT } from "@resistdesign/voltra/iac";
new SimpleCFT().applyPack(addAuth, {
userManagementId: "UserPool",
userManagementIds: {
userPool: "MyUserPool",
userPoolClient: "MyUserPoolClient",
},
authRoleName: "AuthRole",
unauthRoleName: "UnauthRole",
apiCloudFunctionGatewayId: "ApiGateway",
apiStageName: "prod",
adminGroupId: "AdminGroup",
userManagementAdminGroupName: "admins",
hostedZoneIdParameterName: "HostedZoneId",
domainNameParameterName: "DomainName",
sslCertificateId: "CertificateArn",
mainCDNCloudFrontId: "MainCDN",
callbackUrls: ["https://example.com/callback"],
logoutUrls: ["https://example.com/logout"],
});
Voltra exposes TypeScript compiler–powered parsing utilities intended only for build-time tooling (scripts, generators, CI).
These APIs depend on the TypeScript compiler and must not be imported into runtime code (e.g. Lambdas, servers, browsers).
Build entrypoint:
import {getTypeInfoMapFromTypeScript} from "@resistdesign/voltra/build";
Use this entrypoint for:
Do not import @resistdesign/voltra/build from runtime code.
| Voltra is a state-of-the-art platform designed to streamline the creation of cloud infrastructure and complex web applications. It features a robust API with RPC, CORS, and versatile authentication options, alongside dynamic app development tools like TypeScript-driven form generation. The platform excels in Infrastructure as Code (IaC), offering features like chainable stacks and comprehensive parameter support. Its intuitive interface simplifies the addition of databases, storage, authentication, and functions through easy-to-use packs. Furthermore, Voltra enhances development workflows with advanced state management, and a smart, lightweight routing system for React front-end apps. |
App features include form generation via TypeInfo-driven AutoForm/AutoField with validation, constraints, and relation/custom handlers.
| API | App | IaC |
|---|---|---|
| RPC | Easy Layout | Full Parameter Support: Groups/Labels/Types/etc... |
| Auth: Public/Secured/Role Based | State Management | Packs: Easy to add Database/Storage/Auth/Functions/etc... |
| Routing: Nesting/Handlers/Injected Handlers | Routing: Param Handlers/Parallel Routes/Hooks | Utilities: Patching Stacks/Constants/Standard Includes/etc... |
| MCP: Native RouteMap protocol + tool routing for LLM clients | ||
| ORM: TypeScript Type Driven Auto-generated Data Contexts with Relationships | Form Generation: AutoForm/AutoField + constraints/relations | Typed Build Spec Creation |
| Form Engine: validation, defaults, denied ops, custom type flow | Typed Resource Parameters |
EasyLayout now has:
@resistdesign/voltra/app (parseTemplate, computeTrackPixels, etc.).@resistdesign/voltra/web.@resistdesign/voltra/native.examples/README.mdexamples/routing/app-routing.tsexamples/api/backend-routing.tsexamples/forms/
examples/forms/auto-form-validation-customization.tsxexamples/layout/examples/common/types.ts
examples/common/typeinfo-validation.tsexamples/build/type-parsing.tsheader header, 1fr
side main, 2fr
\ 100px 1fr
<areas>, <row-track> (row track optional)\ <col-track> <col-track> ...fr, px, %import { getEasyLayout } from "@resistdesign/voltra/web";
const { layout: Layout, areas } = getEasyLayout(undefined, undefined, {
gap: 12,
padding: 16,
})`
header header, 1fr
side main, 2fr
\ 1fr 2fr
`;
import { makeNativeEasyLayout } from "@resistdesign/voltra/native";
const layout = makeNativeEasyLayout(`
header header, 100px
side main, 1fr
\\ 1fr 2fr
`);
const coords = layout.computeNativeCoords({
width: 320,
height: 240,
padding: 12,
gap: 8,
});
| Runtime | Rendering model | Output |
|---|---|---|
| Web | CSS Grid (browser layout engine) | CSS template strings |
| Native | Computed absolute layout | { left, top, width, height } per area |
Voltra routing uses the same Route API across app/web/native.
Use the platform barrel for root Route so runtime mechanics are auto-wired.
The routing model is path/history based on every platform.
Reference example: examples/routing/app-routing.ts
import { Route } from "@resistdesign/voltra/web";
<Route>
<Route path="/" exact>
<HomeScreen />
</Route>
<Route path="/login" exact>
<LoginScreen />
</Route>
<Route path="/signup" exact>
<SignUpScreen />
</Route>
</Route>;
import { Route } from "@resistdesign/voltra/native";
<Route>
<Route path="/" exact>
<HomeScreen />
</Route>
</Route>;
On native, Voltra provides the missing browser-like pieces:
native barrel auto-selects browser behavior on React Native web targets
and native-history behavior on mobile targetsHow it works:
<Route> (no path) is provider mode.<Route path="..."> entries are matcher mode.history.index > 0), it consumes the event and navigates back.Optional back affordances:
adapter.back?.() navigates backward when supported.adapter.canGoBack?.() reports whether back navigation is currently possible.Escape hatches (root-only):
initialPath sets fallback startup path when no ingress URL exists.adapter allows full custom adapter control.ingress supports deep-link ingress wiring (getInitialURL, subscribe, URL mapping, push/replace mode).If you are looking for backend request routing (Cloud Function/API event routing), see:
examples/api/backend-routing.tsVoltra's form system is split into a platform-agnostic core and platform suites:
src/app/forms/core (field kinds, suite resolution, renderer factories).src/web/forms.src/native/forms.import { createWebFormRenderer } from "@resistdesign/voltra/web";
const { AutoField } = createWebFormRenderer();
Override a single renderer:
import { withRendererOverride } from "@resistdesign/voltra/app";
import { createWebFormRenderer } from "@resistdesign/voltra/web";
const { AutoField } = createWebFormRenderer({
suite: withRendererOverride("string", (ctx) => {
return <input value={(ctx.value as string) || ""} onChange={(e) => ctx.onChange(e.target.value)} />;
}),
});
import { createNativeFormRenderer } from "@resistdesign/voltra/native";
const { AutoField } = createNativeFormRenderer();
Provide partial overrides (renderers and/or primitives). Missing renderers are filled from the default suite and validated.
import { createWebFormRenderer } from "@resistdesign/voltra/web";
const { AutoField } = createWebFormRenderer({
suite: {
primitives: {
Button: ({ children }) => <button className="my-button">{children}</button>,
},
renderers: {
boolean: (ctx) => (
<label>
<input
type="checkbox"
checked={!!ctx.value}
onChange={(e) => ctx.onChange(e.target.checked)}
/>
{ctx.label}
</label>
),
},
},
});
Renderers emit actions via:
onRelationAction(payload) for relation fieldsonCustomTypeAction(payload) for custom typesUse these to wire modals, selectors, or editors without baking UI into the core engine.
All TypeInfo data-item validation can be run directly from @resistdesign/voltra/common:
import { validateTypeInfoDataItem } from "@resistdesign/voltra/common";
validateTypeInfoDataItem supports:
customValidatorMap callbacks that return ErrorDescriptortags.validation field options:
validateHiddenvalidateReadonlyemptyArrayIsValidAutoForm passes validation through the same centralized logic and supports:
customValidatorMap for app-specific rulestranslateValidationErrorCode for UI-facing messagesValidation error maps can include both value-level errors and array item errors:
{
errorMap: {
title: [
{ code: "MISSING_FIELD_VALUE" },
{ code: "VALUE_DOES_NOT_MATCH_PATTERN" }
],
tags: [
{ code: "INVALID_TYPE" },
{
itemErrorMap: {
0: [{ code: "NOT_A_STRING" }],
2: [
{ code: "NOT_A_STRING" },
{ code: "INVALID_CUSTOM_TYPE" }
]
}
}
]
}
}
ErrorDescriptor entries in the field array.itemErrorMap[index] = ErrorDescriptor[].Error-code constants are split by purpose:
PRIMITIVE_ERROR_MESSAGE_CONSTANTS keys follow typeof (string, number, boolean)DENIED_TYPE_OPERATIONS keys follow TypeOperation (CREATE, READ, UPDATE, DELETE)ERROR_MESSAGE_CONSTANTS exposes canonical code-keyed entries (for example NOT_A_STRING, DENIED_TYPE_OPERATION_CREATE)The docs site is both reference documentation and a canonical usage example. Key pieces:
site/app builds the UI into site-dist/app via yarn site:build:app.yarn site:build:api (see site/build-api.mjs) and written to
site-dist/api.yarn site:build:iac from site/iac/index.ts and written to
site-dist/iac/index.yml.API docs flow:
yarn doc generates TypeDoc output into docs/.yarn doc-to-site copies docs/ into site-dist/app/.yarn site:build:app runs Astro and then yarn finalize-site to refresh the docs site with API docs.IaC types are generated from the AWS CloudFormation resource specification. When updating, follow this flow:
us-east-1).src/iac/types/CloudFormationResourceSpecification.ts with the JSON payload (as the exported
data).yarn iac:types:gen to regenerate dist/IaCTypes.ts.dist/IaCTypes.ts looks correct, then commit both files.Notes:
src/iac/types/IaCTypes.ts and src/iac/types/CloudFormationResourceSpecification.ts are generated artifacts; do not
edit by hand.src/iac/types/generate.ts and uses src/iac/types/Renderers.ts for output.Voltra publishes npm packages from GitHub Releases. The release tag is used verbatim
as the npm package version, so it must be valid SemVer without a leading v.
Use tags like:
3.0.0
Use tags like:
3.0.0-alpha.0
3.0.0-beta.1
3.0.0-rc.1
When the GitHub Release is marked as a prerelease, the npm publish step uses the
next dist-tag instead of latest. Consumers can install prereleases with:
yarn add @resistdesign/voltra@next
yarn build
yarn test
yarn test:gen
yarn doc
yarn start
yarn site:build:app
feat:, fix:, doc:, chore:) with optional scopes.