opa-builtins

May 20, 2026 · View on GitHub

Aggregator module that brings in all extended OPA builtin sub-modules for the java-opa-sdk.

Overview

The opa-builtins module is a convenience aggregator — it has no source code of its own but transitively includes all builtin sub-modules. Depend on this module to get all extended builtins, or depend on individual sub-modules to control which builtins (and their dependencies) are included.

Sub-modules

ModuleProviderFunctionsExamples
opa-builtins-timeTimeBuiltinsTime/date operationstime.now_ns, time.parse_rfc3339_ns, time.date, time.diff
opa-builtins-tokenTokenBuiltinsJWT encode/decode/verifyio.jwt.decode, io.jwt.encode_sign, io.jwt.verify_rs256, etc.
opa-builtins-regexRegexBuiltinsPattern matchingregex.match, regex.split, regex.find_n, regex.globs_match
opa-builtins-semverSemverBuiltinsSemantic versioningsemver.compare, semver.is_valid
opa-builtins-netCidrBuiltinsNetwork/CIDR operationsnet.cidr_contains, net.cidr_intersects, net.cidr_merge
opa-builtins-cryptoCryptoBuiltinsHashing and HMACcrypto.md5, crypto.sha256, crypto.hmac.sha256, crypto.hmac.equal
opa-builtins-jsonJsonBuiltinsJSON operationsjson.filter, json.remove, json.patch, json.match_schema

Note: String builtins (contains, concat, split, sprintf, trim, etc.) are core builtins included directly in opa-evaluator.

Detailed Builtin Support

BuiltinSupported
Numbers
abs, ceil, floor, roundYes
numbers.range, numbers.range_stepYes
+, -, *, /, %Yes
rand.intnYes
Aggregates
count, sum, product, max, min, sortYes
Arrays
array.concat, array.reverse, array.sliceYes
Sets
& (intersection), | (union), - (difference)Yes
intersection, unionYes
Objects
object.filter, object.get, object.removeYes
object.union, object.keys, object.subset, object.union_nYes
Strings (in opa-evaluator)
concat, contains, endswith, startswithYes
format_int, indexof, indexof_nYes
lower, upper, replace, split, sprintfYes
substring, trim, trim_left, trim_right, trim_spaceYes
trim_prefix, trim_suffixYes
strings.any_prefix_match, strings.any_suffix_matchYes
strings.count, strings.replace_n, strings.reverseYes
strings.render_templateNo
Regex (opa-builtins-regex)
regex.is_valid, regex.match, regex.splitYes
regex.find_n, regex.find_all_string_submatch_nYes
regex.globs_match, regex.template_match, regex.replaceYes
Glob
glob.match, glob.quote_metaNo
Types
is_array, is_boolean, is_null, is_numberYes
is_object, is_set, is_string, type_nameYes
Encoding
base64.decode, base64.encode, base64.is_validYes
base64url.decode, base64url.encode, base64url.encode_no_padYes
hex.decode, hex.encodeYes
yaml.marshal, yaml.unmarshalYes
urlquery.*No
JSON (opa-builtins-json)
json.is_valid, json.unmarshal, json.marshalYes
json.marshal_with_optionsYes
json.filter, json.remove, json.patchYes
json.match_schema, json.verify_schemaYes
JWT (opa-builtins-token)
io.jwt.encode_sign, io.jwt.encode_sign_rawYes
io.jwt.decode, io.jwt.decode_verifyYes
io.jwt.verify_rs256/384/512Yes
io.jwt.verify_ps256/384/512Yes
io.jwt.verify_es256/384/512Yes
io.jwt.verify_hs256/384/512Yes
Time (opa-builtins-time)
time.now_ns, time.parse_duration_ns, time.parse_nsYes
time.parse_rfc3339_ns, time.formatYes
time.clock, time.date, time.diff, time.weekdayYes
time.add_dateYes
Cryptography (opa-builtins-crypto)
crypto.md5, crypto.sha1, crypto.sha256Yes
crypto.hmac.md5/sha1/sha256/sha512Yes
crypto.hmac.equalYes
crypto.x509.*, crypto.parse_private_keysNo
Net (opa-builtins-net)
net.cidr_contains, net.cidr_contains_matchesYes
net.cidr_intersects, net.cidr_expand, net.cidr_mergeYes
net.cidr_is_valid, net.lookup_ip_addrYes
Semantic Versions (opa-builtins-semver)
semver.compare, semver.is_validYes
Comparison
equal, neq, lt, lte, gt, gteYes
Not Yet Implemented
bits.*, graph.*, units.*, http.sendNo
uuid.*, graphql.*, rego.*, providers.*No

Adding Custom Builtins

Implement the BuiltinProvider interface and register via ServiceLoader:

import io.github.open_policy_agent.opa.ast.builtin.BuiltinProvider;
import io.github.open_policy_agent.opa.rego.EvaluationContext;
import io.github.open_policy_agent.opa.ast.types.*;
import java.util.Map;
import java.util.function.BiFunction;

public class MyBuiltinProvider implements BuiltinProvider {
    @Override
    public Map<String, BiFunction<EvaluationContext, RegoValue[], RegoValue>> builtins() {
        return Map.of(
            "custom.greet", (ctx, args) -> {
                String name = ((RegoString) args[0]).getValue();
                return new RegoString("Hello, " + name);
            }
        );
    }
}

Register in META-INF/services/io.github.open_policy_agent.opa.ast.builtin.BuiltinProvider:

com.example.MyBuiltinProvider