Evidence Harbor is a JavaFX desktop application for law enforcement evidence management, impound workflows. It is free to use, actively developed, and designed for any police department needing a lightweight on-premises solution.
Licensed under the Evidence Harbor Free Use, No Resale License.
- Free to use by police departments and other public safety/government users
- Permitted to modify for internal use
- Redistribution allowed on a non-commercial basis only
- Selling or commercial resale requires written permission
- Provided as-is, no warranty
See the LICENSE file for full terms.
| Component | Version |
|---|---|
| Java | 21 |
| JavaFX | 21.0.5 |
| Build | Maven |
| Database | MariaDB |
src/main/java/com/evidenceharbor/
app/ # Bootstrap, navigation, session, permissions, shared helpers
domain/ # Domain models (Evidence, Case, Officer, Person, Charge, ...)
persistence/ # Repository classes and DatabaseManager
ui/ # JavaFX controllers organized by module
admin/ # Admin dashboard, user management, permissions, audit trail,
# lookup admin, bank account ledger, evidence audit
cases/ # Case list, case detail, add evidence
dropbox/ # Dropbox check-in workflow
evidence/ # Evidence detail and intake
inventory/ # Inventory view
people/ # People management
reports/ # Reports
settings/ # Settings
shared/ # Shared UI components
tools/ # Utility tools
util/ # General utilities
src/main/resources/
fxml/ # JavaFX layout files
sql/ # Schema and seed scripts
styles/ # Global CSS themes
- Cases — create and manage cases, attach charges, link people (victims, suspects, witnesses, etc.), add evidence
- Inventory — full evidence inventory with search and status tracking
- People — person records with role associations across cases
- Dropbox Check-in — officer dropbox session workflow; processes items with status
In Dropbox - Reports — evidence and case reporting
- Add Evidence — barcode-driven intake with chain of custody
- Admin Dashboard — agency overview
- User Management — create/edit officers with role and password management
- Permission Management — per-officer permission overrides on top of role defaults
- Audit Trail — system-wide audit log
- Lookup Admin — manage lookup tables (evidence types, storage locations, statuses, etc.)
- Bank Account Ledger — track agency fund accounts and transactions
- Evidence Audit — evidence audit records
- Impound Lot — vehicle impound intake and tracking
Roles: admin, evidence_tech, officer
Each role has default permission flags. Admins can add or remove individual flags per officer. Effective permissions are computed at login as:
effective = role_defaults + granted_overrides − revoked_overrides
Permission flags gate both navigation visibility and runtime access checks via SessionManager.can(flag).
Notable gating:
can_view_all_evidence— required to access Inventory, Reports, and Dropbox Check-incan_manage_users— required for User Management and Permission Managementcan_view_audit— required for Audit Trailcan_manage_settings— required for Settings and Lookup Admin
Two-level layout:
- Top row — module tabs:
Evidence,Impound,Quartermaster - Secondary row — workspace tabs within the active module
Navigation is enforced server-side in Navigator.java — unauthorized navigation attempts redirect to the default page for the user's role.
DatabaseStartupScreen— verifies DB connectionFirstTimeSetupScreen/SetupWizard— runs on first launch to configure agency settingsLoginScreen— PBKDF2 password authentication- Main workspace loads with nav visibility applied per effective permissions
Sessions only activate when at least one evidence item has status In Dropbox at a valid dropbox location. Each session is logged to dropbox_sessions and generates chain-of-custody records.
Schema and seed data are applied automatically at startup by DatabaseManager using the MariaDB scripts in src/main/resources/sql/.
This section covers everything needed to build and run Evidence Harbor from source on Windows.
Evidence Harbor requires Java 21. The Microsoft Build of OpenJDK is recommended.
Download: https://learn.microsoft.com/en-us/java/openjdk/download#openjdk-21
Install:
- Run the installer (
.msi) - Note the install path (e.g.
C:\Program Files\Microsoft\jdk-21.0.10.7-hotspot) - Set
JAVA_HOMEbefore running Maven:
$env:JAVA_HOME = "C:\Program Files\Microsoft\jdk-21.0.10.7-hotspot"To make this permanent, add it to your system environment variables.
Verify:
java -version
# should output: openjdk version "21.x.x"Maven handles compilation, dependency resolution, and running the app.
Download: https://maven.apache.org/download.cgi — download the binary zip (e.g. apache-maven-3.9.9-bin.zip)
Install:
- Extract to a stable location (e.g.
C:\Users\<you>\Maven\apache-maven-3.9.9) - Add
bin\to your PATH, or call it directly:
& "C:\Users\<you>\Maven\apache-maven-3.9.9\bin\mvn.cmd" --versionVerify:
mvn --version
# should output: Apache Maven 3.9.xEvidence Harbor connects to a local or networked MariaDB instance.
Download: https://mariadb.org/download/ — select version 12.2.2, Windows x64 MSI
Install:
- Run the
.msiinstaller - During setup, set a root password (or leave blank for local dev)
- Default port is
3306— leave as-is unless you have a conflict - Enable the MariaDB Windows service so it starts automatically
After install, create the database:
CREATE DATABASE evidence_harbor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;You can run this in the MariaDB command-line client:
mysql -u root -p
# then paste the CREATE DATABASE statement aboveThe schema and seed data are applied automatically by the app on first launch — you do not need to run SQL scripts manually.
Default connection settings (configured via the first-time setup wizard on first launch):
| Setting | Default |
|---|---|
| Host | 127.0.0.1 |
| Port | 3306 |
| Database | evidence_harbor |
| User | root |
| Password | (blank or whatever you set during MariaDB install) |
Connection settings are saved to %USERPROFILE%\EvidenceHarbor\db.properties after first setup.
Tailscale is used to securely connect officers at remote sites to a central MariaDB server over a private VPN without opening firewall ports.
Download: https://tailscale.com/download/windows — version 1.96.3
Install:
- Run the installer
- Log in with a Tailscale account (free tier supports small teams)
- On the server machine running MariaDB, note the Tailscale IP (e.g.
100.x.x.x) - On client machines, set the MariaDB host in the Evidence Harbor setup wizard to that Tailscale IP
This is optional — if all machines are on the same local network, Tailscale is not needed.
These are declared in pom.xml and downloaded automatically by Maven on first build. No manual installation required.
| Dependency | Version | Purpose |
|---|---|---|
org.openjfx:javafx-controls |
21.0.5 | JavaFX UI controls |
org.openjfx:javafx-fxml |
21.0.5 | JavaFX FXML layout loading |
org.mariadb.jdbc:mariadb-java-client |
3.4.1 | MariaDB JDBC driver |
org.junit.jupiter:junit-jupiter |
5.10.2 | Unit testing (test scope only) |
| Software | Version | Required | Download |
|---|---|---|---|
| JDK 21 | 21.x | Yes | https://learn.microsoft.com/en-us/java/openjdk/download#openjdk-21 |
| Apache Maven | 3.9.x | Yes | https://maven.apache.org/download.cgi |
| MariaDB | 12.2.2 | Yes | https://mariadb.org/download/ |
| Tailscale | 1.96.3 | No | https://tailscale.com/download/windows |
$env:JAVA_HOME = "C:\Program Files\Microsoft\jdk-21.0.10.7-hotspot"
mvn clean javafx:runmvn clean packageMain class: com.evidenceharbor.app.MainApp
.gitignoreexcludes build output and local DB artifacts.- After major FXML changes, run
mvn cleanbefore launch to clear stale compiled resources. - All ComboBoxes in the UI are type-searchable (filter as you type).