The MonoDevelop team is proud to announce the release of MonoDevelop 1.0.
MonoDevelop is a GNOME IDE primarily designed for C# and other .NET languages. MonoDevelop enables developers to quickly write desktop and ASP.NET Web applications on Linux and Mac OS X. MonoDevelop makes it easy for developers to port .NET applications created with Visual Studio to Linux and Mac OS X and to maintain a single code base for all three platforms.
The main features of MonoDevelop are:
MonoDevelop has a highly customizable workbench, based on the traditional user interface model used by most IDEs. The workbench is composed of several pads, which can be moved around by the user and docked in any place. The user can choose which pads to show, and pads can be set to auto-hide mode or floating mode. Other features include:
The following table shows the languages supported by MonoDevelop:
| Language | Compilation | Code Completion | Class tree | Refactory Operations | Visual Designer |
|---|---|---|---|---|---|
| C# | Yes | Yes | Yes | Yes | Yes |
| Visual Basic.NET | Yes | Yes (no generics) | Yes | No | No |
| C/C++ | Yes | Yes (based on ctags) | Yes (based on ctags) | No | No |
| Boo | Yes | Yes (no generics) | Yes | No | No |
| Java (IKVM) | Yes | No | No | No | No |
| Other (Generic Project) | Yes | No | No | No | No |
MonoDevelop allows creating different types of managed executables and libraries. Here is a list of the most important features:
The C/C++ project type allows compiling C or C++ code using the GNU gcc or g++ compilers. The compilation and linking is fully configurable, including warning level, optimization level, target type (executable, static or shared library), define symbols, linked libraries, library paths, include paths and arbitrary additional arguments.
Integration with pkg-config enables installed packages such as GTK+ and SDL to be easily added as references. Library projects can also export pkg-config packages for consumption by other projects or for distribution.
The class pad is fully supported (via exuberant ctags), and can be used to browse the defined symbols and jump to their declaration with a simple double-click. This also provides limited code completion in the text editor.
Precompiled headers and dependency tracking are used to speed up the compilation process, and ccache may be used for an additional speed boost.
MonoDevelop integrates many tools, commands and automations to simplify the editing and browsing of the code. Here is a list of the most important ones:
Easy to use GUI designer for GTK# applications. Supports the creation and management of custom GTK# widget libraries.
![]() | Integrated Visual Designer The GTK# visual designer is integrated in the IDE workbench. It provides a customizable widget toolbox, a property grid for editing wiget properties, and a widget tree for browsing the structure of a window. The designer generates the required code behind the scenes, using partial classes. See screencast: Creating a simple user interface with MonoDevelop. |
![]() | Menu and toolbar designer The menu and toolbar designers are based on the UIManager/Action/ActionGroup model. Building a menu is really easy and 'visual'. You only need to add a menu bar to the window and start writing options. The menu designer looks like a regular menu, but clicking on a menu item makes it selected, so that you can change its properties using the Properties pad. Clicking again on the menu item when it is selected will start the editing mode of the menu item, in which you can change the label or the icon. When you are creating menu items in this way, the designer creates Actions for each menu item at the same time. Those actions are added to the window's ActionGroup. |
| Stock Icons MonoDevelop can manage icons to be included in a project. The idea is that you select some images, give them an ID, and MonoDevelop will generate a Gtk.IconFactory for you and will register the icons there. You can then use that ID when creating buttons or anything that requires a stock id. | |
![]() | Widget Toolbar The toolbar located on top of the designer shows some buttons for quickly setting some widget properties. Those buttons change depending on the selected widget. |
![]() | Custom Widgets MonoDevelop allows creating custom widget libraries. Widgets from widget libraries will be shown in the toolbox, and can be dropped to any window just like the stock widgets. Custom widgets can be created using the visual designer, or by just creating a subclass of a stock GTK# widget (in the latter case, the widget must be explicitly exported in the project options dialog). See screencast: Creating custom widgets with MonoDevelop. |
![]() | Support for targeting multiple GTK# versions MonoDevelop supports targeting GTK# versions other than the ones installed in the system. For example, in a system running GTK# 2.10 it is possible to select GTK# 2.4 as target version, and the generated application will be linked against the 2.4 libraries. Support for those additional GTK# versions must be installed using the add-in manager. |
MonoDevelop provides support for creating ASP.NET based web sites. Although there is no visual designer for the web pages, the IDE provides a specific project type which simplifies the development of this kind of web sites.
Working with Makefiles is easy with MonoDevelop:
MonoDevelop has native support for Visual Studio 2005 solutions/projects. You can directly load VS2005 solutions/projects and work with them. Any changes made are written back to the project files. Currently it supports loading C# (.csproj) and VB.NET (.vbproj) projects.
This support is limited to Files, References, Configurations and Compiler options. No custom msbuild tasks are supported.
This native support is not available for Visual Studio 2003 projects. When opening a VS2003 project, MonoDevelop will offer the possibility of converting it to the native MonoDevelop format or to the VS2005 format.
MonoDevelop integrates support for several common version control operations. Right now only Subversion repositories can be used.
See the screencast Using Version Control in MonoDevelop for a live demonstration of the main features, which are:
MonoDevelop features integrated unit testing based on NUnit:
MonoDevelop provides several options for packaging and deploying projects.
![]() | Create Package Command The Create Package command allows creating packages for an existing project. It supports three kinds of packages:
See screencast: Building packages with MonoDevelop |
![]() | Packaging Projects A packaging project can be added to a solution and can define several packages to be built for the solution. Each package can be of different kind (archives, tarballs) and can include different project selections. |
![]() | Deployment Model The packaging system takes advantages of the extensible deployment model implemented in MonoDevelop, which allows specifying the target directory of project files. For example, it is possible to specify that a file needs to be copied to the libs directory, or to the shared directory. |
![]() | Desktop Integration MonoDevelop includes options to easily integrate applications in the Linux desktop. It can automatically:
|
Instructions about how to get MonoDevelop are available in MonoDevelop's Download page.
Aaron Bockover, Alberto Paro, Alejandro Serrano, Alexandre Gomes, Alex Graveley, Andrés G. Aragoneses, Andre Filipe de Assuncao e Brito, Antonio Ognio, Ankit Jain, Ben Maurer, Ben Motmans, Christian Hergert, Daniel Kornhauser, Daniel Morgan, David Makovský, Eric Butler, Erik Dasque, Franciso Martinez, Geoff Norton, Gustavo Giráldez, Iain McCoy, Inigo Illan, Jacob Ilsø Christensen, James Fitzsimons, Jeff Stedfast, Jérémie Laval, Jeroen Zwartepoorte, John BouAnton, John Luke, Joshua Tauberer, Jonathan Hernández Velasco, Levi Bard, Lluis Sanchez Gual, Marc Christensen, Marcos David Marín Amador, Martin Willemoes Hansen, Marek Sieradzki, Matej Urbas, Maurício de Lemos Rodrigues Collares Neto, Michael Hutchinson, Miguel de Icaza, Mike Krüger, Muthiah Annamalai, Nick Drochak, nricciar, Paco Martínez, Pawel Rozanski, Pedro Abelleira Seco, Peter Johanson, Philip Turnbull, Richard Torkar, Rolf Bjarne Kvinge, Rusty Howell, Scott Ellington, Thomas Wiest, Todd Berman, Vincent Daron, Vinicius Depizzol, Wade Berrier, Yan-ren Tsai and Zach Lute.
This list may not be complete, some contributors who sent patches by email or via our bugzilla may be missing. Your work is still greatly appreciated. If your name was left off the list, it was not intentional, please send an email to the MonoDevelop mailing list and it will be corrected as soon as possible.
| Catalan | Jonathan Hernández Velasco, Jordi Mas i Hernández |
| Czech | David Makovský |
| Danish | Martin Willemoes Hansen, Jacob Ilsø Christensen |
| German | Gustav Schauwecker, Martin Dederer |
| Spanish | Antonio Ognio, Alejandro Serrano, Andrés G. Aragoneses |
| French | Vincent Daron, Nicolas Favre-Félix |
| Galician | Ignacio Casal Quinteiro |
| Hungarian | Gergely Kiss |
| Indonesian | Fajrin Azis |
| Italian | Alberto Paro, Milo Casagrande |
| Japanese | Atsushi Eno |
| Dutch | André Offringa |
| Polish | Marek Sieradzki |
| Portuguese | Vitor Hugo Barros |
| Portuguese (Brazil) | Mauricio de Lemos Rodrigues Collares Neto, Andre Filipe de Assuncao e Brito, Rafael Teixeira |
| Russian | Maxim Krentovskiy, Semyon Soldatov, Daniel Abramov |
| Slovenian | Matej Urbas |
| Swedish | Daniel Nylander |
| Turkish | Enver Altin |
| Chinese (China) | Yu Lindong, Funda Wang |
| Chinese (Taiwan) | Yan-ren Tsai |
To all of our wonderful testers, who had the patience to use unstable versions of MonoDevelop for everyday use, and managed to post nice bug reports.
To Mike Krüger and the rest of the AlphaSierraPapa team for giving us a great codebase to start from, and continuing improvements.
To Pedro Abelleira, Todd Berman, John Luke, and other early contributors who started this adventure 4 years ago, and who believed in the feasibility of the project.
To all of the active and not so active (we miss you!) MonoDevelop developers.