remix-run/remix · error · Error

Cannot install an empty context property name.

Error message

Cannot install an empty context property name.

What it means

When installing a named context property, an empty string is not a valid property name. This error is thrown from #installContextProperty when property.length === 0.

Source

Thrown at packages/fetch-router/src/lib/request-context.ts:300

  set = <key extends object>(
    key: key,
    value: ContextValue<key>,
    options?: { property: string },
  ): void => {
    if (options != null) {
      this.#installContextProperty(key, options.property)
    }

    this.#contextMap.set(key, value)
  }

  #installContextProperty(key: object, property: string): void {
    if (typeof property !== 'string') {
      throw new Error('Context property name must be a string.')
    }

    if (property.length === 0) {
      throw new Error('Cannot install an empty context property name.')
    }

    let formattedProperty = JSON.stringify(property)

    let existingProperty = this.#contextPropertyKeys.get(key)
    if (existingProperty != null && existingProperty !== property) {
      throw new Error(
        `Cannot install context property ${formattedProperty} because this context key already uses ${JSON.stringify(existingProperty)}.`,
      )
    }

    let existingKey = this.#contextProperties.get(property)
    if (existingKey != null) {
      if (existingKey !== key) {
        throw new Error(
          `Cannot install context property ${formattedProperty} because another context key already uses it.`,
        )
      }

View on GitHub (pinned to 9696913134)

Solutions

  1. Default the name to a real string: property: name || 'defaultValue'
  2. Fail fast in config loading when required names are missing
  3. Validate property names before calling ctx.set

Example fix

// before
ctx.set(key, value, { property: env.USER_PROP })
// after
ctx.set(key, value, { property: env.USER_PROP || 'user' })
Defensive patterns

Strategy: validation

Validate before calling

if (!property) throw new TypeError('property name required')

Type guard

const isNonEmptyString = (v: unknown): v is string => typeof v === 'string' && v.length > 0

Prevention

When it happens

Trigger: ctx.set(key, value, { property: '' }), often from a computed name that is undefined-then-stringified, an empty env var, or missing config field.

Common situations: Deriving property names from headers/config where the field is absent, producing '' at runtime in some environments only.

Related errors


AI-assisted analysis of remix-run/remix@9696913134 (2026-08-27). Data as JSON: /api/errors/be2cd0b1e511c356. Report an issue: GitHub.