# Penrose [![CircleCI](https://circleci.com/gh/penrose/penrose/tree/master.svg?style=svg)](https://circleci.com/gh/penrose/penrose/tree/master)
**Penrose is an early-stage system that is still in development.** Our system is not ready for contributions or public use yet, but hopefully will be soon. Send us an email if you're interested in collaborating.
* See [the site](http://www.penrose.ink/) for more information and examples.
* See the [wiki](https://github.com/penrose/penrose/wiki) for more system-specific information on building, running, testing, and debugging the system.
* For even more documentation, see Nimo Ni's [README](https://github.com/wodeni/notes-public/blob/master/penrose/archive/ramp-down.md).
### Example
Here's a simple Penrose visualization in the domain of set theory.
It's specified by the following Substance and Style programs.
- `tree.sub`
```
Set A
Set B
Set C
Set D
Set E
Set F
Set G
Subset B A
Subset C A
Subset D B
Subset E B
Subset F C
Subset G C
NoIntersect E D
NoIntersect F G
NoIntersect B C
```
- `venn.sty`
```
Set x {
shape = Circle { }
constraint contains(x, x.label)
}
Intersect x y {
constraint overlapping(x, y)
constraint outsideOf(y.label, x)
constraint outsideOf(x.label, y)
}
NoIntersect x y {
constraint nonOverlapping(x, y)
}
Subset x y {
constraint contains(y, x)
constraint smallerThan(x, y)
constraint outsideOf(y.label, x)
}
NoSubset x y {
objective repel(x, y)
constraint outsideOf(x, y)
constraint outsideOf(y.label, x)
constraint outsideOf(x.label, y)
constraint nonOverlapping(x, y)
}
```
Here's how the optimization looks live in the UI.