# filter icon

Filter. Gentleface icon, drawn on the 16 px pixel grid. Free, MIT licensed. Page: https://gentleface.com/icons/filter

- Category: Actions
- Use it for: filter, filter results, refine results
- Tags: filter, funnel, refine, narrow
- Family: filter-lines, filter-pencil, filter-plus, filter-sparkle, filter-x
- Component name: FilterIcon
- Added: 2026-10-14

## Alternatives

- `filter-lines`: the Material convention, centred decreasing bars; use where the product follows Material
- `filter-plus`: add a filter where filters are listed

## Don't confuse with

- `sliders`: the sliders motif means adjust, not filter
- `sort`: sort orders the results; filter narrows them

## Also fits

- edit filter: the bare filter where the panel already edits filters
- group by: filter the rows (filter)

## Not for

- sort (use `sort`): filter narrows the results; sort orders them
- funnel chart (use `funnel-chart`): the funnel outline means filter
- air purifier (use `air-purifier`): the funnel narrows a list; it is not an air filter
- color filter (use `color-filter`): the funnel filters a list or data (filter)

## Files

Each SVG is 16 × 16 with fill="currentColor". Keep it at 16 px or an exact multiple (32, 48) on whole pixels: a fractional size or position blurs it.

- line-round: https://gentleface.com/svg/line-round/16/filter.svg · PNG https://gentleface.com/png/line-round/16/filter.png · https://gentleface.com/png/line-round/32/filter.png · https://gentleface.com/png/line-round/48/filter.png
- line-soft: https://gentleface.com/svg/line-soft/16/filter.svg · PNG https://gentleface.com/png/line-soft/16/filter.png · https://gentleface.com/png/line-soft/32/filter.png · https://gentleface.com/png/line-soft/48/filter.png
- line-sharp: https://gentleface.com/svg/line-sharp/16/filter.svg · PNG https://gentleface.com/png/line-sharp/16/filter.png · https://gentleface.com/png/line-sharp/32/filter.png · https://gentleface.com/png/line-sharp/48/filter.png
- solid-round: https://gentleface.com/svg/solid-round/16/filter.svg · PNG https://gentleface.com/png/solid-round/16/filter.png · https://gentleface.com/png/solid-round/32/filter.png · https://gentleface.com/png/solid-round/48/filter.png
- solid-soft: https://gentleface.com/svg/solid-soft/16/filter.svg · PNG https://gentleface.com/png/solid-soft/16/filter.png · https://gentleface.com/png/solid-soft/32/filter.png · https://gentleface.com/png/solid-soft/48/filter.png
- solid-sharp: https://gentleface.com/svg/solid-sharp/16/filter.svg · PNG https://gentleface.com/png/solid-sharp/16/filter.png · https://gentleface.com/png/solid-sharp/32/filter.png · https://gentleface.com/png/solid-sharp/48/filter.png

The SVG of every style: https://gentleface.com/icons/filter.json (`svg`).

## Code (line-round)

The snippets are decorative (aria-hidden). For an icon that carries meaning on its own, such as an icon-only button, label the button, or give the SVG role="img" and an aria-label. For another style, take its SVG from the JSON and swap the path `d`.

### SVG

```svg
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="M9.561 8.146C9.381 8.326 9.243 8.533 9.146 8.767C9.049 9.002 9 9.246 9 9.5L9 12.5C9 12.691 8.965 12.875 8.895 13.052C8.818 13.245 8.707 13.414 8.561 13.561C8.414 13.707 8.245 13.818 8.052 13.895C7.875 13.965 7.691 14 7.5 14C7.309 14 7.125 13.965 6.948 13.895C6.755 13.818 6.586 13.707 6.439 13.561C6.293 13.414 6.182 13.245 6.105 13.052C6.035 12.875 6 12.691 6 12.5L6 9.5C6 9.246 5.951 9.002 5.854 8.767C5.757 8.533 5.619 8.326 5.439 8.146L1.5 4.207C1.34 4.047 1.217 3.862 1.13 3.653C1.043 3.444 1 3.226 1 3C1 2.724 1.098 2.488 1.293 2.293C1.488 2.098 1.724 2 2 2L13 2C13.276 2 13.512 2.098 13.707 2.293C13.902 2.488 14 2.724 14 3C14 3.226 13.957 3.444 13.87 3.653C13.783 3.862 13.66 4.047 13.5 4.207L9.561 8.146ZM6.146 7.439C6.42 7.713 6.63 8.028 6.778 8.385C6.926 8.742 7 9.114 7 9.5L7 12.5C7 12.638 7.049 12.756 7.146 12.854C7.244 12.951 7.362 13 7.5 13C7.638 13 7.756 12.951 7.854 12.854C7.951 12.756 8 12.638 8 12.5L8 9.5C8 9.114 8.074 8.742 8.222 8.385C8.37 8.028 8.58 7.713 8.854 7.439L12.793 3.5C12.931 3.362 13 3.195 13 3L2 3C2 3.195 2.069 3.362 2.207 3.5L6.146 7.439Z"/></svg>
```

### React

```tsx
// Gentleface "filter" (line-round), MIT. https://gentleface.com/icons/filter
import type { SVGProps } from 'react';

export function FilterIcon(props: SVGProps<SVGSVGElement>) {
  return (
    <svg xmlns="http://www.w3.org/2000/svg" width={16} height={16} viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" {...props}>
      <path d="M9.561 8.146C9.381 8.326 9.243 8.533 9.146 8.767C9.049 9.002 9 9.246 9 9.5L9 12.5C9 12.691 8.965 12.875 8.895 13.052C8.818 13.245 8.707 13.414 8.561 13.561C8.414 13.707 8.245 13.818 8.052 13.895C7.875 13.965 7.691 14 7.5 14C7.309 14 7.125 13.965 6.948 13.895C6.755 13.818 6.586 13.707 6.439 13.561C6.293 13.414 6.182 13.245 6.105 13.052C6.035 12.875 6 12.691 6 12.5L6 9.5C6 9.246 5.951 9.002 5.854 8.767C5.757 8.533 5.619 8.326 5.439 8.146L1.5 4.207C1.34 4.047 1.217 3.862 1.13 3.653C1.043 3.444 1 3.226 1 3C1 2.724 1.098 2.488 1.293 2.293C1.488 2.098 1.724 2 2 2L13 2C13.276 2 13.512 2.098 13.707 2.293C13.902 2.488 14 2.724 14 3C14 3.226 13.957 3.444 13.87 3.653C13.783 3.862 13.66 4.047 13.5 4.207L9.561 8.146ZM6.146 7.439C6.42 7.713 6.63 8.028 6.778 8.385C6.926 8.742 7 9.114 7 9.5L7 12.5C7 12.638 7.049 12.756 7.146 12.854C7.244 12.951 7.362 13 7.5 13C7.638 13 7.756 12.951 7.854 12.854C7.951 12.756 8 12.638 8 12.5L8 9.5C8 9.114 8.074 8.742 8.222 8.385C8.37 8.028 8.58 7.713 8.854 7.439L12.793 3.5C12.931 3.362 13 3.195 13 3L2 3C2 3.195 2.069 3.362 2.207 3.5L6.146 7.439Z" />
    </svg>
  );
}
```

### Vue

```vue
<!-- Gentleface "filter" (line-round), MIT. https://gentleface.com/icons/filter -->
<template>
  <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true">
    <path d="M9.561 8.146C9.381 8.326 9.243 8.533 9.146 8.767C9.049 9.002 9 9.246 9 9.5L9 12.5C9 12.691 8.965 12.875 8.895 13.052C8.818 13.245 8.707 13.414 8.561 13.561C8.414 13.707 8.245 13.818 8.052 13.895C7.875 13.965 7.691 14 7.5 14C7.309 14 7.125 13.965 6.948 13.895C6.755 13.818 6.586 13.707 6.439 13.561C6.293 13.414 6.182 13.245 6.105 13.052C6.035 12.875 6 12.691 6 12.5L6 9.5C6 9.246 5.951 9.002 5.854 8.767C5.757 8.533 5.619 8.326 5.439 8.146L1.5 4.207C1.34 4.047 1.217 3.862 1.13 3.653C1.043 3.444 1 3.226 1 3C1 2.724 1.098 2.488 1.293 2.293C1.488 2.098 1.724 2 2 2L13 2C13.276 2 13.512 2.098 13.707 2.293C13.902 2.488 14 2.724 14 3C14 3.226 13.957 3.444 13.87 3.653C13.783 3.862 13.66 4.047 13.5 4.207L9.561 8.146ZM6.146 7.439C6.42 7.713 6.63 8.028 6.778 8.385C6.926 8.742 7 9.114 7 9.5L7 12.5C7 12.638 7.049 12.756 7.146 12.854C7.244 12.951 7.362 13 7.5 13C7.638 13 7.756 12.951 7.854 12.854C7.951 12.756 8 12.638 8 12.5L8 9.5C8 9.114 8.074 8.742 8.222 8.385C8.37 8.028 8.58 7.713 8.854 7.439L12.793 3.5C12.931 3.362 13 3.195 13 3L2 3C2 3.195 2.069 3.362 2.207 3.5L6.146 7.439Z" />
  </svg>
</template>
```

### Svelte

```svelte
<!-- Gentleface "filter" (line-round), MIT. https://gentleface.com/icons/filter -->
<script>
  let props = $props();
</script>

<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" {...props}>
  <path d="M9.561 8.146C9.381 8.326 9.243 8.533 9.146 8.767C9.049 9.002 9 9.246 9 9.5L9 12.5C9 12.691 8.965 12.875 8.895 13.052C8.818 13.245 8.707 13.414 8.561 13.561C8.414 13.707 8.245 13.818 8.052 13.895C7.875 13.965 7.691 14 7.5 14C7.309 14 7.125 13.965 6.948 13.895C6.755 13.818 6.586 13.707 6.439 13.561C6.293 13.414 6.182 13.245 6.105 13.052C6.035 12.875 6 12.691 6 12.5L6 9.5C6 9.246 5.951 9.002 5.854 8.767C5.757 8.533 5.619 8.326 5.439 8.146L1.5 4.207C1.34 4.047 1.217 3.862 1.13 3.653C1.043 3.444 1 3.226 1 3C1 2.724 1.098 2.488 1.293 2.293C1.488 2.098 1.724 2 2 2L13 2C13.276 2 13.512 2.098 13.707 2.293C13.902 2.488 14 2.724 14 3C14 3.226 13.957 3.444 13.87 3.653C13.783 3.862 13.66 4.047 13.5 4.207L9.561 8.146ZM6.146 7.439C6.42 7.713 6.63 8.028 6.778 8.385C6.926 8.742 7 9.114 7 9.5L7 12.5C7 12.638 7.049 12.756 7.146 12.854C7.244 12.951 7.362 13 7.5 13C7.638 13 7.756 12.951 7.854 12.854C7.951 12.756 8 12.638 8 12.5L8 9.5C8 9.114 8.074 8.742 8.222 8.385C8.37 8.028 8.58 7.713 8.854 7.439L12.793 3.5C12.931 3.362 13 3.195 13 3L2 3C2 3.195 2.069 3.362 2.207 3.5L6.146 7.439Z" />
</svg>
```

### HTML img

```html
<!-- Gentleface "filter" (line-round), MIT. https://gentleface.com/icons/filter. An <img> can't take currentColor: it draws black. Inline the SVG or use the CSS mask to color it. -->
<img src="https://gentleface.com/svg/line-round/16/filter.svg" width="16" height="16" alt="">
```

### CSS

```css
/* Gentleface "filter" (line-round), MIT. https://gentleface.com/icons/filter. Takes the text color. */
.icon-filter {
  display: inline-block;
  width: 16px;
  height: 16px;
  background-color: currentColor;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='currentColor'%3E%3Cpath d='M9.561 8.146C9.381 8.326 9.243 8.533 9.146 8.767C9.049 9.002 9 9.246 9 9.5L9 12.5C9 12.691 8.965 12.875 8.895 13.052C8.818 13.245 8.707 13.414 8.561 13.561C8.414 13.707 8.245 13.818 8.052 13.895C7.875 13.965 7.691 14 7.5 14C7.309 14 7.125 13.965 6.948 13.895C6.755 13.818 6.586 13.707 6.439 13.561C6.293 13.414 6.182 13.245 6.105 13.052C6.035 12.875 6 12.691 6 12.5L6 9.5C6 9.246 5.951 9.002 5.854 8.767C5.757 8.533 5.619 8.326 5.439 8.146L1.5 4.207C1.34 4.047 1.217 3.862 1.13 3.653C1.043 3.444 1 3.226 1 3C1 2.724 1.098 2.488 1.293 2.293C1.488 2.098 1.724 2 2 2L13 2C13.276 2 13.512 2.098 13.707 2.293C13.902 2.488 14 2.724 14 3C14 3.226 13.957 3.444 13.87 3.653C13.783 3.862 13.66 4.047 13.5 4.207L9.561 8.146ZM6.146 7.439C6.42 7.713 6.63 8.028 6.778 8.385C6.926 8.742 7 9.114 7 9.5L7 12.5C7 12.638 7.049 12.756 7.146 12.854C7.244 12.951 7.362 13 7.5 13C7.638 13 7.756 12.951 7.854 12.854C7.951 12.756 8 12.638 8 12.5L8 9.5C8 9.114 8.074 8.742 8.222 8.385C8.37 8.028 8.58 7.713 8.854 7.439L12.793 3.5C12.931 3.362 13 3.195 13 3L2 3C2 3.195 2.069 3.362 2.207 3.5L6.146 7.439Z'/%3E%3C/svg%3E") center / 16px 16px no-repeat;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='currentColor'%3E%3Cpath d='M9.561 8.146C9.381 8.326 9.243 8.533 9.146 8.767C9.049 9.002 9 9.246 9 9.5L9 12.5C9 12.691 8.965 12.875 8.895 13.052C8.818 13.245 8.707 13.414 8.561 13.561C8.414 13.707 8.245 13.818 8.052 13.895C7.875 13.965 7.691 14 7.5 14C7.309 14 7.125 13.965 6.948 13.895C6.755 13.818 6.586 13.707 6.439 13.561C6.293 13.414 6.182 13.245 6.105 13.052C6.035 12.875 6 12.691 6 12.5L6 9.5C6 9.246 5.951 9.002 5.854 8.767C5.757 8.533 5.619 8.326 5.439 8.146L1.5 4.207C1.34 4.047 1.217 3.862 1.13 3.653C1.043 3.444 1 3.226 1 3C1 2.724 1.098 2.488 1.293 2.293C1.488 2.098 1.724 2 2 2L13 2C13.276 2 13.512 2.098 13.707 2.293C13.902 2.488 14 2.724 14 3C14 3.226 13.957 3.444 13.87 3.653C13.783 3.862 13.66 4.047 13.5 4.207L9.561 8.146ZM6.146 7.439C6.42 7.713 6.63 8.028 6.778 8.385C6.926 8.742 7 9.114 7 9.5L7 12.5C7 12.638 7.049 12.756 7.146 12.854C7.244 12.951 7.362 13 7.5 13C7.638 13 7.756 12.951 7.854 12.854C7.951 12.756 8 12.638 8 12.5L8 9.5C8 9.114 8.074 8.742 8.222 8.385C8.37 8.028 8.58 7.713 8.854 7.439L12.793 3.5C12.931 3.362 13 3.195 13 3L2 3C2 3.195 2.069 3.362 2.207 3.5L6.146 7.439Z'/%3E%3C/svg%3E") center / 16px 16px no-repeat;
}
```

### Data URL

```text
data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='currentColor'%3E%3Cpath d='M9.561 8.146C9.381 8.326 9.243 8.533 9.146 8.767C9.049 9.002 9 9.246 9 9.5L9 12.5C9 12.691 8.965 12.875 8.895 13.052C8.818 13.245 8.707 13.414 8.561 13.561C8.414 13.707 8.245 13.818 8.052 13.895C7.875 13.965 7.691 14 7.5 14C7.309 14 7.125 13.965 6.948 13.895C6.755 13.818 6.586 13.707 6.439 13.561C6.293 13.414 6.182 13.245 6.105 13.052C6.035 12.875 6 12.691 6 12.5L6 9.5C6 9.246 5.951 9.002 5.854 8.767C5.757 8.533 5.619 8.326 5.439 8.146L1.5 4.207C1.34 4.047 1.217 3.862 1.13 3.653C1.043 3.444 1 3.226 1 3C1 2.724 1.098 2.488 1.293 2.293C1.488 2.098 1.724 2 2 2L13 2C13.276 2 13.512 2.098 13.707 2.293C13.902 2.488 14 2.724 14 3C14 3.226 13.957 3.444 13.87 3.653C13.783 3.862 13.66 4.047 13.5 4.207L9.561 8.146ZM6.146 7.439C6.42 7.713 6.63 8.028 6.778 8.385C6.926 8.742 7 9.114 7 9.5L7 12.5C7 12.638 7.049 12.756 7.146 12.854C7.244 12.951 7.362 13 7.5 13C7.638 13 7.756 12.951 7.854 12.854C7.951 12.756 8 12.638 8 12.5L8 9.5C8 9.114 8.074 8.742 8.222 8.385C8.37 8.028 8.58 7.713 8.854 7.439L12.793 3.5C12.931 3.362 13 3.195 13 3L2 3C2 3.195 2.069 3.362 2.207 3.5L6.146 7.439Z'/%3E%3C/svg%3E
```

### Sprite

```html
<!-- Gentleface "filter" (line-round), MIT. https://gentleface.com/icons/filter
     Every icon of this style in one file: https://gentleface.com/sprite/line-round.svg
     Serve it from your own origin: <use> does not load from another origin. -->
<svg width="16" height="16" aria-hidden="true"><use href="/sprite/line-round.svg#filter"/></svg>
```

### SwiftUI

```swift
// Gentleface "filter" (line-round), MIT. https://gentleface.com/icons/filter
import SwiftUI

struct FilterIcon: Shape {
    func path(in rect: CGRect) -> Path {
        var p = Path()
        p.move(to: CGPoint(x: 9.561, y: 8.146))
        p.addCurve(to: CGPoint(x: 9.146, y: 8.767), control1: CGPoint(x: 9.381, y: 8.326), control2: CGPoint(x: 9.243, y: 8.533))
        p.addCurve(to: CGPoint(x: 9, y: 9.5), control1: CGPoint(x: 9.049, y: 9.002), control2: CGPoint(x: 9, y: 9.246))
        p.addLine(to: CGPoint(x: 9, y: 12.5))
        p.addCurve(to: CGPoint(x: 8.895, y: 13.052), control1: CGPoint(x: 9, y: 12.691), control2: CGPoint(x: 8.965, y: 12.875))
        p.addCurve(to: CGPoint(x: 8.561, y: 13.561), control1: CGPoint(x: 8.818, y: 13.245), control2: CGPoint(x: 8.707, y: 13.414))
        p.addCurve(to: CGPoint(x: 8.052, y: 13.895), control1: CGPoint(x: 8.414, y: 13.707), control2: CGPoint(x: 8.245, y: 13.818))
        p.addCurve(to: CGPoint(x: 7.5, y: 14), control1: CGPoint(x: 7.875, y: 13.965), control2: CGPoint(x: 7.691, y: 14))
        p.addCurve(to: CGPoint(x: 6.948, y: 13.895), control1: CGPoint(x: 7.309, y: 14), control2: CGPoint(x: 7.125, y: 13.965))
        p.addCurve(to: CGPoint(x: 6.439, y: 13.561), control1: CGPoint(x: 6.755, y: 13.818), control2: CGPoint(x: 6.586, y: 13.707))
        p.addCurve(to: CGPoint(x: 6.105, y: 13.052), control1: CGPoint(x: 6.293, y: 13.414), control2: CGPoint(x: 6.182, y: 13.245))
        p.addCurve(to: CGPoint(x: 6, y: 12.5), control1: CGPoint(x: 6.035, y: 12.875), control2: CGPoint(x: 6, y: 12.691))
        p.addLine(to: CGPoint(x: 6, y: 9.5))
        p.addCurve(to: CGPoint(x: 5.854, y: 8.767), control1: CGPoint(x: 6, y: 9.246), control2: CGPoint(x: 5.951, y: 9.002))
        p.addCurve(to: CGPoint(x: 5.439, y: 8.146), control1: CGPoint(x: 5.757, y: 8.533), control2: CGPoint(x: 5.619, y: 8.326))
        p.addLine(to: CGPoint(x: 1.5, y: 4.207))
        p.addCurve(to: CGPoint(x: 1.13, y: 3.653), control1: CGPoint(x: 1.34, y: 4.047), control2: CGPoint(x: 1.217, y: 3.862))
        p.addCurve(to: CGPoint(x: 1, y: 3), control1: CGPoint(x: 1.043, y: 3.444), control2: CGPoint(x: 1, y: 3.226))
        p.addCurve(to: CGPoint(x: 1.293, y: 2.293), control1: CGPoint(x: 1, y: 2.724), control2: CGPoint(x: 1.098, y: 2.488))
        p.addCurve(to: CGPoint(x: 2, y: 2), control1: CGPoint(x: 1.488, y: 2.098), control2: CGPoint(x: 1.724, y: 2))
        p.addLine(to: CGPoint(x: 13, y: 2))
        p.addCurve(to: CGPoint(x: 13.707, y: 2.293), control1: CGPoint(x: 13.276, y: 2), control2: CGPoint(x: 13.512, y: 2.098))
        p.addCurve(to: CGPoint(x: 14, y: 3), control1: CGPoint(x: 13.902, y: 2.488), control2: CGPoint(x: 14, y: 2.724))
        p.addCurve(to: CGPoint(x: 13.87, y: 3.653), control1: CGPoint(x: 14, y: 3.226), control2: CGPoint(x: 13.957, y: 3.444))
        p.addCurve(to: CGPoint(x: 13.5, y: 4.207), control1: CGPoint(x: 13.783, y: 3.862), control2: CGPoint(x: 13.66, y: 4.047))
        p.addLine(to: CGPoint(x: 9.561, y: 8.146))
        p.closeSubpath()
        p.move(to: CGPoint(x: 6.146, y: 7.439))
        p.addCurve(to: CGPoint(x: 6.778, y: 8.385), control1: CGPoint(x: 6.42, y: 7.713), control2: CGPoint(x: 6.63, y: 8.028))
        p.addCurve(to: CGPoint(x: 7, y: 9.5), control1: CGPoint(x: 6.926, y: 8.742), control2: CGPoint(x: 7, y: 9.114))
        p.addLine(to: CGPoint(x: 7, y: 12.5))
        p.addCurve(to: CGPoint(x: 7.146, y: 12.854), control1: CGPoint(x: 7, y: 12.638), control2: CGPoint(x: 7.049, y: 12.756))
        p.addCurve(to: CGPoint(x: 7.5, y: 13), control1: CGPoint(x: 7.244, y: 12.951), control2: CGPoint(x: 7.362, y: 13))
        p.addCurve(to: CGPoint(x: 7.854, y: 12.854), control1: CGPoint(x: 7.638, y: 13), control2: CGPoint(x: 7.756, y: 12.951))
        p.addCurve(to: CGPoint(x: 8, y: 12.5), control1: CGPoint(x: 7.951, y: 12.756), control2: CGPoint(x: 8, y: 12.638))
        p.addLine(to: CGPoint(x: 8, y: 9.5))
        p.addCurve(to: CGPoint(x: 8.222, y: 8.385), control1: CGPoint(x: 8, y: 9.114), control2: CGPoint(x: 8.074, y: 8.742))
        p.addCurve(to: CGPoint(x: 8.854, y: 7.439), control1: CGPoint(x: 8.37, y: 8.028), control2: CGPoint(x: 8.58, y: 7.713))
        p.addLine(to: CGPoint(x: 12.793, y: 3.5))
        p.addCurve(to: CGPoint(x: 13, y: 3), control1: CGPoint(x: 12.931, y: 3.362), control2: CGPoint(x: 13, y: 3.195))
        p.addLine(to: CGPoint(x: 2, y: 3))
        p.addCurve(to: CGPoint(x: 2.207, y: 3.5), control1: CGPoint(x: 2, y: 3.195), control2: CGPoint(x: 2.069, y: 3.362))
        p.addLine(to: CGPoint(x: 6.146, y: 7.439))
        p.closeSubpath()
        return p.applying(CGAffineTransform(scaleX: rect.width / 16, y: rect.height / 16))
    }
}

// FilterIcon().frame(width: 16, height: 16) fills with the foreground style. Keep it on whole points to stay crisp.
```

### Compose

```kotlin
// Gentleface "filter" (line-round), MIT. https://gentleface.com/icons/filter
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.graphics.vector.addPathNodes
import androidx.compose.ui.unit.dp

val FilterIcon: ImageVector by lazy {
    ImageVector.Builder(
        name = "filter", defaultWidth = 16.dp, defaultHeight = 16.dp,
        viewportWidth = 16f, viewportHeight = 16f,
    ).addPath(
        pathData = addPathNodes("M9.561 8.146C9.381 8.326 9.243 8.533 9.146 8.767C9.049 9.002 9 9.246 9 9.5L9 12.5C9 12.691 8.965 12.875 8.895 13.052C8.818 13.245 8.707 13.414 8.561 13.561C8.414 13.707 8.245 13.818 8.052 13.895C7.875 13.965 7.691 14 7.5 14C7.309 14 7.125 13.965 6.948 13.895C6.755 13.818 6.586 13.707 6.439 13.561C6.293 13.414 6.182 13.245 6.105 13.052C6.035 12.875 6 12.691 6 12.5L6 9.5C6 9.246 5.951 9.002 5.854 8.767C5.757 8.533 5.619 8.326 5.439 8.146L1.5 4.207C1.34 4.047 1.217 3.862 1.13 3.653C1.043 3.444 1 3.226 1 3C1 2.724 1.098 2.488 1.293 2.293C1.488 2.098 1.724 2 2 2L13 2C13.276 2 13.512 2.098 13.707 2.293C13.902 2.488 14 2.724 14 3C14 3.226 13.957 3.444 13.87 3.653C13.783 3.862 13.66 4.047 13.5 4.207L9.561 8.146ZM6.146 7.439C6.42 7.713 6.63 8.028 6.778 8.385C6.926 8.742 7 9.114 7 9.5L7 12.5C7 12.638 7.049 12.756 7.146 12.854C7.244 12.951 7.362 13 7.5 13C7.638 13 7.756 12.951 7.854 12.854C7.951 12.756 8 12.638 8 12.5L8 9.5C8 9.114 8.074 8.742 8.222 8.385C8.37 8.028 8.58 7.713 8.854 7.439L12.793 3.5C12.931 3.362 13 3.195 13 3L2 3C2 3.195 2.069 3.362 2.207 3.5L6.146 7.439Z"),
        fill = SolidColor(Color.Black),
    ).build()
}

// Icon(FilterIcon, contentDescription = null) tints it with LocalContentColor.
```

### Android XML

```xml
<!-- res/drawable/ic_filter.xml · Gentleface "filter" (line-round), MIT. https://gentleface.com/icons/filter -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="16dp"
    android:height="16dp"
    android:viewportWidth="16"
    android:viewportHeight="16"
    android:tint="?attr/colorControlNormal">
  <path
      android:fillColor="@android:color/white"
      android:pathData="M9.561 8.146C9.381 8.326 9.243 8.533 9.146 8.767C9.049 9.002 9 9.246 9 9.5L9 12.5C9 12.691 8.965 12.875 8.895 13.052C8.818 13.245 8.707 13.414 8.561 13.561C8.414 13.707 8.245 13.818 8.052 13.895C7.875 13.965 7.691 14 7.5 14C7.309 14 7.125 13.965 6.948 13.895C6.755 13.818 6.586 13.707 6.439 13.561C6.293 13.414 6.182 13.245 6.105 13.052C6.035 12.875 6 12.691 6 12.5L6 9.5C6 9.246 5.951 9.002 5.854 8.767C5.757 8.533 5.619 8.326 5.439 8.146L1.5 4.207C1.34 4.047 1.217 3.862 1.13 3.653C1.043 3.444 1 3.226 1 3C1 2.724 1.098 2.488 1.293 2.293C1.488 2.098 1.724 2 2 2L13 2C13.276 2 13.512 2.098 13.707 2.293C13.902 2.488 14 2.724 14 3C14 3.226 13.957 3.444 13.87 3.653C13.783 3.862 13.66 4.047 13.5 4.207L9.561 8.146ZM6.146 7.439C6.42 7.713 6.63 8.028 6.778 8.385C6.926 8.742 7 9.114 7 9.5L7 12.5C7 12.638 7.049 12.756 7.146 12.854C7.244 12.951 7.362 13 7.5 13C7.638 13 7.756 12.951 7.854 12.854C7.951 12.756 8 12.638 8 12.5L8 9.5C8 9.114 8.074 8.742 8.222 8.385C8.37 8.028 8.58 7.713 8.854 7.439L12.793 3.5C12.931 3.362 13 3.195 13 3L2 3C2 3.195 2.069 3.362 2.207 3.5L6.146 7.439Z"/>
</vector>
```

### Flutter

```dart
// Gentleface "filter" (line-round), MIT. https://gentleface.com/icons/filter
import 'package:flutter/widgets.dart';

class FilterIcon extends StatelessWidget {
  const FilterIcon({super.key, this.size = 16, this.color});
  final double size;
  final Color? color;

  @override
  Widget build(BuildContext context) => CustomPaint(
        size: Size.square(size),
        painter: _FilterIconPainter(color ?? IconTheme.of(context).color ?? const Color(0xFF000000)),
      );
}

class _FilterIconPainter extends CustomPainter {
  _FilterIconPainter(this.color);
  final Color color;

  @override
  void paint(Canvas canvas, Size size) {
    canvas.scale(size.width / 16, size.height / 16);
    final p = Path()
      ..moveTo(9.561, 8.146)
      ..cubicTo(9.381, 8.326, 9.243, 8.533, 9.146, 8.767)
      ..cubicTo(9.049, 9.002, 9, 9.246, 9, 9.5)
      ..lineTo(9, 12.5)
      ..cubicTo(9, 12.691, 8.965, 12.875, 8.895, 13.052)
      ..cubicTo(8.818, 13.245, 8.707, 13.414, 8.561, 13.561)
      ..cubicTo(8.414, 13.707, 8.245, 13.818, 8.052, 13.895)
      ..cubicTo(7.875, 13.965, 7.691, 14, 7.5, 14)
      ..cubicTo(7.309, 14, 7.125, 13.965, 6.948, 13.895)
      ..cubicTo(6.755, 13.818, 6.586, 13.707, 6.439, 13.561)
      ..cubicTo(6.293, 13.414, 6.182, 13.245, 6.105, 13.052)
      ..cubicTo(6.035, 12.875, 6, 12.691, 6, 12.5)
      ..lineTo(6, 9.5)
      ..cubicTo(6, 9.246, 5.951, 9.002, 5.854, 8.767)
      ..cubicTo(5.757, 8.533, 5.619, 8.326, 5.439, 8.146)
      ..lineTo(1.5, 4.207)
      ..cubicTo(1.34, 4.047, 1.217, 3.862, 1.13, 3.653)
      ..cubicTo(1.043, 3.444, 1, 3.226, 1, 3)
      ..cubicTo(1, 2.724, 1.098, 2.488, 1.293, 2.293)
      ..cubicTo(1.488, 2.098, 1.724, 2, 2, 2)
      ..lineTo(13, 2)
      ..cubicTo(13.276, 2, 13.512, 2.098, 13.707, 2.293)
      ..cubicTo(13.902, 2.488, 14, 2.724, 14, 3)
      ..cubicTo(14, 3.226, 13.957, 3.444, 13.87, 3.653)
      ..cubicTo(13.783, 3.862, 13.66, 4.047, 13.5, 4.207)
      ..lineTo(9.561, 8.146)
      ..close()
      ..moveTo(6.146, 7.439)
      ..cubicTo(6.42, 7.713, 6.63, 8.028, 6.778, 8.385)
      ..cubicTo(6.926, 8.742, 7, 9.114, 7, 9.5)
      ..lineTo(7, 12.5)
      ..cubicTo(7, 12.638, 7.049, 12.756, 7.146, 12.854)
      ..cubicTo(7.244, 12.951, 7.362, 13, 7.5, 13)
      ..cubicTo(7.638, 13, 7.756, 12.951, 7.854, 12.854)
      ..cubicTo(7.951, 12.756, 8, 12.638, 8, 12.5)
      ..lineTo(8, 9.5)
      ..cubicTo(8, 9.114, 8.074, 8.742, 8.222, 8.385)
      ..cubicTo(8.37, 8.028, 8.58, 7.713, 8.854, 7.439)
      ..lineTo(12.793, 3.5)
      ..cubicTo(12.931, 3.362, 13, 3.195, 13, 3)
      ..lineTo(2, 3)
      ..cubicTo(2, 3.195, 2.069, 3.362, 2.207, 3.5)
      ..lineTo(6.146, 7.439)
      ..close();
    canvas.drawPath(p, Paint()..color = color);
  }

  @override
  bool shouldRepaint(_FilterIconPainter old) => old.color != color;
}
```
