Planning a new, modern and stable NewPipe #10118
Replies: 64 comments 120 replies
-
To be completely honest? It's a lose-lose. This is a tale absolutely as old as time and no matter which decision you go with, it's going to seem like everyone is unhappy. I say this both as a fellow OSS maintainer and as an Android developer. I know how easy it is to fall into the pitfall of "we'll write it GOOD this time!" but that almost never works out as well as we hope it does. The alternative approach of replacing your wheels while you're driving is harder to manage, though. So my vote is for the big rewrite. Move the current NewPipe into legacy mode, shifting gears to pretty much only fix the worst bugs and get cracking on something new. At the very least, it'll be more rewarding to develop and you'll have an easy comparison metric. There's something to be said about the delight you feel loading up your old and new versions of the app against each other and seeing your new code work so much better than your old. Plus, a more modern code could entice more contributors. Realistic, I know it almost never does but it's at least one less barrier to entry, right? As a user, I think NewPipe is in a fine place right now. Yes, it has bugs but it's a completely free app that lets me access so many different services. Just keeping the current feature set is more than enough for me. Although of course I'd love to see a NewerPipe. 😂 I would also remind you that it's generally the most annoying users that are the loudest. I know you all have gotten a lot of flack for the amazing service you've provided but, as much as possible, try not to let the loudmouths influence your decision here. I appreciate all of the difficult work that you all have done! Whatever the choice is, I hope you all are taking good care of yourself and your mental health! Burnout is serious! |
Beta Was this translation helpful? Give feedback.
-
Going off of the above comment's suggestion against Jetpack Compose, is there any interest in the consideration of Flutter? As a big Flutter enthusiast myself, I would be interested in contributing heavily if that choice was made, but I do not have any knowledge of Jetpack or kotlin. |
Beta Was this translation helpful? Give feedback.
-
I'm just an end user of newpipe, if you guys wanna rewrite sure go ahead. You will have more freedom and better choices to make, currently there are alternative so users aren't left stranded. Better to rewrite now than to abandon the project 2 years later cause the code was clunky. |
Beta Was this translation helpful? Give feedback.
-
I vote for a rewrite. As a user, I'm really excited for a new development direction that could make Newpipe more stable and featureful. As a dev with some Jetpack Compose experience, I'm excited for a new maintainable, shinier codebase (even though I have too many side projects already...). I'd actually advise against thinking about the new codebase's design too much. Overthinking can be as bad as "underthinking", and if the whole thing isn't a ball of spaghetti, it's never too late to rip out a component and start over. Not every future feature needs to be accomodated from the start. Good luck :) |
Beta Was this translation helpful? Give feedback.
This comment was marked as off-topic.
This comment was marked as off-topic.
-
I'm a web developer, with experience in Kotlin and big bang refactors, and I would say try for a middle ground between all-at-once and piecemeal. (We should) Create a plan for large chunks of the code that need refactoring and work on those large chunks (the player was a good example). This ought to help make progress, while still avoiding the perpetually incomplete rewrite and the splintering of the user base. That all being said, I don't have too much Android experience, so I may not be considering the issues that arise as a result of Android-specific challenges. |
Beta Was this translation helpful? Give feedback.
-
I have a decent experience developing with Jetpack Compose and I'm interested in to be a part of the rewrite of NewPipe project team. |
Beta Was this translation helpful? Give feedback.
-
I work as a professional Android developer. I was the second or third ever contributor to NewPipe back in the day -- As someone who's worked on large legacy Android codebases, I recommend against a complete rewrite. Android Studio has great tools for converting Java code to reasonable Kotlin (which doesn't need much, if any tweaking by hand), and Kotlin's interoperability with Java is great. I migrated a large closed-source app this way myself over a period of months. As for Compose, I've not used it much myself yet, but from what my colleagues tell me, A big rewrite is nearly the same amount of work as went into writing the original app. And although you've already got the user requirements captured because you're mirroring the functionality/design of the existing app I just don't think it's a feasible amount of work. As a compromise, you could completely rewrite the parts of the app that are the worst currently (worst performing, most buggy, worst for devs to work with, whatever you choose). A caveat to my experience: I've worked on big Android apps, All I know is that whether it's an open or closed source app, developer time is always a limited resource. Of course there is the fact that working on the existing codebase is becoming rather difficult -- Another suggestion I would have is to see if you can convince some of the former disgruntled devs (who now maintain their own forks) to come back and contribute to the main app. Passion to develop sounds like the real chokepoint here -- if you can make it fun to work on newpipe, you will naturally attract devs. A shiny new codebase is definitely the right end goal, but going about it by a big rewrite may leave you stuck both for literally YEARS. |
Beta Was this translation helpful? Give feedback.
-
I think that a complete rewrite of the app is simply infeasible. Some parts could use a full rewrite (e.g. just get rid of GigaGet already), while other things can be gradually improved. I also think that the extractor is mostly fine, except for Info that should just go away, and it could be gradually converted to Kotlin. |
Beta Was this translation helpful? Give feedback.
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as off-topic.
-
I think a full rewrite would be nice, but: You can't, and should not do it day and night, because burn out will get you. There are solutions: The only viable solution is Louis Rossmann and his FUTO program. I know it is not a miracle but I am sure that He would gladly help with money and what is necessary. If you don't want to ask him just tell me and I will send a message! (I don't know him, but I can write.). |
Beta Was this translation helpful? Give feedback.
-
My primary concern with an entire re-write is that the energy slowly runs out before the rewritten app is ready to be released. Users start abandoning the old app because it's not working well anymore and it feels abandoned to them (and it's obviously much easier to lose users than to get them back). Which on the other hand disincentivizes developers. |
Beta Was this translation helpful? Give feedback.
-
As the maintainer of Opentogethertube, and a fellow student with a life: Do not rewrite it from scratch. Upgrade it piecemeal. Don't just throw out battle tested code outright. OTT has seen it's fair share of module rewrites, and there are always bugs that come up as a result. But, it's better to find and fix those bugs early on. With a total rewrite, your users are just going to find all those bugs all at once, and that's only if you manage to complete it. (Of course it would be better to not have bugs at all, but that's unrealistic.) For example, OTT recently upgraded from Vue 2 to Vue 3. The details aren't important. I slowly tweaked and shifted things around to prep the codebase for the switch, and eventually I was able to do it in an admittedly fairly large, but much more manageably sized PR. Large rewrites are exhausting, and it's so much easier to miss stuff. |
Beta Was this translation helpful? Give feedback.
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as spam.
This comment was marked as spam.
This comment was marked as off-topic.
This comment was marked as off-topic.
-
As noted in the blog post of 0.26.0 and 0.26.1 releases, here is our final decision:
We will so proceed with the incremental option, and rewrite progressively the app. The complete rewrite option would have been really hard to do, as we currently don't have the resources to do so. Like I wrote above, some parts needs to be replaced and thought again entirely, like the player. Unfortunately, the team isn't currently able to handle the rewrite now, if you read the State of the Pipe 2023 blog post, you may have understood that the team is in a lack of maintainers. Two developers who are currently pretty busy won't be enough to make the rewrite progress in a reasonable way, we need more active developers (it would be awesome if we can get the double or the triple of the current amount). So like written in the post, "[i]f you want to step in and help [us] with maintaining the app, e.g. reviewing PRs, developing code or doing community management, please get in touch!". We will let you know when we start the rewrite of NewPipe, but you can already help us by trying to provide fixes for bugs that are in the current app. Remember that we stated in the post of this discussion and in the blog post I linked above that we still have a few major releases to complete before starting the rewrite. Thank you for everyone who made a constructive feedback, it is invaluable! |
Beta Was this translation helpful? Give feedback.
This comment has been hidden.
This comment has been hidden.
This comment has been hidden.
This comment has been hidden.
This comment has been hidden.
This comment has been hidden.
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as off-topic.
-
Hi! I have no experience with app development, but I could help with the extractor if there is re-writing/porting needed there. Let me know if you need an extra pair of hands. I used to write java, but have written a lot of C# recently, so I think the transition wouldn't be that hard. Would just need a kick start with the code base. |
Beta Was this translation helpful? Give feedback.
-
Hey everyone! I'm a relatively inexperienced dev overall, but I have some experience writing Kotlin. I use NewPipe nearly every day, and I'd love to be able to find a way to contribute to the migration. Is there anyone willing to help point me in the right direction so I can get started? I'm pretty new to open-source contribution. |
Beta Was this translation helpful? Give feedback.
-
Hi, I am a experience Android developer (more than 10 years) and I discovered this thread now. I started using NewPipe in 2023 until now. I work with huge apps and I am working on a similar problem like here. Huge app done using Presenters binded to their respective Fragments. I would say that is impossible to rewrite the entire code, or start from zero. The app should keep both architectures and you can migrate by pieces. First, you decide how you are going to split into modules and you rewrite the code of each modules over time. I am working with MVVM, Kotlin, Compose, ViewModels, Coroutines, Workers, UseCases, Repositories, etc. It is not easy and it takes a lot of time. Pay attention that now Apple could be forced to open the iOS ecosystem. So it is interesting to take a look at the Kotlin multiplatform project. I think it will be a powerful tool and it will grow more overtime. You can structure your app to work well with Android and have a good portion done for iOS as well. Don't waste your time thinking about Flutter. I would like to give more details about the structure but I don't have too much time. Try to keep one small responsibility for each UseCase and keep in mind that the UseCase needs to be modular and isolated. It will be easier to maintain and test. Use Mockk for testing. Really good. |
Beta Was this translation helpful? Give feedback.
-
Not all that much experience but my 3c:
I'm probably biased (I prefer Java to Kotlin :) ) but I'm not really fond of Material3 or Kotlin. Recently I've been dabbing more and more in Kotlin and Jetpack Compose (as part of the rewrite to boot) and I'm not that impressed. While Kotlin brings some nice things (handling nullness) I find it to be all over the place and add lot's of "syntax sugar" that in the end makes the code more convoluted and not easier to dive it - I usually avoid contributing to FOSS apps that migrated to Kotlin/Compose as they are less friendly to "occasionally hack"). As for the complete rewrite, from the experience I'd say it would generate a lot of new bugs :| On the other hand, Java is getting more and nice features and thanks to project mainland (https://android-developers.googleblog.com/2023/02/first-developer-preview-android14.html) I feel that android will stop being stuck in ancient Java versions… |
Beta Was this translation helpful? Give feedback.
-
Hi, creators! I'd like to give my input wrt the rewrite. The current app design is near-perfect. Only the player could be more ergonomic. Moving to "material you" will be a mistake as it's one of the worst designs we've witnessed. A lot of people are now recognising that user interfaces have gone painfully worse since the Windows 7 era. We cannot have less of nature on our screens. Frutiger Aero is one way! |
Beta Was this translation helpful? Give feedback.
-
I am new to android developement , i have experiance in java, I would like to contribute to development @opusforlife2 |
Beta Was this translation helpful? Give feedback.
-
Hey guys. You might have noticed the somewhat slower and haphazard updates to NewPipe for the last few releases. The thing is, NewPipe was started, like so many others in FOSS, as an enthusiast project. It's been over 7 years since then, and the age of the codebase is starting to show through spaghetti code, outdated UI, bad design choices and instability.
It has gotten to the point that we're having difficulties even maintaining the current code and fixing bugs, let alone adding new features, due to complex interconnections and lack of proper modularity. Progress has been slow, since developers were focused on fixing nasty bugs. Often users requested features that would make sense, but nobody had the time (and, sometimes, knowledge of the codebase) to implement them.
To mitigate the issues we initially tried to do incremental refactors of various components. Take for example the player, which has often been deemed "a hot pile of garbage": it underwent a couple major Pull Requests that restructured it while maintaining all features. Although now the code is a bit better, new crashes and unwanted behaviors have arisen, because the interaction between the old and the new code is not optimal. We tried again and again to debug the problems, without luck.
At the moment NewPipe is relying on libraries and components that have become outdated, which might not only drive users away from the app, but also push away developers wanting to get some experience on new technologies. We need to migrate to Material Design 3, Kotlin and Jetpack Compose, and unfortunately doing so basically requires rewriting everything.
So, we've discussed and discussed this ad nauseam. We're very sure the old code needs to go, no matter what, to be replaced by a modern and professional codebase. But we can't decide on the approach to get there.
Anyone who's been in the FOSS community for long has come across at least one or two failed rewrites or refactors, and we don't want to repeat such tragic history. We believe NewPipe really has the potential to be a staple app in people's devices, if only we could get across this massive hurdle and come out the other side relatively intact.
What we need from you guys is advice. Preferably, experienced advice. Do we just dump the old code into maintenance mode and start afresh? Or replace it piece by piece like the Ship of Theseus? A combination of the two? Or something else entirely?
Please let us know. Also, if you don't have any directly helpful advice, please, please restrict yourself to just upvoting or leaving a thumbs up instead of commenting, so that there is less noise and more info in the thread. We all know how fantastic walls of text are at putting us off from reading, and we'd like to avoid that.
Also, if you are experienced in Android mobile development and would like to help us out with the rewrite, be sure to reach out to us! We will be using the most modern components whenever possible, as detailed below, so it is sure going to be a good learning experience for everyone involved. As a first step, please join the IRC from the ReadMe.
By the way, don't worry, all currently open PRs that introduce big features will be merged in NewPipe 0.26.0 or future releases of the current app. See the related Project and also take a look at the plans we have for the current app below.
Thanks! The NewPipe team.
What approach do we want to use?
Similar or common issues are being raised increasingly in the Extractor repo, so these questions could be considered for the Extractor too.
Key elements we should use and not forget during development
Good design thinking: possibility of contacting UI/UX designers and using community feedback to create new app designs:
=> use Material 3 design system
=> think about accessibility and form factors
Asking feedback from the community and taking it into account where that's relevant: results of a subreddit poll returns around 80% in favour;
Better organization: good use of Projects, which we would use to plan what should be in the next releases, what is in progress, what's remaining
Try to get new and experienced people into the team: most of us are students passionate about technology, but:
we have other things to do in our life, and some or all of us may leave the NewPipe project at some point;
we can't know everything, and we lack knowledge in some domains.
Apply more agile principles such as doing smaller but more frequent release cycles.
For the development by itself:
ViewModel
s;Decide what we want to ship in the current app
highly requested features, mostly the ones which are blockers for content accessibility (also see the related Project):
=> work of these features probably needs to be done by the team due to code and/or approaches from external contributions not quite meeting our standards
bug fixes and regressions, in particular the most annoying ones (we can't guarantee we will be able to debug everything though, for the aforementioned reasons):
ViewHolder
s not attached crash;Beta Was this translation helpful? Give feedback.
All reactions