Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[v3] Upcoming Release #671

Closed
andersevenrud opened this issue Feb 17, 2018 · 89 comments
Closed

[v3] Upcoming Release #671

andersevenrud opened this issue Feb 17, 2018 · 89 comments

Comments

@andersevenrud
Copy link
Member

andersevenrud commented Feb 17, 2018

See the manual for lots of more information.

This is the master issue for OS.js 🎉 v3 🎉 , which is a work-in-progress rewrite. This issue will be updated at random.

Community announcement


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


Please note that the code is not public at the moment. See the TODO list below. All repositories will be transferred to the os-js Org and automatically made public once Stage I is done

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/common - Things used throughout everything
  • @osjs/client - 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}-{type}.

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.
@junland
Copy link

junland commented Feb 19, 2018

Will v3 still have options to build standalone (E.g Nginx, Apache, etc.)? Also is there anything changing with the build system?

@andersevenrud
Copy link
Member Author

@junland Yes, you can still build it standalone :)

The build system will work pretty much the same, just improved. There's a small paragraph in the issue description about this.

@junland
Copy link

junland commented Feb 21, 2018

Ahhh okay, guess I missed it. Sounds good!

@andersevenrud
Copy link
Member Author

@junland I might put up a demo and all the sources this weekend. I can let you know if it's of any interest :)

@junland
Copy link

junland commented Feb 21, 2018

@andersevenrud sounds good! I'd be happy to try it out.

@msanchezdev
Copy link

We could change the source code to typescript to have a Hard Typing system and that could give us a better development experience. @andersevenrud

@andersevenrud
Copy link
Member Author

@junland Sorry, but I totally forgot. The sources are now up on this org. account :)

@andersevenrud
Copy link
Member Author

@mds325 I don't think I'll make any of the base packages in TS as they are very small, but I will however provide typing [definitions] (.d.ts) for anyone that wants to develop using TS .

Also, if things get to a complex point, then TS or Flex will be looked into :)

@andersevenrud
Copy link
Member Author

andersevenrud commented Mar 3, 2018

@andersevenrud
Copy link
Member Author

All core modules now up on npmjs.org: https://www.npmjs.com/org/osjs

I'll leave the packages for later... they're not hard to set up anyway.

Not sure what schedule I'm going to set for publishing yet, but since I started on this day... I'll make it every saturday.

@andersevenrud
Copy link
Member Author

andersevenrud commented Mar 10, 2018

A community member was asking about how to easily prototype applications, and it brought up something interesting.

I put together these bundles so you can do this in whatever platform you want, a basic example being: https://jsfiddle.net/andersevenrud/m94jt9ct/5/

If you want to test this out yourself, just use these resources:

At some point I'll probably set up proper CDN for this with automatic building. These links are made from my local machine using Webpack and these files:

// index.js
import * as gui from '@osjs/gui';
window.OSjs = window.OSjs || {};
window.OSjs.GUI = gui;
// index.scss
@import "@osjs/gui/index.scss";
@import "@osjs/standard-theme/index.scss";

Edit: Another example https://jsfiddle.net/andersevenrud/qe9s1df9/12/

@andersevenrud
Copy link
Member Author

andersevenrud commented Mar 19, 2018

I've started a draft of the basic manual here: https://github.com/os-js/OS.js/wiki/v3-documentation

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

I also released proper tagged versions of everything today (and updated dependency definitions), so things should be smooth sailing.

Please note that I have not polyfilled anything yet, so iOS/Android, Opera and IE will probably not init properly.

@andersevenrud
Copy link
Member Author

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.

@andersevenrud
Copy link
Member Author

Another quick update:

  • Now works on Safari (and iOS) and some other browser quirk fixes
  • Fixed the default theme not compiling
  • Support custom Auth adapters
  • Support custom Settings adapters
  • Login customization support
  • Add default client+server adapters for settings and auth
  • Standalone mode
  • And your usual suspects as dependency updates and general improvements
  • Started on implementation of applying settings (so I'll have a settings app ready soon)
  • Created @osjs/common and moved code shared between client/server there

I've also added two auth adapters:

Manual has been updated with relevant documentation.

@filips123
Copy link
Contributor

I have some ideas:

  • What about some web browser. (I don't know if this is possible and this is just an idea. I found project - https://github.com/browserhtml/browserhtml, but I don't know how it works and it is experimental.)
  • Also, add some mail client and MS Office like programs.
  • In the top bar, show icon instead of text "Menu", like in v2.
  • Windows name could be at center of the window, like in v2.

Also, there are some bugs:

  • Some apps, like Calculator, don't have icons in the menu. Intend, they have OS.js icon.
  • Tab key don't work in text editors.
  • Right click doesn't work. It doesn't do anything.
  • When I move window around, the title text of window is selected. Also, mouse cursor is changed to moving cursor.
  • Window names in top bar are cropped.
  • The icons in the window are too close together and they are overlapping.
  • Resizing window doesn't work.
  • File manager doesn't work. It opens alert with text "TypeError: HEAD or GET Request cannot have a body.".
  • Maybe there are also some other bugs. Also, some features and functionalities from v2 don't work in v3.

Screenshots

Selected title text while moving:
selected-title-text

Moving cursor:
moving-cursor

Cropped window names:
cropped-window-names

Overlapping icons:
overlapping-icons

File Manager:
file-manager

@andersevenrud
Copy link
Member Author

@filips123

What about some web browser. (I don't know if this is possible and this is just an idea

It's somewhat possible. I'll look into the project you linked.

Also, add some mail client and MS Office like programs.

That's something I'd like to do, if I can find some time.

In the top bar, show icon instead of text "Menu", like in v2.

Icon will be applied down the line.

Some apps, like Calculator, don't have icons in the menu. Intend, they have OS.js icon.

Yes, I'm aware. None of the apps are finished for v3.

Tab key don't work in text editors.

Noted.

Right click doesn't work. It doesn't do anything.

It's not supposed to (at least yet).

When I move window around, the title text of window is selected. Also, mouse cursor is changed to moving cursor.

I thought I had disabled user-select when a window is moved. I'll look into that. The cursor is supposed to change.

Window names in top bar are cropped.
The icons in the window are too close together and they are overlapping.

Yes, and several other minor UI glitches. It's not done yet.

Resizing window doesn't work.

It does, just only from south-east at the moment.

File manager doesn't work. It opens alert with text "TypeError: HEAD or GET Request cannot have a body.".

I'll look into that.

Maybe there are also some other bugs. Also, some features and functionalities from v2 don't work in v3.

Most likely yes. It's a work in progress.

@andersevenrud
Copy link
Member Author

@filips123 I've fixed the following (and will release new version this weekend):

  • Icon added to the menu in panel
  • The text selection problem while moving should be fixed
  • Fixed overlapping/cut-off window controls
  • Issues with tab on certain inputs

If you discover something else, please create an issue in https://github.com/os-js/osjs-client :)

@andersevenrud
Copy link
Member Author

@filips123 The issue with HEAD or GET Requests cannot have a body should also be fixed. So stay tuned for that :)

@andersevenrud
Copy link
Member Author

@filips123 I just published the updates.

@andersevenrud
Copy link
Member Author

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 :)

@andersevenrud
Copy link
Member Author

andersevenrud commented Jul 3, 2018

Time for another update 🙂

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

@andersevenrud
Copy link
Member Author

andersevenrud commented Jul 13, 2018

Another quick one for 'ya :)

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)
  • Basic UI animations
  • GUI improvements
  • CLI improvements
  • Logging improvements
  • Manual updates
  • All relevant dependencies updated
  • All relevant packages updated

New applications:

New providers:

VFS adapters:

@filips123
Copy link
Contributor

filips123 commented Jul 13, 2018

What about Docker image and CI integration? There was Dockerfile in v2.
Also, what about other cloud storage adapters like OneDrive, Dropbox, Box...

Will there be build with all applications, providers and adapters included?
Also, could you make online v3 demo?

@andersevenrud
Copy link
Member Author

andersevenrud commented Jul 21, 2018 via email

@andersevenrud
Copy link
Member Author

@filips123 I've added basic instructions here: https://manual.os-js.org/v3/guide/deploy/#running-separately. This only works with the release I just published.

@andersevenrud
Copy link
Member Author

Since I've gotten a lot of questions about it; I've put together a list of TODOs (which is sort of a basic roadmap):

https://gist.github.com/andersevenrud/ebfc22ef75c6686cc2d9a6e1191a8405

I'm updating this list as things come to mind, but I've dedicated a section for the beta release. As you can see, it's not far off 😊

@andersevenrud
Copy link
Member Author

Things got set back a month or so due to some personal stuff, but it's all in full progress again.

I've actually ticked off pretty much all TODOs that I wanted to have done. So expect a beta/rc soon!

I also added back support for Legacy browsers (requires a couple of setup steps https://manual.os-js.org/v3/guide/deploy/#legacy-browsers) because I got some questions about this. The reason it has not worked 100% until now is because of some dependencies was not in ES5 -- but has now been resolved completely as of latest release(s).

@andersevenrud andersevenrud changed the title OS.js v3 [v3] Upcoming Release Nov 29, 2018
@filips123
Copy link
Contributor

It looks good, but it still lacks some features and design of v2. Some apps are still very basic and with poor design.

Will there be support for fullscreen mode and icons on desktop? What about touch menu or some mobile OS like theme?

@andersevenrud
Copy link
Member Author

@filips123

It looks good, but it still lacks some features and design of v2. Some apps are still very basic and with poor design.

My current goal is to finish my TODO list, which involves some application improvements etc. There are actually more internal features in v3 than v2, but I suppose you mean visually. If you think they are poor, please go ahead and make some improvements yourself. PRs are much welcome.

Will there be support for fullscreen mode and icons on desktop? What about touch menu or some mobile OS like theme?

Yes, this will all be implemented.

@filips123
Copy link
Contributor

Yes I mean visually 😊. Unfortunately I can not help you because I'm not expert in Node.js and related things.

@andersevenrud
Copy link
Member Author

@filips123 The apps are written in regular javascript, so if you have some exeperience with that you can probably find your way around.

But anyway, things will improve down the line -- I have quite a few todos, issues and the likes on this open :)

@filips123
Copy link
Contributor

How often will you update online demo? Some things are outdated and not fixed even you fixed them last week.

@IngwiePhoenix
Copy link

IngwiePhoenix commented Dec 2, 2018 via email

@andersevenrud
Copy link
Member Author

@filips123 Usually once a week or something like that. I actually set up the v3 server this week, so it haven't really gotten an update yet.

@andersevenrud
Copy link
Member Author

@IngwiePhoenix Not sure what you mean by that.

@IngwiePhoenix
Copy link

@andersevenrud Well, whenever you do a new release, have the demo updated automatically in the deploy/release process? That is what I meant.

@andersevenrud
Copy link
Member Author

@IngwiePhoenix Ah, yes :)

@RossComputerGuy
Copy link

@andersevenrud why can I modify files in the v3 public demo?

@andersevenrud
Copy link
Member Author

@SpaceboyRoss01 What files ?

@RossComputerGuy
Copy link

I can modify the files in home:/

@andersevenrud
Copy link
Member Author

@SpaceboyRoss01 Yes. That intentional.

I have a cronjob that flushes the directory on an interval (can't remember exactly how often atm).

@RossComputerGuy
Copy link

Ok, I thought I had too much control but that's good it get's flushed.

@andersevenrud andersevenrud pinned this issue Dec 23, 2018
@filips123
Copy link
Contributor

I have concerns about pinned issues for static announcements (like #705) or long discussions (like #18). They are not intended to be used for that.

For static announcements, you should create file in repository (probably in docs directory) or GitHub Gist, and maybe link it from website or readme.

For long discussions, you should create GitHub Teams in organization that allows organizing members and and are also good for discussions. You could create team Admins, Developers, Translators... and relevant discussion will be placed there.

@andersevenrud
Copy link
Member Author

andersevenrud commented Dec 25, 2018 via email

@andersevenrud
Copy link
Member Author

@filips123 I've set up a new Team for translaters and done a round of invites (actually two). Sadly "outside collaborators" cannot be added to teams, but I think I managed to configure the Org to not give broad permissions. The standard "Read" permission actually allowed for modifying org repos which is a bit crap.... but think I've ironed stuff out!

@andersevenrud
Copy link
Member Author

I set the default branch to v3 a couple of days ago, so I guess it's now technically released 😊

The v3 demo was set up quite a while ago with monitoring and so far no big issues has been coming in. So I'm letting things simmer for a few more days, and then on the new year:

  1. Move current v3 into master
  2. Move now deprecated master into v2
  3. Let v3 become the "development" branch
  4. Update any website links that points to old content

Then make the "official announcement" on https://community.os-js.org/ which will be linked here when its out.

This is the list of features / packages that has not yet been converted into v3:

  • Keyboard hotkeys (seems broken in v2)
  • Desktop iconview (component created, looking into deployment)
  • Theme: Glass
  • Theme: Material UI
  • Settings Application: Better UI (*)
  • Settings Application: Panel Configuration (*)
  • Application: Game demos (*)

(*) I'll roll out some application settings ASAP, so most of the things in that list will be taken care of.

A big thanks to all of the people that reported bugs, feature requests and translations! ❤️

Since this is no longer "upcoming", I'm going to close this issue.

@filips123
Copy link
Contributor

When you update branches, you should also cleanup and delete some of them because there are some that weren't updated over 2 years.

@andersevenrud
Copy link
Member Author

andersevenrud commented Dec 30, 2018 via email

@andersevenrud
Copy link
Member Author

@filips123 I've transferred all of the old branches to the following repos:

Also removed all of the old branches from this repo. So now there's only master (v2) and v3.

I'm going to replace the master with v3 this weekend.

@andersevenrud andersevenrud unpinned this issue Feb 16, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants