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

Prisma Client Go: Resurrection #860

Closed
steebchen opened this issue Jun 13, 2023 · 2 comments
Closed

Prisma Client Go: Resurrection #860

steebchen opened this issue Jun 13, 2023 · 2 comments

Comments

@steebchen
Copy link
Owner

steebchen commented Jun 13, 2023

Dear Gophers,

As of today, the Go client has been transferred from @prisma to my personal GitHub @steebchen (thank you @prisma and especially @janpio!), and I’m happy to announce I am back to working towards a production-ready Go client (right now I would consider it alpha).

I will maintain the Go client myself from now on. If you are interested in more features getting built or want to support my work, feel free to sponsor me, or ask your employer about it. The Go client itself, including what it depends on such as the Prisma core tools, will obviously always remain open source (everything, including the full docs, are licensed under Apache 2).

To get started right away, read the quickstart tutorial or read the upgrade manual if you already use the client.


The long story

I joined Prisma to work on the Go client in 2020, and it was great. However, it was clear even back then that it was an experiment, and the work could be stopped at any time. Prisma’s vision was supporting many databases and many languages with Prisma sitting in between, which is why money and work were invested in the Go client in the first place, but unfortunately the budget and priorities couldn’t match this goal in the short term. Eventually, Prisma decided to stop the work on the Go client, which is why Prisma and I parted ways on good terms. While I and many others were disappointed, please understand that the decision was not taken lightly, and it had to be done, as the company has investors, other goals, and doing what Prisma does is incredibly time-consuming. I also want to say that working at Prisma was one of my best work experiences; all people there are just nice and delightful to work with. Anyway, since then, I sometimes did some stuff on the Go client, but it hasn’t really gotten mine or anyone else’s attention. It was in a weird state and not owned by anyone; still under @prisma’s org, but not maintained.

A big reason why the Go client didn’t take off was probably because it was never really launched as production-ready, which was also the number one critique, especially after it was stopped being maintained. I strongly believe that the Prisma Go client is solving a real problem and would be liked by many people working with Go, and that more people and companies would use the client, if it would be stable. I also believe we partially focused on the wrong things, but I'm trying to learn from it and applying it from now on.

This is why I am hereby reviving the Go client under my own GitHub, and hoping we can improve the database experience with Go for everyone.

Since I’m just getting started on this, note that I am not working full time on this, and I am looking for sponsorships for the Go client to make it economically viable. I believe that the core features work reliably, but there are so many great features which I want to implement, but don’t have the time to work on it, as I’m not paid for it anymore. If you are interested in a sponsorship, I also combine this with dedicated help on setting up the Go client in your company and ongoing support and bug/features prioritization. The more sponsors I can find, the more time I can allocate to the Go client.

The biggest goal for me right now is to make this transition work and work towards a “production-ready” Go client. I wouldn’t call it experimental anymore, maybe “alpha” would fit best at this time, and the next step would be a beta.
At the same time, I will think about some monetization, because in the end that is the only viable way to develop new features, especially larger ones.
The Go client itself, the code, issues and discussion will obviously always remain free; the code itself is also licensed via Apache 2 (as is all Prisma source code, it’s similar to MIT) and it will always remain so.


Short-Term Roadmap

I already upgraded to the latest Prisma version and adapted all the internal changes. Note that you now need to use the package github.com/steebchen/prisma-client-go and upgrade if you have an existing Go client project.

  1. Maintenance. This includes critical bug fixes and Prisma CLI & Engine updates (this can lack behind though, as the Prisma team is not waiting for my approval, and I have to adapt for any breaking changes on my own timeline)
  2. Publish standalone docs page with search – this already live at https://goprisma.org/
  3. Prioritize and potentially clean up existing bugs and features
  4. Internally: Automatically publish Prisma CLI binaries, this will be useful for other custom clients such as Python, Rust and Dart clients – already done via Automatically publish new Prisma CLI binaries #859
  5. Try to work on some useful features such as better Error handling or typed count queries, but this depends on my time (if I get more sponsorships, I’ll be able to dedicated more time to it)
  6. Get the word out. I’m not particularly good at marketing, but I will try to think of some ways to get more users to use the client, and ideally find some sponsorships, so I can dedicate more time to all of this

Long-Term Roadmap

Bigger items in the roadmaps which don’t have priority, but I eventually want to work on:

  1. UX improvements. For example, improving the onboarding by making prisma init work with the Go client
  2. Error handling (this is lacking behind due to the Prisma core)
  3. Improve edge cases and some uncovered compiling code which will fail at runtime. This might be tricky as Go’s type safety is not very flexible, even with generics
  4. Support native ARM usage. The Go client and the CLI work on ARM (M1&M2) Macs in general, however there might be issues when combining with docker #809
  5. Use go:embed for smaller go binaries #477
  6. Marketing, maybe. Would be great if the Go client shows up if people search for “Go ORM” or “Golang db client” etc.
  7. Much more, this is an ongoing thing :)

The next big goal would be to make the client “production-ready”. Since production-ready doesn’t have any specific meaning, it will be an ongoing process to monitor usages of the Go client in the next few months and figure out if there are any major issues or blockers. I’ll probably make a separate issue about this in the coming weeks with items to work towards to.

There are some To-Dos which I would love to have in the future, but don’t have the capacity for as they take a lot of time. Feel free to sponsor me for higher chances of me actually working on this.

  1. Interactive Transactions (basic transactions are already supported, including with raw queries)
  2. Rust/CGO bindings for the Prisma Engine (this is a massive task which would need a big sponsor). It needs low-level work not just in the Go client itself, but also in the Prisma Engines, but it is super nice to have and will improve performance, stability and overall UX)

Please let me know what you think, if you want to contribute, and what features you’d like to see!

Spread the world, tell your employer about this, the bigger this gets, the more we can improve Go’s database ecosystem.

@Southclaws
Copy link

This is great news, thank you for your ongoing work on the client and I’m looking forward to seeing this amazingly useful tool grow!

I can maybe help out with the marketing side and SEO too!

@steebchen
Copy link
Owner Author

Closing this as the transfer is done and a community-maintained Go client is the default state now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants