Editions
URLShortener ships as an open-source Community Edition plus an optional Enterprise plug-in layer. Same code base, same version, one plug-in seam.
URLShortener follows an open-core model. The Community Edition is a complete, production-ready URL shortener under the EUPL-1.2 — links, redirects, statistics, users and roles, REST API, import and export. Nothing is time-limited, nothing phones home, and nothing is disabled to sell you an upgrade.
The Enterprise Edition is an optional plug-in layer on top of it. It does not fork, patch, or replace the community code — it plugs into published extension points at runtime.
Community Edition
The complete shortener. Self-hosted, EUPL-1.2, free forever.
- Links, custom aliases, expiration, redirects
- Click statistics with device, referrer and bot detection
- Users, roles and permissions
- REST API, Java client SDK, Vaadin admin UI
- Bulk create, import and export
Enterprise Edition
Optional plug-ins for teams that need campaign management, AI access and audit exports.
- Campaigns, tags and placement labels
- MCP server for AI agents
- Command-line client
- Audit export
- Commercial license and support by jSentinel Ltd
How the two fit together
Enterprise features register themselves through Java’s ServiceLoader at startup.
The community modules publish two extension seams — one for the REST server, one
for the Vaadin UI — and the plug-in jars simply sit on the classpath.
flowchart TB
subgraph CE["Community Edition · EUPL-1.2"]
core["core
domain · DTOs · validation"]
server["server
REST API · redirects"]
ui["ui
Vaadin admin"]
client["client
Java SDK"]
end
subgraph SPI["Plug-in seams (published SPI)"]
hspi["HandlerContribution
ServerContext · lifecycle hooks"]
fspi["FeatureContribution
routes · menu · form sections"]
end
subgraph EE["Enterprise Edition · commercial"]
lm["link-meta
campaigns · tags · labels"]
ae["audit-export"]
mcp["MCP server"]
cli["CLI"]
end
server --- hspi
ui --- fspi
hspi -.plugs into.- lm
fspi -.plugs into.- lm
hspi -.plugs into.- ae
fspi -.plugs into.- ae
What this means in practice
- No fork, no patched build. Community sources are never modified for a commercial feature. A build-time boundary test fails the build if community code ever references an enterprise package.
- Graceful degradation. Without a license the plug-in endpoints answer
403 license requiredand their menu entries and views disappear. The community application keeps running unchanged. - Your data stays yours. Data written by an enterprise feature stays in your store. If a license lapses, that data lies dormant — and comes back the moment a license is present again. Nothing is deleted and nothing is held hostage.
- One version number. Both editions are built and released from the same version, so a community upgrade never leaves the plug-ins behind.
The complete, self-hosted URL shortener under EUPL-1.2 — links, statistics, users and roles, REST API, client SDK and admin UI.
Enterprise EditionOptional commercial plug-ins: campaigns and tags, MCP server for AI agents, CLI, and audit export — plugged into the community edition through published SPIs.
