wq.app icon indicating copy to clipboard operation
wq.app copied to clipboard

roadmap for wq.app 2.0

Open sheppard opened this issue 5 years ago • 0 comments

wq.app is now over 7 years old! While it has proven to be a useful library over the years, there are a number of early design decisions that are starting to show their age.

  1. When wq.app was created, AMD define() was the best module solution for our goals. Today, most browsers have native support for the ES6 import syntax. And for those that don't, there are plenty of conversion tools and polyfills to chose from on NPM.
  2. What is now referred to as Server-Side Rendering was not an established concept in 2012. Indeed, most of the contemporary UI frameworks of the day would show a blank page until the JavaScript finished loading. This led us to stick with simpler, more robust template systems (Mustache) rather than diving into client-heavy JavaScript frameworks. Today, clients are much faster, and server-side rendering support is built into most JavaScript frameworks.
  3. jQuery Mobile was the dominant library for cross-platform mobile application development. Given its broad support at the time, it appeared to be a safe choice for building on. However, the last stable release to jQuery Mobile was in 2014, and there has been effectively no activity since 2016. While the platform has been remarkably stable, it does not appear to have a future. It is time to move on.

At this point, the plan is for wq.app 2.0 to be built on React, with Redux for the data layer and Material UI for the interface. Since this new version will be largely incompatible with wq.app 1.0/1.1, the rollout will be staged to the extent possible, providing several opportunities for partial upgrades. Due to resource constraints, there is currently no plan to indefinitely maintain backwards compatibility with wq.app 1.x. Instead, some features will start out as optional and later become required.

  • [x] 1.1.2 - NPM Integration
    • See #109
    • wq.app will become a "monorepo" with many small npm packages
    • The packages will be compiled into backwards-compatible AMD versions for distribution via wq.app's existing PyPI package
  • [x] 1.2 - Redux Integration
    • See #105
    • The API for wq/model.js and related libraries may change slightly
    • The UI will (hopefully) not change
  • [x] 1.3 - React Integration
    • See #115 and #122
    • Create a new Material UI-based "theme" for wq/app.js
      • Incorporate ES6 modules and JSX
      • Users of the PyPI package will be able to use <script type=module> and a minimal JSX transpiler to integrate.
      • Users wanting more control over their builds will be able to use npm to install wq.app.
    • The jQuery Mobile "theme" will still use PyPI, RequireJS/AMD and Mustache templates
    • The wq/app.js plugin API will be adapted to integrate with React, while maintaining backwards compatibility where possible.
      • The idea is that most plugins in wq.app 1.3 should be compatible with both "themes"
      • One key question is whether a jQuery $page object will still be available for DOM manipulation.
  • [ ] 2.0 - Drop jQuery Mobile Support
    • Determine if/how to integrate React's server-side rendering support into wq.db
    • Completely drop support for jQuery Mobile and AMD.
      • Users that want AMD will be able to use custom npm builds if desired.

sheppard avatar Apr 17 '19 07:04 sheppard