# Nbdev for julia

**URL:** <https://discourse.julialang.org/t/nbdev-for-julia/32450>\
**Category:** Tooling\
**Tags:** question, literate-programming, notebooks\
**Created:** [December 18, 2019, 4:51pm UTC](https://discourse.julialang.org/t/nbdev-for-julia/32450 "2019-12-18T16:51:36Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![nmoran](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nmoran/32/11901_2.png) [@nmoran](https://discourse.julialang.org/u/nmoran)\
**Post date:** [December 18, 2019, 4:51pm UTC](https://discourse.julialang.org/t/nbdev-for-julia/32450/1 "2019-12-18T16:51:36Z")

</div>

Wondering if there is anything with similar functionality as nbdev ([https://github.com/fastai/nbdev](https://github.com/fastai/nbdev)) for Julia or if it might make sense to get this working for Julia?

---

<div class="post-metadata">

**Author:** ![Rudi79](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rudi79/32/3884_2.png) [@Rudi79](https://discourse.julialang.org/u/Rudi79)\
**Post date:** [December 18, 2019, 4:57pm UTC](https://discourse.julialang.org/t/nbdev-for-julia/32450/2 "2019-12-18T16:57:21Z")

</div>

I don’t know which functionality your are looking for, but [https://github.com/fredrikekre/Literate.jl](https://github.com/fredrikekre/Literate.jl) might be worth a try.

---

<div class="post-metadata">

**Author:** ![nmoran](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nmoran/32/11901_2.png) [@nmoran](https://discourse.julialang.org/u/nmoran)\
**Post date:** [December 19, 2019, 11:48am UTC](https://discourse.julialang.org/t/nbdev-for-julia/32450/3 "2019-12-19T11:48:26Z")

</div>

Thanks for the link. This definitely looks very useful. It does seem different in that it starts from a julia file and can generate markdown, notebooks or cleaned julia script whereas nbdev is based around the notebook as the starting point. nbdev also helps out with boiler plate tasks like creating package (setup.py for python), CI and documentation generation.

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [December 19, 2019, 3:27pm UTC](https://discourse.julialang.org/t/nbdev-for-julia/32450/4 "2019-12-19T15:27:04Z")

</div>

for package templates, see

> **[GitHub - JuliaCI/PkgTemplates.jl: Create new Julia packages, the easy way](https://github.com/JuliaCI/PkgTemplates.jl)**
>
> Create new Julia packages, the easy way. Contribute to JuliaCI/PkgTemplates.jl development by creating an account on GitHub.

> **[GitHub - tpapp/PkgSkeleton.jl: Generate Julia package skeletons using a...](https://github.com/tpapp/PkgSkeleton.jl)**
>
> Generate Julia package skeletons using a simple template system - GitHub - tpapp/PkgSkeleton.jl: Generate Julia package skeletons using a simple template system

---

<div class="post-metadata">

**Author:** ![hessammehr](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/hessammehr/32/3847_2.png) [@hessammehr](https://discourse.julialang.org/u/hessammehr)\
**Post date:** [December 19, 2019, 3:48pm UTC](https://discourse.julialang.org/t/nbdev-for-julia/32450/5 "2019-12-19T15:48:11Z")

</div>

I would also look at Steven Johnson’s [NBInclude.jl](https://github.com/stevengj/NBInclude.jl) which lets you import code from Jupyter notebooks like so:

```julia
using NBInclude
@nbinclude("myfile.ipynb")

```

---

<div class="post-metadata">

**Author:** ![ihnorton](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ihnorton/32/26_2.png) [@ihnorton](https://discourse.julialang.org/u/ihnorton)\
**Post date:** [December 19, 2019, 10:31pm UTC](https://discourse.julialang.org/t/nbdev-for-julia/32450/7 "2019-12-19T22:31:53Z")

</div>

nbdev seems to be built on top of `jupyter notebook (as far as I can tell it is all client-side modifications). It might just work with the existing IJulia kernel if you select the kernel in a new notebook – have you tried that?

---

<div class="post-metadata">

**Author:** ![satyabrata\_pal](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/satyabrata_pal/32/9035_2.png) [@satyabrata\_pal](https://discourse.julialang.org/u/satyabrata_pal)\
**Post date:** [June 10, 2020, 6:27am UTC](https://discourse.julialang.org/t/nbdev-for-julia/32450/8 "2020-06-10T06:27:37Z")

</div>

Hi @nmoran I am not sure if you are still looking out for something similar to nbdev for Julia. I was also looking for something similar but I found that the closest thing to nbdev in Julia world is Litrate.jl. However in Litrate.jl it’s the reverse i.e. the source is a Julia file and then you can generate markadown, scripts or notebook from there.

I have worked in nbdev and wanted something similar to nbdev, so I was thinking about leveraging Litrate,jl and existing tooling in ipython to build a Julia version of nbdev.

It would be great if people in the community can join me in developing this idea further.

---

<div class="post-metadata">

**Author:** ![sgaseretto](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sgaseretto/32/26528_2.png) [@sgaseretto](https://discourse.julialang.org/u/sgaseretto)\
**Post date:** [June 26, 2021, 9:18pm UTC](https://discourse.julialang.org/t/nbdev-for-julia/32450/9 "2021-06-26T21:18:29Z")

</div>

I’m also interested in using something like nbdev in julia, @satyabrata_pal any success on finding something similar to it? Like everyone said, Literate.jl does the reverse.

---

<div class="post-metadata">

**Author:** ![ToucheSir](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/touchesir/32/14411_2.png) [@ToucheSir](https://discourse.julialang.org/u/ToucheSir)\
**Post date:** [June 27, 2021, 2:43pm UTC](https://discourse.julialang.org/t/nbdev-for-julia/32450/10 "2021-06-27T14:43:54Z")

</div>

[https://github.com/fonsp/Pluto.jl](https://github.com/fonsp/Pluto.jl) has arguably a much better editing environment and storage format than nbdev. IMO it would be the best place to start from if you wanted an nbdev equivalent.

---

<div class="post-metadata">

**Author:** ![EvoArt](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/evoart/32/25357_2.png) [@EvoArt](https://discourse.julialang.org/u/EvoArt)\
**Post date:** [June 27, 2021, 6:37pm UTC](https://discourse.julialang.org/t/nbdev-for-julia/32450/11 "2021-06-27T18:37:43Z")

</div>

> [@ihnorton](#):
>
> nbdev seems to be built on top of `jupyter notebook (as far as I can tell it is all client-side modifications). It might just work with the existing IJulia kernel if you select the kernel in a new notebook – have you tried that?

Did anyone try this?

---

<div class="post-metadata">

**Author:** ![nmoran](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nmoran/32/11901_2.png) [@nmoran](https://discourse.julialang.org/u/nmoran)\
**Post date:** [June 28, 2021, 12:56pm UTC](https://discourse.julialang.org/t/nbdev-for-julia/32450/12 "2021-06-28T12:56:43Z")

</div>

Hi @satyabrata_pal , I haven’t found something that really replaces nbdev but have started using Literate.jl in some of my workflows. I’d definitely be willing to help out and contribute to this though.

@EvoArt, no I haven’t tried using nbdev with the existing IJulia kernel. This could be a good starting point if it worked well could create a package which automatically sets up nbdev in the same python environment that IJulia uses for jupyter.

@ToucheSir Pluto.jl does look like the future. Seemed to lack some basic features when I tried it a while back like the ability to use packages from specific environment, but maybe these have been addressed.

---

<div class="post-metadata">

**Author:** ![satyabrata\_pal](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/satyabrata_pal/32/9035_2.png) [@satyabrata\_pal](https://discourse.julialang.org/u/satyabrata_pal)\
**Post date:** [June 28, 2021, 2:10pm UTC](https://discourse.julialang.org/t/nbdev-for-julia/32450/13 "2021-06-28T14:10:43Z")

</div>

@sgaseretto @ToucheSir @EvoArt @nmoran

As a matter of fact I am working on a project to bring nbdev to Julia. My project(nbdev.jl) starts with a pluto notebook as base, from here a Julia project can be generated. I am using MKdocs as the document generator.

Currently I am successful in generating markdown documents and source code files. As next steps I am working on automatic generation of table of contents, mkdocs yaml file. The task of automatic deployment to github pages and package creation is in roadmap.

I would love to have contributors on this project as I have fairly new to Julia and having more experienced people would make the project better and would speed up things.

Those who are interested can take a peek [here](https://github.com/sapal6/nbdev.jl). This is the repository for Nbdev.jl.

I must say that the current code here is not in the best possible shape considering my experience in Julia and also I started this project as an MVP. I believe that the involvement of more minds can definitely prove to be useful.

---

<div class="post-metadata">

**Author:** ![sgaseretto](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sgaseretto/32/26528_2.png) [@sgaseretto](https://discourse.julialang.org/u/sgaseretto)\
**Post date:** [June 28, 2021, 2:55pm UTC](https://discourse.julialang.org/t/nbdev-for-julia/32450/15 "2021-06-28T14:55:52Z")

</div>

Great! I’ll take a look at it and try to contribute!

---

<div class="post-metadata">

**Author:** ![satyabrata\_pal](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/satyabrata_pal/32/9035_2.png) [@satyabrata\_pal](https://discourse.julialang.org/u/satyabrata_pal)\
**Post date:** [June 29, 2021, 2:45am UTC](https://discourse.julialang.org/t/nbdev-for-julia/32450/16 "2021-06-29T02:45:22Z")

</div>

Thanks. I will try to update the readme this week ro give a clear picture of the roadmap , docs etc.

---

<div class="post-metadata">

**Author:** ![lungben](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lungben/32/12314_2.png) [@lungben](https://discourse.julialang.org/u/lungben)\
**Post date:** [June 29, 2021, 7:54am UTC](https://discourse.julialang.org/t/nbdev-for-julia/32450/17 "2021-06-29T07:54:19Z")

</div>

> [@nmoran](#):
>
> Seemed to lack some basic features when I tried it a while back like the ability to use packages from specific environment, but maybe these have been addressed.

In general, you can use `Pkg` in Pluto for environment management.  
Additionally, in the next Pluto release (or current main branch) there is a new automatic package managment which guarantees reproducible notebooks.  
More information about both points is here:

> **[🎁 Package management](https://github.com/fonsp/Pluto.jl/wiki/%F0%9F%8E%81-Package-management)**
>
> 🎈 Simple reactive notebooks for Julia. Contribute to fonsp/Pluto.jl development by creating an account on GitHub.

---

<div class="post-metadata">

**Author:** ![satyabrata\_pal](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/satyabrata_pal/32/9035_2.png) [@satyabrata\_pal](https://discourse.julialang.org/u/satyabrata_pal)\
**Post date:** [June 29, 2021, 9:16am UTC](https://discourse.julialang.org/t/nbdev-for-julia/32450/18 "2021-06-29T09:16:54Z")

</div>

Just made a quick update to the project README.

---

<div class="post-metadata">

**Author:** ![nmoran](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nmoran/32/11901_2.png) [@nmoran](https://discourse.julialang.org/u/nmoran)\
**Post date:** [June 29, 2021, 10:37am UTC](https://discourse.julialang.org/t/nbdev-for-julia/32450/19 "2021-06-29T10:37:47Z")

</div>

@satyabrata_pal great, will keep track of progress and contribute if I can.

@lungben the new package management features look great. Will try these out.

---

<div class="post-metadata">

**Author:** ![satyabrata\_pal](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/satyabrata_pal/32/9035_2.png) [@satyabrata\_pal](https://discourse.julialang.org/u/satyabrata_pal)\
**Post date:** [July 7, 2021, 2:01am UTC](https://discourse.julialang.org/t/nbdev-for-julia/32450/20 "2021-07-07T02:01:52Z")

</div>

I am trying to automate the process of creating the Mkdocs.yml file. This would be used to lay down instructions for Mkdocs like theme and other configurations.

I was planning to use python’s yaml package to parse the Mkdocs.yml file and then write the configurations to it. Anyone have any idea about any package in Julia which can parse and write yaml?

Or on second thought would it be better not to generate the contents of the Mkdocs.yml file but let the user to edit the file.

---

<div class="post-metadata">

**Author:** ![satyabrata\_pal](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/satyabrata_pal/32/9035_2.png) [@satyabrata\_pal](https://discourse.julialang.org/u/satyabrata_pal)\
**Post date:** [August 14, 2021, 3:58am UTC](https://discourse.julialang.org/t/nbdev-for-julia/32450/21 "2021-08-14T03:58:52Z")

</div>

Nbdev.jl now has the following abilities →

- Create source files from pluto notebooks.
- Create documentation from pluto notebooks(by using mkdocs)
- Create README from index file.

Next I am trying to add automatic deployment of the documents to github pages and creating a short tutorial to get started with whatever is available so far in this project.

Also, if enough people here are interested in the progress of this project then I would create a separate thread in the forum to update regarding the progress of nbdev.jl.

---

<div class="post-metadata">

**Author:** ![nareshr8](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nareshr8/32/28762_2.png) [@nareshr8](https://discourse.julialang.org/u/nareshr8)\
**Post date:** [September 1, 2021, 3:37am UTC](https://discourse.julialang.org/t/nbdev-for-julia/32450/22 "2021-09-01T03:37:19Z")

</div>

Have you tried `Documenter.jl`, we might have to automate some of the processes to suite our needs though. If you are ok, I can try it out and create a PR.

[Next page](https://discourse.julialang.org/t/nbdev-for-julia/32450.md?page=2)
