<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: tranphucbol</title>
    <description>The latest articles on DEV Community by tranphucbol (@tranphucbol).</description>
    <link>https://dev.to/tranphucbol</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F59882%2F37ffc5dd-24cb-4af6-af5a-56cf3a197364.jpeg</url>
      <title>DEV Community: tranphucbol</title>
      <link>https://dev.to/tranphucbol</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tranphucbol"/>
    <language>en</language>
    <item>
      <title>An open-source database IDE that feels like DataGrip</title>
      <dc:creator>tranphucbol</dc:creator>
      <pubDate>Sun, 08 Nov 2026 10:19:55 +0000</pubDate>
      <link>https://dev.to/tranphucbol/an-open-source-database-ide-that-feels-like-datagrip-3p4n</link>
      <guid>https://dev.to/tranphucbol/an-open-source-database-ide-that-feels-like-datagrip-3p4n</guid>
      <description>&lt;p&gt;My DataGrip license ran out and I didn't renew it. I loved the UI. But it's a Java app, it ate a lot of RAM, and it froze a lot.&lt;/p&gt;

&lt;p&gt;I tried the alternatives first. Beekeeper Studio keeps too much behind the paywall (even a basic JSON view of a cell is paid), and to reach another database you switch the connection instead of keeping several open in one window like DataGrip. TablePro is native, but the UI felt hard to use, and it fires queries I never asked for, like collecting database sizes. When you're connected to production, that makes you nervous.&lt;/p&gt;

&lt;p&gt;None of them came close to DataGrip's UI/UX. My colleagues and I started building our own.&lt;/p&gt;

&lt;h2&gt;
  
  
  What TableCraft is
&lt;/h2&gt;

&lt;p&gt;TableCraft is a desktop database IDE shaped like DataGrip: the same layout and keymap (double Shift opens Search Everywhere), with SQL consoles and a table editor. SQLite and MySQL/MariaDB/TiDB come in the box. PostgreSQL, Oracle, SQL Server, Redis, etcd and DuckDB download as plugins when you add one. You can import your connections straight from DataGrip.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqerfip25uie8eonecrar.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqerfip25uie8eonecrar.gif" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We started with the DataGrip features we use every day, then kept fixing whatever annoyed us while using it at work. People at my company use it on production databases now.&lt;/p&gt;

&lt;p&gt;It's written in TypeScript, because that's the language I know well enough to judge every line an agent writes. Each datasource gets its own engine process, and result rows stay in that process while the grid only reads the window you're looking at. A crashing driver takes down one datasource, not the app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agents, with rules around them
&lt;/h2&gt;

&lt;p&gt;Most of the code was written by coding agents. My first commit landed on October 22, and there are 728 commits now. What keeps the quality up is the setup I built around them. Every pull request runs end-to-end tests under Playwright and comes with screenshots as evidence. Every decision between us and the agent goes into a file in &lt;code&gt;docs/decisions/&lt;/code&gt; (more than 140 of them), and the agent reads those while it plans and implements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Letting agents query your databases
&lt;/h2&gt;

&lt;p&gt;TableCraft also runs an MCP server, so Claude Code, OpenCode or Cursor can list schemas and run queries through it. Every datasource starts Off for agents. You can raise it to Read only, which runs on a read-only session, or to Ask before writes, where each write waits for you to click Allow. A pop-up while you type would steal keystrokes, so a waiting write only turns a status bar chip amber. A datasource coloured red (our production colour) can only go past Read only on its own settings page, so it never happens by a slip in a long list.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1ee3jwbdc3h7ma3s7k2y.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1ee3jwbdc3h7ma3s7k2y.gif" alt="OpenCode in a terminal beside TableCraft, asking before it writes" width="800" height="299"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What copying DataGrip taught me
&lt;/h2&gt;

&lt;p&gt;You don't notice how careful JetBrains is until you try to copy them. How each component moves and where each button sits turned out to be deliberate. My first build had no history button on the console toolbar. I only noticed when I reached for it.&lt;/p&gt;

&lt;p&gt;A bigger example is the Database pane. My first tree sorted connections by name, because that's the obvious thing. DataGrip keeps the order you arrange by dragging, with folders above connections. That sounds minor until you have dozens of connections and want production at the top, grouped by how much they matter to you instead of alphabetically.&lt;/p&gt;

&lt;p&gt;Expanding works the same careful way. The tree introspects one schema when you open it, never the whole server on connect. That's exactly what made me nervous about TablePro: on a production server with hundreds of schemas, I don't want my IDE running queries I didn't ask for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two things we got wrong
&lt;/h2&gt;

&lt;p&gt;The plugin interface was designed on day one for SQL databases. When we started on the flow for key-value stores like Redis and etcd, it didn't fit, and I had to change the plugin API to a 2.0.&lt;/p&gt;

&lt;p&gt;The second one is a bit embarrassing. We never audited how many processes each plugin started. In one of my regular performance checks I saw TableCraft starting an engine for every installed plugin at launch, whether you used it or not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;It's MIT licensed, with builds for macOS (Apple silicon and Intel), Windows and Linux. The macOS app isn't signed yet, and the install guide shows how to open it.&lt;/p&gt;

&lt;p&gt;If you use DataGrip, or used to, I'd really like you to try it and file an issue for whatever feels off: &lt;a href="https://github.com/tranphucbol/table-craft" rel="noopener noreferrer"&gt;https://github.com/tranphucbol/table-craft&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>database</category>
      <category>typescript</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
