Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ This means that druid no longer requires cairo on macOS and uses Core Graphics i
- Added a changelog containing development since the 0.5 release. ([#889] by [@finnerale])
- Removed references to cairo on macOS. ([#943] by [@xStrom])
- Updated screenshots in `README.md`. ([#967] by [@xStrom])
- Added goals section to `README.md`. ([#971] by [@finnerale])

### Maintenance

Expand Down Expand Up @@ -217,6 +218,7 @@ This means that druid no longer requires cairo on macOS and uses Core Graphics i
[#961]: https://github.com/xi-editor/druid/pull/961
[#963]: https://github.com/xi-editor/druid/pull/963
[#967]: https://github.com/xi-editor/druid/pull/967
[#971]: https://github.com/xi-editor/druid/pull/971

## [0.5.0] - 2020-04-01

Expand Down
58 changes: 42 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@
[![docs.rs](https://docs.rs/druid/badge.svg)](https://docs.rs/druid/)
[![license](https://img.shields.io/crates/l/druid)](./LICENSE)

Druid is an experimental Rust-native UI toolkit. Its main goal is to
demonstrate the potential of Rust as an application programming language, while
letting users write fast, small, and generally efficient programs with minimal
hassle.
Druid is an experimental Rust-native UI toolkit. Its main goal is to offer a
polished user experience. There are many factors to this goal, including
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

to the developer or the end user? 😁

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To the end user. I think using user to mean end-user and developer to mean developer is a fine distinction to go with.

performance, a rich palette of interactions (hence a widget library to support
them), and playing well with the native platform.
See the [goals section](#Goals) for more details.

Druid's current development is largely driven by its use in [Runebender], a new
font editor.
Expand Down Expand Up @@ -62,6 +63,38 @@ druid's existing functionality and widgets.
[![flex.rs example](https://raw.githubusercontent.com/xi-editor/druid/screenshots/images/0.6.0/flex.png)](./druid/examples/flex.rs)
[![custom_widget.rs example](https://raw.githubusercontent.com/xi-editor/druid/screenshots/images/0.6.0/custom_widget.png)](./druid/examples/custom_widget.rs)

## Goals

Druid's primary goal is to provide a smooth and polished user experience with
pixel perfect design and no behavioral quirks. In order to achieve this we
strive for a variety of things:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This feels vague. I might say,

`Druid's goal is to make it easy to write and deploy small and efficient desktop applications that work on most common platforms.'

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, but then I'd like to see this item added to the goals list:

  • Provide a smooth and polished user experience with pixel perfect design and no behavioral quirks.

smooth = no stutter
polished = care has been given to details
pixel perfect = widgets aren't being drawn willy-nilly in roughly the correct location, but instead in just the right pixels
behavioral quirks = application behaving differently under uncommon scenarios, like hot state not working when alt-tabbing out etc

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tried to strike a middle ground on this one:

Druid's goal is to make it easy to write and deploy high quality desktop
applications with a smooth and polished user experience on all common
platforms.

as the summary, and

Facilitate a smooth and polished user experience with no behavioral quirks

as an additional point.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think if we already have the smooth & polish in the summary, then the extra point isn't needed.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, you are right. I suppose it was a bit to late when I wrote that and my brain wasn't working properly anymore. I've removed the extra point.


- Make it easy to build and package on all supported platforms.
- Provide abstractions to avoid platform specific quirks.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- Provide abstractions to avoid platform specific quirks.
- Provide a flexible and ergonomic API that abstracts common platform behaviour.
- Make it possible to interact with the platform directly when more control is necessary.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just to note that abstracts common platform behaviour wouldn't cover things like the multi-click api in #859 because that's not a common platform behavior. It's an abstraction that builds the behavior.

- Encourage good application behavior across platforms.
- Automate platform resolution independence.
- Enable robust internationalization.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- Enable robust internationalization.
- Make internationalization easy and robust.

- Ensure accessibility to a wide group of people.
- Produce small and fast binaries with low memory usage.
- Have a small dependency tree with a high quality code base and good organization.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this item is a process goal, but not really an end goal? So I'm not sure I'd include it here.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would say having a small dependency tree is an end goal. To put it differently, having a small dependency tree is one of the major reasons I'm personally interested in druid over Electron. I wrote in more detail about it #806.

Also the point about cargo build working is even more of a process goal, because that won't have any impact after the build step, while a small dependency tree will matter at runtime too.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess I see "produce small and fast binaries with low memory usage" as being our shot at electron?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aside from being a good goal in general, I think it can be seen as such.

- Focus on powerful, desktop-grade applications.
- Provide the basic set of widgets needed by most applications.
- Simplify creation of complex, special purpose widgets.

### Non-Goals

In order to fulfill those goals, we cannot support every use case. Luckily
the Rust community is working on a variety of different libraries with
different goals, so here are some of druid's non-goals and possible
alternatives that can offer those capabilities:

- Use the the platform-native widgets or mimic them. ([Relm])
- Embed easily into custom render pipelines. ([Conrod])
- Implement a specific architectural style such as Elm. ([Iced], [Relm])
- Support rendering to HTML when compiling for WASM. ([Iced], [Moxie])

There is also a collection of many more ongoing [Rust-native GUI experiments].

## Concepts

### druid-shell
Expand Down Expand Up @@ -245,18 +278,6 @@ Alternatively, there is an X11 backend available, although it is currently
[missing quite a few features](https://github.com/xi-editor/druid/issues/475).
You can try it out with `--features=x11`.

## Alternatives

Druid is only one of many ongoing [Rust-native GUI experiments]. To mention a
few:

* [Azul](https://github.com/maps4print/azul)
* [Conrod](https://github.com/PistonDevelopers/conrod)
* [Iced](https://github.com/hecrj/iced)
* [Makepad](https://github.com/makepad/makepad)
* [Moxie](https://github.com/anp/moxie)
* [Reclutch](https://github.com/jazzfool/reclutch)

## Contributions

We gladly accept contributions via GitHub pull requests. Please see
Expand Down Expand Up @@ -292,3 +313,8 @@ active and friendly community.
[Data trait]: https://docs.rs/druid/0.5.0/druid/trait.Data.html
[Lens datatype]: https://docs.rs/druid/0.5.0/druid/trait.Lens.html
[druid book]: https://xi-editor.io/druid/intro.html
[Iced]: https://github.com/hecrj/iced
[Conrod]: https://github.com/PistonDevelopers/conrod
[Relm]: https://github.com/antoyo/relm
[Moxie]: https://github.com/anp/moxie