# Making third party libraries easy to use

**URL:** <https://forum.xod.io/t/making-third-party-libraries-easy-to-use/115>\
**Category:** Uncategorized\
**Created:** [October 3, 2017, 1:48pm UTC](https://forum.xod.io/t/making-third-party-libraries-easy-to-use/115 "2017-10-03T13:48:25Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![awgrover](https://avatars.discourse-cdn.com/v4/letter/a/74df32/32.png) [@awgrover](https://forum.xod.io/u/awgrover)\
**Post date:** [October 3, 2017, 1:48pm UTC](https://forum.xod.io/t/making-third-party-libraries-easy-to-use/115/1 "2017-10-03T13:48:25Z")

</div>

How can we make xod-libraries easy to install?

It seemed natural to me to develop a library with this kind of structure:

```
workingdir
    lib
        awg # my name
            count # lib name
                sawtooth # "patch"
                    any.cpp
                    patch.xodp
    README.md
    misc files like makefile
    tools/ # etc. for development

```

But, that isn’t convenient for installing into the xod-workspace. Because, you want the stuff undef lib/ to be installed in $xodworkspace/lib. Github only provides “zip everything” (or clone, of course).

The Arduino IDE has a similar problem.

What if xod allowed zipfiles in the xodworkspace? And, it treated them like a parallel file system. So, if you zip has lib/, then it adds them to libs. We’d have to decide if the other files are ignored.

How about examples? The zipfile thing would allow including those…

---

<div class="post-metadata">

**Author:** ![nkrkv](https://yyz1.discourse-cdn.com/flex027/user_avatar/forum.xod.io/nkrkv/32/8_2.png) [@nkrkv](https://forum.xod.io/u/nkrkv)\
**Post date:** [October 3, 2017, 9:54pm UTC](https://forum.xod.io/t/making-third-party-libraries-easy-to-use/115/2 "2017-10-03T21:54:28Z")

</div>

We actually look a bit further on the problem you’ve described. We have a (yet) very basic package manager. If you have a development experience with Python (pip), Ruby (gem), or NodeJS (npm) you know the idea.

Currently, the only way to “properly” publish and install a library is using the `xodc` CLI. When you want to publish a library to the world, do:

```bash
$ xodc publish --owner=awg /path/to/workspace/count

```

When you want to install a library in the current workspace, do:

```bash
$ xodc install awg/count

```

You may be surprised, but the `xod/core`, `xod/units`, and `xod/common-hardware` are just regular libraries of a user with name `xod`. Their privelege is a pure marketing. The [libraries index](https://xod.io/libs/) lists all libraries published in the repository. No surprise, the libraries by `xod` are the only ones: we did not provide any docs on creating and publishing libraries. You’re conqueror 🤘, sorry for the poor assistance.

To make things more straightforward we should:

- Write down few guides on creating custom libraries
- Describe how to browse and install a library
- Embed search in the cloud right into the Quick Search window
- Make it possible to publish/install with GUI inside XOD IDE

This would be the main topic for one of the upcoming development sprints.
