# \[Seeking feedback\] Blog post about "Modern Julia workflows"?

**URL:** <https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324>\
**Category:** Tooling\
**Tags:** tutorials, blog-post\
**Created:** [June 14, 2023, 10:32am UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324 "2023-06-14T10:32:09Z")\
**Posts on this page:** 20\
**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:** [June 14, 2023, 10:32am UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/1 "2023-06-14T10:32:09Z")

</div>

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, which are constantly in flux. I learned a lot from blogs like [https://viralinstruction.com/](https://viralinstruction.com/), and so I thought a blog post could be a good idea. But to make it more discoverable and “official” (which is important for newcomers), I want to add it to the [Julia blog](https://julialang.org/blog/).

Below you’ll find a draft of what I’m hoping to cover. Please contribute to this discussion so that we can achieve something reasonably consensual and complete!

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

---

<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:** [June 21, 2023, 11:18am UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/2 "2023-06-21T11:18:28Z")

</div>

Update: the blog posts are being drafted on a separate repo, and we’ll make a PR to the official website once they’re ready.

Preview: [https://modernjuliaworkflows.github.io/](https://modernjuliaworkflows.github.io/)  
Repo: [GitHub - modernjuliaworkflows/modernjuliaworkflows.github.io: Blog posts on best practices for Julia development](https://github.com/modernjuliaworkflows/modernjuliaworkflows.github.io)  
Progress: [Issues · modernjuliaworkflows/modernjuliaworkflows.github.io · GitHub](https://github.com/modernjuliaworkflows/modernjuliaworkflows.github.io/issues)

---

<div class="post-metadata">

**Author:** ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)\
**Post date:** [July 30, 2023, 11:02pm UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/3 "2023-07-30T23:02:38Z")

</div>

Thank you for gathering this useful information.

May I ask why there is no reference to projects ([like here](https://www.juliabloggers.com/working-with-julia-projects/)) as an intermediate step from scripts to packages?

---

<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:** [July 31, 2023, 6:10am UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/4 "2023-07-31T06:10:56Z")

</div>

Probably a good idea, we’ll put it on the first post with the package manager. Basically my thought was that the first post should be doable with `pkg> generate` and the second post would involve a more complete structure with PkgTemplates.jl

---

<div class="post-metadata">

**Author:** ![giordano](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/giordano/32/2166_2.png) [@giordano](https://discourse.julialang.org/u/giordano)\
**Post date:** [July 31, 2023, 1:48pm UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/5 "2023-07-31T13:48:34Z")

</div>

Suggestion: do not suggest installing the LTS with juliaup, people may actually do that and get stuck for years with an old version. Suggest using stable instead.

---

<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:** [July 31, 2023, 6:19pm UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/6 "2023-07-31T18:19:49Z")

</div>

I’m not sure what you mean? By default, juliaup does install the latest stable release from the `release` channel, so all I wanted to do was demonstrate another version that you may want to have. To me the most useful are `lts` and `alpha`, but I’m open to suggestions.

---

<div class="post-metadata">

**Author:** ![abraemer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/abraemer/32/51403_2.png) [@abraemer](https://discourse.julialang.org/u/abraemer)\
**Post date:** [August 1, 2023, 6:32am UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/7 "2023-08-01T06:32:55Z")

</div>

I think we should also provide a simple `startup.jl` file with a few bare essentials like `Revise.jl`, `PkgTemples.jl` and maybe `OhMyRepl.jl` or other things people consider ‘bare essential’. Maybe, if there are too many opinions on what should be considered “bare essential”, we could feature a “startup.jl generator” of sorts by providing some checkboxes on what packages (each with a brief explanation) to include?

---

<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:** [August 1, 2023, 6:57am UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/8 "2023-08-01T06:57:22Z")

</div>

> [@abraemer](#):
>
> I think we should also provide a simple `startup.jl` file

Yeah that’s the plan. Provide a basic startup file in the body of the blog, and attach a more sophisticated one for those who want to go one step further.

> [@abraemer](#):
>
> Maybe, if there are too many opinions on what should be considered “bare essential”, we could feature a “startup.jl generator” of sorts by providing some checkboxes on what packages

That’s actually a great idea for a package! And it would be a cool outcome of this blog to improve global tooling. For instance I’m currently busy with adding lots of new stuff to PkgTemplates.jl

---

<div class="post-metadata">

**Author:** ![Eben60](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/eben60/32/13475_2.png) [@Eben60](https://discourse.julialang.org/u/Eben60)\
**Post date:** [August 1, 2023, 10:20am UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/9 "2023-08-01T10:20:14Z")

</div>

> [@gdalle](#):
>
> That’s actually a great idea for a package! And it would be a cool outcome of this blog to improve global tooling. For instance I’m currently busy with adding lots of new stuff to PkgTemplates.jl

I have actually started in that direction a few days ago - the idea is to provide GUI for creating a project/package, because PkgTemplates.jl is overwhelming for a novice (even without the “lots of new stuff” 😜). I started from the packages in the default environment, see [GitHub - Eben60/PackageIABlink.jl](https://github.com/Eben60/PackageIABlink.jl) - which is in a very rudimentary state yet.

My knowledge of all that GUI staff is obsolete and very limited, I’m not too productive in programming and all that has nothing to do with my job. If somebody takes the project over or helps substantially, I’d only be glad. I actualy wanted to wait until I have something to show, but coming out now to avoid a parallel development.

---

<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:** [August 1, 2023, 10:21am UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/10 "2023-08-01T10:21:58Z")

</div>

> [@Eben60](#):
>
> PkgTemplates.jl is overwhelming for a novice

A bit, yeah 😅 Hopefully initiatives like our blog post or your package can also contribute to clarify the flurry of options, in a way that can be fed back into the documentation of PkgTemplates.jl

The lack of an easy example is a [known issue](https://github.com/JuliaCI/PkgTemplates.jl/issues/381), even writing a simple tutorial for the PkgTemplates.jl docs could be very useful!

> [@Eben60](#):
>
> My knowledge of all that GUI staff is obsolete and very limited

Why not use [terminal menus](https://docs.julialang.org/en/v1/stdlib/REPL/#TerminalMenus) instead of HTML? Actually, that’s exactly what PkgTemplates.jl does. Your life would be much much easier.  
But I do believe it might already be duplication of efforts: perhaps improving the item descriptions in the PkgTemplates.jl menus themselves would be faster for a similar reward?

---

<div class="post-metadata">

**Author:** ![Eben60](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/eben60/32/13475_2.png) [@Eben60](https://discourse.julialang.org/u/Eben60)\
**Post date:** [August 1, 2023, 11:21am UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/11 "2023-08-01T11:21:02Z")

</div>

The idea is to provide sufficient explanation texts and external links, among other things, and thus to enable using the thing without reading the manual first. I am not sure it is possible with terminal menu. GUI is what the most people use on computer for a reason.

---

<div class="post-metadata">

**Author:** ![algunion](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/algunion/32/51630_2.png) [@algunion](https://discourse.julialang.org/u/algunion)\
**Post date:** [August 1, 2023, 11:28am UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/12 "2023-08-01T11:28:17Z")

</div>

> [@gdalle](#):
>
> By default, juliaup does install the latest stable release from the `release` channel, so all I wanted to do was demonstrate another version that you may want to have. To me the most useful are `lts` and `alpha`, but I’m open to suggestions.

The thing is that the first `juliaup` command encountered by the reader is the following one:

```julia
juliaup add lts

```

What @giordano tries to convey (I think) is to explicitly add the `juliaup add release` to the workflow before suggesting the usage of other channels/versions (and I am posting this because I am of the same opinion).

I know that you have a block of text, that, carefully read, might drive the reader to use the `release` instead of `lts`, but many people might just seek the actionable information (e.g., what to do exactly - and that is the `lts` install in the current context).

---

<div class="post-metadata">

**Author:** ![abraemer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/abraemer/32/51403_2.png) [@abraemer](https://discourse.julialang.org/u/abraemer)\
**Post date:** [August 1, 2023, 12:42pm UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/13 "2023-08-01T12:42:45Z")

</div>

> [@gdalle](#):
>
> That’s actually a great idea for a package!

I agree! So I went ahead and quickly threw together [`StartupCustomizer.jl`](https://github.com/abraemer/StartupCustomizer.jl) (name up for debated) 🙂

I made a new thread for feedback/discussion of that effort over [here](https://discourse.julialang.org/t/seeking-feedback-package-for-easy-customization-of-startup-jl/102351).

---

<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:** [August 1, 2023, 4:52pm UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/14 "2023-08-01T16:52:11Z")

</div>

> [@algunion](#):
>
> What @giordano tries to convey (I think) is to explicitly add the `juliaup add release` to the workflow before suggesting the usage of other channels/versions (and I am posting this because I am of the same opinion).

OK that makes sense, I’ll add it, specifying that this is the command executed by default

---

<div class="post-metadata">

**Author:** ![e3c6](https://avatars.discourse-cdn.com/v4/letter/e/e79b87/32.png) [@e3c6](https://discourse.julialang.org/u/e3c6)\
**Post date:** [August 1, 2023, 5:51pm UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/15 "2023-08-01T17:51:09Z")

</div>

Should `LocalRegistry.jl` be mentioned? I find it a useful workflow tool to have a personal registry to organize my own code base. But maybe that’s too particular.

---

<div class="post-metadata">

**Author:** ![josePereiro](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/josepereiro/32/17322_2.png) [@josePereiro](https://discourse.julialang.org/u/josePereiro)\
**Post date:** [August 1, 2023, 6:21pm UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/16 "2023-08-01T18:21:47Z")

</div>

May I suggest not to use “Modern” in the title? It get confusing fast…

---

<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:** [August 1, 2023, 6:59pm UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/17 "2023-08-01T18:59:20Z")

</div>

> [@e3c6](#):
>
> Should `LocalRegistry.jl` be mentioned? I find it a useful workflow tool to have a personal registry to organize my own code base. But maybe that’s too particular.

It will be, on the page about sharing packages

> [@josePereiro](#):
>
> May I suggest not to use “Modern” in the title? It get confusing fast…

You may, but “Julia Workflows” is kinda boring ^^ Besides I would like to keep the posts updated, so I do hope they remain reasonably modern for at least one or two years

---

<div class="post-metadata">

**Author:** ![e3c6](https://avatars.discourse-cdn.com/v4/letter/e/e79b87/32.png) [@e3c6](https://discourse.julialang.org/u/e3c6)\
**Post date:** [August 1, 2023, 7:05pm UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/18 "2023-08-01T19:05:39Z")

</div>

> [@gdalle](#):
>
> It will be, on the page about sharing packages

Nice. Though I was referring to the value of LocalRegistry even for a single developer, as a way of organizing your own growing code base (with SemVer!) and being able to refer to old functionality by name. I wonder if other people do something like that.

This:

> [@Survey on how you use Julia](https://discourse.julialang.org/t/survey-on-how-you-use-julia/99807/6):
>
> And here are the results: Almost all respondents (consciously) use Revise, with the next most common being JuliaFormatter, and then very surprisingly LocalRegistry! By far the most common way to use Julia is from inside an editor/IDE using local packages. Scripting is fairly common, and (in the discourse userbase, see below for demographics) literate programming is not so common. [image] In the “describe your workflow in more detail” part, quite a few people mentioned Vim…

may suggest people might be doing something similar … ?

---

<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:** [August 1, 2023, 7:11pm UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/19 "2023-08-01T19:11:47Z")

</div>

> [@e3c6](#):
>
> Nice. Though I was referring to the value of LocalRegistry even for a single developer, as a way of organizing your own growing code base (with SemVer!) and being able to refer to old functionality by name.

That also makes sense. The distinction between the three pages is arbitrary anyway, but in the “sharing” page I also include everything related to reproducibility and trustworthy development

---

<div class="post-metadata">

**Author:** ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)\
**Post date:** [August 1, 2023, 7:30pm UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/20 "2023-08-01T19:30:52Z")

</div>

Since Julia is supposed to be a modern language, it might make more sense to just call them “Common Julia workflows”?

[Next page](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324.md?page=2)
