appsmithorg/appsmith · error · AppsmithPluginException

PE-SST-5000

PE-SST-5000

Error message

Uh oh! This is unexpected. Did not receive any information for the binding {0}. Please contact customer support at Appsmith.

What it means

Thrown by SmartSubstitutionInterface.smartSubstitutionOfBindings when a mustache binding token (from mustacheValuesInOrder) has no matching entry in evaluatedParams - i.e. for the binding key there is no param whose key, after trimming, equals the token's value. The error SMART_SUBSTITUTION_VALUE_MISSING signals that the prepared-statement substitution cannot find a value to bind.

Source

Thrown at app/server/appsmith-interfaces/src/main/java/com/appsmith/external/plugins/SmartSubstitutionInterface.java:51

            Object... args)
            throws AppsmithPluginException {

        if (mustacheValuesInOrder != null && !mustacheValuesInOrder.isEmpty()) {

            for (int i = 0; i < mustacheValuesInOrder.size(); i++) {
                String key = mustacheValuesInOrder.get(i).getValue();
                Optional<Param> matchingParam = evaluatedParams.stream()
                        .filter(param -> param.getKey().trim().equals(key))
                        .findFirst();

                // If the evaluated value of the mustache binding is present, set it in the prepared statement
                if (matchingParam.isPresent()) {
                    String value = matchingParam.get().getValue();

                    input = substituteValueInInput(
                            i + 1, key, value, input, insertedParams, append(args, matchingParam.get()));
                } else {
                    throw new AppsmithPluginException(AppsmithPluginError.SMART_SUBSTITUTION_VALUE_MISSING, key);
                }
            }
        }
        return input;
    }

    // Default implementation does not do any substitution. The plugin doing intelligent substitution is responsible
    // for overriding this function.
    default Object substituteValueInInput(
            int index,
            String binding,
            String value,
            Object input,
            List<Map.Entry<String, String>> insertedParams,
            Object... args)
            throws AppsmithPluginException {
        return input;
    }

View on GitHub (pinned to 8cd9021c24)

Solutions

  1. Open the query and verify every {{ binding }} references an existing widget/variable; fix or remove stale bindings.
  2. Ensure the binding key exactly matches the param key (after trimming) - avoid trailing spaces or renamed fields.
  3. If the value is optional, provide a default in the binding or filter the mustacheValuesInOrder list before calling smartSubstitutionOfBindings.
  4. Re-create the binding by selecting the widget from the Appsmith suggestion list rather than typing the name.

Example fix

// before - binding references a renamed widget
SELECT * FROM users WHERE name = {{ userInput1.value }};

// after - binding matches the current widget name
SELECT * FROM users WHERE name = {{ userNameInput.value }};
Defensive patterns

Strategy: validation

Validate before calling

for (MustacheBindingToken token : mustacheValuesInOrder) {
    String key = token.getValue();
    boolean hasMatch = evaluatedParams.stream()
        .anyMatch(p -> p.getKey().trim().equals(key));
    if (!hasMatch) {
        throw new IllegalArgumentException("No evaluated value for binding {{ " + key + " }}");
    }
}
// all bindings have values; safe to call smartSubstitutionOfBindings

Type guard

public static boolean allBindingsResolved(
        List<MustacheBindingToken> tokens, List<Param> params) {
    if (tokens == null || tokens.isEmpty()) return true;
    Set<String> keys = params.stream()
        .map(p -> p.getKey().trim())
        .collect(Collectors.toSet());
    return tokens.stream().map(MustacheBindingToken::getValue).allMatch(keys::contains);
}

Try / catch

try {
    input = plugin.smartSubstitutionOfBindings(input, mustacheValuesInOrder, evaluatedParams, insertedParams);
} catch (AppsmithPluginException e) {
    if (e.getError() == AppsmithPluginError.SMART_SUBSTITUTION_VALUE_MISSING) {
        // log and skip the missing binding, or surface to the user
        log.warn("Unresolved binding, skipping substitution: {}", e.getMessage());
    } else {
        throw e;
    }
}

Prevention

When it happens

Trigger: A query contains a mustache binding like {{ this.input }} but the evaluated params map does not contain a param with that exact key. Commonly the binding references a widget or variable that was renamed, deleted, or whose value was never computed; or whitespace differences between the binding and the param key defeat the trimmed-equality check.

Common situations: Renaming a widget but not updating the query binding; deleting a widget referenced in the query; binding to a path that does not exist at evaluation time; copy/pasting a query between apps where the referenced widgets differ.

Related errors


AI-assisted analysis of appsmithorg/appsmith@8cd9021c24 (2026-08-12). Data as JSON: /api/errors/b412d9ee0b990410. Report an issue: GitHub.