# Collaborative development workflow for multiple packages simultaneously on multiple machines

**URL:** https://discourse.julialang.org/t/collaborative-development-workflow-for-multiple-packages-simultaneously-on-multiple-machines/78942
**Category:** Package Management
**Tags:** question, package, development, workflow, package-management
**Created:** [April 3, 2022, 1:46pm UTC](https://discourse.julialang.org/t/collaborative-development-workflow-for-multiple-packages-simultaneously-on-multiple-machines/78942 "2022-04-03T13:46:58Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![claudio20497](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/claudio20497/32/36602_2.png) [@claudio20497](https://discourse.julialang.org/u/claudio20497)
#### Post date: [April 3, 2022, 1:46pm UTC](https://discourse.julialang.org/t/collaborative-development-workflow-for-multiple-packages-simultaneously-on-multiple-machines/78942/1 "2022-04-03T13:46:58Z")

</div>

Hello,

I’m simultaneously developing two packages, say `mypkgA.jl` and `mypkgB.jl`, where `mypkgA.jl` depends on `mypkgB.jl`. They’re both currently unregistered, and I have to work on two different machines depending on the day of the week.

I’d like to ask you what is the best way to setup the various `Project.toml`s, `Manifest.toml` i.e. what to do when comes to developing workflow in such scenario.

My current setup is the following.

The manifest of `mypkgA.jl` is:

```julia
(mypkgA) pkg>st
     Project mypkgA v0.1.0
      Status `D:\MyDrive\...\mypkgA\development\dev\mypkgA\Project.toml`
	[mypkgB_uuid] mypkgB v0.1.0 `https://github.com/username/mypkgB.jl#main`
	# Registered dependencies...
	

```

As you see, `mypkgA.jl` is `develop`ed (`-local`ly) inside a Google Drive folder, so that I can sync the code between my two machines without cluttering the GitHub commit history. `mypkgB.jl` is also `develop`ed (`-local`ly) inside `D:\MyDrive\...\mypkgA\development\dev`.

To develop `mypkgA.jl`, I have activated a Julia project inside `D:\MyDrive\...\mypkgA\development`, which has the following manifest:

```julia
(development) pkg> st
      Status `D:\MyDrive\...\mypkgA\development\Project.toml`
	[mypkgB_uuid] mypkgB v0.1.0 `dev\mypkgB`
	[mypkgA_uuid] mypkgA v0.1.0 `dev\mypkgA`
	[295af30f] Revise v3.3.3
	# Other registered dependencies...

```

Notice that I `develop`ed (`-local`ly) `mypkgB.jl` before `mypkgA.jl`. Then inside `D:\MyDrive\...\mypkgA\development` I have a script `development.jl`:

```julia
# development.jl
using Pkg;
Pkg.activate(".") 

using Revise
using mypkgA

```

That I use to actively develop the two packages.

**Questions**

1. Is there a better or more idiomatic way to do it? The package implements complex behaviors that make it difficult to proceed with test-driven development.
2. I noticed that although `mypkgA.jl`’s manifest points to the GitHub repository of `mypkgB.jl`, when I make changes to code inside `dev\mypkgB` those changes are recognized by `mypkgA` and available in the `development.jl` _even without pushing those changes to `mypkgB.jl`’s repository_. It is a very nice behavior, but how is that? Isn’t `mypkgA.jl` supposed to use the versions of its dependencies as specified in its manifest?

Thanks in advance.

---

<div class="post-metadata">

### Author: ![halleysfifthinc](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/halleysfifthinc/32/206280_2.png) [@halleysfifthinc](https://discourse.julialang.org/u/halleysfifthinc)
#### Post date: [April 4, 2022, 2:57pm UTC](https://discourse.julialang.org/t/collaborative-development-workflow-for-multiple-packages-simultaneously-on-multiple-machines/78942/2 "2022-04-04T14:57:28Z")

</div>

I have a similar setup for developing personal/unregistered packages across multiple computers. I use Dropbox to sync my `~.julia/dev/` folder by adding a symbolic link from `~.julia/dev/` to a dev folder within my Dropbox.

This way I can `] dev PkgA PkgB` from the default environment of each computer, and any local package dependencies (e.g. PkA depending on PkgB) are resolved appropriately and Revise is able to track everything properly. (And any in progress changes are synced between computers depending on whether I’m in the office or WFH)
