# arrow-up-down icon

Arrow up down. Gentleface icon, drawn on the 16 px pixel grid. Free, MIT licensed. Page: https://gentleface.com/icons/arrow-up-down

- Category: Arrows
- Use it for: swap vertical, swap up down
- Tags: arrows, swap, exchange, vertical, up-down, bidirectional
- Family: arrow-down, arrow-down-left, arrow-down-right, arrow-down-to-line, arrow-left, arrow-left-right, arrow-left-to-line, arrow-right, arrow-right-to-line, arrow-up, arrow-up-left, arrow-up-right, arrow-up-to-line, corner-down-left, corner-down-right, corner-right-up, external-link, fit-height, fit-screen, fit-width, move, move-horizontal, move-vertical, redo, refresh, shrink, undo
- Component name: ArrowUpDownIcon
- Added: 2026-10-15

## Alternatives

- `arrow-left-right`: the two items sit side by side (swap)
- `sort`: order a list by a key (sort)

## Don't confuse with

- `move-vertical`: one shaft with two heads means resize or move vertically

## Also fits

- swap: the two fields are stacked, e.g. origin and destination in a form (swap-vertical)

## Not for

- sort (use `sort`): arrow-up-down swaps two items vertically; it does not sort
- dropdown (use `chevrons-up-down`): two opposed arrows mean swap (swap-vertical), not a select
- resize vertical (use `move-vertical`): two paired arrows mean swap

## 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/arrow-up-down.svg · PNG https://gentleface.com/png/line-round/16/arrow-up-down.png · https://gentleface.com/png/line-round/32/arrow-up-down.png · https://gentleface.com/png/line-round/48/arrow-up-down.png
- line-soft: https://gentleface.com/svg/line-soft/16/arrow-up-down.svg · PNG https://gentleface.com/png/line-soft/16/arrow-up-down.png · https://gentleface.com/png/line-soft/32/arrow-up-down.png · https://gentleface.com/png/line-soft/48/arrow-up-down.png
- line-sharp: https://gentleface.com/svg/line-sharp/16/arrow-up-down.svg · PNG https://gentleface.com/png/line-sharp/16/arrow-up-down.png · https://gentleface.com/png/line-sharp/32/arrow-up-down.png · https://gentleface.com/png/line-sharp/48/arrow-up-down.png
- solid-round: https://gentleface.com/svg/solid-round/16/arrow-up-down.svg · PNG https://gentleface.com/png/solid-round/16/arrow-up-down.png · https://gentleface.com/png/solid-round/32/arrow-up-down.png · https://gentleface.com/png/solid-round/48/arrow-up-down.png
- solid-soft: https://gentleface.com/svg/solid-soft/16/arrow-up-down.svg · PNG https://gentleface.com/png/solid-soft/16/arrow-up-down.png · https://gentleface.com/png/solid-soft/32/arrow-up-down.png · https://gentleface.com/png/solid-soft/48/arrow-up-down.png
- solid-sharp: https://gentleface.com/svg/solid-sharp/16/arrow-up-down.svg · PNG https://gentleface.com/png/solid-sharp/16/arrow-up-down.png · https://gentleface.com/png/solid-sharp/32/arrow-up-down.png · https://gentleface.com/png/solid-sharp/48/arrow-up-down.png

The SVG of every style: https://gentleface.com/icons/arrow-up-down.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="M4.146 1.146C4.244 1.049 4.362 1 4.5 1C4.638 1 4.756 1.049 4.854 1.146L7.854 4.146C7.953 4.246 8.003 4.364 8.003 4.5C8.003 4.636 7.953 4.754 7.854 4.854C7.754 4.953 7.636 5.003 7.5 5.003C7.364 5.003 7.246 4.953 7.146 4.854L5 2.707L5 10.5C5 10.641 4.952 10.759 4.856 10.856C4.759 10.952 4.641 11 4.5 11C4.359 11 4.241 10.952 4.144 10.856C4.048 10.759 4 10.641 4 10.5L4 2.707L1.854 4.854C1.756 4.951 1.638 5 1.5 5C1.362 5 1.244 4.951 1.146 4.854C1.049 4.756 1 4.638 1 4.5C1 4.362 1.049 4.244 1.146 4.146L4.146 1.146ZM13.146 11.146C13.246 11.047 13.364 10.997 13.5 10.997C13.636 10.997 13.754 11.047 13.854 11.146C13.953 11.246 14.003 11.364 14.003 11.5C14.003 11.636 13.953 11.754 13.854 11.854L10.854 14.854C10.754 14.953 10.636 15.003 10.5 15.003C10.364 15.003 10.246 14.953 10.146 14.854L7.146 11.854C7.047 11.754 6.997 11.636 6.997 11.5C6.997 11.364 7.047 11.246 7.146 11.146C7.244 11.049 7.362 11 7.5 11C7.638 11 7.756 11.049 7.854 11.146L10 13.293L10 5.5C10 5.359 10.048 5.241 10.144 5.144C10.241 5.048 10.359 5 10.5 5C10.641 5 10.759 5.048 10.856 5.144C10.952 5.241 11 5.359 11 5.5L11 13.293L13.146 11.146Z"/></svg>
```

### React

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

export function ArrowUpDownIcon(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="M4.146 1.146C4.244 1.049 4.362 1 4.5 1C4.638 1 4.756 1.049 4.854 1.146L7.854 4.146C7.953 4.246 8.003 4.364 8.003 4.5C8.003 4.636 7.953 4.754 7.854 4.854C7.754 4.953 7.636 5.003 7.5 5.003C7.364 5.003 7.246 4.953 7.146 4.854L5 2.707L5 10.5C5 10.641 4.952 10.759 4.856 10.856C4.759 10.952 4.641 11 4.5 11C4.359 11 4.241 10.952 4.144 10.856C4.048 10.759 4 10.641 4 10.5L4 2.707L1.854 4.854C1.756 4.951 1.638 5 1.5 5C1.362 5 1.244 4.951 1.146 4.854C1.049 4.756 1 4.638 1 4.5C1 4.362 1.049 4.244 1.146 4.146L4.146 1.146ZM13.146 11.146C13.246 11.047 13.364 10.997 13.5 10.997C13.636 10.997 13.754 11.047 13.854 11.146C13.953 11.246 14.003 11.364 14.003 11.5C14.003 11.636 13.953 11.754 13.854 11.854L10.854 14.854C10.754 14.953 10.636 15.003 10.5 15.003C10.364 15.003 10.246 14.953 10.146 14.854L7.146 11.854C7.047 11.754 6.997 11.636 6.997 11.5C6.997 11.364 7.047 11.246 7.146 11.146C7.244 11.049 7.362 11 7.5 11C7.638 11 7.756 11.049 7.854 11.146L10 13.293L10 5.5C10 5.359 10.048 5.241 10.144 5.144C10.241 5.048 10.359 5 10.5 5C10.641 5 10.759 5.048 10.856 5.144C10.952 5.241 11 5.359 11 5.5L11 13.293L13.146 11.146Z" />
    </svg>
  );
}
```

### Vue

```vue
<!-- Gentleface "arrow-up-down" (line-round), MIT. https://gentleface.com/icons/arrow-up-down -->
<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="M4.146 1.146C4.244 1.049 4.362 1 4.5 1C4.638 1 4.756 1.049 4.854 1.146L7.854 4.146C7.953 4.246 8.003 4.364 8.003 4.5C8.003 4.636 7.953 4.754 7.854 4.854C7.754 4.953 7.636 5.003 7.5 5.003C7.364 5.003 7.246 4.953 7.146 4.854L5 2.707L5 10.5C5 10.641 4.952 10.759 4.856 10.856C4.759 10.952 4.641 11 4.5 11C4.359 11 4.241 10.952 4.144 10.856C4.048 10.759 4 10.641 4 10.5L4 2.707L1.854 4.854C1.756 4.951 1.638 5 1.5 5C1.362 5 1.244 4.951 1.146 4.854C1.049 4.756 1 4.638 1 4.5C1 4.362 1.049 4.244 1.146 4.146L4.146 1.146ZM13.146 11.146C13.246 11.047 13.364 10.997 13.5 10.997C13.636 10.997 13.754 11.047 13.854 11.146C13.953 11.246 14.003 11.364 14.003 11.5C14.003 11.636 13.953 11.754 13.854 11.854L10.854 14.854C10.754 14.953 10.636 15.003 10.5 15.003C10.364 15.003 10.246 14.953 10.146 14.854L7.146 11.854C7.047 11.754 6.997 11.636 6.997 11.5C6.997 11.364 7.047 11.246 7.146 11.146C7.244 11.049 7.362 11 7.5 11C7.638 11 7.756 11.049 7.854 11.146L10 13.293L10 5.5C10 5.359 10.048 5.241 10.144 5.144C10.241 5.048 10.359 5 10.5 5C10.641 5 10.759 5.048 10.856 5.144C10.952 5.241 11 5.359 11 5.5L11 13.293L13.146 11.146Z" />
  </svg>
</template>
```

### Svelte

```svelte
<!-- Gentleface "arrow-up-down" (line-round), MIT. https://gentleface.com/icons/arrow-up-down -->
<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="M4.146 1.146C4.244 1.049 4.362 1 4.5 1C4.638 1 4.756 1.049 4.854 1.146L7.854 4.146C7.953 4.246 8.003 4.364 8.003 4.5C8.003 4.636 7.953 4.754 7.854 4.854C7.754 4.953 7.636 5.003 7.5 5.003C7.364 5.003 7.246 4.953 7.146 4.854L5 2.707L5 10.5C5 10.641 4.952 10.759 4.856 10.856C4.759 10.952 4.641 11 4.5 11C4.359 11 4.241 10.952 4.144 10.856C4.048 10.759 4 10.641 4 10.5L4 2.707L1.854 4.854C1.756 4.951 1.638 5 1.5 5C1.362 5 1.244 4.951 1.146 4.854C1.049 4.756 1 4.638 1 4.5C1 4.362 1.049 4.244 1.146 4.146L4.146 1.146ZM13.146 11.146C13.246 11.047 13.364 10.997 13.5 10.997C13.636 10.997 13.754 11.047 13.854 11.146C13.953 11.246 14.003 11.364 14.003 11.5C14.003 11.636 13.953 11.754 13.854 11.854L10.854 14.854C10.754 14.953 10.636 15.003 10.5 15.003C10.364 15.003 10.246 14.953 10.146 14.854L7.146 11.854C7.047 11.754 6.997 11.636 6.997 11.5C6.997 11.364 7.047 11.246 7.146 11.146C7.244 11.049 7.362 11 7.5 11C7.638 11 7.756 11.049 7.854 11.146L10 13.293L10 5.5C10 5.359 10.048 5.241 10.144 5.144C10.241 5.048 10.359 5 10.5 5C10.641 5 10.759 5.048 10.856 5.144C10.952 5.241 11 5.359 11 5.5L11 13.293L13.146 11.146Z" />
</svg>
```

### HTML img

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

### CSS

```css
/* Gentleface "arrow-up-down" (line-round), MIT. https://gentleface.com/icons/arrow-up-down. Takes the text color. */
.icon-arrow-up-down {
  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='M4.146 1.146C4.244 1.049 4.362 1 4.5 1C4.638 1 4.756 1.049 4.854 1.146L7.854 4.146C7.953 4.246 8.003 4.364 8.003 4.5C8.003 4.636 7.953 4.754 7.854 4.854C7.754 4.953 7.636 5.003 7.5 5.003C7.364 5.003 7.246 4.953 7.146 4.854L5 2.707L5 10.5C5 10.641 4.952 10.759 4.856 10.856C4.759 10.952 4.641 11 4.5 11C4.359 11 4.241 10.952 4.144 10.856C4.048 10.759 4 10.641 4 10.5L4 2.707L1.854 4.854C1.756 4.951 1.638 5 1.5 5C1.362 5 1.244 4.951 1.146 4.854C1.049 4.756 1 4.638 1 4.5C1 4.362 1.049 4.244 1.146 4.146L4.146 1.146ZM13.146 11.146C13.246 11.047 13.364 10.997 13.5 10.997C13.636 10.997 13.754 11.047 13.854 11.146C13.953 11.246 14.003 11.364 14.003 11.5C14.003 11.636 13.953 11.754 13.854 11.854L10.854 14.854C10.754 14.953 10.636 15.003 10.5 15.003C10.364 15.003 10.246 14.953 10.146 14.854L7.146 11.854C7.047 11.754 6.997 11.636 6.997 11.5C6.997 11.364 7.047 11.246 7.146 11.146C7.244 11.049 7.362 11 7.5 11C7.638 11 7.756 11.049 7.854 11.146L10 13.293L10 5.5C10 5.359 10.048 5.241 10.144 5.144C10.241 5.048 10.359 5 10.5 5C10.641 5 10.759 5.048 10.856 5.144C10.952 5.241 11 5.359 11 5.5L11 13.293L13.146 11.146Z'/%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='M4.146 1.146C4.244 1.049 4.362 1 4.5 1C4.638 1 4.756 1.049 4.854 1.146L7.854 4.146C7.953 4.246 8.003 4.364 8.003 4.5C8.003 4.636 7.953 4.754 7.854 4.854C7.754 4.953 7.636 5.003 7.5 5.003C7.364 5.003 7.246 4.953 7.146 4.854L5 2.707L5 10.5C5 10.641 4.952 10.759 4.856 10.856C4.759 10.952 4.641 11 4.5 11C4.359 11 4.241 10.952 4.144 10.856C4.048 10.759 4 10.641 4 10.5L4 2.707L1.854 4.854C1.756 4.951 1.638 5 1.5 5C1.362 5 1.244 4.951 1.146 4.854C1.049 4.756 1 4.638 1 4.5C1 4.362 1.049 4.244 1.146 4.146L4.146 1.146ZM13.146 11.146C13.246 11.047 13.364 10.997 13.5 10.997C13.636 10.997 13.754 11.047 13.854 11.146C13.953 11.246 14.003 11.364 14.003 11.5C14.003 11.636 13.953 11.754 13.854 11.854L10.854 14.854C10.754 14.953 10.636 15.003 10.5 15.003C10.364 15.003 10.246 14.953 10.146 14.854L7.146 11.854C7.047 11.754 6.997 11.636 6.997 11.5C6.997 11.364 7.047 11.246 7.146 11.146C7.244 11.049 7.362 11 7.5 11C7.638 11 7.756 11.049 7.854 11.146L10 13.293L10 5.5C10 5.359 10.048 5.241 10.144 5.144C10.241 5.048 10.359 5 10.5 5C10.641 5 10.759 5.048 10.856 5.144C10.952 5.241 11 5.359 11 5.5L11 13.293L13.146 11.146Z'/%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='M4.146 1.146C4.244 1.049 4.362 1 4.5 1C4.638 1 4.756 1.049 4.854 1.146L7.854 4.146C7.953 4.246 8.003 4.364 8.003 4.5C8.003 4.636 7.953 4.754 7.854 4.854C7.754 4.953 7.636 5.003 7.5 5.003C7.364 5.003 7.246 4.953 7.146 4.854L5 2.707L5 10.5C5 10.641 4.952 10.759 4.856 10.856C4.759 10.952 4.641 11 4.5 11C4.359 11 4.241 10.952 4.144 10.856C4.048 10.759 4 10.641 4 10.5L4 2.707L1.854 4.854C1.756 4.951 1.638 5 1.5 5C1.362 5 1.244 4.951 1.146 4.854C1.049 4.756 1 4.638 1 4.5C1 4.362 1.049 4.244 1.146 4.146L4.146 1.146ZM13.146 11.146C13.246 11.047 13.364 10.997 13.5 10.997C13.636 10.997 13.754 11.047 13.854 11.146C13.953 11.246 14.003 11.364 14.003 11.5C14.003 11.636 13.953 11.754 13.854 11.854L10.854 14.854C10.754 14.953 10.636 15.003 10.5 15.003C10.364 15.003 10.246 14.953 10.146 14.854L7.146 11.854C7.047 11.754 6.997 11.636 6.997 11.5C6.997 11.364 7.047 11.246 7.146 11.146C7.244 11.049 7.362 11 7.5 11C7.638 11 7.756 11.049 7.854 11.146L10 13.293L10 5.5C10 5.359 10.048 5.241 10.144 5.144C10.241 5.048 10.359 5 10.5 5C10.641 5 10.759 5.048 10.856 5.144C10.952 5.241 11 5.359 11 5.5L11 13.293L13.146 11.146Z'/%3E%3C/svg%3E
```

### Sprite

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

### SwiftUI

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

struct ArrowUpDownIcon: Shape {
    func path(in rect: CGRect) -> Path {
        var p = Path()
        p.move(to: CGPoint(x: 4.146, y: 1.146))
        p.addCurve(to: CGPoint(x: 4.5, y: 1), control1: CGPoint(x: 4.244, y: 1.049), control2: CGPoint(x: 4.362, y: 1))
        p.addCurve(to: CGPoint(x: 4.854, y: 1.146), control1: CGPoint(x: 4.638, y: 1), control2: CGPoint(x: 4.756, y: 1.049))
        p.addLine(to: CGPoint(x: 7.854, y: 4.146))
        p.addCurve(to: CGPoint(x: 8.003, y: 4.5), control1: CGPoint(x: 7.953, y: 4.246), control2: CGPoint(x: 8.003, y: 4.364))
        p.addCurve(to: CGPoint(x: 7.854, y: 4.854), control1: CGPoint(x: 8.003, y: 4.636), control2: CGPoint(x: 7.953, y: 4.754))
        p.addCurve(to: CGPoint(x: 7.5, y: 5.003), control1: CGPoint(x: 7.754, y: 4.953), control2: CGPoint(x: 7.636, y: 5.003))
        p.addCurve(to: CGPoint(x: 7.146, y: 4.854), control1: CGPoint(x: 7.364, y: 5.003), control2: CGPoint(x: 7.246, y: 4.953))
        p.addLine(to: CGPoint(x: 5, y: 2.707))
        p.addLine(to: CGPoint(x: 5, y: 10.5))
        p.addCurve(to: CGPoint(x: 4.856, y: 10.856), control1: CGPoint(x: 5, y: 10.641), control2: CGPoint(x: 4.952, y: 10.759))
        p.addCurve(to: CGPoint(x: 4.5, y: 11), control1: CGPoint(x: 4.759, y: 10.952), control2: CGPoint(x: 4.641, y: 11))
        p.addCurve(to: CGPoint(x: 4.144, y: 10.856), control1: CGPoint(x: 4.359, y: 11), control2: CGPoint(x: 4.241, y: 10.952))
        p.addCurve(to: CGPoint(x: 4, y: 10.5), control1: CGPoint(x: 4.048, y: 10.759), control2: CGPoint(x: 4, y: 10.641))
        p.addLine(to: CGPoint(x: 4, y: 2.707))
        p.addLine(to: CGPoint(x: 1.854, y: 4.854))
        p.addCurve(to: CGPoint(x: 1.5, y: 5), control1: CGPoint(x: 1.756, y: 4.951), control2: CGPoint(x: 1.638, y: 5))
        p.addCurve(to: CGPoint(x: 1.146, y: 4.854), control1: CGPoint(x: 1.362, y: 5), control2: CGPoint(x: 1.244, y: 4.951))
        p.addCurve(to: CGPoint(x: 1, y: 4.5), control1: CGPoint(x: 1.049, y: 4.756), control2: CGPoint(x: 1, y: 4.638))
        p.addCurve(to: CGPoint(x: 1.146, y: 4.146), control1: CGPoint(x: 1, y: 4.362), control2: CGPoint(x: 1.049, y: 4.244))
        p.addLine(to: CGPoint(x: 4.146, y: 1.146))
        p.closeSubpath()
        p.move(to: CGPoint(x: 13.146, y: 11.146))
        p.addCurve(to: CGPoint(x: 13.5, y: 10.997), control1: CGPoint(x: 13.246, y: 11.047), control2: CGPoint(x: 13.364, y: 10.997))
        p.addCurve(to: CGPoint(x: 13.854, y: 11.146), control1: CGPoint(x: 13.636, y: 10.997), control2: CGPoint(x: 13.754, y: 11.047))
        p.addCurve(to: CGPoint(x: 14.003, y: 11.5), control1: CGPoint(x: 13.953, y: 11.246), control2: CGPoint(x: 14.003, y: 11.364))
        p.addCurve(to: CGPoint(x: 13.854, y: 11.854), control1: CGPoint(x: 14.003, y: 11.636), control2: CGPoint(x: 13.953, y: 11.754))
        p.addLine(to: CGPoint(x: 10.854, y: 14.854))
        p.addCurve(to: CGPoint(x: 10.5, y: 15.003), control1: CGPoint(x: 10.754, y: 14.953), control2: CGPoint(x: 10.636, y: 15.003))
        p.addCurve(to: CGPoint(x: 10.146, y: 14.854), control1: CGPoint(x: 10.364, y: 15.003), control2: CGPoint(x: 10.246, y: 14.953))
        p.addLine(to: CGPoint(x: 7.146, y: 11.854))
        p.addCurve(to: CGPoint(x: 6.997, y: 11.5), control1: CGPoint(x: 7.047, y: 11.754), control2: CGPoint(x: 6.997, y: 11.636))
        p.addCurve(to: CGPoint(x: 7.146, y: 11.146), control1: CGPoint(x: 6.997, y: 11.364), control2: CGPoint(x: 7.047, y: 11.246))
        p.addCurve(to: CGPoint(x: 7.5, y: 11), control1: CGPoint(x: 7.244, y: 11.049), control2: CGPoint(x: 7.362, y: 11))
        p.addCurve(to: CGPoint(x: 7.854, y: 11.146), control1: CGPoint(x: 7.638, y: 11), control2: CGPoint(x: 7.756, y: 11.049))
        p.addLine(to: CGPoint(x: 10, y: 13.293))
        p.addLine(to: CGPoint(x: 10, y: 5.5))
        p.addCurve(to: CGPoint(x: 10.144, y: 5.144), control1: CGPoint(x: 10, y: 5.359), control2: CGPoint(x: 10.048, y: 5.241))
        p.addCurve(to: CGPoint(x: 10.5, y: 5), control1: CGPoint(x: 10.241, y: 5.048), control2: CGPoint(x: 10.359, y: 5))
        p.addCurve(to: CGPoint(x: 10.856, y: 5.144), control1: CGPoint(x: 10.641, y: 5), control2: CGPoint(x: 10.759, y: 5.048))
        p.addCurve(to: CGPoint(x: 11, y: 5.5), control1: CGPoint(x: 10.952, y: 5.241), control2: CGPoint(x: 11, y: 5.359))
        p.addLine(to: CGPoint(x: 11, y: 13.293))
        p.addLine(to: CGPoint(x: 13.146, y: 11.146))
        p.closeSubpath()
        return p.applying(CGAffineTransform(scaleX: rect.width / 16, y: rect.height / 16))
    }
}

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

### Compose

```kotlin
// Gentleface "arrow-up-down" (line-round), MIT. https://gentleface.com/icons/arrow-up-down
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 ArrowUpDownIcon: ImageVector by lazy {
    ImageVector.Builder(
        name = "arrow-up-down", defaultWidth = 16.dp, defaultHeight = 16.dp,
        viewportWidth = 16f, viewportHeight = 16f,
    ).addPath(
        pathData = addPathNodes("M4.146 1.146C4.244 1.049 4.362 1 4.5 1C4.638 1 4.756 1.049 4.854 1.146L7.854 4.146C7.953 4.246 8.003 4.364 8.003 4.5C8.003 4.636 7.953 4.754 7.854 4.854C7.754 4.953 7.636 5.003 7.5 5.003C7.364 5.003 7.246 4.953 7.146 4.854L5 2.707L5 10.5C5 10.641 4.952 10.759 4.856 10.856C4.759 10.952 4.641 11 4.5 11C4.359 11 4.241 10.952 4.144 10.856C4.048 10.759 4 10.641 4 10.5L4 2.707L1.854 4.854C1.756 4.951 1.638 5 1.5 5C1.362 5 1.244 4.951 1.146 4.854C1.049 4.756 1 4.638 1 4.5C1 4.362 1.049 4.244 1.146 4.146L4.146 1.146ZM13.146 11.146C13.246 11.047 13.364 10.997 13.5 10.997C13.636 10.997 13.754 11.047 13.854 11.146C13.953 11.246 14.003 11.364 14.003 11.5C14.003 11.636 13.953 11.754 13.854 11.854L10.854 14.854C10.754 14.953 10.636 15.003 10.5 15.003C10.364 15.003 10.246 14.953 10.146 14.854L7.146 11.854C7.047 11.754 6.997 11.636 6.997 11.5C6.997 11.364 7.047 11.246 7.146 11.146C7.244 11.049 7.362 11 7.5 11C7.638 11 7.756 11.049 7.854 11.146L10 13.293L10 5.5C10 5.359 10.048 5.241 10.144 5.144C10.241 5.048 10.359 5 10.5 5C10.641 5 10.759 5.048 10.856 5.144C10.952 5.241 11 5.359 11 5.5L11 13.293L13.146 11.146Z"),
        fill = SolidColor(Color.Black),
    ).build()
}

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

### Android XML

```xml
<!-- res/drawable/ic_arrow_up_down.xml · Gentleface "arrow-up-down" (line-round), MIT. https://gentleface.com/icons/arrow-up-down -->
<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="M4.146 1.146C4.244 1.049 4.362 1 4.5 1C4.638 1 4.756 1.049 4.854 1.146L7.854 4.146C7.953 4.246 8.003 4.364 8.003 4.5C8.003 4.636 7.953 4.754 7.854 4.854C7.754 4.953 7.636 5.003 7.5 5.003C7.364 5.003 7.246 4.953 7.146 4.854L5 2.707L5 10.5C5 10.641 4.952 10.759 4.856 10.856C4.759 10.952 4.641 11 4.5 11C4.359 11 4.241 10.952 4.144 10.856C4.048 10.759 4 10.641 4 10.5L4 2.707L1.854 4.854C1.756 4.951 1.638 5 1.5 5C1.362 5 1.244 4.951 1.146 4.854C1.049 4.756 1 4.638 1 4.5C1 4.362 1.049 4.244 1.146 4.146L4.146 1.146ZM13.146 11.146C13.246 11.047 13.364 10.997 13.5 10.997C13.636 10.997 13.754 11.047 13.854 11.146C13.953 11.246 14.003 11.364 14.003 11.5C14.003 11.636 13.953 11.754 13.854 11.854L10.854 14.854C10.754 14.953 10.636 15.003 10.5 15.003C10.364 15.003 10.246 14.953 10.146 14.854L7.146 11.854C7.047 11.754 6.997 11.636 6.997 11.5C6.997 11.364 7.047 11.246 7.146 11.146C7.244 11.049 7.362 11 7.5 11C7.638 11 7.756 11.049 7.854 11.146L10 13.293L10 5.5C10 5.359 10.048 5.241 10.144 5.144C10.241 5.048 10.359 5 10.5 5C10.641 5 10.759 5.048 10.856 5.144C10.952 5.241 11 5.359 11 5.5L11 13.293L13.146 11.146Z"/>
</vector>
```

### Flutter

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

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

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

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

  @override
  void paint(Canvas canvas, Size size) {
    canvas.scale(size.width / 16, size.height / 16);
    final p = Path()
      ..moveTo(4.146, 1.146)
      ..cubicTo(4.244, 1.049, 4.362, 1, 4.5, 1)
      ..cubicTo(4.638, 1, 4.756, 1.049, 4.854, 1.146)
      ..lineTo(7.854, 4.146)
      ..cubicTo(7.953, 4.246, 8.003, 4.364, 8.003, 4.5)
      ..cubicTo(8.003, 4.636, 7.953, 4.754, 7.854, 4.854)
      ..cubicTo(7.754, 4.953, 7.636, 5.003, 7.5, 5.003)
      ..cubicTo(7.364, 5.003, 7.246, 4.953, 7.146, 4.854)
      ..lineTo(5, 2.707)
      ..lineTo(5, 10.5)
      ..cubicTo(5, 10.641, 4.952, 10.759, 4.856, 10.856)
      ..cubicTo(4.759, 10.952, 4.641, 11, 4.5, 11)
      ..cubicTo(4.359, 11, 4.241, 10.952, 4.144, 10.856)
      ..cubicTo(4.048, 10.759, 4, 10.641, 4, 10.5)
      ..lineTo(4, 2.707)
      ..lineTo(1.854, 4.854)
      ..cubicTo(1.756, 4.951, 1.638, 5, 1.5, 5)
      ..cubicTo(1.362, 5, 1.244, 4.951, 1.146, 4.854)
      ..cubicTo(1.049, 4.756, 1, 4.638, 1, 4.5)
      ..cubicTo(1, 4.362, 1.049, 4.244, 1.146, 4.146)
      ..lineTo(4.146, 1.146)
      ..close()
      ..moveTo(13.146, 11.146)
      ..cubicTo(13.246, 11.047, 13.364, 10.997, 13.5, 10.997)
      ..cubicTo(13.636, 10.997, 13.754, 11.047, 13.854, 11.146)
      ..cubicTo(13.953, 11.246, 14.003, 11.364, 14.003, 11.5)
      ..cubicTo(14.003, 11.636, 13.953, 11.754, 13.854, 11.854)
      ..lineTo(10.854, 14.854)
      ..cubicTo(10.754, 14.953, 10.636, 15.003, 10.5, 15.003)
      ..cubicTo(10.364, 15.003, 10.246, 14.953, 10.146, 14.854)
      ..lineTo(7.146, 11.854)
      ..cubicTo(7.047, 11.754, 6.997, 11.636, 6.997, 11.5)
      ..cubicTo(6.997, 11.364, 7.047, 11.246, 7.146, 11.146)
      ..cubicTo(7.244, 11.049, 7.362, 11, 7.5, 11)
      ..cubicTo(7.638, 11, 7.756, 11.049, 7.854, 11.146)
      ..lineTo(10, 13.293)
      ..lineTo(10, 5.5)
      ..cubicTo(10, 5.359, 10.048, 5.241, 10.144, 5.144)
      ..cubicTo(10.241, 5.048, 10.359, 5, 10.5, 5)
      ..cubicTo(10.641, 5, 10.759, 5.048, 10.856, 5.144)
      ..cubicTo(10.952, 5.241, 11, 5.359, 11, 5.5)
      ..lineTo(11, 13.293)
      ..lineTo(13.146, 11.146)
      ..close();
    canvas.drawPath(p, Paint()..color = color);
  }

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