Avo 3.0 documentation map
A map of every Avo 3.0 documentation page and its headings, designed for easy navigation by LLMs.
For the concise index, see llms.txt. For the full text of every page in one file (large — high token count), see llms-full.txt. For this map as raw markdown, see 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 3
Intro
- The CRUD UI
- Dashboards
- Custom content
- Seamless upgrades
- Next up
- Walkthrough videos
- Build a blog admin panel
- Build a booking app
Avo 3
- Changes
- New features & big changes
- Features moved from one tier to another
- Features moved from Pro to Advanced
- Features moved from Pro to Community
- Repos and packages
- Feedback
- Documentation
- What next?
Upgrade guide
- Upgrade to 3.34.0
- What changed
- Action Required
- Upgrade to 3.32.4
- Breaking Change
- Action Required
- Upgrade to 3.22.0
- Breaking Change
- Action Required
- Maintaining Previous Behavior
- Breaking Change
- Action Required
- Steps to Update
- Upgrade to avo-kanban 0.1.18
- TL;DR
- Changes
- Upgrade to 3.18.0
- Breaking Changes
- Steps to Update
- Breaking Change
- Steps to Update
- Steps to Update
- Steps to Update
- Upgrade from 3.16.2 to 3.16.3
- What changed?
- Previous configuration (obsolete)
- New configuration
- What changed?
- Upgrade from 3.16.1 to 3.16.2
- Upgrade from 3.15.3 to 3.15.4
- Persistent Pagination Behavior
- Upgrade from 3.14.0 to 3.14.1
- Upgrade from 3.13.6 to 3.13.7
- Upgrade from 3.13.3 to 3.13.4
- Upgrade from 3.11.7 to 3.11.8
- Upgrade from 3.10.10 to 3.11.3
- Upgrade from 3.10.9 to 3.10.10
- Upgrade from 3.10.6 to 3.10.7
- Upgrade from 3.10 to 3.11
- Actions no longer need to be registered inside actions method
- Upgrade from 3.9.2 to 3.10
- Upgrade from 3.9.1 to 3.9.2
- Upgrade from 3.7.4 to 3.9.1
- Steps to update
- Skip versions 3.8.x and 3.9.0
- Upgrade from 3.6.1 to 3.6.2
- Upgrade from 3.5.4 to 3.5.5
- Upgrade from 3.4.2 to 3.4.3
- Upgrade from 3.4.1 to 3.4.2
- What to do?
- Upgrade from 3.3.0 to 3.4.0
- Upgrade from 3.2.2 to 3.3.0
- Upgrade from 3.1.3 to 3.1.4
- Upgrade from 3.0.1.beta24 to 3.0.2
- Use self.includes option
- Use self.indexquery option
- Upgrade from 3.0.1.beta23 to 3.0.1.beta24
- Upgrade from 3.0.1.beta22 to 3.0.1.beta23
- Upgrade from 3.0.1.beta8 to 3.0.1.beta9
- Upgrade from 3.0.1.beta5 to 3.0.1.beta6
Avo 2 to Avo 3 upgrade
- Upgrade from 2.x to 3.x
- Use the automatic upgrade tool
- Upgrade steps
- Actions to take
- Actions to take
- Actions to take
- Actions to take
- Actions to take
- Actions to take
- Actions to take
- Actions to take
- Actions to take
- Actions to take
- Actions to take
- Actions to take
Technical Support
- (No headings found)
Best practices
- Avoiding n+1 using self.includes
- Avoid using if/else statements in def fields
- Example:
- Add an index on the createdat column
Code editors and LLM setup
- (Page source not found)
Configuration
Installation
- Requirements
- Installing Avo
- One-command install
- Manual, step by step.
- In popular Rails starter kits
- Bullet Train
- Jumpstart Pro
- Install from GitHub
- Mount Avo to a subdomain
- Next steps
Gem server authentication
- On the server and CI systems
- On your local development environment
- Add Avo to your Gemfile
- Add BUNDLEPACKAGERDEV to your repository's secrets
- Expose BUNDLEPACKAGERDEV as an environment variable
- Bundle without paid gems
- FAQ
License troubleshooting
- Check the license status page
- Frequent issues
Authentication
- Customize the currentuser method
- 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 user 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
- 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
- Change the authorization client
- Client methods
- Explicit authorization
- Possible values
- Default
- Configuration:
- Examples:
- Migration Recommendations:
- Rolify integration
CRUD UI
Resources
- Overview
- Resources from model generation
- Manually defining resources
- Generating resources for all models
- What it does
- Fields
- Routing
- 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
- How to Customize Avo::BaseResource
- Your resource files
- Resource Options
- Using a computed title
- title as a block
- Set the description as a string
- Set the description as a block
- Related
- Related
- Unscoped queries on Index
- Default
- Possible values
- Default
- Possible values
- Possible values
- type
- Possible values
- Default
- size
- Possible values
- Default
- Examples
- Default
- Countless
- Countless and "pageless"
- Usage
- Cards
Array Resources
- Overview
- Sorting
- Performance Considerations
- Creating an Array Resource
- Defining the records Method
- Example
- Defining Fields
Fields
- Declaring fields
- Specific methods for each view
- Field conventions
- A more complex example
- Field Types
Field options
- Common field option example
- Custom field option example
- Change field name
- Showing / Hiding fields on different views
- Field Visibility
- Computed Fields
- Fields Formatter
- Common formatting options
- Formatting with Rails helpers
- Parse value before update
- Sortable fields
- Custom sortable block
- Placeholder
- Required
- Disabled
- Disabled as a block
- Readonly
- Default Value
- Help text
- Nullable
- Link to record
- Align text on Index view
- Stacked layout
- inline layout (default)
- stacked layout
- Global stacked layout
- Field options
- Ejecting the field components
- Ejecting All Components for a Field
- Customizing field components using components option
- Attach HTML attributes
- How It Works
- Ejecting the field components
Field discovery
- Options
- Possible values
- Possible values
- Possible values
- Possible values
- Examples
- Basic Discovery
- Custom Field Options
- Combining Manual and Discovered Fields
- Automatic Type Mapping
- Association Discovery
Controller configuration
- Request-Response lifecycle
- Create methods
- Update methods
- Destroy methods
Record previews
- (No headings found)
Scopes
- Generating scopes
- Registering scopes
- Options
- Execution Context
- Full example
Records reordering
- Configuration
- Always show the order buttons
- Display the buttons in the Index view or association view
- Display the button on a hasmany association
- Possible values
- Change the scope on the Index view
- Reorder using drag and drop
- Custom position attribute
- Authorization
Discreet information
- Display the id
- Display the createdat and updatedat timestamps
- Options
- Full configuration
Customizable controls
- Default controls
- Customize the controls
- Controls
- Supported options
- Supported options
- Supported options
- Supported options
- exclude option
- Example
- include option
- Example
- Supported options
- Example
- Supported options
- Supported options
- Supported options
- Example
- Control Options
- Possible values
- Possible values
- Possible values
- Possible values
- Possible values
- Possible values
- Default values
- Conditionally hiding/showing actions
Cover and Profile Photos
- Profile photo
- Possible values
- Possible values
- Cover photo
- Possible values
- Possible values
- Possible values
Field types
Array
- 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
Badge
- Description
- Options
- Default value
- Examples
Boolean
- Options
- Default value
- Default value
- Default value
- Default value
Boolean group
- DB payload example
- Field declaration example
- Default value
- Computed options
- Updates
Code
- 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
- Options
- Default value
- Possible values
Date
- Options
Date time
- Options
Easy MDE
- Options
- Default
- Possible values
External image
- 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
- Variants
- Example:
- Options
Files
- Options
- Default
- Possible values
- Default
- Possible values
Gravatar
- Options
- Default
- Possible values
- Default
- Possible values
- Using computed values
Heading
- Options
Hidden
- Example usage:
Id
- Options
Key value
- Options
- Default
- Possible values
- Default
- Possible values
- Default
- Possible values
- Default
- Possible values
- Default
- Possible values
- Customizing the labels
- Enforce restrictions
Location
- Description
- Options
- Default value
- Possible values
- Default
- Possible values
- Default
- Possible values
Markdown
- Supported features
- Customize the renderer
- Possible values
- Code example
- Possible values
- Code example
- Possible values
- Code example
Money
- Money Field Example
- Example on new
- Example on show with currencies USD
- Example on show with currencies RON
- Example on index
- Installation
- Options
- Default
- Possible values
Number
- Options
- Default
- Possible values
- Default
- Possible values
- Default
- Possible values
- Examples
Password
* Revealable
Preview
- Define the fields
- Authorization
Progress bar
- Options
- Default
- Possible values
- Default
- Possible values
- Default
- Possible values
- Examples
Radio
- Field declaration example
- Default value
- Possible values
Record link
- Options
- Default value
- Possible values
- Example
- Default value
- Possible values
- Example
- Default value
- Possible values
- Example
- Using computed values
- Example
Rhino
- Options
- Contributing
Select
* Default
* Possible values
- Computed options
- Default
- Possible values
- Computed grouped options
- Default
- Possible values
- Default
- Possible values
- Default
- Possible values
Stars
- Options
- Default
- Possible values
- Examples
Status
- Options
- Default value
- Possible values
- Default value
- Possible values
- Default value
- Possible values
- Default value
- Possible values
Tags
- Options
- Default
- Possible values
- Default
- Possible values
- Default
- Possible values
- Default
- Possible values
- Default
- Possible values
- Default
- Possible values
- Default
- Possible values
- Default
- Possible values
- Default
- Possible values
- PostgreSQL array fields
- Acts as taggable on
- Array fields
Text
- Options
- Default
- Possible values
- Customization
Textarea
- Options
- Default
- Possible values
Time
- Options
Tip Tap
- (No headings found)
Trix
- Options
- Default
- Possible values
- File attachments
- Disable attachments
- Remove attachment attributes
- Active Storage
- Action Text
- Demo app
- Javascript Alert Messages
Associations
Customization
- Single Table Inheritance (STI)
- Link to child resource when using STI
- Add custom labels to the associations' pages
Belongs to
- Options
- Default
- Possible values
- Example
- Default
- Possible values
- Example
- Default
- Possible values
- Default
- Possible values
- Overview
- Polymorphic belongsto
- Polymorphic help
- Searchable belongsto
- Belongs to attach scope
- Allow detaching via the association
Has one
- Options
Has many
- Options
- Has Many Through
Has and belongs to many
- Options
- Searchable hasandbelongstomany
Layout
Panels
- What is the Main Panel?
- How does Avo compute panels?
- Computed panels vs Manual customization
- Index view fields
Clusters
* Possible values
Sidebars
- Adding fields to the sidebar
Tabs
- Tabs on Show view
- Tabs on Edit view
- Durable and "Bookmarkable"
- Display counter indicator on tabs switcher
- Visibility control
- Example
Views
Overview
- Preview
- Checking the current view
- Multiple ways to check
Table view
- Row controls configuration
- Global configuration
- Resource configuration
- Possible values
- Possible values
- Possible values
Grid view
- Enable grid view
- Make default view
- Custom style
- Grid Item Badge
Map view
- Enable map view
- Make it the default view
Customize Avo
Customization options
- Change the app name
- Timezone and Currency
- Resource Index view
- Resources per page
- Per page steps
- Resources via per page
- Default view type
- ID links to resource
- Resource controls on the left or both sides
- Container width
- Display the Index view full-width
- Display all views full-width
- Cache resources on the Index view
- Context
- Eject
- Breadcrumbs
- Breadcrumbs for custom pages
- Page titles
- Home path
- Use a lambda function for the homepath
- Mount Avo under a nested path
- Custom viewcomponent path
- Custom query scopes
- Custom scope for Index page
- Custom find method for Show and Edit pages
- Custom toparam method
- Using the friendly gem
- Using prefixedids gem
- Disable features
- Customize profile name, photo, and title
- Customize the name of the user
- Customize the profile photo
- Customize the title of the user
- Customize the sign-out link
- Skip show view
- Logger
- Associations lookup list limit
- Persistent UI State Configuration
- Overview
- Configuration
- Behavior
- How It Works
- Recommended Session Store
- Default value
- Example
- Default value
- Possible values
- Example
- Default value
- Possible values
- Example
- Common use case
- Persistent UI State Configuration
Eject views
- Prepared templates
- Logo
- Header
- Scripts
- Eject any template
Custom view types
- (No headings found)
Menu editor
- Menu item types
- linkto options
- path
- Arguments:
- Example:
- Arguments:
- Example:
- all helpers
- Item visibility
- Add data attributes to items
- Using authorization rules
- Icons
- Icons on resource, dashboard, and linkto items
- Collapsable sections and groups
- Default collapsed state
- Authorization
- Profile menu
- Forms in profile menu
- Custom content in the profile menu
Search
- Enable search for a resource
- Custom search provider
- Authorize search
- Configure the search result
- Resource search
- Global search
- Hide the global search
- Scope out global or resource searches
- Searching within associations
- Results count
Localization (I18n)
- Localizing resources
- Localizing fields
- Localizing buttons label
- Setting the locale
- Customize the locale
- FAQ
- The I18n.t method defaults to the name of that field/resource
- Using a Route Scope for Localization
Branding
- Configure brand color
- Customize the chart colors
- Customize the logo
- Customize the missing image placeholder
- Customize the favicon
Routing
- Default Mounting Behavior
- Mount Avo under a scope
- Add your own routes
Multitenancy
- Breakdown
- Route-based tenancy
- Set the proper routing pattern
- Set the tenant for each request
- Session-based tenancy
- Set the tenant for each request
- Add an account switcher
Actions
Overview
- What Are Actions?
- Key Benefits
- Streamlined Workflows
- Flexibility
- Batch Operations
- User Input Forms
- Common Use Cases
Generate
- Basic Generator Usage
- Generator Options
- --standalone
- Best Practices
- Examples
Registration
- action
- divider
Execution & Feedback
- Fields
- The handle method
- Feedback notifications
- Response types
Customization
- Visual customization
- Behavioral customization
Guides & Tutorials
- Helpers
- linkarguments
- Generate an Action Link Without a Resource Instance
- Scenario
- Solution
- linkarguments
- Guides
- StimulusJS
- Passing Params to the Action Show Page
Dashboards and cards
Dashboards
- Generate a dashboard
- Settings
- Cards
- Override card arguments from the dashboard
- Control the base settings from the parent
- Override card arguments from the dashboard
- Dashboards visibility
- Dashboards authorization
Cards
- Base settings
- 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
- Cards visibility
- Dividers
Kanban board
Overview
- 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
Collaboration
Overview
- Installation
- author
- watchers
- I18n Example
- Customizing collaboration models for your business logic
Authorization
- Authorization Methods
Audit Logging
Overview
- Requirements
- Installation
- Install the gem
- Run the installer
- Migrate
- Enable and configure audit logging
- Global enable
- Configure author models
- Enable specific resources and actions
- Display logged activities
- Resource-Specific Activities
- Configuring the Sidebar for Activity Tracking
- Viewing and Navigating Activity Logs
- Enabling Change Logs and Reverting Changes
- Troubleshooting: Missing changeset Field
- Display author logged activities
- Overview of all activities
- Disable specific actions logging
- Conclusion
Filters
Overview
- Differences
- Basic filters
- Dynamic filters
Basic Filters
- Filter options
- Register filters
- Filter types
- Filter values
- Default value
- Default value
- Dynamic options
- Type
- Mode
- pickeroptions
- Dynamic filter options
- React to filters
- Empty message text
- Keep filters panel open
- Filter arguments
- Manually create encoded URLs
- Rails helpers
- Usage
- Usage
- Standalone helpers
- Usage
- Usage
- Rails helpers
Dynamic Filters
- Filter types
- Conditions
- Query
- Conditions
- Conditions
- Conditions
- Conditions
- Conditions
- Conditions
- Options
- Field to filter matching
- Caveats
- Custom Dynamic Filters
- Defining custom dynamic filters
- Possible values
- Possible values
- Possible values
- Possible values
- Possible values
- Possible values
- Possible values
- Possible values
- Possible values
- Possible values
- Possible values
- Possible values
- Possible values
- Defining custom dynamic filters
- 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
Custom content
Custom views
- Generate tools
- Controller
- Route
- Sidebar item
- Customize the sidebar
- Add assets
- Using helpers from your app
- Using path helpers
- For Avo paths
- For the main app paths
- Using path helpers
Custom fields
- Generate a new field
- Field options
- Field Visibility
- Customize the views
- Field assets
- Use pre-built Stimulus controllers
- Hidden input controller
- Non existing model field
Custom errors
- Adding Custom Errors
- In a Simple Record
- In a Join Table
Resource tools
- Generate a resource tool
- Partial context
- Tool visibility
- Using path helpers
- For Avo paths
- For the main app paths
- Using path helpers
- Add custom fields on forms
- Where to add logic
Stimulus JS integration
- 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
Custom asset pipeline
- Avo's assets
- Exclude servings Avo assets from a CDN?
- Your custom assets
- Use TailwindCSS utility classes
- Add custom JS code and Stimulus controllers
- Use Importmap to add your assets
- Use js-bundling with esbuild
- Use js-bundling with rollup or webpack
- Manually add your CSS and JS assets
- Sprockets and Propshaft
- Webpacker
TailwindCSS integration
- (No headings found)
Media Library
Overview
- How to enable it
- Control who can use it
- Add it to the menu editor
- Use it with the rich text editors
Performance
Cache
- Cache store selection
- Production
- Test
- Development and other environments
- Custom selection
- 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
- Rows may not be automatically updated when certain associations change
- Solid Cache
Views
- Log ViewComponent loading times and allocations
- Enable ViewComponent Instrumentation
- Add Logging
Native Avo components
Avo::PanelComponent
- Options
- Type
- Type
- Type
- Type
- Type
- Type
- Slots
Native field components
- Declaring fields
- The form option
- The value option
- Other field options
- Component options
- avofield helper
Field wrappers
* Default
* Default
* Default
- Field wrapper areas
- Label
- Value
- Extra
- Options
- Default
- Default
- Default
Internals
Overview
- Public Methods and Internal Usage
Testing
- Testing helpers
- Testing Actions
Avo::Current
- (No headings found)
Avo::ExecutionContext
- How does the ExecutionContext work?
Avo::Services::EncryptionService
- How does the Avo::Services::EncryptionService work?
- Public methods
- Mandatory arguments:
- Optional arguments
- Usage example
- Basic text:
- Objects with custom serializer:
- Secret key base
Select All
- How does it work?
- Serializing the query
- Serialization known issues
Icons
- Avo icons
- Example:
- Using heroicons
- Examples:
Reserved model names and routes
- 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
Extending
Avo::ApplicationController
- On extending the ApplicationController
- Responsibly extending the ApplicationController
- Override ApplicationController methods
Avo.asset_manager
- Add a stylesheet file
- Add a javascript file
Plugins
- Overview
- Light layer
- Register the plugin
- Hook into Avo
- Hooks
- Avo AssetManager
- Using a middleware to surface asset files
- Create your own plugin