You can check how many license units available with this method $SYSTEM.License.LUAvailable()

And next depends on the kind of application, you develop. If it's some web application, and you have to achieve it for web session, I would try using %CSP.SessionEvents with OnLogin event, check how many license units are available and who is logging in, and decide to decline the login.

If you need it for some else ways of connections, I think the best place would be ZAUTHENTICATE.

ahh, you have a just a wrong JSON, I would recommend to find a way how to fix it from the side where it comes from.

Key names in the JSON also have to be wrapped by quotes

Should not be any problem if you use the same user both in Studio and VSCode. PROTECT error means you have security issue and your user not granted for write permission, or that database is just in read only mode

Look at this page, it may help you in understanding how to configure it.

If you need to store classes and mac routines separately, you can use

  "objectscript.export": {
    "addCategory": true

In the case of different behavior for different types, and place only mac routines to the specific folder, use this.

  "obejctscript.export": {
    "addCategory": false,
    "folder": {
      "mac": "mac"

Yeah, It's a bit tricky. All the code in Caché really stored directly in the database. But with VSCode, code can be stored locally as files, for easy access and the ability to use source control such as git. After any save of the file related to Caché, e.g. Classes or routines, it will be sent to the server and compiled there.

Having a separate development server, and a production server are for sure is best practice, for sure. With no permission to edit code directly on production. And with having DevOps, will be possible to build a production version and easily deploy it, by some actions or events.

While you are a front-end developer, you may be familiar with VSCode. And I would like to recommend you to use it for Cache as well. The minimal supported version is 2016.2, so with 2017.1 you should be able to use it.