Moonshine IDE's code editor powered by Feathers UI
Over the last year or so, the team working on Moonshine IDE have been converting the application's interface to run on Feathers UI. In the recent 3.2 update of Moonshine, the IDE includes an all new code editor — rewritten in Haxe as a Feathers UI component. Best of all: The new code editor is open source.
For those unfamiliar, Moonshine IDE is an open source development environment that aims to get your projects up and running as quickly as possible, allowing you to easily install SDKs and tools, configure SCM like Git, and, of course, compile and debug to a variety of platforms. It supports creating projects with Haxe/OpenFL, AS3 with Flex or Royale, Java, Groovy/Grails, PrimeFaces and more.
The Moonshine team's goal is to migrate the entire IDE from Apache Flex, Adobe AIR, and ActionScript 3.0 to Feathers UI, OpenFL, and Haxe. With Feathers UI, it's possible to convert individual views within the existing Flex application one by one — so that Flex and Feathers UI are running side by side. The conversion from one framework to another can happen incrementally, instead of requring a complete rewrite all at once.
When the time comes, Moonshine's developers will be able to basically flip a switch, and the app will no longer run on Adobe AIR. At the point, it will be pure OpenFL, running natively with HXCPP on Windows, macOS, and Linux.
Code editor features
Some highlights of the features that this new text editor component provides.
Syntax highlighting. Programming language syntax, like keywords, strings, numbers, etc. are highlighted in different colors, and you can set custom colors too.
Optimized scrolling. The code editor is powered internally by the Feathers UI
ListView
component, which uses a virtualized layout to optimize scrolling performance.Diagnostics may be used to display compiler errors and warnings as colorful ~squiggly~ underlines.
Completion pops up a list of suggestions as you type. It can be triggered either by a keyboard shortcut, or by typing certain characters in the editor.
Signature Help provides parameter information for method calls.
Code Actions can provide quick fixes and other automated source changes.
Go To Definition allows
Ctrl+Click
jumping to where a class, interface, method, or variable is defined.Hover your mouse over a symbol to see more context, including Markdown-formatted documentation.
Breakpoints may be added for debugging, including highlighting the line where the debugger is currently paused.
A whole lot more, like find/replace, line ending detection, increase/decrease indentation, auto-closing bracket pairs, and toggle line/block comments.
Language Server Protocol support
The library actually contains two main components: TextEditor
and LspTextEditor
. The TextEditor
component provides the basics, like editing, selection, syntax highlighting, and find/replace. Meanwhile the LspTextEditor
subclass provides the more advanced code intelligence features, like completion, signature help, jump to definition, and things like that.
The API of the LspTextEditor
is based on the Language Server Protocol, which allows a client (the editor or IDE) to request code intelligence data from a server (generally, a separate program that gets launched by the editor). This protocol was originally pioneered by Microsoft in their Visual Studio Code editor, but it's now supported in a variety of editors and IDEs across the developer ecosystem.
The Language Server Protocol defines a number of primitives for returning data when responding to code intelligence requests, such as returning arrays of completion items after you type the .
character for member access, or showing function signature help when you type the (
character to call a method.
LspTextEditor
doesn't know how to speak with the server directly. It simply understands how to use the Language Server Protocol primitives as its value objects. You can actually hook LspTextEditor
up to any source of code intelligence data, as long as you map the results to the expected format. The editor will dispatch appropriate events, and you can return the results in a simple callback.
textEditor.addEventListener(
LspTextEditorLanguageRequestEvent.REQUEST_COMPLETION,
completionHandler);
function completionHandler(event):Void {
var item = new CompletionItem();
item.label = "parent";
item.kind = Field;
item.detail = "openfl.display.DisplayObjectContainer";
item.documentation = "Indicates the DisplayObjectContainer object that contains this display object.";
var completion = new CompletionList([item]);
event.callback(completion);
}
If you want to use a real language server that speaks the protocol, you can combine LspTextEditor
with the LanguageClient
class from a sister project, Moonshine-IDE/moonshine-openfl-language-client.
Open source
Moonshine's new code editor powered by Feathers UI is completely open source, and you can find the Moonshine-IDE/moonshine-feathersui-text-editor repository on Github. Apache licensed for both open source and commercial use.
You can embed this code editor in any Feathers UI or OpenFL application. For instance, if you were building some kind of developer tool, you might want to display read-only code samples with syntax highlighting. With that idea in mind, I recently added the code editor to the Feathers UI Transitions "Story Explorer" demo to display how each "story" was created. You can see a screenshot of how it was integrated below:
Installation and more
You can run the following commands in your terminal to install both moonshine-feathersui-text-editor and moonshine-openfl-language-client.
haxelib git moonshine-openfl-language-client https://github.com/Moonshine-IDE/moonshine-openfl-language-client.git
haxelib git moonshine-feathersui-text-editor https://github.com/Moonshine-IDE/moonshine-feathersui-text-editor.git
Next, be sure to check out a variety of sample projects in the repository that demonstrate how to use each feature. At the time of this writing, there are examples for breakpoints, completion, jump to definition, diagnostics, displaying details/documentation on hover, and signature help. There's also an example called "simple text editor" that creates a basic app that can open, edit, and save text files, with syntax highlighting for several languages.
To keep up with the latest news and updates about Moonshine IDE, follow the team's announcements on Twitter, Facebook or LinkedIn.
Feathers UI beta.7 preview build on Haxelib
Today, Feathers UI beta.7 is now officially available on Haxelib. This is the latest of multiple preview builds that are planned before the first stable release in early 2022. Since we're in the beta stage, the core framework architecture has settled down, and breaking changes are much less likely to happen going forward. Developers who don't mind some minor rough edges here and there should consider Feathers UI ready for starting development on new projects!
Feathers UI is an open source framework of graphical user interface (GUI) components for creative, cross-platform projects. Using the Haxe programming language, Feathers UI is built on OpenFL, a user-friendly library for rendering, input, networking, and more. Deploy native apps to iOS, Android, Windows, macOS, Linux… and even publish your project to the web — all using the same Haxe codebase.
🚨 Please note that this is a beta version of Feathers UI. Some components and features may still be missing, and occasional bugs should be expected.
Feathers UI continues to achieve each new milestone thanks the very generous support from the contributors on Github Sponsors, and everyone who backed the successful 2019 Feathers UI Kickstarter campaign. A big, enthusastic thank you to you all!
What's new in beta.7?
Let's take a look at some of the new components and features that are included with Feathers UI beta.7.
New Components
A couple of new UI components are included in this update.
DatePicker
allows the user to select a date from a month view. The month or year may be changed by clicking a button in the header (you may configure which buttons get displayed, including hiding all of them to display only one month). This component uses the new openfl.globalization.DateTimeFormatter
class coming in the next OpenFL update to localize month and weekday names in HTML/JS (or in Adobe AIR, of course). For older versions of OpenFL, it always defaults to the en-US locale.
PopUpDatePicker
includes an input field to display the selected date, and a button to toggle the display of a DatePicker
as a pop-up. It's sort of like a ComboBox
component for dates.
New Features
This build also fixes several bugs, and it includes a some new features too. Here's a few worth highlighting:
RouterNavigator
now supports URL hashes for managing history when targeting HTML/JS and full URLs are not supported. The navigator will attempt to use full URLs by default. However, when targeting Electron, or when the page is loaded with thefile:
protocol, the navigator will automatically switch to hashes. If needed, you can set a newpreferHashRouting
totrue
to always use hash routing in HTML/JS. On all other targets, same as previously, history is always saved in memory.RouterNavigator
andStackNavigator
support newsaveData
andrestoreData
methods to persist a view's session data when navigating away, and to restore that data when returning to the same view later.- Added a new
disabledAlpha
property to all components, to optionally lower the component's opacity when disabling it.
For complete details, check out the beta.7 CHANGELOG.
Install Feathers UI beta.7
Feathers UI beta.7 may be installed using the haxelib install command in your terminal.
haxelib install feathersui 1.0.0-beta.7
Be sure to take a look at the complete installation instructions for details about installing required dependencies, along with links to step-by-step tutorials for setting up supported editors and IDEs.
Documentation
- The Feathers UI Getting Started guide provides the most essential links for creating your first Feathers UI project and learning about all of the features and UI components that are available in the framework.
- The v1.0.0-beta.7 API Reference includes descriptions of all APIs available on Feathers UI components, layouts, utility functions, and more.
Community
- Start a thread in the Feathers UI Community forum to ask for help.
- Join the Feathers UI Discord to chat with Josh and others in the community.
How to help the project
Want to help keep the lights on and servers running? Make a monthly (or one-time) contribution on Github Sponsors.
Questions or comments?
Everyone, I just want to say thank you again for your support. I'm looking forward to hearing what you think of the new Feathers UI so far. If you create anything with this build — even a simple prototype — I'd love it if you could share your experiences (and maybe even a screenshot 🖼!).
I've created an official beta.7 discussion thread in the community forums. Head over there to leave a comment!
Feathers UI beta.6 preview build on Haxelib
Today, Feathers UI beta.6 is now officially available on Haxelib. This is the latest of multiple preview builds that are planned before the first stable release in early 2022. Since we're in the beta stage, the core framework architecture has settled down, and breaking changes are much less likely to happen going forward. Developers who don't mind a few rough edges here and there should consider Feathers UI ready for starting development on new projects!
Feathers UI is an open source framework of graphical user interface (GUI) components for creative, cross-platform projects. Using the Haxe programming language, Feathers UI is built on OpenFL, a user-friendly library for rendering, input, networking, and more. Deploy native apps to iOS, Android, Windows, macOS, Linux, and even publish your project to the web — all using the same Haxe codebase.
🚨 Please note that this is a beta version of Feathers UI. Some components and features may still be missing, and occasional bugs should be expected.
Feathers UI continues to achieve each new milestone thanks the very generous support from the contributors on Github Sponsors, and everyone who backed the successful 2019 Feathers UI Kickstarter campaign. A big, enthusastic thank you to you all!
What's new in beta.6?
Let's take a look at some of the new features that are included with Feathers UI beta.6.
New Transition Builders
A number of new animated transitions are now available for Feathers UI navigator components.
ColorFadeTransitionBuilder
offers a classic "fade to black" sort of effect. Obviously, you can fade to any color that you prefer. It doesn't need to be black.CoverTransitionBuilder
"covers" the old view a new one by sliding in the new view on top.FadeTransitionBuilder
fades the new view in, fades the old view out, or cross-fades both views at the same time.IrisTransitionBuilder
animates the scale of a circular mask to replace the old view with the new view.RevealTransitionBuilder
is the opposite ofCoverTransitionBuilder
. It "reveals" the new view below the old view, by sliding the old view out of the way.SlideTransitionBuilder
"slides" both views in the same direction by translating their position, with the new view starting out of bounds and ending where the old view started.WipeTransitionBuilder
uses a retangular mask to "wipe" the old view away to reveal the new view below.
Want to see the transitions in action? Check out the new Transitions Story Explorer.
Each animated transition includes a number of configurable parameters, such as the duration in seconds, and the story explorer exposes controls for each transition so that you can play around with them.
New Features
This build also fixes several bugs, and it includes many new features too. Here's a few worth highlighting:
TreeView
has a newtoggleChildrenOf()
method that allows you to programmatically open and close all children of a branch. It also now supports using the keyboard's left and right arrow keys to open and close branches interactively, like how native UI trees work on desktop operating systems.Scrolling containers have a new
scrollMode
property that controls whether the internal implementation usesscrollRect
ormask
on its internal view port. This is an advanced property, and the difference will be subtle, but there may be times when one or the other works better. I wanted to make that choice available.
For complete details, check out the beta.6 CHANGELOG.
Install Feathers UI beta.6
Feathers UI beta.6 may be installed using the haxelib install command in your terminal.
haxelib install feathersui 1.0.0-beta.6
Be sure to take a look at the complete installation instructions for details about installing required dependencies, along with links to step-by-step tutorials for setting up supported editors and IDEs.
Documentation
- The Feathers UI Getting Started guide provides the most essential links for creating your first Feathers UI project and learning about all of the features and UI components that are available in the framework.
- The v1.0.0-beta.6 API Reference includes descriptions of all APIs available on Feathers UI components, layouts, utility functions, and more.
Community
- Start a thread in the Feathers UI Community forum to ask for help.
- Join the Feathers UI Discord to chat with Josh and others in the community.
How to help the project
Want to help keep the lights on and servers running? Make a monthly (or one-time) contribution on Github Sponsors.
Questions or comments?
Everyone, I just want to say thank you again for your support. I'm looking forward to hearing what you think of the new Feathers UI so far. If you create anything with this build — even a simple prototype — I'd love it if you could share your experiences (and maybe even a screenshot 🖼!).
I've created an official beta.6 discussion thread in the community forums. Head over there to leave a comment!
Kickstarter Devlog Roundup: August 2021
Every three to four weeks, I've been posting updates on Kickstarter that summarize what I've been adding to the Haxe/OpenFL version of Feathers UI recently. To be sure that no one has missed any of these updates, I'm going to occasionally post a quick roundup here on the Feathers UI blog. Let's jump right in…
2021-05-21: NumericStepper, app scaling, item renderer accessories, TextInput errorString introduces the new
NumericStepper
component, theIScaleManager
interface to customize how theApplication
component scales. Item renderers may now display an "accessory" view on the right side, and theTextInput
component may display anerrorString
on focus, with a customizable error background skin.2021-07-01: Polishing things up for beta.4, to be released in July previews user-customizable values in the
ComboBox
component, column and header dividers in theGridView
component, and the latest updates aboutAlert
,NumericStepper
,AssetLoader
, and more.2021-08-10: Tiled layouts, page snapping, mask skins, data container keyboard navigation, d-pad focus management, and bug fix bonanza! shows off the new "tiled" layouts, including the ability to customize keyboard navigation in components like
ListView
with the newIKeyboardNavigationLayout
interface, along with the ability to customize snapping positions in scrolling containers with the newISnapLayout
interface.
Every few months, I'll try to do another roundup of the Kickstarter updates here on the blog. However, if you'd like to see these updates sooner, subscribe to my Kickstarter Atom feed.
Feathers UI beta.5 preview build on Haxelib
Today, Feathers UI beta.5 is now officially available on Haxelib. This is the latest of multiple preview builds that are planned before the first stable release in early 2022. Since we're in the beta stage, the core framework architecture has settled down, and breaking changes are much less likely to happen going forward. Developers who don't mind a few rough edges here and there should consider Feathers UI ready for starting development on new projects!
Feathers UI is an open source framework of graphical user interface (GUI) components for creative, cross-platform projects. Using the Haxe programming language, Feathers UI is built on OpenFL — a user-friendly library for rendering, input, networking, and more. Deploy native apps to iOS, Android, Windows, macOS, Linux (and even publish your project to the web!) using the same Haxe codebase.
🚨 Please note that this is a beta version of Feathers UI. Some components and features may still be missing, and occasional bugs should be expected.
Feathers UI continues to achieve each new milestone thanks the very generous support from the contributors on Github Sponsors, and everyone who backed the successful 2019 Feathers UI Kickstarter campaign. A big, enthusastic thank you to you all!
What's new in beta.5?
Let's take a look at some of the new UI components and features that are included with Feathers UI beta.5.
New Layouts
TiledRowsLayout
,TiledRowsListLayout
, andPagedTiledRowsListLayout
all position items as tiles (where all items have equal dimensions) in one or more rows.TiledRowsLayout
is meant to be used with simple containers, likeLayoutGroup
andScrollContainer
.TiledRowsListLayout
andPagedTiledRowsListLayout
are meant to be used with data containers, likeListView
.PagedTiledRowsListLayout
will split tiles among multiple pages, if they don't all fit on one page.The
gap
property ofHorizontalLayout
andVerticalLayout
now accepts a value ofMath.POSITIVE_INFINITY
to indicate that it should try to add as much space as possible between items. If the container is resized, the gap will be adjusted to match. If the content is larger than the container, these layouts will fall back to the newminGap
property.(By the way, the new tiled layouts also support
Math.POSITIVE_INFINITY
for theirhorizontalGap
andverticalGap
properties.)
New Features
This build also fixes a ton of bugs, and it includes many new features too. Here's a few worth highlighting:
Scrolling containers, like
ListView
andScrollContainer
, now support snapping to pages. These snap positions, which may be arbitrary values (not just pages), may be specified by layouts. For instance, the newPagedTiledRowsListLayout
, mentioned above, returns either an array of x or y values, depending on whether the pages are oriented horizontally or vertically.Layouts may now implement the new
IKeyboardNavigationLayout
interface, if they need to customize how selection in components likeListView
changes when the keyboard arrow keys, page up/down keys, or home/end keys are pressed. This is used primarily by the new tiled layouts, but custom layouts will be able to use the same interface to customize their own behavior too, if they have interesting positioning algorithms.LayoutGroup
and scrolling containers likeListView
,ScrollContainer
, andPanel
have a newmaskSkin
property. This mask will automatically resize when the container resizes. Scrolling containers also add a similarviewPortMaskSkin
property to mask only the view port (which is the region containing scrollable content).
This list would be far too long if it included all of the bug fixes related item renderers, word wrap, data container selection, focus management, and more. For complete details, check out the beta.5 CHANGELOG.
Install Feathers UI beta.5
Feathers UI beta.5 may be installed using the haxelib install command in your terminal.
haxelib install feathersui 1.0.0-beta.5
Be sure to take a look at the complete installation instructions for details about installing required dependencies, along with links to step-by-step tutorials for setting up supported editors and IDEs.
Documentation
- The Feathers UI Getting Started guide provides the most essential links for creating your first Feathers UI project and learning about all of the features and UI components that are available in the framework.
- The v1.0.0-beta.5 API Reference includes descriptions of all APIs available on Feathers UI components, layouts, utility functions, and more.
Community
- Start a thread in the Feathers UI Community forum to ask for help.
- Join the Feathers UI Discord to chat with Josh and others in the community.
How to help the project
Want to help keep the lights on and servers running? Make a monthly (or one-time) contribution on Github Sponsors.
Questions or comments?
Everyone, I just want to say thank you again for your support. I'm looking forward to hearing what you think of the new Feathers UI so far. If you create anything with this build — even a simple prototype — I'd love it if you could share your experiences (and maybe even a screenshot 🖼!).
I've created an official beta.5 discussion thread in the community forums. Head over there to leave a comment!
Feathers UI beta.4 preview build on Haxelib
Today, Feathers UI beta.4 is now officially available on Haxelib. This is the latest of multiple preview builds that are planned before the first stable release in early 2022. Since we're in the beta stage, the core framework architecture has settled down, and breaking changes are much less likely to happen going forward. Developers who don't mind a few rough edges here and there should consider Feathers UI ready for starting development on new projects!
Feathers UI is an open source framework of user interface components for creative, cross-platform projects. Using the Haxe programming language, Feathers UI is built on OpenFL — a user-friendly library for rendering, input, networking, and more. Deploy native apps to iOS, Android, Windows, macOS, Linux (and even publish your project to the web!) using the same Haxe codebase.
🚨 Please note that this is a beta version of Feathers UI. Some components and features may still be missing, and occasional bugs should be expected.
Feathers UI continues to achieve each new milestone thanks the very generous support from the contributors on Github Sponsors, and everyone who backed the successful 2019 Feathers UI Kickstarter campaign. A big, enthusastic thank you to you all!
What's new in beta.4?
Let's take a look at some of the new UI components and features that are included with Feathers UI beta.4.
New UI Components
NumericStepper
displays editable numeric text with a set of buttons to increment and decrement the value.
New Features
This build also fixes a ton of bugs, and it includes many new features too. Here's a few worth highlighting:
ComboBox
andPopUpListView
both have a newprompt
property to display some placeholder text when no item is currently selected.popUpListView.prompt = "Select an item";
GridView
adds a newsortableColumns
property, which updates the sort order when the user clicks a column header. Alternatively, developers may set newsortedColumn
andsortOrder
properties to change the sort order programatically. When a column is sorted, a visual indicator may be displayed to the user in the column header to indicate the order (ascending or descending).GridView
also adds optional new divider skins between columns and between column headers.ItemRenderer
can display an optionalaccessoryView
on the far right side.HorizontalLayoutData
andVerticalLayoutData
have new static helper functions namedfill()
,fillHorizontal()
, andfillVertical()
. These make it quick and easy to create layout data object withpercentWidth
andpercentHeight
values set to100.0
.component.layoutData = VerticalLayoutData.fillVertical();
TextInput
andTextArea
both have a newerrorString
property that displays a callout with the error message when focused, and displays a special border.textInput.errorString = "Something is wrong";
This list would be far too long if it included all of the bug fixes related focus management, scrolling, item renderer recycling, themes and styles, and more. For complete details, check out the beta.4 CHANGELOG.
Install Feathers UI beta.4
Feathers UI beta.4 may be installed using the haxelib install command in your terminal.
haxelib install feathersui 1.0.0-beta.4
Be sure to take a look at the complete installation instructions for details about installing required dependencies, along with links to step-by-step tutorials for setting up supported editors and IDEs.
Documentation
- The Feathers UI Getting Started guide provides the most essential links for creating your first Feathers UI project and learning about all of the features and UI components that are available in the framework.
- The v1.0.0-beta.4 API Reference includes descriptions of all APIs available on Feathers UI components, layouts, utility functions, and more.
Community
- Start a thread in the Feathers UI Community forum to ask for help.
- Join the Feathers UI Discord to chat with Josh and others in the community.
Questions or comments?
Everyone, I just want to say thank you again for your support. I'm looking forward to hearing what you think of the new Feathers UI so far. If you create anything with this build — even a simple prototype — I'd love it if you could share your experiences (and maybe even a screenshot 🖼!).
I've created an official beta.4 discussion thread in the community forums. Head over there to leave a comment!
Kickstarter Devlog Roundup: April 2021
Every three to four weeks, I've been posting updates on Kickstarter that summarize what I've been adding to the Haxe/OpenFL version of Feathers UI recently. To be sure that no one has missed any of these updates, I'm going to occasionally post a quick roundup here on the Feathers UI blog. Let's jump right in…
2020-11-04: Drawer, HDividedBox and VDividedBox, GridView column resizing, focus management improvements, and ResponsiveGridLayout introduces the new
Drawer
slide-out container,HDividedBox
andVDividedBox
containers with a resizing handle between children, andResponsiveGridLayout
, which gives you a 12 column layout that can change appearance based on device screen width — similar to Bootstrap and other web frameworks.2021-01-15: Form, FormItem, ButtonBar and another look at what was in beta.2 introduces the new
Form
andFormItem
, andButtonBar
components, along with a look back at some things that were in beta.2 but hadn't yet appeared in a devlog.2021-02-05: Alert, Header, scrolling pixel snapping, and setPadding() introduces the new
Alert
andHeader
UI components, along with the newsetPadding()
method that setspaddingTop
,paddingRight
,paddingBottom
, andpaddingLeft
in one method call on any class that has these four properties.2021-04-09: Helping with Lime/OpenFL release, ArrayHierarchicalCollection with filtering/sorting, automated testing with UTest and OpenFL introduces the new
ArrayHierarchicalCollection
class that makes it easier to provide data toTreeView
andGroupListView
. It also links to a sample project to run UTest automated tests with OpenFL that I wanted to share with the community.
Every few months, I'll try to do another roundup of the Kickstarter updates here on the blog. However, if you'd like to see these updates sooner, subscribe to my Kickstarter Atom feed.
Feathers UI beta.3 preview build on Haxelib
Today, Feathers UI beta.3 is now officially available on Haxelib. This is the latest of multiple preview builds that are planned before the first stable release in early 2022. Since we're in the beta stage, the core framework architecture has settled down, and breaking changes are much less likely to happen. Developers who don't mind a few rough edges here and there should consider Feathers UI ready for starting development on new projects!
Feathers UI is an open source framework of user interface components for creative, cross-platform projects. Using the Haxe programming language, Feathers UI is built on OpenFL — a user-friendly library for rendering, input, networking, and more. Deploy native apps to iOS, Android, Windows, macOS, Linux (and even publish your project to the web!) using the same Haxe codebase.
🚨 Please note that this is a beta version of Feathers UI. Some components and features may still be missing, and occasional bugs should be expected.
Feathers UI has reached this milestone thanks the very generous support of all of the backers from the Feathers UI Kickstarter campaign, which completed successfully in the summer of 2019. A big, enthusastic thank you to everyone who has supported the project, whether you are a backer, shared the Kickstarter with your friends on social media, or simply encouraged me (Josh) to keep up the good work!
What's new in beta.3?
Let's take a look at some of the new UI components and features that are included with Feathers UI beta.3
New UI Components
Alert
displays a message in a modal pop-up dialog with a title and a set of buttons.ButtonBar
displays a grouping of buttons based on a data collection.Form
andFormItem
display a set of form controls with labels, including the ability to assign a specific submit button.Header
display a title in the center and two optional views on the left and right sides.
A big release
This build also includes a ton of minor improvements. Here's a few worth highlighting:
- Support for horizontal scrolling in the
GridView
component when the content width exceeds the container width. - Separate
branchIcon
,branchOpenIcon
,branchClosedIcon
, andleafIcon
styles on theTreeViewItemRenderer
component. - A
maxChars
property forTextInput
andTextArea
. - A new
setPadding()
convenience method was added to all classes withpaddingTop
,paddingRight
,paddingBottom
andpaddingLeft
properties. It sets all four value at once. - A new
Application.topLevelApplication
static property that makes it easy to access the root Feathers UI application object. ArrayHierarchicalCollection
is a new implementation ofIHierarchicalCollection
that's a bit more flexible than the existingTreeCollection
.- New
filterFunction
andsortCompareFunction
properties onIHierarchicalCollection
to match the same properties onIFlatCollection
.
For complete details, check out the beta.3 CHANGELOG.
Install Feathers UI beta.3
Feathers UI may be installed using the haxelib install command in your terminal.
haxelib install feathersui
If you already have the library installed, and you simply want the latest version, run the haxelib update command instead.
haxelib update feathersui
Be sure to take a look at the complete installation instructions for details about installing required dependencies, along with links to step-by-step tutorials for setting up supported editors and IDEs.
Documentation
- The Feathers UI Getting Started guide provides the most essential links for creating your first Feathers UI project and learning about all of the features and UI components that are available in the framework.
- The v1.0.0-beta.3 API Reference includes descriptions of all APIs available on Feathers UI components, layouts, utility functions, and more.
Community
- Start a thread in the Feathers UI Community forum to ask for help.
- Join the Feathers UI Discord to chat with Josh and others in the community.
Questions or comments?
Everyone, I just want to say thank you again for your support. I'm looking forward to hearing what you think of the new Feathers UI so far. If you create anything with this build — even a simple prototype — I'd love it if you could share your experiences (and maybe even a screenshot 🖼!).
I've created an official beta.3 discussion thread in the community forums. Head over there to leave a comment!
Support Feathers UI on Github Sponsors
From time to time, people ask how they can send a little thank you donation to the Feathers UI open source project. Feathers UI is a cross-platform GUI framework for building mobile, desktop, and web apps (native and GPU-accelerated).
Starting today, the best way to help out is to sponsor Josh Tynjala on Github. Not only will you help fund Feathers UI development, but you'll also get some perks in exchange. Depending on your budget, you could get special forum avatar badges, priority support, your logo on feathersui.com, and more. Whether you're an indie developer or a big company, there are various levels of sponsorship for everyone. Check it out!
Additionally, Josh Tynjala is eligible for the Github Sponsors Matching Fund, which means that for every dollar you send, Github will double it. So if you sign up for $10 monthly, Josh will get $20. Not bad, right?
Thank you so much for your generous support, and of course, for continuing to build your projects using Feathers UI. This community is truly inspiring.
Feathers UI beta.2 preview build on Haxelib
Today, Feathers UI beta.2 is now officially available on Haxelib. This is the latest of multiple preview builds that are planned before the first stable release in early 2022. We've now made it past the alpha stage, which means that the core framework architecture has settled down, and breaking changes are much less likely to happen. Developers who don't mind a few rough edges here and there should consider Feathers UI ready for starting development on new projects!
Feathers UI is an open source framework of user interface components for creative, cross-platform projects. Using the Haxe programming language, Feathers UI is built on OpenFL — a user-friendly library for rendering, input, networking, and more. Deploy native apps to iOS, Android, Windows, macOS, Linux (and even publish your project to the web!) using the same Haxe codebase.
🚨 Please note that this is a beta version of Feathers UI. Some components and features may still be missing, and occasional bugs should be expected.
Feathers UI has reached this milestone thanks the very generous support of all of the backers from the Feathers UI Kickstarter campaign, which completed successfully in the summer of 2019. A big, enthusastic thank you to everyone who has supported the project, whether you are a backer, shared the Kickstarter with your friends on social media, or simply encouraged me (Josh) to keep up the good work!
What's new in beta.2?
Let's take a look at some of the new features that are included with Feathers UI beta.2.
Restored support for OpenFL 8.9
The previous beta.1 build was unintentionally released containing some incompatibilties with OpenFL 8.9. This was a mistake. Obviously, not everyone is ready to upgrade to OpenFL 9 yet. To ensure that this doesn't happen again, the CI server now builds using OpenFL 8.9 so that any new incompatible changes can be caught immediately.
ToolTipManager
In desktop apps, a tool tip may be added to a UI component so that a helpful description is displayed when the mouse hovers over it. Now, all Feathers UI components have a toolTip
property that accepts a string value.
var button = new Button();
button.text = "Click Me";
button.toolTip = "If you click me, you'll win a prize!";
addChild(button);
The Application
component enables the ToolTipManager
automatically, but it may be disabled with <haxdef name="disable_tool_tip_manager">
in your project.xml file. If your root class isn't an Application
, you may manually call ToolTipManager.addRoot()
to enable tool tips.
As with all "managers" in Feathers UI, there is an IToolTipManager
interface that may be used to implement a custom tool-tip manager, if the default one does not completely meet your needs.
Multiple item renderers
The ListView
, GridView
, and TreeView
components have been updated to support displaying multiple types of item renderers for the same data collection.
The following example uses custom item renderers for the first and last items displayed by the ListView
:
var regularItemRecycler = DisplayObjectRecycler.withClass(ItemRenderer);
var firstItemRecycler = DisplayObjectRecycler.withClass(CustomFirstItemRenderer);
var lastItemRecycler = DisplayObjectRecycler.withClass(CustomLastItemRenderer);
var listView = new ListView();
listView.itemRendererRecycler = regularItemRecycler;
listView.setItemRendererRecycler("first-item", firstItemRecycler);
listView.setItemRendererRecycler("last-item", lastItemRecycler);
listView.itemRendererRecyclerIDFunction = function(state:ListViewItemState):String {
if(state.index == 0) {
return "first-item";
}
if(state.index == listView.dataProvider.length - 1) {
return "last-item";
}
// return null to use the default itemRendererRecycler
return null;
};
For complete details about what else is included in this build, check out the beta.2 CHANGELOG.
Install Feathers UI beta.2
Feathers UI may be installed using the haxelib install command in your terminal.
haxelib install feathersui
If you already have the library installed, and you simply want the latest version, run the haxelib update command instead.
haxelib update feathersui
Be sure to take a look at the complete installation instructions for details about installing required dependencies, along with links to step-by-step tutorials for setting up supported editors and IDEs.
Documentation
- The Feathers UI Getting Started guide provides the most essential links for creating your first Feathers UI project and learning about all of the features and UI components that are available in the framework.
- The v1.0.0-beta.2 API Reference includes descriptions of all APIs available on Feathers UI components, layouts, utility functions, and more.
Community
- Start a thread in the Feathers UI Community forum to ask for help.
- Join the Feathers UI Discord to chat with Josh and others in the community.
Questions or comments?
Everyone, I just want to say thank you again for your support. I'm looking forward to hearing what you think of the new Feathers UI so far. If you create anything with this build — even a simple prototype — I'd love it if you could share your experiences (and maybe even a screenshot 🖼!).
I've created an official beta.2 discussion thread in the community forums. Head over there to leave a comment!