Learn Python with Talk Python's 270 hours of courses

Dropbase: Build Internal Tools with Python

Episode #460, published Thu, May 2, 2024, recorded Tue, Mar 12, 2024

Do you find yourself or your team building internal apps frequently for your company? Are you familiar with the term "forms over data"? They are super empowering for your org but they can be pretty repetitive and you might find yourself spending more time than you'd like working on them rather than core products and services. I invited Jimmy Chan from Dropbase to tell us about their service who's tagline is "Build internal web apps with just Python." It's a cool service and a fun conversation.

Watch this episode on YouTube
Play on YouTube
Watch the live stream version

Episode Deep Dive

Guests and Their Background

Jimmy Chan – Co-founder of Dropbase. He studied engineering at McGill University in Canada and previously interned at Research in Motion (makers of the BlackBerry) during its heyday. Together with his co-founder, who has a machine-learning background in Python, Jimmy launched Dropbase to simplify the process of building internal web apps with Python. Today, he remains deeply involved in the Python ecosystem, working on ways to streamline developer workflows through Dropbase.

1. The Challenge of Building Internal Tools

  • Forms Over Data: The conversation highlights how many internal apps follow the “forms over data” approach (display or collect data from a database through some UI). While these apps are essential, building them repeatedly from scratch can be both time-consuming and repetitive.
  • Why Dropbase?: Dropbase aims to let developers (and non-developers) rapidly spin up internal tools and dashboards “with just Python,” reducing the friction of building forms-over-data apps by hand each time.

2. How Dropbase Works

  • UI Builder: A visual drag-and-drop “studio” for laying out tables, buttons, filters, and more. The resulting files (UI settings, Python, and SQL queries) are stored in a local directory rather than in a proprietary database—this is key for version control.
  • SQL or Python Functions: When adding functionality to components (e.g., tables, buttons), developers can choose to write raw SQL queries or full Python functions. This flexibility covers simple read or update operations (SQL) as well as more advanced integrations (Python code).
  • Python Integration:
    • Access to PyPI packages: You can install and import any PyPI package (e.g., Requests, Stripe SDK, etc.) in your Dropbase Python functions.
    • State and Context: Dropbase provides an object-oriented way (e.g., state.tables.table1.column1) to get the currently selected row or user input directly in your Python code.
    • Local / Self-Hosted: You can run Dropbase locally in Docker containers or deploy it on services like AWS EC2, storing private credentials in .env files that remain on your infrastructure.

3. Example Walkthrough

  • Two Related Tables: Demonstrated in the episode’s screencast, Dropbase can display one table of “workspaces” and a dependent table showing the “users” in each workspace.
  • Dependency and Search: By clicking a row in the first table, the second table updates to show only users of that selected workspace. Built-in search and filters can be automatically generated.
  • Interactive Actions: A “Make Admin” button (written as a Python function) updates the user’s role in the database, illustrating how easy it is to combine a UI component, database logic, and external API calls or actions.

4. Developer-Friendly Approach

  • Version Control: All of your UI definitions, Python functions, and SQL files live in plain-text form in your workspace directory. This can be committed to Git, integrated with CI/CD pipelines, and opened through your favorite editor.
  • Full Python Environment: Written around FastAPI for the backend, React on the frontend, and Docker for containerization. The result is a developer-centric approach that keeps code accessible and auditable.
  • Extensibility: You can import existing Python modules or code from your codebase directly into Dropbase, enabling you to leverage your established logic without needing to re-implement everything via HTTP calls or separate services.

5. Pricing and Setup

  • Pricing Model: Sold as a B2B SaaS with a per-user-per-month model, but free for individual developer usage and local experimentation. For production scenarios with advanced permissions, you switch to a paid plan.
  • Self-Hosting: Available for teams wanting to keep data on-prem or within their own private cloud. Setting up a local or EC2-based instance is straightforward by cloning the Dropbase GitHub repo and using Docker.

6. Additional Mentions

  • Django Admin: Often praised for quick admin interfaces but not as flexible for larger or multi-source data needs. Dropbase can act as an alternative or complement when companies outgrow the default Django Admin features.
  • Jinja Templating: Dropbase leverages Jinja-style placeholders for writing queries that reference UI elements (e.g., {{ state.tables.table1.workspace_id }}) to make dependent tables or dynamic SQL simpler.

Overall Takeaway

Building internal tools often becomes repetitive and distracts development teams from core product goals. By streamlining the process—through a visual builder, Python/SQL integrations, version-controlled configuration, and self-hosting—Dropbase offers a powerful, Pythonic approach to forms-over-data apps. It emphasizes giving developers a frictionless, maintainable path from idea to production while retaining all the benefits of modern best practices (like Git versioning, Docker, and the full Python ecosystem).

Links from the show

Build internal web apps with just Python.: dropbase.io
Dropbase on Github: github.com
Dropbase @ LinkedIn: linkedin.com
Dropbase on Twitter: twitter.com
Jimmy Chan: linkedin.com
Jimmy on Twitter: twitter.com
Dropbase Docs: docs.dropbase.io
Dropbase: dropbase.io
Watch this episode on YouTube: youtube.com
Episode transcripts: talkpython.fm

--- Stay in touch with us ---
Subscribe to Talk Python on YouTube: youtube.com
Talk Python on Bluesky: @talkpython.fm at bsky.app
Talk Python on Mastodon: talkpython
Michael on Bluesky: @mkennedy.codes at bsky.app
Michael on Mastodon: mkennedy

Talk Python's Mastodon Michael Kennedy's Mastodon