Open smcalilly opened 9 months ago
Glad the project interests you and thank you for the kind words.
I'll admit the website and docs heavily push Nix, but it's not actually necessary. You can also use Docker.
Am I selling Nix or Reactivated?
Here's the thing. One of the hardest parts about using the two together is silly enough: having Python and NodeJS on the same platform. Straightforward on a local dev machine, but much less common on containers. And these days, most people go for containers instead of traditional VPS where they manually install dependencies. As they should.
I'd love to retool the main setup script to just detect if you have NodeJS, NPM and Python installed and give it a go. And maybe update the docs to reflect the escape hatch. But it's quite tricky. Not just the right Python, you need venv
support enabled. And you need postgresql
bindings. And so on. I don't doubt people can figure it out. And adoption increase.
But I predict — maybe incorrectly — that a large volume of issues will be around the setup and dependency management on their individual machines / servers.
Still, valid feedback and worth considering. Any and all adoption is a good thing.
Any additional thoughts on documentation updates would go a long way.
@silviogutierrez oh wow, I totally missed that you can add it to an existing project like that. My bad! I didn't click on the "Existing Projects" menu item, for some reason that title didn't stick out to me to click (maybe I interpreted it as a page with existing projects that use Reactivated? Don't remember). Perhaps you could add that section to the "Getting Started" page? I will follow that and see if I can get it working in one of my apps. A good Django/React setup is needed!
Re: environments, I've been wondering about using Node and Python together too, but it seems like you've thought about this more than me!
@smcalilly If it helps, my team doesn't use Nix either. Instead we maintain a Docker base image that includes both Python and Node:
CircleCI also maintains images with both python and node - see https://circleci.com/developer/images/image/cimg/python#image-tags
For example:
3.12.3
is an image that only has Python
3.12.3-node
is an image that has both Python
and Node
3.12.3-browsers
will have Python
, Node
, Selenium
(might not need it) and different browsers which is useful if you want to run E2E tests
This project is very cool and exciting and fits a real need. I love how it combines React with idiomatic Django.
With that said, I know the philosophy page says it's very opinionated, which it should be. However, I don't think it should be opinionated about dependency tooling. This project should reconsider the nix requirement.
This is the second time I've seriously considered using this library, but the nix requirement is a huge turn off. I remember the first time I learned about, my evaluation was, "Oh man, nix. That would be a significant change to our stack on top of adopting this reactivated thing." I would already be taking a big step by adopting reactivated. In addition to adopting a new opinionated library, I don't think requiring people to adopt a new tool like nix is a good idea for adoption. That's two major changes to my tooling.
Think about it from a business perspective. We don't just go in blind adopting whatever technology we want. We have a mature dependency tool chain, and adopting reactivated WITH nix is a significant change to that tool chain. You have teammates to consider — people with opinions and who are proficient/experts at your existing tool chain. It's similar to when you're working on a python project and you have your pyenv dialed in, then you want to use a new python library but it only works with anaconda.
nix seems really cool and perhaps it's something my team should adopt, but requiring me to adopt it when I'm adopting another new technology adds friction to adopting the actual tool that you created. In my opinion, this will hinder the future of this project.
The project is already blazing a trail with the React/Django combo. It doesn't need to trailblaze with nix. Ideally, it would be tooling agnostic and developers would have the flexibility to use nix or whatever tooling they want. Are you trying to sell us on nix or reactivated? If you're trying to sell us on nix, then sell it with this project but don't require us to use it.
That's my two cents. Thanks for creating a cool, much needed project in the Django ecosystem.