# Default Configuration

The default configuration is as follows, note the Builtin Jinja Macro Blocks in section `[sqlfluff:templater:jinja:macros]` as referred to above.

Note

This shows the entire default config. We do not recommend that users copy this whole config as the starter config file for their project.

This is for two reasons:

1. The config file should act as a form of documentation for your team. A record of what decisions you’ve made which govern how your format your sql. By having a more concise config file, and only defining config settings where they differ from the defaults - you are more clearly stating to your team what choices you’ve made.

2. As the project evolves, the structure of the config file may change and we will attempt to make changes as backward compatible as possible. If you have not overridden a config setting in your project, we can easily update the default config to match your expected behaviour over time. We may also find issues with the default config which we can also fix in the background. However, the longer your local config file, the more work it will be to update and migrate your config file between major versions.

If you are starting a fresh project and are looking for a good starter config, check out the New Project Configuration section above.

    [sqlfluff]
    # verbose is an integer (0-2) indicating the level of log output
    verbose = 0
    # Turn off color formatting of output
    nocolor = None
    # Supported dialects https://docs.sqlfluff.com/en/stable/perma/dialects.html
    # Or run 'sqlfluff dialects'
    dialect = None
    # One of [raw|jinja|python|placeholder]
    templater = jinja
    # Comma separated list of rules to check, default to all
    rules = all
    # Comma separated list of rules to exclude, or None
    exclude_rules = None
    # Below controls SQLFluff output, see max_line_length for SQL output
    output_line_length = 80
    # Number of passes to run before admitting defeat
    runaway_limit = 10
    # Ignore errors by category (one or more of the following, separated by commas: lexing,linting,parsing,templating)
    ignore = None
    # Warn only for rule codes (one of more rule codes, separated by commas: e.g. LT01,LT02)
    # Also works for templating and parsing errors by using TMP or PRS
    warnings = None
    # Whether to warn about unneeded '-- noqa:' comments.
    warn_unused_ignores = False
    # Ignore linting errors found within sections of code coming directly from
    # templated code (e.g. from within Jinja curly braces. Note that it does not
    # ignore errors from literal code found within template loops.
    ignore_templated_areas = True
    # can either be autodetect or a valid encoding e.g. utf-8, utf-8-sig
    encoding = autodetect
    # Ignore inline overrides (e.g. to test if still required)
    disable_noqa = False
    # Ignore inline overrides except those listed.
    # This take priority over `disabled_noqa`.
    disable_noqa_except = None
    # Comma separated list of file extensions to lint
    # NB: This config will only apply in the root folder
    sql_file_exts = .sql,.sql.j2,.dml,.ddl
    # Allow fix to run on files, even if they contain parsing errors
    # Note altering this is NOT RECOMMENDED as can corrupt SQL
    fix_even_unparsable = False
    # Very large files can make the parser effectively hang.
    # The more efficient check is the _byte_ limit check which
    # is enabled by default. The previous _character_ limit check
    # is still present for backward compatibility. This will be
    # removed in a future version.
    # Set either to 0 to disable.
    large_file_skip_char_limit = 0
    large_file_skip_byte_limit = 20000
    # CPU processes to use while linting.
    # If positive, just implies number of processes.
    # If negative or zero, implies number_of_cpus - specified_number.
    # e.g. -1 means use all processors but one. 0  means all cpus.
    processes = 1
    # Max line length is set by default to be in line with the dbt style guide.
    # https://github.com/dbt-labs/corp/blob/main/dbt_style_guide.md
    # Set to zero or negative to disable checks.
    max_line_length = 80
    # NOTE: Templater Variant rendering should currently be considered EXPERIMENTAL.
    # Only set `render_variant_limit` to more than 1 if you know what you're doing!
    # Implementation of this will also depend on your templater.
    render_variant_limit = 1

    [sqlfluff:indentation]
    # See https://docs.sqlfluff.com/en/stable/perma/indent_locations.html
    indent_unit = space
    tab_space_size = 4
    indented_joins = False
    indented_ctes = False
    indented_using_on = True
    indented_on_contents = True
    indented_then = True
    indented_then_contents = True
    allow_implicit_indents = False
    template_blocks_indent = True
    # This is a comma separated list of elements to skip
    # indentation edits to.
    skip_indentation_in = script_content
    # If comments are found at the end of long lines, we default to moving
    # them to the line _before_ their current location as the convention is
    # that a comment precedes the line it describes. However if you prefer
    # comments moved _after_, this configuration setting can be set to "after".
    trailing_comments = before
    # To exclude comment lines from indentation entirely set this to "True".
    ignore_comment_lines = False

    # Layout configuration
    # See https://docs.sqlfluff.com/en/stable/perma/layout_spacing.html
    [sqlfluff:layout:type:comma]
    spacing_before = touch
    line_position = trailing

    [sqlfluff:layout:type:binary_operator]
    spacing_within = touch
    line_position = leading

    [sqlfluff:layout:type:column_path_operator]
    spacing_within = touch
    line_position = leading

    [sqlfluff:layout:type:statement_terminator]
    spacing_before = touch
    line_position = trailing

    [sqlfluff:layout:type:end_of_file]
    spacing_before = touch

    [sqlfluff:layout:type:set_operator]
    line_position = alone:strict

    [sqlfluff:layout:type:start_bracket]
    spacing_after = touch

    [sqlfluff:layout:type:end_bracket]
    spacing_before = touch

    [sqlfluff:layout:type:start_square_bracket]
    spacing_after = touch

    [sqlfluff:layout:type:end_square_bracket]
    spacing_before = touch

    [sqlfluff:layout:type:start_angle_bracket]
    spacing_after = touch

    [sqlfluff:layout:type:end_angle_bracket]
    spacing_before = touch

    [sqlfluff:layout:type:casting_operator]
    spacing_before = touch
    spacing_after = touch:inline

    [sqlfluff:layout:type:slice]
    spacing_before = touch
    spacing_after = touch

    [sqlfluff:layout:type:dot]
    spacing_before = touch
    spacing_after = touch

    [sqlfluff:layout:type:comparison_operator]
    spacing_within = touch
    line_position = leading

    [sqlfluff:layout:type:assignment_operator]
    spacing_within = touch
    line_position = leading

    [sqlfluff:layout:type:object_reference]
    spacing_within = touch:inline

    [sqlfluff:layout:type:numeric_literal]
    spacing_within = touch:inline

    [sqlfluff:layout:type:sign_indicator]
    spacing_after = touch:inline

    [sqlfluff:layout:type:tilde]
    spacing_after = touch:inline

    [sqlfluff:layout:type:function_name]
    spacing_within = touch:inline

    [sqlfluff:layout:type:function_contents]
    spacing_before = touch:inline

    [sqlfluff:layout:type:function_parameter_list]
    spacing_before = touch:inline

    [sqlfluff:layout:type:array_type]
    spacing_within = touch:inline

    [sqlfluff:layout:type:typed_array_literal]
    spacing_within = touch

    [sqlfluff:layout:type:sized_array_type]
    spacing_within = touch

    [sqlfluff:layout:type:struct_type]
    spacing_within = touch:inline

    [sqlfluff:layout:type:bracketed_arguments]
    spacing_before = touch:inline

    [sqlfluff:layout:type:match_condition]
    spacing_within = touch:inline

    [sqlfluff:layout:type:typed_struct_literal]
    spacing_within = touch

    [sqlfluff:layout:type:semi_structured_expression]
    spacing_within = touch:inline
    spacing_before = touch:inline

    [sqlfluff:layout:type:array_accessor]
    spacing_before = touch:inline

    [sqlfluff:layout:type:colon]
    spacing_before = touch

    [sqlfluff:layout:type:colon_delimiter]
    spacing_before = touch
    spacing_after = touch

    [sqlfluff:layout:type:path_segment]
    spacing_within = touch

    [sqlfluff:layout:type:sql_conf_option]
    spacing_within = touch

    [sqlfluff:layout:type:sqlcmd_operator]
    # NOTE: This is the spacing between the operator and the colon
    spacing_before = touch

    [sqlfluff:layout:type:slash]
    spacing_before = any
    spacing_after = any

    [sqlfluff:layout:type:comment]
    spacing_before = any
    spacing_after = any

    [sqlfluff:layout:type:pattern_expression]
    # Snowflake pattern expressions shouldn't have their spacing changed.
    spacing_within = any

    [sqlfluff:layout:type:bind_variable]
    spacing_within = touch

    [sqlfluff:layout:type:placeholder]
    # Placeholders exist "outside" the rendered SQL syntax
    # so we shouldn't enforce any particular spacing around
    # them.
    spacing_before = any
    spacing_after = any

    [sqlfluff:layout:type:common_table_expression]
    # The definition part of a CTE should fit on one line where possible.
    # For users which regularly define column names in their CTEs they
    # may which to relax this config to just `single`.
    spacing_within = single:inline

    # By setting a selection of clauses to "alone", we hint to the reflow
    # algorithm that in the case of a long single line statement, the
    # first place to add newlines would be around these clauses.
    # Setting this to "alone:strict" would always _force_ line breaks
    # around them even if the line isn't too long.
    [sqlfluff:layout:type:select_clause]
    line_position = alone

    [sqlfluff:layout:type:where_clause]
    line_position = alone
    keyword_line_position = leading
    keyword_line_position_exclusions = pipe_operator_clause

    [sqlfluff:layout:type:from_clause]
    line_position = alone

    [sqlfluff:layout:type:join_clause]
    line_position = alone

    [sqlfluff:layout:type:groupby_clause]
    line_position = alone
    keyword_line_position = leading

    [sqlfluff:layout:type:orderby_clause]
    # NOTE: Order by clauses appear in many places other than in a select
    # clause. To avoid unexpected behaviour we use `leading` in this
    # case rather than `alone`.
    line_position = leading
    keyword_line_position = leading
    keyword_line_position_exclusions =
        window_specification,
        aggregate_order_by,
        withingroup_clause,
        pipe_operator_clause

    [sqlfluff:layout:type:having_clause]
    line_position = alone
    keyword_line_position = leading

    [sqlfluff:layout:type:limit_clause]
    line_position = alone

    # Template loop tokens shouldn't dictate spacing around them.
    [sqlfluff:layout:type:template_loop]
    spacing_before = any
    spacing_after = any

    [sqlfluff:templater]
    unwrap_wrapped_queries = True

    [sqlfluff:templater:jinja]
    apply_dbt_builtins = True

    # Some rules can be configured directly from the config common to other rules
    [sqlfluff:rules]
    allow_scalar = True
    single_table_references = consistent
    unquoted_identifiers_policy = all

    [sqlfluff:rules:capitalisation.keywords]
    # Keywords
    capitalisation_policy = consistent
    # Comma separated list of words to ignore for this rule
    ignore_words = None
    ignore_words_regex = None

    [sqlfluff:rules:capitalisation.identifiers]
    # Unquoted identifiers
    extended_capitalisation_policy = consistent
    # Comma separated list of words to ignore for this rule
    ignore_words = None
    ignore_words_regex = None

    [sqlfluff:rules:capitalisation.functions]
    # Function names
    extended_capitalisation_policy = consistent
    # Comma separated list of words to ignore for this rule
    ignore_words = None
    ignore_words_regex = None

    [sqlfluff:rules:capitalisation.literals]
    # Null & Boolean Literals
    capitalisation_policy = consistent
    # Comma separated list of words to ignore for this rule
    ignore_words = None
    ignore_words_regex = None

    [sqlfluff:rules:capitalisation.types]
    # Data Types
    extended_capitalisation_policy = consistent
    # Comma separated list of words to ignore for this rule
    ignore_words = None
    ignore_words_regex = None

    [sqlfluff:rules:ambiguous.join]
    # Fully qualify JOIN clause
    fully_qualify_join_types = inner

    [sqlfluff:rules:ambiguous.column_references]
    # GROUP BY/ORDER BY column references
    group_by_and_order_by_style = consistent

    [sqlfluff:rules:aliasing.table]
    # Aliasing preference for tables
    aliasing = explicit

    [sqlfluff:rules:aliasing.column]
    # Aliasing preference for columns
    aliasing = explicit

    [sqlfluff:rules:aliasing.unused]
    alias_case_check = dialect

    [sqlfluff:rules:aliasing.length]
    min_alias_length = None
    max_alias_length = None

    [sqlfluff:rules:aliasing.forbid]
    # Avoid table aliases in from clauses and join conditions.
    # Disabled by default for all dialects unless explicitly enabled.
    # We suggest instead using aliasing.length (AL06) in most cases.
    force_enable = False

    [sqlfluff:rules:convention.not_equal]
    # Consistent usage of preferred "not equal to" comparison
    preferred_not_equal_style = consistent

    [sqlfluff:rules:convention.select_trailing_comma]
    # Trailing commas
    select_clause_trailing_comma = forbid

    [sqlfluff:rules:convention.count_rows]
    # Consistent syntax to count all rows
    prefer_count_1 = False
    prefer_count_0 = False

    [sqlfluff:rules:convention.terminator]
    # Semi-colon formatting approach
    multiline_newline = False
    require_final_semicolon = False

    [sqlfluff:rules:convention.blocked_words]
    # Comma separated list of blocked words that should not be used
    blocked_words = None
    blocked_regex = None
    match_source = False

    [sqlfluff:rules:convention.quoted_literals]
    # Consistent usage of preferred quotes for quoted literals
    preferred_quoted_literal_style = consistent
    # Disabled for dialects that do not support single and double quotes for quoted literals (e.g. Postgres)
    force_enable = False

    [sqlfluff:rules:convention.casting_style]
    # SQL type casting
    preferred_type_casting_style = consistent

    [sqlfluff:rules:references.from]
    # References must be in FROM clause
    # Disabled for some dialects (e.g. bigquery)
    force_enable = False

    [sqlfluff:rules:references.qualification]
    # Comma separated list of words to ignore for this rule
    ignore_words = None
    ignore_words_regex = None
    subqueries_ignore_external_references = False

    [sqlfluff:rules:references.consistent]
    # References must be consistently used
    # Disabled for some dialects (e.g. bigquery)
    force_enable = False

    [sqlfluff:rules:references.keywords]
    # Keywords should not be used as identifiers.
    unquoted_identifiers_policy = aliases
    quoted_identifiers_policy = none
    # Comma separated list of words to ignore for this rule
    ignore_words = None
    ignore_words_regex = None

    [sqlfluff:rules:references.special_chars]
    # Special characters in identifiers
    unquoted_identifiers_policy = all
    quoted_identifiers_policy = all
    allow_space_in_identifier = False
    additional_allowed_characters = None
    ignore_words = None
    ignore_words_regex = None

    [sqlfluff:rules:references.quoting]
    # Policy on quoted and unquoted identifiers
    prefer_quoted_identifiers = False
    prefer_quoted_keywords = False
    ignore_words = None
    ignore_words_regex = None
    case_sensitive = True

    [sqlfluff:rules:layout.long_lines]
    # Line length
    ignore_comment_lines = False
    ignore_comment_clauses = False

    [sqlfluff:rules:layout.newlines]
    maximum_empty_lines_between_statements = 2
    maximum_empty_lines_inside_statements = 1

    [sqlfluff:rules:layout.select_targets]
    wildcard_policy = single

    [sqlfluff:rules:structure.subquery]
    # By default, allow subqueries in from clauses, but not join clauses
    forbid_subquery_in = join

    [sqlfluff:rules:structure.join_condition_order]
    preferred_first_table_in_join_clause = earlier