OS.js v3 announcement


#1

Hi All,

I’m sure you’ve noticed it has been quiet as of recent… but behind the scenes, something awesome is brewing!

Not only have I’ve been busy with work, but a lot of things have been going on in regards on the next release of OS.js, which now has reached a point where I feel comfortable about discussing it :slight_smile:

Please note that this article is a copy-paste of an issue on github, so it will be updated. You might find some comments interesting, so check it out.


My main goal of this release is to significantly reduce complexity, completely modularize, decrease build times, easier customization and application development.

Changes

All rewritten. Now uses modern ES features wherever possible (even on server-side).

Visually, not much has changed, but behind the scenes it’s all brand new.

No backward compability is planned. Also semantic versioning will now take place as of this release.

Simplified

Overall design is now much simpler, much easier to customize and many orders of magnitude faster to build (and faster overall performance). The design now also embraces functional programming.

I’ll write more about this later.

Modularized

Instead of having a monolithic repository, all the different components are now separated into their own (npm) pacakges. The base repository now only consists of a basic scaffold project that allows you to pick-and-choose (and replace) all modules.

  • @osjs/osjs - The base project
  • @osjs/cli - The CLI utilities and build scripts etc
  • @osjs/core - The Client core
  • @osjs/server - The Server core
  • @osjs/gui - GUI Components
  • @osjs/dialogs - Dialogs
  • @osjs/panels - Panels
  • @osjs/standard-theme - The default GUI theme

All packages comes in the form of @scope/osjs-{name}-package.

Compability

Bumped Node to version 8.

Service Providers

All features are now bootstrapped via Service Providers. You can use a number of default provided ones or write your own using a simple interface.

Event Bus-es

Bus-es for everyone! Pretty much all components of OS.js now uses a standard event interface.

Applications and UI

By default OS.js now uses Hyperapp (see #628).

Hyperapp is a JavaScript library for building web applications.

Minimal — Hyperapp was born out of the attempt to do more with less. We have aggressively minimized the concepts you need to understand while remaining on par with what other frameworks can do.

Functional — Hyperapp’s design is inspired by The Elm Architecture. Create scalable browser-based applications using a functional paradigm. The twist is you don’t have to learn a new language.

Batteries-included — Out of the box, Hyperapp combines state management with a Virtual DOM engine that supports keyed updates & lifecycle events — all with no dependencies.

The overall design of the applications now have changed. You no longer need to extend base classes; just one function to bootstrap your application.

GUI Components are also provided via Hyperapp.

Your application state no longer lives “inside” the Application Class instance, so your data won’t leak.

Please note that Hyperapp is completely optional… you can still use your own favorite framework. And I would love it if people ported the components

Server

You can now much easier tap into the server.

PHP Support has been dropped. WebSocket is now default.

Configuration

Now done with regular JavaScript instead of .json files.

CLI / Building

Still very similar, but the tasks have changed.

The watch task now watches everything so you don’t need to run separate processes for everything.

NODE_ENV is now also respected, which in previous versions was controlled with command arguments.

More about this later.

Misc

  • The WindowManager has been removed as the service providers now covers all the functionality.
  • Window behavior can now be overridden per-instance or globally.
  • Scheme has been completely abandoned.
  • You can now also customize the “root DOM element” of which OS.js lives inside. This allows for easy embedding or customized viewports.

#2

Hi.

All plugins / apps will work with new version?


#3

There will be no backward-compability, but I’m hoping to include new versions everything that v2 already has.


#4

Thanks for reply.
Great to know!


#5

Just another update in case you’re not following the Issue on github:

All modules have been published to npmjs.org (with exception of packages), so you can now properly test it out yourself:

git clone -b v3 --single-branch https://github.com/os-js/OS.js.git
cd OS.js
npm install
npm run build:manifest
npm run build:dist
npm run serve

Modules:

Providers:

Packages:


#6

Just a small update notification: https://github.com/os-js/OS.js/issues/671

Thought I’d share the progress with you guys. Here’s a list of currently available features as of today’s release:

  • Extensions via configuration
  • Window media queries
  • Theme support (w/icons)
  • Dialog support (w/default set of dialogs)
  • Panels support (w/default set of panel items)
  • Notifications, Tray icons,
  • GUI Components for Hyperapp (note: these are not finished)
  • Authentication support (note: no modules yet published)
  • VFS Transports and Mountpoints (note: only system module provided at the moment)
  • Session saving and loading
  • WebSockets and HTTP requests for applications
  • Custom distribution (customization, embedding, etc)
  • Basic touch input support
  • … and more

There’s been some more work in the manual as well, so it should be fairly easy to play around with these features.

Next up, I’ll probably be focusing on finishing the GUI components and add add some authentication modules.

Note The @osjs/core module was renamed to @osjs/client.

Link to manual: https://manual.os-js.org/v3/


#7

Been a while since I’ve published an update here. A lot has happened, so I thought I’d note down a list of completed features as of now:

  • Server w/Websocket, authentication, etc.
  • Server authentication and group support
  • CLI w/building and plugin support
  • Build system over Webpack w/simplified API
  • Panels w/library and custom integration support
  • Dialogs w/library and custom integration support
  • VFS w/mountpoints and custom integration support
  • Localization support (No translations yet)
  • Login w/customization support
  • Session w/save and restore
  • Settings incl. applications etc.
  • Notifications and Tray Icons
  • Application socket/http support
  • Application worker support
  • Windows w/all the things you’d expect
  • Basic touch suport and support for screen-size based optimizations
  • Themes
  • Provide modules for authentication
  • Provide examples for packages and service providers
  • Manual (with pretty good coverage atm)
  • Support all platforms for building and development

I probably forgot something…

Some features currently under development/planned:

  • Put i18n strings in translation file(s)
  • Re-sizable windows from all corners
  • Finishing up GUI library
  • Widget support
  • Animations
  • More apps. Including one for managing user settings (finally)
  • More themes

Thanks to everyone that has reported bugs and requested features. Most of the features in v2 is now in v3! So… I guess it’s not that far off from going into a beta :slight_smile:


#8

Time for another update :slightly_smiling_face:

I’ve added the following since last post:

  • Translation file support
  • Support custom Login (adapter)
  • GUI Library basic components now stable
  • GUI Library general improvements
  • Compability (should now render correctly on Safari and iOS)
  • Updated all applications to use latest updates
  • CLI improvements
  • CLI can now generate packages via package:create
  • Extensive manual updates, now also in master
  • More work on Widgets
  • Logo support on login UI
  • A PM2 stats provider now available

#9

Another quick one for 'ya :slight_smile:

Updates:

  • Service Providers can now have dependencies and resolves upon boot
  • VFS abstraction updated to cover non-standard filesystems (i.e. not a traditional folder structure)
  • VFS now supports watching (client can reload things based on filesystem changes, disabled by default)
  • Added the ‘visibility’ attribute on Windows (controls if can be showed in ex window list in panel)
  • GUI improvements
  • CLI improvements
  • Logging improvements
  • Manual updates
  • All relevant dependencies updated
  • All relevant packages updated

New applications:

New providers:

VFS adapters:


#10

In case you’re interested about the progress, I’ve created this gist that I continuously update:


#11