3 pointsby Gordiny3 hours ago2 comments
  • Gordiny3 hours ago
    DBTree is a desktop SQL client that lets you explore relational database records hierarchically, expanding rows like a file tree.

    I'm a developer with 10+ years of experience. When exploring databases, I often found it tedious to manually write cascading JOINs or navigate through standard tools like DBeaver or DbSchema. I just wanted a simple interface with UI "chevrons" to expand rows and follow foreign keys visually without losing context. Since I couldn't find exactly what I wanted, I built it myself.

    It’s a native desktop application built with JavaFX and Spring.

    It's an early release. Right now, it is read-only, filtering is basic (by ID only), and it currently supports PostgreSQL.

    You can download it directly from the website without creating an account or giving your email. The app is completely free to use up to 2 levels of depth, which is enough to test the tree-navigation UX with your own databases. There is a paid license to unlock unlimited depth if you find it useful.

    If there is interest, I plan to add dynamic filtering, CRUD editing capabilities, and Mac support.

    I would love to get your feedback on the UX concept, the execution, or even the choice of JavaFX for a desktop app today. Thanks!

  • siriusastrebe3 hours ago
    This is awesome! You could probably incorporate a graph visualizer to map out all the table relations (which could be a good selling visual).

    How does it distinguish which tables have foreign keys to other tables? Can with work without defining constraints?

    • Gordiny36 minutes ago
      Thanks! A graph visualizer is interesting, but it’s not really the goal here. There are already good tools that map entire schemas. DBTree is more about focused, node-by-node data exploration, without loading or visualizing everything upfront.

      It relies on actual foreign key constraints. If there’s no FK defined, it won’t infer the relationship. The chevron is shown based on those constraints, and the related rows are only queried when you expand the node, which keeps performance under control.