**Source URL:** https://general.veevavault.dev/mdl/documentation/overview.md

# MDL Overview

Use MDL (Metadata Definition Language) to manage Vault configuration. Like DDL (Data Definition Language) in databases, you can use MDL to create, describe (read), update, and drop (delete) Vault components that make up its configuration.

MDL is a powerful tool for manipulating components programmatically, but its primary use is automating tasks. While MDL mimics the behavior of Vault's Admin UI, it is not intended for use as a default tool for basic configuration tasks or maintenance on an ongoing basis. To manage most standard configuration tasks, use the Admin UI.

## MDL Commands {#MDL_Commands}

MDL uses CRUD-like commands to manage components for Vault. You can use the `CREATE`, `RECREATE`, `RENAME`, `ALTER`, and `DROP` commands to manage Vault configuration components.

Use operators to define conditions for MDL command execution. Learn more in the MDL Commands documentation.

## Vault Components {#Vault_Components}

MDL provides access to component types, which are the configuration elements of a Vault. Vault groups component types by either **metadata** types (`Picklist`, `Object`, `Docfield`, etc.) which manage the configuration of a Vault, and **code** types (`Recordtrigger`, `Documentaction`, `Recordaction`, and `Userdefinedclass`) which extend the functional behavior of a Vault.

See Component Type References for details of each MDL supported Vault component type.

### Subcomponents {#Subcomponents}

Some component types store data in additional child components, called subcomponents. For example, each section visible to users in a `Searchcollection` is stored as an individual `Searchcollectionsection` subcomponent record.

Components have a parent-child relationship with their subcomponents, meaning that a subcomponent record must belong to a parent component record. Deleting a component record with the `DROP` command also deletes any associated subcomponent records.

With the exception of the component types listed below, inactivating a record by changing its `active` attribute value to `false` also inactivates any associated subcomponent records. Note that reactivating a parent component record does not reactivate its children.

Inactivating records of the following component types does not inactivate associated subcomponent records:

* `Atomicsecurity`

* `Doclifecycle`

* `Docmatchingrule`

* `Docparticipantrule`

* `Job`

* `Object`

* `Objectlifecycle`

* `Objecttype`

* `Objectworkflow`

* `Picklist`

* `Sharingrule`

* `Tab`

* `Workflow`

### Attribute Constraints {#Attribute_Constraints}

Some component types include attribute constraints, which ensure all values for a given attribute meet certain criteria. Attribute constraints are read-only.

## Localization {#Localization}

By default, MDL executes in the context of Vault’s base language. Vault Admins manage localizable attributes, [including Java SDK custom Messages](/vault-sdk/entry-points/sdk-message-catalog), using Vault's [translation tools](https://platform.veevavault.help/en/gr/13309).



---

**Next:** [Getting Started](/mdl/documentation/getting-started)