Skip to content
Documentation
1.0.0-beta.10 · latest

Project configuration reference

Source e69e4b6f1381 · Published v1.0.0-beta.10

A conventional project uses .pulse/config.ts. Start with the property map, then select a property for its type, default, constraints, and diagnostics.

pulse holds project-wide settings. Every other top-level key names a profile, such as local or production. Below, <profile> means that profile name and <name> means a logical binding name you choose. At least one profile is required; each profile must set host and target. Optional objects can have required members when configured.

ObjectProperties — select for details
<profile>host, nativeOptimization, outDir, reporting, crypto, schemas, dev, target, <fragment>, provider, node, fastly
<profile>.devhost, port, watch, maxBodyBytes, networkFetch, config, secrets, kv, fetches
<profile>.schemascontentTypePolicy, maxBytes
pulsebinaryResources, entry, crypto, schema, tests, defaultProfile, strict, reporting
pulse.binaryResourcesmanifest, bindings, budgets
pulse.binaryResources.budgetsfiles, fileBytes, totalBytes, serializedBytes, bindings
ObjectProperties — select for details
<profile>.nodebodyTransform, generatedOutput, bodyForwarding, maxDurationMs, bindings
<profile>.node.bindingspackages, s3
<profile>.node.bindings.packages.<name>package, contractId, artifact, operations, secret, keyId, keyVersion, trustDomain, origin
<profile>.node.bindings.s3.<name>endpoint, bucket, region, accessKeyIdSecret, secretAccessKeySecret, sessionTokenSecret, maxTextBytes, timeoutMs
<profile>.node.bodyForwardingmaxBytes
ObjectProperties — select for details
<profile>.fastlybodyForwarding, maxDurationMs, local, bindings, build
<profile>.fastly.bindingslogEndpoint, s3, configStore, secretStore, kv, backends, dynamicBackends, grip
<profile>.fastly.bindings.gripfanoutBackend, publishEndpoint, publishUrl, publishBackend, authentication, directHold
<profile>.fastly.bindings.grip.authenticationscheme, secretRef
<profile>.fastly.bindings.s3.<name>endpoint, bucket, region, accessKeyIdSecret, secretAccessKeySecret, sessionTokenSecret, maxTextBytes, timeoutMs, backend
<profile>.fastly.bodyForwardingrequestMaxBytes, responseMaxBytes
<profile>.fastly.buildmaxWasmBytes, name, description, authors
<profile>.fastly.localnetworkFetch

Provider options belong under the selected provider namespace. For example, a Fastly KV binding is production.fastly.bindings.kv, while local test data belongs in production.dev.kv.

Conventional projects use one deferred, synchronous defineConfig factory from @pulse-compute/pulse. Every top-level key except pulse is a flat profile. The scope exposes symbolic config and secret references; it never resolves ambient values while the project plan is built.

import { defineConfig } from '@pulse-compute/pulse'
export default defineConfig((scope) => ({
pulse: {
entry: 'src/index.ts',
tests: 'tests/pulse.harness.ts',
defaultProfile: 'local',
strict: true,
},
local: {
host: 'node',
target: 'native',
apiBase: scope.config('API_BASE'),
apiToken: scope.secret('API_TOKEN'),
},
}))

Project pointers are workspace-relative. Profile selection is explicit and deterministic:

  1. --profile
  2. PULSE_PROFILE
  3. pulse.defaultProfile

Project commands accept one optional positional directory and otherwise start from the current directory. Discovery searches upward only for .pulse/config.ts. Public entry, config-file, workspace, provider, and target overrides are not supported.

Command-line output, listener host, port, and watch options override the corresponding selected-profile value for that command. Harness case inputs replace development inputs for that case. Neither changes deployed resource bindings.

Select the canonical entry, provider, and build output.

Explicit canonical serialized manifest, logical bindings and mandatory nonnegative safe-integer budgets: files, fileBytes, totalBytes, serializedBytes and bindings. Build-time data hoisting; no runtime loading or read-byte quota.

  • Type: PulseBinaryResources
  • Required/default: Optional; default absent.
  • Scope: all targets
  • Security and safety: All manifest records are integrity-checked before selection; views are immutable and execution-owned. HTTP Assets limits are unchanged.
  • Related diagnostics: PULSE_BINARY_RESOURCE_INVALID

Project-relative TypeScript handler entry.

  • Type: string
  • Required/default: Optional; default src/index.ts.
  • Scope: all project commands
  • Precedence: pulse.entry in .pulse/config.ts.
  • Security and safety: Must resolve to an existing file.
  • Related diagnostics: PULSE_ENTRY_NOT_FOUND

Selects the provider for this profile. Built-in host IDs include node, fastly, and compile-only none; a scoped provider package name selects that exact package.

Native compiler recipe. native-bounded-size is O3/shrink2/no convergence; native-shrink0 restores O3/shrink0/no convergence. experimental-native-size enables convergence; experimental-native-bounded-size retains the bounded compatibility identity.

  • Type: 'native-bounded-size' | 'native-shrink0' | 'experimental-native-size' | 'experimental-native-bounded-size'
  • Required/default: Optional; default native-bounded-size for Native compilation.
  • Allowed values or constraints: native-bounded-size, native-shrink0, experimental-native-size, experimental-native-bounded-size
  • Scope: Native profile
  • Precedence: An explicit compile/build recipe flag overrides the selected profile; otherwise use the bounded Native default.
  • Related diagnostics: PULSE_ARGUMENT_UNEXPECTED

Project-relative artifact output directory.

  • Type: string
  • Required/default: Optional; default dist.
  • Scope: compile/build
  • Precedence: --out overrides this field for the current command.
  • Security and safety: Must remain a real child of the project root; absolute, parent-traversal, and symbolic-link traversal outside the project root is rejected.
  • Related diagnostics: PULSE_BUILD_OUT_UNSAFE

Overrides the global logging threshold for the selected profile.

  • Type: 'off' | 'error' | 'warn' | 'info' | 'debug'
  • Required/default: Optional; default inherit pulse.reporting.
  • Allowed values or constraints: off, error, warn, info, debug
  • Scope: compile/build/dev/test
  • Precedence: Selected-profile reporting, then pulse.reporting, then info.
  • Security and safety: Known request-owned secret values are redacted before provider emission.
  • Related diagnostics: PULSE_REPORTING_LEVEL_UNSUPPORTED (family fallback; reference root)

Workspace-relative module that default-exports a defineSchemaRegistry registry. Schema identities are declared there; schemas configures decoding policy.

  • Type: string | null
  • Required/default: Optional; default null.
  • Allowed values or constraints: A workspace-relative module path; absolute paths and workspace escapes are rejected.

Workspace-relative test harness module used by pulse test.

  • Type: string | null
  • Required/default: Optional; default null.
  • Allowed values or constraints: A workspace-relative module path; absolute paths and workspace escapes are rejected.

Profile selected when neither --profile nor PULSE_PROFILE is supplied. It must name an existing top-level profile.

  • Type: string | null
  • Required/default: Optional; default null (no default profile).
  • Precedence: --profile, then PULSE_PROFILE, then this field. No first-profile or implicit local fallback.

Requires schema-bound request JSON when true. Setting false permits schema-less JSON where supported; it does not change target eligibility.

  • Type: boolean
  • Required/default: Optional; default true.

Global logging threshold, inherited by profiles that omit reporting.

  • Type: 'off' | 'error' | 'warn' | 'info' | 'debug'
  • Required/default: Optional; default info.
  • Precedence: Selected-profile reporting overrides this value.

Selects the execution target explicitly. Native requires provable supported source; JavaScript retains ordinary static imports and awaited calls.

  • Type: string
  • Required/default: Required when the containing object is configured.
  • Allowed values or constraints: native, javascript

Additional profile properties are application or provider fragments. They may contain null, finite numbers, strings, booleans, arrays, objects, and symbolic scope.config(name) or scope.secret(name) references. Functions, undefined values, and asynchronous configuration are rejected.

  • Type: static value
  • Required/default: Optional; default omitted.
  • Security and safety: References name bindings; they do not read ambient values during planning. One logical name cannot be both config and secret in the same project.

Compatibility provider-options fragment. Prefer the selected provider namespace (node or fastly). If that namespace contains an object, it takes precedence over this fragment. Provider selection still comes from host.

  • Type: object
  • Required/default: Optional; default omitted.

Declare algorithms globally or replace the complete declaration for one profile.

Declares the complete global algorithm set. Array entries are canonical algorithm names; object entries may pin one exact known realization.

  • Type: readonly PulseCryptoAlgorithm[] | Readonly<Partial<Record<PulseCryptoAlgorithm, { readonly realization?: PulseCryptoRealization }>>>
  • Required/default: Optional; default implicit no-crypto declaration.
  • Allowed values or constraints: HS256, ES256, RS256, SHA-256, HMAC-SHA256; exact pins runtime-builtin, guest-source:pulse-hmac-as, guest-linked:pulse-es256-rustcrypto-p256, and guest-linked:pulse-rs256-bearssl-i31
  • Scope: global crypto requirement default
  • Precedence: Used only when the selected profile omits crypto.
  • Security and safety: Keys and verification bytes are not configuration values. Target selection is deterministic and never probes or falls back.
  • Related diagnostics: PULSE_CRYPTO_CONFIG_SHAPE_INVALID (family fallback; reference root), PULSE_CRYPTO_ALGORITHM_DUPLICATE (family fallback; reference root), PULSE_CRYPTO_ALGORITHM_UNKNOWN (family fallback; reference root), PULSE_CRYPTO_REALIZATION_UNKNOWN (family fallback; reference root)

Replaces the complete global crypto declaration for the selected profile. Arrays and objects never merge with pulse.crypto.

  • Type: readonly PulseCryptoAlgorithm[] | Readonly<Partial<Record<PulseCryptoAlgorithm, { readonly realization?: PulseCryptoRealization }>>>
  • Required/default: Optional; default inherit pulse.crypto when absent.
  • Allowed values or constraints: [] and {} explicitly select no crypto; otherwise HS256, ES256, RS256, SHA-256, HMAC-SHA256
  • Scope: selected profile
  • Precedence: Selected-profile declaration replaces pulse.crypto; absence inherits it.
  • Security and safety: Every declared algorithm must resolve for the selected target before lowering. A failed exact realization cannot select another backend.
  • Related diagnostics: PULSE_CRYPTO_CONFIG_REQUIRED (family fallback; reference root), PULSE_CRYPTO_REALIZATION_PIN_INVALID (family fallback; reference root), PULSE_CRYPTO_REALIZATION_UNAVAILABLE (family fallback; reference root)

Configure bounded schema-body policy. Conventional projects declare registry identity only through pulse.schema.

Sets schema body limits and content-type policy. Schema identities come from the module selected by pulse.schema.

  • Type: PulseSchemaConfig
  • Required/default: Optional; default {}.
  • Scope: compile/dev/test/build
  • Security and safety: Structured bodies are bounded before decoding.
  • Related diagnostics: PULSE_SCHEMA_COMPILE_FAILED

Controls whether a JSON content type is mandatory.

  • Type: 'accept-json-or-missing' | 'require-json'
  • Required/default: Optional; default accept-json-or-missing.
  • Allowed values or constraints: accept-json-or-missing, require-json
  • Scope: request and fetched-body schema decode
  • Related diagnostics: PULSE_SCHEMA_CONTENT_TYPE_POLICY_INVALID (family fallback; reference root), PULSE_SCHEMA_DECODE

Maximum UTF-8 bytes for schema decoding and encoding. Request transport and dev.maxBodyBytes may impose separate limits.

  • Type: positive safe integer
  • Required/default: Optional; default 65_536.
  • Scope: structured schema text
  • Security and safety: Raise deliberately; this is a memory and request-amplification boundary.
  • Related diagnostics: PULSE_SCHEMA_BODY_LIMIT_INVALID (family fallback; reference root), PULSE_BODY_TOO_LARGE

Configure the foreground local server and local-only provider inputs.

Development listener and local fixture inputs.

  • Type: object
  • Required/default: Optional; default {}.
  • Scope: pulse dev and local conformance

Listener host.

  • Type: string
  • Required/default: Optional; default 127.0.0.1.
  • Scope: pulse dev
  • Precedence: --host overrides this field.
  • Security and safety: Binding a non-loopback address exposes the local development server.
  • Related diagnostics: PULSE_DEV_HOST_INVALID (family fallback; reference root)

Listener port.

  • Type: integer
  • Required/default: Optional; default 8787.
  • Allowed values or constraints: 0–65535; 0 requests an ephemeral port
  • Scope: pulse dev
  • Precedence: --port overrides this field.
  • Related diagnostics: PULSE_DEV_PORT_INVALID (family fallback; reference root)

Watches the entry and schema dependency graph.

  • Type: boolean
  • Required/default: Optional; default true.
  • Scope: pulse dev
  • Precedence: --watch or --no-watch overrides this field.
  • Security and safety: Configuration-file changes still require a restart.

Maximum request body accepted by the local development server.

  • Type: positive safe integer
  • Required/default: Optional; default 65_536.
  • Scope: incoming local requests
  • Security and safety: Raise deliberately; this is a memory and request-amplification boundary.
  • Related diagnostics: PULSE_DEV_BODY_LIMIT_INVALID (family fallback; reference root), PULSE_REQUEST_BODY_TOO_LARGE

Allows unmatched local fetches to use the network.

  • Type: boolean
  • Required/default: Optional; default selected provider default.
  • Scope: local fetch realization
  • Precedence: This explicit field overrides the selected provider local default.
  • Security and safety: Keep disabled for deterministic or untrusted test inputs.
  • Related diagnostics: PULSE_FETCH_IMPLEMENTATION_UNAVAILABLE, PULSE_FETCH_NETWORK

Local configuration-store values.

  • Type: Readonly<Record<string, string>>
  • Required/default: Optional; default {}.
  • Scope: local config capability
  • Security and safety: Development input only; it does not configure deployed provider stores.

Local secret-store values.

  • Type: Readonly<Record<string, string>>
  • Required/default: Optional; default {}.
  • Scope: local secret capability
  • Security and safety: Raw values are omitted from project JSON, diagnostics, and runtime error details; do not commit real production secrets.

Local KV stores keyed by configured logical store name.

  • Type: Readonly<Record<string, Readonly<Record<string, unknown>>>>
  • Required/default: Optional; default {}.
  • Scope: local KV capability
  • Security and safety: Development input only; it is not deployed.

Deterministic fetch fixtures resolved before optional live network fetch.

  • Type: Readonly<Record<string, unknown>>
  • Required/default: Optional; default {}.
  • Scope: local fetch capability
  • Security and safety: Prefer fixtures for deterministic tests and offline development.

Provider-owned Node profile configuration.

Explicit package, contractId, artifact, operations, secret reference, keyId, keyVersion, trustDomain and HTTPS origin. Captures exact HTTP bytes up to 65536 body bytes; incompatible with bodyForwarding/bodyTransform. See the package runtime binding contract.

  • Type: Readonly<Record<string, PackageRuntimeBinding>>
  • Required/default: Optional; default omitted.
  • Scope: Trusted package Wasm on Node

Opt-in finite request text chunks. Requires generatedOutput and maxDurationMs; incompatible with bodyForwarding. Input 65536 bytes, output 262144 bytes, at most 4 times delivered input bytes. Strict UTF-8, one reader/writer, EOF required before output.close().

  • Type: boolean
  • Required/default: Optional; default omitted.
  • Scope: Experimental Node UTF-8 transforms

Opt-in finite UTF-8 output. Requires node.maxDurationMs. Each write is at most 16384 bytes; at most 64 writes and 1048576 bytes total. Use STR-03B for exact-candidate installed qualification.

  • Type: boolean
  • Required/default: Optional; default omitted.
  • Scope: Experimental Node generated output

Opt-in single-use incoming POST forwarding. maxBytes is a positive safe integer limiting each transfer direction; requires node.maxDurationMs. Pulse emits chunks up to 16384 bytes and retains at most 65536 bytes per pump. Native uses exact Wasm execution and excludes structured request reads in the same application.

  • Type: { maxBytes: number }
  • Required/default: Optional; default omitted.
  • Scope: Node incoming forwarding

One provider-owned monotonic budget shared by request effects and continuations; expiry does not prove rollback of dispatched writes.

  • Type: integer
  • Required/default: Optional; default omitted.
  • Allowed values or constraints: 1–30000
  • Scope: HTTP request execution

Maps literal logical names to fixed HTTPS endpoint, bucket, region, accessKeyIdSecret, secretAccessKeySecret, optional sessionTokenSecret, maxTextBytes (1–2097152, default 32768) and timeoutMs (1–30000, default 10000).

  • Type: Readonly<Record<string, S3Binding>>
  • Required/default: Optional; default {}.
  • Scope: Node Native and JavaScript S3
  • Security and safety: Only named credential references are configuration. Runtime keys cannot override authority.

Node provider options for a profile whose host is node.

  • Type: object
  • Required/default: Optional; default {} (member defaults apply).

Named S3 and remote package bindings.

  • Type: object
  • Required/default: Optional; default {} (member defaults apply).

Maximum bytes forwarded per transfer direction. The containing bodyForwarding object also requires node.maxDurationMs.

  • Type: positive safe integer
  • Required/default: Required when the containing object is configured.

Options nested under <profile>.fastly; bindings and build metadata have separate objects.

One case-sensitive named production log stream, 1–255 UTF-8 bytes, excluding stdout, stderr, fst_managed_ names and control characters. Records above 65536 UTF-8 bytes are dropped. One lookup and at most one write per record; errors and zero/short writes are dropped without retry or stdout fallback. Host acceptance does not prove downstream delivery.

Opt in to one terminal opaque POST with inline req.body() and a static backend. Requires maxDurationMs and both byte limits. Final close hands queued delivery to Fastly; it is not a client receipt.

  • Type: object
  • Required/default: Optional; default omitted.
  • Scope: experimental Fastly Native forwarding
  • Related diagnostics: PULSE_FASTLY_BODY_FORWARDING_INVALID (family fallback; reference root)

<profile>.fastly.bodyForwarding.requestMaxBytes

Section titled “<profile>.fastly.bodyForwarding.requestMaxBytes”

Independent actual-byte bound, including EOF verification; no unbounded default. Fixed 16 KiB raw scratch is reused across the sequential upload and response pumps.

  • Type: integer
  • Required/default: Required when the containing object is configured.
  • Allowed values or constraints: 1–1048576
  • Scope: experimental Fastly Native forwarding

<profile>.fastly.bodyForwarding.responseMaxBytes

Section titled “<profile>.fastly.bodyForwarding.responseMaxBytes”

Independent actual-byte bound, including EOF verification; no unbounded default. Fixed 16 KiB raw scratch is reused across the sequential upload and response pumps.

  • Type: integer
  • Required/default: Required when the containing object is configured.
  • Allowed values or constraints: 1–1048576
  • Scope: experimental Fastly Native forwarding

Inclusive byte budget checked for newly compiled and reused artifacts. Raising it does not increase runtime memory or change Fastly service limits. The fastly() facade accepts maxWasmBytes.

  • Type: integer
  • Required/default: Optional; default 4194304 (4 MiB).
  • Allowed values or constraints: positive safe integer
  • Scope: Native final Wasm artifact

One provider-owned monotonic budget through buffered response handoff; expiry attempts 504 before headers commit and never asserts rollback of dispatched writes. No CPU preemption or post-handoff delivery guarantee.

  • Type: integer
  • Required/default: Optional; default omitted.
  • Allowed values or constraints: 1–30000
  • Scope: HTTP request execution

Maps logical names to fixed HTTPS endpoint, bucket, region, named static backend, accessKeyIdSecret, secretAccessKeySecret, optional sessionTokenSecret, maxTextBytes (1–2097152, default 32768) and timeoutMs (1–30000, default 10000).

  • Type: Readonly<Record<string, S3Binding & { backend: string }>>
  • Required/default: Optional; default {}.
  • Scope: Fastly Native S3
  • Security and safety: Credentials resolve through the configured Secret Store at execution. Dynamic backend authority and guest endpoint overrides are forbidden.

Fastly Config Store resource name.

  • Type: string
  • Required/default: Optional; default pulse_config.
  • Scope: Fastly config capability

Fastly Secret Store resource name.

  • Type: string
  • Required/default: Optional; default pulse_secrets.
  • Scope: Fastly secret capability
  • Security and safety: The name is build metadata; secret values are never embedded by this option.

Maps logical ctx.kv names to Fastly KV Store resource names.

  • Type: Readonly<Record<string, string>>
  • Required/default: Optional; default {}.
  • Scope: Fastly KV capability
  • Related diagnostics: PULSE_FASTLY_KV_BINDINGS_INVALID

Maps static absolute origin URLs to named Fastly backends.

Allows undeclared outbound origins to use dynamic backends.

  • Type: boolean
  • Required/default: Optional; default false.
  • Scope: Fastly fetch capability
  • Security and safety: Opt in deliberately because it broadens outbound authority.
  • Related diagnostics: PULSE_FASTLY_BACKEND_REQUIRED

Provider-owned bindings used by package-owned GRIP compatibility and canonical broadcast effects.

  • Type: object
  • Required/default: Optional; default omitted.
  • Scope: Fastly GRIP capability

<profile>.fastly.bindings.grip.fanoutBackend

Section titled “<profile>.fastly.bindings.grip.fanoutBackend”

Named Fastly Fanout backend.

<profile>.fastly.bindings.grip.publishEndpoint

Section titled “<profile>.fastly.bindings.grip.publishEndpoint”

Provider-owned absolute publish/control endpoint; distinct from public gateway and ingress URLs.

Absolute publish endpoint URL.

<profile>.fastly.bindings.grip.publishBackend

Section titled “<profile>.fastly.bindings.grip.publishBackend”

Named backend for the provider publish endpoint.

<profile>.fastly.bindings.grip.authentication

Section titled “<profile>.fastly.bindings.grip.authentication”

Authentication metadata containing references only; no credential value is accepted here.

  • Type: object
  • Required/default: Optional; default omitted.
  • Scope: GRIP broadcast authentication
  • Security and safety: Store the value in Fastly Secret Store and configure only secretRef.

<profile>.fastly.bindings.grip.authentication.scheme

Section titled “<profile>.fastly.bindings.grip.authentication.scheme”

Provider authentication scheme.

  • Type: 'bearer'
  • Required/default: Optional; default bearer.
  • Scope: GRIP broadcast authentication
  • Related diagnostics: PULSE_FASTLY_NATIVE_GRIP_AUTH_SCHEME_UNSUPPORTED (family fallback; reference root)

<profile>.fastly.bindings.grip.authentication.secretRef

Section titled “<profile>.fastly.bindings.grip.authentication.secretRef”

Named Fastly Secret Store key used for the bearer token.

  • Type: string
  • Required/default: Optional; default omitted.
  • Scope: GRIP broadcast authentication
  • Security and safety: The secret value is resolved only at request execution and is redacted from traces.
  • Related diagnostics: PULSE_FASTLY_NATIVE_GRIP_SECRET_REFERENCE_MISSING (family fallback; reference root)

Enables the direct host-owned hold response realization.

  • Type: boolean
  • Required/default: Optional; default true.
  • Scope: GRIP hold

Generated Fastly package name.

  • Type: string
  • Required/default: Optional; default pulse-app.
  • Scope: Fastly package metadata

Generated Fastly package description.

  • Type: string
  • Required/default: Optional; default Pulse application.
  • Scope: Fastly package metadata

Generated Fastly package authors.

  • Type: readonly string[]
  • Required/default: Optional; default [].
  • Scope: Fastly package metadata

Local-only behavior; it does not alter the deployed target.

  • Type: object
  • Required/default: Optional; default {}.
  • Scope: local Fastly conformance

Allows unmatched local Fastly fetches to use the network.

  • Type: boolean
  • Required/default: Optional; default false.
  • Scope: local Fastly fetch realization
  • Precedence: dev.networkFetch overrides this value when explicitly set.
  • Security and safety: Keep disabled for deterministic tests and offline development.

Fastly provider options for a profile whose host is fastly.

  • Type: object
  • Required/default: Optional; default {} (member defaults apply).

Deployment resource names, static backends, and capability bindings.

  • Type: object
  • Required/default: Optional; default {} (member defaults apply).

Fastly package metadata and final Wasm artifact budget.

  • Type: object
  • Required/default: Optional; default {} (member defaults apply).

Required members when pulse.binaryResources is configured; no implicit resource budgets.

Canonical serialized embedded manifest supplied explicitly at build time. This is manifest content, not a filesystem path.

  • Type: string
  • Required/default: Required when the containing object is configured.

Maps logical binary-resource binding names to file paths within the manifest.

  • Type: Readonly<Record<string, string>>
  • Required/default: Required when the containing object is configured.

Explicit upper bounds for resource admission. All five limits must be supplied.

  • Type: object
  • Required/default: Required when the containing object is configured.

Maximum number of resource files.

  • Type: non-negative safe integer
  • Required/default: Required when the containing object is configured.
  • Allowed values or constraints: An integer from 0 through Number.MAX_SAFE_INTEGER.

Maximum bytes in one resource file.

  • Type: non-negative safe integer
  • Required/default: Required when the containing object is configured.
  • Allowed values or constraints: An integer from 0 through Number.MAX_SAFE_INTEGER.

Maximum total bytes across resource files.

  • Type: non-negative safe integer
  • Required/default: Required when the containing object is configured.
  • Allowed values or constraints: An integer from 0 through Number.MAX_SAFE_INTEGER.

pulse.binaryResources.budgets.serializedBytes

Section titled “pulse.binaryResources.budgets.serializedBytes”

Maximum bytes in the serialized resource payload.

  • Type: non-negative safe integer
  • Required/default: Required when the containing object is configured.
  • Allowed values or constraints: An integer from 0 through Number.MAX_SAFE_INTEGER.

Maximum number of logical bindings.

  • Type: non-negative safe integer
  • Required/default: Required when the containing object is configured.
  • Allowed values or constraints: An integer from 0 through Number.MAX_SAFE_INTEGER.

Each logical S3 binding has this shape. Fastly additionally requires a static backend.

<profile>.node.bindings.s3.<name>.endpoint

Section titled “<profile>.node.bindings.s3.<name>.endpoint”

Fixed HTTPS origin without a path, query, or fragment.

  • Type: string
  • Required/default: Required when the containing object is configured.
  • Security and safety: Credentials resolve from named secrets at execution; request data cannot override binding authority.

Fixed bucket name; portable lowercase DNS subset, 3–63 characters, without consecutive hyphens.

  • Type: string
  • Required/default: Required when the containing object is configured.
  • Security and safety: Credentials resolve from named secrets at execution; request data cannot override binding authority.

Explicit signing region; 1–64 lowercase letters, digits, or hyphens.

  • Type: string
  • Required/default: Required when the containing object is configured.
  • Security and safety: Credentials resolve from named secrets at execution; request data cannot override binding authority.

<profile>.node.bindings.s3.<name>.accessKeyIdSecret

Section titled “<profile>.node.bindings.s3.<name>.accessKeyIdSecret”

Name of the secret containing the access key ID.

  • Type: string
  • Required/default: Required when the containing object is configured.
  • Security and safety: Credentials resolve from named secrets at execution; request data cannot override binding authority.

<profile>.node.bindings.s3.<name>.secretAccessKeySecret

Section titled “<profile>.node.bindings.s3.<name>.secretAccessKeySecret”

Name of the secret containing the secret access key.

  • Type: string
  • Required/default: Required when the containing object is configured.
  • Security and safety: Credentials resolve from named secrets at execution; request data cannot override binding authority.

<profile>.node.bindings.s3.<name>.sessionTokenSecret

Section titled “<profile>.node.bindings.s3.<name>.sessionTokenSecret”

Optional name of the secret containing the session token.

  • Type: string
  • Required/default: Optional; default omitted.
  • Security and safety: Credentials resolve from named secrets at execution; request data cannot override binding authority.

<profile>.node.bindings.s3.<name>.maxTextBytes

Section titled “<profile>.node.bindings.s3.<name>.maxTextBytes”

Maximum buffered text body bytes.

  • Type: integer
  • Required/default: Optional; default 32_768.
  • Allowed values or constraints: 1–2,097,152
  • Security and safety: Credentials resolve from named secrets at execution; request data cannot override binding authority.

<profile>.node.bindings.s3.<name>.timeoutMs

Section titled “<profile>.node.bindings.s3.<name>.timeoutMs”

Request timeout in milliseconds.

  • Type: integer
  • Required/default: Optional; default 10_000.
  • Allowed values or constraints: 1–30,000
  • Security and safety: Credentials resolve from named secrets at execution; request data cannot override binding authority.

<profile>.fastly.bindings.s3.<name>.endpoint

Section titled “<profile>.fastly.bindings.s3.<name>.endpoint”

Fixed HTTPS origin without a path, query, or fragment.

  • Type: string
  • Required/default: Required when the containing object is configured.
  • Security and safety: Credentials resolve from named secrets at execution; request data cannot override binding authority.

<profile>.fastly.bindings.s3.<name>.bucket

Section titled “<profile>.fastly.bindings.s3.<name>.bucket”

Fixed bucket name; portable lowercase DNS subset, 3–63 characters, without consecutive hyphens.

  • Type: string
  • Required/default: Required when the containing object is configured.
  • Security and safety: Credentials resolve from named secrets at execution; request data cannot override binding authority.

<profile>.fastly.bindings.s3.<name>.region

Section titled “<profile>.fastly.bindings.s3.<name>.region”

Explicit signing region; 1–64 lowercase letters, digits, or hyphens.

  • Type: string
  • Required/default: Required when the containing object is configured.
  • Security and safety: Credentials resolve from named secrets at execution; request data cannot override binding authority.

<profile>.fastly.bindings.s3.<name>.accessKeyIdSecret

Section titled “<profile>.fastly.bindings.s3.<name>.accessKeyIdSecret”

Name of the secret containing the access key ID.

  • Type: string
  • Required/default: Required when the containing object is configured.
  • Security and safety: Credentials resolve from named secrets at execution; request data cannot override binding authority.

<profile>.fastly.bindings.s3.<name>.secretAccessKeySecret

Section titled “<profile>.fastly.bindings.s3.<name>.secretAccessKeySecret”

Name of the secret containing the secret access key.

  • Type: string
  • Required/default: Required when the containing object is configured.
  • Security and safety: Credentials resolve from named secrets at execution; request data cannot override binding authority.

<profile>.fastly.bindings.s3.<name>.sessionTokenSecret

Section titled “<profile>.fastly.bindings.s3.<name>.sessionTokenSecret”

Optional name of the secret containing the session token.

  • Type: string
  • Required/default: Optional; default omitted.
  • Security and safety: Credentials resolve from named secrets at execution; request data cannot override binding authority.

<profile>.fastly.bindings.s3.<name>.maxTextBytes

Section titled “<profile>.fastly.bindings.s3.<name>.maxTextBytes”

Maximum buffered text body bytes.

  • Type: integer
  • Required/default: Optional; default 32_768.
  • Allowed values or constraints: 1–2,097,152
  • Security and safety: Credentials resolve from named secrets at execution; request data cannot override binding authority.

<profile>.fastly.bindings.s3.<name>.timeoutMs

Section titled “<profile>.fastly.bindings.s3.<name>.timeoutMs”

Request timeout in milliseconds.

  • Type: integer
  • Required/default: Optional; default 10_000.
  • Allowed values or constraints: 1–30,000
  • Security and safety: Credentials resolve from named secrets at execution; request data cannot override binding authority.

<profile>.fastly.bindings.s3.<name>.backend

Section titled “<profile>.fastly.bindings.s3.<name>.backend”

Named static Fastly backend for this S3 endpoint; dynamic backends are not permitted.

  • Type: string
  • Required/default: Required when the containing object is configured.

Each named remote package binding requires all fields below. At most 32 bindings may be configured.

<profile>.node.bindings.packages.<name>.package

Section titled “<profile>.node.bindings.packages.<name>.package”

Package identity.

  • Type: string
  • Required/default: Required when the containing object is configured.
  • Security and safety: These values bind the remote package authority; handlers cannot substitute an endpoint or credential.

<profile>.node.bindings.packages.<name>.contractId

Section titled “<profile>.node.bindings.packages.<name>.contractId”

Package operation contract identity.

  • Type: string
  • Required/default: Required when the containing object is configured.
  • Security and safety: These values bind the remote package authority; handlers cannot substitute an endpoint or credential.

<profile>.node.bindings.packages.<name>.artifact

Section titled “<profile>.node.bindings.packages.<name>.artifact”

Opaque deployed artifact identifier; not an automatic filesystem path.

  • Type: string
  • Required/default: Required when the containing object is configured.
  • Security and safety: These values bind the remote package authority; handlers cannot substitute an endpoint or credential.

<profile>.node.bindings.packages.<name>.operations

Section titled “<profile>.node.bindings.packages.<name>.operations”

Nonempty, unique allowlist of 1–16 operation names.

  • Type: readonly string[]
  • Required/default: Required when the containing object is configured.
  • Security and safety: These values bind the remote package authority; handlers cannot substitute an endpoint or credential.

<profile>.node.bindings.packages.<name>.secret

Section titled “<profile>.node.bindings.packages.<name>.secret”

Name of the authentication secret, not the secret value.

  • Type: string
  • Required/default: Required when the containing object is configured.
  • Security and safety: These values bind the remote package authority; handlers cannot substitute an endpoint or credential.

<profile>.node.bindings.packages.<name>.keyId

Section titled “<profile>.node.bindings.packages.<name>.keyId”

Authentication key identity.

  • Type: string
  • Required/default: Required when the containing object is configured.
  • Security and safety: These values bind the remote package authority; handlers cannot substitute an endpoint or credential.

<profile>.node.bindings.packages.<name>.keyVersion

Section titled “<profile>.node.bindings.packages.<name>.keyVersion”

Authentication key version.

  • Type: string
  • Required/default: Required when the containing object is configured.
  • Security and safety: These values bind the remote package authority; handlers cannot substitute an endpoint or credential.

<profile>.node.bindings.packages.<name>.trustDomain

Section titled “<profile>.node.bindings.packages.<name>.trustDomain”

Expected trust domain.

  • Type: string
  • Required/default: Required when the containing object is configured.
  • Security and safety: These values bind the remote package authority; handlers cannot substitute an endpoint or credential.

<profile>.node.bindings.packages.<name>.origin

Section titled “<profile>.node.bindings.packages.<name>.origin”

Fixed HTTPS origin without a path, query, or fragment.

  • Type: string
  • Required/default: Required when the containing object is configured.
  • Security and safety: These values bind the remote package authority; handlers cannot substitute an endpoint or credential.

This retained helper spelling is separate from the conventional configuration object.

Programmatic fastly({ maxWasmBytes }) helper option. In .pulse/config.ts, write <profile>.fastly.build.maxWasmBytes instead.

  • Type: integer
  • Required/default: Optional; default 4194304 (4 MiB).
  • Allowed values or constraints: positive safe integer
  • Scope: fastly() facade
local: {
host: 'fastly',
target: 'native',
fastly: {
bindings: {
configStore: 'pulse_config',
secretStore: 'pulse_secrets',
kv: { sessions: 'sessions' },
backends: { 'https://api.example.com': 'api_backend' },
dynamicBackends: false,
grip: {
fanoutBackend: 'fanout',
publishUrl: 'https://publisher.example.com/publish',
publishBackend: 'publisher',
directHold: true,
},
},
build: { name: 'pulse-app', authors: ['Team'] },
local: { networkFetch: false },
},
}

Deployment resource names configure provider bindings; local dev.config, dev.secrets, dev.kv, and dev.fetches values never create or populate deployed resources.

  • Output directories must remain real descendants of the project root.
  • Structured request and schema bodies are bounded before decoding.
  • Live local network fetch is explicit for Fastly and can be disabled for Node.
  • Raw secret values are redacted from public JSON, diagnostics, and runtime error detail.
  • Provider SDK objects and provider-specific namespaces never enter canonical handler scope.
  • none is compile-only; it cannot execute pulse dev or pulse test.