From b1a287aceb28ea49f022c55d58ac9b529de795fb Mon Sep 17 00:00:00 2001 From: Jonathan Adeline Date: Wed, 22 Apr 2026 19:03:12 +0400 Subject: [PATCH 1/4] fix: import preview (#5253) ---- Co-authored-by: Peter Evans --- .../entries/unreleased/bug/fix_import_preview.json | 9 +++++++++ .../database/components/table/ImportFileModal.vue | 12 ++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 changelog/entries/unreleased/bug/fix_import_preview.json diff --git a/changelog/entries/unreleased/bug/fix_import_preview.json b/changelog/entries/unreleased/bug/fix_import_preview.json new file mode 100644 index 0000000000..09223a6e9f --- /dev/null +++ b/changelog/entries/unreleased/bug/fix_import_preview.json @@ -0,0 +1,9 @@ +{ + "type": "bug", + "message": "fix import preview", + "issue_origin": "github", + "issue_number": null, + "domain": "database", + "bullet_points": [], + "created_at": "2026-04-22" +} \ No newline at end of file diff --git a/web-frontend/modules/database/components/table/ImportFileModal.vue b/web-frontend/modules/database/components/table/ImportFileModal.vue index dad805aa01..01cd4ef02c 100644 --- a/web-frontend/modules/database/components/table/ImportFileModal.vue +++ b/web-frontend/modules/database/components/table/ImportFileModal.vue @@ -99,6 +99,7 @@ class="import-modal__preview" :rows="previewImportData" :fields="sortedFields" + :field-options="importFieldOptions" /> @@ -106,6 +107,7 @@ class="import-modal__preview" :rows="previewFileData" :fields="fileFields" + :field-options="fileFieldOptions" /> @@ -293,6 +295,16 @@ export default { order: index, })) }, + importFieldOptions() { + return Object.fromEntries( + this.sortedFields.map((field) => [field.id, { hidden: false }]) + ) + }, + fileFieldOptions() { + return Object.fromEntries( + this.fileFields.map((field) => [field.id, { hidden: false }]) + ) + }, /** * All writable fields. */ From afe29a2a74dc9bd6ebd36689a84502e859c55dba Mon Sep 17 00:00:00 2001 From: dimmur-brw Date: Wed, 22 Apr 2026 17:48:27 +0200 Subject: [PATCH 2/4] fix: exclude autonumber sequences from schema dump to prevent restore failure (#5243) --- .../core/management/backup/backup_runner.py | 1 + .../src/baserow/test_utils/pytest_conftest.py | 37 ++++++++ .../core/management/test_backup_runner.py | 93 ++++++++++--------- ...ences_from_schema_dump_to_prevent_res.json | 9 ++ 4 files changed, 95 insertions(+), 45 deletions(-) create mode 100644 changelog/entries/unreleased/bug/3855_exclude_autonumber_sequences_from_schema_dump_to_prevent_res.json diff --git a/backend/src/baserow/core/management/backup/backup_runner.py b/backend/src/baserow/core/management/backup/backup_runner.py index 81b47c9fe4..7df1e2b7c7 100644 --- a/backend/src/baserow/core/management/backup/backup_runner.py +++ b/backend/src/baserow/core/management/backup/backup_runner.py @@ -172,6 +172,7 @@ def _backup_everything_but_user_tables( f"--exclude-table={MultipleSelectField.THROUGH_DATABASE_TABLE_PREFIX}*", f"--exclude-table={USER_TABLE_DATABASE_NAME_PREFIX}*", f"--exclude-table={LinkRowField.THROUGH_DATABASE_TABLE_PREFIX}*", + "--exclude-table=field_*_seq", f"--file={temporary_directory_name}/everything_but_user_tables/", ] self._run_command_in_sub_process( diff --git a/backend/src/baserow/test_utils/pytest_conftest.py b/backend/src/baserow/test_utils/pytest_conftest.py index de8f5b142c..38662cba8a 100755 --- a/backend/src/baserow/test_utils/pytest_conftest.py +++ b/backend/src/baserow/test_utils/pytest_conftest.py @@ -3,6 +3,7 @@ import os import sys import threading +import uuid from contextlib import ExitStack, contextmanager from datetime import date, datetime from decimal import Decimal @@ -38,6 +39,7 @@ from baserow.core.exceptions import PermissionDenied from baserow.core.jobs.registries import job_type_registry from baserow.core.permission_manager import CorePermissionManagerType +from baserow.core.psycopg import is_psycopg3, psycopg from baserow.core.services.dispatch_context import DispatchContext from baserow.core.services.utils import ServiceAdhocRefinements from baserow.core.trash.trash_types import WorkspaceTrashableItemType @@ -219,6 +221,41 @@ def environ(): os.environ[key] = value +@pytest.fixture() +def temporary_database(): + """ + Creates a temporary PostgreSQL database with a unique name, + yields its name, and drops it on teardown. + """ + + settings = connection.settings_dict + db_name = f"test_tmp_{uuid.uuid4().hex[:10]}" + + def _connect_autocommit(): + conn = psycopg.connect( + host=settings["HOST"], + port=settings["PORT"], + dbname=settings["NAME"], + user=settings["USER"], + password=settings["PASSWORD"], + ) + if is_psycopg3: + conn.autocommit = True + else: + conn.set_isolation_level(0) # ISOLATION_LEVEL_AUTOCOMMIT + return conn + + admin_conn = _connect_autocommit() + admin_conn.cursor().execute(f"CREATE DATABASE {db_name}") + admin_conn.close() + try: + yield db_name + finally: + cleanup_conn = _connect_autocommit() + cleanup_conn.cursor().execute(f"DROP DATABASE IF EXISTS {db_name}") + cleanup_conn.close() + + @pytest.fixture() def print_sql(): with CaptureQueriesContext(connection) as ctx: diff --git a/backend/tests/baserow/core/management/test_backup_runner.py b/backend/tests/baserow/core/management/test_backup_runner.py index df2de8de69..a34d89ce40 100644 --- a/backend/tests/baserow/core/management/test_backup_runner.py +++ b/backend/tests/baserow/core/management/test_backup_runner.py @@ -3,72 +3,72 @@ from pathlib import Path from unittest.mock import call, patch -from django.db import connection, transaction +from django.db import connection import pytest from freezegun import freeze_time -from baserow.contrib.database.table.models import Table from baserow.core.management.backup.backup_runner import BaserowBackupRunner from baserow.core.management.backup.exceptions import InvalidBaserowBackupArchive -from baserow.core.psycopg import is_psycopg3 -from baserow.core.trash.handler import TrashHandler +from baserow.core.psycopg import is_psycopg3, psycopg +from baserow.test_utils.helpers import setup_interesting_test_table @pytest.mark.django_db(transaction=True) @pytest.mark.once_per_day_in_ci -def test_can_backup_and_restore_baserow_reverting_changes(data_fixture, environ): +def test_can_backup_and_restore_baserow_reverting_changes( + data_fixture, environ, temporary_database +): + host = connection.settings_dict["HOST"] + dbname = connection.settings_dict["NAME"] + username = connection.settings_dict["USER"] + port = connection.settings_dict["PORT"] + password = connection.settings_dict["PASSWORD"] + environ["PGPASSWORD"] = password + runner = BaserowBackupRunner( - host=connection.settings_dict["HOST"], - database=connection.settings_dict["NAME"], - username=connection.settings_dict["USER"], - port=connection.settings_dict["PORT"], + host=host, + database=dbname, + username=username, + port=port, jobs=1, ) - environ["PGPASSWORD"] = connection.settings_dict["PASSWORD"] - table, fields, rows = data_fixture.build_table( - columns=[ - ("Name", "text"), - ], - rows=[["A"], ["B"], ["C"], ["D"]], - ) - table_to_delete, _, _ = data_fixture.build_table( - columns=[ - ("Name", "text"), - ], - rows=[["A"], ["B"], ["C"], ["D"]], - ) - deleted_table_name = table_to_delete.get_database_table_name() + table, _, _, _, context = setup_interesting_test_table(data_fixture) + + model = table.get_model() + original_row_count = model.objects.count() + user_table_name = table.get_database_table_name() with tempfile.TemporaryDirectory() as temporary_directory_name: backup_loc = temporary_directory_name + "/backup.tar.gz" - # With a batch size of 1 we expect 3 separate pg_dumps to be run. - runner.backup_baserow(backup_loc, 1) + runner.backup_baserow(backup_loc, batch_size=1) assert Path(backup_loc).is_file() - model = table.get_model(attribute_names=True) - - # Add a new row after we took the back-up that we want to reset by restoring. - model.objects.create(**{"name": "E"}) - # Delete a table to check it is recreated. - with transaction.atomic(): - TrashHandler.permanently_delete(table_to_delete) - - assert model.objects.count() == 5 - assert Table.objects.count() == 1 - assert deleted_table_name not in connection.introspection.table_names() + restore_runner = BaserowBackupRunner( + host=host, + database=temporary_database, + username=username, + port=port, + jobs=1, + ) + restore_runner.restore_baserow(backup_loc) - # --clean will make pg_restore overwrite existing db objects, not safe for - # general usage as it will not delete tables/relations created after the - # backup. - runner.restore_baserow(backup_loc, ["--clean", "--if-exists"]) + with psycopg.connect( + host=host, + port=port, + dbname=temporary_database, + user=username, + password=password, + ) as verify_conn: + with verify_conn.cursor() as cur: + cur.execute(f"SELECT COUNT(*) FROM {user_table_name}") + assert cur.fetchone()[0] == original_row_count - # The row we made after the backup has gone - assert model.objects.count() == 4 - # The table we deleted has been restored - assert Table.objects.count() == 2 - assert deleted_table_name in connection.introspection.table_names() + autonumber_field_id = context["name_to_field_id"]["autonumber"] + seq_name = f"field_{autonumber_field_id}_seq" + cur.execute(f"SELECT last_value FROM {seq_name}") + assert cur.fetchone()[0] > 0 @patch("tempfile.TemporaryDirectory") @@ -119,6 +119,7 @@ def test_backup_baserow_dumps_database_in_batches( "--exclude-table=database_multipleselect_*", "--exclude-table=database_table_*", "--exclude-table=database_relation_*", + "--exclude-table=field_*_seq", "--file=/fake_tmp_dir/everything_but_user_tables/", ] ), @@ -200,6 +201,7 @@ def test_can_change_num_jobs_and_insert_extra_args_for_baserow_backup( "--exclude-table=database_multipleselect_*", "--exclude-table=database_table_*", "--exclude-table=database_relation_*", + "--exclude-table=field_*_seq", "--file=/fake_tmp_dir/everything_but_user_tables/", extra_arg, ] @@ -597,6 +599,7 @@ def a_pg_dump_for_everything_else(): "--exclude-table=database_multipleselect_*", "--exclude-table=database_table_*", "--exclude-table=database_relation_*", + "--exclude-table=field_*_seq", "--file=/fake_tmp_dir/everything_but_user_tables/", ] ) diff --git a/changelog/entries/unreleased/bug/3855_exclude_autonumber_sequences_from_schema_dump_to_prevent_res.json b/changelog/entries/unreleased/bug/3855_exclude_autonumber_sequences_from_schema_dump_to_prevent_res.json new file mode 100644 index 0000000000..d93f210732 --- /dev/null +++ b/changelog/entries/unreleased/bug/3855_exclude_autonumber_sequences_from_schema_dump_to_prevent_res.json @@ -0,0 +1,9 @@ +{ + "type": "bug", + "message": "Exclude autonumber sequences from schema dump to prevent restore failure", + "issue_origin": "github", + "issue_number": 3855, + "domain": "database", + "bullet_points": [], + "created_at": "2026-04-21" +} \ No newline at end of file From d8ebd04a7b30a92d582e1e0e20c88f60b502052e Mon Sep 17 00:00:00 2001 From: Davide Silvestri <75379892+silvestrid@users.noreply.github.com> Date: Wed, 22 Apr 2026 20:36:31 +0200 Subject: [PATCH 3/4] fix: create row history entries in batches to avoid memory spikes (#5251) --- backend/src/baserow/contrib/database/rows/history.py | 4 +++- ...istory_entries_in_batches_to_avoid_big_memory_sp.json | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 changelog/entries/unreleased/bug/create_row_history_entries_in_batches_to_avoid_big_memory_sp.json diff --git a/backend/src/baserow/contrib/database/rows/history.py b/backend/src/baserow/contrib/database/rows/history.py index aa13498020..e100c0c1b5 100644 --- a/backend/src/baserow/contrib/database/rows/history.py +++ b/backend/src/baserow/contrib/database/rows/history.py @@ -37,7 +37,9 @@ def record_history_from_rows_action( row_history_entries = row_history_provider.get_row_history(user, action) if row_history_entries: - row_history_entries = RowHistory.objects.bulk_create(row_history_entries) + row_history_entries = RowHistory.objects.bulk_create( + row_history_entries, batch_size=1000 + ) for table_id, per_table_row_history_entries in groupby( row_history_entries, lambda e: e.table_id ): diff --git a/changelog/entries/unreleased/bug/create_row_history_entries_in_batches_to_avoid_big_memory_sp.json b/changelog/entries/unreleased/bug/create_row_history_entries_in_batches_to_avoid_big_memory_sp.json new file mode 100644 index 0000000000..1740074110 --- /dev/null +++ b/changelog/entries/unreleased/bug/create_row_history_entries_in_batches_to_avoid_big_memory_sp.json @@ -0,0 +1,9 @@ +{ + "type": "bug", + "message": "Create row history entries in batches to avoid memory spikes", + "issue_origin": "github", + "issue_number": null, + "domain": "database", + "bullet_points": [], + "created_at": "2026-04-22" +} \ No newline at end of file From f1cdb4d5362785dadcc81894f8ae62f213b584b8 Mon Sep 17 00:00:00 2001 From: Bram Date: Wed, 22 Apr 2026 21:07:50 +0200 Subject: [PATCH 4/4] Prepare for 2.2.1 release (#5256) --- README.md | 4 +- backend/docker/docker-entrypoint.sh | 2 +- backend/src/baserow/config/settings/base.py | 2 +- backend/src/baserow/version.py | 2 +- backend/uv.lock | 4 +- changelog.md | 42 +++++ ...tation_messages_and_pending_invite_en.json | 0 .../3090_ai_file_field_import_validation.json | 0 ...ences_from_schema_dump_to_prevent_res.json | 0 .../bug/4323_negative_number_formula.json | 0 .../5082_fix_ai_field_small_text_files.json | 0 ...ashes_on_retry_after_failed_backend_i.json | 0 ...163_ai_field_import_baserow_type_fail.json | 0 ...crash_when_a_periodic_data_sync_deact.json | 0 ...sh_in_grid_view_with_more_than_20_lin.json | 0 ...rm_crashes_when_editing_a_user_source.json | 0 ..._display_in_row_comment_notifications.json | 0 .../add_database_connection_health_check.json | 0 ...ies_in_batches_to_avoid_big_memory_sp.json | 0 ...sert_integration_handles_unique_const.json | 0 .../fix_database_api_docs_toggle_crash.json | 0 ...e_filter_crash_for_null_select_values.json | 0 .../bug/fix_enterprise_logo.json | 0 ...drag_placeholder_offset_with_group_by.json | 0 ..._quick_edit_without_update_permission.json | 0 .../bug/fix_import_preview.json | 0 .../fix_reusable_password_reset_tokens.json | 0 ...x_rollup_field_missing_relation_crash.json | 0 ...rowhistory_index_migration_concurrent.json | 0 ...c_templates_license_check_field_rules.json | 0 ..._a_crash_due_to_a_race_condition_that.json | 0 ...e_application_builder_silently_render.json | 0 ...proved_error_handling_for_the_ai_form.json | 0 ...lear_button_to_the_date_input_element.json | 0 .../add_file_support_anthropic_mistral.json | 0 ...iting_to_support_multiple_time_frames.json | 0 .../throttle_performance_optimizations.json | 0 changelog/releases.json | 4 + deploy/all-in-one/README.md | 40 ++-- deploy/all-in-one/supervisor/start.sh | 2 +- deploy/cloudron/CloudronManifest.json | 2 +- deploy/cloudron/Dockerfile | 2 +- deploy/helm/baserow/Chart.lock | 20 +- deploy/helm/baserow/Chart.yaml | 20 +- deploy/helm/baserow/README.md | 2 +- .../baserow/charts/baserow-common/Chart.yaml | 4 +- .../baserow/charts/baserow-common/README.md | 2 +- .../baserow/charts/baserow-common/values.yaml | 4 +- deploy/helm/baserow/values.yaml | 2 +- deploy/render/Dockerfile | 2 +- docker-compose.all-in-one.yml | 2 +- docker-compose.no-caddy.yml | 10 +- docker-compose.yml | 10 +- docs/installation/install-behind-apache.md | 12 +- docs/installation/install-behind-nginx.md | 12 +- docs/installation/install-on-aws.md | 28 +-- docs/installation/install-on-cloudron.md | 4 +- docs/installation/install-on-digital-ocean.md | 4 +- docs/installation/install-on-ubuntu.md | 4 +- .../install-using-standalone-images.md | 12 +- .../install-with-docker-compose.md | 2 +- docs/installation/install-with-docker.md | 38 ++-- docs/installation/install-with-helm.md | 2 +- docs/installation/install-with-k8s.md | 12 +- docs/installation/install-with-traefik.md | 2 +- docs/installation/supported.md | 2 +- docs/plugins/creation.md | 2 +- docs/plugins/installation.md | 26 +-- enterprise/backend/pyproject.toml | 2 +- enterprise/backend/website_export.csv | 178 +++++++++++------- heroku.Dockerfile | 2 +- premium/backend/pyproject.toml | 2 +- web-frontend/docker/docker-entrypoint.sh | 2 +- web-frontend/package.json | 2 +- 74 files changed, 306 insertions(+), 228 deletions(-) rename changelog/entries/{unreleased => 2.2.1}/breaking_change/remove_workspace_invitation_messages_and_pending_invite_en.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/3090_ai_file_field_import_validation.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/3855_exclude_autonumber_sequences_from_schema_dump_to_prevent_res.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/4323_negative_number_formula.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/5082_fix_ai_field_small_text_files.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/5140_fix_import_workspace_crashes_on_retry_after_failed_backend_i.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/5163_ai_field_import_baserow_type_fail.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/5171_fix_notification_panel_crash_when_a_periodic_data_sync_deact.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/5184_fix_linkrow_groupby_crash_in_grid_view_with_more_than_20_lin.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/5226_prevent_oidc_saml_form_crashes_when_editing_a_user_source.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/5230_fix_richeditor_display_in_row_comment_notifications.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/add_database_connection_health_check.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/create_row_history_entries_in_batches_to_avoid_big_memory_sp.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/ensure_local_baserow_upsert_integration_handles_unique_const.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/fix_database_api_docs_toggle_crash.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/fix_database_filter_crash_for_null_select_values.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/fix_enterprise_logo.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/fix_field_drag_placeholder_offset_with_group_by.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/fix_grid_field_quick_edit_without_update_permission.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/fix_import_preview.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/fix_reusable_password_reset_tokens.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/fix_rollup_field_missing_relation_crash.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/fix_rowhistory_index_migration_concurrent.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/fix_sync_templates_license_check_field_rules.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/fixed_a_bug_that_caused_a_crash_due_to_a_race_condition_that.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/fixes_if_formulas_in_the_application_builder_silently_render.json (100%) rename changelog/entries/{unreleased => 2.2.1}/bug/improved_error_handling_for_the_ai_form.json (100%) rename changelog/entries/{unreleased => 2.2.1}/feature/5202_add_clear_button_to_the_date_input_element.json (100%) rename changelog/entries/{unreleased => 2.2.1}/feature/add_file_support_anthropic_mistral.json (100%) rename changelog/entries/{unreleased => 2.2.1}/refactor/improve_rate_limiting_to_support_multiple_time_frames.json (100%) rename changelog/entries/{unreleased => 2.2.1}/refactor/throttle_performance_optimizations.json (100%) diff --git a/README.md b/README.md index 318d78d24a..8bb34b7957 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ existing tools and performs at any scale. [![Deploy to Heroku](https://www.herokucdn.com/deploy/button.svg)](https://www.heroku.com/deploy/?template=https://github.com/baserow/baserow/tree/master) ```bash -docker run -v baserow_data:/baserow/data -p 80:80 -p 443:443 baserow/baserow:2.2.0 +docker run -v baserow_data:/baserow/data -p 80:80 -p 443:443 baserow/baserow:2.2.1 ``` ![Baserow database screenshot](docs/assets/screenshot.png "Baserow database screenshot") @@ -108,7 +108,7 @@ Created by Baserow B.V. - bram@baserow.io. Distributes under the MIT license. See `LICENSE` for more information. -Version: 2.2.0 +Version: 2.2.1 The official repository can be found at https://github.com/baserow/baserow. diff --git a/backend/docker/docker-entrypoint.sh b/backend/docker/docker-entrypoint.sh index eb1d8a6f94..6c8d6d780b 100755 --- a/backend/docker/docker-entrypoint.sh +++ b/backend/docker/docker-entrypoint.sh @@ -6,7 +6,7 @@ set -euo pipefail # ENVIRONMENT VARIABLES USED DIRECTLY BY THIS ENTRYPOINT # ====================================================== -export BASEROW_VERSION="2.2.0" +export BASEROW_VERSION="2.2.1" # Used by docker-entrypoint.sh to start the dev server # If not configured you'll receive this: CommandError: "0.0.0.0:" is not a valid port number or address:port pair. diff --git a/backend/src/baserow/config/settings/base.py b/backend/src/baserow/config/settings/base.py index 1f36577853..ca2f614f3e 100644 --- a/backend/src/baserow/config/settings/base.py +++ b/backend/src/baserow/config/settings/base.py @@ -494,7 +494,7 @@ "name": "MIT", "url": "https://github.com/baserow/baserow/blob/develop/LICENSE", }, - "VERSION": "2.2.0", + "VERSION": "2.2.1", "SERVE_INCLUDE_SCHEMA": False, "TAGS": [ {"name": "Settings"}, diff --git a/backend/src/baserow/version.py b/backend/src/baserow/version.py index 3c00bb49aa..3f755ed209 100644 --- a/backend/src/baserow/version.py +++ b/backend/src/baserow/version.py @@ -1 +1 @@ -VERSION = "2.2.0" +VERSION = "2.2.1" diff --git a/backend/uv.lock b/backend/uv.lock index 27e3748f3c..1787aade05 100644 --- a/backend/uv.lock +++ b/backend/uv.lock @@ -461,12 +461,12 @@ dev = [ [[package]] name = "baserow-enterprise" -version = "2.2.0" +version = "2.2.1" source = { editable = "../enterprise/backend" } [[package]] name = "baserow-premium" -version = "2.2.0" +version = "2.2.1" source = { editable = "../premium/backend" } [[package]] diff --git a/changelog.md b/changelog.md index 96826c8340..e82983e18c 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,47 @@ # Changelog +## Released 2.2.1 + +### New features +* [Builder] Add 'clear' button to the date input element. [#5202](https://github.com/baserow/baserow/issues/5202) +* [Database] Add file attachment support for Anthropic, Mistral and other AI field providers [#5154](https://github.com/baserow/baserow/issues/5154) + +### Bug fixes +* [Database] AI file field is now validated during import [#3090](https://github.com/baserow/baserow/issues/3090) +* [Database] Exclude autonumber sequences from schema dump to prevent restore failure [#3855](https://github.com/baserow/baserow/issues/3855) +* [Database] Fix negative sign in formula output disappearing when a cell is selected [#4323](https://github.com/baserow/baserow/issues/4323) +* [Database] Fix AI field not correctly handling small text files [#5082](https://github.com/baserow/baserow/issues/5082) +* [Core] Fix import workspace crashes on retry after failed backend import [#5140](https://github.com/baserow/baserow/issues/5140) +* [Database] Fix import of unknown ai generative types [#5163](https://github.com/baserow/baserow/issues/5163) +* [Database] Fix notification panel crash when a periodic_data_sync_deactivated notification is rendered [#5171](https://github.com/baserow/baserow/issues/5171) +* [Database] Fix link-row group-by crash in grid view with more than 20 linked items [#5184](https://github.com/baserow/baserow/issues/5184) +* [Builder] prevent OIDC/SAML form crashes when editing a user source in the application builder [#5226](https://github.com/baserow/baserow/issues/5226) +* [Core] Fix RichTextEditor display in row comment notifications [#5230](https://github.com/baserow/baserow/issues/5230) +* [Core] Add database connection health check. +* [Database] Create row history entries in batches to avoid memory spikes +* [Integration] Ensure Local Baserow Upsert integration handles field constraint errors. +* [Database] Fix the database API docs page crashing when opening the database list from the header. [#5212](https://github.com/baserow/baserow/issues/5212) +* [Database] Fix database filters crashing when select option cells are temporarily null during row evaluation. [#5217](https://github.com/baserow/baserow/issues/5217) +* [Core] Custom enterprise logo can be set again +* [Database] Fix field drag-and-drop placeholder being offset by the group-by column width when a group by is active. +* [Database] Fix grid field quick edit crashing when the field update context is unavailable because the user lacks field update permission. [#5216](https://github.com/baserow/baserow/issues/5216) +* [Database] fix import preview +* [Core] Fix password reset tokens not being invalidated after use, allowing persistent account takeover. Tokens are now single-use, token expiry reduced to 1 hour, and a confirmation email is sent on every password change. [#5165](https://github.com/baserow/baserow/issues/5165) +* [Database] Fix rollup and count fields crashing when a stale in-memory relation points to a deleted field during formula recalculation. [#5214](https://github.com/baserow/baserow/issues/5214) +* [Core] Make concurrent index migrations idempotent so they can be re-run after a partial failure. +* [Database] Fix template sync failing when importing enterprise field rules without a license. +* [Automation] Fixed a bug that caused a crash due to a race condition that could happen if a node is deleted while it is being dispatched. +* [Builder] Fixes if() formulas in the Application Builder silently rendering nothing when the condition references an empty field +* [Integration] Improved error handling for the AI Form. + +### Refactors +* [Automation] Improve rate limiting to support multiple time frames +* [Core] Optimize rate limiting: cache user and settings lookups and reorganize throttling code. + +### Breaking API changes +* [Core] Workspace invitations no longer support custom messages, and the `BASEROW_MAX_PENDING_WORKSPACE_INVITES` env var has been removed. + + ## Released 2.2.0 ### New features diff --git a/changelog/entries/unreleased/breaking_change/remove_workspace_invitation_messages_and_pending_invite_en.json b/changelog/entries/2.2.1/breaking_change/remove_workspace_invitation_messages_and_pending_invite_en.json similarity index 100% rename from changelog/entries/unreleased/breaking_change/remove_workspace_invitation_messages_and_pending_invite_en.json rename to changelog/entries/2.2.1/breaking_change/remove_workspace_invitation_messages_and_pending_invite_en.json diff --git a/changelog/entries/unreleased/bug/3090_ai_file_field_import_validation.json b/changelog/entries/2.2.1/bug/3090_ai_file_field_import_validation.json similarity index 100% rename from changelog/entries/unreleased/bug/3090_ai_file_field_import_validation.json rename to changelog/entries/2.2.1/bug/3090_ai_file_field_import_validation.json diff --git a/changelog/entries/unreleased/bug/3855_exclude_autonumber_sequences_from_schema_dump_to_prevent_res.json b/changelog/entries/2.2.1/bug/3855_exclude_autonumber_sequences_from_schema_dump_to_prevent_res.json similarity index 100% rename from changelog/entries/unreleased/bug/3855_exclude_autonumber_sequences_from_schema_dump_to_prevent_res.json rename to changelog/entries/2.2.1/bug/3855_exclude_autonumber_sequences_from_schema_dump_to_prevent_res.json diff --git a/changelog/entries/unreleased/bug/4323_negative_number_formula.json b/changelog/entries/2.2.1/bug/4323_negative_number_formula.json similarity index 100% rename from changelog/entries/unreleased/bug/4323_negative_number_formula.json rename to changelog/entries/2.2.1/bug/4323_negative_number_formula.json diff --git a/changelog/entries/unreleased/bug/5082_fix_ai_field_small_text_files.json b/changelog/entries/2.2.1/bug/5082_fix_ai_field_small_text_files.json similarity index 100% rename from changelog/entries/unreleased/bug/5082_fix_ai_field_small_text_files.json rename to changelog/entries/2.2.1/bug/5082_fix_ai_field_small_text_files.json diff --git a/changelog/entries/unreleased/bug/5140_fix_import_workspace_crashes_on_retry_after_failed_backend_i.json b/changelog/entries/2.2.1/bug/5140_fix_import_workspace_crashes_on_retry_after_failed_backend_i.json similarity index 100% rename from changelog/entries/unreleased/bug/5140_fix_import_workspace_crashes_on_retry_after_failed_backend_i.json rename to changelog/entries/2.2.1/bug/5140_fix_import_workspace_crashes_on_retry_after_failed_backend_i.json diff --git a/changelog/entries/unreleased/bug/5163_ai_field_import_baserow_type_fail.json b/changelog/entries/2.2.1/bug/5163_ai_field_import_baserow_type_fail.json similarity index 100% rename from changelog/entries/unreleased/bug/5163_ai_field_import_baserow_type_fail.json rename to changelog/entries/2.2.1/bug/5163_ai_field_import_baserow_type_fail.json diff --git a/changelog/entries/unreleased/bug/5171_fix_notification_panel_crash_when_a_periodic_data_sync_deact.json b/changelog/entries/2.2.1/bug/5171_fix_notification_panel_crash_when_a_periodic_data_sync_deact.json similarity index 100% rename from changelog/entries/unreleased/bug/5171_fix_notification_panel_crash_when_a_periodic_data_sync_deact.json rename to changelog/entries/2.2.1/bug/5171_fix_notification_panel_crash_when_a_periodic_data_sync_deact.json diff --git a/changelog/entries/unreleased/bug/5184_fix_linkrow_groupby_crash_in_grid_view_with_more_than_20_lin.json b/changelog/entries/2.2.1/bug/5184_fix_linkrow_groupby_crash_in_grid_view_with_more_than_20_lin.json similarity index 100% rename from changelog/entries/unreleased/bug/5184_fix_linkrow_groupby_crash_in_grid_view_with_more_than_20_lin.json rename to changelog/entries/2.2.1/bug/5184_fix_linkrow_groupby_crash_in_grid_view_with_more_than_20_lin.json diff --git a/changelog/entries/unreleased/bug/5226_prevent_oidc_saml_form_crashes_when_editing_a_user_source.json b/changelog/entries/2.2.1/bug/5226_prevent_oidc_saml_form_crashes_when_editing_a_user_source.json similarity index 100% rename from changelog/entries/unreleased/bug/5226_prevent_oidc_saml_form_crashes_when_editing_a_user_source.json rename to changelog/entries/2.2.1/bug/5226_prevent_oidc_saml_form_crashes_when_editing_a_user_source.json diff --git a/changelog/entries/unreleased/bug/5230_fix_richeditor_display_in_row_comment_notifications.json b/changelog/entries/2.2.1/bug/5230_fix_richeditor_display_in_row_comment_notifications.json similarity index 100% rename from changelog/entries/unreleased/bug/5230_fix_richeditor_display_in_row_comment_notifications.json rename to changelog/entries/2.2.1/bug/5230_fix_richeditor_display_in_row_comment_notifications.json diff --git a/changelog/entries/unreleased/bug/add_database_connection_health_check.json b/changelog/entries/2.2.1/bug/add_database_connection_health_check.json similarity index 100% rename from changelog/entries/unreleased/bug/add_database_connection_health_check.json rename to changelog/entries/2.2.1/bug/add_database_connection_health_check.json diff --git a/changelog/entries/unreleased/bug/create_row_history_entries_in_batches_to_avoid_big_memory_sp.json b/changelog/entries/2.2.1/bug/create_row_history_entries_in_batches_to_avoid_big_memory_sp.json similarity index 100% rename from changelog/entries/unreleased/bug/create_row_history_entries_in_batches_to_avoid_big_memory_sp.json rename to changelog/entries/2.2.1/bug/create_row_history_entries_in_batches_to_avoid_big_memory_sp.json diff --git a/changelog/entries/unreleased/bug/ensure_local_baserow_upsert_integration_handles_unique_const.json b/changelog/entries/2.2.1/bug/ensure_local_baserow_upsert_integration_handles_unique_const.json similarity index 100% rename from changelog/entries/unreleased/bug/ensure_local_baserow_upsert_integration_handles_unique_const.json rename to changelog/entries/2.2.1/bug/ensure_local_baserow_upsert_integration_handles_unique_const.json diff --git a/changelog/entries/unreleased/bug/fix_database_api_docs_toggle_crash.json b/changelog/entries/2.2.1/bug/fix_database_api_docs_toggle_crash.json similarity index 100% rename from changelog/entries/unreleased/bug/fix_database_api_docs_toggle_crash.json rename to changelog/entries/2.2.1/bug/fix_database_api_docs_toggle_crash.json diff --git a/changelog/entries/unreleased/bug/fix_database_filter_crash_for_null_select_values.json b/changelog/entries/2.2.1/bug/fix_database_filter_crash_for_null_select_values.json similarity index 100% rename from changelog/entries/unreleased/bug/fix_database_filter_crash_for_null_select_values.json rename to changelog/entries/2.2.1/bug/fix_database_filter_crash_for_null_select_values.json diff --git a/changelog/entries/unreleased/bug/fix_enterprise_logo.json b/changelog/entries/2.2.1/bug/fix_enterprise_logo.json similarity index 100% rename from changelog/entries/unreleased/bug/fix_enterprise_logo.json rename to changelog/entries/2.2.1/bug/fix_enterprise_logo.json diff --git a/changelog/entries/unreleased/bug/fix_field_drag_placeholder_offset_with_group_by.json b/changelog/entries/2.2.1/bug/fix_field_drag_placeholder_offset_with_group_by.json similarity index 100% rename from changelog/entries/unreleased/bug/fix_field_drag_placeholder_offset_with_group_by.json rename to changelog/entries/2.2.1/bug/fix_field_drag_placeholder_offset_with_group_by.json diff --git a/changelog/entries/unreleased/bug/fix_grid_field_quick_edit_without_update_permission.json b/changelog/entries/2.2.1/bug/fix_grid_field_quick_edit_without_update_permission.json similarity index 100% rename from changelog/entries/unreleased/bug/fix_grid_field_quick_edit_without_update_permission.json rename to changelog/entries/2.2.1/bug/fix_grid_field_quick_edit_without_update_permission.json diff --git a/changelog/entries/unreleased/bug/fix_import_preview.json b/changelog/entries/2.2.1/bug/fix_import_preview.json similarity index 100% rename from changelog/entries/unreleased/bug/fix_import_preview.json rename to changelog/entries/2.2.1/bug/fix_import_preview.json diff --git a/changelog/entries/unreleased/bug/fix_reusable_password_reset_tokens.json b/changelog/entries/2.2.1/bug/fix_reusable_password_reset_tokens.json similarity index 100% rename from changelog/entries/unreleased/bug/fix_reusable_password_reset_tokens.json rename to changelog/entries/2.2.1/bug/fix_reusable_password_reset_tokens.json diff --git a/changelog/entries/unreleased/bug/fix_rollup_field_missing_relation_crash.json b/changelog/entries/2.2.1/bug/fix_rollup_field_missing_relation_crash.json similarity index 100% rename from changelog/entries/unreleased/bug/fix_rollup_field_missing_relation_crash.json rename to changelog/entries/2.2.1/bug/fix_rollup_field_missing_relation_crash.json diff --git a/changelog/entries/unreleased/bug/fix_rowhistory_index_migration_concurrent.json b/changelog/entries/2.2.1/bug/fix_rowhistory_index_migration_concurrent.json similarity index 100% rename from changelog/entries/unreleased/bug/fix_rowhistory_index_migration_concurrent.json rename to changelog/entries/2.2.1/bug/fix_rowhistory_index_migration_concurrent.json diff --git a/changelog/entries/unreleased/bug/fix_sync_templates_license_check_field_rules.json b/changelog/entries/2.2.1/bug/fix_sync_templates_license_check_field_rules.json similarity index 100% rename from changelog/entries/unreleased/bug/fix_sync_templates_license_check_field_rules.json rename to changelog/entries/2.2.1/bug/fix_sync_templates_license_check_field_rules.json diff --git a/changelog/entries/unreleased/bug/fixed_a_bug_that_caused_a_crash_due_to_a_race_condition_that.json b/changelog/entries/2.2.1/bug/fixed_a_bug_that_caused_a_crash_due_to_a_race_condition_that.json similarity index 100% rename from changelog/entries/unreleased/bug/fixed_a_bug_that_caused_a_crash_due_to_a_race_condition_that.json rename to changelog/entries/2.2.1/bug/fixed_a_bug_that_caused_a_crash_due_to_a_race_condition_that.json diff --git a/changelog/entries/unreleased/bug/fixes_if_formulas_in_the_application_builder_silently_render.json b/changelog/entries/2.2.1/bug/fixes_if_formulas_in_the_application_builder_silently_render.json similarity index 100% rename from changelog/entries/unreleased/bug/fixes_if_formulas_in_the_application_builder_silently_render.json rename to changelog/entries/2.2.1/bug/fixes_if_formulas_in_the_application_builder_silently_render.json diff --git a/changelog/entries/unreleased/bug/improved_error_handling_for_the_ai_form.json b/changelog/entries/2.2.1/bug/improved_error_handling_for_the_ai_form.json similarity index 100% rename from changelog/entries/unreleased/bug/improved_error_handling_for_the_ai_form.json rename to changelog/entries/2.2.1/bug/improved_error_handling_for_the_ai_form.json diff --git a/changelog/entries/unreleased/feature/5202_add_clear_button_to_the_date_input_element.json b/changelog/entries/2.2.1/feature/5202_add_clear_button_to_the_date_input_element.json similarity index 100% rename from changelog/entries/unreleased/feature/5202_add_clear_button_to_the_date_input_element.json rename to changelog/entries/2.2.1/feature/5202_add_clear_button_to_the_date_input_element.json diff --git a/changelog/entries/unreleased/feature/add_file_support_anthropic_mistral.json b/changelog/entries/2.2.1/feature/add_file_support_anthropic_mistral.json similarity index 100% rename from changelog/entries/unreleased/feature/add_file_support_anthropic_mistral.json rename to changelog/entries/2.2.1/feature/add_file_support_anthropic_mistral.json diff --git a/changelog/entries/unreleased/refactor/improve_rate_limiting_to_support_multiple_time_frames.json b/changelog/entries/2.2.1/refactor/improve_rate_limiting_to_support_multiple_time_frames.json similarity index 100% rename from changelog/entries/unreleased/refactor/improve_rate_limiting_to_support_multiple_time_frames.json rename to changelog/entries/2.2.1/refactor/improve_rate_limiting_to_support_multiple_time_frames.json diff --git a/changelog/entries/unreleased/refactor/throttle_performance_optimizations.json b/changelog/entries/2.2.1/refactor/throttle_performance_optimizations.json similarity index 100% rename from changelog/entries/unreleased/refactor/throttle_performance_optimizations.json rename to changelog/entries/2.2.1/refactor/throttle_performance_optimizations.json diff --git a/changelog/releases.json b/changelog/releases.json index 147840189c..0f84b2c957 100644 --- a/changelog/releases.json +++ b/changelog/releases.json @@ -1,5 +1,9 @@ { "releases": [ + { + "name": "2.2.1", + "created_at": "2026-04-22" + }, { "name": "2.2.0", "created_at": "2026-04-08" diff --git a/deploy/all-in-one/README.md b/deploy/all-in-one/README.md index 052a2819dd..4f4df51e3d 100644 --- a/deploy/all-in-one/README.md +++ b/deploy/all-in-one/README.md @@ -15,7 +15,7 @@ tool gives you the powers of a developer without leaving your browser. [Vue.js](https://vuejs.org/) and [PostgreSQL](https://www.postgresql.org/). ```bash -docker run -v baserow_data:/baserow/data -p 80:80 -p 443:443 baserow/baserow:2.2.0 +docker run -v baserow_data:/baserow/data -p 80:80 -p 443:443 baserow/baserow:2.2.1 ``` ## Quick Reference @@ -52,7 +52,7 @@ docker run \ -p 80:80 \ -p 443:443 \ --restart unless-stopped \ - baserow/baserow:2.2.0 + baserow/baserow:2.2.1 ``` * Change `BASEROW_PUBLIC_URL` to `https://YOUR_DOMAIN` or `http://YOUR_IP` to enable @@ -75,7 +75,7 @@ docker run \ ## Image Feature Overview -The `baserow/baserow:2.2.0` image by default runs all of Baserow's various services in +The `baserow/baserow:2.2.1` image by default runs all of Baserow's various services in a single container for maximum ease of use. > This image is designed for simple single server deployments or simple container @@ -223,7 +223,7 @@ docker run \ -p 80:80 \ -p 443:443 \ --restart unless-stopped \ - baserow/baserow:2.2.0 + baserow/baserow:2.2.1 ``` ### Behind a reverse proxy already handling ssl @@ -236,7 +236,7 @@ docker run \ -v baserow_data:/baserow/data \ -p 80:80 \ --restart unless-stopped \ - baserow/baserow:2.2.0 + baserow/baserow:2.2.1 ``` ### On a nonstandard HTTP port @@ -249,7 +249,7 @@ docker run \ -v baserow_data:/baserow/data \ -p 3001:80 \ --restart unless-stopped \ - baserow/baserow:2.2.0 + baserow/baserow:2.2.1 ``` ### With an external PostgresSQL server @@ -268,7 +268,7 @@ docker run \ -p 80:80 \ -p 443:443 \ --restart unless-stopped \ - baserow/baserow:2.2.0 + baserow/baserow:2.2.1 ``` ### With an external Redis server @@ -289,7 +289,7 @@ docker run \ -p 80:80 \ -p 443:443 \ --restart unless-stopped \ - baserow/baserow:2.2.0 + baserow/baserow:2.2.1 ``` ### With an external email server @@ -309,7 +309,7 @@ docker run \ -p 80:80 \ -p 443:443 \ --restart unless-stopped \ - baserow/baserow:2.2.0 + baserow/baserow:2.2.1 ``` ### With a Postgresql server running on the same host as the Baserow docker container @@ -347,7 +347,7 @@ docker run \ -v baserow_data:/baserow/data \ -p 80:80 \ -p 443:443 \ - baserow/baserow:2.2.0 + baserow/baserow:2.2.1 ``` ### Supply secrets using files @@ -374,7 +374,7 @@ docker run \ -v baserow_data:/baserow/data \ -p 80:80 \ -p 443:443 \ - baserow/baserow:2.2.0 + baserow/baserow:2.2.1 ``` ### Start just the embedded database @@ -387,7 +387,7 @@ docker run -it \ --name baserow \ -p 5432:5432 \ -v baserow_data:/baserow/data \ - baserow/baserow:2.2.0 \ + baserow/baserow:2.2.1 \ start-only-db # Now get the password from docker exec -it baserow cat /baserow/data/.pgpass @@ -419,7 +419,7 @@ docker run -it \ --rm \ --name baserow \ -v baserow_data:/baserow/data \ - baserow/baserow:2.2.0 \ + baserow/baserow:2.2.1 \ backend-cmd-with-db manage dbshell ``` @@ -542,19 +542,19 @@ the command below. ```bash # First read the help message for this command -docker run -it --rm -v baserow_data:/baserow/data baserow/baserow:2.2.0 \ +docker run -it --rm -v baserow_data:/baserow/data baserow/baserow:2.2.1 \ backend-cmd-with-db backup --help # Stop Baserow instance docker stop baserow # The command below backs up Baserow to the backups folder in the baserow_data volume: -docker run -it --rm -v baserow_data:/baserow/data baserow/baserow:2.2.0 \ +docker run -it --rm -v baserow_data:/baserow/data baserow/baserow:2.2.1 \ backend-cmd-with-db backup -f /baserow/data/backups/backup.tar.gz # Or backup to a file on your host instead run something like: docker run -it --rm -v baserow_data:/baserow/data -v $PWD:/baserow/host \ - baserow/baserow:2.2.0 backend-cmd-with-db backup -f /baserow/host/backup.tar.gz + baserow/baserow:2.2.1 backend-cmd-with-db backup -f /baserow/host/backup.tar.gz ``` ### Restore only Baserow's Postgres Database @@ -570,13 +570,13 @@ docker stop baserow docker run -it --rm \ -v old_baserow_data_volume_containing_the_backup_tar_gz:/baserow/old_data \ -v new_baserow_data_volume_to_restore_into:/baserow/data \ - baserow/baserow:2.2.0 backend-cmd-with-db restore -f /baserow/old_data/backup.tar.gz + baserow/baserow:2.2.1 backend-cmd-with-db restore -f /baserow/old_data/backup.tar.gz # Or to restore from a file on your host instead run something like: docker run -it --rm \ -v baserow_data:/baserow/data -v \ $(pwd):/baserow/host \ - baserow/baserow:2.2.0 backend-cmd-with-db restore -f /baserow/host/backup.tar.gz + baserow/baserow:2.2.1 backend-cmd-with-db restore -f /baserow/host/backup.tar.gz ``` ## Running healthchecks on Baserow @@ -627,7 +627,7 @@ docker run \ -p 80:80 \ -p 443:443 \ --restart unless-stopped \ - baserow/baserow:2.2.0 + baserow/baserow:2.2.1 ``` Or you can just store it directly in the volume at `baserow_data/env` meaning it will be @@ -636,7 +636,7 @@ loaded whenever you mount in this data volume. ### Building your own image from Baserow ```dockerfile -FROM baserow/baserow:2.2.0 +FROM baserow/baserow:2.2.1 # Any .sh files found in /baserow/supervisor/env/ will be sourced and loaded at startup # useful for storing your own environment variable overrides. diff --git a/deploy/all-in-one/supervisor/start.sh b/deploy/all-in-one/supervisor/start.sh index 25c022a6c0..2f9645f871 100755 --- a/deploy/all-in-one/supervisor/start.sh +++ b/deploy/all-in-one/supervisor/start.sh @@ -14,7 +14,7 @@ cat << EOF ██████╔╝██║ ██║███████║███████╗██║ ██║╚██████╔╝╚███╔███╔╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚══╝╚══╝ -Version 2.2.0 +Version 2.2.1 ========================================================================================= EOF diff --git a/deploy/cloudron/CloudronManifest.json b/deploy/cloudron/CloudronManifest.json index 255832f8a2..5ffb1dfdc1 100644 --- a/deploy/cloudron/CloudronManifest.json +++ b/deploy/cloudron/CloudronManifest.json @@ -8,7 +8,7 @@ "contactEmail": "bram@baserow.io", "icon": "file://logo.png", "tags": ["no-code", "nocode", "database", "data", "collaborate", "airtable"], - "version": "2.2.0", + "version": "2.2.1", "healthCheckPath": "/api/_health/", "httpPort": 80, "addons": { diff --git a/deploy/cloudron/Dockerfile b/deploy/cloudron/Dockerfile index 48a0c0932f..d664583e2c 100644 --- a/deploy/cloudron/Dockerfile +++ b/deploy/cloudron/Dockerfile @@ -1,4 +1,4 @@ -ARG FROM_IMAGE=baserow/baserow:2.2.0 +ARG FROM_IMAGE=baserow/baserow:2.2.1 # This is pinned as version pinning is done by the CI setting FROM_IMAGE. # hadolint ignore=DL3006 FROM $FROM_IMAGE AS image_base diff --git a/deploy/helm/baserow/Chart.lock b/deploy/helm/baserow/Chart.lock index 106df126a6..33fb420ae3 100644 --- a/deploy/helm/baserow/Chart.lock +++ b/deploy/helm/baserow/Chart.lock @@ -1,28 +1,28 @@ dependencies: - name: baserow repository: file://charts/baserow-common - version: 1.0.50 + version: 1.0.51 - name: baserow repository: file://charts/baserow-common - version: 1.0.50 + version: 1.0.51 - name: baserow repository: file://charts/baserow-common - version: 1.0.50 + version: 1.0.51 - name: baserow repository: file://charts/baserow-common - version: 1.0.50 + version: 1.0.51 - name: baserow repository: file://charts/baserow-common - version: 1.0.50 + version: 1.0.51 - name: baserow repository: file://charts/baserow-common - version: 1.0.50 + version: 1.0.51 - name: baserow repository: file://charts/baserow-common - version: 1.0.50 + version: 1.0.51 - name: baserow repository: file://charts/baserow-common - version: 1.0.50 + version: 1.0.51 - name: redis repository: https://charts.bitnami.com/bitnami version: 19.5.5 @@ -35,5 +35,5 @@ dependencies: - name: caddy-ingress-controller repository: https://caddyserver.github.io/ingress version: 1.1.0 -digest: sha256:88c8ed8b17c1b82180cf3b9b6fba5b0b1a724aef46d109a320ad6883388c7a05 -generated: "2026-04-08T19:01:15.468891+02:00" +digest: sha256:85683908e75597f5f0b821a562461fceca2f05308b7ef683d28d401f60373b44 +generated: "2026-04-22T20:47:28.551027+02:00" diff --git a/deploy/helm/baserow/Chart.yaml b/deploy/helm/baserow/Chart.yaml index 7cd38d3cbb..9ad388b07a 100644 --- a/deploy/helm/baserow/Chart.yaml +++ b/deploy/helm/baserow/Chart.yaml @@ -2,8 +2,8 @@ apiVersion: v2 name: baserow description: The open platform to create scalable databases and applications—without coding. type: application -version: 1.0.50 -appVersion: "2.2.0" +version: 1.0.51 +appVersion: "2.2.1" home: https://github.com/baserow/baserow/blob/develop/deploy/helm/baserow?ref_type=heads icon: https://baserow.io/img/favicon_192.png sources: @@ -13,43 +13,43 @@ sources: dependencies: - name: baserow alias: baserow-backend-asgi - version: "1.0.50" + version: "1.0.51" repository: "file://charts/baserow-common" - name: baserow alias: baserow-backend-wsgi - version: "1.0.50" + version: "1.0.51" repository: "file://charts/baserow-common" - name: baserow alias: baserow-frontend - version: "1.0.50" + version: "1.0.51" repository: "file://charts/baserow-common" - name: baserow alias: baserow-celery-beat-worker - version: "1.0.50" + version: "1.0.51" repository: "file://charts/baserow-common" - name: baserow alias: baserow-celery-export-worker - version: "1.0.50" + version: "1.0.51" repository: "file://charts/baserow-common" - name: baserow alias: baserow-celery-worker - version: "1.0.50" + version: "1.0.51" repository: "file://charts/baserow-common" - name: baserow alias: baserow-celery-flower - version: "1.0.50" + version: "1.0.51" repository: "file://charts/baserow-common" condition: baserow-celery-flower.enabled - name: baserow alias: baserow-embeddings - version: "1.0.50" + version: "1.0.51" repository: "file://charts/baserow-common" condition: baserow-embeddings.enabled diff --git a/deploy/helm/baserow/README.md b/deploy/helm/baserow/README.md index 21b94ddd1b..d2862749c4 100644 --- a/deploy/helm/baserow/README.md +++ b/deploy/helm/baserow/README.md @@ -232,7 +232,7 @@ caddy: | ------------------------------------------------------------------ | --------------------------------------------------------------------------------------- | ----------------------- | | `global.baserow.imageRegistry` | Global Docker image registry | `baserow` | | `global.baserow.imagePullSecrets` | Global Docker registry secret names as an array | `[]` | -| `global.baserow.image.tag` | Global Docker image tag | `2.2.0` | +| `global.baserow.image.tag` | Global Docker image tag | `2.2.1` | | `global.baserow.serviceAccount.shared` | Set to true to share the service account between all application components. | `true` | | `global.baserow.serviceAccount.create` | Set to true to create a service account to share between all application components. | `true` | | `global.baserow.serviceAccount.name` | Configure a name for service account to share between all application components. | `baserow` | diff --git a/deploy/helm/baserow/charts/baserow-common/Chart.yaml b/deploy/helm/baserow/charts/baserow-common/Chart.yaml index 33f120a1f3..0139cc2c30 100644 --- a/deploy/helm/baserow/charts/baserow-common/Chart.yaml +++ b/deploy/helm/baserow/charts/baserow-common/Chart.yaml @@ -15,10 +15,10 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 1.0.50 +version: 1.0.51 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "2.2.0" +appVersion: "2.2.1" diff --git a/deploy/helm/baserow/charts/baserow-common/README.md b/deploy/helm/baserow/charts/baserow-common/README.md index 446b484abd..959f5944d3 100644 --- a/deploy/helm/baserow/charts/baserow-common/README.md +++ b/deploy/helm/baserow/charts/baserow-common/README.md @@ -6,7 +6,7 @@ | ------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | | `global.baserow.imageRegistry` | Global Docker image registry | `baserow` | | `global.baserow.imagePullSecrets` | Global Docker registry secret names as an array | `[]` | -| `global.baserow.image.tag` | Global Docker image tag | `2.2.0` | +| `global.baserow.image.tag` | Global Docker image tag | `2.2.1` | | `global.baserow.serviceAccount.shared` | Set to true to share the service account between all application components. | `true` | | `global.baserow.serviceAccount.create` | Set to true to create a service account to share between all application components. | `true` | | `global.baserow.serviceAccount.name` | Configure a name for service account to share between all application components. | `baserow` | diff --git a/deploy/helm/baserow/charts/baserow-common/values.yaml b/deploy/helm/baserow/charts/baserow-common/values.yaml index b98cceb41e..26835a76bc 100644 --- a/deploy/helm/baserow/charts/baserow-common/values.yaml +++ b/deploy/helm/baserow/charts/baserow-common/values.yaml @@ -38,7 +38,7 @@ global: baserow: imageRegistry: baserow image: - tag: 2.2.0 + tag: 2.2.1 imagePullSecrets: [] serviceAccount: shared: true @@ -83,7 +83,7 @@ global: ## image: repository: baserow/baserow # Docker image repository - tag: 2.2.0 # Docker image tag + tag: 2.2.1 # Docker image tag pullPolicy: IfNotPresent # Image pull policy ## @param workingDir Application container working directory diff --git a/deploy/helm/baserow/values.yaml b/deploy/helm/baserow/values.yaml index d4fd2b8738..eac56cd3a7 100644 --- a/deploy/helm/baserow/values.yaml +++ b/deploy/helm/baserow/values.yaml @@ -43,7 +43,7 @@ global: baserow: imageRegistry: baserow image: - tag: 2.2.0 + tag: 2.2.1 imagePullSecrets: [] serviceAccount: shared: true diff --git a/deploy/render/Dockerfile b/deploy/render/Dockerfile index bed5f7f80e..eaff0227b9 100644 --- a/deploy/render/Dockerfile +++ b/deploy/render/Dockerfile @@ -1,4 +1,4 @@ -ARG FROM_IMAGE=baserow/baserow:2.2.0 +ARG FROM_IMAGE=baserow/baserow:2.2.1 # This is pinned as version pinning is done by the CI setting FROM_IMAGE. # hadolint ignore=DL3006 FROM $FROM_IMAGE AS image_base diff --git a/docker-compose.all-in-one.yml b/docker-compose.all-in-one.yml index 01e9f161ab..b80aa0e5fb 100644 --- a/docker-compose.all-in-one.yml +++ b/docker-compose.all-in-one.yml @@ -3,7 +3,7 @@ services: baserow: container_name: baserow - image: baserow/baserow:${BASEROW_VERSION:-2.2.0} + image: baserow/baserow:${BASEROW_VERSION:-2.2.1} environment: BASEROW_PUBLIC_URL: 'http://localhost' ports: diff --git a/docker-compose.no-caddy.yml b/docker-compose.no-caddy.yml index b03b7c7418..c8e3a5c488 100644 --- a/docker-compose.no-caddy.yml +++ b/docker-compose.no-caddy.yml @@ -202,7 +202,7 @@ x-backend-variables: services: backend: - image: baserow/backend:2.2.0 + image: baserow/backend:2.2.1 restart: unless-stopped ports: - "${HOST_PUBLISH_IP:-127.0.0.1}:8000:8000" @@ -217,7 +217,7 @@ services: local: web-frontend: - image: baserow/web-frontend:2.2.0 + image: baserow/web-frontend:2.2.1 restart: unless-stopped ports: - "${HOST_PUBLISH_IP:-127.0.0.1}:3000:3000" @@ -265,7 +265,7 @@ services: local: celery: - image: baserow/backend:2.2.0 + image: baserow/backend:2.2.1 restart: unless-stopped environment: <<: *backend-variables @@ -286,7 +286,7 @@ services: local: celery-export-worker: - image: baserow/backend:2.2.0 + image: baserow/backend:2.2.1 restart: unless-stopped command: celery-exportworker environment: @@ -307,7 +307,7 @@ services: local: celery-beat-worker: - image: baserow/backend:2.2.0 + image: baserow/backend:2.2.1 restart: unless-stopped command: celery-beat environment: diff --git a/docker-compose.yml b/docker-compose.yml index 25ae46adfd..65712e340d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -283,7 +283,7 @@ services: local: backend: - image: baserow/backend:${BASEROW_VERSION:-2.2.0} + image: baserow/backend:${BASEROW_VERSION:-2.2.1} restart: unless-stopped environment: @@ -297,7 +297,7 @@ services: local: web-frontend: - image: baserow/web-frontend:${BASEROW_VERSION:-2.2.0} + image: baserow/web-frontend:${BASEROW_VERSION:-2.2.1} restart: unless-stopped environment: BASEROW_PUBLIC_URL: ${BASEROW_PUBLIC_URL-http://localhost} @@ -350,7 +350,7 @@ services: local: celery: - image: baserow/backend:${BASEROW_VERSION:-2.2.0} + image: baserow/backend:${BASEROW_VERSION:-2.2.1} restart: unless-stopped environment: <<: *backend-variables @@ -372,7 +372,7 @@ services: local: celery-export-worker: - image: baserow/backend:${BASEROW_VERSION:-2.2.0} + image: baserow/backend:${BASEROW_VERSION:-2.2.1} restart: unless-stopped command: celery-exportworker environment: @@ -394,7 +394,7 @@ services: local: celery-beat-worker: - image: baserow/backend:${BASEROW_VERSION:-2.2.0} + image: baserow/backend:${BASEROW_VERSION:-2.2.1} restart: unless-stopped command: celery-beat healthcheck: diff --git a/docs/installation/install-behind-apache.md b/docs/installation/install-behind-apache.md index 9ef794d076..645db490ac 100644 --- a/docs/installation/install-behind-apache.md +++ b/docs/installation/install-behind-apache.md @@ -3,7 +3,7 @@ If you have an [Apache server](https://www.apache.com/) this guide will explain how to configure it to pass requests through to Baserow. -We strongly recommend you use our `baserow/baserow:2.2.0` image or the example +We strongly recommend you use our `baserow/baserow:2.2.1` image or the example `docker-compose.yml` files (excluding the `.no-caddy.yml` variant) provided in our [git repository](https://github.com/baserow/baserow/tree/master/deploy/apache/). @@ -18,8 +18,8 @@ simplifies your life by: > If you do not want to use our embedded Caddy service behind your Apache then > make sure you are using one of the two following deployment methods: > -> * Your own container setup with our single service `baserow/backend:2.2.0` - and `baserow/web-frontend:2.2.0` images. +> * Your own container setup with our single service `baserow/backend:2.2.1` + and `baserow/web-frontend:2.2.1` images. > * Or our `docker-compose.no-caddy.yml` example file in our [git repository](https://github.com/baserow/baserow/tree/master/deploy/apache/). > > Then you should use **Option 2: Without our embedded Caddy** section instead. @@ -32,7 +32,7 @@ simplifies your life by: Follow this option if you are using: -* The all-in-one Baserow image `baserow/baserow:2.2.0` +* The all-in-one Baserow image `baserow/baserow:2.2.1` * Any of the example compose files found in the root of our git repository `docker-compose.yml`/`docker-compose.all-in-one.yml` @@ -115,7 +115,7 @@ You should now be able to access Baserow on you configured subdomain. Follow this option if you are using: -* Our standalone `baserow/backend:2.2.0` and `baserow/web-frontend:2.2.0` images with +* Our standalone `baserow/backend:2.2.1` and `baserow/web-frontend:2.2.1` images with your own container orchestrator. * Or the `docker-compose.no-caddy.yml` example docker compose file in the root of our git repository. @@ -147,7 +147,7 @@ sudo systemctl restart apache2 You need to ensure user uploaded files are accessible in a folder for Apache to serve. In the rest of the guide we will use the example `/var/web` folder for this purpose. -If you are using the `baserow/backend:2.2.0` image then you can do this by adding +If you are using the `baserow/backend:2.2.1` image then you can do this by adding `-v /var/web:/baserow/data/media` to your normal `docker run` command used to launch the Baserow backend. diff --git a/docs/installation/install-behind-nginx.md b/docs/installation/install-behind-nginx.md index 9e1ea68eb4..bd0007996d 100644 --- a/docs/installation/install-behind-nginx.md +++ b/docs/installation/install-behind-nginx.md @@ -3,7 +3,7 @@ If you have an [Nginx server](https://www.nginx.com/) this guide will explain how to configure it to pass requests through to Baserow. -We strongly recommend you use our `baserow/baserow:2.2.0` image or the example +We strongly recommend you use our `baserow/baserow:2.2.1` image or the example `docker-compose.yml` files (excluding the `.no-caddy.yml` variant) provided in our [git repository](https://github.com/baserow/baserow/tree/master/deploy/nginx/). @@ -18,8 +18,8 @@ simplifies your life by: > If you do not want to use our embedded Caddy service behind your Nginx then > make sure you are using one of the two following deployment methods: > -> * Your own container setup with our single service `baserow/backend:2.2.0` - and `baserow/web-frontend:2.2.0` images. +> * Your own container setup with our single service `baserow/backend:2.2.1` + and `baserow/web-frontend:2.2.1` images. > * Or our `docker-compose.no-caddy.yml` example file in our [git repository](https://github.com/baserow/baserow/tree/master/deploy/nginx/). > > Then you should use **Option 2: Without our embedded Caddy** section instead. @@ -32,7 +32,7 @@ simplifies your life by: Follow this option if you are using: -* The all-in-one Baserow image `baserow/baserow:2.2.0` +* The all-in-one Baserow image `baserow/baserow:2.2.1` * Any of the example compose files found in the root of our git repository `docker-compose.yml`/`docker-compose.all-in-one.yml` @@ -107,7 +107,7 @@ You should now be able to access Baserow on you configured subdomain. Follow this option if you are using: -* Our standalone `baserow/backend:2.2.0` and `baserow/web-frontend:2.2.0` images with +* Our standalone `baserow/backend:2.2.1` and `baserow/web-frontend:2.2.1` images with your own container orchestrator. * Or the `docker-compose.no-caddy.yml` example docker compose file in the root of our git repository. @@ -126,7 +126,7 @@ but you might have to run different commands. You need to ensure user uploaded files are accessible in a folder for Nginx to serve. In the rest of the guide we will use the example `/var/web` folder for this purpose. -If you are using the `baserow/backend:2.2.0` image then you can do this by adding +If you are using the `baserow/backend:2.2.1` image then you can do this by adding `-v /var/web:/baserow/data/media` to your normal `docker run` command used to launch the Baserow backend. diff --git a/docs/installation/install-on-aws.md b/docs/installation/install-on-aws.md index ad92b0cd3c..cf7103ad82 100644 --- a/docs/installation/install-on-aws.md +++ b/docs/installation/install-on-aws.md @@ -49,7 +49,7 @@ overview this is what any AWS deployment of Baserow will need: ## Option 1) Deploying the all-in-one image to Fargate/ECS -The `baserow/baserow:2.2.0` image runs all of Baserow’s various services inside the +The `baserow/baserow:2.2.1` image runs all of Baserow’s various services inside the container for ease of use. This image is designed for single server deployments or simple deployments to @@ -67,7 +67,7 @@ Run. * You don't need to worry about configuring and linking together the different services that make up a Baserow deployment. * Configuring load balancers is easier as you can just directly route through all - requests to any horizontally scaled container running `baserow/baserow:2.2.0`. + requests to any horizontally scaled container running `baserow/baserow:2.2.1`. #### Cons @@ -75,7 +75,7 @@ Run. * Potentially higher resource usage overall as each of the all-in-one containers will come with its internal services, so you have less granular control over scaling specific services. - * For example if you deploy 10 `baserow/baserow:2.2.0` containers horizontally you + * For example if you deploy 10 `baserow/baserow:2.2.1` containers horizontally you by default end up with: * 10 web-frontend services * 10 backend services @@ -188,18 +188,18 @@ Generally, the Redis server is not the bottleneck in Baserow deployments as they Now create a target group on port 80 and ALB ready to route traffic to the Baserow containers. -When setting up the health check for the ALB the `baserow/baserow:2.2.0` container +When setting up the health check for the ALB the `baserow/baserow:2.2.1` container ,which you'll be deploying next, choose port `80` and health check URL `/api/_health/`. We recommend a long grace period of 900 seconds to account for first-time migrations being run on the first container's startup. #### 5) Launching Baserow on ECS/Fargate -Now we are ready to spin up our `baserow/baserow:2.2.0` containers. See below for a +Now we are ready to spin up our `baserow/baserow:2.2.1` containers. See below for a full task definition and environment variables. We recommend launching the containers with 2vCPUs and 4 GB of RAM each to start with. In short, you will want to: -1. Select the `baserow/baserow:2.2.0` image. +1. Select the `baserow/baserow:2.2.1` image. 2. Add a port mapping of `80` on TCP as this is where this images HTTP server is listening by default. 3. Mark the container as essential. @@ -244,7 +244,7 @@ container_definitions = < We recommend setting the timeout of each HTTP API request to 60 seconds in the @@ -484,7 +484,7 @@ This service is our HTTP REST API service. When creating the task definition you This service is our Websocket API service and when configuring the task definition you should: -1. Use the `baserow/backend:2.2.0` +1. Use the `baserow/backend:2.2.1` 2. Under docker configuration set `gunicorn` as the Command. 3. We recommend 2vCPUs and 4 GB of RAM per container to start with. 4. Map the container port `8000`/`TCP` @@ -496,7 +496,7 @@ should: This service is our asynchronous high priority task worker queue used for realtime collaboration and sending emails. -1. Use the `baserow/backend:2.2.0` image with `celery-worker` as the image command. +1. Use the `baserow/backend:2.2.1` image with `celery-worker` as the image command. 2. Under docker configuration set `celery-worker` as the Command. 3. No port mappings needed. 4. We recommend 2vCPUs and 4 GB of RAM per container to start with. @@ -509,7 +509,7 @@ This service is our asynchronous slow/low priority task worker queue for batch processes and running potentially slow operations for users like table exports and imports etc. -1. Use the `baserow/backend:2.2.0` image. +1. Use the `baserow/backend:2.2.1` image. 2. Under docker configuration set `celery-exportworker` as the Command. 3. No port mappings needed. 4. We recommend 2vCPUs and 4 GB of RAM per container to start with. @@ -520,7 +520,7 @@ imports etc. This service is our CRON task scheduler that can have multiple replicas deployed. -1. Use the `baserow/backend:2.2.0` image. +1. Use the `baserow/backend:2.2.1` image. 2. Under docker configuration set `celery-beat` as the Command. 3. No port mapping needed. 4. We recommend 1vCPUs and 3 GB of RAM per container to start with. @@ -537,7 +537,7 @@ This service is our CRON task scheduler that can have multiple replicas deployed Finally, this service is used for server side rendering and serving the frontend of Baserow. -1. Use the `baserow/web-frontend:2.2.0` image with no arguments needed. +1. Use the `baserow/web-frontend:2.2.1` image with no arguments needed. 2. Map the container port `3000` 3. We recommend 2vCPUs and 4 GB of RAM per container to start with. 4. Mark the container as essential. diff --git a/docs/installation/install-on-cloudron.md b/docs/installation/install-on-cloudron.md index 3eb53ffae0..43e641c970 100644 --- a/docs/installation/install-on-cloudron.md +++ b/docs/installation/install-on-cloudron.md @@ -46,7 +46,7 @@ $ cd baserow/deploy/cloudron After that you can install the Baserow Cloudron app by executing the following commands. ``` -$ cloudron install -l baserow.{YOUR_DOMAIN} --image baserow/cloudron:2.2.0 +$ cloudron install -l baserow.{YOUR_DOMAIN} --image baserow/cloudron:2.2.1 App is being installed. ... App is installed. @@ -89,7 +89,7 @@ the `baserow/deploy/cloudron` folder, you can upgrade your cloudron baserow serv the latest version by running the following command: ``` -cloudron update --app {YOUR_APP_ID} --image baserow/cloudron:2.2.0 +cloudron update --app {YOUR_APP_ID} --image baserow/cloudron:2.2.1 ``` > Note that you must replace the image with the most recent image of Baserow. The diff --git a/docs/installation/install-on-digital-ocean.md b/docs/installation/install-on-digital-ocean.md index 62ccc19a90..f471a43018 100644 --- a/docs/installation/install-on-digital-ocean.md +++ b/docs/installation/install-on-digital-ocean.md @@ -51,7 +51,7 @@ Navigate to the `Apps` page in the left sidebar of your Digital Ocean dashboard. on `Create App`, select `Docker Hub`, and fill out the following: Repository: `baserow/baserow` -Image tag or digest: `2.2.0` +Image tag or digest: `2.2.1` Click on `Next`, then on the `Edit` button of the `baserow-baserow` web service. Here you must change the HTTP Port to 80, and then click on `Back`. Click on the `Next` @@ -124,7 +124,7 @@ environment. In order to update the Baserow version, you simply need to replace the image tag. Navigate to the `Settings` tag of your created app, click on the `baserow-baserow` component, then click on the `Edit` button next to source, change the `Image tag` into -the desired version (latest is `2.2.0`), and click on save. The app will redeploy +the desired version (latest is `2.2.1`), and click on save. The app will redeploy with the latest version. ## External email server diff --git a/docs/installation/install-on-ubuntu.md b/docs/installation/install-on-ubuntu.md index 98ba724c8c..6204ccd2eb 100644 --- a/docs/installation/install-on-ubuntu.md +++ b/docs/installation/install-on-ubuntu.md @@ -34,7 +34,7 @@ docker run -e BASEROW_PUBLIC_URL=http://localhost \ -v baserow_data:/baserow/data \ -p 80:80 \ -p 443:443 \ -baserow/baserow:2.2.0 +baserow/baserow:2.2.1 # Watch the logs for Baserow to come available by running: docker logs baserow ``` @@ -147,7 +147,7 @@ docker run \ -v /baserow/media:/baserow/data/media \ -p 80:80 \ -p 443:443 \ - baserow/baserow:2.2.0 + baserow/baserow:2.2.1 # Check the logs and wait for Baserow to become available docker logs baserow ``` diff --git a/docs/installation/install-using-standalone-images.md b/docs/installation/install-using-standalone-images.md index 81df4688dc..a28cd684c2 100644 --- a/docs/installation/install-using-standalone-images.md +++ b/docs/installation/install-using-standalone-images.md @@ -10,9 +10,9 @@ Baserow consists of a number of services, two of which are built and provided as separate standalone images by us: -* `baserow/backend:2.2.0` which by default starts the Gunicorn Django backend server +* `baserow/backend:2.2.1` which by default starts the Gunicorn Django backend server for Baserow but is also used to start the celery workers and celery beat services. -* `baserow/web-frontend:2.2.0` which is a Nuxt server providing Server Side rendering +* `baserow/web-frontend:2.2.1` which is a Nuxt server providing Server Side rendering for the website. If you want to use your own container orchestration software like Kubernetes then these @@ -27,10 +27,10 @@ in the root of our repository. These are all the services you need to set up to run a Baserow using the standalone images: -* `baserow/backend:2.2.0` (default command is `gunicorn`) -* `baserow/backend:2.2.0` with command `celery-worker` -* `baserow/backend:2.2.0` with command `celery-export-worker` -* `baserow/web-frontend:2.2.0` (default command is `nuxt-prod`) +* `baserow/backend:2.2.1` (default command is `gunicorn`) +* `baserow/backend:2.2.1` with command `celery-worker` +* `baserow/backend:2.2.1` with command `celery-export-worker` +* `baserow/web-frontend:2.2.1` (default command is `nuxt-prod`) * A postgres database * A redis server diff --git a/docs/installation/install-with-docker-compose.md b/docs/installation/install-with-docker-compose.md index 662c0d6d07..313a9375a4 100644 --- a/docs/installation/install-with-docker-compose.md +++ b/docs/installation/install-with-docker-compose.md @@ -15,7 +15,7 @@ guide on the specifics of how to work with this image. services: baserow: container_name: baserow - image: baserow/baserow:2.2.0 + image: baserow/baserow:2.2.1 environment: BASEROW_PUBLIC_URL: 'http://localhost' ports: diff --git a/docs/installation/install-with-docker.md b/docs/installation/install-with-docker.md index f5defa1e7b..b82188b158 100644 --- a/docs/installation/install-with-docker.md +++ b/docs/installation/install-with-docker.md @@ -29,7 +29,7 @@ docker run \ -p 80:80 \ -p 443:443 \ --restart unless-stopped \ - baserow/baserow:2.2.0 + baserow/baserow:2.2.1 ``` * Change `BASEROW_PUBLIC_URL` to `https://YOUR_DOMAIN` or `http://YOUR_IP` to enable @@ -52,7 +52,7 @@ docker run \ ## Image Feature Overview -The `baserow/baserow:2.2.0` image by default runs all of Baserow's various services in +The `baserow/baserow:2.2.1` image by default runs all of Baserow's various services in a single container for maximum ease of use. > This image is designed for simple single server deployments or simple container @@ -200,7 +200,7 @@ docker run \ -p 80:80 \ -p 443:443 \ --restart unless-stopped \ - baserow/baserow:2.2.0 + baserow/baserow:2.2.1 ``` ### Behind a reverse proxy already handling ssl @@ -213,7 +213,7 @@ docker run \ -v baserow_data:/baserow/data \ -p 80:80 \ --restart unless-stopped \ - baserow/baserow:2.2.0 + baserow/baserow:2.2.1 ``` ### On a nonstandard HTTP port @@ -226,7 +226,7 @@ docker run \ -v baserow_data:/baserow/data \ -p 3001:80 \ --restart unless-stopped \ - baserow/baserow:2.2.0 + baserow/baserow:2.2.1 ``` ### With an external PostgresSQL server @@ -245,7 +245,7 @@ docker run \ -p 80:80 \ -p 443:443 \ --restart unless-stopped \ - baserow/baserow:2.2.0 + baserow/baserow:2.2.1 ``` ### With an external Redis server @@ -266,7 +266,7 @@ docker run \ -p 80:80 \ -p 443:443 \ --restart unless-stopped \ - baserow/baserow:2.2.0 + baserow/baserow:2.2.1 ``` ### With an external email server @@ -286,7 +286,7 @@ docker run \ -p 80:80 \ -p 443:443 \ --restart unless-stopped \ - baserow/baserow:2.2.0 + baserow/baserow:2.2.1 ``` ### With a Postgresql server running on the same host as the Baserow docker container @@ -324,7 +324,7 @@ docker run \ -v baserow_data:/baserow/data \ -p 80:80 \ -p 443:443 \ - baserow/baserow:2.2.0 + baserow/baserow:2.2.1 ``` ### Supply secrets using files @@ -351,7 +351,7 @@ docker run \ -v baserow_data:/baserow/data \ -p 80:80 \ -p 443:443 \ - baserow/baserow:2.2.0 + baserow/baserow:2.2.1 ``` ### Start just the embedded database @@ -364,7 +364,7 @@ docker run -it \ --name baserow \ -p 5432:5432 \ -v baserow_data:/baserow/data \ - baserow/baserow:2.2.0 \ + baserow/baserow:2.2.1 \ start-only-db # Now get the password from docker exec -it baserow cat /baserow/data/.pgpass @@ -396,7 +396,7 @@ docker run -it \ --rm \ --name baserow \ -v baserow_data:/baserow/data \ - baserow/baserow:2.2.0 \ + baserow/baserow:2.2.1 \ backend-cmd-with-db manage dbshell ``` @@ -519,19 +519,19 @@ the command below. ```bash # First read the help message for this command -docker run -it --rm -v baserow_data:/baserow/data baserow/baserow:2.2.0 \ +docker run -it --rm -v baserow_data:/baserow/data baserow/baserow:2.2.1 \ backend-cmd-with-db backup --help # Stop Baserow instance docker stop baserow # The command below backs up Baserow to the backups folder in the baserow_data volume: -docker run -it --rm -v baserow_data:/baserow/data baserow/baserow:2.2.0 \ +docker run -it --rm -v baserow_data:/baserow/data baserow/baserow:2.2.1 \ backend-cmd-with-db backup -f /baserow/data/backups/backup.tar.gz # Or backup to a file on your host instead run something like: docker run -it --rm -v baserow_data:/baserow/data -v $PWD:/baserow/host \ - baserow/baserow:2.2.0 backend-cmd-with-db backup -f /baserow/host/backup.tar.gz + baserow/baserow:2.2.1 backend-cmd-with-db backup -f /baserow/host/backup.tar.gz ``` ### Restore only Baserow's Postgres Database @@ -547,13 +547,13 @@ docker stop baserow docker run -it --rm \ -v old_baserow_data_volume_containing_the_backup_tar_gz:/baserow/old_data \ -v new_baserow_data_volume_to_restore_into:/baserow/data \ - baserow/baserow:2.2.0 backend-cmd-with-db restore -f /baserow/old_data/backup.tar.gz + baserow/baserow:2.2.1 backend-cmd-with-db restore -f /baserow/old_data/backup.tar.gz # Or to restore from a file on your host instead run something like: docker run -it --rm \ -v baserow_data:/baserow/data -v \ $(pwd):/baserow/host \ - baserow/baserow:2.2.0 backend-cmd-with-db restore -f /baserow/host/backup.tar.gz + baserow/baserow:2.2.1 backend-cmd-with-db restore -f /baserow/host/backup.tar.gz ``` ## Running healthchecks on Baserow @@ -604,7 +604,7 @@ docker run \ -p 80:80 \ -p 443:443 \ --restart unless-stopped \ - baserow/baserow:2.2.0 + baserow/baserow:2.2.1 ``` Or you can just store it directly in the volume at `baserow_data/env` meaning it will be @@ -613,7 +613,7 @@ loaded whenever you mount in this data volume. ### Building your own image from Baserow ```dockerfile -FROM baserow/baserow:2.2.0 +FROM baserow/baserow:2.2.1 # Any .sh files found in /baserow/supervisor/env/ will be sourced and loaded at startup # useful for storing your own environment variable overrides. diff --git a/docs/installation/install-with-helm.md b/docs/installation/install-with-helm.md index f31ef868fb..c6a6b0739c 100644 --- a/docs/installation/install-with-helm.md +++ b/docs/installation/install-with-helm.md @@ -133,7 +133,7 @@ You can specify a particular Baserow version by updating your `config.yaml`: ```yaml global: baserow: - image: 2.2.0 + image: 2.2.1 ``` Or specify the chart version directly: diff --git a/docs/installation/install-with-k8s.md b/docs/installation/install-with-k8s.md index a0d4f87ca8..86ea504295 100644 --- a/docs/installation/install-with-k8s.md +++ b/docs/installation/install-with-k8s.md @@ -167,7 +167,7 @@ spec: topologyKey: "kubernetes.io/hostname" containers: - name: backend-asgi - image: baserow/backend:2.2.0 + image: baserow/backend:2.2.1 workingDir: /baserow args: - "gunicorn" @@ -224,7 +224,7 @@ spec: topologyKey: "kubernetes.io/hostname" containers: - name: backend-wsgi - image: baserow/backend:2.2.0 + image: baserow/backend:2.2.1 workingDir: /baserow args: - "gunicorn-wsgi" @@ -283,7 +283,7 @@ spec: topologyKey: "kubernetes.io/hostname" containers: - name: backend-worker - image: baserow/backend:2.2.0 + image: baserow/backend:2.2.1 args: - "celery-worker" imagePullPolicy: Always @@ -300,7 +300,7 @@ spec: - secretRef: name: YOUR_ENV_SECRET_REF - name: backend-export-worker - image: baserow/backend:2.2.0 + image: baserow/backend:2.2.1 args: - "celery-exportworker" imagePullPolicy: Always @@ -317,7 +317,7 @@ spec: - secretRef: name: YOUR_ENV_SECRET_REF - name: backend-beat-worker - image: baserow/backend:2.2.0 + image: baserow/backend:2.2.1 args: - "celery-beat" imagePullPolicy: Always @@ -358,7 +358,7 @@ spec: topologyKey: "kubernetes.io/hostname" containers: - name: web-frontend - image: baserow/web-frontend:2.2.0 + image: baserow/web-frontend:2.2.1 args: - nuxt ports: diff --git a/docs/installation/install-with-traefik.md b/docs/installation/install-with-traefik.md index 3b6d2fd075..7d36596c47 100644 --- a/docs/installation/install-with-traefik.md +++ b/docs/installation/install-with-traefik.md @@ -10,7 +10,7 @@ See below for an example docker-compose file that will enable Baserow with Traef ``` services: baserow: - image: baserow/baserow:2.2.0 + image: baserow/baserow:2.2.1 container_name: baserow labels: # Explicitly tell Traefik to expose this container diff --git a/docs/installation/supported.md b/docs/installation/supported.md index f958df1bc0..aa03b54865 100644 --- a/docs/installation/supported.md +++ b/docs/installation/supported.md @@ -8,7 +8,7 @@ Software versions are divided into the following groups: before the release. * `Recommended`: Recommended software for the best experience. -## Baserow 2.2.0 +## Baserow 2.2.1 | Dependency | Supported versions | Tested versions | Recommended versions | diff --git a/docs/plugins/creation.md b/docs/plugins/creation.md index bf711e3815..628c34532c 100644 --- a/docs/plugins/creation.md +++ b/docs/plugins/creation.md @@ -122,7 +122,7 @@ containing metadata about your plugin. It should have the following JSON structu { "name": "TODO", "version": "TODO", - "supported_baserow_versions": "2.2.0", + "supported_baserow_versions": "2.2.1", "plugin_api_version": "0.0.1-alpha", "description": "TODO", "author": "TODO", diff --git a/docs/plugins/installation.md b/docs/plugins/installation.md index 55661147b2..e17c58d831 100644 --- a/docs/plugins/installation.md +++ b/docs/plugins/installation.md @@ -36,7 +36,7 @@ build your own image based off the Baserow all-in-one image. 4. Next copy the contents shown into your `Dockerfile` ```dockerfile -FROM baserow/baserow:2.2.0 +FROM baserow/baserow:2.2.1 # You can install a plugin found in a git repo: RUN /baserow/plugins/install_plugin.sh \ @@ -70,9 +70,9 @@ RUN /baserow/plugins/install_plugin.sh \ 5. Choose which of the `RUN` commands you'd like to use to install your plugins and delete the rest, replace the example URLs with ones pointing to your plugin. 6. Now build your custom Baserow with the plugin installed by running: - `docker build -t my-customized-baserow:2.2.0 .` + `docker build -t my-customized-baserow:2.2.1 .` 7. Finally, you can run your new customized image just like the normal Baserow image: - `docker run -p 80:80 -v baserow_data:/baserow/data my-customized-baserow:2.2.0` + `docker run -p 80:80 -v baserow_data:/baserow/data my-customized-baserow:2.2.1` ### Installing in an existing Baserow all-in-one container @@ -111,7 +111,7 @@ docker run \ -v baserow_data:/baserow/data \ # ... All your normal launch args go here -e BASEROW_PLUGIN_GIT_REPOS=https://example.com/example/plugin1.git,https://example.com/example/plugin2.git - baserow:2.2.0 + baserow:2.2.1 ``` These variables will only trigger and installation when found on startup of the @@ -120,7 +120,7 @@ container. To uninstall a plugin you must still manually follow the instructions ### Caveats when installing into an existing container If you ever delete the container you've installed plugins into at runtime and re-create -it, the new container is created from the `baserow/baserow:2.2.0` image which does not +it, the new container is created from the `baserow/baserow:2.2.1` image which does not have any plugins installed. However, when a plugin is installed at runtime or build time it is stored in the @@ -135,7 +135,7 @@ scratch. ### Installing into standalone Baserow service images -Baserow also provides `baserow/backend:2.2.0` and `baserow/web-frontend:2.2.0` images +Baserow also provides `baserow/backend:2.2.1` and `baserow/web-frontend:2.2.1` images which only run the respective backend/celery/web-frontend services. These images are used for more advanced self-hosted deployments like a multi-service docker-compose, k8s etc. @@ -145,8 +145,8 @@ used with docker run and a specified command and the plugin env vars shown above example: ``` -docker run --rm baserow/backend:2.2.0 install-plugin ... -docker run -e BASEROW_PLUGIN_GIT_REPOS=https://example.com/example/plugin1.git,https://example.com/example/plugin2.git --rm baserow/backend:2.2.0 +docker run --rm baserow/backend:2.2.1 install-plugin ... +docker run -e BASEROW_PLUGIN_GIT_REPOS=https://example.com/example/plugin1.git,https://example.com/example/plugin2.git --rm baserow/backend:2.2.1 ``` You can use these scripts exactly as you would in the sections above to install a plugin @@ -169,13 +169,13 @@ associated data permanently. [Docker install guide backup section](../installation/install-with-docker.md) for more details on how to do this. 2. Stop your Baserow server first - `docker stop baserow` -3. `docker run --rm -v baserow_data:/baserow/data baserow:2.2.0 uninstall-plugin plugin_name` +3. `docker run --rm -v baserow_data:/baserow/data baserow:2.2.1 uninstall-plugin plugin_name` 4. Now the plugin has uninstalled itself and all associated data has been removed. 5. Edit your custom `Dockerfile` and remove the plugin. -6. Rebuild your image - `docker build -t my-customized-baserow:2.2.0 .` +6. Rebuild your image - `docker build -t my-customized-baserow:2.2.1 .` 7. Remove the old container using the old image - `docker rm baserow` 8. Run your new image with the plugin removed - - `docker run -p 80:80 -v baserow_data:/baserow/data my-customized-baserow:2.2.0` + - `docker run -p 80:80 -v baserow_data:/baserow/data my-customized-baserow:2.2.1` 9. If you fail to do this if you ever recreate the container, your custom image still has the plugin installed and the new container will start up again with the plugin re-installed. @@ -207,7 +207,7 @@ associated data permanently. restart as the environment variable will still contain the old plugin. To do this you must: 1. `docker stop baserow` - 2. `docker run --rm -v baserow_data:/baserow/data baserow:2.2.0 uninstall-plugin plugin_name` + 2. `docker run --rm -v baserow_data:/baserow/data baserow:2.2.1 uninstall-plugin plugin_name` 3. Now the plugin has uninstalled itself and all associated data has been removed. 4. Finally, recreate your Baserow container by using the same `docker run` command you launched it with, just make sure the plugin you uninstalled has been removed @@ -222,7 +222,7 @@ check what plugins are currently installed. docker run \ --rm \ -v baserow_data:/baserow/data \ - baserow:2.2.0 list-plugins + baserow:2.2.1 list-plugins # or on a running container diff --git a/enterprise/backend/pyproject.toml b/enterprise/backend/pyproject.toml index fce5289a39..44edc0c496 100644 --- a/enterprise/backend/pyproject.toml +++ b/enterprise/backend/pyproject.toml @@ -12,7 +12,7 @@ description = """Baserow is an open source no-code database tool and Airtable \ # mixed license license = { file = "../LICENSE" } requires-python = "==3.14.*" -version = "2.2.0" +version = "2.2.1" classifiers = [] [project.urls] diff --git a/enterprise/backend/website_export.csv b/enterprise/backend/website_export.csv index 68be57cd3b..d778cea658 100644 --- a/enterprise/backend/website_export.csv +++ b/enterprise/backend/website_export.csv @@ -1909,6 +1909,26 @@ When you manually reorder rows, your custom order persists until you apply autom Control how much space each field occupies horizontally to optimize your view for the data you're working with. +Width adjustments save per view, so different Grid views of the same table can have different column widths optimized for their specific purposes. + +### Freeze columns + +When working with wide tables containing dozens of fields, it can be difficult to keep track of which row you are looking at as you scroll horizontally. Baserow allows you to freeze up to four columns on the left side of your Grid view. + +These columns stay frozen in place, ensuring that key information remains permanently visible while you scroll through the rest of your dataset. + +#### **How to freeze a column** + +By default, you already have at least one pinned [primary field][5]. You will see a thick vertical divider separating pinned columns from the rest of the table. Click and hold a column divider, then drag it to the left side of that divider to freeze it. + +#### **How to unpin a column** + +To unpin a column and return it to the scrollable area of your table, click and drag the column header to the right side of the pinned column divider. + +#### **Change the order of columns** + +You can freeze a column using drag and drop. Click and drag the column headers of your pinned columns to rearrange them, just as you would with standard columns. + ### Resize individual columns 1. Hover over the **dividing line** between field headers @@ -1919,12 +1939,6 @@ Control how much space each field occupies horizontally to optimize your view fo ![Adjusting column width in Grid view](https://baserow-backend-production20240528124524339000000001.s3.amazonaws.com/pagedown-uploads/28a7e27d781acc3f58d382bc7dd915fb420edaa1.webp) -### Auto-fit column width - -**Double-click** the dividing line between headers to automatically resize the column to fit its content perfectly. - -Width adjustments save per view, so different Grid views of the same table can have different column widths optimized for their specific purposes. - ## Field summaries Field summaries calculate summary statistics for each field, appearing at the bottom of the grid. This feature is unique to Grid view. @@ -1939,42 +1953,18 @@ Learn more: [Field summaries](/user-docs/footer-aggregation) The toolbar at the top of Grid view provides quick access to common operations: -**[Filter](/user-docs/filters-in-baserow)** - Show only records matching specific conditions - -**[Sort](/user-docs/view-customization)** - Order rows by field values automatically - -**[Group](/user-docs/group-rows-in-baserow)** - Organize rows into collapsible sections - -**[Hide fields](/user-docs/field-customization)** - Control which columns appear - -**[Row height](/user-docs/navigating-row-configurations)** - Adjust row size (short, medium, tall, extra tall) - -**[Share view](/user-docs/public-sharing)** - Generate public links or embed codes - -**[Row colors](/user-docs/row-coloring)** - Apply conditional formatting + - **[Filter](/user-docs/filters-in-baserow)** - Show only records matching specific conditions + - **[Sort](/user-docs/view-customization)** - Order rows by field values automatically + - **[Group](/user-docs/group-rows-in-baserow)** - Organize rows into collapsible sections + - **[Hide fields](/user-docs/field-customization)** - Control which columns appear + - **[Row height](/user-docs/navigating-row-configurations)** - Adjust row size (short, medium, tall, extra tall) + - **[Share view](/user-docs/public-sharing)** - Generate public links or embed codes + - **[Row colors](/user-docs/row-coloring)** - Apply conditional formatting ## Grid view keyboard shortcuts Speed up your workflow with keyboard shortcuts: -**Navigation:** -- **Tab** - Move to next cell (right) -- **Shift + Tab** - Move to previous cell (left) -- **Enter** - Move to cell below -- **Shift + Enter** - Move to cell above -- **Arrow keys** - Navigate in any direction - -**Editing:** -- **Double-click** or **Enter** - Start editing cell -- **Esc** - Cancel editing without saving -- **Ctrl/Cmd + C** - Copy cell content -- **Ctrl/Cmd + V** - Paste into cell - -**Selection:** -- **Shift + Click** - Select multiple rows -- **Ctrl/Cmd + Click** - Add individual rows to selection -- **Ctrl/Cmd + A** - Select all visible rows - Learn more: [Keyboard shortcuts](/user-docs/baserow-keyboard-shortcuts) ## Grid view management @@ -2029,6 +2019,14 @@ Export is only available from the Grid view menu (⋮) next to the view name. Ot Row height (short, medium, tall, extra tall) affects vertical space and how much text displays in cells. Configure it from the view menu. Column width affects horizontal space per field and adjusts by dragging field header borders. Both settings save per view independently. +### How many columns can I freeze? + +You can pin a maximum of **4 columns** per view. This limit ensures that you still have enough screen space to view and horizontally scroll through the rest of your unpinned data. + +### Does freezing a column affect other users? + +Freezing is a view-level setting. If you freeze a column in a **Collaborative view**, it will remain for all users who access that view. If you freeze it in a **Personal view**, it will only affect your screen. + ## Related resources ### View basics @@ -2067,7 +2065,8 @@ Still need help? If you're looking for something else, please feel free to make [1]: https://baserow.io/user-docs/navigating-row-configurations [2]: https://baserow.io/user-docs/how-to-make-new-rows [3]: https://baserow.io/user-docs/export-tables - [4]: https://baserow.io/user-docs/paste-data-into-baserow-table",view,baserow_user_docs,https://baserow.io/user-docs/guide-to-grid-view + [4]: https://baserow.io/user-docs/paste-data-into-baserow-table + [5]: https://baserow.io/user-docs/primary-field",view,baserow_user_docs,https://baserow.io/user-docs/guide-to-grid-view 14,Gallery view,guide-to-gallery-view,Baserow gallery view guide: Organize your data,"# Gallery view Gallery view transforms your data into visual cards with cover images and customizable field layouts, making it ideal for portfolios, product catalogs, and any data where visuals matter. @@ -5171,6 +5170,8 @@ Remove a field and all its data from your table. Deleted fields move to the tras Change column width in Grid View for optimal data visibility. See the [Grid View guide][9] for width adjustment instructions. +[Freezing fields][10] allows you to lock columns to the left side of the screen so they remain visible while scrolling horizontally. + ### How to reorder fields Change field positions to organize logically related fields together. @@ -5194,7 +5195,7 @@ You can also reorder fields when viewing the [row detail panel][8] by dragging f ### How to group by a field -Organize rows into collapsible sections based on field values for categorical analysis. Grouping works only in [Grid View][10] and creates hierarchical organization. Add multiple group levels to create nested categorization. Learn more about [grouping strategies][11]. +Organize rows into collapsible sections based on field values for categorical analysis. Grouping works only in [Grid View][11] and creates hierarchical organization. Add multiple group levels to create nested categorization. Learn more about [grouping strategies][12]. **To group by a field:** @@ -5208,11 +5209,11 @@ Organize rows into collapsible sections based on field values for categorical an ### Field value constraints -Field value constraints are data quality rules that Baserow enforces automatically when users create or update rows. Learn more about [field constraints][12]. +Field value constraints are data quality rules that Baserow enforces automatically when users create or update rows. Learn more about [field constraints][13]. ### Field index -Field indexes are database optimization structures that improve query performance by creating organized reference tables for specific fields. Learn more about the [field index][13]. +Field indexes are database optimization structures that improve query performance by creating organized reference tables for specific fields. Learn more about the [field index][14]. ## Frequently asked questions @@ -5245,9 +5246,9 @@ Field configurations like sorts, filters, and grouping apply only to the current - [Fields overview][1] - Learn about all available field types - [Create a field][2] - Add new fields to your tables - [Primary field][4] - Understand the special first field -- [Sorting, filtering, and grouping][14] - Master view customization +- [Sorting, filtering, and grouping][15] - Master view customization - [Data recovery][5] - Restore deleted fields and data -- [Grid View guide][10] - Learn about Grid View-specific features +- [Grid View guide][11] - Learn about Grid View-specific features --- @@ -5268,11 +5269,12 @@ Still need help? If you're looking for something else, please feel free to make [7]: /user-docs/file-field [8]: /user-docs/enlarging-rows [9]: /user-docs/guide-to-grid-view#adjust-the-width-of-a-field - [10]: /user-docs/guide-to-grid-view - [11]: /user-docs/group-rows-in-baserow - [12]: https://baserow.io/user-docs/field-value-constraints - [13]: https://baserow.io/user-docs/field-indexes - [14]: /user-docs/view-customization",,baserow_user_docs,https://baserow.io/user-docs/field-customization + [10]: https://baserow.io/user-docs/guide-to-grid-view#adjust-column-width + [11]: /user-docs/guide-to-grid-view + [12]: /user-docs/group-rows-in-baserow + [13]: https://baserow.io/user-docs/field-value-constraints + [14]: https://baserow.io/user-docs/field-indexes + [15]: /user-docs/view-customization",field,baserow_user_docs,https://baserow.io/user-docs/field-customization 30,Primary field,primary-field,Baserow primary field,"# Understanding the primary field in Baserow The primary field in Baserow is your table's identity column; the name or identifier that represents each row throughout your database, in relationships, forms, and integrations, making it the most important field design decision in your table. @@ -14826,6 +14828,28 @@ Combine shortcuts into sequences for common tasks: > Don't try to memorize every shortcut at once. Start with the essential shortcuts and use them consistently for a week. Once they become automatic, add a few more to your repertoire. +## Grid view keyboard shortcuts + +Speed up your workflow with keyboard shortcuts: + +**Navigation:** +- **Tab** - Move to next cell (right) +- **Shift + Tab** - Move to previous cell (left) +- **Enter** - Move to cell below +- **Shift + Enter** - Move to cell above +- **Arrow keys** - Navigate in any direction + +**Editing:** +- **Double-click** or **Enter** - Start editing cell +- **Esc** - Cancel editing without saving +- **Ctrl/Cmd + C** - Copy cell content +- **Ctrl/Cmd + V** - Paste into cell + +**Selection:** +- **Shift + Click** - Select multiple rows +- **Ctrl/Cmd + Click** - Add individual rows to selection +- **Ctrl/Cmd + A** - Select all visible rows + ## Frequently asked questions ### Do keyboard shortcuts work on all devices? @@ -14888,7 +14912,7 @@ Still need help? If you're looking for something else, please feel free to make [7]: /user-docs/baserow-basics [8]: /user-docs/how-to-get-started-with-baserow [9]: /user-docs/set-up-baserow -[10]: /user-docs/learn-baserow-basic-concepts",,baserow_user_docs,https://baserow.io/user-docs/baserow-keyboard-shortcuts +[10]: /user-docs/learn-baserow-basic-concepts",getting started,baserow_user_docs,https://baserow.io/user-docs/baserow-keyboard-shortcuts 126,Personal views,personal-views,Baserow: Creating personal views,"# Personal views Personal views are private views visible only to you. Create custom filters, sorts, and configurations for your individual workflow without disrupting shared team views. @@ -15909,7 +15933,7 @@ Unique functionality for specific needs: |------------|-------------------|-------------| | [File][25] | Upload documents/images | Product photos, contracts, attachments | | [AI prompt][26] | AI-generated content | Summaries, translations, content generation | - +| [Edit row link][27] | Edit existing rows | Update existing records through a pre-filled form | ## Understand computed fields @@ -15933,25 +15957,25 @@ Common computed field types include [Formula fields][19], [Lookup fields][16], [ ## Field operations and customization -Each [field can be configured][27] to match your specific needs: +Each [field can be configured][28] to match your specific needs: - - **[Sorting][27]:** Arrange rows by field values (A-Z, newest first, highest to lowest) - - **[Filtering][28]:** Show only rows matching specific field criteria - - **[Grouping][29]:** Organize rows into collapsible sections by field values - - **Pinning**: Lock columns to the left side of the screen so they remain visible while scrolling horizontally. - - **[Hiding][27]:** Control field visibility per view without deleting data - - **[Descriptions][30]:** Add explanatory text to help users understand field purpose + - **[Sorting][28]:** Arrange rows by field values (A-Z, newest first, highest to lowest) + - **[Filtering][29]:** Show only rows matching specific field criteria + - **[Grouping][30]:** Organize rows into collapsible sections by field values + - **[Freezing][31]**: Lock columns to the left side of the screen so they remain visible while scrolling horizontally. + - **[Hiding][28]:** Control field visibility per view without deleting data + - **[Descriptions][32]:** Add explanatory text to help users understand field purpose These operations are view-specific; customize each view differently without affecting others or your underlying data. -![Fields option in Baserow][31] +![Fields option in Baserow][33] ## Frequently asked questions ### Can I change a field type after creating it? -Yes, you can convert most field types through the [field configuration][27] menu. Baserow attempts to preserve data during conversion (e.g., numbers to text works seamlessly), but some conversions may result in data loss (e.g., text to number drops non-numeric values). Always review after conversion. +Yes, you can convert most field types through the [field configuration][28] menu. Baserow attempts to preserve data during conversion (e.g., numbers to text works seamlessly), but some conversions may result in data loss (e.g., text to number drops non-numeric values). Always review after conversion. ### What's the difference between single-line text and long text? @@ -15975,16 +15999,16 @@ Baserow doesn't impose a strict field limit, but practical performance considera ### Can I make a field required/mandatory? -You cannot currently mark a field as required at the database table level. However, you can make fields required in the [Form View][32] to ensure users submit mandatory data. +You cannot currently mark a field as required at the database table level. However, you can make fields required in the [Form View][34] to ensure users submit mandatory data. ## Related content -- [Create a field][30] - Step-by-step field creation guide -- [Field configuration options][27] - Customize field behavior and appearance +- [Create a field][32] - Step-by-step field creation guide +- [Field configuration options][28] - Customize field behavior and appearance - [Link-to-table field][15] - Create relationships between tables - [Formula field reference][19] - Learn formula syntax and functions -- [Working with timezones][33] - Understand date/time field behavior -- [Field summaries][34] - Add calculations to field footers +- [Working with timezones][35] - Understand date/time field behavior +- [Field summaries][36] - Add calculations to field footers --- @@ -16020,14 +16044,16 @@ Still need help? If you're looking for something else, please feel free to make [24]: /user-docs/duration-field [25]: /user-docs/file-field [26]: /user-docs/ai-field - [27]: /user-docs/field-customization - [28]: /user-docs/filters-in-baserow - [29]: https://baserow.io/user-docs/group-rows-in-baserow - [30]: /user-docs/adding-a-field - [31]: https://baserow-backend-production20240528124524339000000001.s3.amazonaws.com/pagedown-uploads/d0aeed55-5b39-4a09-9701-7b24b6c826c4/Fields%20option%20in%20Baserow.jpg - [32]: https://baserow.io/user-docs/guide-to-creating-forms-in-baserow - [33]: /user-docs/working-with-timezones - [34]: /user-docs/footer-aggregation",field,baserow_user_docs,https://baserow.io/user-docs/baserow-field-overview + [27]: /user-docs/edit-rows-via-form + [28]: /user-docs/field-customization + [29]: /user-docs/filters-in-baserow + [30]: /user-docs/group-rows-in-baserow + [31]: https://baserow.io/user-docs/guide-to-grid-view#adjust-column-width + [32]: /user-docs/adding-a-field + [33]: https://baserow-backend-production20240528124524339000000001.s3.amazonaws.com/pagedown-uploads/d0aeed55-5b39-4a09-9701-7b24b6c826c4/Fields%20option%20in%20Baserow.jpg + [34]: https://baserow.io/user-docs/guide-to-creating-forms-in-baserow + [35]: /user-docs/working-with-timezones + [36]: /user-docs/footer-aggregation",field,baserow_user_docs,https://baserow.io/user-docs/baserow-field-overview 133,Create fields,adding-a-field,Create a Baserow field for your table,"# How to create fields in Baserow Creating fields in Baserow is the foundation of database design; defining your data structure determines what information you can capture, how you organize records, and what insights you can extract from your tables. @@ -27994,7 +28020,13 @@ Learn more: [Publishing and Managing Workflows][5] ### Workflow history -The History tab logs all workflow executions, both successful and failed. Use this log to monitor workflow performance, debug issues when automations fail, track when workflows executed and what data they processed +The History tab provides a chronological log of all workflow executions. Use this log to monitor performance and maintain your automations. + + - Execution Status: See whether a workflow run was successful or failed. + - Execution Time: View the exact timestamp of when the workflow was triggered. + - Error Messaging: If a workflow fails, Baserow provides a descriptive error message within the history record to help you identify which step caused the issue. + +To view specific data outputs and node-level processing results, use the Test Workflow modal during the configuration phase. ## How to build and manage workflows diff --git a/heroku.Dockerfile b/heroku.Dockerfile index 33b40cb56d..6b334692cf 100644 --- a/heroku.Dockerfile +++ b/heroku.Dockerfile @@ -1,4 +1,4 @@ -ARG FROM_IMAGE=baserow/baserow:2.2.0 +ARG FROM_IMAGE=baserow/baserow:2.2.1 # This is pinned as version pinning is done by the CI setting FROM_IMAGE. # hadolint ignore=DL3006 FROM $FROM_IMAGE AS image_base diff --git a/premium/backend/pyproject.toml b/premium/backend/pyproject.toml index 5e321e8602..cb82b2b1f2 100644 --- a/premium/backend/pyproject.toml +++ b/premium/backend/pyproject.toml @@ -12,7 +12,7 @@ description = """Baserow is an open source no-code database tool and Airtable \ # mixed license license = { file = "../LICENSE" } requires-python = "==3.14.*" -version = "2.2.0" +version = "2.2.1" classifiers = [] [project.urls] diff --git a/web-frontend/docker/docker-entrypoint.sh b/web-frontend/docker/docker-entrypoint.sh index b68067face..39eb8e7ec2 100755 --- a/web-frontend/docker/docker-entrypoint.sh +++ b/web-frontend/docker/docker-entrypoint.sh @@ -2,7 +2,7 @@ # Bash strict mode: http://redsymbol.net/articles/unofficial-bash-strict-mode/ set -euo pipefail -export BASEROW_VERSION="2.2.0" +export BASEROW_VERSION="2.2.1" BASEROW_WEBFRONTEND_PORT="${BASEROW_WEBFRONTEND_PORT:-3000}" show_help() { diff --git a/web-frontend/package.json b/web-frontend/package.json index d2f0569912..2ab87e7551 100644 --- a/web-frontend/package.json +++ b/web-frontend/package.json @@ -1,6 +1,6 @@ { "name": "baserow", - "version": "2.2.0", + "version": "2.2.1", "private": true, "type": "module", "scripts": {