Gorm is the GNUstep graphical interface builder.
- The name stands for Graphic Object Relationship Modeler (also commonly expanded as GNUstep Object Relationship Modeler).
- It is the GNUstep counterpart to the classic NeXTSTEP/OpenStep/Cocoa Interface Builder.
- It lets you design interface objects visually, wire outlets/actions, and save interface archives that GNUstep applications can load at runtime.
- Visual editing of windows, panels, menus, controls, and custom views
- Property editing through inspectors
- Action/outlet connection modeling between objects
- Class management for custom classes, outlets, and actions
- Resource editing and management (for example images and sounds)
- Plugin/palette architecture for extensibility
- Import/export support through the headless gormtool utility (strings, XLIFF, class metadata, archive conversion workflows)
Top-level modules are split so core functionality can be reused by other tools and apps:
- GormCore/: core framework and editor/inspector implementation
- InterfaceBuilder/: protocol and compatibility layer abstractions
- GormObjCHeaderParser/: Objective-C header parsing support used by class tooling
- Applications/: application targets, including the Gorm app
- Plugins/: plugin bundles for archive/loading support
- Tools/: command-line tooling, including gormtool
- Documentation/: texinfo manual sources, man page source, and documentation status notes
The aggregate build in GNUmakefile builds these as subprojects in this order:
- InterfaceBuilder
- GormObjCHeaderParser
- GormCore
- Plugins
- Applications
- Tools
To build and run Gorm, you need GNUstep core components installed:
- gnustep-make
- gnustep-base
- gnustep-gui
- gnustep-back
The build expects GNUSTEP_MAKEFILES to be available (normally provided by gnustep-config).
From the repository root:
make
make installNotes:
- GormCore (the framework/library) must be installed for Gorm.app to run correctly.
- The root post-build step copies plugins into GormCore framework resources.
Typical launch methods:
openapp Gormgopen -a GormGormOpen an existing document directly:
Gorm path/to/MyInterface.gormGorm primarily works with interface archive documents and associated resources.
- .gorm: native Gorm document format
- .nib: legacy Interface Builder archive format support
- .xib: XML-based Interface Builder archive support
gormtool is a command-line front end for selected Gorm document operations. It loads a document, performs operations, optionally writes output, then exits.
Basic forms:
gormtool [options] inputfile
gormtool --read inputfile [options]Important behavior:
- If --read is omitted, the last argument is treated as input.
- Operations that modify the in-memory document do not auto-save unless --write is also provided.
Common options:
- --read FILE: open input document
- --write FILE: write resulting document
- --import-strings-file FILE: import .strings translations
- --export-strings-file FILE: export localizable strings
- --export-xliff FILE: export XLIFF 1.2
- --import-xliff FILE: import XLIFF 1.2
- --source-language LANG: source language for XLIFF export
- --target-language LANG: optional target language for XLIFF export
- --import-class HEADER: import Objective-C class metadata from header
- --export-class CLASSNAME: export class interface/implementation files
- --output-path DIR: output directory for exported class files
- --objects, --connections, --classes: print document internals
- --test: keep process running in interactive test mode
Examples:
gormtool --export-strings-file Localizable.strings MyDocument.gormgormtool --read MyDocument.gorm --import-xliff MyDocument-fr.xliff --write MyDocument-fr.gormgormtool --read MyDocument.gorm --write MyDocument.xib- Create or open a .gorm document.
- Add windows/views/controllers from palettes.
- Configure properties using inspectors.
- Define custom classes/actions/outlets as needed.
- Wire outlets and actions between objects.
- Add resources (images/sounds) and set references.
- Save and load the archive from your GNUstep app at runtime.
Primary sources in this repository:
- Documentation/Gorm.texi: main manual source
- Documentation/gorm.1.in: man page source
- Documentation/install.texi: install requirements and build notes
- Documentation/news.texi: release/user-visible change notes
- Documentation/readme.texi: short overview summary
- Documentation/DOCUMENTATION_PROGRESS.md: API/header documentation tracking
- Documentation/DOCUMENTATION_SUMMARY.md: API documentation status summary
Additional manual/wiki entry point:
Gorm is usable and stable.
Known long-term improvement areas include:
- Broader compatibility with newer Interface Builder behaviors
- Continued palette/editor expansion
- Ongoing API/header documentation completion
Contributions are welcome in all areas, especially:
- Bug fixes and regressions
- Documentation improvements
- New palettes/editors/inspectors
- Compatibility and archive import/export improvements
Please open issues and pull requests on GitHub:
You can also send feedback and patches to:
Gorm is part of GNUstep and distributed under the GNU General Public License. See COPYING for details.
- Icons: mostly by Andrew Lindsay; Gorm application icon by Jesse Ross.
- Code: GormViewKnobs.m adapted from code by Gerrit van Dyk.