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
- Open the query and verify every {{ binding }} references an existing widget/variable; fix or remove stale bindings.
- Ensure the binding key exactly matches the param key (after trimming) - avoid trailing spaces or renamed fields.
- If the value is optional, provide a default in the binding or filter the mustacheValuesInOrder list before calling smartSubstitutionOfBindings.
- 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
- Verify every {{ binding }} references an existing widget before running.
- Re-select bindings from the Appsmith suggestion list after renaming widgets.
- Trim binding keys consistently to avoid whitespace mismatches.
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.