# Modern Julia Workflows ep. 2 - creating packages

**URL:** <https://discourse.julialang.org/t/modern-julia-workflows-ep-2-creating-packages/110649>\
**Category:** Tooling\
**Tags:** package, documenter, github, pkgtemplates, mojuwo\
**Created:** [February 23, 2024, 2:59pm UTC](https://discourse.julialang.org/t/modern-julia-workflows-ep-2-creating-packages/110649 "2024-02-23T14:59:21Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![gdalle](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdalle/32/27854_2.png) [@gdalle](https://discourse.julialang.org/u/gdalle)\
**Post date:** [February 23, 2024, 2:59pm UTC](https://discourse.julialang.org/t/modern-julia-workflows-ep-2-creating-packages/110649/1 "2024-02-23T14:59:21Z")

</div>

A while back, some friends (@jacobusmmsmit @hill) and I started a blog called [**Modern Julia Workflows**](https://modernjuliaworkflows.github.io/), to reveal the hidden secrets of Julia development. I am pleased to announce that this blog is making progress, and that the second tutorial is now complete!  
It will take you from a dirty script to a fully functional and reproducible Julia package, featuring all the niceties we love: GitHub actions, tests, documentation, good style, quality checks, compatibility bounds and much more. I honestly think every Julia user can learn something there, no matter how advanced they are.

[https://modernjuliaworkflows.github.io/sharing/](https://modernjuliaworkflows.github.io/sharing/)

Now we want your ruthless feedback, either here or directly on the GitHub repo. Did you find this useful? What do you think is missing?

> **[GitHub - modernjuliaworkflows/modernjuliaworkflows.github.io: Blog posts on...](https://github.com/modernjuliaworkflows/modernjuliaworkflows.github.io)**
>
> Blog posts on best practices for Julia development - modernjuliaworkflows/modernjuliaworkflows.github.io

Original announcement:

> [@\[Seeking feedback\] Blog post about "Modern Julia workflows"?](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324):
>
> Hi everyone, After watching a [nice video](https://discourse.julialang.org/t/video-how-to-reduce-julias-latency/100298) by @jacobusmmsmit yesterday, I sat down and thought about all the lore that experienced Julia users keep in their heads. How to write and share code properly, which packages to use and when, etc. This accumulated knowledge makes our development experience very pleasant, but it is long to acquire and beginners don’t always know where to look. The official documentation is only part of the story: best practices involve a flurry of external packages, whic…

---

<div class="post-metadata">

**Author:** ![Tbl](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tbl/32/5984_2.png) [@Tbl](https://discourse.julialang.org/u/Tbl)\
**Post date:** [March 12, 2024, 11:52am UTC](https://discourse.julialang.org/t/modern-julia-workflows-ep-2-creating-packages/110649/2 "2024-03-12T11:52:51Z")

</div>

Thanks for this tutorial, I used it already, very useful!

One small thing at the beginning is confusing: you rightly remind packages should end with “.jl” extension, but immediately after that you show example in the terminal “MyAwesomePackage” with no “.jl” at the end.

---

<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:** [March 12, 2024, 12:01pm UTC](https://discourse.julialang.org/t/modern-julia-workflows-ep-2-creating-packages/110649/3 "2024-03-12T12:01:53Z")

</div>

Maybe this is a misunderstanding. The **package name** should not include `.jl` but it is a common convention to append `.jl` to the **repository name**.

---

<div class="post-metadata">

**Author:** ![sjkelly](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sjkelly/32/9280_2.png) [@sjkelly](https://discourse.julialang.org/u/sjkelly)\
**Post date:** [March 12, 2024, 4:40pm UTC](https://discourse.julialang.org/t/modern-julia-workflows-ep-2-creating-packages/110649/4 "2024-03-12T16:40:35Z")

</div>

This is great starting advice! Today I was updating my `newproj.jl` script that has all my PkgTemplates defaults:

```julia

#! /usr/bin/env julia --compile=min 

using Pkg
Pkg.activate(dirname(@ __FILE__ ); io = devnull)
Pkg.instantiate()
using PkgTemplates

function newproj(projname, orgname = "sjkelly")
    tpl = Template(;
        user = orgname,
        plugins = [
            Git(; manifest = false, ssh = true),
            Documenter{GitHubActions}(),
            TagBot(),
            CompatHelper(),
            Dependabot(),
            Codecov(),
            Coveralls(),
            GitHubActions(; linux = true, osx = true),
            Tests(;
                project = true,
                aqua = true,
                aqua_kwargs = NamedTuple(),
                jet = true
            ),
            Formatter(;
                file = "./.JuliaFormatter.toml"
            )
        ]
    )

    return tpl(projname)
end

if !isempty(ARGS)
    newproj(ARGS[1])
else
    println("Usage: newproj <project name> <orgname>")
end

```
