Name of APITools.jl package

I have been trying to get my package 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.
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, 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, CharSetEncodings, Chars, StrBase, StrRegex, StrLiterals, StrFormat, StrEntities, Strs

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.


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

1 Like

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.

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

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.

1 Like

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.

1 Like

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

1 Like

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?

1 Like

Would ModuleInterfaceTools.jl be OK?

Throwing around some variants.

  • ModuleInterfacing,j;
  • InterfacingModules.jl,
  • ModuleInterfacings,jl

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.

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


  • Picasso.jl
  • Matisse.jl
  • Warhol.jl
  • Wyeth.jl
1 Like

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 :wink:

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


OK, after the suggestions from a number of people (thanks!), I’ve renamed it ModuleInterfaceTools, 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 should be closed (by somebody who has permission to do so).



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