Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 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 @@ -129,6 +129,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 @@ -225,6 +226,7 @@ This means that druid no longer requires cairo on macOS and uses Core Graphics i
[#967]: https://github.com/xi-editor/druid/pull/967
[#969]: https://github.com/xi-editor/druid/pull/969
[#970]: https://github.com/xi-editor/druid/pull/970
[#971]: https://github.com/xi-editor/druid/pull/971

## [0.5.0] - 2020-04-01

Expand Down
60 changes: 44 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,40 @@ 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 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. In order to achieve this we strive for a variety of things:

- Make it easy to build and package on all supported platforms.
- Implement abstractions to avoid platform specific quirks.
- Respect platform conventions and expectations.
- Handle display resolution and scaling reliably with little effort.
- Facilitate a smooth and polished user experience with no behavioral quirks.
- Enable easy, yet powerful internationalization.
- Offer robust accessibility support.
- Produce small and fast binaries with low memory usage.
- Have a small dependency tree, a high quality code base and good organization.
- Focus on powerful, desktop-grade applications.
- Provide a flexible set of layouts and common widgets.
- Ease creation of custom components and application logic as needed.

### 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])
- Adhere to a specific architectural style such as Elm. ([Iced], [Relm])
- Support rendering to HTML when compiling for WASM. ([Iced], [Moxie])

Druid is just one of many ongoing [Rust-native GUI experiments]. If it
doesn't suit your use case, perhaps one of the others will!

## Concepts

### druid-shell
Expand Down Expand Up @@ -245,18 +280,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 +315,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