Markup is an online annotation tool that can be used to transform unstructured documents into structured formats for NLP and ML tasks, such as named-entity recognition. Markup learns as you annotate in order to predict and suggest complex annotations. Markup also provides integrated access to existing and custom ontologies, enabling the prediction and suggestion of ontology mappings based on the text you’re annotating.



A full-feature version of Markup is available both via website and local installation.


The online version of Markup can be found here.

Local Server


Run docker run -d -p 8000:8000 samueldobbie/markup and visit http://localhost:8000.

Manual Installation


    Clone or download the repository.

    Run python using 64-bit Python3.

    Visit http://localhost:8000.

For futher sessions, the local server can be started directly by running python runserver localhost:8000.


Documentation to help with setting up and using Markup can be found here.


  • Ability to navigate between and annotate multiple documents in a single session.

  • Predictive annotation suggestions (incl. attributes) using underlying active learning and sequence-to-sequence models.

  • Integrated access to pre-loaded and user-defined ontologies, enabling predictive mappings and direct querying.

  • Built-in configuration file creator.

  • Built-in synthetic data generator and custom model trainer (local version only due to high computational expense).

  • Dynamic attribute display.

  • Any number of overlaying annotations, enabling the capture of complex data.

  • Full-feature tool available via local installation and website.

  • Dark mode.

Future Plans

  • Add user accounts.

  • Add ability for users to join a team and share ontologies, documents, guidelines, annotations, etc.

  • Accessible version for colour-blind users.

  • Add ability to perform text and image classification.

  • Add ability to annotate images.