# Package Development Checklist, Flow, Prerequisites, Quickstart guide, etc

**URL:** <https://discourse.julialang.org/t/package-development-checklist-flow-prerequisites-quickstart-guide-etc/1408>\
**Category:** Internals & Design\
**Tags:** question, package\
**Created:** [January 10, 2017, 10:13pm UTC](https://discourse.julialang.org/t/package-development-checklist-flow-prerequisites-quickstart-guide-etc/1408 "2017-01-10T22:13:38Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![philip](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/philip/32/17191_2.png) [@philip](https://discourse.julialang.org/u/philip)\
**Post date:** [January 10, 2017, 10:13pm UTC](https://discourse.julialang.org/t/package-development-checklist-flow-prerequisites-quickstart-guide-etc/1408/1 "2017-01-10T22:13:38Z")

</div>

Hi–I’m wondering how a beginner package developer can develop an objective sense of whether or not one’s package is “useful” and “up-to-date.” I break this question down into a few components, and presumably there are many more that I have not considered:

1. The package may offer some feature, but is that feature duplicated in an obscure part of Base or in another existing package? How do we find out?
2. The package may not use best practices in terms of code development or testing. How do we know what these are? Is there a high-level checklist we can run through?
3. The package might not anticipate (or might duplicate) changes that are coming to the language that are well-known to the core Julia devs. How do we lowly package developers get wind of the important developments of which we should be aware?
4. What are the other unknown unknowns we should consider before publishing a package? Again, is there a checklist?

Essentially, as first-time package submitters, my colleague and I are flying blind wondering “Have we done this right _at all_? Or are we just completely off-base?” And in our states of ignorance, we realize that we don’t know a lot, but we have no idea what are all the things that we don’t know or where we can learn them.

Any guidance–especially in the form of a checklist, even at a high level, e.g. of “Make sure you’ve implemented working tests, make sure you’ve integrated with Travis CI, make sure you’ve searched key words against this repository of packages, make sure you’ve read the most recent X github issues, make sure you’ve read the latest stable julia/NEWS.md, etc.” would be very helpful and much appreciated.

Thanks!

(The specific package we’re working on getting to v0.1 is [here](http://github.com/pkalikman/Checkers.jl).)

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [January 10, 2017, 10:27pm UTC](https://discourse.julialang.org/t/package-development-checklist-flow-prerequisites-quickstart-guide-etc/1408/2 "2017-01-10T22:27:25Z")

</div>

> [@philip](#):
>
> The package may offer some feature, but is that feature duplicated in an obscure part of Base or in another existing package? How do we find out?

I just ask [the Gitter channel](https://gitter.im/JuliaLang/julia). If no one there knows about it, then it’s obscure enough that it needs a better documented / visible package.

> [@philip](#):
>
> The package may not use best practices in terms of code development or testing. How do we know what these are? Is there a high-level checklist we can run through?

> <https://github.com/JuliaLang/METADATA.jl/issues/6761>
>
> There appears to be some dissatisfaction with the speed—be it too fast or too sl…ow—of the METADATA workflow. I think this may stem from a lack of a common understanding of what's expected for registered packages. To that end, I think it may be a good idea to have a discussion about what exactly is expected of registered packages, including what is required for registration, so that everyone is on the same page. I think having a standard pull request template, as suggested in #5307, may help with this, but it would be nice to have consensus on expectations in the interim.
> 
> Note that this is \*\*not\*\* intended to be a debate on the merits of METADATA or registration, nor is it a suggestion that we should disallow certain packages or kinds of packages. I'm merely looking for input on what is/should be expected and how everyone can come to a mutual understanding to avoid future drama and/or confusion.

> **[Finalizing Your Julia Package: Documentation, Testing, Coverage, and...](http://www.stochasticlifestyle.com/finalizing-julia-package-documentation-testing-coverage-publishing/)**
>
> In this tutorial we will go through the steps to finalizing a Julia package. At this point you have some functionality you wish to share with the world… what do you do? You want to have documentation, code testing each time you commit (on all the...

> [@philip](#):
>
> The package might not anticipate (or might duplicate) changes that are coming to the language that are well-known to the core Julia devs. How do we lowly package developers get wind of the important developments of which we should be aware?

Communicate with people. It can be hard to follow all of the issues in Julialang, but I learned about most of the important through [the Gitter channel](https://gitter.im/JuliaLang/julia). A quick throwaway question could lead to a world of information.

> [@philip](#):
>
> What are the other unknown unknowns we should consider before publishing a package? Again, is there a checklist?

See the links above.

I think the key information that I have to share is that you can learn far more from a quick conversation than from loads of reading, mostly because there’s just too much information online. But if you ask for help and let someone guide you to the right information (like you did here), it’s much easier.

---

<div class="post-metadata">

**Author:** ![philip](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/philip/32/17191_2.png) [@philip](https://discourse.julialang.org/u/philip)\
**Post date:** [January 11, 2017, 2:53pm UTC](https://discourse.julialang.org/t/package-development-checklist-flow-prerequisites-quickstart-guide-etc/1408/3 "2017-01-11T14:53:49Z")

</div>

This is great; thanks!
