Skip to content

Releases: pocketbase/pocketbase

v0.20.4 Release

03 Jan 12:39
Compare
Choose a tag to compare

To update the prebuilt executable you can run ./pocketbase update.

  • Small fix for a regression introduced with the recent json field changes that was causing View collection column expressions recognized as json to fail to resolve (#4072).

v0.20.3 Release

03 Jan 09:31
Compare
Choose a tag to compare

To update the prebuilt executable you can run ./pocketbase update.

  • Fixed the json field equal query comparisons to work correctly with plain JSON primitive values like null, bool number, etc. (#4068).
    Since there are plans in the future to allow custom SQLite builds and also in some situations it may be useful to be able to distinguish NULL from '', for the json fields (and for any other future non-standard field) we no longer apply COALESCE by default, aka.:

    Dataset:
    1) data: json(null)
    2) data: json('')
    
    For the json field filter "data = null" only 1) will resolve to TRUE.
    For the json field filter "data = ''"   only 2) will resolve to TRUE.
    
  • Minor Go tests improvements

    • Sorted the record cascade delete references to ensure that the delete operation will preserve the order of the fired events when running the tests.
    • Marked some of the tests as safe for parallel execution to speed up a little the GitHub action build times.

v0.20.2 Release

30 Dec 08:15
Compare
Choose a tag to compare

To update the prebuilt executable you can run ./pocketbase update.

  • Added sleep(milliseconds) JSVM binding.
    It works the same way as Go time.Sleep(), aka. it pauses the goroutine where the JSVM code is running.

  • Fixed multi-line text paste in the Admin UI search bar (#4022).

  • Fixed the monospace font loading in the Admin UI.

  • Fixed various reported docs and code comment typos.

v0.20.1 Release

17 Dec 09:07
Compare
Choose a tag to compare

To update the prebuilt executable you can run ./pocketbase update.

  • Added --dev flag and its accompanying app.IsDev() method (in place of the previosly removed --debug) to assist during development (#3918).
    The --dev flag prints in the console "everything" and more specifically:

    • the data DB SQL statements
    • all app.Logger().* logs (debug, info, warning, error, etc.), no matter of the logs persistence settings in the Admin UI
  • Minor Admin UI fixes:

    • Fixed the log error label text wrapping.
    • Added the log referer (when it is from a different source) and details labels in the logs listing.
    • Removed the blank current time entry from the logs chart because it was causing confusion when used with custom time ranges.
    • Updated the SQL syntax highligher and keywords autocompletion in the Admin UI to recognize CAST(x as bool) expressions.
  • Replaced the default API tests timeout with a new ApiScenario.Timeout option (#3930).
    A negative or zero value means no tests timeout.
    If a single API test takes more than 3s to complete it will have a log message visible when the test fails or when go test -v flag is used.

  • Added timestamp at the beginning of the generated JSVM types file to avoid creating it everytime with the app startup.

v0.20.0 Release

10 Dec 13:24
Compare
Choose a tag to compare

To update the prebuilt executable you can run ./pocketbase update.

  • Added expand, filter, fields, custom query and headers parameters support for the realtime subscriptions.
    Requires JS SDK v0.20.0+ or Dart SDK v0.17.0+.

    // JS SDK v0.20.0
    pb.collection("example").subscribe("*", (e) => {
      ...
    }, {
      expand: "someRelField",
      filter: "status = 'active'",
      fields: "id,expand.someRelField.*:excerpt(100)",
    })
    // Dart SDK v0.17.0
    pb.collection("example").subscribe("*", (e) {
        ...
      },
      expand: "someRelField",
      filter: "status = 'active'",
      fields: "id,expand.someRelField.*:excerpt(100)",
    )
  • Generalized the logs to allow any kind of application logs, not just requests.

    The new app.Logger() implements the standard log/slog interfaces available with Go 1.21.

    // Go: https://pocketbase.io/docs/go-logging/
    app.Logger().Info("Example message", "total", 123, "details", "lorem ipsum...")
    
    // JS: https://pocketbase.io/docs/js-logging/
    $app.logger().info("Example message", "total", 123, "details", "lorem ipsum...")
    

    For better performance and to minimize blocking on hot paths, logs are currently written with
    debounce and on batches:

    - 3 seconds after the last debounced log write
    - when the batch threshold is reached (currently 200)
    - right before app termination to attempt saving everything from the existing logs queue
    

    Some notable log related changes:

    • ⚠️ Bumped the minimum required Go version to 1.21.

    • ⚠️ Removed _requests table in favor of the generalized _logs.
      Note that existing logs will be deleted!

    • ⚠️ Renamed the following Dao log methods:

      Dao.RequestQuery(...)      -> Dao.LogQuery(...)
      Dao.FindRequestById(...)   -> Dao.FindLogById(...)
      Dao.RequestsStats(...)     -> Dao.LogsStats(...)
      Dao.DeleteOldRequests(...) -> Dao.DeleteOldLogs(...)
      Dao.SaveRequest(...)       -> Dao.SaveLog(...)
    • ⚠️ Removed app.IsDebug() and the --debug flag.
      This was done to avoid the confusion with the new logger and its debug severity level.
      If you want to store debug logs you can set -4 as min log level from the Admin UI.

    • Refactored Admin UI Logs:

      • Added new logs table listing.
      • Added log settings option to toggle the IP logging for the activity logger.
      • Added log settings option to specify a minimum log level.
      • Added controls to export individual or bulk selected logs as json.
      • Other minor improvements and fixes.
  • Added new filesystem/System.Copy(src, dest) method to copy existing files from one location to another.
    This is usually useful when duplicating records with file field(s) programmatically.

  • Added filesystem.NewFileFromUrl(ctx, url) helper method to construct a *filesystem.BytesReader file from the specified url.

  • OAuth2 related additions:

    • Added new PKCE() and SetPKCE(enable) OAuth2 methods to indicate whether the PKCE flow is supported or not.
      The PKCE value is currently configurable from the UI only for the OIDC providers.
      This was added to accommodate OIDC providers that may throw an error if unsupported PKCE params are submitted with the auth request (eg. LinkedIn; see #3799).

    • Added new displayName field for each listAuthMethods() OAuth2 provider item.
      The value of the displayName property is currently configurable from the UI only for the OIDC providers.

    • Added expiry field to the OAuth2 user response containing the optional expiration time of the OAuth2 access token (#3617).

    • Allow a single OAuth2 user to be used for authentication in multiple auth collection.
      ⚠️ Because now you can have more than one external provider with collectionId-provider-providerId pair, Dao.FindExternalAuthByProvider(provider, providerId) method was removed in favour of the more generic Dao.FindFirstExternalAuthByExpr(expr).

  • Added onlyVerified auth collection option to globally disallow authentication requests for unverified users.

  • Added support for single line comments (ex. // your comment) in the API rules and filter expressions.

  • Added support for specifying a collection alias in @collection.someCollection:alias.*.

  • Soft-deprecated and renamed app.Cache() with app.Store().

  • Minor JSVM updates and fixes:

    • Updated $security.parseUnverifiedJWT(token) and $security.parseJWT(token, key) to return the token payload result as plain object.

    • Added $apis.requireGuestOnly() middleware JSVM binding (#3896).

  • Use IS NOT instead of != as not-equal SQL query operator to handle the cases when comparing with nullable columns or expressions (eg. json_extract over json field).
    Based on my local dataset I wasn't able to find a significant difference in the performance between the 2 operators, but if you stumble on a query that you think may be affected negatively by this, please report it and I'll test it further.

  • Added MaxSize json field option to prevent storing large json data in the db (#3790).
    Existing json fields are updated with a system migration to have a ~2MB size limit (it can be adjusted from the Admin UI).

  • Fixed negative string number normalization support for the json field type.

  • Trigger the app.OnTerminate() hook on app.Restart() call.
    A new bool IsRestart field was also added to the core.TerminateEvent event.

  • Fixed graceful shutdown handling and speed up a little the app termination time.

  • Limit the concurrent thumbs generation to avoid high CPU and memory usage in spiky scenarios (#3794; thanks @t-muehlberger).
    Currently the max concurrent thumbs generation processes are limited to "total of logical process CPUs + 1".
    This is arbitrary chosen and may change in the future depending on the users feedback and usage patterns.
    If you are experiencing OOM errors during large image thumb generations, especially in container environment, you can try defining the GOMEMLIMIT=500MiB env variable before starting the executable.

  • Slightly speed up (~10%) the thumbs generation by changing from cubic (CatmullRom) to bilinear (Linear) resampling filter (the quality difference is very little).

  • Added a default red colored Stderr output in case of a console command error.
    You can now also silence individually custom commands errors using the cobra.Command.SilenceErrors field.

  • Fixed links formatting in the autogenerated html->text mail body.

  • Removed incorrectly imported empty local('') font-face declarations.

v0.20.0-rc3 Prerelease

11 Nov 11:18
Compare
Choose a tag to compare
Pre-release

⚠️ This is a prerelease intended primarily for test purposes.

  • Synced with the recent fixes from v0.19.4.

v0.19.4 Release

11 Nov 11:20
Compare
Choose a tag to compare

To update the prebuilt executable you can run ./pocketbase update.

  • Fixed TinyMCE source code viewer textarea styles (#3715).

  • Fixed text field min/max validators to properly count multi-byte characters (#3735).

  • Allowed hyphens in usernames (#3697).
    More control over the system fields settings will be available in the future.

  • Updated the JSVM generated types to use directly the value instead of * | undefined union in functions/methods return declarations.

v0.20.0-rc2 Prerelease

06 Nov 10:10
Compare
Choose a tag to compare
Pre-release

⚠️ This is a prerelease intended primarily for test purposes.

  • Synced with the recent fixes from v0.19.3.

v0.19.3 Release

06 Nov 10:11
Compare
Choose a tag to compare

To update the prebuilt executable you can run ./pocketbase update.

  • Added the release notes to the console output of ./pocketbase update (#3685).

  • Added missing documention for the JSVM $mails.* bindings.

  • Relaxed the OAuth2 redirect url validation to allow any string value (#3689; thanks @sergeypdev).
    Note that the redirect url format is still bound to the accepted values by the specific OAuth2 provider.

v0.19.2 Release

03 Nov 04:10
Compare
Choose a tag to compare

To update the prebuilt executable you can run ./pocketbase update.

  • Updated the JSVM generated types (#3627, #3662).