# App design concepts and considerations

Source: https://docs.streamlit.io/develop/concepts/design

**[Best practices for building Streamlit apps](https://docs.streamlit.io/develop/concepts/design/best-practices)**: Follow recommended patterns for styling, layout, widgets, navigation, state, security, and type checking.

**[Build advanced dashboards](https://docs.streamlit.io/develop/concepts/design/dashboards)**: Build fast, interactive dashboards over large data with lazy-loading tables, background cache refresh, partial reruns, cross-filtering, and shareable views. Learn how to move Power BI and Tableau dashboards to Streamlit and modernize them on the way.

**[Edit and write back data](https://docs.streamlit.io/develop/concepts/design/writeback)**: Build apps that act: review and approval queues, sign-offs, and planning input with editable tables, forms, validation, and writeback.

**[Using layouts and containers](https://docs.streamlit.io/develop/concepts/design/layouts-and-containers)**: Arrange and organize elements with columns, tabs, expanders, flex layouts, and dynamic containers.

**[Update and replace elements](https://docs.streamlit.io/develop/concepts/design/animate)**: Understand how Streamlit commands return objects you can use to update, replace, or clear elements in place.

**[Button behavior and examples](https://docs.streamlit.io/develop/concepts/design/buttons)**: Understand how buttons work with explanations and examples to avoid common mistakes.

**[Dataframes](https://docs.streamlit.io/develop/concepts/design/dataframes)**: Dataframes are a great way to display and edit data in a tabular format. Understand the UI and options available in Streamlit.

**[Choosing and using charts](https://docs.streamlit.io/develop/concepts/design/charts)**: Pick the right chart command, keep charts consistent, use chart selections, and chart large datasets.

**[Optimizing app performance](https://docs.streamlit.io/develop/concepts/design/performance)**: Make your app fast and responsive with caching, fragments, forms, render order, and loading states.

**[Using custom Python classes in your Streamlit app](https://docs.streamlit.io/develop/concepts/design/custom-classes)**: Understand the impact of defining your own Python classes within Streamlit's rerun model.

**[Multithreading](https://docs.streamlit.io/develop/concepts/design/multithreading)**: Understand how to use multithreading within Streamlit apps.

**[Working with timezones](https://docs.streamlit.io/develop/concepts/design/timezone-handling)**: Understand how to localize time to your users.
