Graphics for spacing list of dots

Umple Logo rectangular U shape Digital Research Alliance of Canada logo  NSERC logo  University of Ottawa logo / Université d'Ottawa

UmpleOnline  Manual  Download  Code Github Octocat logo  News Facebook logo Donate 


Model-Oriented Programming - Umple.org

Umple is a modeling tool and programming language family to enable what we call Model-Oriented Programming. It adds abstractions such as Associations, Attributes and State Machines to object-oriented programming languages such as Java, Python, C++ and PHP. Umple can also be used to create many kinds of software engineering diagrams textually.

Umple creates reliable code from highly-readable abstractions. The resulting system has many fewer lines than if programmed in a typical programming language, since developers avoid having to write a lot of 'boilerplate' code. AI-code generation is another way to help developers avoid having to write that code, but the difference with Umple is that the boilerplate never has to be inspected or maintained, and has been tested so that it is reliable.

Umple can be combined with AI code generation: simply ask your AI to generate a data model or state model in Umple from requirements. This capability is available in the UmpleOnline

Umple is an open source project hosted on GitHub that can be used for real systems in industry. The Umple compiler itself is written in Umple. Any Java, Python, C++ or PHP project can be adapted to use Umple.

Umple has also been found to help students learn to design software rapidly in the classroom.

Umple works online, or can be downloaded for use on the command line, in VS-Code and other IDEs..

 

Example

The following example shows how to declare attributes and associations in the first steps when modeling a system using Umple. You can click here to load this directly into UmpleOnline.

class Student {}

class CourseSection {}

class Registration 
{
  String grade;
  * -- 1 Student;
  * -- 1 CourseSection;
}
      

The class diagram to reflect the Umple code above is shown below.

Example UML Diagram

Many other examples can be found in the Umple user manual, and in UmpleOnline (select the diagram type from the Examples menu, then choose an example from the Select Example menu). Some examples in UmpleOnline can be directly executed.

 
 

Origin of the name Umple

The word 'Umple' is a play on words, meaning 'Simple', 'UML Programming Language' and 'Ample'. Let us expand on these concepts a little:

Simple: Umple is intended to be simple from the programmer's perspective because, a) there is less code to write, and b) there are fewer degrees of freedom than either Java or UML. Code that is eliminated includes boilerplate code for adding, deleting and modifying links of associations, as well as constructors and methods for accessing attributes. In all these cases, and many others, Umple provides sensible default implementations.

UML Programming Language: Umple adds key features of UML to its target languages. Namely, the addition of association constructs and the simplification of attribute declarations.

Ample: Despite the restrictions imposed by the deliberate simplicity of Umple, it is intended to have sufficient power to program the functional layer of most kinds of systems.

 

Some recent advances (for more details see release notes)

  • 2026: New versions of plugins for VSCode, and new plugin for the Zed editor
  • 2026: A language server protocol (LSP) server repository is available, that powers various IDEs.
  • 2026: Umple skills are being developed in a repository to help AIs use Umple.
  • 2026: The CRUD (forms generation) tool is now working well; it can load and save data
  • 2026: Many new class diagram examples
  • 2026: Dark mode in UmpleOnline
  • 2026: Filtering field in Umpleonline to select which classes to display
  • 2026: Different algorithms can be used to lay out class diagrams
  • 2025: Instance diagram generation
  • 2025: Collaborative editing
  • 2024: Editing of state machine diagrams (right-click or double-click to bring up a menu)
  • 2024: Requirements can be embedded using the req keyword, and implementsReq to identify where they are implemented in other pars of Umple code.
  • 2024: Ability to generate code that can generate Json and load from Json using suboption genJson
  • 2022 to 2024: Python generation
  • 2024: Editing of Graphviz class diagrams