farmOS Crop Plan module v3 alpha release

I’m pleased to announce that we just released the first “alpha” version of the farmOS v3 Crop Plan module! :tada:

Read the release notes in that link for more information and to understand what to expect (and what not to expect :sweat_smile:). It’s safe to install this and start playing around with it, but it’s important to understand that this is still just a proof-of-concept. We have the basic data architecture nailed down (but there’s more to do!) and a pretty nifty Gantt chart visualization, but the UI/UX leaves a lot to be desired, so that’s where we’ll all want to focus our efforts.

My hope is that we can start a community process to identify next steps. I’m working on coordinating a kickoff call, so subscribe to this topic if you are interested in joining. I will post an update when we have a date/time nailed down.

In an ideal world, we can rustle up enough interest and funding to put some real effort into polishing this up over the course of 2024, so that (maybe) it will be useful for 2025 crop planning. In the meantime, note that this can also be used to visualize old data (eg: by creating plans for previous years and add existing plant assets to them).

I know a lot of folks use spreadsheet for crop planning, and are really comfortable making quick updates that way. So one of the next steps I’m excited to work on is a CSV export/import feature, which would allow this module to be used in a hybrid fashion. Imagine doing most of your planning/updating outside of farmOS, but importing the CSV in every once in a while (or at the end of the season) to visualize/archive it. I imagine that can provide some value early on, while we’re still working on building and improving the UI/UX workflows in farmOS itself.

I’m excited to work with everyone on making this great! Feel free to use this topic to brainstorm ideas! :rocket:


Is @paul121 presenting this to the OpenTEAM HCD working group this Wed for feedback? I think someone mentioned that on the last monthly call, but I couldn’t remember for sure.

1 Like

We were going to, but Ankita will be traveling that day, so we are in the process of rescheduling. I will announce the new date as soon as we have one nailed down!


Ah, good to know, I look forward to it!

1 Like

I’ve installed the crop plan but cannot find the fields for “Days to maturity”, “Days to transplant”, and “Days to harvest” in the crop plan.

My install was through downloading and unzipping the file, transferring files, installing the module through the UI and then clearing cache.

1 Like

Click the “View” tab on the page in your screenshot, then click the “Add Planting” button in the top right. This form will let you add an existing Plant asset to the plan, and fill in the “Days to maturity”, “Days to transplant”, and “Days of harvest” fields for that planting (they are per-planting, not per-plan).

Notably, that form also has a link to the Planting Quick Form, if you have that module enabled. Using that, it will redirect you back afterwards and pre-fill the Plant field in that form.

This is far from perfect… it’s barely an MVP in my mind. But it works. I’d love to brainstorm ideas for making this easier. I’m also working on a CSV import feature to make data entry/updates much faster.

Yes, I’m looking forward to the CSV import/export feature.

I just completely missed how this setup worked, thanks for pointing it out.

1 Like

I think this is a really good start but I have two questions. First is if there is any way to edit a planting cause I added a planting with the wrong start date.

The other I don’t know if it is a bug in the upstream gantt chart or not but on Edge 123 on Mac OS. The bug is that when the names is too long the last row is hidden behind the horizontal scrollbar.

1 Like

It would also be excellent if the UI could allow editing directly from the gnatt chart screen.

Some suggestions:
If you grab the middle you could move it right or left (delayed or advanced) while holding the total time the same.
If you grab either end you could adjust that end, editing the total time while holding the opposite date.
Edits could prompt a quick box to add notes for the revision.

Changing colors if the date has past but the task hasn’t been marked complete.

This would help when we hit delays like bad weather and can’t plant on the planned week.

1 Like

There are two “dates”:

  1. The plan stores it’s own “planned seeding date”, which you can edit by clicking on the green shaded area. This will open up a form on the right hand side of the screen with all of the “plan” details for the planting.
  2. The seeding log (which represents the actual event, not the planned) has it’s own date. If you click on the round icon for the seeding log you will be able to open it and edit the date there.

If you made a mistake and want to update both, you have to edit them both separately right now, unfortunately. Perhaps it would be useful to add an option when you are updating the “Planned” seeding date to “Also update the seeding log date”.

Yes that is a bug that I noticed too. I’m not sure what’s responsible for it. I would love a CSS ninja to help figure that out! :smile:

Yea that would be handy! And I think it’s doable because the svelte-gantt library does support it. Check out the demos here:

There are some questions to figure out… because there are numerous entities involved. There is the crop_planting record which stores “planned seeding date”, “days to transplant”, “days to maturity”, and “days of harvest”. And then there are the individual seeding and transplanting logs. So we’ll need to think through all the possible options…

One thing I want to be able to maintain is a differentiation between “planned” and “actual”… so having the option to update one without the other. But also being able to update both sometimes (like in @jorblad’s case above where a mistake was made).

Yea that would be nice. Brings me back to the multiple entities question… :thinking:

+1! I think there is a lot of room for brainstorming style hints to make things understandable at a glance!


I saw the comment in the timeline slider issue from a few weeks ago and it reminded me that I was recently brainstorming on a similar project and came up with an analogous concept for visually linking plans to maps in the UI.

Instead of a primary view of the map, the main view would still be the gantt-style plan. Then a map could be shown with a smaller inset or in a separate panel or even in a drawer. My main point of inspiration is the inset map used in Google Street View, like the one in the screenshot below, where you can move the lil yellow guy around on the map to see the street view from a nearby location.

For a crop plan, or similar chart, I’m thinking you could control which rows are displayed in the based on the zoom level of the inset map, which can be used to compute a bounding box for any records with associated geometries that fall within it. So zoom in, get fewer records that pertain to a smaller area; zoom out, and get more records within a larger area.

This concept may have been more relevant for the other project, where the chart had a much higher density of visual information, and each row was actually unique to a specific location, which ideally would all be grouped by their relative proximity to one another as well. For that use case, it seemed especially helpful to be able to focus on specific rows based on their geometry and location, but perhaps it could be beneficial to certain types of farmOS plans as well.


@mstenta ,hi, can you give installation steps for this module?. i have searched even in that i couldn’t found. thank you.

1 Like

i just changed view setting for plans from table to chart. i got below result.

I like this module.

1 Like

But, windows this module not working. It saying The website encountered an unexpected error. Try again later.InvalidArgumentException: Field transplant_days is unknown. this error. because, in windows plant_type taxonomy term form not showing “Days to transplant” field (farmos 3.2.1).But, “Days of harvest” field not showing in farmos 3.1.2.

There are two ways to install a farmOS module (or any Drupal module generally).

I would recommend using Composer to manage all your dependencies.

If that’s not possible for whatever reason, you can also just drop the module directory into your web/sites/all/modules directory. This won’t work for every module, but will work for farm_crop_plan (as of this writing). Some modules require additional dependencies, which is what Composer will manage and download for you.

Once the module code is in the right place (either via Composer or unpacking the archive into the web/sites/all/modules directory) you can install it by going to [your-rmOS-hostname]/setup/modules in your browser and install the module.

This might be a bug. The farm_transplant module should be optional, but maybe there’s some code in farm_crop_plan that is still implicitly depending on it. If you are able to replicate this error, could you open an issue in Issues · mstenta/farm_crop_plan · GitHub and describe the steps you took? Thanks!