[[modules-scripting-painless]] == Painless scripting language _Painless_ is a performant, secure scripting language designed specifically for {es}. You can use Painless to safely write inline and stored scripts anywhere scripts are supported in {es}. [[painless-features]] Painless provides numerous capabilities that center around the following core principles: * **Safety**: Ensuring the security of your cluster is of utmost importance. To that end, Painless uses a fine-grained allowlist with a granularity down to the members of a class. Anything that is not part of the allowlist results in a compilation error. See the {painless}/painless-api-reference.html[Painless API Reference] for a complete list of available classes, methods, and fields per script context. * **Performance**: Painless compiles directly into JVM bytecode to take advantage of all possible optimizations that the JVM provides. Also, Painless typically avoids features that require additional slower checks at runtime. * **Simplicity**: Painless implements a syntax with a natural familiarity to anyone with some basic coding experience. Painless uses a subset of Java syntax with some additional improvements to enhance readability and remove boilerplate. [discrete] === Start scripting Ready to start scripting with Painless? Learn how to <>. If you're already familiar with Painless, see the {painless}/painless-lang-spec.html[Painless Language Specification] for a detailed description of the Painless syntax and language features.