tinystruct Development Patterns

SkillDev tools

Use when developing application modules or microservices with the tinystruct Java framework. Covers routing, context management, JSON handling with Builder, and CLI/HTTP dual-mode patterns.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the tinystruct Development Patterns skill

What this skill tells your AI

The instructions your AI receives, as published by fmarzochi/egc in skills/backend/tinystruct-patterns/SKILL.md and read by ahel’s review.

Architecture and implementation patterns for building modules with the tinystruct Java framework – a lightweight system where CLI and HTTP are equal citizens.

When to Use

  • Creating new Application modules by extending AbstractApplication.
  • Defining routes and command-line actions using @Action.
  • Handling per-request state via Context.
  • Performing JSON serialization using the native Builder component.
  • Configuring database connections or system settings in application.properties.
  • Generating or re-generating the standard bin/dispatcher entry point via ApplicationManager.init().
  • Debugging routing conflicts (Actions) or CLI argument parsing.

How It Works

The tinystruct framework treats any method annotated with @Action as a routable endpoint for both terminal and web environments. Applications are created by extending AbstractApplication, which provides core lifecycle hooks like init() and access to the request Context.

Routing is handled by the ActionRegistry, which automatically maps path segments to method arguments and injects dependencies. For data-only services, the native Builder component should be used for JSON serialization to maintain a zero-dependency footprint. The framework also includes a utility in ApplicationManager to bootstrap the project's execution environment by generating the bin/dispatcher script.

Examples

Basic Application (MyService)

public class MyService extends AbstractApplication {
    @Override
    public void init() {
        this.setTemplateRequired(false); // Disable .view lookup for data/API apps
    }

    @Override public String version() { return "1.0.0"; }

    @Action("greet")
    public String greet() {
        return "Hello from tinystruct!";
    }
}

Parameterized Routing (getUser)

// Handles /api/user/123 (Web) or "bin/dispatcher api/user/123" (CLI)
@Action("api/user/(\\d+)")
public String getUser(int userId) {
    return "User ID: " + userId;
}

HTTP Mode Disambiguation (login)

@Action(value = "login", mode = Mode.HTTP_POST)
public boolean doLogin() {
    // Process login logic
    return true;
}

Native JSON Data Handling (getData)

@Action("api/data")
public Builder getData() throws ApplicationException {
    Builder builder = new Builder();
    builder.put("status", "success");
    Builder nested = new Builder();
    nested.put("id", 1);
    nested.put("name", "James");
    builder.put("data", nested);
    return builder;
}

Configuration

Settings are managed in src/main/resources/application.properties.

# Database
driver=org.h2.Driver
database.url=jdbc:h2:~/mydb

# App specific
my.service.endpoint=https://api.example.com

Testing Patterns

Use JUnit 5 to test actions by verifying they are registered in the ActionRegistry.

@Test
void testActionRegistration() {
    Application app = new MyService();
    app.init();

    ActionRegistry registry = ActionRegistry.getInstance();
    assertNotNull(registry.get("greet"));
}

Red Flags & Anti-patterns

SymptomCorrect Pattern
Importing com.google.gson or com.fasterxml.jacksonUse org.tinystruct.data.component.Builder.
FileNotFoundException for .view filesCall setTemplateRequired(false) in init() for API-only apps.
Annotating private methods with @ActionActions must be public to be registered by the framework.
Hardcoding main(String[] args) in appsUse bin/dispatcher as the entry point for all modules.
Manual ActionRegistry registrationPrefer the @Action annotation for automatic discovery.

Technical Reference

Detailed guides are available in the references/ directory:

Reference Source Files (Internal)

  • src/main/java/org/tinystruct/AbstractApplication.java: Core base class
  • src/main/java/org/tinystruct/system/annotation/Action.java: Annotation & Modes
  • src/main/java/org/tinystruct/application/ActionRegistry.java: Routing Engine
  • src/main/java/org/tinystruct/data/component/Builder.java: JSON/Data Serializer

Signals

GitHub stars
51
Forks
43
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
tinystruct-patterns
Source
github.com/fmarzochi/egc