Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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 (thus 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 archive this we
strife for a variety of things:

- 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 can not 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 also is 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