Skip to main content

dash-builder

[!IMPORTANT] dash-builder and its developer(s) are not associated with the original dash project or its commercial parent, Plotly.

A tool and framework to simplify construction of Python Dash applications.

API Design

  • Create a project in the current working directory
> dash init
  • Create project called testproject in specified directory
> dash init testproject --location ~/projects
  • Add new page to current dash project in pages/ directory
> dash page NewPage
  • Add new page to current dash project in specific directory within pages/
> dash page NewPage --location archive

Installation

pip install dash-builder

Usage

dash-builder provides a simple command-line interface (CLI) for initiating and managing your dash project.

Initiating a Dash Project

The create command creates a new skeleton project. It takes a single argument, the name for the new project. You can use the --location option to choose the directory in which to create it. If no location is passed, it will be created in the current working directory.

❯ dashb create test-project
3/3 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Complete
test-project successfully created in /Users/<username>.
📂 test-project
├── 📂 pages
│   ├── home.py
│   └── not_found_404.py
└── app.py

dash-builder implements defines 2x classes to be used when building apps:

  • DashPage - all page modules should define a page object that inherits from this abstract base class.
  • DashView - all page components should be constructed as views that inerhit from this abstract base class.

Framework

Under this framework:

  • Applications are composed of pages using Dash's multi-page settings.
  • Page modules define a page-object that subclasses the DashPage.
  • Page layouts are collections of views, created by subclassing the DashView.
  • Views define individual or collections of dash components, or other views.
  • Views can be reused to create similar components.
  • IDs are managed via the Views to simplify callback management.
  • When re-using Views, pattern-matching callbacks can be useful to reduce the number of callbacks.

For example, the below:

  • my-dash-project/
    • pages/
      • home.py
    • views/
      • __init__.py
      • demo_input.py
      • demo_output.py
      • demo_view.py
      • demo_view_2.py
    • app.py
# app.py
import dash

from dash import html


app = dash.Dash(__name__, use_pages=True)

app.layout = html.Div(
    [
        html.H1("Demo Application"),
        html.Div(dash.page_container)
    ]
)

if __name__ == "__main__":
    app.run(debug=True)
# pages/home.py
import dash

from dash import html, Input, Output
from dash_builder import DashPage

from views import DemoView, DemoView2, DemoInput, DemoOutput


dash.register_page(__name__, path="/")

class HomePage(DashPage):
    @classmethod
    def valid_layout(cls, **kwargs):
        one = DemoView.create("one")
        two = DemoView.create("two")
        three = DemoView2.create("three")
        return html.Div([one, two, three])

def layout(**kwargs):
    return HomePage.layout(**kwargs)

@dash.callback(
    Output(DemoOutput.matched_id(), "children"),
    Input(DemoInput.matched_id(), "value")
)
def update_value(value: str) -> str:
    return value

@dash.callback(
    Output(DemoView2.id("three", "output"), "children"),
    Input(DemoView2.id("three", "input"), "value")
)
def update_value_2(value: str) -> str:
    return value
# views/demo_input.py
from dash import dcc
from dash_builder import DashView


class DemoInput(DashView):
    @classmethod
    def create(cls, id:str, **kwargs) -> dcc.Inupt:
        return dcc.Input(id=cls.id(id))
# views/demo_output.py
from dash import html
from dash_builder import DashView


class DemoOutput(DashView):
    @classmethod
    def create(cls, id: str, **kwargs) -> html.Pre:
        return html.Pre(id=cls.id(id))
# views/demo_view.py
from dash import html
from dash_builder import DashView

from . import DemoInput, DemoOutput


class DemoView(DashView):
    @classmethod
    def create(cls, id: str, **kwargs) -> html.Span:
        input = DemoInput.create(id)
        output = DemoOutput.create(id)
        return html.Span([input, output], id=cls.id(id))
# views/demo_view_2.py
from dash import html, dcc
from dash_builder import DashView


class DemoView2(DashView):
    @classmethod
    def create(cls, id: str, **kwargs) -> html.Span:
        input = dcc.Input(id=cls.id(id, "input"))
        output = html.Pre(id=cls.id(id, "output"))
        return html.Span([input, output], id=cls.id(id))

Release files for dash-builder 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dash-builder 0.2.0
File Size Uploaded
dash_builder-0.2.0.tar.gz 20.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dash-builder 0.2.0
File Interpreter ABI Platform
dash_builder-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 42.1 kB

Release files / dash_builder-0.2.0.tar.gz

Download URL dash_builder-0.2.0.tar.gz
Size 20.3 kB
Tags Source
SHA-256 checksum
How to use checksums
b7b6d95e20a8fb79f50f221ab503cf1bdcd6467ab176429efa97678d865d1b2c
BLAKE2b-256 checksum
How to use checksums
557151daa56707b82ee09edbc243b8c88859beda47993c274f98978749ed3096
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 17, 2026.

Transparency log

Release files / dash_builder-0.2.0-py3-none-any.whl

Download URL dash_builder-0.2.0-py3-none-any.whl
Size 21.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
56880ac0a2bf2fc097fbae2442eb8636bd8197e47b94959b6ef3f0eaf3f0ac3a
BLAKE2b-256 checksum
How to use checksums
d08888001ed4e9ea13b38fb51c69f2ec1ad195543301b571fa33f0b4b19f287b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 17, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page