# If I clone a Julia package from git, should the local folder have the ending .jl?

**URL:** <https://discourse.julialang.org/t/if-i-clone-a-julia-package-from-git-should-the-local-folder-have-the-ending-jl/137522>\
**Category:** General Usage\
**Tags:** question\
**Created:** [June 9, 2026, 10:05am UTC](https://discourse.julialang.org/t/if-i-clone-a-julia-package-from-git-should-the-local-folder-have-the-ending-jl/137522 "2026-06-09T10:05:22Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [June 9, 2026, 10:05am UTC](https://discourse.julialang.org/t/if-i-clone-a-julia-package-from-git-should-the-local-folder-have-the-ending-jl/137522/1 "2026-06-09T10:05:22Z")

</div>

I am a bit confused:  
If I clone a package using the URL provided by GitHub (see picture)

 ![image](https://global.discourse-cdn.com/julialang/original/3X/6/e/6e09071964fa3bf39c6f0d0cd3378d5e812d653e.png)

using

```julia-auto
git clone https://github.com/OpenSourceAWE/KiteUtils.jl.git

```

I get a local folder named `KiteUtils.jl`.

If I do `]dev KiteUtils` I get a local folder with the name `KiteUtils`.

Should the source code of a package in a local git clone have the ending `.jl` or not?

---

<div class="post-metadata">

**Author:** ![kahliburke](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kahliburke/32/208472_2.png) [@kahliburke](https://discourse.julialang.org/u/kahliburke)\
**Post date:** [June 9, 2026, 10:08am UTC](https://discourse.julialang.org/t/if-i-clone-a-julia-package-from-git-should-the-local-folder-have-the-ending-jl/137522/2 "2026-06-09T10:08:51Z")

</div>

The behavior you see is how it works. Does it matter whether the directory has the `.jl` on it or not? Not really. I generally put make my packages with the `.jl` but when you `]dev` them they end up in `.julia/dev/Package` without the extension.

🤷

---

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [June 9, 2026, 10:11am UTC](https://discourse.julialang.org/t/if-i-clone-a-julia-package-from-git-should-the-local-folder-have-the-ending-jl/137522/3 "2026-06-09T10:11:38Z")

</div>

> [@kahliburke](#):
>
> Does it matter whether the directory has the `.jl` on it or not?

Yes, it does matter. I want to **dev** a package into the folder ~/repos (where the packages I work with live), and I want that **dev** does not do a fresh clone if an up-to-date clone already exists at that location. Could that work?

It cannot work if the folder names are different.

---

<div class="post-metadata">

**Author:** ![kahliburke](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kahliburke/32/208472_2.png) [@kahliburke](https://discourse.julialang.org/u/kahliburke)\
**Post date:** [June 9, 2026, 10:16am UTC](https://discourse.julialang.org/t/if-i-clone-a-julia-package-from-git-should-the-local-folder-have-the-ending-jl/137522/4 "2026-06-09T10:16:03Z")

</div>

If you clone the repo yourself, you can use `]dev <path to repo>` and it will reference it there instead of the default `~/.julia/dev` directory.

---

<div class="post-metadata">

**Author:** ![GunnarFarneback](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gunnarfarneback/32/1827_2.png) [@GunnarFarneback](https://discourse.julialang.org/u/GunnarFarneback)\
**Post date:** [June 9, 2026, 11:17am UTC](https://discourse.julialang.org/t/if-i-clone-a-julia-package-from-git-should-the-local-folder-have-the-ending-jl/137522/5 "2026-06-09T11:17:12Z")

</div>

> [@ufechner7](#):
>
> Should the source code of a package in a local git clone have the ending `.jl` or not?

It doesn’t matter to Julia. It’s only a question of what works best for your workflows.

---

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [June 9, 2026, 12:08pm UTC](https://discourse.julialang.org/t/if-i-clone-a-julia-package-from-git-should-the-local-folder-have-the-ending-jl/137522/6 "2026-06-09T12:08:55Z")

</div>

> [@GunnarFarneback](#):
>
> It doesn’t matter to Julia.

It matters. I now do the following:

- checked out all my dependencies into the folder ~/repos
- renamed them to the package name without `.jl` ending
- added the line `export JULIA_PKG_DEVDIR=/home/ufechner/repos ` to my `.bashrc` file

Now I can do:

```julia-auto
pkg> dev KiteUtils

```

and it uses the code that is already checked out in the folder `~/repos/KiteUtils`.

It seems to work, but only if the package folders do not have the `.jl` suffix.

---

<div class="post-metadata">

**Author:** ![goerz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/goerz/32/3269_2.png) [@goerz](https://discourse.julialang.org/u/goerz)\
**Post date:** [June 9, 2026, 12:12pm UTC](https://discourse.julialang.org/t/if-i-clone-a-julia-package-from-git-should-the-local-folder-have-the-ending-jl/137522/7 "2026-06-09T12:12:35Z")

</div>

> [@ufechner7](#):
>
> If I do `]dev KiteUtils` I get a local folder with the name `KiteUtils`.

I’d consider this at least a “friction point” that should be reported at [Issues · JuliaLang/Pkg.jl · GitHub](https://github.com/JuliaLang/Pkg.jl/issues)

Maybe not a “bug” per se, but I find it surprising and potentially inconvenient that when `]dev KiteUtils` creates a checkout, the resulting folder is different from when I clone the repo first and then `]dev` the checkout.

---

<div class="post-metadata">

**Author:** ![GunnarFarneback](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gunnarfarneback/32/1827_2.png) [@GunnarFarneback](https://discourse.julialang.org/u/GunnarFarneback)\
**Post date:** [June 9, 2026, 12:13pm UTC](https://discourse.julialang.org/t/if-i-clone-a-julia-package-from-git-should-the-local-folder-have-the-ending-jl/137522/8 "2026-06-09T12:13:36Z")

</div>

That’s exactly what I mean with what works best for your workflow. Personally I always develop packages by path.

---

<div class="post-metadata">

**Author:** ![JoshuaLampert](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joshualampert/32/205964_2.png) [@JoshuaLampert](https://discourse.julialang.org/u/JoshuaLampert)\
**Post date:** [June 9, 2026, 12:22pm UTC](https://discourse.julialang.org/t/if-i-clone-a-julia-package-from-git-should-the-local-folder-have-the-ending-jl/137522/9 "2026-06-09T12:22:39Z")

</div>

I agree with @ufechner7 and @goerz that this is an annoying friction point. I also always delete the .jl after cloning a repo to my `JULIA_PKG_DEVDIR`.

> [@GunnarFarneback](#):
>
> That’s exactly what I mean with what works best for your workflow.

The issue is that the preferred workflow by @ufechner7 (and also me) is currently not possible. Our preferred workflow would be to clone a repo to `JULIA_PKG_DEVDIR` and after that directly do `]dev PackageName`, which should then pick up the correct package.

---

<div class="post-metadata">

**Author:** ![GunnarFarneback](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gunnarfarneback/32/1827_2.png) [@GunnarFarneback](https://discourse.julialang.org/u/GunnarFarneback)\
**Post date:** [June 9, 2026, 12:30pm UTC](https://discourse.julialang.org/t/if-i-clone-a-julia-package-from-git-should-the-local-folder-have-the-ending-jl/137522/10 "2026-06-09T12:30:20Z")

</div>

For what it’s worth you can clone to whatever name you prefer.

```julia-auto
git clone https://github.com/OpenSourceAWE/KiteUtils.jl.git KiteUtils

```

But if you have already set `JULIA_PKG_DEVDIR` it seems easier to just do `]dev URL` in the first place instead of doing an external git clone?

---

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [June 9, 2026, 12:40pm UTC](https://discourse.julialang.org/t/if-i-clone-a-julia-package-from-git-should-the-local-folder-have-the-ending-jl/137522/11 "2026-06-09T12:40:21Z")

</div>

> [@GunnarFarneback](#):
>
> But if you have already set `JULIA_PKG_DEVDIR` it seems easier to just do `]dev URL` in the first place instead of doing an external git clone?

This should work if the package is already registered. But then, after `pkg> dev MyPkg`, I still need to switch to a new branch for my fixes (`git switch -c myfixes`).

---

<div class="post-metadata">

**Author:** ![GunnarFarneback](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gunnarfarneback/32/1827_2.png) [@GunnarFarneback](https://discourse.julialang.org/u/GunnarFarneback)\
**Post date:** [June 9, 2026, 12:44pm UTC](https://discourse.julialang.org/t/if-i-clone-a-julia-package-from-git-should-the-local-folder-have-the-ending-jl/137522/12 "2026-06-09T12:44:58Z")

</div>

You can develop from a URL regardless whether your package is registered. And sure, Pkg doesn’t help you with all git matters, but the cloning becomes convenient, especially if the package is registered.
