[[painless-guide]]
== Painless Guide

_Painless_ is a simple, secure scripting language designed specifically for use
with Elasticsearch. It is the default scripting language for Elasticsearch and
can safely be used for inline and stored scripts. For a jump start into
Painless, see <<painless-walkthrough, A Brief Painless Walkthrough>>. For a
detailed description of the Painless syntax and language features, see the
<<painless-lang-spec, Painless Language Specification>>.

You can use Painless anywhere scripts are used in Elasticsearch. Painless
provides:

* Fast performance: Painless scripts https://benchmarks.elastic.co/index.html#search_qps_scripts[
run several times faster] than the alternatives.

* Safety: Fine-grained allowlist with method call/field granularity. See the
{painless}/painless-api-reference.html[Painless API Reference] for a
complete list of available classes and methods.

* Optional typing: Variables and parameters can use explicit types or the
dynamic `def` type.

* Syntax: Extends a subset of Java's syntax to provide additional scripting
language features.

* Optimizations: Designed specifically for Elasticsearch scripting.

include::painless-guide/index.asciidoc[]