What's the correct handling of libraries?

Hello UiPath community,
what are the recommended/adequate steps when handling libraries?

As I understand, you create it with Studio, publish it (for example as pre-release) and then it appears in packages in the orchestrator, ready to be used in other projects as dependency.

What’s the next step if a coworker or I want to update the library? How do I download the newest version, edit and publish the next release?

Its a good question and I see alot of messy libraries.

Let me back up and establish a few other fundamentals.
Libraries should be focused and not cluttered. What I mean by that is that you shouldnt for example have a library that has two applications in it, or a wide scope, otherwise their re-usability is messed up and they are harder to maintain. Its actually totally fine to split off one or two activities into a separate library when it make sense and have libraries import other libraries.

After that, you should make sure the library is in source control, it really doesnt matter where it is published, cause Source Control is your point of truth, when you want to make updates then easy, you or whoever else clones it, makes a branch if you want and builds and tests the changes. You should have unit tests etc on your activities to make sure you dont break existing workflows.

When you finish the update you can publish it to whatever feed you then use, sounds like for you thats the library feed in the Orchestrator, which is the most common place.

After that, you need to update any projects that use it, they need the version in the dependencies bumped up and the package compiled, published and uploaded again. They will never automatically inherit the update you pushed.
This can be somewhat automated, but you need pipelines etc. There is also a tool from UiPath, the Mass Dependency Update Tool, but its still quite manual.

Hello Jon, thank you for the answer.

I’m thinking of creating a library with a couple of.. modules? components? related to a specific website (login, getting a status, downloading a file, etc)

The use of Source Control makes sense, thank you. I’ve seen other posts mentioning directly downloading the libraries and changing the extension to edit it again, which.. didn’t sit right with me. So this helps. I’ll have these advices in mind.

Thats exactly what you want.

I teach my juniors how to make a library using the UiPath ACME site and have them making login, close, Download Vendor Invoice, Calculate Security Hash etc all as library activities.

The key is to find the line where your library isnt too verbose, for example dont make an activity for every click or page navigation. As a consumer of your library I dont want to need to understand how to navigate the Ui to chain together several components to, for example, navigation the menu to get to the area where I can finally calc the security hash. Instead I just want an easy to use activity that handles that navigation for me and calcs the hash based on the inputs.
This is also good design as it means you could swap that component out for an API based approach type of thing with minimal rework, or if the Ui significantly changes you can update the library but the performer doesnt need changing to add or remove navigation actions which no longer exist or are now needed.

Regarding posts you see directly downloading the libraries, its amateurish to do that. I have no issues saying that if I hear or see someone doing that as routine I do not consider them competent as a UiPath developer. There is no excuse for it at this point to still be doing that bad practice. It should be only ever considered as a last resort when someone messes up and the source control is lost or someone really messed up and didnt commit the code, if thats the routine way of working then I think thats not acceptable.

Great, thank you.

We’re migrating from Automation Anywhere and we already have a few modules but I’m planning on creating more in UiPath since it seems more manageable than AA.

If you don’t mind I got another question
Can you “open” the workflows and see them when you import a library?