Comprehensive metadata-driven development capabilities designed for enterprise-scale applications.
Define your object structures, validation rules, and relationships through rich metadata definitions rather than scattered annotations.
Generate type-safe code for Java, TypeScript, C#, Python, and SQL from a single metadata definition.
Change system behavior without redeployment through dynamic metadata interpretation.
Native support for Spring Boot, OSGi, and other enterprise frameworks without forcing dependencies.
Comprehensive validation system that enforces rules at metadata definition time.
Built on a READ-OPTIMIZED pattern with microsecond performance and thread-safe concurrent access.
MetaObjects revolutionizes development by putting metadata at the center. Define your object structures, validation rules, and relationships through rich JSON metadata definitions.
{
"metadata": {
"children": [
{
"object": {
"name": "User",
"type": "pojo",
"@dbTable": "users",
"children": [
{
"field": {
"name": "email",
"type": "string",
"@required": true,
"@maxLength": 255,
"@pattern": "^[\\w._%+-]+@[\\w.-]+\\.[A-Za-z]{2,}$"
}
},
{
"field": {
"name": "profile",
"type": "UserProfile",
"@cascade": "ALL"
}
}
]
}
}
]
}
}
Generate consistent, type-safe code across multiple programming languages and frameworks from a single metadata definition.
@Entity
@Table(name = "users")
public class User {
@Column(name = "email", nullable = false, length = 255)
@Pattern(regexp = "^[\\w._%+-]+@[\\w.-]+\\.[A-Za-z]{2,}$")
private String email;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "profile_id")
private UserProfile profile;
// Generated getters, setters, builders...
}
export interface User {
email: string;
profile: UserProfile;
}
export class UserValidator {
static validate(user: User): ValidationResult {
const errors: string[] = [];
if (!user.email || user.email.length > 255) {
errors.push("Email is required and must be ≤ 255 characters");
}
const emailPattern = /^[\w._%+-]+@[\w.-]+\.[A-Za-z]{2,}$/;
if (!emailPattern.test(user.email)) {
errors.push("Invalid email format");
}
return { valid: errors.length === 0, errors };
}
}
[Table("users")]
public class User
{
[Column("email")]
[Required]
[MaxLength(255)]
[RegularExpression(@"^[\w._%+-]+@[\w.-]+\.[A-Za-z]{2,}$")]
public string Email { get; set; }
[ForeignKey("ProfileId")]
public UserProfile Profile { get; set; }
}
Modify system behavior dynamically without redeployment through metadata interpretation at runtime.
// Load and modify metadata at runtime
MetaData userMetadata = registry.getMetaData("User");
// Add new field dynamically
Field phoneField = new StringField("phone");
phoneField.setAttribute("maxLength", 20);
phoneField.setAttribute("pattern", "\\+?[1-9]\\d{1,14}");
userMetadata.addField(phoneField);
// Update validation rules
Field emailField = userMetadata.getField("email");
emailField.setAttribute("required", false);
// Changes take effect immediately
registry.updateMetaData(userMetadata);
Designed for enterprise-scale applications with massive concurrent access requirements.
// READ-OPTIMIZED WITH CONTROLLED MUTABILITY
// Similar to java.lang.Class reflection system
// Startup: Load metadata once
MetaDataRegistry registry = new MetaDataRegistry();
registry.loadMetaData("user-objects.json"); // ~100ms
// Runtime: Thousands of concurrent reads
// No locks, no synchronization needed
for (int i = 0; i < 1_000_000; i++) {
MetaData user = registry.getMetaData("User"); // ~1-10μs
Field email = user.getField("email"); // ~1-5μs
// Process with microsecond performance
}
Native Spring integration with auto-configuration and component scanning.
<dependency>
<groupId>com.metaobjects</groupId>
<artifactId>metaobjects-core-spring</artifactId>
<version>6.2.5-SNAPSHOT</version>
</dependency>
Standalone usage without framework dependencies.
<dependency>
<groupId>com.metaobjects</groupId>
<artifactId>metaobjects-core</artifactId>
<version>6.2.5-SNAPSHOT</version>
</dependency>
Full OSGi support with proper lifecycle management.
<dependency>
<groupId>com.metaobjects</groupId>
<artifactId>metaobjects-metadata</artifactId>
<version>6.2.5-SNAPSHOT</version>
</dependency>
Start building with MetaObjects today and experience the power of metadata-driven development.