editions
Community Edition
The complete, self-hosted URL shortener under EUPL-1.2 — links, statistics, users and roles, REST API, client SDK and admin UI.
The Community Edition is the product, not a demo. It runs a full URL shortening service on your own infrastructure with no feature timer, no usage ceiling and no telemetry.
What you get
| Module | Content |
|---|---|
core | domain model, DTOs, validation, JSON |
server | REST admin API and redirect server — JDK HttpServer, jSentinel security, EclipseStore persistence |
client | Java SDK for the REST API |
ui | Vaadin admin interface |
Features. Short links with custom aliases and expiration, the redirect service, click statistics (device, referrer, language, bot detection over a hashed IP), user management with roles and permissions, bulk creation, import and export, and a full REST API with a Java client SDK.
Build it yourself
./mvnw clean verify
The reactor runs the complete test suite, including the end-to-end and security
suites — these start a real server in-process rather than mocking it. All
persistent test state is written below target/, so mvn clean resets
everything.
Extension points
The community edition publishes the seams the Enterprise Edition plugs into. They are ordinary Java SPIs, so your own plug-ins can use them too:
- Server —
com.svenruppert.urlshortener.api.extension:HandlerContributionwith aServerContext, plus lifecycle hooks for create-time metadata, delete cascades and list filters. Contributed endpoints run behind the standard security pipeline; duplicate paths fail fast at startup. - UI —
com.svenruppert.urlshortener.ui.vaadin.extension:FeatureContributioncontributes routes, drawer entries, navbar components and sections in the link create form and details dialog. Contributed routes are registered dynamically under the main layout.
License
EUPL-1.2 — the European Union Public Licence. jSentinel Ltd additionally offers this code base under commercial license terms; contributions are accepted under the DCO plus an additional license grant.
