tag:github.com,2008:https://github.com/sqlpage/SQLPage/releasesRelease notes from SQLPage2026-03-08T11:04:19Ztag:github.com,2008:Repository/519912039/v0.43.02026-03-08T11:38:28Zv0.43.0<h2>SQLPage v0.43.0 (2026-03-08)</h2>
<div class="markdown-alert markdown-alert-note"><p class="markdown-alert-title"><svg class="octicon octicon-info mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>Note</p><p><a href="https://sql-page.com" rel="nofollow">SQLPage</a> transforms your SQL queries into web user interfaces. It lets you create web applications quickly, entirely in SQL.<br>
<strong>Download</strong> for <a href="https://github.com/sqlpage/SQLPage/releases/latest/download/sqlpage-windows.zip">Windows</a>, <a href="https://github.com/sqlpage/SQLPage/releases/latest/download/sqlpage-macos.tgz">MacOS</a>, or <a href="https://github.com/sqlpage/SQLPage/releases/latest/download/sqlpage-linux.tgz">Linux</a>, or <a href="https://editor.datapage.app" rel="nofollow"><strong>try online</strong></a>!</p>
</div>
<ul>
<li>OIDC protected and public paths now respect the site prefix when it is defined.</li>
<li>Fix: OIDC provider metadata refreshes now always happen in the background, and with a timeout. Previously, a slow OIDC provider could prevent SQLPage from handling requests for an arbitrary amount of time.</li>
<li>Fix: forms without submit or reset buttons no longer keep extra bottom spacing.</li>
<li>add submit and reset form button icons: validate_icon, reset_icon, reset_color</li>
<li>improve error messages when sqlpage functions are used incorrectly. Include precise file reference and line number</li>
<li>updated sql parser: <a href="https://github.com/apache/datafusion-sqlparser-rs/blob/main/changelog/0.61.0.md">https://github.com/apache/datafusion-sqlparser-rs/blob/main/changelog/0.61.0.md</a></li>
<li>Add margin bottom in the <a href="https://sql-page.com/component?component=big%5Fnumber" rel="nofollow">big number</a> component</li>
<li>In forms without a submit button (such as auto_submit forms), remove awkward padding at the end of the form</li>
</ul>github-actions[bot]tag:github.com,2008:Repository/519912039/v0.42.02026-01-17T16:08:37Zv0.42.0<h2>SQLPage v0.42.0 (2025-12-28)</h2>
<div class="markdown-alert markdown-alert-note"><p class="markdown-alert-title"><svg class="octicon octicon-info mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>Note</p><p><a href="https://sql-page.com" rel="nofollow">SQLPage</a> transforms your SQL queries into web user interfaces. It lets you create web applications quickly, entirely in SQL.<br>
<strong>Download</strong> for <a href="https://github.com/sqlpage/SQLPage/releases/latest/download/sqlpage-windows.zip">Windows</a>, <a href="https://github.com/sqlpage/SQLPage/releases/latest/download/sqlpage-macos.tgz">MacOS</a>, or <a href="https://github.com/sqlpage/SQLPage/releases/latest/download/sqlpage-linux.tgz">Linux</a>, or <a href="https://editor.datapage.app" rel="nofollow"><strong>try online</strong></a>!</p>
</div>
<h3>New features</h3>
<ul>
<li>Better support for alternative databases
<ul>
<li>SQL file parsing
<ul>
<li>add support for some <a href="https://duckdb.org/" rel="nofollow">DuckDB</a>-specific syntax (like <code>select {'a': 1, 'b': 2}</code>),</li>
<li>same for <a href="https://www.oracle.com/database/" rel="nofollow">Oracle</a>-specific syntax</li>
</ul>
</li>
</ul>
</li>
<li>New docker image variant: <code>lovasoa/sqlpage:latest-duckdb</code>, <code>lovasoa/sqlpage:main-duckdb</code>, <code>lovasoa/sqlpage:v0.42.0-duckdb</code> with preconfigured duckdb odbc drivers. Just run the image and you have a sqlpage connected to a duckdb running. This makes it much easier to use SQLPage on existing local or remote CSV, XLSX, JSON, or Parquet files without any data conversion step.</li>
<li>New config option: <code>cache_stale_duration_ms</code> to control the duration for which cached sql files are considered fresh.</li>
</ul>
<h4>New Functions</h4>
<ul>
<li><a href="https://sql-page.com/functions.sql?function=web_root" rel="nofollow"><code>sqlpage.web_root()</code></a> returns the web root directory where SQLPage serves <code>.sql</code> files from. This is more reliable than <code>sqlpage.current_working_directory()</code> when you need to reference the location of your SQL files, because it takes into account the <code>--web-root</code> command line argument and the <code>WEB_ROOT</code> environment variable.</li>
<li><a href="https://sql-page.com/functions.sql?function=configuration_directory" rel="nofollow"><code>sqlpage.configuration_directory()</code></a> returns the configuration directory where SQLPage looks for <code>sqlpage.json</code>, templates, and migrations.</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>Fixed oracle-specifc bugs. The entire sqlpage test suite now runs against an oracle database after each change, guaranteeing no regression.</li>
<li>The default welcome page (<code>index.sql</code>) now correctly displays the web root and configuration directory paths instead of showing the current working directory.</li>
<li><code>sqlpage.variables()</code> returned json objects with duplicate keys when post, get and set variables of the same name were present. It now always returns valid json objects without duplicate keys. The semantics of the returned values remains the same (precedence: set > post > get).</li>
<li>better oidc support. Single-sign-on now works with sites:
<ul>
<li>using a non-default <code>site_prefix</code></li>
<li>hosted behind an ssl-terminating reverse proxy</li>
</ul>
</li>
<li>Fixed a bug where sqlpage would sometimes <a href="https://github.com/sqlpage/SQLPage/issues/1174" data-hovercard-type="issue" data-hovercard-url="/sqlpage/SQLPage/issues/1174/hovercard">redirect to the wrong url after logout</a>, causing logout failures when using <a href="https://sql-page.com/functions?function=oidc%5Flogout%5Furl" rel="nofollow"><code>sqlpage.oidc_logout_url()</code></a></li>
</ul>github-actions[bot]tag:github.com,2008:Repository/519912039/v0.41.02025-12-28T01:16:55Zv0.41.0<h2>SQLPage v0.41.0 (2025-12-28)</h2>
<div class="markdown-alert markdown-alert-note"><p class="markdown-alert-title"><svg class="octicon octicon-info mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>Note</p><p><a href="https://sql-page.com" rel="nofollow">SQLPage</a> transforms your SQL queries into web user interfaces. It lets you create web applications quickly, entirely in SQL.<br>
<strong>Download</strong> for <a href="https://github.com/sqlpage/SQLPage/releases/latest/download/sqlpage-windows.zip">Windows</a>, <a href="https://github.com/sqlpage/SQLPage/releases/latest/download/sqlpage-macos.tgz">MacOS</a>, or <a href="https://github.com/sqlpage/SQLPage/releases/latest/download/sqlpage-linux.tgz">Linux</a>, or <a href="https://editor.datapage.app" rel="nofollow"><strong>try online</strong></a>!</p>
</div>
<ul>
<li><strong>New Function</strong>: <a href="https://sql-page.com/functions.sql?function=oidc_logout_url#function" rel="nofollow"><code>sqlpage.oidc_logout_url(redirect_uri)</code></a> generates a secure logout URL for OIDC-authenticated users with support for <a href="https://openid.net/specs/openid-connect-rpinitiated-1_0.html#RPLogout" rel="nofollow">RP-Initiated Logout</a></li>
<li>Fix compatibility with Auth0 for OpenID-Connect authentification. See <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="640869667" data-permission-text="Title is private" data-url="https://github.com/ramosbugs/openidconnect-rs/issues/23" data-hovercard-type="issue" data-hovercard-url="/ramosbugs/openidconnect-rs/issues/23/hovercard" href="https://github.com/ramosbugs/openidconnect-rs/issues/23">ramosbugs/openidconnect-rs#23</a></li>
<li>updated sql parser: <a href="https://github.com/apache/datafusion-sqlparser-rs/blob/main/changelog/0.60.0.md">https://github.com/apache/datafusion-sqlparser-rs/blob/main/changelog/0.60.0.md</a></li>
<li>updated apexcharts to 5.3.6:
<ul>
<li><a class="commit-link" href="https://github.com/apexcharts/apexcharts.js/compare/v5.3.0...v5.3.6">apexcharts/apexcharts.js@<tt>v5.3.0...v5.3.6</tt></a></li>
<li><a href="https://github.com/apexcharts/apexcharts.js/releases/tag/v5.3.6">https://github.com/apexcharts/apexcharts.js/releases/tag/v5.3.6</a></li>
</ul>
</li>
<li>re-add the <code>lime</code> color option to charts</li>
<li>update default chart color palette; use <a href="https://yeun.github.io/open-color/" rel="nofollow">Open Colors</a>
<ul>
<li>
<a target="_blank" rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/552629/530509970-839bd318-c4cd-419c-8f04-a583399e0512.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzM3NTk3ODAsIm5iZiI6MTc3Mzc1OTQ4MCwicGF0aCI6Ii81NTI2MjkvNTMwNTA5OTcwLTgzOWJkMzE4LWM0Y2QtNDE5Yy04ZjA0LWE1ODMzOTllMDUxMi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwMzE3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDMxN1QxNDU4MDBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yMjBiZDA5MDYyMmIzNjE2MGNmOGI2NTdkOGVmMmU1OGExYTcxY2RmYjcyYTZkNzA4Zjc5ZmNmYTIyNDVhOGEyJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.gV6ZtohLKu-hzAFFIA-G-tjS9GXjCfaQKNuMuE35KGs"><img width="2000" height="978" alt="image" src="https://private-user-images.githubusercontent.com/552629/530509970-839bd318-c4cd-419c-8f04-a583399e0512.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzM3NTk3ODAsIm5iZiI6MTc3Mzc1OTQ4MCwicGF0aCI6Ii81NTI2MjkvNTMwNTA5OTcwLTgzOWJkMzE4LWM0Y2QtNDE5Yy04ZjA0LWE1ODMzOTllMDUxMi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwMzE3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDMxN1QxNDU4MDBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yMjBiZDA5MDYyMmIzNjE2MGNmOGI2NTdkOGVmMmU1OGExYTcxY2RmYjcyYTZkNzA4Zjc5ZmNmYTIyNDVhOGEyJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.gV6ZtohLKu-hzAFFIA-G-tjS9GXjCfaQKNuMuE35KGs" content-type-secured-asset="image/png" style="max-width: 100%; height: auto; max-height: 978px;"></a>
</li>
</ul>
</li>
<li>re-enable text drop shadow in chart data labels</li>
</ul>
<p>Merry Christmas and a happy new year!</p>github-actions[bot]tag:github.com,2008:Repository/519912039/v0.40.02025-11-28T17:35:20Zv0.40.0<p>performance improvements, bug fixes, backwards incompatible variable</p>
<p>handling changes</p>
<ul>
<li>OIDC login redirects now use HTTP 303 responses so POST submissions are converted to safe GET requests before reaching the identity provider, fixing incorrect reuse of the original POST (HTTP 307) that could break standard auth flows.</li>
<li>SQLPage now respects <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Accept" rel="nofollow">HTTP accept headers</a> for JSON. You can now easily process the contents of any existing sql page programmatically with:
<ul>
<li><code>curl -H "Accept: application/json" http://example.com/page.sql</code>: returns a json array</li>
<li><code>curl -H "Accept: application/x-ndjson" http://example.com/page.sql</code>: returns one json object per line.</li>
</ul>
</li>
<li>Fixed a bug in <code>sqlpage.link</code>: a link with no path (link to the current page) and no url parameter now works as expected. It used to keep the existing url parameters instead of removing them. <code>sqlpage.link('', '{}')</code> now returns <code>'?'</code> instead of the empty string.</li>
<li><code>sqlpage.fetch(null)</code> and <code>sqlpage.fetch_with_meta(null)</code> now return <code>null</code> instead of throwing an error.</li>
<li><strong>New Function</strong>: <code>sqlpage.set_variable(name, value)</code>
<ul>
<li>Returns a URL with the specified variable set to the given value, preserving other existing variables.</li>
<li>This is a shorthand for <code>sqlpage.link(sqlpage.path(), json_patch(sqlpage.variables('get'), json_object(name, value)))</code>.</li>
</ul>
</li>
<li><strong>Variable System Improvements</strong>: URL and POST parameters are now immutable, preventing accidental modification. User-defined variables created with <code>SET</code> remain mutable.
<ul>
<li><strong>BREAKING</strong>: <code>$variable</code> no longer accesses POST parameters. Use <code>:variable</code> instead.
<ul>
<li><strong>What changed</strong>: Previously, <code>$x</code> would return a POST parameter value if no GET parameter named <code>x</code> existed.</li>
<li><strong>Fix</strong>: Replace <code>$x</code> with <code>:x</code> when you need to access form field values.</li>
<li><strong>Example</strong>: Change <code>SELECT $username</code> to <code>SELECT :username</code> when reading form submissions.</li>
</ul>
</li>
<li><strong>BREAKING</strong>: <code>SET $name</code> no longer makes GET (URL) parameters inaccessible when a URL parameter with the same name exists.
<ul>
<li><strong>What changed</strong>: <code>SET $name = 'value'</code> would previously overwrite the URL parameter <code>$name</code>. Now it creates an independent SET variable that shadows the URL parameter.</li>
<li><strong>Fix</strong>: This is generally the desired behavior. If you need to access the original URL parameter after setting a variable with the same name, extract it from the JSON returned by <code>sqlpage.variables('get')</code>.</li>
<li><strong>Example</strong>: If your URL is <code>page.sql?name=john</code>, and you do <code>SET $name = 'modified'</code>, then:
<ul>
<li><code>$name</code> will be <code>'modified'</code> (the SET variable)</li>
<li>The original URL parameter is still preserved and accessible:
<ul>
<li><code>sqlpage.variables('get')->>'name'</code> returns <code>'john'</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><strong>New behavior</strong>: Variable lookup now follows this precedence:
<ul>
<li><code>$variable</code> checks SET variables first, then URL parameters</li>
<li>SET variables always shadow URL/POST parameters with the same name</li>
</ul>
</li>
<li><strong>New sqlpage.variables() filters</strong>:
<ul>
<li><code>sqlpage.variables('get')</code> returns only URL parameters as JSON</li>
<li><code>sqlpage.variables('post')</code> returns only POST parameters as JSON</li>
<li><code>sqlpage.variables('set')</code> returns only user-defined SET variables as JSON</li>
<li><code>sqlpage.variables()</code> returns all variables merged together, with SET variables taking precedence</li>
</ul>
</li>
<li><strong>Deprecation warnings</strong>: Using <code>$var</code> when both a URL parameter and POST parameter exist with the same name now shows a warning. In a future version, you'll need to explicitly choose between <code>$var</code> (URL) and <code>:var</code> (POST).</li>
</ul>
</li>
<li>Improved performance of <code>sqlpage.run_sql</code>.
<ul>
<li>On a simple test that just runs 4 run_sql calls, the new version is about 2.7x faster (15,708 req/s vs 5,782 req/s) with lower latency (0.637 ms vs 1.730 ms per request).</li>
</ul>
</li>
<li>add support for postgres range types</li>
</ul>github-actions[bot]tag:github.com,2008:Repository/519912039/v0.39.12025-11-08T00:28:05Zv0.39.1<h1>SQLPage v0.39.1 released !</h1>
<div class="markdown-alert markdown-alert-note"><p class="markdown-alert-title"><svg class="octicon octicon-info mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>Note</p><p><a href="https://sql-page.com" rel="nofollow">SQLPage</a> transforms your SQL queries into web user interfaces. It lets you create web applications quickly, entirely in SQL.<br>
<strong>Download</strong> for <a href="https://github.com/sqlpage/SQLPage/releases/latest/download/sqlpage-windows.zip">Windows</a>, <a href="https://github.com/sqlpage/SQLPage/releases/latest/download/sqlpage-macos.tgz">MacOS</a>, or <a href="https://github.com/sqlpage/SQLPage/releases/latest/download/sqlpage-linux.tgz">Linux</a>, or <a href="https://editor.datapage.app" rel="nofollow"><strong>try online</strong></a>!</p>
</div>
<ul>
<li>More precise server timing tracking to debug performance issues</li>
<li>Fix missing server timing header in some cases</li>
<li>Implement nice error messages for some header-related errors such as invalid header values.</li>
<li><code>compress_responses</code> is now set to <code>false</code> by default in the configuration.
<ul>
<li>When response compression is enabled, additional buffering is needed. Users reported a better experience with pages that load more progressively, reducing the time before the pages' shell is rendered.</li>
<li>When SQLPage is deployed behind a reverse proxy, compressing responses between sqlpage and the proxy is wasteful.</li>
</ul>
</li>
<li>In the table component, allow simple objects in custom_actions instead of requiring arrays of objects.</li>
<li>Fatser icon loading. Previously, even a page containing a single icon required downloading and parsing a ~2MB file. This resulted in a delay where pages initially appeared with a blank space before icons appeared. Icons are now inlined inside pages and appear instantaneously.</li>
<li>Updated tabler icons to 3.35</li>
<li>Fix inaccurate ODBC warnings</li>
<li>Added support for Microsoft SQL Server named instances: <code>mssql://user:pass@localhost/db?instance_name=xxx</code></li>
<li>Added a detailed <a href="https://sql-page.com/blog?post=Performance+Guide" rel="nofollow">performance guide</a> to the docs.</li>
</ul>github-actions[bot]tag:github.com,2008:Repository/519912039/v0.39.02025-10-28T13:33:19Zv0.39.0<h2>SQLPage v0.39.0</h2>
<ul>
<li>
<p>Added support for executing SQL for URL paths with additional extensions.<br>
For example, creating <code>sitemap.xml.sql</code> will execute the SQL file when visiting <code>example.com/sitemap.xml</code>.</p>
</li>
<li>
<p>Error messages now display source line information even when the database does not return a precise error position. In such cases, the entire problematic SQL statement is referenced.</p>
<ul>
<li>
<a target="_blank" rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/552629/506290834-e1362cfb-c01e-497d-a64a-0feb5f3a3951.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzM3NTk3ODAsIm5iZiI6MTc3Mzc1OTQ4MCwicGF0aCI6Ii81NTI2MjkvNTA2MjkwODM0LWUxMzYyY2ZiLWMwMWUtNDk3ZC1hNjRhLTBmZWI1ZjNhMzk1MS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwMzE3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDMxN1QxNDU4MDBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04ZGJiNGYwOTYwYmU4MTQ1NzQ2MTQ2ZWFkMjNjNzI2ZDgwNzU4NGVlNTY4YWFiM2QzNTk2ZjYwZmM2MGMzZDA1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.JsBReIw44H5F4QvD1D3rDqlwWYTBl93_QpbAPYspax0"><img width="1430" height="700" alt="image" src="https://private-user-images.githubusercontent.com/552629/506290834-e1362cfb-c01e-497d-a64a-0feb5f3a3951.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzM3NTk3ODAsIm5iZiI6MTc3Mzc1OTQ4MCwicGF0aCI6Ii81NTI2MjkvNTA2MjkwODM0LWUxMzYyY2ZiLWMwMWUtNDk3ZC1hNjRhLTBmZWI1ZjNhMzk1MS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwMzE3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDMxN1QxNDU4MDBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04ZGJiNGYwOTYwYmU4MTQ1NzQ2MTQ2ZWFkMjNjNzI2ZDgwNzU4NGVlNTY4YWFiM2QzNTk2ZjYwZmM2MGMzZDA1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.JsBReIw44H5F4QvD1D3rDqlwWYTBl93_QpbAPYspax0" content-type-secured-asset="image/png" style="max-width: 100%; height: auto; max-height: 700px;"></a>
</li>
</ul>
</li>
<li>
<p>The shell with a vertical sidebar now supports <strong>active</strong> elements, similar to the horizontal header bar.</p>
<ul>
<li>
<a target="_blank" rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/552629/506293478-176caa73-f80e-4fab-bd6d-b5f4d8762323.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzM3NTk3ODAsIm5iZiI6MTc3Mzc1OTQ4MCwicGF0aCI6Ii81NTI2MjkvNTA2MjkzNDc4LTE3NmNhYTczLWY4MGUtNGZhYi1iZDZkLWI1ZjRkODc2MjMyMy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwMzE3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDMxN1QxNDU4MDBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xOGQ3ZGZjYWU1ZGY0MTc1NGZkYzlmNGU2NGViZjhmODIxODUzMzM5NTExNTNhMTQxOGRlZTYxNWNkODY5ZmM0JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.axWWQvcAcUp7zl2QxzZnRcMmtbV7TL9R3MGkkGE0eog"><img width="625" height="450" alt="image" src="https://private-user-images.githubusercontent.com/552629/506293478-176caa73-f80e-4fab-bd6d-b5f4d8762323.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzM3NTk3ODAsIm5iZiI6MTc3Mzc1OTQ4MCwicGF0aCI6Ii81NTI2MjkvNTA2MjkzNDc4LTE3NmNhYTczLWY4MGUtNGZhYi1iZDZkLWI1ZjRkODc2MjMyMy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwMzE3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDMxN1QxNDU4MDBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xOGQ3ZGZjYWU1ZGY0MTc1NGZkYzlmNGU2NGViZjhmODIxODUzMzM5NTExNTNhMTQxOGRlZTYxNWNkODY5ZmM0JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.axWWQvcAcUp7zl2QxzZnRcMmtbV7TL9R3MGkkGE0eog" content-type-secured-asset="image/png" style="max-width: 100%; height: auto; max-height: 450px;"></a>
</li>
</ul>
</li>
<li>
<p>Added new properties (<code>edit_url</code>, <code>delete_url</code>, and <code>custom_actions</code>) to the <a href="https://sql-page.com/component.sql?component=table" rel="nofollow">table</a> component, making it easy to add icon buttons for editing, deleting, or performing custom actions. Thank you, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Phoenix79-spec/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Phoenix79-spec">@Phoenix79-spec</a> for implementing this !</p>
<ul>
<li>
<a target="_blank" rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/552629/506285718-488b6d36-ecf2-4346-b7d8-aa7a72be3f2a.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzM3NTk3ODAsIm5iZiI6MTc3Mzc1OTQ4MCwicGF0aCI6Ii81NTI2MjkvNTA2Mjg1NzE4LTQ4OGI2ZDM2LWVjZjItNDM0Ni1iN2Q4LWFhN2E3MmJlM2YyYS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwMzE3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDMxN1QxNDU4MDBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xZjIyN2I0MWZhMTM4ZWI5YTA0OGNjZGEyMzZjNjU1NTRhMDA2M2E5NDA1ZTFhNTE0ODdlYTk5NWNmMjczNGJjJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.FrCB-YxJg6UVjYlm9kq8AoeNaclU13BEhPDROzm16dc"><img width="800" height="160" alt="image" src="https://private-user-images.githubusercontent.com/552629/506285718-488b6d36-ecf2-4346-b7d8-aa7a72be3f2a.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzM3NTk3ODAsIm5iZiI6MTc3Mzc1OTQ4MCwicGF0aCI6Ii81NTI2MjkvNTA2Mjg1NzE4LTQ4OGI2ZDM2LWVjZjItNDM0Ni1iN2Q4LWFhN2E3MmJlM2YyYS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwMzE3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDMxN1QxNDU4MDBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xZjIyN2I0MWZhMTM4ZWI5YTA0OGNjZGEyMzZjNjU1NTRhMDA2M2E5NDA1ZTFhNTE0ODdlYTk5NWNmMjczNGJjJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.FrCB-YxJg6UVjYlm9kq8AoeNaclU13BEhPDROzm16dc" content-type-secured-asset="image/png" style="max-width: 100%; height: auto; max-height: 160px;"></a>
</li>
</ul>
</li>
<li>
<p>SQLPage now sets the <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Server-Timing" rel="nofollow">Server-Timing</a> header in development mode. This allows you to identify performance bottlenecks by opening your browser’s network inspector, selecting a slow request, and viewing the <strong>Timing</strong> tab.</p>
<ul>
<li>
<a target="_blank" rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/552629/505275460-6781a31f-e342-4e8c-8506-bc47049ce313.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzM3NTk3ODAsIm5iZiI6MTc3Mzc1OTQ4MCwicGF0aCI6Ii81NTI2MjkvNTA1Mjc1NDYwLTY3ODFhMzFmLWUzNDItNGU4Yy04NTA2LWJjNDcwNDljZTMxMy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwMzE3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDMxN1QxNDU4MDBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1hNDg2OTM4OTMyY2M2ZGQxYzFhMTI4NDY1MmNkZmUwNzMxYTVhOTUxNDJhZGZkZTNjOGJhNTIxZDVkMTJiYmM5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.Ch9apzQVL9UZ1WP7slG8GUNrwqtyw8UyhAG1MZKOb_o"><img width="600" height="600" alt="firefox screenshot" src="https://private-user-images.githubusercontent.com/552629/505275460-6781a31f-e342-4e8c-8506-bc47049ce313.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzM3NTk3ODAsIm5iZiI6MTc3Mzc1OTQ4MCwicGF0aCI6Ii81NTI2MjkvNTA1Mjc1NDYwLTY3ODFhMzFmLWUzNDItNGU4Yy04NTA2LWJjNDcwNDljZTMxMy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwMzE3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDMxN1QxNDU4MDBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1hNDg2OTM4OTMyY2M2ZGQxYzFhMTI4NDY1MmNkZmUwNzMxYTVhOTUxNDJhZGZkZTNjOGJhNTIxZDVkMTJiYmM5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.Ch9apzQVL9UZ1WP7slG8GUNrwqtyw8UyhAG1MZKOb_o" content-type-secured-asset="image/png" style="max-width: 100%; height: auto; max-height: 600px;"></a>
</li>
</ul>
</li>
<li>
<p>Fixed a memory corruption issue leading to crashes in the built-in ODBC driver manager.</p>
</li>
<li>
<p>ODBC: Fixed support for using globally installed system drivers by name on Debian-based Linux distributions. This means you can reference drivers by their name instead of having to provide the full path to the driver's .so file on these distributions.</p>
</li>
<li>
<p>Added a new <a href="https://sql-page.com/component.sql?component=login" rel="nofollow">login</a> component to create visually appealing login forms easily. Many thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/olivierauverlot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/olivierauverlot">@olivierauverlot</a> for his contribution !</p>
<ul>
<li>
<a target="_blank" rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/552629/506285472-dbd2372f-5571-43f0-8e50-c6a350ebaf84.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzM3NTk3ODAsIm5iZiI6MTc3Mzc1OTQ4MCwicGF0aCI6Ii81NTI2MjkvNTA2Mjg1NDcyLWRiZDIzNzJmLTU1NzEtNDNmMC04ZTUwLWM2YTM1MGViYWY4NC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwMzE3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDMxN1QxNDU4MDBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT05OWM1NDU2ZDU5MzI0ZTE3NjRmMDZkNzgzNWIyNDRmMTA0ZTZhOGRiYjM1NWVjMDFjZjBlZjg3N2I4MWI4YmJjJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.PgTavCvVaCqgSubFnhlsyzuR9UXsYceLVo4K3LDtbb4"><img width="600" height="600" alt="image" src="https://private-user-images.githubusercontent.com/552629/506285472-dbd2372f-5571-43f0-8e50-c6a350ebaf84.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzM3NTk3ODAsIm5iZiI6MTc3Mzc1OTQ4MCwicGF0aCI6Ii81NTI2MjkvNTA2Mjg1NDcyLWRiZDIzNzJmLTU1NzEtNDNmMC04ZTUwLWM2YTM1MGViYWY4NC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwMzE3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDMxN1QxNDU4MDBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT05OWM1NDU2ZDU5MzI0ZTE3NjRmMDZkNzgzNWIyNDRmMTA0ZTZhOGRiYjM1NWVjMDFjZjBlZjg3N2I4MWI4YmJjJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.PgTavCvVaCqgSubFnhlsyzuR9UXsYceLVo4K3LDtbb4" content-type-secured-asset="image/png" style="max-width: 100%; height: auto; max-height: 600px;"></a>
</li>
</ul>
</li>
</ul>github-actions[bot]tag:github.com,2008:Repository/519912039/v0.38.02025-10-14T22:19:23Zv0.38.0<h1>SQLPage v0.38 released !</h1>
<div class="markdown-alert markdown-alert-note"><p class="markdown-alert-title"><svg class="octicon octicon-info mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>Note</p><p><a href="https://sql-page.com" rel="nofollow">SQLPage</a> transforms your SQL queries into web user interfaces. It lets you create web applications quickly, entirely in SQL.<br>
<strong>Download</strong> for <a href="https://github.com/sqlpage/SQLPage/releases/latest/download/sqlpage-windows.zip">Windows</a>, <a href="https://github.com/sqlpage/SQLPage/releases/latest/download/sqlpage-macos.tgz">MacOS</a>, or <a href="https://github.com/sqlpage/SQLPage/releases/latest/download/sqlpage-linux.tgz">Linux</a>, or <a href="https://editor.datapage.app" rel="nofollow"><strong>try online</strong></a>!</p>
</div>
<p>Main change: SQLPage now works with almost all database management systems, thanks to ODBC. You can now build a SQLPage interface for your cloud databases like Snowflake and BigQuery, for flat files using DuckDB, for multiple heterogeneous data sources with Trino, and more.</p>
<p>Also: new <code>sqlpage.hmac()</code> function (useful when creating webhooks in SQLPage), some speed optimizations, and bug fixes.</p>
<hr>
<h1><strong>Release Notes</strong></h1>
<h3><strong>🗄️ ODBC Support: Connect to Even More Databases</strong></h3>
<p>SQLPage now supports the <strong>Open Database Connectivity (ODBC)</strong> standard, expanding compatibility to a wide range of databases:</p>
<ul>
<li><a href="https://github.com/ClickHouse/clickhouse-odbc">ClickHouse</a></li>
<li><a href="https://www.mongodb.com/docs/atlas/data-federation/query/sql/drivers/odbc/connect" rel="nofollow">MongoDB (via SQL interface)</a></li>
<li><a href="https://duckdb.org/docs/stable/clients/odbc/overview.html" rel="nofollow">DuckDB</a>, and through it <a href="https://duckdb.org/docs/stable/data/data_sources" rel="nofollow">many other data sources</a></li>
<li><a href="https://www.oracle.com/database/technologies/releasenote-odbc-ic.html" rel="nofollow">Oracle</a></li>
<li><a href="https://docs.snowflake.com/en/developer-guide/odbc/odbc" rel="nofollow">Snowflake</a></li>
<li><a href="https://cloud.google.com/bigquery/docs/reference/odbc-jdbc-drivers" rel="nofollow">BigQuery</a></li>
<li><a href="https://www.ibm.com/support/pages/db2-odbc-cli-driver-download-and-installation-information" rel="nofollow">IBM DB2</a></li>
<li><a href="https://docs.starburst.io/clients/odbc/odbc-v2.html" rel="nofollow">Trino</a>, and through it <a href="https://trino.io/docs/current/connector.html" rel="nofollow">many other data sources</a></li>
</ul>
<p>You can now connect SQLPage to almost any major database or analytical system.<br>
When using SQLPage with analytical databases, keep in mind that they usually have a higher per-query overhead. To maintain good performance and fast page loads, structure your SQL to run fewer, broader queries instead of several tiny ones.</p>
<hr>
<h3><strong>🔑 New <a href="https://sql-page.com/functions.sql?function=hmac" rel="nofollow"><code>sqlpage.hmac()</code></a> Function</strong></h3>
<p>A new built-in function for secure <strong>HMAC (Hash-based Message Authentication Code)</strong> operations.</p>
<p>Use it to:</p>
<ul>
<li>Create and verify <strong>secure webhook signatures</strong> (Shopify, Stripe, GitHub, etc.)</li>
<li>Generate <strong>tamper-proof API tokens</strong> or temporary access codes</li>
</ul>
<p><strong>Features:</strong> supports <code>SHA-256</code> and <code>SHA-512</code>, with <code>hex</code> (default) or <code>base64</code> encoding.</p>
<hr>
<h3><strong>⚡ Local Execution for Literal Assignments</strong></h3>
<p>Setting a variable to a literal (e.g., <code>SET x = 'hello'</code>) is now <strong>executed locally</strong> by SQLPage instead of hitting the database.<br>
This removes unnecessary database roundtrips and makes static variable extraction cost-free. This should incentivize you to write cleaner queries and decompose your code to use more variables.</p>
<hr>
<h3><strong>🔢 Arbitrary Precision for Numeric Values</strong></h3>
<p>SQLPage now uses <strong>arbitrary-precision numbers</strong> internally for numeric values returned by the database.<br>
This eliminates rounding or truncation issues with <strong>very large or very small</strong> <code>DECIMAL</code> / <code>NUMERIC</code> fields from your database.</p>
<hr>
<h3><strong>🧩 UI Polish: List Component Spacing Fix</strong></h3>
<p>Fixed a minor spacing issue in <strong>list components</strong> when displaying <strong>empty values</strong>.<br>
The layout now remains consistent regardless of missing or null fields.</p>github-actions[bot]tag:github.com,2008:Repository/519912039/v0.38.0-beta.12025-10-05T07:55:35Zv0.38.0-beta.1<h1>SQLPage v0.38.0 Beta Released</h1>
<div class="markdown-alert markdown-alert-note"><p class="markdown-alert-title"><svg class="octicon octicon-info mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>Note</p><p><a href="https://sql-page.com" rel="nofollow">SQLPage</a> lets you build full web applications using only SQL queries.<br>
<strong>Download beta</strong> for <a href="https://github.com/sqlpage/SQLPage/releases/download/v0.38.0-beta/sqlpage-windows.zip">Windows</a>, <a href="https://github.com/sqlpage/SQLPage/releases/download/v0.38.0-beta/sqlpage-macos.tgz">MacOS</a>, or <a href="https://github.com/sqlpage/SQLPage/releases/download/v0.38.0-beta/sqlpage-linux.tgz">Linux</a>, or <a href="https://editor.datapage.app" rel="nofollow"><strong>try it online</strong></a>.</p>
</div>
<p>This is a <strong>beta release</strong> — please <a href="https://github.com/sqlpage/SQLPage/issues">report bugs on GitHub</a> if you encounter anything unexpected.</p>
<h2>New Features</h2>
<h3>ODBC Support</h3>
<p>SQLPage now supports the <a href="https://en.wikipedia.org/wiki/Open_Database_Connectivity" rel="nofollow">Open Database Connectivity (ODBC)</a> standard. This feature makes SQLPage compatible with many enterprise and cloud data systems, dramatically expanding the range of possible integrations.</p>
<p>You can now use SQLPage with <a href="https://github.com/ClickHouse/clickhouse-odbc">ClickHouse</a>, <a href="https://www.mongodb.com/docs/atlas/data-federation/query/sql/drivers/odbc/connect" rel="nofollow">MongoDB (via Atlas Data Federation)</a>, <a href="https://duckdb.org/docs/stable/clients/odbc/overview.html" rel="nofollow">DuckDB</a> (and <a href="https://duckdb.org/docs/stable/data/data_sources" rel="nofollow">its connected data sources</a>), <a href="https://www.oracle.com/database/technologies/releasenote-odbc-ic.html" rel="nofollow">Oracle</a>, <a href="https://docs.snowflake.com/en/developer-guide/odbc/odbc" rel="nofollow">Snowflake</a>, <a href="https://cloud.google.com/bigquery/docs/reference/odbc-jdbc-drivers" rel="nofollow">BigQuery</a>, <a href="https://www.ibm.com/support/pages/db2-odbc-cli-driver-download-and-installation-information" rel="nofollow">IBM DB2</a>, <a href="https://docs.starburst.io/clients/odbc/odbc-v2.html" rel="nofollow">Trino</a> (including <a href="https://trino.io/docs/current/connector.html" rel="nofollow">its connectors</a>) and many more.</p>
<h3><code>sqlpage.hmac()</code> Function</h3>
<p>A new function, <a href="https://sql-page.com/functions.sql?function=hmac" rel="nofollow"><code>sqlpage.hmac()</code></a>, provides cryptographic HMAC (Hash-based Message Authentication Code) operations for signing and verifying data. Useful for integrating with other systems such as Stripe and Shopify to process payments from your SQLPage website.</p>
<p>This is a beta version. If you experience any issues, please <a href="https://github.com/sqlpage/SQLPage/issues">open a bug report</a></p>github-actions[bot]tag:github.com,2008:Repository/519912039/v0.37.12025-10-02T12:17:12Zv0.37.1<h1>SQLPage v0.37.1 released !</h1>
<div class="markdown-alert markdown-alert-note"><p class="markdown-alert-title"><svg class="octicon octicon-info mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>Note</p><p><a href="https://sql-page.com" rel="nofollow">SQLPage</a> lets you build web applications using SQL queries. If you know SQL, you can create complete web applications quickly.<br>
<strong>Download</strong> for <a href="https://github.com/sqlpage/SQLPage/releases/latest/download/sqlpage-windows.zip">Windows</a>, <a href="https://github.com/sqlpage/SQLPage/releases/latest/download/sqlpage-macos.tgz">MacOS</a>, or <a href="https://github.com/sqlpage/SQLPage/releases/latest/download/sqlpage-linux.tgz">Linux</a>, or <a href="https://editor.datapage.app" rel="nofollow"><strong>try online</strong></a>!</p>
</div>
<p>This is a small bugfix release: fixes for UUID decoding, NULL handling in <code>sqlpage.link</code>, OIDC login loops, submenu clicks, and several SQL parser improvements.</p>
<h1><strong>Release Notes</strong></h1>
<h3>🐛 Bug Fixes</h3>
<ul>
<li>
<p>Fixed decoding of <strong>UUID values</strong>.</p>
</li>
<li>
<p>Fixed handling of <strong>NULL values</strong> in <a href="https://sql-page.com/functions.sql?function=link" rel="nofollow"><code>sqlpage.link</code></a>:</p>
<ul>
<li>Previously encoded as <code>'null'</code> (string).</li>
<li>Now omitted correctly from query parameters.</li>
</ul>
</li>
<li>
<p>Fixed a bug in <strong>OIDC login flows</strong>:</p>
<ul>
<li>When two tabs started login simultaneously, an <strong>infinite redirect loop</strong> could occur.</li>
<li>Most common when mobile browsers restored multiple inactive tabs.</li>
</ul>
</li>
</ul>
<hr>
<h3>🖱️ Submenu Handling in Shell</h3>
<ul>
<li><strong>Submenus now auto-close on click</strong>.</li>
<li>This avoids a regression introduced in v0.36.0 where clicking anywhere after submenu navigation scrolled the page back to the top.</li>
<li>Temporary fix — a proper solution is planned for the next release.</li>
<li>See <a href="https://github.com/sqlpage/SQLPage/issues/1011" data-hovercard-type="issue" data-hovercard-url="/sqlpage/SQLPage/issues/1011/hovercard">issue #1011</a> for details.</li>
</ul>
<hr>
<h3>🎨 Better Visual Errors</h3>
<ul>
<li>
<p>Adopted the new <strong>styled error pages</strong> (introduced in v0.37.1) for:</p>
<ul>
<li><code>403 Forbidden</code></li>
<li><code>429 Too Many Requests</code></li>
</ul>
</li>
</ul>
<hr>
<h3>📜 SQL Parser Improvements</h3>
<ul>
<li>
<p>Improved compatibility with advanced queries:</p>
<ul>
<li><strong>MERGE queries</strong> inside CTEs.</li>
<li><strong>MERGE queries with RETURNING</strong> clauses.</li>
</ul>
</li>
<li>
<p>Based on upstream changes in <a href="https://github.com/apache/datafusion-sqlparser-rs/blob/main/changelog/0.59.0.md">datafusion-sqlparser-rs 0.59.0</a>.</p>
</li>
</ul>github-actions[bot]tag:github.com,2008:Repository/519912039/v0.37.02025-09-06T11:41:41Zv0.37.0<h1>SQLPage v0.37 released !</h1>
<div class="markdown-alert markdown-alert-note"><p class="markdown-alert-title"><svg class="octicon octicon-info mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>Note</p><p><a href="https://sql-page.com" rel="nofollow">SQLPage</a> lets you build web applications using SQL queries. If you know SQL, you can create complete web applications quickly.<br>
<strong>Download</strong> for <a href="https://github.com/sqlpage/SQLPage/releases/latest/download/sqlpage-windows.zip">Windows</a>, <a href="https://github.com/sqlpage/SQLPage/releases/latest/download/sqlpage-macos.tgz">MacOS</a>, or <a href="https://github.com/sqlpage/SQLPage/releases/latest/download/sqlpage-linux.tgz">Linux</a>, or <a href="https://editor.datapage.app" rel="nofollow"><strong>try online</strong></a> !</p>
</div>
<p>Main changes: Windows app is now cryptographically signed for verified installs, plus new download component, enhanced BLOB support, smarter modals, and improved error handling.</p>
<h1><strong>Release Notes</strong></h1>
<p>Main changes: Windows app is now cryptographically signed for verified installs, plus new download component, enhanced BLOB support, smarter modals, and improved error handling. More details below.</p>
<h3><strong>🔐 Windows App Signing</strong></h3>
<ul>
<li>
<p><code>sqlpage.exe</code> is now <strong>cryptographically signed</strong> during releases.</p>
</li>
<li>
<p>This ensures files haven’t been tampered with and improves trust.</p>
</li>
<li>
<p>Windows will display <strong>“Verified Publisher”</strong> and you should no longer see warnings like:</p>
<ul>
<li>“This app might harm your device”</li>
<li>“Windows protected your PC”</li>
<li>“Are you sure you want to run this application?”</li>
</ul>
</li>
<li>
<p>Thanks to <a href="https://signpath.io/" rel="nofollow">SignPath</a> for providing the signing certificate!</p>
</li>
</ul>
<hr>
<h3>🆕 New <code>encoding</code> Parameter in <a href="https://sql-page.com/functions.sql?function=fetch" rel="nofollow"><code>fetch</code></a></h3>
<ul>
<li>
<p>Supports <strong>all standard web encodings</strong>: <a href="https://encoding.spec.whatwg.org/#concept-encoding-get" rel="nofollow">spec reference</a></p>
</li>
<li>
<p>Added <strong><code>base64</code></strong> decoding support, compatible with <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs" rel="nofollow">Data URIs</a>.</p>
</li>
<li>
<p>Default behavior matches <a href="https://sql-page.com/functions.sql?function=fetch_with_meta" rel="nofollow"><code>fetch_with_meta</code></a></p>
<ul>
<li>Response is decoded as UTF-8 if possible</li>
<li>Falls back to <code>base64</code> otherwise.</li>
</ul>
</li>
</ul>
<hr>
<h3><strong><g-emoji class="g-emoji" alias="warning">⚠️</g-emoji> Better variable conflict Warnings</strong></h3>
<ul>
<li>If a <strong>URL parameter</strong> and a <strong>form field</strong> share the same name, SQLPage now shows a <strong>specific warning</strong>.</li>
<li>For backwards compatibility with older versions, SQLPage still allows accessing form field values (POST variables) using the <code>$var</code> syntax (instead of <code>:var</code>). This legacy behavior will be removed in the near future; <strong>you should monitor your application logs for warnings to ensure your app won't break</strong> when updating to the next version.</li>
</ul>
<hr>
<h3><strong>🪟 <a href="https://sql-page.com/component.sql?component=modal" rel="nofollow">Modal Component</a> Improvements</strong></h3>
<ul>
<li>Modals can now be <strong>opened with a simple link</strong>.</li>
<li>Works from <strong>tables, maps, forms, lists</strong>, and more.</li>
<li>You can <strong>link directly to modals from other pages</strong>.</li>
<li>If you refresh a page while a modal is open, <strong>it stays open</strong>.</li>
<li>New <strong><code>open</code> parameter</strong> to automatically open a modal on page load.</li>
</ul>
<h3>Example</h3>
<div class="highlight highlight-source-sql notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="select
'modal' as component,
'my_modal' as id,
'Hello !' as title,
'/my_modal_contents.sql' as embed;
select 'text' as component, 'Open [my modal](#my_modal)' as contents_md;"><pre><span class="pl-k">select</span>
<span class="pl-s"><span class="pl-pds">'</span>modal<span class="pl-pds">'</span></span> <span class="pl-k">as</span> component,
<span class="pl-s"><span class="pl-pds">'</span>my_modal<span class="pl-pds">'</span></span> <span class="pl-k">as</span> id,
<span class="pl-s"><span class="pl-pds">'</span>Hello !<span class="pl-pds">'</span></span> <span class="pl-k">as</span> title,
<span class="pl-s"><span class="pl-pds">'</span>/my_modal_contents.sql<span class="pl-pds">'</span></span> <span class="pl-k">as</span> embed;
<span class="pl-k">select</span> <span class="pl-s"><span class="pl-pds">'</span>text<span class="pl-pds">'</span></span> <span class="pl-k">as</span> component, <span class="pl-s"><span class="pl-pds">'</span>Open [my modal](#my_modal)<span class="pl-pds">'</span></span> <span class="pl-k">as</span> contents_md;</pre></div>
<hr>
<h3>📥 New Header Component: <a href="https://sql-page.com/component.sql?component=download" rel="nofollow">download</a></h3>
<ul>
<li>
<p>Lets users <strong>download files</strong> directly from:</p>
<ul>
<li>Database BLOBs</li>
<li>Local files on the server</li>
<li>External servers via fetch</li>
</ul>
</li>
</ul>
<hr>
<h3>🖼️ Enhanced BLOB Support</h3>
<ul>
<li>
<p>SQLPage now <strong>returns binary data (BLOBs)</strong> as <strong>data URLs</strong> automatically.</p>
</li>
<li>
<p>You can use BLOBs <strong>anywhere a URL is expected</strong>, including the new download component.</p>
</li>
<li>
<p>Supported types:</p>
<ul>
<li><code>BYTEA</code> (PostgreSQL)</li>
<li><code>BLOB</code> (MySQL, SQLite)</li>
<li><code>VARBINARY</code>, <code>IMAGE</code> (SQL Server)</li>
</ul>
</li>
<li>
<p>Automatic detection of <strong>common file types</strong> via magic bytes.</p>
</li>
<li>
<p>Example: use BLOBs directly for user avatars:</p>
<div class="highlight highlight-source-sql notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="select 'list' as component;
select username as title, avatar_blob as image_url from users;"><pre><span class="pl-k">select</span> <span class="pl-s"><span class="pl-pds">'</span>list<span class="pl-pds">'</span></span> <span class="pl-k">as</span> component;
<span class="pl-k">select</span> username <span class="pl-k">as</span> title, avatar_blob <span class="pl-k">as</span> image_url <span class="pl-k">from</span> users;</pre></div>
</li>
</ul>
<blockquote>
<p>For large files, it's still not recommended to store them directly in your database as BLOBs, for performance reasons.</p>
</blockquote>
<hr>
<h3><strong>📄 Better Character Encoding Errors</strong></h3>
<ul>
<li>If a <code>.sql</code> file uses the <strong>wrong encoding</strong> (not UTF-8), SQLPage now shows a <strong>clear error message</strong> pointing exactly to the problematic location.</li>
</ul>
<hr>
<h3><strong>🎨 Improved Visual Error Messages</strong></h3>
<ul>
<li><strong>All</strong> Errors (e.g., file access issues) now display in a <strong>clean, browser-friendly format</strong>.</li>
<li>No more raw, intimidating plain-text error dumps for errors that happen before rendering starts.</li>
</ul>
<hr>
<h3><strong>🔽 Smarter Dropdown Handling in Forms</strong></h3>
<ul>
<li>
<p>The <strong>form component</strong> now treats <strong>numbers and their string equivalents</strong> as equal in dropdown values.</p>
</li>
<li>
<p>Makes it easier to use <strong>variables</strong> for <code>value</code> while preserving dropdown selections.</p>
</li>
<li>
<p>Example:</p>
<div class="highlight highlight-source-sql notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="select 'form' as component;
select
'select' as type,
true as create_new,
true as dropdown,
'2' as value, -- passed as text even if option values are integers
'[{"label": "A", "value": 1}, {"label": "B", "value": 2}]' as options;"><pre><span class="pl-k">select</span> <span class="pl-s"><span class="pl-pds">'</span>form<span class="pl-pds">'</span></span> <span class="pl-k">as</span> component;
<span class="pl-k">select</span>
<span class="pl-s"><span class="pl-pds">'</span>select<span class="pl-pds">'</span></span> <span class="pl-k">as</span> type,
true <span class="pl-k">as</span> create_new,
true <span class="pl-k">as</span> dropdown,
<span class="pl-s"><span class="pl-pds">'</span>2<span class="pl-pds">'</span></span> <span class="pl-k">as</span> value, <span class="pl-c"><span class="pl-c">--</span> passed as text even if option values are integers</span>
<span class="pl-s"><span class="pl-pds">'</span>[{"label": "A", "value": 1}, {"label": "B", "value": 2}]<span class="pl-pds">'</span></span> <span class="pl-k">as</span> options;</pre></div>
</li>
</ul>github-actions[bot]