# bezier-handle icon

Bezier handle. Gentleface icon, drawn on the 16 px pixel grid. Free, MIT licensed. Page: https://gentleface.com/icons/bezier-handle

- Category: Design
- Use it for: bezier handle, tangent handle, control handle
- Tags: bezier, curve, spline, path, vector, anchor, node, pen, draw, handle, tangent, control-point
- Family: bezier-curve
- Component name: BezierHandleIcon
- Added: 2026-11-07
- Since: version 0.5.0
- npm: `import { BezierHandleIcon } from '@gentleface/react';` (@gentleface/react 0.6.0)

## Files

Each icon is drawn on the 16 px grid, and most also on the 20 and 24 px grids (at 24 in three weights: light 1 px, regular 1.5 px, bold 2 px). Show the drawing made for your size, or an exact multiple of it, on whole pixels: 16 for 16 and 32 px, 20 for 20 and 40, 24 for 24 and 48. A size in between or a fractional position blurs it. The code on each icon page is the 16 px drawing, an SVG with fill="currentColor"; the icon page's downloads follow its Grid switch, and npm has the 20 and 24 px drawings too.

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

The SVG of every style: https://gentleface.com/icons/bezier-handle.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 1L9 2L11.086 2C11.192 1.7 11.374 1.459 11.634 1.275C11.893 1.092 12.182 1 12.5 1C12.914 1 13.268 1.146 13.561 1.439C13.854 1.732 14 2.086 14 2.5C14 2.914 13.854 3.268 13.561 3.561C13.268 3.854 12.914 4 12.5 4C12.182 4 11.893 3.908 11.634 3.725C11.374 3.541 11.192 3.3 11.086 3L9.488 3C9.979 3.511 10.464 4.225 10.943 5.144C11.961 7.094 12.974 10.004 13.984 13.874C14.019 14.01 14.003 14.137 13.934 14.254C13.865 14.372 13.763 14.448 13.626 14.484C13.49 14.519 13.363 14.503 13.246 14.434C13.128 14.365 13.052 14.263 13.016 14.126C12.026 10.329 11.039 7.489 10.057 5.606C9.7 4.923 9.348 4.373 9 3.954L9 4L6 4L6 3.954C5.652 4.373 5.3 4.923 4.943 5.606C3.961 7.489 2.974 10.329 1.984 14.126C1.949 14.26 1.872 14.362 1.753 14.431C1.634 14.501 1.507 14.519 1.374 14.484C1.24 14.449 1.138 14.372 1.069 14.253C0.999 14.134 0.981 14.007 1.016 13.874C2.026 10.004 3.039 7.094 4.057 5.144C4.536 4.225 5.021 3.511 5.512 3L3.914 3C3.808 3.3 3.626 3.541 3.366 3.725C3.107 3.908 2.818 4 2.5 4C2.086 4 1.732 3.854 1.439 3.561C1.146 3.268 1 2.914 1 2.5C1 2.086 1.146 1.732 1.439 1.439C1.732 1.146 2.086 1 2.5 1C2.818 1 3.107 1.092 3.366 1.275C3.626 1.459 3.808 1.7 3.914 2L6 2L6 1L9 1Z"/></svg>
```

### React

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

export function BezierHandleIcon(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 1L9 2L11.086 2C11.192 1.7 11.374 1.459 11.634 1.275C11.893 1.092 12.182 1 12.5 1C12.914 1 13.268 1.146 13.561 1.439C13.854 1.732 14 2.086 14 2.5C14 2.914 13.854 3.268 13.561 3.561C13.268 3.854 12.914 4 12.5 4C12.182 4 11.893 3.908 11.634 3.725C11.374 3.541 11.192 3.3 11.086 3L9.488 3C9.979 3.511 10.464 4.225 10.943 5.144C11.961 7.094 12.974 10.004 13.984 13.874C14.019 14.01 14.003 14.137 13.934 14.254C13.865 14.372 13.763 14.448 13.626 14.484C13.49 14.519 13.363 14.503 13.246 14.434C13.128 14.365 13.052 14.263 13.016 14.126C12.026 10.329 11.039 7.489 10.057 5.606C9.7 4.923 9.348 4.373 9 3.954L9 4L6 4L6 3.954C5.652 4.373 5.3 4.923 4.943 5.606C3.961 7.489 2.974 10.329 1.984 14.126C1.949 14.26 1.872 14.362 1.753 14.431C1.634 14.501 1.507 14.519 1.374 14.484C1.24 14.449 1.138 14.372 1.069 14.253C0.999 14.134 0.981 14.007 1.016 13.874C2.026 10.004 3.039 7.094 4.057 5.144C4.536 4.225 5.021 3.511 5.512 3L3.914 3C3.808 3.3 3.626 3.541 3.366 3.725C3.107 3.908 2.818 4 2.5 4C2.086 4 1.732 3.854 1.439 3.561C1.146 3.268 1 2.914 1 2.5C1 2.086 1.146 1.732 1.439 1.439C1.732 1.146 2.086 1 2.5 1C2.818 1 3.107 1.092 3.366 1.275C3.626 1.459 3.808 1.7 3.914 2L6 2L6 1L9 1Z" />
    </svg>
  );
}
```

### Vue

```vue
<!-- Gentleface "bezier-handle" (line-round), MIT. https://gentleface.com/icons/bezier-handle -->
<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 1L9 2L11.086 2C11.192 1.7 11.374 1.459 11.634 1.275C11.893 1.092 12.182 1 12.5 1C12.914 1 13.268 1.146 13.561 1.439C13.854 1.732 14 2.086 14 2.5C14 2.914 13.854 3.268 13.561 3.561C13.268 3.854 12.914 4 12.5 4C12.182 4 11.893 3.908 11.634 3.725C11.374 3.541 11.192 3.3 11.086 3L9.488 3C9.979 3.511 10.464 4.225 10.943 5.144C11.961 7.094 12.974 10.004 13.984 13.874C14.019 14.01 14.003 14.137 13.934 14.254C13.865 14.372 13.763 14.448 13.626 14.484C13.49 14.519 13.363 14.503 13.246 14.434C13.128 14.365 13.052 14.263 13.016 14.126C12.026 10.329 11.039 7.489 10.057 5.606C9.7 4.923 9.348 4.373 9 3.954L9 4L6 4L6 3.954C5.652 4.373 5.3 4.923 4.943 5.606C3.961 7.489 2.974 10.329 1.984 14.126C1.949 14.26 1.872 14.362 1.753 14.431C1.634 14.501 1.507 14.519 1.374 14.484C1.24 14.449 1.138 14.372 1.069 14.253C0.999 14.134 0.981 14.007 1.016 13.874C2.026 10.004 3.039 7.094 4.057 5.144C4.536 4.225 5.021 3.511 5.512 3L3.914 3C3.808 3.3 3.626 3.541 3.366 3.725C3.107 3.908 2.818 4 2.5 4C2.086 4 1.732 3.854 1.439 3.561C1.146 3.268 1 2.914 1 2.5C1 2.086 1.146 1.732 1.439 1.439C1.732 1.146 2.086 1 2.5 1C2.818 1 3.107 1.092 3.366 1.275C3.626 1.459 3.808 1.7 3.914 2L6 2L6 1L9 1Z" />
  </svg>
</template>
```

### Svelte

```svelte
<!-- Gentleface "bezier-handle" (line-round), MIT. https://gentleface.com/icons/bezier-handle -->
<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 1L9 2L11.086 2C11.192 1.7 11.374 1.459 11.634 1.275C11.893 1.092 12.182 1 12.5 1C12.914 1 13.268 1.146 13.561 1.439C13.854 1.732 14 2.086 14 2.5C14 2.914 13.854 3.268 13.561 3.561C13.268 3.854 12.914 4 12.5 4C12.182 4 11.893 3.908 11.634 3.725C11.374 3.541 11.192 3.3 11.086 3L9.488 3C9.979 3.511 10.464 4.225 10.943 5.144C11.961 7.094 12.974 10.004 13.984 13.874C14.019 14.01 14.003 14.137 13.934 14.254C13.865 14.372 13.763 14.448 13.626 14.484C13.49 14.519 13.363 14.503 13.246 14.434C13.128 14.365 13.052 14.263 13.016 14.126C12.026 10.329 11.039 7.489 10.057 5.606C9.7 4.923 9.348 4.373 9 3.954L9 4L6 4L6 3.954C5.652 4.373 5.3 4.923 4.943 5.606C3.961 7.489 2.974 10.329 1.984 14.126C1.949 14.26 1.872 14.362 1.753 14.431C1.634 14.501 1.507 14.519 1.374 14.484C1.24 14.449 1.138 14.372 1.069 14.253C0.999 14.134 0.981 14.007 1.016 13.874C2.026 10.004 3.039 7.094 4.057 5.144C4.536 4.225 5.021 3.511 5.512 3L3.914 3C3.808 3.3 3.626 3.541 3.366 3.725C3.107 3.908 2.818 4 2.5 4C2.086 4 1.732 3.854 1.439 3.561C1.146 3.268 1 2.914 1 2.5C1 2.086 1.146 1.732 1.439 1.439C1.732 1.146 2.086 1 2.5 1C2.818 1 3.107 1.092 3.366 1.275C3.626 1.459 3.808 1.7 3.914 2L6 2L6 1L9 1Z" />
</svg>
```

### HTML img

```html
<!-- Gentleface "bezier-handle" (line-round), MIT. https://gentleface.com/icons/bezier-handle. 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/bezier-handle.svg" width="16" height="16" alt="">
```

### CSS

```css
/* Gentleface "bezier-handle" (line-round), MIT. https://gentleface.com/icons/bezier-handle. Takes the text color. */
.icon-bezier-handle {
  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 1L9 2L11.086 2C11.192 1.7 11.374 1.459 11.634 1.275C11.893 1.092 12.182 1 12.5 1C12.914 1 13.268 1.146 13.561 1.439C13.854 1.732 14 2.086 14 2.5C14 2.914 13.854 3.268 13.561 3.561C13.268 3.854 12.914 4 12.5 4C12.182 4 11.893 3.908 11.634 3.725C11.374 3.541 11.192 3.3 11.086 3L9.488 3C9.979 3.511 10.464 4.225 10.943 5.144C11.961 7.094 12.974 10.004 13.984 13.874C14.019 14.01 14.003 14.137 13.934 14.254C13.865 14.372 13.763 14.448 13.626 14.484C13.49 14.519 13.363 14.503 13.246 14.434C13.128 14.365 13.052 14.263 13.016 14.126C12.026 10.329 11.039 7.489 10.057 5.606C9.7 4.923 9.348 4.373 9 3.954L9 4L6 4L6 3.954C5.652 4.373 5.3 4.923 4.943 5.606C3.961 7.489 2.974 10.329 1.984 14.126C1.949 14.26 1.872 14.362 1.753 14.431C1.634 14.501 1.507 14.519 1.374 14.484C1.24 14.449 1.138 14.372 1.069 14.253C0.999 14.134 0.981 14.007 1.016 13.874C2.026 10.004 3.039 7.094 4.057 5.144C4.536 4.225 5.021 3.511 5.512 3L3.914 3C3.808 3.3 3.626 3.541 3.366 3.725C3.107 3.908 2.818 4 2.5 4C2.086 4 1.732 3.854 1.439 3.561C1.146 3.268 1 2.914 1 2.5C1 2.086 1.146 1.732 1.439 1.439C1.732 1.146 2.086 1 2.5 1C2.818 1 3.107 1.092 3.366 1.275C3.626 1.459 3.808 1.7 3.914 2L6 2L6 1L9 1Z'/%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 1L9 2L11.086 2C11.192 1.7 11.374 1.459 11.634 1.275C11.893 1.092 12.182 1 12.5 1C12.914 1 13.268 1.146 13.561 1.439C13.854 1.732 14 2.086 14 2.5C14 2.914 13.854 3.268 13.561 3.561C13.268 3.854 12.914 4 12.5 4C12.182 4 11.893 3.908 11.634 3.725C11.374 3.541 11.192 3.3 11.086 3L9.488 3C9.979 3.511 10.464 4.225 10.943 5.144C11.961 7.094 12.974 10.004 13.984 13.874C14.019 14.01 14.003 14.137 13.934 14.254C13.865 14.372 13.763 14.448 13.626 14.484C13.49 14.519 13.363 14.503 13.246 14.434C13.128 14.365 13.052 14.263 13.016 14.126C12.026 10.329 11.039 7.489 10.057 5.606C9.7 4.923 9.348 4.373 9 3.954L9 4L6 4L6 3.954C5.652 4.373 5.3 4.923 4.943 5.606C3.961 7.489 2.974 10.329 1.984 14.126C1.949 14.26 1.872 14.362 1.753 14.431C1.634 14.501 1.507 14.519 1.374 14.484C1.24 14.449 1.138 14.372 1.069 14.253C0.999 14.134 0.981 14.007 1.016 13.874C2.026 10.004 3.039 7.094 4.057 5.144C4.536 4.225 5.021 3.511 5.512 3L3.914 3C3.808 3.3 3.626 3.541 3.366 3.725C3.107 3.908 2.818 4 2.5 4C2.086 4 1.732 3.854 1.439 3.561C1.146 3.268 1 2.914 1 2.5C1 2.086 1.146 1.732 1.439 1.439C1.732 1.146 2.086 1 2.5 1C2.818 1 3.107 1.092 3.366 1.275C3.626 1.459 3.808 1.7 3.914 2L6 2L6 1L9 1Z'/%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 1L9 2L11.086 2C11.192 1.7 11.374 1.459 11.634 1.275C11.893 1.092 12.182 1 12.5 1C12.914 1 13.268 1.146 13.561 1.439C13.854 1.732 14 2.086 14 2.5C14 2.914 13.854 3.268 13.561 3.561C13.268 3.854 12.914 4 12.5 4C12.182 4 11.893 3.908 11.634 3.725C11.374 3.541 11.192 3.3 11.086 3L9.488 3C9.979 3.511 10.464 4.225 10.943 5.144C11.961 7.094 12.974 10.004 13.984 13.874C14.019 14.01 14.003 14.137 13.934 14.254C13.865 14.372 13.763 14.448 13.626 14.484C13.49 14.519 13.363 14.503 13.246 14.434C13.128 14.365 13.052 14.263 13.016 14.126C12.026 10.329 11.039 7.489 10.057 5.606C9.7 4.923 9.348 4.373 9 3.954L9 4L6 4L6 3.954C5.652 4.373 5.3 4.923 4.943 5.606C3.961 7.489 2.974 10.329 1.984 14.126C1.949 14.26 1.872 14.362 1.753 14.431C1.634 14.501 1.507 14.519 1.374 14.484C1.24 14.449 1.138 14.372 1.069 14.253C0.999 14.134 0.981 14.007 1.016 13.874C2.026 10.004 3.039 7.094 4.057 5.144C4.536 4.225 5.021 3.511 5.512 3L3.914 3C3.808 3.3 3.626 3.541 3.366 3.725C3.107 3.908 2.818 4 2.5 4C2.086 4 1.732 3.854 1.439 3.561C1.146 3.268 1 2.914 1 2.5C1 2.086 1.146 1.732 1.439 1.439C1.732 1.146 2.086 1 2.5 1C2.818 1 3.107 1.092 3.366 1.275C3.626 1.459 3.808 1.7 3.914 2L6 2L6 1L9 1Z'/%3E%3C/svg%3E
```

### Sprite

```html
<!-- Gentleface "bezier-handle" (line-round), MIT. https://gentleface.com/icons/bezier-handle
     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#bezier-handle"/></svg>
```

### SwiftUI

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

struct BezierHandleIcon: Shape {
    func path(in rect: CGRect) -> Path {
        var p = Path()
        p.move(to: CGPoint(x: 9, y: 1))
        p.addLine(to: CGPoint(x: 9, y: 2))
        p.addLine(to: CGPoint(x: 11.086, y: 2))
        p.addCurve(to: CGPoint(x: 11.634, y: 1.275), control1: CGPoint(x: 11.192, y: 1.7), control2: CGPoint(x: 11.374, y: 1.459))
        p.addCurve(to: CGPoint(x: 12.5, y: 1), control1: CGPoint(x: 11.893, y: 1.092), control2: CGPoint(x: 12.182, y: 1))
        p.addCurve(to: CGPoint(x: 13.561, y: 1.439), control1: CGPoint(x: 12.914, y: 1), control2: CGPoint(x: 13.268, y: 1.146))
        p.addCurve(to: CGPoint(x: 14, y: 2.5), control1: CGPoint(x: 13.854, y: 1.732), control2: CGPoint(x: 14, y: 2.086))
        p.addCurve(to: CGPoint(x: 13.561, y: 3.561), control1: CGPoint(x: 14, y: 2.914), control2: CGPoint(x: 13.854, y: 3.268))
        p.addCurve(to: CGPoint(x: 12.5, y: 4), control1: CGPoint(x: 13.268, y: 3.854), control2: CGPoint(x: 12.914, y: 4))
        p.addCurve(to: CGPoint(x: 11.634, y: 3.725), control1: CGPoint(x: 12.182, y: 4), control2: CGPoint(x: 11.893, y: 3.908))
        p.addCurve(to: CGPoint(x: 11.086, y: 3), control1: CGPoint(x: 11.374, y: 3.541), control2: CGPoint(x: 11.192, y: 3.3))
        p.addLine(to: CGPoint(x: 9.488, y: 3))
        p.addCurve(to: CGPoint(x: 10.943, y: 5.144), control1: CGPoint(x: 9.979, y: 3.511), control2: CGPoint(x: 10.464, y: 4.225))
        p.addCurve(to: CGPoint(x: 13.984, y: 13.874), control1: CGPoint(x: 11.961, y: 7.094), control2: CGPoint(x: 12.974, y: 10.004))
        p.addCurve(to: CGPoint(x: 13.934, y: 14.254), control1: CGPoint(x: 14.019, y: 14.01), control2: CGPoint(x: 14.003, y: 14.137))
        p.addCurve(to: CGPoint(x: 13.626, y: 14.484), control1: CGPoint(x: 13.865, y: 14.372), control2: CGPoint(x: 13.763, y: 14.448))
        p.addCurve(to: CGPoint(x: 13.246, y: 14.434), control1: CGPoint(x: 13.49, y: 14.519), control2: CGPoint(x: 13.363, y: 14.503))
        p.addCurve(to: CGPoint(x: 13.016, y: 14.126), control1: CGPoint(x: 13.128, y: 14.365), control2: CGPoint(x: 13.052, y: 14.263))
        p.addCurve(to: CGPoint(x: 10.057, y: 5.606), control1: CGPoint(x: 12.026, y: 10.329), control2: CGPoint(x: 11.039, y: 7.489))
        p.addCurve(to: CGPoint(x: 9, y: 3.954), control1: CGPoint(x: 9.7, y: 4.923), control2: CGPoint(x: 9.348, y: 4.373))
        p.addLine(to: CGPoint(x: 9, y: 4))
        p.addLine(to: CGPoint(x: 6, y: 4))
        p.addLine(to: CGPoint(x: 6, y: 3.954))
        p.addCurve(to: CGPoint(x: 4.943, y: 5.606), control1: CGPoint(x: 5.652, y: 4.373), control2: CGPoint(x: 5.3, y: 4.923))
        p.addCurve(to: CGPoint(x: 1.984, y: 14.126), control1: CGPoint(x: 3.961, y: 7.489), control2: CGPoint(x: 2.974, y: 10.329))
        p.addCurve(to: CGPoint(x: 1.753, y: 14.431), control1: CGPoint(x: 1.949, y: 14.26), control2: CGPoint(x: 1.872, y: 14.362))
        p.addCurve(to: CGPoint(x: 1.374, y: 14.484), control1: CGPoint(x: 1.634, y: 14.501), control2: CGPoint(x: 1.507, y: 14.519))
        p.addCurve(to: CGPoint(x: 1.069, y: 14.253), control1: CGPoint(x: 1.24, y: 14.449), control2: CGPoint(x: 1.138, y: 14.372))
        p.addCurve(to: CGPoint(x: 1.016, y: 13.874), control1: CGPoint(x: 0.999, y: 14.134), control2: CGPoint(x: 0.981, y: 14.007))
        p.addCurve(to: CGPoint(x: 4.057, y: 5.144), control1: CGPoint(x: 2.026, y: 10.004), control2: CGPoint(x: 3.039, y: 7.094))
        p.addCurve(to: CGPoint(x: 5.512, y: 3), control1: CGPoint(x: 4.536, y: 4.225), control2: CGPoint(x: 5.021, y: 3.511))
        p.addLine(to: CGPoint(x: 3.914, y: 3))
        p.addCurve(to: CGPoint(x: 3.366, y: 3.725), control1: CGPoint(x: 3.808, y: 3.3), control2: CGPoint(x: 3.626, y: 3.541))
        p.addCurve(to: CGPoint(x: 2.5, y: 4), control1: CGPoint(x: 3.107, y: 3.908), control2: CGPoint(x: 2.818, y: 4))
        p.addCurve(to: CGPoint(x: 1.439, y: 3.561), control1: CGPoint(x: 2.086, y: 4), control2: CGPoint(x: 1.732, y: 3.854))
        p.addCurve(to: CGPoint(x: 1, y: 2.5), control1: CGPoint(x: 1.146, y: 3.268), control2: CGPoint(x: 1, y: 2.914))
        p.addCurve(to: CGPoint(x: 1.439, y: 1.439), control1: CGPoint(x: 1, y: 2.086), control2: CGPoint(x: 1.146, y: 1.732))
        p.addCurve(to: CGPoint(x: 2.5, y: 1), control1: CGPoint(x: 1.732, y: 1.146), control2: CGPoint(x: 2.086, y: 1))
        p.addCurve(to: CGPoint(x: 3.366, y: 1.275), control1: CGPoint(x: 2.818, y: 1), control2: CGPoint(x: 3.107, y: 1.092))
        p.addCurve(to: CGPoint(x: 3.914, y: 2), control1: CGPoint(x: 3.626, y: 1.459), control2: CGPoint(x: 3.808, y: 1.7))
        p.addLine(to: CGPoint(x: 6, y: 2))
        p.addLine(to: CGPoint(x: 6, y: 1))
        p.addLine(to: CGPoint(x: 9, y: 1))
        p.closeSubpath()
        return p.applying(CGAffineTransform(scaleX: rect.width / 16, y: rect.height / 16))
    }
}

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

### Compose

```kotlin
// Gentleface "bezier-handle" (line-round), MIT. https://gentleface.com/icons/bezier-handle
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 BezierHandleIcon: ImageVector by lazy {
    ImageVector.Builder(
        name = "bezier-handle", defaultWidth = 16.dp, defaultHeight = 16.dp,
        viewportWidth = 16f, viewportHeight = 16f,
    ).addPath(
        pathData = addPathNodes("M9 1L9 2L11.086 2C11.192 1.7 11.374 1.459 11.634 1.275C11.893 1.092 12.182 1 12.5 1C12.914 1 13.268 1.146 13.561 1.439C13.854 1.732 14 2.086 14 2.5C14 2.914 13.854 3.268 13.561 3.561C13.268 3.854 12.914 4 12.5 4C12.182 4 11.893 3.908 11.634 3.725C11.374 3.541 11.192 3.3 11.086 3L9.488 3C9.979 3.511 10.464 4.225 10.943 5.144C11.961 7.094 12.974 10.004 13.984 13.874C14.019 14.01 14.003 14.137 13.934 14.254C13.865 14.372 13.763 14.448 13.626 14.484C13.49 14.519 13.363 14.503 13.246 14.434C13.128 14.365 13.052 14.263 13.016 14.126C12.026 10.329 11.039 7.489 10.057 5.606C9.7 4.923 9.348 4.373 9 3.954L9 4L6 4L6 3.954C5.652 4.373 5.3 4.923 4.943 5.606C3.961 7.489 2.974 10.329 1.984 14.126C1.949 14.26 1.872 14.362 1.753 14.431C1.634 14.501 1.507 14.519 1.374 14.484C1.24 14.449 1.138 14.372 1.069 14.253C0.999 14.134 0.981 14.007 1.016 13.874C2.026 10.004 3.039 7.094 4.057 5.144C4.536 4.225 5.021 3.511 5.512 3L3.914 3C3.808 3.3 3.626 3.541 3.366 3.725C3.107 3.908 2.818 4 2.5 4C2.086 4 1.732 3.854 1.439 3.561C1.146 3.268 1 2.914 1 2.5C1 2.086 1.146 1.732 1.439 1.439C1.732 1.146 2.086 1 2.5 1C2.818 1 3.107 1.092 3.366 1.275C3.626 1.459 3.808 1.7 3.914 2L6 2L6 1L9 1Z"),
        fill = SolidColor(Color.Black),
    ).build()
}

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

### Android XML

```xml
<!-- res/drawable/ic_bezier_handle.xml · Gentleface "bezier-handle" (line-round), MIT. https://gentleface.com/icons/bezier-handle -->
<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 1L9 2L11.086 2C11.192 1.7 11.374 1.459 11.634 1.275C11.893 1.092 12.182 1 12.5 1C12.914 1 13.268 1.146 13.561 1.439C13.854 1.732 14 2.086 14 2.5C14 2.914 13.854 3.268 13.561 3.561C13.268 3.854 12.914 4 12.5 4C12.182 4 11.893 3.908 11.634 3.725C11.374 3.541 11.192 3.3 11.086 3L9.488 3C9.979 3.511 10.464 4.225 10.943 5.144C11.961 7.094 12.974 10.004 13.984 13.874C14.019 14.01 14.003 14.137 13.934 14.254C13.865 14.372 13.763 14.448 13.626 14.484C13.49 14.519 13.363 14.503 13.246 14.434C13.128 14.365 13.052 14.263 13.016 14.126C12.026 10.329 11.039 7.489 10.057 5.606C9.7 4.923 9.348 4.373 9 3.954L9 4L6 4L6 3.954C5.652 4.373 5.3 4.923 4.943 5.606C3.961 7.489 2.974 10.329 1.984 14.126C1.949 14.26 1.872 14.362 1.753 14.431C1.634 14.501 1.507 14.519 1.374 14.484C1.24 14.449 1.138 14.372 1.069 14.253C0.999 14.134 0.981 14.007 1.016 13.874C2.026 10.004 3.039 7.094 4.057 5.144C4.536 4.225 5.021 3.511 5.512 3L3.914 3C3.808 3.3 3.626 3.541 3.366 3.725C3.107 3.908 2.818 4 2.5 4C2.086 4 1.732 3.854 1.439 3.561C1.146 3.268 1 2.914 1 2.5C1 2.086 1.146 1.732 1.439 1.439C1.732 1.146 2.086 1 2.5 1C2.818 1 3.107 1.092 3.366 1.275C3.626 1.459 3.808 1.7 3.914 2L6 2L6 1L9 1Z"/>
</vector>
```

### Flutter

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

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

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

class _BezierHandleIconPainter extends CustomPainter {
  _BezierHandleIconPainter(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, 1)
      ..lineTo(9, 2)
      ..lineTo(11.086, 2)
      ..cubicTo(11.192, 1.7, 11.374, 1.459, 11.634, 1.275)
      ..cubicTo(11.893, 1.092, 12.182, 1, 12.5, 1)
      ..cubicTo(12.914, 1, 13.268, 1.146, 13.561, 1.439)
      ..cubicTo(13.854, 1.732, 14, 2.086, 14, 2.5)
      ..cubicTo(14, 2.914, 13.854, 3.268, 13.561, 3.561)
      ..cubicTo(13.268, 3.854, 12.914, 4, 12.5, 4)
      ..cubicTo(12.182, 4, 11.893, 3.908, 11.634, 3.725)
      ..cubicTo(11.374, 3.541, 11.192, 3.3, 11.086, 3)
      ..lineTo(9.488, 3)
      ..cubicTo(9.979, 3.511, 10.464, 4.225, 10.943, 5.144)
      ..cubicTo(11.961, 7.094, 12.974, 10.004, 13.984, 13.874)
      ..cubicTo(14.019, 14.01, 14.003, 14.137, 13.934, 14.254)
      ..cubicTo(13.865, 14.372, 13.763, 14.448, 13.626, 14.484)
      ..cubicTo(13.49, 14.519, 13.363, 14.503, 13.246, 14.434)
      ..cubicTo(13.128, 14.365, 13.052, 14.263, 13.016, 14.126)
      ..cubicTo(12.026, 10.329, 11.039, 7.489, 10.057, 5.606)
      ..cubicTo(9.7, 4.923, 9.348, 4.373, 9, 3.954)
      ..lineTo(9, 4)
      ..lineTo(6, 4)
      ..lineTo(6, 3.954)
      ..cubicTo(5.652, 4.373, 5.3, 4.923, 4.943, 5.606)
      ..cubicTo(3.961, 7.489, 2.974, 10.329, 1.984, 14.126)
      ..cubicTo(1.949, 14.26, 1.872, 14.362, 1.753, 14.431)
      ..cubicTo(1.634, 14.501, 1.507, 14.519, 1.374, 14.484)
      ..cubicTo(1.24, 14.449, 1.138, 14.372, 1.069, 14.253)
      ..cubicTo(0.999, 14.134, 0.981, 14.007, 1.016, 13.874)
      ..cubicTo(2.026, 10.004, 3.039, 7.094, 4.057, 5.144)
      ..cubicTo(4.536, 4.225, 5.021, 3.511, 5.512, 3)
      ..lineTo(3.914, 3)
      ..cubicTo(3.808, 3.3, 3.626, 3.541, 3.366, 3.725)
      ..cubicTo(3.107, 3.908, 2.818, 4, 2.5, 4)
      ..cubicTo(2.086, 4, 1.732, 3.854, 1.439, 3.561)
      ..cubicTo(1.146, 3.268, 1, 2.914, 1, 2.5)
      ..cubicTo(1, 2.086, 1.146, 1.732, 1.439, 1.439)
      ..cubicTo(1.732, 1.146, 2.086, 1, 2.5, 1)
      ..cubicTo(2.818, 1, 3.107, 1.092, 3.366, 1.275)
      ..cubicTo(3.626, 1.459, 3.808, 1.7, 3.914, 2)
      ..lineTo(6, 2)
      ..lineTo(6, 1)
      ..lineTo(9, 1)
      ..close();
    canvas.drawPath(p, Paint()..color = color);
  }

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