Home | Docs | Gallery | Examples | Discuss
Datapane is an app development platform which gives you everything you need to build internal data analytics products using Python.
- Blocks & Views
- Display blocks
- Layout blocks
- Static site export
- App server
- Backend functions
- Forms
- Client-side events (e.g. onload)
- Caching
- Sessions
- Reports
- HTML reports
- Cloud reports
- Deployment
- Fly.io
- Dockerfile generation
- Components library
- Tasks
- Scheduled tasks
- Background tasks
- Data layer
- Files
- Analytics DB (DuckDB)
- App state DB (sqlite)
- Integrations & Messaging
- Slack
- Webhooks
Build apps and reporting tools without writing HTML, CSS, or worrying about infrastructure.
Not just for demos and MVPs. Build products with background processing, integrations, reporting, and more.
Deploy to any web host, run on your own server, or embed into existing frameworks like Flask and Django.
Check out example reports and apps in our gallery:
Datapane Apps use a combination of pre-rendered frontend elements and backend Python functions which are called on-demand. Result: low-latency apps which are simple to build, host, and scale.
Check out our Quickstart to build a data science web app in 3m.
The best way to install Datapane is through pip or conda.
$ pip3 install -U datapane
$ conda install -c conda-forge "datapane>=0.16.1"
Datapane also works well in hosted Jupyter environments such as Colab or Binder, where you can install as follows:
!pip3 install --quiet datapane
Create reports from pandas DataFrames, plots from your favorite libraries, and text.
import altair as alt
from vega_datasets import data
import datapane as dp
df = data.iris()
fig = (
alt.Chart(df)
.mark_point()
.encode(
x="petalLength:Q",
y="petalWidth:Q",
color="species:N"
)
)
view = dp.Blocks(
dp.Plot(fig),
dp.DataTable(df)
)
dp.save_report(view, path="my_app.html")
Add dropdowns, selects, grid, pages, and 10+ other interactive blocks.
...
view = dp.Blocks(
dp.Formula("x^2 + y^2 = z^2"),
dp.Group(
dp.BigNumber(
heading="Number of percentage points",
value="84%",
change="2%",
is_upward_change=True
),
dp.BigNumber(
heading="Simple Statistic", value=100
), columns=2
),
dp.Select(
dp.Plot(fig, label="Chart"),
dp.DataTable(df, label="Data")
),
)
dp.save_report(view, path="layout_example.html")
Add forms which run backend functions, or refresh your app automatically to build dashboards. Serve locally or deploy to your favorite web-host.
import altair as alt
from vega_datasets import data
import datapane as dp
df = data.iris()
def gen_assets(params):
subset = df[df['species'] == params['species']]
fig = alt.Chart(subset)
.mark_point()
.encode( x="petalLength:Q", y="petalWidth:Q")
return [dp.Plot(fig), dp.DataTable(subset)]
view = dp.Form(
on_submit=gen_assets,
controls=dp.Controls(
species=dp.Choice(options=list(df['species'].unique())
)
)
dp.serve_app(view)
Leave us some feedback, get help, ask questions and request features.
π Ask a question
Looking for ways to contribute to Datapane?
By default, the Datapane Python library collects error reports and usage telemetry.
This is used by us to help make the product better and to fix bugs.
If you would like to disable this, simply create a file called no_analytics
in your datapane
config directory, e.g.
$ mkdir -p ~/.config/datapane && touch ~/.config/datapane/no_analytics
$ mkdir -p ~/Library/Application\ Support/datapane && touch ~/Library/Application\ Support/datapane/no_analytics
PS> mkdir ~/AppData/Roaming/datapane -ea 0
PS> ni ~/AppData/Roaming/datapane/no_analytics -ea 0
You may need to try ~/AppData/Local
instead of ~/AppData/Roaming
on certain Windows configurations depending on the type of your user-account.