Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Public API

The public API surface is defined in modelsdk.go at the package root. It provides convenience functions for opening projects and constructing model elements.

Entry Points

// Read-only access
reader, err := modelsdk.Open("/path/to/project.mpr")
defer reader.Close()

// Read-write access
writer, err := modelsdk.OpenForWriting("/path/to/project.mpr")
defer writer.Close()

Core Types

TypeDescription
modelsdk.IDUnique identifier for model elements (UUID)
modelsdk.ModuleRepresents a Mendix module
modelsdk.ProjectRepresents a Mendix project
modelsdk.DomainModelContains entities and associations
modelsdk.EntityAn entity in the domain model
modelsdk.AttributeAn attribute of an entity
modelsdk.AssociationA relationship between entities
modelsdk.MicroflowA microflow (server-side logic)
modelsdk.NanoflowA nanoflow (client-side logic)
modelsdk.PageA page in the UI
modelsdk.LayoutA page layout template

Package Structure

github.com/mendixlabs/mxcli/
├── modelsdk.go          # Main package with convenience functions
├── model/               # Core model types (ID, Module, Project, etc.)
├── api/                 # High-level fluent API (builders)
│   ├── api.go           # ModelAPI entry point
│   ├── domainmodels.go  # EntityBuilder, AssociationBuilder
│   ├── enumerations.go  # EnumerationBuilder
│   ├── microflows.go    # MicroflowBuilder
│   ├── pages.go         # PageBuilder, widget builders
│   └── modules.go       # ModulesAPI
├── sdk/
│   ├── domainmodel/     # Domain model types (Entity, Attribute, Association)
│   ├── microflows/      # Microflow and Nanoflow types
│   ├── pages/           # Page, Layout, and Widget types
│   └── mpr/             # MPR file reader and writer
└── examples/            # Example applications

Reader API

The reader provides read-only access to all project elements:

reader, _ := modelsdk.Open("path/to/project.mpr")
defer reader.Close()

// Metadata
reader.Path()                    // Get file path
reader.Version()                 // Get MPR version (1 or 2)
reader.GetMendixVersion()        // Get Mendix Studio Pro version

// Modules
reader.ListModules()             // List all modules
reader.GetModule(id)             // Get module by ID
reader.GetModuleByName(name)     // Get module by name

// Domain Models
reader.ListDomainModels()        // List all domain models
reader.GetDomainModel(moduleID)  // Get domain model for module

// Microflows & Nanoflows
reader.ListMicroflows()          // List all microflows
reader.GetMicroflow(id)          // Get microflow by ID
reader.ListNanoflows()           // List all nanoflows
reader.GetNanoflow(id)           // Get nanoflow by ID

// Pages & Layouts
reader.ListPages()               // List all pages
reader.GetPage(id)               // Get page by ID
reader.ListLayouts()             // List all layouts
reader.GetLayout(id)             // Get layout by ID

// Other
reader.ListEnumerations()        // List all enumerations
reader.ListConstants()           // List all constants
reader.ListScheduledEvents()     // List all scheduled events
reader.ExportJSON()              // Export entire model as JSON

Writer API

The writer provides read-write access. Use writer.Reader() for read operations:

writer, _ := modelsdk.OpenForWriting("path/to/project.mpr")
defer writer.Close()

reader := writer.Reader()

// Module operations
writer.CreateModule(module)
writer.UpdateModule(module)
writer.DeleteModule(id)

// Entity operations
writer.CreateEntity(domainModelID, entity)
writer.UpdateEntity(domainModelID, entity)
writer.DeleteEntity(domainModelID, entityID)

// Attribute operations
writer.AddAttribute(domainModelID, entityID, attribute)

// Association operations
writer.CreateAssociation(domainModelID, association)
writer.DeleteAssociation(domainModelID, associationID)

// Microflow operations
writer.CreateMicroflow(microflow)
writer.UpdateMicroflow(microflow)
writer.DeleteMicroflow(id)

// Page operations
writer.CreatePage(page)
writer.UpdatePage(page)
writer.DeletePage(id)

// Other
writer.CreateEnumeration(enumeration)
writer.CreateConstant(constant)

Constructor Functions

Helper functions for creating model elements with proper defaults:

// Attributes
modelsdk.NewStringAttribute(name, length)
modelsdk.NewIntegerAttribute(name)
modelsdk.NewDecimalAttribute(name)
modelsdk.NewBooleanAttribute(name)
modelsdk.NewDateTimeAttribute(name, localize)
modelsdk.NewEnumerationAttribute(name, enumID)

// Entities
modelsdk.NewEntity(name)                 // Persistable
modelsdk.NewNonPersistableEntity(name)   // Non-persistable

// Associations
modelsdk.NewAssociation(name, parentID, childID)      // 1:N
modelsdk.NewReferenceSetAssociation(name, p, c)       // M:N

// Flows
modelsdk.NewMicroflow(name)
modelsdk.NewNanoflow(name)

// Pages
modelsdk.NewPage(name)

// IDs
modelsdk.GenerateID()