Looking for guidance on farmOS crop planning & conventions (farmer-led project)

Hi everyone :waving_hand:
I hope it’s OK to share something a bit personal and a bit technical.

I’m Martin, a farmer in the UK running a small ecological, direct-to-public farm. We use farmOS at the core of our operation, and I genuinely believe it’s one of the most important open-source tools agriculture has.

Over the last year I’ve been building an open-source project called Symbiosis, very deliberately around farmOS — not instead of it. The aim is to extend farmOS into areas that small, direct-selling farms often struggle with most: crop planning tied to reality, and integration with ecommerce (subscriptions, orders, packing, delivery).

The repository is here if it helps with context:
https://github.com/Middleworld/symbiosis-farm-management

I should be upfront: I’m not a professional developer. I’m a farmer who’s “vibe-coded” this with a lot of determination, a lot of late nights, and a lot of help from AI. I’ve also had a serious neck operation recently, which has pushed me more into admin/software work than I ever planned — but I’m not about to give up on this.

What does work

  • WordPress + WooCommerce is largely working: subscriptions, orders, admin workflows, and a custom admin layer that normalises orders and produces packing / harvest outputs.
  • farmOS at the centre: the admin app embeds the farmOS desktop in an iframe (same domain), so staff use one login and move between farmOS and the rest of the stack without separate OAuth flows. Harvest logs and other farmOS views are embedded where needed.
  • Succession planning (Symbiosis side): backward planning from harvest windows using live farmOS taxonomy (plant types, varieties, harvest windows, season types), planning by bed and date, and batch creation of seeding / transplant / harvest logs in farmOS.
  • Crop planning & harvest views: planting charts, crop-plan timeline, embedded farmOS harvest logs, and stock syncing.
  • Field Kit + quick forms integrated into the workflow.
  • Shared vocabulary: taxonomy synced from farmOS so planning, admin, and harvesting all use the same terms.

Overall, the architecture feels sound, and farmOS is very clearly the right “farm operating system” at the centre.

Where I’m stuck

The hardest part — and the part I can’t realistically finish alone — is the farmOS side, especially:

  • crop-planning gaps (I know the existing crop-planning add-on is incomplete — if it wasn’t, I wouldn’t be here),
  • aligning real-world, bed-based planning with farmOS entities and logs,
  • clean ways of importing or syncing planning data (CSV / JSON:API),
  • and generally finishing that last 20% that only people who really know farmOS internals can see clearly.

Conventions framing

One thing that’s become clearer to me is that Symbiosis is really acting as a conventions layer — an opinionated, documented way of using the existing farmOS data model for bed-based, ecological, direct-market farms — rather than something that belongs in farmOS core itself.

In that sense, I don’t see Symbiosis as competing with or replacing farmOS crop planning, but as a possible reference implementation of a crop-planning convention, with tooling built around it. I’d really value guidance on whether this framing makes sense, and how best to align what I’ve built with farmOS’ conventions-first approach.

What I’m asking for

I’m not looking for someone to take this over, redesign it, or turn it into a product.

What I am hoping for is:

  • advice from people who know farmOS well,
  • pointers on the “right” way to model or extend crop planning,
  • and possibly one or two people interested in collaborating or reviewing specific pieces of the farmOS integration.

This is an open-source, farmer-led project intended to benefit exactly the kind of farms farmOS exists for — small, ecological, direct-to-consumer growers who sit awkwardly between “market garden” and “enterprise ag”.

I’ve put too much of myself into this to walk away, and too much respect into farmOS to try and hack around it blindly.

If this resonates with anyone here, I’d be incredibly grateful to talk — even if it’s just to sanity-check direction.

Thanks for reading,
Martin :seedling:

2 Likes

Hi Martin! Thanks for sharing, and for the kind words about farmOS! This sounds like an exciting project! And it sounds like the design and responsibility of each piece makes sense! :slight_smile:

Great! This is exactly the kind of thing I’d like to see sprout up in the community: opinionated and prescribed workflows for a specific use-case built on top of the data model.

Happy to point you in the right direction where I can, or brainstorm next steps in the Crop Plan (or other) module(s). If you’re able to hop into one of the weekly dev calls, or the farmOS chat room, I can bring you up to speed on where things stand.

Thanks Michael — that’s really helpful, and I appreciate the guidance.

One practical issue we’ve run into, which might help frame some of our questions:

We’re struggling to find usable API touchpoints around crop planning itself. In other areas of farmOS, we’ve been able to interact cleanly via the API, but crop planning feels much more UI-driven.

Our usual approach of embedding or extending functionality via iframes hasn’t worked well here, and at the moment we can’t see a clear way to reliably send data into or out of crop planning through the API.

Is crop planning currently intended to be API-addressable, or is it still primarily designed as an internal UI workflow? And if API interaction is the right direction, are there specific entities or patterns you’d recommend building against (or avoiding) at this stage?

We’re keen to stay aligned with intended conventions rather than forcing an integration that might fight farmOS long-term.

1 Like

If you’re talking about the farmOS Crop Plan module, specifically, then I wonder if you are running into this known issue:

Tl;dr: it isn’t currently possible to create plan_record entities via the API.

This thread has some good general information about the crop plan data model, as well as a link to that issue, and a temporary workaround that you can use to patch the issue for now. We still need to come up with a proper long-term fix.

I’m curious what issues you ran into with “reading” data… that should work normally. But it is important to understand how the crop plan models things. It uses a plan entity (of bundle crop) to represent the plan itself, and then it uses plan_record entities (of bundle crop_planting) that connects the plan to individual asset entities (of bundle plant). The plan_record also contains some metadata about that relationship, which is specific to the plan, including planned seeding date (seeding_date), expected days to transplant (transplant_days), expected days to maturity (maturity_days), and expected harvest window (harvest_days). These represent the “planned” or “expected” lifecycle of each plant asset… but the plant asset itself, and the logs associated with it, represent the “actual”.

More information about the crop plan module in general, if you haven’t seen it, is here: