jashkenas / backbone

Give your JS App some Backbone with Models, Views, Collections, and Events
http://backbonejs.org
MIT License
28.1k stars 5.4k forks source link

Backbone is being actively maintained #4244

Open chkpnt opened 3 years ago

chkpnt commented 3 years ago

2021-12-14 update by @jgonggrijp: I'll be maintaining Backbone. You can skip to this comment for the latest news.

As this project seems to be dead: is there a still maintained fork?

jcbrand commented 3 years ago

There are many forks. I've created my own here: https://github.com/conversejs/skeletor

I'm using it to move away from Backbone views to Lit web components. Still keeping the models and collections for the time being.

chkpnt commented 3 years ago

Thanks for the link. Yeah, I see there are many forks. But it's hard to get the living and used ones through GitHubs interface.

blikblum commented 3 years ago

You can try https://github.com/blikblum/nextbone

It uses ES classes, is tree shackable, integrates with webcomponents (out of box with LitElement, but can be any web component library), has a form bind component, validation library (backbone.validation conversion), VirtualCollection, LocalStorage.

Also comes with integration with Firebase/Firestore: https://github.com/blikblum/nextbone-firestore and a full featured routing https://github.com/blikblum/nextbone-routing

Everything covered by tests. Lacks documentation

Examples: https://github.com/blikblum/nextbone-wires https://github.com/blikblum/nextbone-contact-manager https://codesandbox.io/s/6jllmlynvz?file=/src/contact.js

ejdaly commented 3 years ago

"Dead" is not the right word. I think you're asking will there be feature additions or API changes?

My guess is the answer is "not likely".

But the project certainly seems to be actively maintained (and well, stable...)

jcbrand commented 3 years ago

It is pretty much dead. There are so many things that could be done to move this project forward that are not being done.

For example, in skeletor I've created a Backbone view (called ElementView) that doubles as a web component.

Nextbone is also working with web components.

One of the biggest drawbacks of Backbone (due to its old age and legacy) is that views can't be nested and rendered declaratively, like you can with modern frameworks. Absolutely zero work has gone in to try and address this in Backbone itself.

Another thing that could be done would be to get rid of underscore, either by using only native methods or using lodash with tree shaking (something that I do in Skeletor) and another thing would be to split code out into multiple files and start using modern language features.

Lastly, I have a lot of respect for Jeremy, but the fact that the project is still under his personal Github account and that a Backbone organisation was never created is a red flag, and might very well have contributed to this project dying (given that he himself is not interested in continuing work on it). It doesn't look to me like there was ever much effort put into trying to make this a community managed project. If there was, then perhaps there would have been more efforts on modernization and renewal.

ejdaly commented 3 years ago

I would imagine that most projects that use Backbone for it's Model, Collection, View "primitives" will extend their capabilities a lot over time, to fit their application needs. That's precisely the market fit for this project in my opinion - to provide those primitives and allow people to extend as needed.

I'm really happy with Backbone having a fixed and very stable feature set / API; it allows me to depend on it long-term..

Anyway, the good thing is we are spoiled for choices for frontend frameworks and rendering libraries and reactive data libraries these days :)

I think Backbone, precisely because of it's simplicity, still forms a very valid option as part of the overall picture for many projects; so in that sense (and that it is actively maintained...), I would not consider it "dead".

Most of the Linux tools we use every day (ls / cat / df / ...) haven't changed in 20 years - but nobody considers those projects to be "dead"; they're just small feature-set applications that do one thing well, and that's all they should ever do...

ejdaly commented 3 years ago

btw @jcbrand I really like what you've done with skeletor - it's actually really similar to how I use Backbone.Views (.toHTML methods, no jquery, WC etc..). My point mostly is that Backbone is a library to enable people to build their own opinionated data-handling classes, view rendering, integrations, etc... I don't expect or want Backbone to make those decisions for me.

chkpnt commented 2 years ago

Sure, having a lib with a stable feature set or API has its advantages. But it's a pity VSCode or other IDEs can't give me the support I expect nowadays due to the way the API is designed.

jcbrand commented 2 years ago

@chkpnt: Could you please elaborate? What is lacking for these IDEs?

chkpnt commented 2 years ago

I've got nearly no IntelliSense within a Backbone.View.extend({...}) or Backbone.Model.extend({...}) method call.

Unfortunately, I'm unable to give VSCode the corresponding type hints, see https://github.com/microsoft/TypeScript/issues/36771#issuecomment-967012356

jcbrand commented 2 years ago

I'm guessing if you extended via the ES2015 extend keyword it wouldn't be a problem?

At least with models, you can extend them the ES2015 way. With Views it's more tricky (IIRC due to the events declaration, there's a long issue about it in this tracker).

In Skeletor the ElementView (which is basically a Backbone-like View but also a web component) is a ES2015 class and you can extend the ES2015 way as well.

jgonggrijp commented 2 years ago

I understand why some people feel that Backbone is dead. Years go by without updates, PRs and issues go stale, and there is no adaptation to relatively new technologies like ESM.

Still, I would consider Backbone mostly alive for the following reasons:

That said, I would like to see Backbone a little more actively maintained, too. ESM support would be nice. I am also contemplating a future Underscore 2.0, which would necessitate a Backbone 2.0 (at least for me, because I want to keep using Backbone). If I decide to break compatibility between Underscore and Backbone, it will be unfair of me to expect Jeremy to restore it, so I should do that myself when the time comes.

I will ask Jeremy whether I can maintain Backbone as well.

jgonggrijp commented 2 years ago

Update to the above: as I expected, Jeremy replied quickly. He has given me collaborator access, so I can manage issues and pull requests. 🎈

I'll introduce myself, because I'm mostly new to the Backbone issue tracker. I work part time as a scientific programmer and part time as an open source contributor and consultant. I prefer to build my web application frontends using Backbone, Underscore, jQuery (old is gold!), Mustache and i18next. Since discovering Backbone.Radio, I've been consistently using that as well. I've published a couple of smallish plugins for Backbone, backbone-fractal and backbone-machina, as well as two other very small libraries that can be useful when developing Backbone applications, jquery-promise and handlebars-i18next. I have also contributed to backbone-relational and @types/backbone. I'm currently working on a new Mustache implementation.

As I mentioned in the previous comment, I've been maintaining Underscore since 2020. All Underscore releases from 1.10.0 onwards were mostly the result of my contributions (the current release is 1.13.1). During that time, I modularized Underscore, added support for Node.js's particular way of handling ES modules and made many other, smaller contributions, all while working hard not to break anything (there were some bug fixes, which invariably break the code of someone exploiting the bug, as well as some accidental breaks, but I repaired the latter). I also added sponsorship options and a security policy. You can expect all of that goodness to come to Backbone, too, over time.

With that background information, here is my plan in stages:

  1. I'm subscribed to this repository, so any new comment, issue or pull request that comes in from now on is likely to see a fast reply.
  2. Since I'm mostly unfamiliar with the discussions that have taken place in Backbone's issues and pull requests, I'm first going to take my time triaging the open tickets. I might however already make some light code changes and publish a patch release during this period, if I encounter any pressing issues. You can track my progress on this in the project board that I have just opened for this purpose. This stage is likely to take months, also because I'm currently part time studying, so please bear with me and be patient.
  3. Once I've oriented myself, expect some significant code changes within a relatively short amount of time. During this stage I'll address pre-existing high priority tickets and at the very least, modularize Backbone with Node.js ESM support. There will be at least one minor release during this period, which should give a much more up-to-date feel to Backbone.
  4. The remaining legacy tickets will be addressed at a more relaxed pace. During this stage I'll also add a code of conduct, a security policy, sponsorship options and probably a Twitter account (by the way, you can already sponsor my open source work in general through my Patreon). By the end of this stage, Backbone will be in an excellent shape again.
  5. Backbone will finally enter a long-term state of active maintenance, where tickets are handled as they come in. I expect a low code churn, because I believe Backbone is already mostly fine as it is. There may however be an occasional big feature, as well as a major release when Underscore 2.0 comes around.

Questions and comments welcome!

jgonggrijp commented 2 years ago

Update in case anyone is wondering: I'm still at stage 1 of the above list. I expect to dive head first into stage 2 somewhere in the next month or so.

GammaGames commented 1 year ago

Any update?

jgonggrijp commented 1 year ago

@GammaGames Not really. I consider stage 1 more or less finished, but I haven't dived into stage 2 yet, which requires significant focus. The plan is still the same, but I realize it's taking longer than I previously stated. Sorry for testing your patience.

If there is a particular part of the above plan, or an issue or pull request where you'd like to see urgent action, please let me know and I'll see what I can do.

karloscarweber commented 1 year ago

@jgonggrijp Would setting up sponsorships for backbone.js make sense? I'd love to see backbone financially supported by the community.

jgonggrijp commented 1 year ago

@karloscarweber Yes it would! In fact, you can already support my open source work on Patreon. I intend to also set up a Tidelift subscription, like I have done for Underscore. Do you think I should make a priority of GitHub's integrated sponsorship button thingy?

karloscarweber commented 1 year ago

@jgonggrijp Yes. I think it would make it more clear that somebody is supporting Backbone.js. Also I saw Wontache and it's really cool. Good work.

jgonggrijp commented 1 year ago

Alright, I did it. Only Patreon for now; Tidelift requires some additional preparations.

jgonggrijp commented 1 year ago

OK everyone, high time for an update. Some things got in the way, which meant that stage 2 got delayed way more than I expected and hoped for. Good news, though! With helpful cooperation from my employer at Utrecht University, I secured two weeks that I will be able to spend full time on Backbone: July 17-28. I will attempt to start and complete stage 2 within those ten days. Before that time, I will likely already make some small contributions to Backbone that I'm factoring out of another project. And of course, my base level of maintenance never went away: I'm always keeping an eye on the issue tracker and the pull requests.

To those who would like to know a bit more about the backstory of the delay and a full account of my open source plans for this year: please consider joining my Patreon. It already has some backstory and I have a post coming up with my plans. Alternatively, for those who do not need to know the details, but are still looking into other ways to support the development of Backbone financially: sponsorship is now also possible through GitHub and StackAid. Inclusion in the Tidelift subscription is still planned for the future.

jgonggrijp commented 1 year ago

Stage 2 in progress!

chkpnt commented 1 year ago

Patreon reenabled! (EDIT: Switched to GitHub Sponsors due to the fees.)

I won't be able to keep it activated forever since I have to be careful about my expenses, but at least I can support you for a few months.

jgonggrijp commented 1 year ago

Thanks!

jgonggrijp commented 11 months ago

I have completed stage 2 except for #4212, where I'm waiting for a reply, and #4274, which is on hold due to the troubles I described in there. I will now make a soft transition into stage 3. By the end of the week, I will issue a release with whatever has made it into master at that point.

jgonggrijp commented 11 months ago

I just published version 1.5.0 to NPM. This closes my full-time sprint of the past two weeks, which was a breeze! Thanks a lot to @paulfalgout, @GammaGames and everyone else who kept me company. You helped me a lot, even if it didn't feel like much effort.

What's next:

Speaking of Twitter and Mastodon: in my original plan, I suggested creating a Twitter account for Backbone. With the current developments at Twitter, I'm not sure that would be a sustainable move. I could create a Mastodon account instead, or I could just stick to my personal accounts on both platforms for the time being. Opinions and suggestions welcome.

jgonggrijp commented 11 months ago
  • I have requested to become a lifter of Backbone at Tidelift. It will likely take a few days before this becomes official, and I might need to tweak a few things about the repo in order to meet their requirements.

Woops, no, it already happened! https://tidelift.com/funding/github/npm/backbone

jgonggrijp commented 11 months ago

Update on Patreon about the past sprint, with a shoutout to @paulfalgout, @GammaGames and @RayRaz.

https://www.patreon.com/posts/backbone-sprint-87552830

ghost commented 7 months ago

I saw the latest version of Backbone. Thanks for keeping it updated.

Like your point - "It has a clever, timeless design"

I like Backbone for its simplicity. Thought I share my version of Backbone View. Focused on server rendered apps.

https://github.com/splendidexponent/bview