⚠️ DISCLAIMER: This repository is a demonstration (DEMO) application. Its purpose is to showcase the quality and structure of the source code exported through the Detach process from the OutSystems O11 platform. It is not intended for production use.
ContactManager is a Traditional Web application originally built on OutSystems 11 (O11) and exported via the platform's Detach process. This repository serves as a practical reference illustrating how OutSystems generates organized, modular, and high-quality C#/.NET source code when detaching an application.
The Detach process in OutSystems allows a platform-developed application to be exported as standard .NET source code, giving development teams full ownership of the generated code — without further dependency on an OutSystems license to run the application.
- ✅ Showcase the quality of the exported code generated by the OutSystems O11 platform
- ✅ Evidence the modular architecture automatically produced by the platform
- ✅ Demonstrate the completeness of the export: application code + runtime libraries + plugins
- ✅ Serve as a technical reference for teams evaluating the Detach process
- ✅ Illustrate full compatibility with the .NET ecosystem (Visual Studio, NuGet, MSBuild)
The repository contains the main application and all OutSystems runtime libraries exported alongside the application code:
ContactManager/
│
├── ContactManager/ # 🎯 Main application (Traditional Web ASP.NET)
│ └── referencesProxy/ # Inter-module references proxy
│
├── Application/ # App lifecycle & initialization libraries
│ ├── OutSystems.Application.Core
│ ├── OutSystems.Application.Initialization.ASPNet
│ ├── OutSystems.Application.ManifestGeneration
│ ├── OutSystems.Application.Scheduling
│ ├── OutSystems.Application.Session
│ ├── OutSystems.Application.Session.Abstractions
│ └── OutSystems.Application.Session.Persistent
│
├── DatabaseProviders/ # Supported database providers
│ ├── iDB2DatabaseProvider # IBM DB2 (iSeries)
│ ├── MySQLDatabaseProvider # MySQL
│ ├── OracleDatabaseProvider # Oracle
│ ├── PostgreSQLDatabaseProvider # PostgreSQL
│ └── SQLServerDatabaseProvider # SQL Server
│
├── OutSystems.CachingCommon/ # Platform caching mechanism
├── OutSystems.DebuggerClient/ # OutSystems debug client
├── OutSystems.HubEdition.DatabaseAbstractionLayer/ # Database abstraction layer
├── OutSystems.Logging/ # Logging framework
├── OutSystems.Logging.Database/ # Database-persisted logging
├── OutSystems.ModuleServices/ # Inter-module services
├── OutSystems.PluginAPI/ # Plugin extensibility API
├── OutSystems.Plugin.FileBased/ # File-based storage plugin
├── OutSystems.Plugin.RabbitMQ/ # RabbitMQ messaging plugin
├── OutSystems.RESTService.Runtime/ # REST API runtime
├── OutSystems.RESTService.Runtime.Abstractions/ # REST runtime abstractions
├── OutSystems.RuntimeCommon/ # Core runtime shared components
├── OutSystems.RuntimePlatform/ # Platform runtime core
├── OutSystems.RuntimeSettingsConfiguration/ # Runtime configuration settings
├── OutSystems.Spreadsheet/ # Spreadsheet manipulation support
├── Plugin.SAP/ # SAP integration plugin
├── Plugin.Widgets.Runtime/ # Custom widget runtime
├── REST.RuntimeAPI/ # REST services runtime API
├── ThirdParty/ # Third-party dependencies
├── Version/ # Platform version control
├── WebWidgets/ # Web UI components (widgets)
├── WidgetsRuntimeAPI/ # Widget runtime API
│
├── ContactManager.oml # 📦 Original OutSystems source file (OML)
├── ContactManager.sln # 📂 Visual Studio 2012+ Solution
├── Directory.Build.props # ⚙️ Global MSBuild properties
└── NuGet.config # 📦 NuGet package configuration
| Technology | Detail |
|---|---|
| Origin Platform | OutSystems 11 (O11) — Traditional Web |
| Primary Language | C# — 94.6% of codebase |
| Web Framework | ASP.NET Web Forms |
| JavaScript | 3.8% (widgets & UI interactions) |
| ASP.NET | 1.3% (handlers, config) |
| IDE | Visual Studio 2012+ (Solution Format v12) |
| Package Manager | NuGet |
| Build System | MSBuild with Directory.Build.props |
The exported runtime includes providers for multiple databases, reflecting OutSystems' native flexibility:
| Provider | Database |
|---|---|
DatabaseProvider.SQLServer |
Microsoft SQL Server (default) |
DatabaseProvider.PostgreSQL |
PostgreSQL |
DatabaseProvider.MySQL |
MySQL |
DatabaseProvider.Oracle |
Oracle Database |
DatabaseProvider.iDB2 |
IBM DB2 / iSeries |
The Detach (also referred to as Take Ownership) is a feature of OutSystems that allows customers to extract the fully generated source code of their applications. Once detached:
- The application runs as a pure .NET application, independent of the OutSystems platform
- The source code is fully readable, compilable, and maintainable by any .NET developer
- Teams can extend, refactor, or migrate the code to any target architecture
- The OutSystems runtime libraries (included in this repo) are required to compile and run the application after detach
This process is particularly useful for companies that want to exit the OutSystems platform while preserving their business logic and data, or for teams that want full control over deployment pipelines.
The main ASP.NET Web Forms project generated by OutSystems. It contains all screens, actions, data models, and integrations defined in the OutSystems IDE (Service Studio). The referencesProxy sub-project handles dependencies between OutSystems modules.
The heart of the OutSystems runtime. This library provides the execution engine that powers screens, actions, timers, and all platform abstractions at runtime.
A provider-agnostic data access layer that allows the application to work with multiple database engines by swapping the active DatabaseProvider.
Handles inter-module communication, a foundational concept in OutSystems architectures where functionality is distributed across multiple modules.
OutSystems.Plugin.FileBased— Provides file-based session and cache storageOutSystems.Plugin.RabbitMQ— Enables asynchronous messaging via RabbitMQPlugin.SAP— Integration connector for SAP systemsPlugin.Widgets.Runtime— Powers custom UI widgets defined in the platform
OutSystems.RESTService.Runtime+Abstractions— Expose and consume REST APIs as defined in Service StudioREST.RuntimeAPI— Runtime API layer for RESTful communication
UI component libraries that power the Traditional Web application's frontend, including inputs, grids, and other visual components generated by the platform.
- Visual Studio 2019+ or .NET SDK
- NuGet package restore access
- SQL Server (or any supported database provider configured)
# Clone the repository
git clone https://github.com/ms3ti/ContactManager.git
cd ContactManager
# Restore NuGet packages
dotnet restore ContactManager.sln
# Build the solution
dotnet build ContactManager.sln --configuration ReleaseNote: This is a demonstration export. Full runtime execution requires proper OutSystems runtime configuration, database setup, and IIS hosting as per standard OutSystems detach documentation.
The ContactManager.sln (Visual Studio Solution Format v12) includes 30 projects, covering:
- 1 main web application project
- 1 references proxy project
- 5 database provider projects
- 6 application lifecycle projects
- 17 OutSystems runtime and plugin library projects
- OutSystems — Detach Process Documentation
- OutSystems 11 Architecture Overview
- OutSystems Traditional Web vs Reactive Web
Edson Marques — @edsoncms
O ContactManager é uma aplicação Traditional Web desenvolvida no OutSystems 11 (O11) e exportada através do processo de Detach da plataforma. Este repositório tem como único objetivo demonstrar a qualidade e a completude do código gerado pelo OutSystems ao realizar o detach de uma aplicação.
⚠️ Este projeto é apenas uma DEMO. Não é uma aplicação pronta para produção.
O Detach (também chamado de Take Ownership) é um recurso do OutSystems que permite ao cliente extrair o código-fonte completo das suas aplicações. Após o detach:
- A aplicação passa a rodar como uma aplicação .NET pura, independente da plataforma OutSystems
- O código é totalmente legível, compilável e manutenível por qualquer desenvolvedor .NET
- As bibliotecas de runtime do OutSystems (incluídas neste repositório) são necessárias para compilar e executar a aplicação após o detach
O repositório contém 30 projetos na solution do Visual Studio, incluindo:
- A aplicação principal em ASP.NET Web Forms (Traditional Web)
- Provedores de banco de dados para SQL Server, PostgreSQL, MySQL, Oracle e IBM DB2
- Bibliotecas de runtime do OutSystems (logging, cache, sessão, módulos, plugins)
- Plugins de integração (RabbitMQ, SAP, FileBased)
- Componentes de UI (WebWidgets, WidgetsRuntimeAPI)
- O arquivo OML original do OutSystems (
ContactManager.oml)
- C# — 94,6% do código
- JavaScript — 3,8%
- ASP.NET — 1,3%
- Plataforma de origem: OutSystems O11 Traditional Web
- Build: Visual Studio / MSBuild / NuGet
Este repositório foi criado para mostrar a desenvolvedores, arquitetos e gestores de tecnologia que o OutSystems não é uma caixa-preta — a plataforma gera código .NET estruturado, modular e de alta qualidade, que pode ser extraído e evoluído de forma independente.
Repositório mantido por Edson Marques