Java Engineer for Tapestry TML Code Generator Library
Budget: $10 – $30 USD
I am looking for a Java developer to help build an open-source library that dynamically generates Apache Tapestry TML templates. The goal is to create a declarative, Java-based DSL for defining UI components, similar to Jetpack Compose but for Tapestry.
Project Scope:
- Design and implement a Java DSL that allows developers to define Tapestry components in Java instead of manually writing .tml files.
- Build a code generator that converts Java-based UI definitions into .tml files.
- Integrate the system with Apache Tapestry 5 and ensure compatibility with Java 11+ (targeting Java 21).
- Support custom Tapestry components such as <t:Component> within the generated templates.
- Allow integration with Node.js & NPM for front-end dependency management.
- Write unit tests to ensure correctness and maintainability.
Requirements:
✅ Strong Java expertise (Java 11+, preferably Java 21)
✅ Experience with Apache Tapestry (preferred, but not required if strong in Java & templating engines)
✅ Knowledge of code generation techniques (Annotation Processors, Reflection, or Custom DSLs)
✅ Familiarity with NPM & JavaScript module management
✅ Experience with open-source contributions is a plus
✅ Ability to deliver clean, maintainable, and well-documented code
Nice-to-Have:
- Prior experience with Jetpack Compose, React, or Flutter UI DSLs
- Knowledge of Maven/Gradle plugin development
- Familiarity with JVM templating engines (e.g., FreeMarker, Thymeleaf, Velocity)
Deliverables:
- A Java-based DSL to define Tapestry UI elements.
- A template generator that produces .tml files dynamically.
- Integration with Tapestry 5 framework to ensure smooth usage.
I will provide with A GitHub repository where you will need to work.
Basic tests and sample applications to demonstrate the library.
Use inspiration by jetpack compose, produc should be something like this:
```
TmlElement template = TmlElement.tag("t:container")
.attribute("xmlns:t", "http://tapestry.apache.org/schema/tapestry_5_1_0.xsd")
.child(
TmlElement.tag("tr")
.child(
TmlElement.tag("th").child(TmlElement.tag("t:label").attribute("for", "attribute")),
TmlElement.tag("td").child(
TmlElement.tag("t:checkbox")
.attribute("class", "class)custom")
.attribute("t:id", "ID_1")
.attribute("t:value", "true")
)
)
);
```
Project Scope:
- Design and implement a Java DSL that allows developers to define Tapestry components in Java instead of manually writing .tml files.
- Build a code generator that converts Java-based UI definitions into .tml files.
- Integrate the system with Apache Tapestry 5 and ensure compatibility with Java 11+ (targeting Java 21).
- Support custom Tapestry components such as <t:Component> within the generated templates.
- Allow integration with Node.js & NPM for front-end dependency management.
- Write unit tests to ensure correctness and maintainability.
Requirements:
✅ Strong Java expertise (Java 11+, preferably Java 21)
✅ Experience with Apache Tapestry (preferred, but not required if strong in Java & templating engines)
✅ Knowledge of code generation techniques (Annotation Processors, Reflection, or Custom DSLs)
✅ Familiarity with NPM & JavaScript module management
✅ Experience with open-source contributions is a plus
✅ Ability to deliver clean, maintainable, and well-documented code
Nice-to-Have:
- Prior experience with Jetpack Compose, React, or Flutter UI DSLs
- Knowledge of Maven/Gradle plugin development
- Familiarity with JVM templating engines (e.g., FreeMarker, Thymeleaf, Velocity)
Deliverables:
- A Java-based DSL to define Tapestry UI elements.
- A template generator that produces .tml files dynamically.
- Integration with Tapestry 5 framework to ensure smooth usage.
I will provide with A GitHub repository where you will need to work.
Basic tests and sample applications to demonstrate the library.
Use inspiration by jetpack compose, produc should be something like this:
```
TmlElement template = TmlElement.tag("t:container")
.attribute("xmlns:t", "http://tapestry.apache.org/schema/tapestry_5_1_0.xsd")
.child(
TmlElement.tag("tr")
.child(
TmlElement.tag("th").child(TmlElement.tag("t:label").attribute("for", "attribute")),
TmlElement.tag("td").child(
TmlElement.tag("t:checkbox")
.attribute("class", "class)custom")
.attribute("t:id", "ID_1")
.attribute("t:value", "true")
)
)
);
```