# Virgo (software)

Virgo is an open source, OSGi-based, Java application server. Virgo supports the deployment of OSGi bundles and unmodified Java web applications as well as OSGi-influenced Shared Libraries WARs and Shared Services WARs.
Virgo is based on the Equinox OSGi implementation, part of the Eclipse project. A few different distributions of Virgo exist: Virgo Nano, Virgo Kernel, Virgo Server for Apache Tomcat (embedding the Apache Tomcat servlet container) and Virgo Jetty Server (embedding the Eclipse Jetty servlet container). Virgo Server for Apache Tomcat is the primary distribution for OSGi development.
Virgo uses Spring Framework which is embedded and made available as a run-time dependency to deployed applications. Virgo is licensed using the Eclipse Public License.
Virgo was originally developed as SpringSource dm Server by SpringSource and is currently maintained by the Eclipse Foundation. SpringSource is now a division of VMware.

## History

The SpringSource dm Server was originally announced as the SpringSource Application Platform on April 30, 2008. Version 1.0 of the SpringSource dm Server was released September 30, 2008. Version 2.0 was released January 12, 2010.
SpringSource donated dm Server to Eclipse as the Virgo project later in 2010.
In 2013 SpringSource contributions to Eclipse Virgo came to an end and the team members got reallocated to different projects. In absence of a lead, the Virgo project was about to be archived until Florian Waibel stepped in as the new project lead.

## IDE Tools

Eclipse Virgo is supported by a set of Eclipse plug-ins called Virgo Tools which allow using the Eclipse IDE for the development and testing of OSGi applications against an embedded Virgo test environment. The tools support hot deploy of individual bundles and allow deployment of plan files.

## Feature summary

* Web admin console - deploy and manage artifacts, examine diagnostic dumps, and explore bundle wiring, either in a live system or offline following a resolution failure
* Gogo shell - manage Virgo and deployed artifacts using a command line shell accessed via ssh or telnet
* Plans - define the artifacts that compose an application, optionally making the application atomic to tie the artifact lifecycles together, and scoped to isolate the application from other applications
* Provisioning - automatically supply the dependencies of an application including bundles, plans, plan archives (PARs), and configurations, from both local and remote repositories
* Web container - supports vanilla WAR files, with all their dependencies in WEB-INF/lib, and Web Application Bundles, that import their dependencies via OSGi manifest metadata, via the reference implementation of the OSGi Web Container specification, based on embedded Apache Tomcat and configured using the standard Tomcat server.xml
* User region - isolates the kernel from user-installed applications and enables administrators to focus on application artifacts and their dependencies without seeing those of the kernel as well
* Spring – Virgo 3.6.2 packages Spring 3.1.x, Virgo 3.7 packages Spring 4.2.x
* Hot deployment - deploy artifacts to Virgo by copying them into the pickup directory, either in archive or exploded form, as an alternative to deploying via the admin console or shell
* Logging - via embedded LogBack with a rich set of appenders available out of the box
* JMX management, accessed via the admin console, the shell, the Virgo IDE tooling, or directly via a JMX client such as JConsole