# pipe icon

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

- Category: Tools
- Use it for: plumbing, water pipe, pipework
- Tags: pipe, plumbing, water pipe, pipework, elbow, flange, plumber, utility, home-services
- Component name: PipeIcon
- Added: 2026-11-12

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

The SVG of every style: https://gentleface.com/icons/pipe.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="M7 8L7 11L7.5 11C7.641 11 7.759 11.048 7.856 11.144C7.952 11.241 8 11.359 8 11.5L8 13.5C8 13.641 7.952 13.759 7.856 13.856C7.759 13.952 7.641 14 7.5 14L1.5 14C1.359 14 1.241 13.952 1.144 13.856C1.048 13.759 1 13.641 1 13.5L1 11.5C1 11.359 1.048 11.241 1.144 11.144C1.241 11.048 1.359 11 1.5 11L2.268 11C2.219 10.916 2.177 10.828 2.14 10.736C2.047 10.5 2 10.254 2 10L2 7.5C2 6.928 2.105 6.376 2.316 5.844C2.545 5.266 2.879 4.757 3.318 4.318C3.757 3.879 4.266 3.545 4.844 3.316C5.376 3.105 5.928 3 6.5 3L10 3C10.254 3 10.5 3.047 10.736 3.14C10.828 3.177 10.916 3.219 11 3.268L11 2.5C11 2.359 11.048 2.241 11.144 2.144C11.241 2.048 11.359 2 11.5 2L13.5 2C13.641 2 13.759 2.048 13.856 2.144C13.952 2.241 14 2.359 14 2.5L14 8.5C14 8.641 13.952 8.759 13.856 8.856C13.759 8.952 13.641 9 13.5 9L11.5 9C11.359 9 11.241 8.952 11.144 8.856C11.048 8.759 11 8.641 11 8.5L11 8L7 8ZM13 3L12 3L12 8L13 8L13 3ZM6 8C6 7.724 6.098 7.488 6.293 7.293C6.488 7.098 6.724 7 7 7L11 7L11 5C11 4.724 10.902 4.488 10.707 4.293C10.512 4.098 10.276 4 10 4L6.5 4C6.055 4 5.625 4.082 5.212 4.246C4.762 4.424 4.367 4.683 4.025 5.025C3.683 5.367 3.424 5.762 3.246 6.212C3.082 6.625 3 7.055 3 7.5L3 10C3 10.276 3.098 10.512 3.293 10.707C3.488 10.902 3.724 11 4 11L6 11L6 8ZM2 13L7 13L7 12L2 12L2 13Z"/></svg>
```

### React

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

export function PipeIcon(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="M7 8L7 11L7.5 11C7.641 11 7.759 11.048 7.856 11.144C7.952 11.241 8 11.359 8 11.5L8 13.5C8 13.641 7.952 13.759 7.856 13.856C7.759 13.952 7.641 14 7.5 14L1.5 14C1.359 14 1.241 13.952 1.144 13.856C1.048 13.759 1 13.641 1 13.5L1 11.5C1 11.359 1.048 11.241 1.144 11.144C1.241 11.048 1.359 11 1.5 11L2.268 11C2.219 10.916 2.177 10.828 2.14 10.736C2.047 10.5 2 10.254 2 10L2 7.5C2 6.928 2.105 6.376 2.316 5.844C2.545 5.266 2.879 4.757 3.318 4.318C3.757 3.879 4.266 3.545 4.844 3.316C5.376 3.105 5.928 3 6.5 3L10 3C10.254 3 10.5 3.047 10.736 3.14C10.828 3.177 10.916 3.219 11 3.268L11 2.5C11 2.359 11.048 2.241 11.144 2.144C11.241 2.048 11.359 2 11.5 2L13.5 2C13.641 2 13.759 2.048 13.856 2.144C13.952 2.241 14 2.359 14 2.5L14 8.5C14 8.641 13.952 8.759 13.856 8.856C13.759 8.952 13.641 9 13.5 9L11.5 9C11.359 9 11.241 8.952 11.144 8.856C11.048 8.759 11 8.641 11 8.5L11 8L7 8ZM13 3L12 3L12 8L13 8L13 3ZM6 8C6 7.724 6.098 7.488 6.293 7.293C6.488 7.098 6.724 7 7 7L11 7L11 5C11 4.724 10.902 4.488 10.707 4.293C10.512 4.098 10.276 4 10 4L6.5 4C6.055 4 5.625 4.082 5.212 4.246C4.762 4.424 4.367 4.683 4.025 5.025C3.683 5.367 3.424 5.762 3.246 6.212C3.082 6.625 3 7.055 3 7.5L3 10C3 10.276 3.098 10.512 3.293 10.707C3.488 10.902 3.724 11 4 11L6 11L6 8ZM2 13L7 13L7 12L2 12L2 13Z" />
    </svg>
  );
}
```

### Vue

```vue
<!-- Gentleface "pipe" (line-round), MIT. https://gentleface.com/icons/pipe -->
<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="M7 8L7 11L7.5 11C7.641 11 7.759 11.048 7.856 11.144C7.952 11.241 8 11.359 8 11.5L8 13.5C8 13.641 7.952 13.759 7.856 13.856C7.759 13.952 7.641 14 7.5 14L1.5 14C1.359 14 1.241 13.952 1.144 13.856C1.048 13.759 1 13.641 1 13.5L1 11.5C1 11.359 1.048 11.241 1.144 11.144C1.241 11.048 1.359 11 1.5 11L2.268 11C2.219 10.916 2.177 10.828 2.14 10.736C2.047 10.5 2 10.254 2 10L2 7.5C2 6.928 2.105 6.376 2.316 5.844C2.545 5.266 2.879 4.757 3.318 4.318C3.757 3.879 4.266 3.545 4.844 3.316C5.376 3.105 5.928 3 6.5 3L10 3C10.254 3 10.5 3.047 10.736 3.14C10.828 3.177 10.916 3.219 11 3.268L11 2.5C11 2.359 11.048 2.241 11.144 2.144C11.241 2.048 11.359 2 11.5 2L13.5 2C13.641 2 13.759 2.048 13.856 2.144C13.952 2.241 14 2.359 14 2.5L14 8.5C14 8.641 13.952 8.759 13.856 8.856C13.759 8.952 13.641 9 13.5 9L11.5 9C11.359 9 11.241 8.952 11.144 8.856C11.048 8.759 11 8.641 11 8.5L11 8L7 8ZM13 3L12 3L12 8L13 8L13 3ZM6 8C6 7.724 6.098 7.488 6.293 7.293C6.488 7.098 6.724 7 7 7L11 7L11 5C11 4.724 10.902 4.488 10.707 4.293C10.512 4.098 10.276 4 10 4L6.5 4C6.055 4 5.625 4.082 5.212 4.246C4.762 4.424 4.367 4.683 4.025 5.025C3.683 5.367 3.424 5.762 3.246 6.212C3.082 6.625 3 7.055 3 7.5L3 10C3 10.276 3.098 10.512 3.293 10.707C3.488 10.902 3.724 11 4 11L6 11L6 8ZM2 13L7 13L7 12L2 12L2 13Z" />
  </svg>
</template>
```

### Svelte

```svelte
<!-- Gentleface "pipe" (line-round), MIT. https://gentleface.com/icons/pipe -->
<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="M7 8L7 11L7.5 11C7.641 11 7.759 11.048 7.856 11.144C7.952 11.241 8 11.359 8 11.5L8 13.5C8 13.641 7.952 13.759 7.856 13.856C7.759 13.952 7.641 14 7.5 14L1.5 14C1.359 14 1.241 13.952 1.144 13.856C1.048 13.759 1 13.641 1 13.5L1 11.5C1 11.359 1.048 11.241 1.144 11.144C1.241 11.048 1.359 11 1.5 11L2.268 11C2.219 10.916 2.177 10.828 2.14 10.736C2.047 10.5 2 10.254 2 10L2 7.5C2 6.928 2.105 6.376 2.316 5.844C2.545 5.266 2.879 4.757 3.318 4.318C3.757 3.879 4.266 3.545 4.844 3.316C5.376 3.105 5.928 3 6.5 3L10 3C10.254 3 10.5 3.047 10.736 3.14C10.828 3.177 10.916 3.219 11 3.268L11 2.5C11 2.359 11.048 2.241 11.144 2.144C11.241 2.048 11.359 2 11.5 2L13.5 2C13.641 2 13.759 2.048 13.856 2.144C13.952 2.241 14 2.359 14 2.5L14 8.5C14 8.641 13.952 8.759 13.856 8.856C13.759 8.952 13.641 9 13.5 9L11.5 9C11.359 9 11.241 8.952 11.144 8.856C11.048 8.759 11 8.641 11 8.5L11 8L7 8ZM13 3L12 3L12 8L13 8L13 3ZM6 8C6 7.724 6.098 7.488 6.293 7.293C6.488 7.098 6.724 7 7 7L11 7L11 5C11 4.724 10.902 4.488 10.707 4.293C10.512 4.098 10.276 4 10 4L6.5 4C6.055 4 5.625 4.082 5.212 4.246C4.762 4.424 4.367 4.683 4.025 5.025C3.683 5.367 3.424 5.762 3.246 6.212C3.082 6.625 3 7.055 3 7.5L3 10C3 10.276 3.098 10.512 3.293 10.707C3.488 10.902 3.724 11 4 11L6 11L6 8ZM2 13L7 13L7 12L2 12L2 13Z" />
</svg>
```

### HTML img

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

### CSS

```css
/* Gentleface "pipe" (line-round), MIT. https://gentleface.com/icons/pipe. Takes the text color. */
.icon-pipe {
  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='M7 8L7 11L7.5 11C7.641 11 7.759 11.048 7.856 11.144C7.952 11.241 8 11.359 8 11.5L8 13.5C8 13.641 7.952 13.759 7.856 13.856C7.759 13.952 7.641 14 7.5 14L1.5 14C1.359 14 1.241 13.952 1.144 13.856C1.048 13.759 1 13.641 1 13.5L1 11.5C1 11.359 1.048 11.241 1.144 11.144C1.241 11.048 1.359 11 1.5 11L2.268 11C2.219 10.916 2.177 10.828 2.14 10.736C2.047 10.5 2 10.254 2 10L2 7.5C2 6.928 2.105 6.376 2.316 5.844C2.545 5.266 2.879 4.757 3.318 4.318C3.757 3.879 4.266 3.545 4.844 3.316C5.376 3.105 5.928 3 6.5 3L10 3C10.254 3 10.5 3.047 10.736 3.14C10.828 3.177 10.916 3.219 11 3.268L11 2.5C11 2.359 11.048 2.241 11.144 2.144C11.241 2.048 11.359 2 11.5 2L13.5 2C13.641 2 13.759 2.048 13.856 2.144C13.952 2.241 14 2.359 14 2.5L14 8.5C14 8.641 13.952 8.759 13.856 8.856C13.759 8.952 13.641 9 13.5 9L11.5 9C11.359 9 11.241 8.952 11.144 8.856C11.048 8.759 11 8.641 11 8.5L11 8L7 8ZM13 3L12 3L12 8L13 8L13 3ZM6 8C6 7.724 6.098 7.488 6.293 7.293C6.488 7.098 6.724 7 7 7L11 7L11 5C11 4.724 10.902 4.488 10.707 4.293C10.512 4.098 10.276 4 10 4L6.5 4C6.055 4 5.625 4.082 5.212 4.246C4.762 4.424 4.367 4.683 4.025 5.025C3.683 5.367 3.424 5.762 3.246 6.212C3.082 6.625 3 7.055 3 7.5L3 10C3 10.276 3.098 10.512 3.293 10.707C3.488 10.902 3.724 11 4 11L6 11L6 8ZM2 13L7 13L7 12L2 12L2 13Z'/%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='M7 8L7 11L7.5 11C7.641 11 7.759 11.048 7.856 11.144C7.952 11.241 8 11.359 8 11.5L8 13.5C8 13.641 7.952 13.759 7.856 13.856C7.759 13.952 7.641 14 7.5 14L1.5 14C1.359 14 1.241 13.952 1.144 13.856C1.048 13.759 1 13.641 1 13.5L1 11.5C1 11.359 1.048 11.241 1.144 11.144C1.241 11.048 1.359 11 1.5 11L2.268 11C2.219 10.916 2.177 10.828 2.14 10.736C2.047 10.5 2 10.254 2 10L2 7.5C2 6.928 2.105 6.376 2.316 5.844C2.545 5.266 2.879 4.757 3.318 4.318C3.757 3.879 4.266 3.545 4.844 3.316C5.376 3.105 5.928 3 6.5 3L10 3C10.254 3 10.5 3.047 10.736 3.14C10.828 3.177 10.916 3.219 11 3.268L11 2.5C11 2.359 11.048 2.241 11.144 2.144C11.241 2.048 11.359 2 11.5 2L13.5 2C13.641 2 13.759 2.048 13.856 2.144C13.952 2.241 14 2.359 14 2.5L14 8.5C14 8.641 13.952 8.759 13.856 8.856C13.759 8.952 13.641 9 13.5 9L11.5 9C11.359 9 11.241 8.952 11.144 8.856C11.048 8.759 11 8.641 11 8.5L11 8L7 8ZM13 3L12 3L12 8L13 8L13 3ZM6 8C6 7.724 6.098 7.488 6.293 7.293C6.488 7.098 6.724 7 7 7L11 7L11 5C11 4.724 10.902 4.488 10.707 4.293C10.512 4.098 10.276 4 10 4L6.5 4C6.055 4 5.625 4.082 5.212 4.246C4.762 4.424 4.367 4.683 4.025 5.025C3.683 5.367 3.424 5.762 3.246 6.212C3.082 6.625 3 7.055 3 7.5L3 10C3 10.276 3.098 10.512 3.293 10.707C3.488 10.902 3.724 11 4 11L6 11L6 8ZM2 13L7 13L7 12L2 12L2 13Z'/%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='M7 8L7 11L7.5 11C7.641 11 7.759 11.048 7.856 11.144C7.952 11.241 8 11.359 8 11.5L8 13.5C8 13.641 7.952 13.759 7.856 13.856C7.759 13.952 7.641 14 7.5 14L1.5 14C1.359 14 1.241 13.952 1.144 13.856C1.048 13.759 1 13.641 1 13.5L1 11.5C1 11.359 1.048 11.241 1.144 11.144C1.241 11.048 1.359 11 1.5 11L2.268 11C2.219 10.916 2.177 10.828 2.14 10.736C2.047 10.5 2 10.254 2 10L2 7.5C2 6.928 2.105 6.376 2.316 5.844C2.545 5.266 2.879 4.757 3.318 4.318C3.757 3.879 4.266 3.545 4.844 3.316C5.376 3.105 5.928 3 6.5 3L10 3C10.254 3 10.5 3.047 10.736 3.14C10.828 3.177 10.916 3.219 11 3.268L11 2.5C11 2.359 11.048 2.241 11.144 2.144C11.241 2.048 11.359 2 11.5 2L13.5 2C13.641 2 13.759 2.048 13.856 2.144C13.952 2.241 14 2.359 14 2.5L14 8.5C14 8.641 13.952 8.759 13.856 8.856C13.759 8.952 13.641 9 13.5 9L11.5 9C11.359 9 11.241 8.952 11.144 8.856C11.048 8.759 11 8.641 11 8.5L11 8L7 8ZM13 3L12 3L12 8L13 8L13 3ZM6 8C6 7.724 6.098 7.488 6.293 7.293C6.488 7.098 6.724 7 7 7L11 7L11 5C11 4.724 10.902 4.488 10.707 4.293C10.512 4.098 10.276 4 10 4L6.5 4C6.055 4 5.625 4.082 5.212 4.246C4.762 4.424 4.367 4.683 4.025 5.025C3.683 5.367 3.424 5.762 3.246 6.212C3.082 6.625 3 7.055 3 7.5L3 10C3 10.276 3.098 10.512 3.293 10.707C3.488 10.902 3.724 11 4 11L6 11L6 8ZM2 13L7 13L7 12L2 12L2 13Z'/%3E%3C/svg%3E
```

### Sprite

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

### SwiftUI

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

struct PipeIcon: Shape {
    func path(in rect: CGRect) -> Path {
        var p = Path()
        p.move(to: CGPoint(x: 7, y: 8))
        p.addLine(to: CGPoint(x: 7, y: 11))
        p.addLine(to: CGPoint(x: 7.5, y: 11))
        p.addCurve(to: CGPoint(x: 7.856, y: 11.144), control1: CGPoint(x: 7.641, y: 11), control2: CGPoint(x: 7.759, y: 11.048))
        p.addCurve(to: CGPoint(x: 8, y: 11.5), control1: CGPoint(x: 7.952, y: 11.241), control2: CGPoint(x: 8, y: 11.359))
        p.addLine(to: CGPoint(x: 8, y: 13.5))
        p.addCurve(to: CGPoint(x: 7.856, y: 13.856), control1: CGPoint(x: 8, y: 13.641), control2: CGPoint(x: 7.952, y: 13.759))
        p.addCurve(to: CGPoint(x: 7.5, y: 14), control1: CGPoint(x: 7.759, y: 13.952), control2: CGPoint(x: 7.641, y: 14))
        p.addLine(to: CGPoint(x: 1.5, y: 14))
        p.addCurve(to: CGPoint(x: 1.144, y: 13.856), control1: CGPoint(x: 1.359, y: 14), control2: CGPoint(x: 1.241, y: 13.952))
        p.addCurve(to: CGPoint(x: 1, y: 13.5), control1: CGPoint(x: 1.048, y: 13.759), control2: CGPoint(x: 1, y: 13.641))
        p.addLine(to: CGPoint(x: 1, y: 11.5))
        p.addCurve(to: CGPoint(x: 1.144, y: 11.144), control1: CGPoint(x: 1, y: 11.359), control2: CGPoint(x: 1.048, y: 11.241))
        p.addCurve(to: CGPoint(x: 1.5, y: 11), control1: CGPoint(x: 1.241, y: 11.048), control2: CGPoint(x: 1.359, y: 11))
        p.addLine(to: CGPoint(x: 2.268, y: 11))
        p.addCurve(to: CGPoint(x: 2.14, y: 10.736), control1: CGPoint(x: 2.219, y: 10.916), control2: CGPoint(x: 2.177, y: 10.828))
        p.addCurve(to: CGPoint(x: 2, y: 10), control1: CGPoint(x: 2.047, y: 10.5), control2: CGPoint(x: 2, y: 10.254))
        p.addLine(to: CGPoint(x: 2, y: 7.5))
        p.addCurve(to: CGPoint(x: 2.316, y: 5.844), control1: CGPoint(x: 2, y: 6.928), control2: CGPoint(x: 2.105, y: 6.376))
        p.addCurve(to: CGPoint(x: 3.318, y: 4.318), control1: CGPoint(x: 2.545, y: 5.266), control2: CGPoint(x: 2.879, y: 4.757))
        p.addCurve(to: CGPoint(x: 4.844, y: 3.316), control1: CGPoint(x: 3.757, y: 3.879), control2: CGPoint(x: 4.266, y: 3.545))
        p.addCurve(to: CGPoint(x: 6.5, y: 3), control1: CGPoint(x: 5.376, y: 3.105), control2: CGPoint(x: 5.928, y: 3))
        p.addLine(to: CGPoint(x: 10, y: 3))
        p.addCurve(to: CGPoint(x: 10.736, y: 3.14), control1: CGPoint(x: 10.254, y: 3), control2: CGPoint(x: 10.5, y: 3.047))
        p.addCurve(to: CGPoint(x: 11, y: 3.268), control1: CGPoint(x: 10.828, y: 3.177), control2: CGPoint(x: 10.916, y: 3.219))
        p.addLine(to: CGPoint(x: 11, y: 2.5))
        p.addCurve(to: CGPoint(x: 11.144, y: 2.144), control1: CGPoint(x: 11, y: 2.359), control2: CGPoint(x: 11.048, y: 2.241))
        p.addCurve(to: CGPoint(x: 11.5, y: 2), control1: CGPoint(x: 11.241, y: 2.048), control2: CGPoint(x: 11.359, y: 2))
        p.addLine(to: CGPoint(x: 13.5, y: 2))
        p.addCurve(to: CGPoint(x: 13.856, y: 2.144), control1: CGPoint(x: 13.641, y: 2), control2: CGPoint(x: 13.759, y: 2.048))
        p.addCurve(to: CGPoint(x: 14, y: 2.5), control1: CGPoint(x: 13.952, y: 2.241), control2: CGPoint(x: 14, y: 2.359))
        p.addLine(to: CGPoint(x: 14, y: 8.5))
        p.addCurve(to: CGPoint(x: 13.856, y: 8.856), control1: CGPoint(x: 14, y: 8.641), control2: CGPoint(x: 13.952, y: 8.759))
        p.addCurve(to: CGPoint(x: 13.5, y: 9), control1: CGPoint(x: 13.759, y: 8.952), control2: CGPoint(x: 13.641, y: 9))
        p.addLine(to: CGPoint(x: 11.5, y: 9))
        p.addCurve(to: CGPoint(x: 11.144, y: 8.856), control1: CGPoint(x: 11.359, y: 9), control2: CGPoint(x: 11.241, y: 8.952))
        p.addCurve(to: CGPoint(x: 11, y: 8.5), control1: CGPoint(x: 11.048, y: 8.759), control2: CGPoint(x: 11, y: 8.641))
        p.addLine(to: CGPoint(x: 11, y: 8))
        p.addLine(to: CGPoint(x: 7, y: 8))
        p.closeSubpath()
        p.move(to: CGPoint(x: 13, y: 3))
        p.addLine(to: CGPoint(x: 12, y: 3))
        p.addLine(to: CGPoint(x: 12, y: 8))
        p.addLine(to: CGPoint(x: 13, y: 8))
        p.addLine(to: CGPoint(x: 13, y: 3))
        p.closeSubpath()
        p.move(to: CGPoint(x: 6, y: 8))
        p.addCurve(to: CGPoint(x: 6.293, y: 7.293), control1: CGPoint(x: 6, y: 7.724), control2: CGPoint(x: 6.098, y: 7.488))
        p.addCurve(to: CGPoint(x: 7, y: 7), control1: CGPoint(x: 6.488, y: 7.098), control2: CGPoint(x: 6.724, y: 7))
        p.addLine(to: CGPoint(x: 11, y: 7))
        p.addLine(to: CGPoint(x: 11, y: 5))
        p.addCurve(to: CGPoint(x: 10.707, y: 4.293), control1: CGPoint(x: 11, y: 4.724), control2: CGPoint(x: 10.902, y: 4.488))
        p.addCurve(to: CGPoint(x: 10, y: 4), control1: CGPoint(x: 10.512, y: 4.098), control2: CGPoint(x: 10.276, y: 4))
        p.addLine(to: CGPoint(x: 6.5, y: 4))
        p.addCurve(to: CGPoint(x: 5.212, y: 4.246), control1: CGPoint(x: 6.055, y: 4), control2: CGPoint(x: 5.625, y: 4.082))
        p.addCurve(to: CGPoint(x: 4.025, y: 5.025), control1: CGPoint(x: 4.762, y: 4.424), control2: CGPoint(x: 4.367, y: 4.683))
        p.addCurve(to: CGPoint(x: 3.246, y: 6.212), control1: CGPoint(x: 3.683, y: 5.367), control2: CGPoint(x: 3.424, y: 5.762))
        p.addCurve(to: CGPoint(x: 3, y: 7.5), control1: CGPoint(x: 3.082, y: 6.625), control2: CGPoint(x: 3, y: 7.055))
        p.addLine(to: CGPoint(x: 3, y: 10))
        p.addCurve(to: CGPoint(x: 3.293, y: 10.707), control1: CGPoint(x: 3, y: 10.276), control2: CGPoint(x: 3.098, y: 10.512))
        p.addCurve(to: CGPoint(x: 4, y: 11), control1: CGPoint(x: 3.488, y: 10.902), control2: CGPoint(x: 3.724, y: 11))
        p.addLine(to: CGPoint(x: 6, y: 11))
        p.addLine(to: CGPoint(x: 6, y: 8))
        p.closeSubpath()
        p.move(to: CGPoint(x: 2, y: 13))
        p.addLine(to: CGPoint(x: 7, y: 13))
        p.addLine(to: CGPoint(x: 7, y: 12))
        p.addLine(to: CGPoint(x: 2, y: 12))
        p.addLine(to: CGPoint(x: 2, y: 13))
        p.closeSubpath()
        return p.applying(CGAffineTransform(scaleX: rect.width / 16, y: rect.height / 16))
    }
}

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

### Compose

```kotlin
// Gentleface "pipe" (line-round), MIT. https://gentleface.com/icons/pipe
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 PipeIcon: ImageVector by lazy {
    ImageVector.Builder(
        name = "pipe", defaultWidth = 16.dp, defaultHeight = 16.dp,
        viewportWidth = 16f, viewportHeight = 16f,
    ).addPath(
        pathData = addPathNodes("M7 8L7 11L7.5 11C7.641 11 7.759 11.048 7.856 11.144C7.952 11.241 8 11.359 8 11.5L8 13.5C8 13.641 7.952 13.759 7.856 13.856C7.759 13.952 7.641 14 7.5 14L1.5 14C1.359 14 1.241 13.952 1.144 13.856C1.048 13.759 1 13.641 1 13.5L1 11.5C1 11.359 1.048 11.241 1.144 11.144C1.241 11.048 1.359 11 1.5 11L2.268 11C2.219 10.916 2.177 10.828 2.14 10.736C2.047 10.5 2 10.254 2 10L2 7.5C2 6.928 2.105 6.376 2.316 5.844C2.545 5.266 2.879 4.757 3.318 4.318C3.757 3.879 4.266 3.545 4.844 3.316C5.376 3.105 5.928 3 6.5 3L10 3C10.254 3 10.5 3.047 10.736 3.14C10.828 3.177 10.916 3.219 11 3.268L11 2.5C11 2.359 11.048 2.241 11.144 2.144C11.241 2.048 11.359 2 11.5 2L13.5 2C13.641 2 13.759 2.048 13.856 2.144C13.952 2.241 14 2.359 14 2.5L14 8.5C14 8.641 13.952 8.759 13.856 8.856C13.759 8.952 13.641 9 13.5 9L11.5 9C11.359 9 11.241 8.952 11.144 8.856C11.048 8.759 11 8.641 11 8.5L11 8L7 8ZM13 3L12 3L12 8L13 8L13 3ZM6 8C6 7.724 6.098 7.488 6.293 7.293C6.488 7.098 6.724 7 7 7L11 7L11 5C11 4.724 10.902 4.488 10.707 4.293C10.512 4.098 10.276 4 10 4L6.5 4C6.055 4 5.625 4.082 5.212 4.246C4.762 4.424 4.367 4.683 4.025 5.025C3.683 5.367 3.424 5.762 3.246 6.212C3.082 6.625 3 7.055 3 7.5L3 10C3 10.276 3.098 10.512 3.293 10.707C3.488 10.902 3.724 11 4 11L6 11L6 8ZM2 13L7 13L7 12L2 12L2 13Z"),
        fill = SolidColor(Color.Black),
    ).build()
}

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

### Android XML

```xml
<!-- res/drawable/ic_pipe.xml · Gentleface "pipe" (line-round), MIT. https://gentleface.com/icons/pipe -->
<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="M7 8L7 11L7.5 11C7.641 11 7.759 11.048 7.856 11.144C7.952 11.241 8 11.359 8 11.5L8 13.5C8 13.641 7.952 13.759 7.856 13.856C7.759 13.952 7.641 14 7.5 14L1.5 14C1.359 14 1.241 13.952 1.144 13.856C1.048 13.759 1 13.641 1 13.5L1 11.5C1 11.359 1.048 11.241 1.144 11.144C1.241 11.048 1.359 11 1.5 11L2.268 11C2.219 10.916 2.177 10.828 2.14 10.736C2.047 10.5 2 10.254 2 10L2 7.5C2 6.928 2.105 6.376 2.316 5.844C2.545 5.266 2.879 4.757 3.318 4.318C3.757 3.879 4.266 3.545 4.844 3.316C5.376 3.105 5.928 3 6.5 3L10 3C10.254 3 10.5 3.047 10.736 3.14C10.828 3.177 10.916 3.219 11 3.268L11 2.5C11 2.359 11.048 2.241 11.144 2.144C11.241 2.048 11.359 2 11.5 2L13.5 2C13.641 2 13.759 2.048 13.856 2.144C13.952 2.241 14 2.359 14 2.5L14 8.5C14 8.641 13.952 8.759 13.856 8.856C13.759 8.952 13.641 9 13.5 9L11.5 9C11.359 9 11.241 8.952 11.144 8.856C11.048 8.759 11 8.641 11 8.5L11 8L7 8ZM13 3L12 3L12 8L13 8L13 3ZM6 8C6 7.724 6.098 7.488 6.293 7.293C6.488 7.098 6.724 7 7 7L11 7L11 5C11 4.724 10.902 4.488 10.707 4.293C10.512 4.098 10.276 4 10 4L6.5 4C6.055 4 5.625 4.082 5.212 4.246C4.762 4.424 4.367 4.683 4.025 5.025C3.683 5.367 3.424 5.762 3.246 6.212C3.082 6.625 3 7.055 3 7.5L3 10C3 10.276 3.098 10.512 3.293 10.707C3.488 10.902 3.724 11 4 11L6 11L6 8ZM2 13L7 13L7 12L2 12L2 13Z"/>
</vector>
```

### Flutter

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

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

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

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

  @override
  void paint(Canvas canvas, Size size) {
    canvas.scale(size.width / 16, size.height / 16);
    final p = Path()
      ..moveTo(7, 8)
      ..lineTo(7, 11)
      ..lineTo(7.5, 11)
      ..cubicTo(7.641, 11, 7.759, 11.048, 7.856, 11.144)
      ..cubicTo(7.952, 11.241, 8, 11.359, 8, 11.5)
      ..lineTo(8, 13.5)
      ..cubicTo(8, 13.641, 7.952, 13.759, 7.856, 13.856)
      ..cubicTo(7.759, 13.952, 7.641, 14, 7.5, 14)
      ..lineTo(1.5, 14)
      ..cubicTo(1.359, 14, 1.241, 13.952, 1.144, 13.856)
      ..cubicTo(1.048, 13.759, 1, 13.641, 1, 13.5)
      ..lineTo(1, 11.5)
      ..cubicTo(1, 11.359, 1.048, 11.241, 1.144, 11.144)
      ..cubicTo(1.241, 11.048, 1.359, 11, 1.5, 11)
      ..lineTo(2.268, 11)
      ..cubicTo(2.219, 10.916, 2.177, 10.828, 2.14, 10.736)
      ..cubicTo(2.047, 10.5, 2, 10.254, 2, 10)
      ..lineTo(2, 7.5)
      ..cubicTo(2, 6.928, 2.105, 6.376, 2.316, 5.844)
      ..cubicTo(2.545, 5.266, 2.879, 4.757, 3.318, 4.318)
      ..cubicTo(3.757, 3.879, 4.266, 3.545, 4.844, 3.316)
      ..cubicTo(5.376, 3.105, 5.928, 3, 6.5, 3)
      ..lineTo(10, 3)
      ..cubicTo(10.254, 3, 10.5, 3.047, 10.736, 3.14)
      ..cubicTo(10.828, 3.177, 10.916, 3.219, 11, 3.268)
      ..lineTo(11, 2.5)
      ..cubicTo(11, 2.359, 11.048, 2.241, 11.144, 2.144)
      ..cubicTo(11.241, 2.048, 11.359, 2, 11.5, 2)
      ..lineTo(13.5, 2)
      ..cubicTo(13.641, 2, 13.759, 2.048, 13.856, 2.144)
      ..cubicTo(13.952, 2.241, 14, 2.359, 14, 2.5)
      ..lineTo(14, 8.5)
      ..cubicTo(14, 8.641, 13.952, 8.759, 13.856, 8.856)
      ..cubicTo(13.759, 8.952, 13.641, 9, 13.5, 9)
      ..lineTo(11.5, 9)
      ..cubicTo(11.359, 9, 11.241, 8.952, 11.144, 8.856)
      ..cubicTo(11.048, 8.759, 11, 8.641, 11, 8.5)
      ..lineTo(11, 8)
      ..lineTo(7, 8)
      ..close()
      ..moveTo(13, 3)
      ..lineTo(12, 3)
      ..lineTo(12, 8)
      ..lineTo(13, 8)
      ..lineTo(13, 3)
      ..close()
      ..moveTo(6, 8)
      ..cubicTo(6, 7.724, 6.098, 7.488, 6.293, 7.293)
      ..cubicTo(6.488, 7.098, 6.724, 7, 7, 7)
      ..lineTo(11, 7)
      ..lineTo(11, 5)
      ..cubicTo(11, 4.724, 10.902, 4.488, 10.707, 4.293)
      ..cubicTo(10.512, 4.098, 10.276, 4, 10, 4)
      ..lineTo(6.5, 4)
      ..cubicTo(6.055, 4, 5.625, 4.082, 5.212, 4.246)
      ..cubicTo(4.762, 4.424, 4.367, 4.683, 4.025, 5.025)
      ..cubicTo(3.683, 5.367, 3.424, 5.762, 3.246, 6.212)
      ..cubicTo(3.082, 6.625, 3, 7.055, 3, 7.5)
      ..lineTo(3, 10)
      ..cubicTo(3, 10.276, 3.098, 10.512, 3.293, 10.707)
      ..cubicTo(3.488, 10.902, 3.724, 11, 4, 11)
      ..lineTo(6, 11)
      ..lineTo(6, 8)
      ..close()
      ..moveTo(2, 13)
      ..lineTo(7, 13)
      ..lineTo(7, 12)
      ..lineTo(2, 12)
      ..lineTo(2, 13)
      ..close();
    canvas.drawPath(p, Paint()..color = color);
  }

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