| name | implementing-new-features |
| description | Implementation guide for new Streamlit features. Use when adding new elements, widgets, or features that span backend, frontend, and protobufs. |
New Feature Implementation Guide
Most features need implementation in three areas:
- Backend:
lib/streamlit/
- Frontend:
frontend/
- Protobufs:
proto/
New features should include:
- Python unit tests in
lib/tests
- Vitest unit tests
- E2E Playwright tests in
e2e_playwright/
Order of Implementation
-
Protobuf changes in proto/ then run make protobuf
- New elements: add to
proto/streamlit/proto/Element.proto
-
Backend in lib/streamlit/
- New elements: add to
lib/streamlit/__init__.py
-
Python unit tests in lib/tests
- Run:
uv run pytest lib/tests/streamlit/the_test_name.py
- New elements: add to
lib/tests/streamlit/element_mocks.py
-
Frontend in frontend/
- New elements: add to
frontend/lib/src/components/core/Block/ElementNodeRenderer.tsx
-
Vitest tests in *.test.tsx
- Run:
cd frontend && yarn vitest lib/src/components/elements/NewElement/NewElement.test.tsx
-
E2E Playwright tests in e2e_playwright/
- Run:
make run-e2e-test e2e_playwright/name_of_the_test.py
-
Autofix formatting and linting: make autofix
-
Verify the implementation: make check