{"id":338490,"date":"2026-07-12T17:22:47","date_gmt":"2026-07-12T17:22:47","guid":{"rendered":"https:\/\/es.wordpress.org\/plugins\/graj-license-manager\/"},"modified":"2026-07-12T19:59:34","modified_gmt":"2026-07-12T19:59:34","slug":"graj-license-manager","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/graj-license-manager\/","author":15669692,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.19","stable_tag":"0.1.19","tested":"7.0.1","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"GRAJ License Manager","header_author":"GRAJ Studio","header_description":"Create products, issue activation codes and validate customer licenses from WordPress.","assets_banners_color":"222d42","last_updated":"2026-07-12 19:59:34","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/grajstudio.com\/graj-license-manager\/","header_author_uri":"https:\/\/grajstudio.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":34,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.18":{"tag":"0.1.18","author":"tdc2016","date":"2026-07-12 17:22:32"},"0.1.19":{"tag":"0.1.19","author":"tdc2016","date":"2026-07-12 19:59:34"}},"upgrade_notice":{"0.1.2":"<p>Adds setup pages and multiformat product metadata while keeping product counts unlimited.<\/p>","0.1.1":"<p>Keeps existing central license data while preparing the plugin for the separate Pro add-on.<\/p>","0.1.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3605037,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3605037,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3605037,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3605037,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.18","0.1.19"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3605037,"resolution":"1","location":"assets","locale":"","width":1440,"height":1100},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3605037,"resolution":"2","location":"assets","locale":"","width":1440,"height":1326},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3605037,"resolution":"3","location":"assets","locale":"","width":1440,"height":1268},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3605037,"resolution":"4","location":"assets","locale":"","width":1440,"height":900},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3605037,"resolution":"5","location":"assets","locale":"","width":1440,"height":1100}},"screenshots":{"1":"Dashboard summary with product, license and REST endpoint overview.","2":"Product configuration with setup page and shortcode fields.","3":"Manual license creation and recent license table.","4":"Admin license validation form with product, buyer, code and site URL fields.","5":"Basic email settings for license delivery through wp_mail()."}},"plugin_section":[],"plugin_tags":[271265,5472,146554,25563],"plugin_category":[],"plugin_contributors":[271266],"plugin_business_model":[],"class_list":["post-338490","plugin","type-plugin","status-publish","hentry","plugin_tags-activation-codes","plugin_tags-digital-products","plugin_tags-license-manager","plugin_tags-software-licensing","plugin_contributors-tdc2016","plugin_committers-tdc2016"],"banners":{"banner":"https:\/\/ps.w.org\/graj-license-manager\/assets\/banner-772x250.png?rev=3605037","banner_2x":"https:\/\/ps.w.org\/graj-license-manager\/assets\/banner-1544x500.png?rev=3605037","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/graj-license-manager\/assets\/icon-128x128.png?rev=3605037","icon_2x":"https:\/\/ps.w.org\/graj-license-manager\/assets\/icon-256x256.png?rev=3605037","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/graj-license-manager\/assets\/screenshot-1.png?rev=3605037","caption":"Dashboard summary with product, license and REST endpoint overview."},{"src":"https:\/\/ps.w.org\/graj-license-manager\/assets\/screenshot-2.png?rev=3605037","caption":"Product configuration with setup page and shortcode fields."},{"src":"https:\/\/ps.w.org\/graj-license-manager\/assets\/screenshot-3.png?rev=3605037","caption":"Manual license creation and recent license table."},{"src":"https:\/\/ps.w.org\/graj-license-manager\/assets\/screenshot-4.png?rev=3605037","caption":"Admin license validation form with product, buyer, code and site URL fields."},{"src":"https:\/\/ps.w.org\/graj-license-manager\/assets\/screenshot-5.png?rev=3605037","caption":"Basic email settings for license delivery through wp_mail()."}],"raw_content":"<!--section=description-->\n<p>GRAJ License Manager gives digital product sellers a simple WordPress dashboard for creating product records, issuing activation codes and validating customer licenses.<\/p>\n\n<p>The free edition is intentionally focused: it handles products, manual licenses, domain limits, admin validation, a public license verification endpoint and basic delivery through WordPress email.<\/p>\n\n<h4>Free features<\/h4>\n\n<ul>\n<li>Create unlimited product records with setup URLs.<\/li>\n<li>Store product type metadata for non-WordPress products.<\/li>\n<li>Create editable setup pages per product.<\/li>\n<li>Render setup instructions with <code>[graj_product_setup product_id=\"my-product\"]<\/code>.<\/li>\n<li>Set domain limits per product.<\/li>\n<li>Create manual activation codes.<\/li>\n<li>Validate licenses from wp-admin.<\/li>\n<li>Public REST endpoint for license verification.<\/li>\n<li>Optional domain registration during validation.<\/li>\n<li>Basic license email delivery with <code>wp_mail()<\/code>.<\/li>\n<li>Event logs that store buyer email hashes.<\/li>\n<li>Activation codes stored as hashes, not plain text.<\/li>\n<li>Built-in admin documentation with the Free workflow and a clear Pro upgrade path.<\/li>\n<\/ul>\n\n<h4>Premium features<\/h4>\n\n<p>GRAJ License Manager Pro adds product versions, protected downloads, deploy provider connections, audit workflows, payment webhooks, n8n fulfillment, advanced email providers and secure product update automation.<\/p>\n\n<h4>Security model<\/h4>\n\n<ul>\n<li>Activation codes are never stored in plain text.<\/li>\n<li>Lookup keys use HMAC.<\/li>\n<li>Admin forms use nonces.<\/li>\n<li>Admin screens require <code>manage_options<\/code>.<\/li>\n<li>Public verification responses avoid exposing buyer details.<\/li>\n<li>Domain validation rejects local\/private hosts.<\/li>\n<li>Public verification has basic rate limiting.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>graj-license-manager<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate <strong>GRAJ License Manager<\/strong> from the WordPress Plugins screen.<\/li>\n<li><p>For stronger portability, add a master key to <code>wp-config.php<\/code>:<\/p>\n\n<p>define( 'GRAJ_LICENSE_MANAGER_MASTER_KEY', 'replace-with-a-long-random-secret' );<\/p><\/li>\n<li><p>Go to <strong>GRAJ Licenses -&gt; Products<\/strong> and create your first product.<\/p><\/li>\n<li>Under <strong>Products configured<\/strong>, create its public activation form page so emailed licenses include the setup link.<\/li>\n<li>Go to <strong>GRAJ Licenses -&gt; Licenses<\/strong> and create a manual license.<\/li>\n<li>Copy the activation code when it appears. It is shown only once.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20this%20a%20checkout%20plugin%3F\"><h3>Is this a checkout plugin?<\/h3><\/dt>\n<dd><p>No. The free edition manages products and licenses after a purchase happens elsewhere.<\/p><\/dd>\n<dt id=\"are%20activation%20codes%20stored%20in%20plain%20text%3F\"><h3>Are activation codes stored in plain text?<\/h3><\/dt>\n<dd><p>No. Activation codes are hashed. The code is displayed only once when created.<\/p><\/dd>\n<dt id=\"can%20i%20validate%20a%20license%20for%20a%20domain%3F\"><h3>Can I validate a license for a domain?<\/h3><\/dt>\n<dd><p>Yes. Send a <code>site_url<\/code> during validation or enter it in the admin validation form.<\/p><\/dd>\n<dt id=\"does%20it%20send%20emails%3F\"><h3>Does it send emails?<\/h3><\/dt>\n<dd><p>Yes, using WordPress native <code>wp_mail()<\/code>. For more delivery providers, use the Pro edition or an SMTP plugin.<\/p><\/dd>\n<dt id=\"what%20does%20pro%20add%3F\"><h3>What does Pro add?<\/h3><\/dt>\n<dd><p>Pro adds payment webhooks, n8n fulfillment, advanced email providers and update automation.<\/p><\/dd>\n<dt id=\"does%20the%20setup%20shortcode%20work%20in%20elementor%3F\"><h3>Does the setup shortcode work in Elementor?<\/h3><\/dt>\n<dd><p>Yes. The setup shortcode works in Classic Editor, Block Editor, Elementor and builders that render WordPress shortcodes.<\/p><\/dd>\n<dt id=\"are%20vercel-like%20platforms%20deployed%20automatically%3F\"><h3>Are Vercel-like platforms deployed automatically?<\/h3><\/dt>\n<dd><p>No. Frontend apps and Vercel-like platforms are handled as downloadable bundles in this phase. Automatic API deploys are planned as a separate future phase.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.19<\/h4>\n\n<ul>\n<li>Adds an informational link from the Pro admin screens to the GRAJ License Manager Pro page so users can learn how to upgrade.<\/li>\n<\/ul>\n\n<h4>0.1.18<\/h4>\n\n<ul>\n<li>Adds permanent reminders on the Products and Licenses screens to prepare the product activation page before emailing licenses.<\/li>\n<li>Links directly to the configured-product action that creates and saves the setup URL.<\/li>\n<li>Clarifies the plugin description shown on the WordPress Plugins screen.<\/li>\n<\/ul>\n\n<h4>0.1.17<\/h4>\n\n<ul>\n<li>Normalized the plugin source against WordPress Coding Standards.<\/li>\n<li>Strengthened admin input sanitization while preserving existing workflows.<\/li>\n<li>Added blocking WPCS, PHP compatibility and smoke-test quality gates.<\/li>\n<\/ul>\n\n<h4>0.1.16<\/h4>\n\n<ul>\n<li>Hardens admin input handling to consistently unslash values before sanitization.<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>Adds product type metadata for multiformat products outside the WordPress plugin update system.<\/li>\n<li>Adds editable setup page creation per product.<\/li>\n<li>Adds <code>[graj_product_setup product_id=\"...\"]<\/code> for Classic Editor, Block Editor, Elementor and shortcode-compatible builders.<\/li>\n<li>Adds visible production reminder: frontend apps and Vercel-like platforms are downloadable bundles in this phase; no automatic API deploys yet.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Core package now uses the central <code>graj_lm_*<\/code> data tables shared with Pro.<\/li>\n<li>Preserves the existing <code>graj_license_manager_install_secret<\/code> option so previous activation codes remain valid.<\/li>\n<li>Prepared for the separate Free\/Core + Pro add-on distribution model.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial free edition.<\/li>\n<li>Product management.<\/li>\n<li>Manual license creation.<\/li>\n<li>Admin license validation.<\/li>\n<li>Public license verification endpoint.<\/li>\n<li>Domain limit enforcement.<\/li>\n<li>Basic wp_mail delivery.<\/li>\n<\/ul>","raw_excerpt":"Create products, issue activation codes and validate customer licenses from WordPress.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/338490","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=338490"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/tdc2016"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=338490"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=338490"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=338490"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=338490"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=338490"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=338490"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}