camunda/feel-scala
62.0
Adequate · 20 September 2026
7.2k
lines of production code
Scala
primary language
1
measurement over time
What this system is
This system is a Scala-based FEEL (Friendly Enough Expression Language) engine designed for evaluating expressions and unary tests within Java and Scala applications. It provides a structured public API for parsing and evaluating FEEL code, supporting extensibility through custom function providers, value mappers, and context injection. The engine integrates with the standard Java ScriptEngine API and includes comprehensive built-in functions for arithmetic, temporal, and list operations, along with robust error handling and variable extraction capabilities.
Features
Initial project scaffolding and documentation
The repository is initialized with the FEEL-Scala engine, including a Maven wrapper (version 3.3.4), Scalafmt configuration (version 3.2.1 for Scala 2.13), and a Scala-based REPL script (feel-repl.sc) for interactive evaluation. Standard project documentation and governance files are added, including a README, CONTRIBUTING guide, CODE\_OF\_CONDUCT, and NOTICE file.
(repo-wide) · high confidence
Introduction of FEEL package object with type definitions and date/time parsing
The \src/main/scala/org/camunda/package.scala\ file introduces the \feel\ package object, defining core type aliases (such as \Number\, \Date\, \Time\, and \DateTime\) and implicit conversions for parsing strings into these types. It also provides utility methods and regex patterns for validating date, time, and duration formats, along with specific \DateTimeFormatter\ configurations for handling local time, offset time, and date-time strings, establishing the foundational parsing logic for the FEEL engine.
src/main/scala/org/camunda · high confidence
New public API and extensibility for the FEEL engine
The FEEL engine now exposes a structured public API (FeelEngineApi) that separates expression parsing from evaluation, allowing users to parse expressions once and reuse them. It introduces a clock abstraction (FeelEngineClock) to control time sources, and provides SPI-based service loading for custom value mappers and function providers. Additionally, it adds Java-friendly interfaces (JavaFunctionProvider, CustomContext) and value mappers (DefaultValueMapper, JavaValueMapper) to simplify integration with Java applications and enable custom context and function injection.
src/main/scala/org/camunda/feel · high confidence
Registration of FEEL Script and Unary Tests engines
The application now registers two new javax.script engines via the META-INF/services provider file: the standard FEEL script engine and a dedicated engine for FEEL unary tests. This allows users to invoke FEEL expressions and unary test definitions directly through the standard Java ScriptEngine API.
src/main/resources · high confidence
API
New FEEL engine API with structured evaluation results and builder pattern
The FEEL engine now exposes a new public API that replaces the previous simple result types with structured \EvaluationResult\ and \ParseResult\ objects. Users can now distinguish between successful evaluations and failures, and access detailed \EvaluationFailure\ information (including specific failure types like \NO\_VARIABLE\_FOUND\ or \ASSERT\_FAILURE\) as well as any suppressed failures that occurred during execution. The engine is now configured via a new \FeelEngineBuilder\ (with a \forJava()\ convenience method) instead of the deprecated \Builder\ class, and supports extracting variable references from parsed expressions.
repository · high confidence
Test coverage
Added Java-specific test infrastructure and helper classes; Added comprehensive test coverage for built-in functions; Added comprehensive test coverage for the FEEL interpreter; Added performance test for failure collection scalability; Added test coverage for FEEL expression examples; Added test coverage for the FEEL script engine integration; Added test infrastructure and coverage for FEEL evaluation results and suppressed failures; Added test infrastructure resources for FEEL engine testing; Added tests for custom context and function provider APIs; Added tests for the new FEEL engine API and expression variable extraction; Added tests for value mapper conversions; Added tests for value mapper input, output, and custom mappings.
Dependencies
Added Maven Wrapper with version 3.9.16
The project now includes a Maven Wrapper configuration file (.mvn/wrapper/maven-wrapper.properties) that pins the wrapper version to 3.3.4 and specifies Apache Maven 3.9.16 as the distribution to be downloaded. This ensures consistent build environments across different machines by managing the Maven binary automatically.
.mvn · high confidence
Initial Maven build configuration for FEEL Scala Engine
The project now uses Maven for building, replacing the previous build system. The pom.xml defines the project as 'FEEL Scala Engine' version 1.23.0-SNAPSHOT, inheriting from the 'camunda-bpm-release-parent' 2.5.1. It configures Scala 2.13.18, and includes dependencies for fastparse (3.1.1), Java UUID generator (5.2.0), Jackson Scala module (2.22.2), SLF4J, and Log4j (2.25.5). Test dependencies include ScalaTest and Log4j.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 62.
Lenses
- Code Health 94
- Architecture 89
- Maturity 75
- Readiness 57
- Security 53
Changes since last survey
- 300 commits — 284 feature/other, 16 fixes
By area
- (repo) — 125 commits
- (root) — 58 commits
- .github/workflows — 35 commits
- src/main — 33 commits
- src/test — 20 commits
- docs/package-lock.json — 19 commits
- docs/versioned_docs — 4 commits
- docs/docs — 3 commits
- .mvn/wrapper — 1 commit
- docs/index.html — 1 commit
- docs/src — 1 commit
Notable commits
- fix: Merge pull request #1124 from camunda/cs/fix-binary-incompatibility-Vallist
- fix: Merge pull request #1142 from camunda/korthout-fix-maven-central-badge
- fix: Merge pull request #1165 from camunda/fix-playground
- fix: Merge pull request #1200 from camunda/fix/vault-jwt-migration-pilot
- fix: Merge pull request #993 from camunda/eppdot-fix-lazy-value-mapper
- fix: fix: Add failure reporting verification
- fix: fix: Detect external function inside functions
- fix: fix: Disable external function
- fix: fix: Handle empty constructor seq
- fix: fix: Return suppressed failures as Java list
- fix: fix: Truncate timezone ID of time
- fix: fix: binary breaking change in ValList object
- fix: fix: call value mapper again in context#put
- fix: fix: hashcode for ValContext is not dependent on order of fields
- fix: fix: migrate Vault auth from AppRole to JWT/OIDC
- fix: fix: use explicit hashcode for vals whose equality is not supported
- change: - Include timezone Id on converted datetime - Remove duplicate tests - Include ValFunction and ValRange conversions
- change: Adds ZonedTime formatter to correct ISO 8601 time format.
- change: Merge branch 'camunda:main' into main
- change: Merge branch 'main' into infra-833-prepare-migration
- …and 280 more
Architecture
- 0 containers · 1 bounded contexts · 0 dependency edges (baseline)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
camunda/feel-scala was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 20 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit b9149c2a51af9e3c0dde476f4b0f706680f261f7 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-b51f968c9b10.