---
name: "urlwatch-deprecated"
section: "7"
platform: "linux"
package: "urlwatch"
version: "2.29-4"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/urlwatch-deprecated"
---

# urlwatch-deprecated(7)

Documentation of feature deprecation in urlwatch As features are deprecated and cleaned up, they are documented here with steps to update your configuration for replacements.

## NAME

urlwatch-deprecated - Documentation of feature deprecation in urlwatch

As features are deprecated and cleaned up, they are documented here with steps to update your configuration for replacements.

## NETWORKIDLE0 AND NETWORKIDLE2 FOR WAIT\_UNTIL IN BROWSER JOBS (SINCE 2.28)

Since version 2.28, execution of browser jobs uses Playwright instead of pyppetteer.

The previously-supported **wait\_until** values of **networkidle0** and **networkidle2** are not supported anymore. Playwright supports the values **load**, **domcontentloaded**, **networkidle** (discouraged) or **commit** instead.

Existing settings of **networkidle0** and **networkidle2** will be mapped to **networkidle**, and a warning will be issued. To silence the warning and continue to use **networkidle**, specify **wait\_until: networkidle** explicitly.

## FILTERS WITHOUT SUBFILTERS (SINCE 2.22)

In older urlwatch versions, it was possible to write custom filters that do not take a **subfilter** as argument.

If you have written your own filter code like this:

```
class CustomFilter(filters.FilterBase):
    """My old custom filter"""
    __kind__ = 'foo'
    def filter(self, data):
        ...
```

You have to update your filter to take an optional subfilter argument (if the filter configuration does not have a subfilter defined, the value of **subfilter** will be **None**):

```
class CustomFilter(filters.FilterBase):
    """My new custom filter"""
    __kind__ = 'foo'
    def filter(self, data, subfilter):
        ...
```

## STRING-BASED FILTER DEFINITIONS (SINCE 2.19)

With urlwatch 2.19, string-based filter lists are deprecated, because they are not as flexible as dict-based filter lists and had some problems (e.g. **:** and **,** are treated in a special way and cannot be used in subfilters easily). If you have a filter definition like this:

```
filter: css:body,html2text:re,strip
```

You can get the same results with a filter definition like this:

```
filter:
  - css:
      selector: body
  - html2text:
      method: re
  - strip
```

Since **selector** is the default subfilter for **css**, and **method** is the default subfilter for **html2text**, this can also be written as:

```
filter:
  - css: body
  - html2text: re
  - strip
```

If you just have a single filter such as:

```
filter: html2text
```

You can change this filter to dict-based using:

```
filter:
  - html2text
```

## KEYRING SETTING IN SMTP REPORTER CONFIGURATION (SINCE 2.18)

Since version 2.18, the SMTP reporter configuration now uses **auth** to decide if SMTP authentication should be done or not. Previously, this setting was called **keyring**. If you have an old configuration like this:

```
report:
  email:
    smtp:
      host: localhost
      keyring: false
      port: 25
      starttls: true
    subject: '{count} changes: {jobs}'
```

You can change the setting to this (replace **keyring** with **auth**):

```
report:
  email:
    smtp:
      host: localhost
      auth: false
      port: 25
      starttls: true
    subject: '{count} changes: {jobs}'
```

## COPYRIGHT

2024 Thomas Perl
