# Avo 4.0 documentation map

A map of every Avo 4.0 documentation page and its headings, designed for easy navigation by LLMs.

For the concise index, see [llms.txt](https://docs.avohq.io/4.0/llms.txt). For the full text of every page in one file (large — high token count), see [llms-full.txt](https://docs.avohq.io/4.0/llms-full.txt). For this map as raw markdown, see [docs-map.md](https://docs.avohq.io/4.0/docs-map.md).

> Auto-generated from the VitePress sidebar by `scripts/generate-docs-map.js`. Do not edit manually.

## Document structure

* **##** marks documentation groups (e.g. 'Resources')
* **###** marks individual documentation pages
* **Nested bullets** show the headings within each page
* Each page title links to the full documentation

## Avo 4

### [Getting Started](https://docs.avohq.io/4.0/index.html)

* The core
* Add-ons
* Your code
* Security
* Build it with AI agents
* Seamless upgrades
* Start here
* Where to go next

### [Upgrade Guide](https://docs.avohq.io/4.0/upgrade.html)

* Unreleased — resizable sidebar
  * Breaking Change
  * Breaking Change
* Upgrade to 4.0.18
  * Breaking Change
  * Action Required
  * Steps to Update

### [Technical Support](https://docs.avohq.io/4.0/technical-support.html)

* (No headings found)

### [🤖 Agentic engineering](https://docs.avohq.io/4.0/agentic-engineering.html)

* Code editors and LLM setup
  * Pick your tool
* Skills
  * Core
  * Config & ops
  * Customization
  * Add-ons
  * Cross-cutting
* MCP server
* Suggested workflow

## Configuration

### [Installation](https://docs.avohq.io/4.0/installation.html)

* Requirements
* Installing Avo
  * 1. One-command install
  * 2. Manual, step by step.
  * 3. In popular Rails starter kits
    * Bullet Train
    * Jumpstart Pro
* Install from GitHub
* Mount Avo to a subdomain
* Next steps

### [Routing](https://docs.avohq.io/4.0/routing.html)

* Default mounting behavior
* Mount Avo under a scope
* Mount Avo under a nested path
* Serve Avo from a custom map in config.ru
* Namespaced resource routes
* Add your own routes

### [Customization API](https://docs.avohq.io/4.0/customization-api.html#routing)

* Application
* Index view
* Layout
* Behavior
* Development and generators
* Status and metadata
* Routing
* Licensing
* Authentication
* Authorization
* Localization
* Appearance
* Cache
* Keyboard shortcuts
* Menus
* Breadcrumbs
* Search
* Resources
* Field discovery
* Fields layout
* TailwindCSS

### [Gem server authentication](https://docs.avohq.io/4.0/gem-server-authentication.html)

* On the server and CI systems
  * Heroku
  * Hatchbox
  * GitHub Actions
    * 1. Add BUNDLEPACKAGERDEV to your repository's secrets
    * 2. Expose BUNDLEPACKAGERDEV as an environment variable
  * Docker and Docker Compose
  * Kamal
* On your local development environment
* Add Avo to your Gemfile
* Bundle without the paid gems
* FAQ
  * Forbidden 403
  * Forbidden 403 in a sandboxed or cloud environment (Cursor Cloud)

### [License troubleshooting](https://docs.avohq.io/4.0/license-troubleshooting.html)

* Check the license status page
* Frequent issues

### [Authentication](https://docs.avohq.io/4.0/authentication.html)

* Customize the currentuser method
* Customize the profile widget
* Customize the sign-out link
  * Customize the current user resource name
  * Customize the entire sign-out path
* Filter out requests
* authenticatewith method
* User roles
    * Check if a user is an admin
    * When does Avo check if the use is an admin (isadmin?)
  * Check if a user is an developer
  * When does Avo check if the use is an developer (isdeveloper?)
  * Customize the methods that check for roles
* Authorization

### [Authorization](https://docs.avohq.io/4.0/authorization.html)

* Ensure Avo knows who your current user is
* Policies
* Associations
  * Example scenario
* Removing duplication
* Attachments
* Scopes
* Using different policy methods
* Use Resource's Policy to authorize custom actions
* Raise errors when policies are missing
* Logs
* Custom policies
* Custom authorization clients
  * How Avo uses your client
    * policy(user, record)
    * authorize(user, record, action, policyclass:, raiseexception:, kwargs)
    * applypolicy(user, model, policyclass:)
  * Change the authorization client
  * Client methods
    * authorize
    * policy
    * policy!
    * applypolicy
  * Action Policy example
* Explicit authorization
  * Possible values
  * Default
  * Configuration:
  * Examples:
* Rolify integration

### [Performance](https://docs.avohq.io/4.0/performance.html)

* Cache store selection
  * Custom selection
* Row caching
* Caching caveats
  * Rows may not be automatically updated when certain associations change
    * Option 1: Use touch: true on association
    * Option 2: override cachehash method on resource to take associations in consideration
  * rootpath change won't break the cache keys
* Solid Cache
* Log ViewComponent loading times and allocations
    * 1. Enable ViewComponent Instrumentation
    * 2. Add Logging

## Resources

### [Overview](https://docs.avohq.io/4.0/resources.html)

* Overview
* Generate resources
  * Alongside a model
  * With the resource generator
  * For all your models
* Fields
* Routing
* Name and describe records
* Avoid n+1 queries
* Control sorting
* Customize how records are fetched
* Customize pagination
* Control the saving flow
* Tweak the Index view
* Record previews
* Manage sidebar presence and shortcuts
* Link to the record's public page
* Swap the view components
* Use multiple resources for the same model
* Namespaced resources
* Views
* Extending Avo::ResourcesController
  * --parent-controller option on the generators
  * resourceparentcontroller configuration option
  * Attach concerns to Avo::BaseController
* Manually registering resources
* Extending Avo::BaseResource
* Modify controls placement and appearance
* Cards

### [Resources API](https://docs.avohq.io/4.0/resources-api.html)

* Identity
* Index view
    * Examples
* Forms and saving
* Navigation
* Performance
* Customization
* Options documented on their own pages

### [Array Resource](https://docs.avohq.io/4.0/array-resource.html)

* Render it inside another resource

### [HTTP Resource](https://docs.avohq.io/4.0/http-resource.html)

* Install the gem
* Generate a resource
* Parse the API response
* Send authentication headers
* Map sorting and filtering to query params
* Customize the backing model
* Handle API errors
* Customize create, update, and destroy
* Debug console
  * Add it to the sidebar
  * JSON API
* Full example

### [HTTP Resource API](https://docs.avohq.io/4.0/http-resource-api.html)

* Request options
* Response parsing
* Model customization

### [Scopes](https://docs.avohq.io/4.0/scopes.html)

* Generate a scope
* Register the scope on a resource
  * Set a default scope
  * Remove the "All" scope
* Show record counts
* Control who sees a scope
* Dynamic values
* Limit index columns per scope
* Full example

### [Scopes API](https://docs.avohq.io/4.0/scopes-api.html)

* Execution context
* Scope class options
* Registration options

### [Record reordering](https://docs.avohq.io/4.0/record-reordering.html)

* Set up reordering with actsaslist
* Always show the order buttons
* Choose where the buttons appear
* Sort the Index view by position
* Reorder using drag and drop
  * Custom position attribute
* Authorization

### [Record reordering API](https://docs.avohq.io/4.0/record-reordering-api.html)

* Ordering actions
* Visibility
* Drag and drop

### [Discreet information](https://docs.avohq.io/4.0/discreet-information.html)

* Show the record's ID
* Show timestamps without using a field
* Add a custom item
* Turn an item into a link
* Show an item conditionally
* Full example

### [Discreet Information API](https://docs.avohq.io/4.0/discreet-information-api.html)

* Preconfigured items
* Custom item options

### [Custom controls](https://docs.avohq.io/4.0/custom-controls.html)

* Customize the show controls
* Customize the edit controls
* Customize the index controls
* Customize the row controls
* Keep the default controls
* What you can put in a control
  * Links
  * Built-in controls
  * Actions
  * Turbo triggers
  * JavaScript triggers
* Group links and actions in a dropdown
* Conditionally show controls

### [Custom controls API](https://docs.avohq.io/4.0/custom-controls-api.html)

* Control areas
* Controls
    * exclude
    * include
    * target
    * data
    * class
* Control options

### [Actions](https://docs.avohq.io/4.0/actions.html)

* What happens when an action runs
* Generate an action
* Register the action on a resource
* Collect input with fields
* Write the handle method
* Give feedback to the user
* Control what happens after execution
  * Build a multi-step flow
* Customize the modal
* Run an action without records
* Control visibility and authorization
* Trigger an action from a link
* Read params from the page that triggered the action
* StimulusJS

### [Actions API](https://docs.avohq.io/4.0/actions-api.html)

* Registration
* Modal and appearance
* Behavior
* The handle method
* Feedback methods
* Response methods
* Class methods

### [Select All](https://docs.avohq.io/4.0/select-all.html)

* How does it work?
* Serializing the query
* Serialization known issues

### [Cover and Avatar](https://docs.avohq.io/4.0/cover-and-avatar.html)

* Add an avatar
* Add a cover photo
* Options

### [Views](https://docs.avohq.io/4.0/views.html)

* Index
* Show
* Edit
* New
* View groups
  * Display
  * Form
  * Single
* Preview
* Checking the current view
* Multiple ways to check
* Common visibleon configuration values
* View types
  * Restrict the available view types

### [Table view](https://docs.avohq.io/4.0/table-view.html)

* Row controls
  * Global configuration
  * Resource configuration
* Style rows with rowoptions
  * Configuration shape
  * Examples
    * Highlight by record state
    * Dim soft-deleted rows
    * Branch on render context
    * Conditional return values
  * Hover and selection co-existence
  * Dark mode
  * Tailwind class discovery
  * Performance
  * Migration from row component overrides
  * Limitations

### [Table view API](https://docs.avohq.io/4.0/table-view-api.html)

* Row controls
* Row styling
  * Supported keys
    * Other HTML attributes
  * Reserved data keys
  * Denied attributes

### [Grid view](https://docs.avohq.io/4.0/grid-view.html)

* Enable grid view
* Options
* Make grid the default view
* Custom style
* Grid Item Badge
  * Complete Example
  * Options

### [Map view](https://docs.avohq.io/4.0/map-view.html)

* Enable map view
* Make it the default view

### [Custom view types](https://docs.avohq.io/4.0/custom-view-types.html)

* 1. Create the view type component
* 2. Register the view type
* 3. Configure a resource to use it
* Full example: avo-notifications
* Add styles and interactivity

## Fields

### [Fields](https://docs.avohq.io/4.0/fields.html)

* Declaring fields
  * Specific methods for each view
* Field conventions
  * A more complex example
* Field types

### [Field options](https://docs.avohq.io/4.0/field-options.html)

* Change the field label
* Show and hide fields on different views
* Show fields conditionally
* Compute the value with a block
* Format displayed values
  * On every view
  * On specific views
  * With Rails helpers
* Parse the value before saving
* Make columns sortable
  * Sort computed fields and associations
* Mark fields as required
* Prevent users from editing a field
* Set a default value
* Add help text
* Add a placeholder
* Place fields on the same row
  * Stack the label above the value
    * inline layout (default)
    * stacked layout
  * Global stacked layout
* Store empty values as NULL
* Link the table cell to the record
* Summarize a column
* Let users copy the value
* Align text on the Index view
* Customize the field components
  * Eject the field components
  * Point the field at your components
* Target a different database attribute
* Pass arbitrary data to the field
* React to changes in other fields
  * Dependent select
  * Derived value (slug from name)

### [Field options API](https://docs.avohq.io/4.0/field-options-api.html)

* Naming and description
* Visibility on views
* Formatting values
* Form behavior
* Index view
* Layout and rendering
* Advanced

### [HTML attributes](https://docs.avohq.io/4.0/html.html)

* Declare the fields from the outside in
* The object notation
* The block notation
* Where are the attributes added?

### [Field discovery](https://docs.avohq.io/4.0/field-discovery.html)

* Scope which fields are discovered
* Pass options to every discovered field
* Combine manual and discovered fields
* Override how columns map to fields

### [Field Discovery API](https://docs.avohq.io/4.0/field-discovery-api.html)

* Method options
* Discovery behavior
  * Mapping precedence
  * Ignored columns
  * Association defaults
* Global configuration
* Default mappings
  * Column names
  * Column types
  * Associations

### [Layout](https://docs.avohq.io/4.0/fields-layout.html)

* Layout building blocks
* Header
* Group fields into panels
  * How Avo computes panels
  * Index view fields
* Move compact fields to a sidebar
* Organize fields under tabs
  * Loading behavior on Show and Edit
  * Durable and bookmarkable selection
* Position labels: inline vs. stacked
* Multi-column rows with width

### [Fields layout API](https://docs.avohq.io/4.0/fields-layout-api.html)

* Header
* Panels
* Sidebar
* Tabs

### [Area](https://docs.avohq.io/4.0/fields/area.html)

* Description
* Options
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values
* Full example

### [Array](https://docs.avohq.io/4.0/fields/array.html)

* Example 1: Array field with a block
* Example 2: Array field fetching data from the model's method
* Example 3: Fallback to the records method
* Summary of Data Fetching Hierarchy

### [Avatar](https://docs.avohq.io/4.0/fields/avatar.html)

* (No headings found)

### [Badge](https://docs.avohq.io/4.0/fields/badge.html)

* Description
* Options
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values
* Examples
  * Using semantic colors
  * Using base colors
  * Using Badge with a Select field for editing

### [Boolean](https://docs.avohq.io/4.0/fields/boolean.html)

* Options
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values

### [Boolean group](https://docs.avohq.io/4.0/fields/boolean_group.html)

  * DB payload example
  * Field declaration example
* Options
    * Default value
    * Computed options
* Updates

### [Checkbox list](https://docs.avohq.io/4.0/fields/checkbox_list.html)

* Options

### [Code](https://docs.avohq.io/4.0/fields/code.html)

* Options
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values

### [Country](https://docs.avohq.io/4.0/fields/country.html)

* Options
    * Default value
    * Possible values
    * Default value
    * Possible values

### [Date](https://docs.avohq.io/4.0/fields/date.html)

* Options

### [Date time](https://docs.avohq.io/4.0/fields/date_time.html)

* Options

### [Easy MDE](https://docs.avohq.io/4.0/fields/easy_mde.html)

* Options
    * Default value
    * Possible values

### [External image](https://docs.avohq.io/4.0/fields/external_image.html)

* Options
    * Default value
    * Possible values
    * Example with proc
    * Default value
    * Possible values
    * Example with proc
    * Default value
    * Possible values
    * Example with proc
* Conditional sizing based on view
* Use computed values
* Use in the Grid cover position

### [File](https://docs.avohq.io/4.0/fields/file.html)

* Variants
  * Example:
* Options

### [Files](https://docs.avohq.io/4.0/fields/files.html)

* Options
    * Default value
    * Possible values
    * Default value
    * Possible values

### [Gravatar](https://docs.avohq.io/4.0/fields/gravatar.html)

* Options
    * Default value
    * Possible values
    * Default value
    * Possible values
* Using computed values

### [Heading](https://docs.avohq.io/4.0/fields/heading.html)

* Options
    * Default value
    * Possible values

### [Hidden](https://docs.avohq.io/4.0/fields/hidden.html)

  * Example usage:

### [Id](https://docs.avohq.io/4.0/fields/id.html)

* Options

### [Key value](https://docs.avohq.io/4.0/fields/key_value.html)

* Options
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values
* Customizing the labels
* Enforce restrictions

### [Location](https://docs.avohq.io/4.0/fields/location.html)

* Description
* Options
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values

### [Markdown](https://docs.avohq.io/4.0/fields/markdown.html)

* Supported features
* Customize the renderer
* Options
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values

### [Money](https://docs.avohq.io/4.0/fields/money.html)

* Money Field Example
  * Example on new
  * Example on show
  * Example on index
* Installation
* Options
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values

### [Number](https://docs.avohq.io/4.0/fields/number.html)

* Options
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values
* Examples

### [Password](https://docs.avohq.io/4.0/fields/password.html)

* Options
    * Default value
    * Possible values
* Related

### [Preview](https://docs.avohq.io/4.0/fields/preview.html)

* Define the fields
* Authorization

### [Progress bar](https://docs.avohq.io/4.0/fields/progress_bar.html)

* Options
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values
* Examples

### [Radio](https://docs.avohq.io/4.0/fields/radio.html)

  * Field declaration example
* Options
    * Default value
    * Possible values
    * Default value
    * Possible values

### [Record link](https://docs.avohq.io/4.0/fields/record_link.html)

* Options
    * Default value
    * Possible values
    * Example
    * Default value
    * Possible values
    * Example
    * Default value
    * Possible values
    * Example
* Using computed values
    * Example

### [Rhino](https://docs.avohq.io/4.0/fields/rhino.html)

* Options

### [Select](https://docs.avohq.io/4.0/fields/select.html)

* Options
    * Default value
    * Possible values
  * Computed options
    * Default value
    * Possible values
  * Computed grouped options
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values

### [Stars](https://docs.avohq.io/4.0/fields/stars.html)

* Options
    * Default value
    * Possible values
* Examples

### [Status](https://docs.avohq.io/4.0/fields/status.html)

* Options
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values

### [Tags](https://docs.avohq.io/4.0/fields/tags.html)

* Options
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values
* PostgreSQL array fields
* Acts as taggable on
* Array fields

### [Text](https://docs.avohq.io/4.0/fields/text.html)

* Options
    * Default value
    * Possible values
* Customization

### [Textarea](https://docs.avohq.io/4.0/fields/textarea.html)

* Options
    * Default value
    * Possible values

### [Time](https://docs.avohq.io/4.0/fields/time.html)

* Options

### [Tip Tap](https://docs.avohq.io/4.0/fields/tip_tap.html)

* (No headings found)

### [Trix](https://docs.avohq.io/4.0/fields/trix.html)

* Options
    * Default value
    * Possible values
* File attachments
* Disable attachments
* Remove attachment attributes
* Active Storage
* Action Text
* Demo app
* Javascript Alert Messages

### [Overview](https://docs.avohq.io/4.0/associations.html)

* Common options
* Show or hide the association buttons
* Single Table Inheritance (STI)
* Link to child resource when using STI
* Add custom labels to the associations' pages

### [Searchable](https://docs.avohq.io/4.0/associations/searchable.html)

* Requirements
* Boolean form
* Hash form
  * query:
  * enabled:
  * item:
* Default options
* Polymorphic belongsto
  * With boolean form
  * With hash form

### [Searchable associations API](https://docs.avohq.io/4.0/associations/searchable-api.html)

* Boolean form
* Hash form
* Options
    * Polymorphic fields

### [Belongs to](https://docs.avohq.io/4.0/associations/belongs_to.html)

* Overview
* Polymorphic belongsto
* Polymorphic help
* Belongs to attach scope
* Allow detaching via the association
* Options
    * Default value
    * Possible values
    * Example
    * Default value
    * Possible values
    * Example
    * Default value
    * Possible values
    * Default value
    * Possible values
    * Default value
    * Possible values

### [Has one](https://docs.avohq.io/4.0/associations/has_one.html)

* Options

### [Has many](https://docs.avohq.io/4.0/associations/has_many.html)

* Options
* Has Many Through

### [Has and belongs to many](https://docs.avohq.io/4.0/associations/has_and_belongs_to_many.html)

* Options

## Filters

### [Overview](https://docs.avohq.io/4.0/filters.html)

* Basic filters
* Dynamic filters
* Which one should you use?
* Common behavior
* Dive deeper

### [Basic Filters](https://docs.avohq.io/4.0/basic-filters.html)

* Generate a filter
* Register the filter on a resource
* Pick a filter type
  * Boolean filter
  * Select filter
  * Multiple select filter
  * Text filter
  * Date time filter
* Set a default value
* Populate options dynamically
  * Compose filters that depend on each other
* React to other filters
* Show a message when there are no options
* Show or hide a filter conditionally
* Pass arguments to a filter
* Keep the filters panel open
* Link to a pre-filtered view
* Open a filter in your editor

### [Basic filters API](https://docs.avohq.io/4.0/basic-filters-api.html)

* Class options
* Instance methods
* Runtime objects
* Date time filter options
* Registration
* URL encoding helpers

### [Dynamic Filters](https://docs.avohq.io/4.0/dynamic-filters.html)

* Authorize the attributes for Ransack
* How conditions combine
* Filter types
* Customize a filter
  * Restrict or rename the conditions
  * Write a custom query
  * Filter across multiple columns or associations
  * Offer suggestions or fetch values from an API
  * Apply instantly, without the Apply button
  * Humanize the filter pills
* Configure the filters bar
* Caveats
* Guides & Tutorials
    * belongsto example
    * hasmany example
  * The problem: repetitive filter code
  * Method 1: helper method with field configuration
  * Method 2: separate fields and filters with helper
  * Method 3: programmatic filter generation
  * Method 4: custom DSL with method override
  * Choosing the right approach

### [Dynamic filters API](https://docs.avohq.io/4.0/dynamic-filters-api.html)

* Filter options
* Global configuration
* Filter types and their conditions
  * Boolean
  * Date
  * Number
  * Select
  * Text
  * Tags
* Field-to-filter mapping

## Customize Avo

### [Customization](https://docs.avohq.io/4.0/customization.html)

* Change the app name
* Timezone and currency
* Resource Index view
  * Per-page pagination
  * Default view type
  * Sorting direction
  * Row density
  * Click a row to view the record
  * Cache resources on the Index view
  * Search debounce
  * Modify controls placement and appearance
* ID links to resource
* Container width
  * Upgrading from fullwidthcontainer / fullwidthindexview
* Toggle the sidebar button visibility
* Resizable sidebar
  * Change the starting width
  * Turn resizing off
* Body classes
* Hide the layout when printing
* Home path
* Skip show view
* Open a record in your editor
  * Resources
  * Actions
  * Filters
  * Dashboards
  * Cards
  * Forms
* Context
* Alerts
* Persist UI state
* Associations
  * Lookup list limit
  * Association frames
* Turbo
* Default URL options
* Logger
* Status page
* Usage metadata
* Generators
  * Custom viewcomponent path
  * Generate Avo resources alongside models
* Page titles
* Mount Avo under a nested path
* Custom query scopes
* Customize profile name, photo, and title
* Eject
* Breadcrumbs

### [Customization API](https://docs.avohq.io/4.0/customization-api.html)

* Application
* Index view
* Layout
* Behavior
* Development and generators
* Status and metadata
* Routing
* Licensing
* Authentication
* Authorization
* Localization
* Appearance
* Cache
* Keyboard shortcuts
* Menus
* Breadcrumbs
* Search
* Resources
* Field discovery
* Fields layout
* TailwindCSS

### [Eject views](https://docs.avohq.io/4.0/eject-views.html)

* Eject a partial
  * Prepared templates
* Eject a component
* Eject field components
* Scope ejected components
* Eject a controller
* Options reference

### [Menu editor](https://docs.avohq.io/4.0/menu-editor.html)

* Menu item types
* Add everything at once
* Sub-items
* Trigger actions from the menu
* Item visibility
* Authorization
* Add data attributes to items
* Icons
* Keyboard shortcuts on menu items
* Collapsable sections and groups
  * Default collapsed state
* Profile menu
  * Forms in the profile menu
  * Custom content in the profile menu
* Header menu

### [Menu editor API](https://docs.avohq.io/4.0/menu-editor-api.html)

* Structure items
* Item types
* Bulk helpers
* Shared options

### [Search](https://docs.avohq.io/4.0/search.html)

* Enable search for a resource
* Run a different query per surface
* Search within associations
* Authorize search
* Limit the number of results
* Global search {#global-search}
  * Direct record lookup
  * Navigation section
  * Configure the global search
  * Hide a resource from the global search {#hideonglobal}
  * Customize how results render
* Custom search providers

### [Search API](https://docs.avohq.io/4.0/search-api.html)

* Resource configuration
* searchtype
* Global search configuration
* Limiting results {#limiting-results}
* Custom search providers

### [Keyboard Shortcuts](https://docs.avohq.io/4.0/keyboard-shortcuts.html)

* Configure keyboard shortcuts
* Global shortcuts
* Appearance shortcuts
* Index view
* Show view
* Edit view
* Action modal
* Assign hotkeys to the sidebar menu
* Add your own shortcuts
* Shortcuts hidden inside association panels

### [Localization (I18n)](https://docs.avohq.io/4.0/i18n.html)

* Localizing resources
* Localizing actions
* Localizing fields
* Localizing buttons label
* Setting the locale
* Right-to-left locales
* Customize the locale
* FAQ
  * The I18n.t method defaults to the name of that field/resource
  * Using a Route Scope for Localization

### [Appearance](https://docs.avohq.io/4.0/appearance.html)

* Customize the logo
  * Desktop logo
  * Dark mode logo
  * Mobile logomark
  * Favicon
  * Placeholder image
* Set the default color scheme
* Choose a neutral palette
  * Preset
  * Custom neutral palette
* Choose an accent palette
  * Preset
  * Custom accent palette
* Restricting picker options
* Locking choices
* Persist picks across devices
  * Cookie (default)
  * Database
    * How the blocks receive data
    * Required schema
* Change the switcher layout
* Customize chart colors
* CSS customization
  * Applying overrides
* Full example
* Options reference

### [Appearance API](https://docs.avohq.io/4.0/appearance-api.html)

* Theme selection
* Custom palettes
* Picker control
* Persistence
* Assets
* Charts
* CSS variables
  * Layout
  * Top navbar
  * Sidebar
  * Table
  * Focus ring
  * Motion speed

### [Theming](https://docs.avohq.io/4.0/theming.html)

* Do it by hand
* Recolor with the appearance config
* Re-skin with CSS variables
  * Let an AI agent do it
* Fine-tune specific components
  * Set a background image
* Style your custom UI
* Eject a view for full control

### [Multitenancy](https://docs.avohq.io/4.0/multitenancy.html)

* Breakdown
* Route-based tenancy
  * 1. Set the proper routing pattern
  * 2. Keep the tenant in every generated URL
  * 3. Set the tenant for each request
* Session-based tenancy
  * 1. Set the tenant for each request
  * 2. Add an account switcher
* See also

### [Custom tools](https://docs.avohq.io/4.0/custom-tools.html)

* Generate tools
  * Controller
  * Route
  * Sidebar item
  * Customize the sidebar
* What's available in your tool
* Set the page title
* Add assets
* Using helpers from your app
  * Using path helpers
    * For Avo paths
    * For the main app paths

### [Resource tools](https://docs.avohq.io/4.0/resource-tools.html)

* Generate a resource tool
* Partial context
* Tool visibility
  * Using path helpers
    * For Avo paths
    * For the main app paths
* Add custom fields on forms
* Where to add logic

### [Custom fields](https://docs.avohq.io/4.0/custom-fields.html)

* Generate a new field
* Start from an existing field
* Field options
* Field Visibility
* What's available in your components
  * How the field wrapper ties it together
* Customize the views
* Field assets
* Use pre-built Stimulus controllers
  * Hidden input controller
  * Non existing model field
* Field methods

### [Custom errors](https://docs.avohq.io/4.0/custom-errors.html)

* Add a custom error
  * Errors on a join record
* Where errors appear

### [Asset handling](https://docs.avohq.io/4.0/asset-handling.html)

* Supported asset pipelines
* How Avo ships its own assets
* Add your own CSS and JavaScript
  * With Importmap
  * With jsbundling and esbuild
  * With rollup or webpack
  * Manually (Sprockets or Propshaft)
* Load order and overriding Avo's styles
* Add custom styles or Tailwind classes
* Exclude Avo's assets from a CDN
* Add assets from a plugin

### [JavaScript & Stimulus](https://docs.avohq.io/4.0/javascript.html)

* Assign Stimulus controllers to resource views
  * Field wrappers as targets
  * Field inputs as targets
  * All controllers receive the view value
* Assign Stimulus controllers to actions
* Attach HTML attributes
* Composing the attributes together
* Pre-made stimulus methods
  * resource-edit#toggle
  * resource-edit#disable
  * resource-edit#debugOnInput
* Custom Stimulus controllers
* Use Stimulus JS in a tool
  * Set up a controller
  * Register that controller with the current Stimulus app
  * Use the controller in the Avo tool

### [TailwindCSS integration](https://docs.avohq.io/4.0/tailwindcss-integration.html)

* Auto-enable behavior
* Add your custom Avo styles
* Override styles and scripts (avo-overrides.css / avo-overrides.js)
  * Add behavior with Stimulus
* Disable integration (opt-out)
* Host content scan paths (tailwindcsscontentsources)
* Debugging

### [Plugins](https://docs.avohq.io/4.0/plugins.html)

* Overview
  * Light layer
* Register the plugin
* Hook into Avo
* Hooks
* Registration API
* Add asset files
* Using a middleware to surface asset files
* Create your own plugin

### [<code>Avo.asset_manager</code>](https://docs.avohq.io/4.0/asset-manager.html)

* Add a stylesheet file
* Add a javascript file
* Register a Stimulus controller

## Concepts

### [Overview](https://docs.avohq.io/4.0/concepts.html)

* What's here
* What belongs here

### [Breadcrumbs](https://docs.avohq.io/4.0/breadcrumbs.html)

* Change the starting breadcrumb
* Add a breadcrumb
  * addbreadcrumb options
* Breadcrumbs for custom pages

### [Tooltips](https://docs.avohq.io/4.0/tooltips.html)

* Add a tooltip to any element
* Use it with Avo's buttons and links
* Show rich, HTML tooltips
* Re-initialize after injecting markup
* Built-in tooltips

### [Icons](https://docs.avohq.io/4.0/icons.html)

* How to use
* Libraries
  * 1. The Avo icons
  * 2. Tabler
    * Example:
  * 3. Heroicons
    * Examples:
* Use your own icons

### [Resource controllers](https://docs.avohq.io/4.0/controllers.html)

* Change where the user is redirected
* Customize the flash messages
* Return a custom response
* Change how records are saved or destroyed

### [Resource controllers API](https://docs.avohq.io/4.0/controllers-api.html)

* Create methods
* Update methods
* Destroy methods
* Persistence methods

### [How pages are rendered](https://docs.avohq.io/4.0/how-pages-are-rendered.html)

* The request lifecycle
* 1. The beforeaction chain
* 2. The action method
* 3. Choosing the view component
* 4. The layout
* 5. The ERB template
* Turbo Stream responses
* Where to hook in

### [Rails engines and path helpers](https://docs.avohq.io/4.0/rails-engines-paths.html)

* The rule
* Inside the Avo engine
  * Linking to Avo pages
  * Linking to your main application
  * Linking to Avo add-ons
  * Inside view components
* Why this matters
* Quick reference
* Learn more

## Add-ons

### [Notifications](https://docs.avohq.io/4.0/notifications.html)

* Requirements
* Installation
  * 1. Install the gem
  * 2. Run the installer
  * 3. Run migrations
  * 4. Include the concern in your User model
* Configuration
* Sending notifications
  * Who receives a notification
  * Choosing a level
  * Tagging with a type
  * Adding action buttons
  * From Avo actions
  * From model callbacks
  * From background jobs
* Notification states
* Reading notifications
* Bell component
* Real-time delivery
  * How it works
  * ActionCable setup
* Notification resource
  * Scopes
  * Bulk actions
* Cleanup

### [Notifications API](https://docs.avohq.io/4.0/notifications-api.html)

* Configuration
* Send parameters
* Query and state API
* User model methods

### [Media Library](https://docs.avohq.io/4.0/media-library.html)

* How to enable it
* Hide menu item
* Add it to the menu editor
* Use it with the rich text editors
  * Disable it on a single markdown field

### [Audit Logging](https://docs.avohq.io/4.0/audit-logging.html)

* Requirements
* Installation
  * 1. Install the gem
  * 2. Run the installer
  * 3. Migrate
* Enable and configure audit logging
  * Enable it globally
  * Configure author models
  * Enable specific resources and actions
* Display logged activities
  * Show activities on a specific record
  * View and navigate activity logs
  * Enable change logs and revert changes
  * Show all activity by an author
  * Show an overview of all activities
* Disable specific actions logging
* Conclusion

### [Dashboards](https://docs.avohq.io/4.0/dashboards.html)

* Generate a dashboard
* Settings
* Global ranges
* Cards
  * Override card arguments from the dashboard
    * Control the base settings from the parent
* Dashboards visibility
* Dashboards authorization

### [Dashboards API](https://docs.avohq.io/4.0/dashboards-api.html)

* Identity and layout
* Ranges
* Visibility and authorization

### [Cards](https://docs.avohq.io/4.0/cards.html)

* Base settings
  * description
  * discreetdescription
* Ranges
    * Control the aggregation using ranges
* Keep the data fresh
* Hide the header
* Format
* Metric card
    * Calculate results
  * Decorate the data using prefix and suffix
* Chartkick card
  * Chart types
  * Customize chart
* Partial card
* HTML card
  * Inline ERB string
  * Tag builder
  * Renderables
* Table card
  * Headers
  * Row links
  * Density
  * Empty state
  * Ranges and refreshing
* List card
* Cards visibility
* Dividers

### [Cards API](https://docs.avohq.io/4.0/cards-api.html)

* Base settings
* Ranges
* Metric card
* Chartkick card
* Partial card
* HTML card
* Data cards (table & list)
* Registration overrides
* Dividers

### [Kanban board](https://docs.avohq.io/4.0/kanban-boards.html)

* Overview
* Requirements
* Installation
* DB schema
* Create a kanban board
* Create columns
* Configure the board
* Adding items to the board
* How does it work?
  * Board and Columns
  * Resources and Items
  * Add items to the board
  * Move items between columns
  * Items without that property
* Customize the card
* Authorization
  * Authorization Methods
* Customizing kanban models for your business logic

### [Forms and pages](https://docs.avohq.io/4.0/forms-and-pages.html)

* Install the add-on
* Quick start
* How it works
* Generate forms and pages
* Build a form's fields
  * Group fields with cards and panels
  * Place fields side by side
  * Prefill from a record
* Handle a form's submission
  * Flash messages
* Reusable vs. inline forms
* Render a form anywhere
* Organize pages
* Build a page's navigation
* Put forms on a page
* Name the menu entry
* Add pages to the main menu
* Full example
* Best practices

### [Forms & Pages API](https://docs.avohq.io/4.0/forms-and-pages-api.html)

* Shared attributes
* Form methods
* Page attributes
* Page navigation and content

### [REST API](https://docs.avohq.io/4.0/rest-api.html)

* Installation
  * Set the token pepper
* Mount the API
  * Mount options
* Endpoints
* Authentication
  * Managing API tokens
  * The setupauthentication code hook
* Permissions
* Reading data
  * Index
  * Show
  * Association traversal
  * Field serialization
* Writing data
  * Create
  * Update
  * Delete
  * Field value formats
* CSRF protection
* Custom controllers
  * Overridable methods
* Error handling
* Configuration reference
  * mountavoapi
  * managetokensif
  * Token pepper

### [Collaboration](https://docs.avohq.io/4.0/collaboration.html)

* Installation
* Enable collaboration on a resource
  * Set the author name
  * Watch property changes
  * Customize reactions
* Place the timeline
* Authorization
* Extend the collaboration models

### [Collaboration API](https://docs.avohq.io/4.0/collaboration-api.html)

* Resource configuration
* Timeline
* Authorization

## Internals

### [Overview](https://docs.avohq.io/4.0/internals.html)

* In this section
  * Public Methods and Internal Usage

### [Testing](https://docs.avohq.io/4.0/testing.html)

* Allow the license check host in your test suite
* Testing helpers
* Testing Actions

### [<code>Avo::Current</code>](https://docs.avohq.io/4.0/avo-current.html)

* (No headings found)

### [<code>Avo::ExecutionContext</code>](https://docs.avohq.io/4.0/execution-context.html)

* How does the ExecutionContext work?
* Common objects

### [<code>Avo::Services::EncryptionService</code>](https://docs.avohq.io/4.0/encryption-service.html)

* How does the Avo::Services::EncryptionService work?
  * Public methods
  * Mandatory arguments:
  * Optional arguments
* Usage example
  * Basic text:
  * Objects with custom serializer:
* Secret key base

### [Reserved model names and routes](https://docs.avohq.io/4.0/internal-model-names.html)

* Model names to avoid
* Why these names are reserved
* Alternative approaches
  * Using Avo with existing models
* Route Conflicts with resources :resources
  * How to Fix It

### [<code>Avo::ApplicationController</code>](https://docs.avohq.io/4.0/avo-application-controller.html)

* On extending the ApplicationController
* Responsibly extending the ApplicationController
* Override ApplicationController methods
