<!doctype html><html lang="en"><head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>jumphpsql — a free MySQL / MariaDB client written in PHP</title> <meta name="description" content="jumphpsql is a free MySQL and MariaDB client written in PHP: browse databases, edit rows, run SQL, make dumps, through an SSH tunnel if needed. Linux, Windows, macOS."> <link rel="canonical" href="https://{{DOMAIN}}/en/"> <link rel="alternate" hreflang="fr" href="https://{{DOMAIN}}/"> <link rel="alternate" hreflang="en" href="https://{{DOMAIN}}/en/"> <link rel="alternate" hreflang="x-default" href="https://{{DOMAIN}}/"> <link rel="icon" type="image/png" href="../images/favicon.png"> <meta property="og:type" content="website"> <meta property="og:site_name" content="jumphpsql"> <meta property="og:title" content="jumphpsql — a free MySQL / MariaDB client written in PHP"> <meta property="og:description" content="jumphpsql is a free MySQL and MariaDB client written in PHP: browse databases, edit rows, run SQL, make dumps, through an SSH tunnel if needed. Linux, Windows, macOS."> <meta property="og:url" content="https://{{DOMAIN}}/en/"> <meta property="og:image" content="https://{{DOMAIN}}/images/og.png"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="630"> <meta property="og:locale" content="en_US"> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:title" content="jumphpsql — a free MySQL / MariaDB client written in PHP"> <meta name="twitter:description" content="jumphpsql is a free MySQL and MariaDB client written in PHP: browse databases, edit rows, run SQL, make dumps, through an SSH tunnel if needed. Linux, Windows, macOS."> <meta name="twitter:image" content="https://{{DOMAIN}}/images/og.png"> <meta name="theme-color" content="#2c2578"> <script type="application/ld+json">[{"@context": "https://schema.org", "@type": "SoftwareApplication", "name": "jumphpsql", "description": "jumphpsql is a free MySQL and MariaDB client written in PHP: browse databases, edit rows, run SQL, make dumps, through an SSH tunnel if needed. Linux, Windows, macOS.", "applicationCategory": "DeveloperApplication", "operatingSystem": "Linux, Windows, macOS", "url": "https://{{DOMAIN}}/en/", "image": "https://{{DOMAIN}}/images/og.png", "screenshot": ["https://{{DOMAIN}}/images/data.webp", "https://{{DOMAIN}}/images/sql.webp", "https://{{DOMAIN}}/images/structure.webp", "https://{{DOMAIN}}/images/dark.webp"], "inLanguage": "en", "isAccessibleForFree": true, "offers": {"@type": "Offer", "price": "0", "priceCurrency": "EUR"}, "codeRepository": "https://github.com/davidnurdin/jumphpsql", "softwareVersion": "0.1.0", "downloadUrl": "https://github.com/davidnurdin/jumphpsql/releases/latest/download/jumphpsql-setup.exe"}, {"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "Is it free?", "acceptedAnswer": {"@type": "Answer", "text": "Yes, and its source code is on GitHub."}}, {"@type": "Question", "name": "Which servers are supported?", "acceptedAnswer": {"@type": "Answer", "text": "MySQL 5.7 and 8.x, and MariaDB, with the usual authentication methods."}}, {"@type": "Question", "name": "Can my edits break a table?", "acceptedAnswer": {"@type": "Answer", "text": "Changes wait until “Save changes”, then go in a single transaction, rolled back at the first error."}}, {"@type": "Question", "name": "Can I reach a server behind a bastion?", "acceptedAnswer": {"@type": "Answer", "text": "Yes, through an SSH tunnel: agent, key, password or ~/.ssh/config. Secrets never go on the command line."}}, {"@type": "Question", "name": "Does it run in the browser?", "acceptedAnswer": {"@type": "Answer", "text": "Yes: the connection goes through jumphp.net’s TCP bridge, to servers reachable on the Internet. For a server on your local network (localhost, 192.168…), take the desktop version."}}]}]</script> <style> :root { --ink: #1d1f33; --muted: #5b5f7a; --bg: #f3f4f7; --card: #fff; --brand: #4f5bd5; --deep: #2c2578; --orange: #ff8c28; } * { box-sizing: border-box; } body { margin: 0; font: 17px/1.6 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; color: var(--ink); background: var(--bg); } a { color: var(--brand); } .wrap { max-width: 1100px; margin: 0 auto; padding: 0 16px; } header.hero { background: linear-gradient(180deg, #232060, #15133a); color: #fff; padding: 20px 0 56px; } nav { display: flex; justify-content: space-between; align-items: center; gap: 12px; font-size: 15px; } nav .brand { display: flex; align-items: center; gap: 10px; color: #fff; text-decoration: none; font-weight: 700; } nav .langs { color: #c4c8f0; } nav .langs a { color: #fff; } .intro { display: grid; grid-template-columns: 1fr; gap: 32px; align-items: center; margin-top: 40px; } @media (min-width: 860px) { .intro { grid-template-columns: 5fr 7fr; } } h1 { font-size: clamp(38px, 7vw, 60px); line-height: 1.05; margin: 16px 0 8px; } .tagline { color: var(--orange); font-size: 22px; font-weight: 600; margin: 0 0 16px; } .lead { color: #d6d9f6; margin: 0 0 24px; } .cta { display: flex; flex-wrap: wrap; gap: 12px; } .btn { display: inline-block; padding: 12px 22px; border-radius: 10px; font-weight: 700; text-decoration: none; } .btn.primary { background: var(--orange); color: #fff; } .btn.ghost { border: 2px solid #8f96e8; color: #fff; } .note { color: #a7acdb; font-size: 14px; margin-top: 12px; } .intro img.hero-shot { width: 100%; height: auto; border-radius: 12px; box-shadow: 0 20px 50px rgba(0,0,0,.45); } section { padding: 56px 0 8px; } h2 { font-size: 30px; margin: 0 0 24px; } ul.features { list-style: none; padding: 0; margin: 0; display: grid; gap: 16px; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); } ul.features li { background: var(--card); border-radius: 12px; padding: 18px 20px; box-shadow: 0 1px 3px rgba(20,20,60,.08); } ul.features h3 { margin: 0 0 6px; font-size: 18px; color: var(--deep); } ul.features p { margin: 0; color: var(--muted); font-size: 15px; } .gallery { display: grid; gap: 24px; grid-template-columns: 1fr; } @media (min-width: 860px) { .gallery { grid-template-columns: 1fr 1fr; } } figure { margin: 0; } figure img { width: 100%; height: auto; border-radius: 10px; box-shadow: 0 6px 20px rgba(20,20,60,.15); } figcaption { color: var(--muted); font-size: 15px; margin-top: 8px; } pre { background: #15133a; color: #e8e9ff; padding: 16px; border-radius: 10px; overflow-x: auto; font-size: 15px; } details { background: var(--card); border-radius: 10px; padding: 14px 18px; margin-bottom: 10px; } summary { font-weight: 700; cursor: pointer; } details p { margin: 8px 0 0; color: var(--muted); } .dl { display: grid; gap: 14px; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); } .dlbtn { display: flex; flex-direction: column; gap: 4px; background: var(--deep); color: #fff; text-decoration: none; padding: 16px 20px; border-radius: 12px; } .dlbtn b { font-size: 20px; } .dlbtn span { color: #c4c8f0; font-size: 13px; word-break: break-all; } .dlbtn small { color: #ffb877; font-size: 13px; } .dlbtn:hover { background: var(--brand); } .small { font-size: 14px; } .again { text-align: center; margin: 40px 0 0; } footer { margin-top: 56px; padding: 24px 0; color: var(--muted); font-size: 14px; border-top: 1px solid #dfe1ea; } </style></head><body> <header class="hero"> <div class="wrap"> <nav> <a class="brand" href="../"><img src="../images/favicon.png" alt="" width="28" height="28">jumphpsql</a> <span class="langs" aria-label="Language"><a href="../" hreflang="fr" lang="fr">Français</a> · <span aria-current="page">English</span></span> </nav> <div class="intro"> <div> <img src="../images/icon.png" alt="jumphpsql" width="96" height="96"> <h1>jumphpsql</h1> <p class="tagline">The MySQL / MariaDB client written in PHP</p> <p class="lead">Browse your databases, edit rows, run SQL and back up your data in a fast, light window. The MySQL protocol is spoken in pure PHP, without mysqli or PDO, and the window never freezes.</p> <div class="cta"> <a class="btn primary" href="#download">⬇ Download</a> <a class="btn ghost" href="../play/">▶ Try it in the browser</a> <a class="btn ghost" href="https://github.com/davidnurdin/jumphpsql" target="_blank" rel="noopener">Source code on GitHub</a> </div> <p class="note">Free, for Windows, macOS and Linux. In the browser, the connection goes through jumphp.net’s TCP bridge (public servers); for a server on your local network, take the desktop version.</p> </div> <img class="hero-shot" src="../images/data.webp" alt="The rows of a table, editable, with the filter and the pages" width="1400" height="957"> </div> </div> </header> <main class="wrap"> <section id="download"> <h2>Download</h2> <p>One small installer per system: it installs the newest jumphpsql, with a shortcut and an uninstaller. Free, no account.</p> <div class="dl"> <a class="dlbtn" href="https://github.com/davidnurdin/jumphpsql/releases/latest/download/jumphpsql-setup.exe" target="_blank" rel="noopener"><b>⬇ Windows</b><span>jumphpsql-setup.exe</span></a> <a class="dlbtn" href="https://github.com/davidnurdin/jumphpsql/releases/latest/download/jumphpsql-setup-macos.zip" target="_blank" rel="noopener"><b>⬇ macOS</b><span>jumphpsql-setup-macos.zip</span><small>unzip, then right click › Open the first time</small></a> <a class="dlbtn" href="https://github.com/davidnurdin/jumphpsql/releases/latest/download/jumphpsql-setup-linux-x86_64" target="_blank" rel="noopener"><b>⬇ Linux</b><span>jumphpsql-setup-linux-x86_64</span><small>then chmod +x and run it</small></a> </div> <p class="small"><a href="https://github.com/davidnurdin/jumphpsql/releases" target="_blank" rel="noopener">All versions</a></p> </section> <section> <h2>What it does</h2> <ul class="features"> <li><h3>Saved connections</h3><p>Host, port, user, default database; the password saved or asked for. Each connection is tested before it is saved.</p></li> <li><h3>The database tree</h3><p>Databases, their tables and views, with the row count of each table.</p></li> <li><h3>The rows of a table</h3><p>WHERE filter, sort by clicking a column, pages of 200 rows. NULL values clearly shown.</p></li> <li><h3>Safe editing</h3><p>Edit cells in place, add and delete rows, then save everything in one transaction: nothing is written if one statement fails.</p></li> <li><h3>SQL editor</h3><p>Syntax colours, Ctrl+Return runs the statement under the cursor, F5 the whole script; the rows of each result.</p></li> <li><h3>The structure</h3><p>The columns of a table (type, key, default…) and its CREATE TABLE.</p></li> <li><h3>Dumps and imports</h3><p>Save a database or a table as .sql, run a .sql file, with a progress bar.</p></li> <li><h3>SSH tunnels</h3><p>Go through a bastion: the session’s SSH agent, a key file with its passphrase, a password, or your ~/.ssh/config.</p></li> <li><h3>Dark theme</h3><p>Light or dark, in one click.</p></li> </ul> </section> <section> <h2>Screenshots</h2> <div class="gallery"> <figure><img src="../images/data.webp" alt="The rows of a table, editable, with the filter and the pages" width="1400" height="957" loading="lazy"><figcaption>The rows of a table, editable, with the filter and the pages</figcaption></figure> <figure><img src="../images/sql.webp" alt="The SQL editor and the result of a query" width="1400" height="957" loading="lazy"><figcaption>The SQL editor and the result of a query</figcaption></figure> <figure><img src="../images/structure.webp" alt="The structure of a table and its CREATE TABLE" width="1400" height="957" loading="lazy"><figcaption>The structure of a table and its CREATE TABLE</figcaption></figure> <figure><img src="../images/dark.webp" alt="The dark theme" width="1400" height="957" loading="lazy"><figcaption>The dark theme</figcaption></figure> </div> </section> <section> <h2>PHP, all the way down</h2> <p>jumphpsql is made with <a href="https://jumphp.net" target="_blank" rel="noopener">JumPHP</a>: the window, the buttons, the data grid and the editor are drawn by PHP (JumPHP\Gui, no HTML). The MySQL client is written in PHP too, non-blocking: queries are queued, answers arrive between two frames. Works with MySQL 5.7 / 8.x and MariaDB (mysql_native_password, caching_sha2_password, client_ed25519).</p> </section> <section> <h2>From the sources</h2> <p>Or clone the repository and start the app with JumPHP’s command (everything runs in Docker, nothing else to install):</p> <pre><code>git clone https://github.com/davidnurdin/jumphpsql.gitcd jumphpsqlbin/jumphp run jumphpsql</code></pre> </section> <section> <h2>FAQ</h2> <details><summary>Is it free?</summary><p>Yes, and its source code is on GitHub.</p></details> <details><summary>Which servers are supported?</summary><p>MySQL 5.7 and 8.x, and MariaDB, with the usual authentication methods.</p></details> <details><summary>Can my edits break a table?</summary><p>Changes wait until “Save changes”, then go in a single transaction, rolled back at the first error.</p></details> <details><summary>Can I reach a server behind a bastion?</summary><p>Yes, through an SSH tunnel: agent, key, password or ~/.ssh/config. Secrets never go on the command line.</p></details> <details><summary>Does it run in the browser?</summary><p>Yes: the connection goes through jumphp.net’s TCP bridge, to servers reachable on the Internet. For a server on your local network (localhost, 192.168…), take the desktop version.</p></details> <p class="again"><a class="btn primary" href="#download">⬇ Download</a></p> </section> </main> <footer><div class="wrap">jumphpsql, made with JumPHP. · <a href="https://github.com/davidnurdin/jumphpsql" target="_blank" rel="noopener">GitHub</a> · <a href="../play/">Try it in the browser</a></div></footer></body></html>