Skip to content

Instantly share code, notes, and snippets.

@trandaison
Last active November 6, 2025 21:30
Show Gist options
  • Save trandaison/40b1d83618ae8e3d2da59df8c395093a to your computer and use it in GitHub Desktop.
Save trandaison/40b1d83618ae8e3d2da59df8c395093a to your computer and use it in GitHub Desktop.
Get full version of StarUML

Note: This is the guide for v 2.x.

For the v3, please follow this url: https://blog.csdn.net/sam_shan/article/details/80585240 Thanks @liy-cn for contributing.

For the v6, please follow the comment below: https://gist.github.com/trandaison/40b1d83618ae8e3d2da59df8c395093a?permalink_comment_id=5079514#gistcomment-5079514

StarUML

Download: StarUML.io

Crack

Source: jorgeancal

After installing StartUML successfully, modify LicenseManagerDomain.js as follow:

/**
 * File name: LicenseManagerDomain.js
 * Mac OS: /Applications/StarUML.app/Contents/www/license/node/
 * Linux: /opt/staruml/www/license/node/
 */

(function () {
    "use strict";
 
    var NodeRSA = require('node-rsa');
 
    function validate(PK, name, product, licenseKey) {
        return{
           name: "sontd",
           product: "StarUML",
           licenseType: "vip",
           quantity: "unlimited",
           licenseKey: "no, thanks!"
        };
    }
 
    function init(domainManager) {
        if (!domainManager.hasDomain("LicenseManager")) {
            domainManager.registerDomain("LicenseManager", {major: 0, minor: 1});
        }
        domainManager.registerCommand(
            "LicenseManager", // domain name
            "validate",       // command name
            validate,         // command handler function
            false,            // this command is synchronous in Node ("false" means synchronous")
            "Validate License",
            [
                {
                    name: "PK",
                    type: "string",
                    description: "PK"
                },
                {
                    name: "name",
                    type: "string",
                    description: "name of license owner"
                },
                {
                    name: "product",
                    type: "string",
                    description: "product name"
                },
                {
                    name: "licenseKey",
                    type: "string",
                    description: "license key"
                }
            ],
            [
                {
                    name: "result", // return values
                    type: "object",
                    description: "result"
                }
            ]
        );
    }
 
    exports.init = init;
 
}());

Now, open it and go to Help > Enter License and you have to write the name and the licence key which you have written on LicenseManagerDomain.js. In this example would be the next:

name: "sontd"
License Key: "no, thanks!"

Enjoy it!

@le-Affan
Copy link

le-Affan commented Nov 6, 2025

Hello, my language is not English, so I will use a translator. I did the following and it worked for me on Linux (StarUML v6.2.2). Modify the entire contents of src/engine/license-manager.js (to find the file I followed the instructions in one of the previous comments)

const { EventEmitter } = require("events");
const fs = require("fs");
const path = require("path");
const UnregisteredDialog = require("../dialogs/unregistered-dialog");
const packageJSON = require("../../package.json");

const PRO_DIAGRAM_TYPES = [
  "SysMLRequirementDiagram",
  "SysMLBlockDefinitionDiagram",
  "SysMLInternalBlockDiagram",
  "SysMLParametricDiagram",
  "BPMNDiagram",
  "WFWireframeDiagram",
  "AWSDiagram",
  "GCPDiagram",
];

var status = true;
var licenseInfo = {
  product: packageJSON.config.product_id,
  licenseType: "free", 
  quantity: 1,
};

/**
 * @private
 */
class LicenseManager extends EventEmitter {
  constructor() {
    super();
    this.projectManager = null;
  }

  isProDiagram(diagramType) {
    return PRO_DIAGRAM_TYPES.includes(diagramType);
  }

  /**
   * Get Registration Status
   * @return {string}
   */
  getStatus() {
    return status;
  }

  /**
   * Get License Information
   * @return {Object}
   */
  getLicenseInfo() {
    return licenseInfo;
  }

  /**
   */
  validate() {
    return Promise.resolve(licenseInfo);
  }

  /**
   */
  async checkLicenseValidity() {
    setStatus(this, true); 
  }

  /**
   *
   * @param {string} licenseKey
   */
  register(licenseKey) {
    return Promise.resolve(licenseInfo);
  }

  htmlReady() {}

  appReady() {
    this.checkLicenseValidity();
  }
}

module.exports = LicenseManager;

It worked for me so far, I hope it works for someone else too.

i changed the file. It still kept showing that my license has expired.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment