package org.jreleaser.extensions.api.mustache;

import org.jreleaser.extensions.api.ExtensionPoint;
import org.jreleaser.mustache.TemplateContext;

 * Enables customization of the Mustache context used when evaluating named templates.
 * @author Andres Almiray
 * @since 1.3.0
public interface MustacheExtensionPoint extends ExtensionPoint {
     * Enhances the given context with additional properties.
     * <p>
     * <strong>WARNING: </strong> be careful when defining key names
     * as you may override existing ones.
     * @param context the evaluation context.
    void apply(TemplateContext context);


The following extension point adds a new function named f_chop:

package com.acme;

import java.util.Map;
import java.util.function.Function;
import org.apache.commons.lang3.StringUtils;
import org.jreleaser.extensions.api.mustache.MustacheExtensionPoint;

public final class MyMustacheExtensionPoint implements MustacheExtensionPoint {
    public void apply(Map<String, Object> context) {
        context.put("f_chop", new ChopFunction());

    private static class ChopFunction implements Function<String, String> {
        public String apply(String input) {
            return StringUtils.chop(input);

With this extension in place you’ll be able to invoke the function on a template, such as


Which will result in JRelease when evaluated.