TeamCity functionality can be significantly extended by a custom plugin. TeamCity plugins are written in Java (Groovy and JRuby can also be used), runs within the TeamCity application and has access to internal entities of the TeamCity server or agent.

Aside from this documentation, please refer to the following sources:

If you cannot find enough information or have a question regarding API please do not hesitate to post your question into TeamCity Plugins forum. Please use search before posting to find out if alike question was already answered in the forums.

Please refer to corresponding section for further details.

{hidden-data}
{note}This page contents is a draft and subject to change.
{note}

TeamCity is a highly extendable system. You can add various plugins in different places, including, but not limited to:
* Custom notifiers
* Custom build triggers
* Custom build runners with possibility to view customized reports on the Web
* Extensions to Ant Runner which allows to add custom logging and view reports on the Web
* Custom statistics reports based on the information in the database
* Custom user authentication
* Support of additional VCS

Currently, TeamCity can be extended on the [build agent side|Agent-side Object Model], and on the [server side|Server-side Object Model] (including [web UI|Web UI Extensions]). Some extensions may require to extend TeamCity in all these places. We plan to provide a [description for some typical plugins|Typical Plugins] and how to write them.

TeamCity server is written in Java, so plugins should be written in Java too.

{info}TeamCity is compiled using JDK 1.5, so plugins should use JDK 1.5 as well.
{info}

TeamCity {{.exe}} and {{tar.gz}} distributions provide materials for plugin developers in the {{<TeamCity home>\devPackage}} directory.
* {{openApi-source.jar}} - sources of the TeamCity open API
* {{openApi-help.jar}} - JavaDoc generated form the open API sources
* {{samplePlugin.zip}} - sample TeamCity plugin IntelliJ IDEA project. To open it, you will need the following path variables defined: {{TOMCAT6}} pointing to TeamCity home, {{TEAMCITYPATH}} pointing to Teamcity web application directory ({{<TeamCity home>/webapps/ROOT}} by default).

Further reading:
{hidden-data}