Explore the Taxi language and ecosystem

Welcome! 👋 Taxi is a language for documenting data schemas - such as data models, and the contracts of APIs.

Taxi describes data semantically, which allows powerful tooling to discover and map data based on it's meaning, rather than the name of a field.

As a language, Taxi focuses on:

  • Readability - A familiar syntax that should be easy to write, and easy to understand.
  • Expressiveness - Taxi should be able to describe the semantic meaning of your data, and rich quirky contracts of our APIs
  • Typesafe - A strongly typed, expressive language, purpose-built for describing API operations & types
  • Tooling - Taxi is intended to allow next-generation tooling integration - the syntax allows rich expression of what services can do (rather than just where to find them).
  • Extensibility - Taxi allows you to refine and compose API schemas, adding context, annotations, and improving type signatures.

Taxi is used heavily to power Vyne - and the projects have influenced each other & evolved together. The expressiveness of Taxi allows Vyne to automate integration between services.

However, Taxi is intended to be a standalone tool, and is not coupled to Vyne. There's lots of amazing things you can do with Taxi on it's own.


Taxi allows you to be really expressive about what the meaning is of data returned from an API. By describing the meaning of our data, we can start to make data interchangable.

For example:

model Customer {
   id : CustomerId inherits String
   firstName : FirstName inherits String
   lastName : LastName inherits String

model Invoice {
   invoiceId : InvoiceId as Int
   customerId : CustomerId

Those Strings now have a little more meaning. And look - we now know that Invoice.customerId and Customer.id describe the same piece of information - a CustomerId.

By building out this set of terms - we create a Taxonomy of interchangable types. This allows us to better document how data is intended to be used. Tooling such as Vyne can leverage this to link and discover data automatically, and automate API integration.

@HttpOperation(method = "GET", url = "http://myApp/customers/{id}")
operation getPerson(id: CustomerId):Customer

New to Taxi or Vyne?

It's easy to adopt Taxi incrementally, meaning you can set it up alongside an existing solution (such as Swagger or XML schemas) and migrate functionality at your convenience.

In fact, Taxi is designed to complement those tools, and you can happily use Swagger or Xsds are you base schema, and then overlay semantic data using Taxi.

Edit on GitLab