# Developer Documentation

The following documentation is for developers wishing to write OMERO client code or extend the OMERO server. Instructions on downloading, installation and administering OMERO can be found under the System Administrator Documentation of the main site.

OMERO is an open source client/server system written in Java for visualizing, managing, and annotating microscope images and metadata. The OMERO Application Programming Interface allows clients to be written in Java, Python, C++ or MATLAB. OMERO releases include a Java client OMERO.insight, a Python-based web client OMERO.web and the Command Line Interface as an OMERO development tool, which also uses Python. There is also an ImageJ plugin. OMERO can be extended by modifying these clients or by writing your own in any of the supported languages (see figure). OMERO also supports a Scripting Service which allows Python scripts to be run on the server and called from any of the other clients.

OMERO is designed, developed and released by the Open Microscopy Environment, with contributions from Glencoe Software, Inc. OMERO is released under the GNU General Public License (GPL) with commercial licenses and customization available from Glencoe Software, Inc.. You can read about how OMERO has developed since the project started in the CHANGELOGS. We ask contributors to sign once the Contributor License Agreement (CLA) . When signed, please do send the agreement to `contributors at openmicroscopy.org`.

For help with any aspect of OMERO, see details of our forums and mailing lists.

## Introduction to OMERO

- What’s new for OMERO 5.6 for developers
- Migration from OMERO 5.5 (Python 2) to OMERO 5.6 (Python 3)
- Installing OMERO from source
- Build System
- Working with OMERO
- Running and writing tests

## Using the OMERO API

- OMERO Python language bindings
- Blitz Gateway documentation
- Command Line Interface as an OMERO development tool
- OMERO Java language bindings
- OMERO MATLAB language bindings
- OMERO C++ language bindings
- JSON API

## Analysis

- Local analysis
- Storing external data in OMERO
- OMERO.tables

## Scripts - plugins for OMERO

- Introduction to OMERO.scripts
- OMERO.scripts user guide
- Guidelines for writing OMERO.scripts
- MATLAB and Python
- OMERO.scripts advanced topics

## Web

- OMERO.web framework
- OMERO.web installation for developers
- Creating an app
- Release an app
- Linking from Webclient
- Webclient Plugins
- Editing OMERO.web
- WebGateway
- Embedding an OMERO.web viewport in a web page
- Writing OMERO.web views
- Writing page templates in OMERO.web
- Cross Site Request Forgery protection
- The OMERO.web client application

## Insight

Note

With the release of OMERO 5.3.0, the OMERO.insight desktop client has entered maintenance mode, meaning it will only be updated if a major bug is discovered. Instead, the OME team will be focusing on developing the web clients. As a result, coding against this client is no longer recommended. Technical documentation can be found at https://omero-insight.readthedocs.io/en/latest/.

## More on API Usage

OMERO can be extended by modifying these clients or by writing your own in any of the supported languages.

- Developing OMERO clients
- OMERO Application Programming Interface
- OMERO admin interface
- Deleting in OMERO
- OMERO Import Library
- TempFileManager
- Exception handling
- Omero logging
- Graph requests
- Rewriting old graph requests

## The OME Data Model

- OME-Remote Objects
- Working with annotations
- Glossary of all OMERO Model Objects
- Units
- Map annotations
- Available transformations
- Folders in the OMERO model

## Searching

- OMERO search
- File parsers
- Search bridges

## Authentication and Security

- Password Provider
- LoginAttemptListener
- LDAP plugin design
- OMERO roles
- OMERO security system
- OMERO permissions querying, usage and history

## OMERO.server in depth

- OMERO.server overview
- Extending OMERO.server
- OMERO.blitz
- OMERO.fs
- Import under OMERO.fs
- OMERO.processor
- OMERO.server image rendering
- Clustering
- Collection counts
- How To create a service
- OMERO sessions
- Aspect-oriented programming
- OmeroContext
- OMERO events and provenance
- Properties
- Using server queries internally
- OMERO throttling
- OMERO rendering engine
- Scaling Omero
- SqlAction
- The server’s view of administrator restrictions
- Model graph operations
- Java classes for model graph operations