Skip to content
**Clean URLs:**
Now, you can access your pages without the extra “.sql” suffix. For example, if you’ve got a file called `page.sql`, simply use:
```
https://example.com/page
```
The previous behavior is preserved, so adding “.sql” still works. A big shout‑out to [@guspower](https://github.com/guspower) for their contributions!

**Complete Routing Rewrite:**
We’ve reworked our request routing system from top to bottom to make things smoother and more predictable for every request.

---

**HTTP Basic Authentication in fetch:**
SQLPage’s `sqlpage.fetch` function now supports HTTP Basic Authentication. Quickly call external APIs that require a username and password. For example:
```sql
SELECT sqlpage.fetch(
  'https://api.example.com/data',
  JSON_OBJECT(
    'auth', JSON_OBJECT('username', 'user', 'password', 'pass')
  )
);
```
Learn more in the [fetch documentation](https://sql-page.com/documentation.sql?component=fetch#component).

**Smarter fetch errors & Headers Defaults:**
When your HTTP request definition is off, you’ll now get clearer error messages—especially if there are unknown fields. Plus, the `headers` parameter is now optional: if omitted, SQLPage sends a default User‑Agent header that includes the SQLPage version.

---

- **Table CSS Fixes:**
  We fixed a bug that prevented proper CSS classes from being added to table cells. Your tables now look as polished as you expect.

- **Native Number Formatting:**
  Numeric values in tables are automatically formatted to your visitor’s locale. That means thousands separators, correct decimal points, and sorting that respects numeric order—without any extra work from you.
  *Example:*
  ```sql
  SELECT 'table' AS component, 'Sales Data' AS title;
  SELECT amount AS 'Total Sales' FROM sales;
  ```
  Not a formatted string in the database—just pure, locale‑sensitive output.

- **Enhanced Card Layouts:**
  Creating custom layouts with the `card` component is now easier:
  - The `embed` property automatically appends the `_sqlpage_embed` parameter to render your page as an embeddable fragment.
  - When an embedded page is rendered, the `shell` component is replaced by `shell-empty` to avoid duplicate headers and metadata.

- **Auto‑Submit Forms:**
  Add the new `auto_submit` parameter to your forms, and watch them auto‑submit on any field change—perfect for instant filters on dashboards.
  *Example:*
  ```sql
  SELECT 'form' AS component, 'Filter Results' AS title, true AS auto_submit;
  SELECT 'date' AS name;
  ```
- **Dynamic Options for Dropdowns:**
  Use the new `options_source` parameter to load dropdown options dynamically from another SQL file. Great for autocomplete on huge option lists!
  *Example:*
  ```sql
  SELECT 'form' AS component, 'Select Country' AS title, 'countries.sql' AS options_source;
  SELECT 'country' AS name;
  ```
- **Markdown in Field Descriptions:**
  With the new `description_md` property, you can now render markdown in form field descriptions to better guide your users.

- **Improved Header Error Messages:**
  If you accidentally use a header component (like `json` or `cookie`) after sending data, you’ll now see a more helpful error message.

---

- **ApexCharts Upgrade:**
  We’ve updated ApexCharts to [v4.4.0](https://github.com/apexcharts/apexcharts.js/releases/tag/v4.4.0). Expect smoother charts with bug fixes for your visualizations.

- **Tabler Icons & CSS:**
  Enjoy a refreshed look with Tabler Icons updated to [v3.30.0](https://tabler.io/changelog#/changelog/tabler-icons-3.30) and the CSS framework upgraded to [Tabler 1.0.0](https://github.com/tabler/tabler/releases/tag/v1.0.0). More icons, better consistency, and a sleeker interface.

---

- **Enhanced CSV Error Messages:**
  We improved error messages when a CSV import fails (using a `copy` statement and file upload).
- **Postgres CSV Bug Fix:**
  A pesky bug causing subsequent requests to fail after a CSV import error on PostgreSQL is now fixed. (See [Issue #788](https://github.com/sqlpage/SQLPage/issues/788) for details.)

---

**Upgraded SQL Parser (v0.54):**
Our sqlparser is now at [v0.54](https://github.com/apache/datafusion-sqlparser-rs/blob/main/changelog/0.54.0.md), offering enhanced support for advanced SQL syntax. New additions include:

- **INSERT...SELECT...RETURNING:**
  ```sql
  INSERT INTO users (name, email)
  SELECT :name, :email
  WHERE :name IS NOT NULL
  RETURNING 'redirect' AS component, 'user.sql?id=' || id AS link;
  ```
- **PostgreSQL’s overlaps operator:**
  ```sql
  SELECT 'card' AS component;
  SELECT event_name AS title, start_time || ' - ' || end_time AS description
  FROM events
  WHERE (start_time, end_time) overlaps ($start_filter::timestamp, $end_filter::timestamp);
  ```
- **MySQL’s INSERT...SET syntax:**
  ```sql
  INSERT INTO users
  SET name = :name, email = :email;
  ```

---

**New Function: sqlpage.headers**
Easily manage and inspect HTTP headers with the brand‑new [`sqlpage.headers`](https://sql-page.com/functions.sql?function=headers) function.