# Name of APITools.jl package

**URL:** <https://discourse.julialang.org/t/name-of-apitools-jl-package/11042>\
**Category:** Community\
**Created:** [May 21, 2018, 2:01pm UTC](https://discourse.julialang.org/t/name-of-apitools-jl-package/11042 "2018-05-21T14:01:22Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![ScottPJones](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/scottpjones/32/146_2.png) [@ScottPJones](https://discourse.julialang.org/u/ScottPJones)\
**Post date:** [May 21, 2018, 2:01pm UTC](https://discourse.julialang.org/t/name-of-apitools-jl-package/11042/1 "2018-05-21T14:01:22Z")

</div>

I have been trying to get my package [APITools.jl](https://github.com/JuliaString/APITools.jl) registered, but there was a comment about the name (and I can’t respond directly on the METADATA PR), so I will try to respond here. @dpsanders @ararslan @kristoffer.carlsson @andreasnoack @jeff.bezanson

This package has a fairly generic name _precisely_ because the package itself is meant to be very generic,  
and there is precedent already in the genericly named [MacroTools.jl](https://github.com/MikeInnes/MacroTools.jl).  
As I believe the name suggests, the package provides tools for maintaining an API for Julia packages  
(in the spirit of smaller packages that provide macros to help out with `using` / `import` / `export` such as [Reexport.jl](https://github.com/simonster/Reexport.jl), [ForceImport.jl](https://github.com/chakravala/ForceImport.jl))  
I will shortly be adding support for renaming things on import and for excluding particular functions when doing `@api use <module>(oldname => newname, !nothisfunction, thisunexportedfunction)`. These are frequently requested features, which have come up several times recently here on Discourse. Having this available may relieve some of the complaints about dealing with `using` / `import` / `export` in Julia (I know it has already made creating a consistent API for a large set of interrelated packages a lot easier for me in Strs.jl).

I am using this for most all of my packages that are part of the “Str” ecosystem, i.e.:  
[StrAPI](https://github.com/JuliaString/StrAPI.jl), [CharSetEncodings](https://github.com/JuliaString/CharSetEncodings.jl), [Chars](https://github.com/JuliaString/Chars.jl), [StrBase](https://github.com/JuliaString/StrBase.jl), [StrRegex](https://github.com/JuliaString/StrRegex.jl), [StrLiterals](https://github.com/JuliaString/StrLiterals.jl), [StrFormat](https://github.com/JuliaString/StrFormat.jl), [StrEntities](https://github.com/JuliaString/StrEntities.jl), [Strs](https://github.com/JuliaString/Strs.jl)

Until `APITools.jl` has been registered, I will not be able to tag releases and get registered all of the other packages, which a number of people have expressed interest in.

Thanks for considering this.

---

<div class="post-metadata">

**Author:** ![JeffreySarnoff](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jeffreysarnoff/32/1980_2.png) [@JeffreySarnoff](https://discourse.julialang.org/u/JeffreySarnoff)\
**Post date:** [May 22, 2018, 2:29am UTC](https://discourse.julialang.org/t/name-of-apitools-jl-package/11042/2 "2018-05-22T02:29:22Z")

</div>

you might call it SomeAPITools to let APITools remain available for a wider-scoped package

---

<div class="post-metadata">

**Author:** ![kevbonham](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kevbonham/32/216165_2.png) [@kevbonham](https://discourse.julialang.org/u/kevbonham)\
**Post date:** [May 22, 2018, 2:35am UTC](https://discourse.julialang.org/t/name-of-apitools-jl-package/11042/3 "2018-05-22T02:35:54Z")

</div>

That seems a little silly… MacroTools seems like a clear precedent.

On the other hand `PackageAPIs` or `PackageAPITools` is more descriptive and might not run afoul of the same concerns.

---

<div class="post-metadata">

**Author:** ![ScottPJones](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/scottpjones/32/146_2.png) [@ScottPJones](https://discourse.julialang.org/u/ScottPJones)\
**Post date:** [May 22, 2018, 2:41am UTC](https://discourse.julialang.org/t/name-of-apitools-jl-package/11042/4 "2018-05-22T02:41:51Z")

</div>

It’s really for any modules, they don’t have to be in packages (I use it for submodules also).

---

<div class="post-metadata">

**Author:** ![ScottPJones](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/scottpjones/32/146_2.png) [@ScottPJones](https://discourse.julialang.org/u/ScottPJones)\
**Post date:** [May 22, 2018, 2:43am UTC](https://discourse.julialang.org/t/name-of-apitools-jl-package/11042/5 "2018-05-22T02:43:39Z")

</div>

As I tried to explain, this is intended to be a very widely scoped package.  
I’d like to pull in to this package any of the sorts of capabilities that people have been asking for, that will ease making and using public (and separate development) APIs for Julia development.

---

<div class="post-metadata">

**Author:** ![oxinabox](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oxinabox/32/206603_2.png) [@oxinabox](https://discourse.julialang.org/u/oxinabox)\
**Post date:** [May 22, 2018, 2:59am UTC](https://discourse.julialang.org/t/name-of-apitools-jl-package/11042/6 "2018-05-22T02:59:43Z")

</div>

I feel like one of the core things this provides is stuff around  
having an API that is like different kinds of public, different kinds of encapsulations.

So maybe something like

- TieredExports.jl
- ApiEncapsulationTools.jl
- ApiPublicityTools.jl

I guess one problem is that API is self a broad term.  
More so than Macro which clearly refers to a julia macro.  
E.g. API could refer tools for working with Resful API’s.

MacroTools.jl may be a bad precedent, given it is rather old.

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [May 22, 2018, 3:22am UTC](https://discourse.julialang.org/t/name-of-apitools-jl-package/11042/7 "2018-05-22T03:22:55Z")

</div>

BuildAPI.jl, MakeAPI.jl, TailorAPI.jl, CraftAPI.jl, APITailor.jl, APIMaker.jl, InterfaceFitter.jl, APISeamster.jl, …

---

<div class="post-metadata">

**Author:** ![ScottPJones](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/scottpjones/32/146_2.png) [@ScottPJones](https://discourse.julialang.org/u/ScottPJones)\
**Post date:** [May 22, 2018, 4:21am UTC](https://discourse.julialang.org/t/name-of-apitools-jl-package/11042/8 "2018-05-22T04:21:40Z")

</div>

Thanks, both @oxinabox and @PetrKryslUCSD for the suggestions.

OK. One, this is not just for exports, nor encapsulation, nor just _making_ an api.  
There are functions for listing the API, making an API for users of a module or package (both for normal use and developers), and also for using the APIs set up by other modules / packages (with renaming, exclusions, addition of names not exported, etc.), so I don’t think that any names with Build, Make, Tailor, Craft, would fit.

Would `ModuleInterfaceTools.jl` be OK?

---

<div class="post-metadata">

**Author:** ![oxinabox](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oxinabox/32/206603_2.png) [@oxinabox](https://discourse.julialang.org/u/oxinabox)\
**Post date:** [May 22, 2018, 4:34am UTC](https://discourse.julialang.org/t/name-of-apitools-jl-package/11042/9 "2018-05-22T04:34:37Z")

</div>

> Would ModuleInterfaceTools.jl be OK?

Throwing around some variants.

- `ModuleInterfacing,j;`
- `InterfacingModules.jl`,
- `ModuleInterfacings,jl`

---

<div class="post-metadata">

**Author:** ![ScottPJones](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/scottpjones/32/146_2.png) [@ScottPJones](https://discourse.julialang.org/u/ScottPJones)\
**Post date:** [May 22, 2018, 4:36am UTC](https://discourse.julialang.org/t/name-of-apitools-jl-package/11042/10 "2018-05-22T04:36:51Z")

</div>

I do like having it end in “Tools”, because I feel that makes it clearer, it’s a set of tools for easily building up a documented API, accessing those APIs, and inspecting those APIs.

---

<div class="post-metadata">

**Author:** ![oxinabox](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oxinabox/32/206603_2.png) [@oxinabox](https://discourse.julialang.org/u/oxinabox)\
**Post date:** [May 22, 2018, 4:40am UTC](https://discourse.julialang.org/t/name-of-apitools-jl-package/11042/11 "2018-05-22T04:40:08Z")

</div>

I suspect this isn’t to your taste, since it goesn’t in the opposite dirction from including Tools in the name but

One could perhaps go more abstract.  
We do have a number of modules named after mathematicians, e.g. Turing,jl, Klara.jl  
And this is all about interfaces right?  
So Faces. So artist’s famous for their facial portraits

Maybe

- Picasso.jl
- Matisse.jl
- Warhol.jl
- Wyeth.jl

---

<div class="post-metadata">

**Author:** ![ScottPJones](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/scottpjones/32/146_2.png) [@ScottPJones](https://discourse.julialang.org/u/ScottPJones)\
**Post date:** [May 22, 2018, 4:41am UTC](https://discourse.julialang.org/t/name-of-apitools-jl-package/11042/12 "2018-05-22T04:41:40Z")

</div>

Well, somebody already complained that the name needed to give an idea of what it did.  
I do like the names, but I’d rather use them for something sexier than a low-level workhorse sort of package 😉

I’d be afraid of using something called `Warhol.jl` in my code! 🤓  
Too pop for me!

---

<div class="post-metadata">

**Author:** ![ScottPJones](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/scottpjones/32/146_2.png) [@ScottPJones](https://discourse.julialang.org/u/ScottPJones)\
**Post date:** [May 22, 2018, 11:36am UTC](https://discourse.julialang.org/t/name-of-apitools-jl-package/11042/13 "2018-05-22T11:36:07Z")

</div>

OK, after the suggestions from a number of people (thanks!), I’ve renamed it [ModuleInterfaceTools](https://github.com/JuliaString/ModuleInterfaceTools.jl), and tagged a first release.  
The METADATA tools don’t seem to be able to follow github renaming like `Travis` was able to do,  
so the original [PR to register `APITools.jl`](https://github.com/JuliaLang/METADATA.jl/pull/14661) should be closed (by somebody who has permission to do so).

Thanks!

---

<div class="post-metadata">

**Author:** ![ScottPJones](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/scottpjones/32/146_2.png) [@ScottPJones](https://discourse.julialang.org/u/ScottPJones)\
**Post date:** [May 23, 2018, 5:18pm UTC](https://discourse.julialang.org/t/name-of-apitools-jl-package/11042/14 "2018-05-23T17:18:20Z")

</div>

Thanks to Andreas Noack `ModuleInterfaceTools.jl` (né `APITools.jl`) is now registered and ready for business! 😀
