Liking cljdoc? Tell your friends :D

Change Log

All notable changes to this project will be documented in this file. This change log follows the conventions of keepachangelog.com.

[0.4.5] - 2026-04-16

Fixed

  • hooks-users.clj — Implemented before-save hook to handle password lifecycle for user records:
    • New user, no password provided → a bcrypt-hashed default password is set equal to the user's username (email). The user can change it via /change/password after first login.
    • Existing user, no password in form params → the :password key is stripped from params before the update, leaving the existing hash in the database untouched.
    • Any user with an explicit password value → the plain-text value is hashed with buddy-hashers (bcrypt) before being written to the database.
  • users-entity.edn — Enabled the :hooks {:before-save ...} entry so the password hook is active in every generated project.

[0.4.4] - 2026-04-16

Fixed

  • layout.clj — Replaced the plain logout button in the navbar with a user dropdown. Logged-in users now see a dropdown showing their username (with a bi-person-circle icon) that contains a Change Password link (/change/password) and a Logout item. This makes the password change feature reachable from the authenticated UI for the first time.
  • models-form.clj — Removed the "Change Password" button from the login form. It linked to a wrap-login-protected route (/change/password) making it inaccessible to unauthenticated users and creating a redirect loop. The entry point is now correctly placed in the post-login navbar dropdown.

[0.4.3] - 2026-04-16

Added

  • resources/migrations/006-audit_log.sqlite.up.sql — new migration creates the audit_log table for SQLite.
  • resources/migrations/006-audit_log.sqlite.down.sql — drops the audit_log table (SQLite).
  • resources/migrations/006-audit_log.mysql.up.sql — new migration creates the audit_log table for MySQL.
  • resources/migrations/006-audit_log.mysql.down.sql — drops the audit_log table (MySQL).
  • resources/migrations/006-audit_log.postgresql.up.sql — new migration creates the audit_log table for PostgreSQL.
  • resources/migrations/006-audit_log.postgresql.down.sql — drops the audit_log table (PostgreSQL).
  • audit-log-entity.edn — new read-only entity config for the audit_log table. Restricted to ["A" "S"] rights, all create/edit/delete actions disabled, sorted newest-first. Generated to resources/entities/audit_log.edn in every new project.
  • webgen.clj — registered audit-log-entity.edn so it is included in every generated project.

Changed

  • README.md — Section 12 (Audit Trail) fully rewritten:
    • Separated into two mechanisms: (1) audit columns on the entity table (created_by, created_at, modified_by, modified_at) and (2) the audit_log table written on every save/delete when :audit? true.
    • Added note that audit columns are auto-detected even without :audit? true — if the four columns exist in the table they are populated automatically.
    • Added CREATE TABLE SQL for all three databases with correct TEXT/VARCHAR column types matching what the framework actually writes (java.time.Instant serialized as ISO-8601 string).
    • Added connection note: audit log is always written to the :default connection.
    • Updated wording from "must be created manually" to "ships with the template" now that the migrations are included.
    • Added read-only entity config example for browsing audit log entries in the admin UI.
  • README.md — Section 4 (Entity Configuration): Custom UI Renderers section expanded to document all three supported keys (:grid-fn, :form-fn, :dashboard-fn) with correct function signatures and Hiccup examples for each.
  • README.md — Section 23 (Custom Dashboards and Reports): added "Working Example: Contactos Summary Dashboard" subsection with complete, runnable controller/model/view code using the contactos, cars, and siblings demo tables.
  • README.md — All SQL JOIN examples updated to use 3-character table aliases (e.g. pro, cat, ord, cus) matching the convention used by lein scaffold.
  • README.md — FK Field section: added :queries blocks with LEFT JOIN examples to the single-FK, multiple-FK, and cascading-FK examples showing how both :list and :get must join the FK table to populate :grid-only? display columns.

[0.4.2] - 2026-04-12

Fixed

  • README.md — Section 17 (Menu Customization) examples corrected to match the actual menu.clj API:
    • custom-nav-links now documented as vector-of-vectors ["/path" "Label" "Rights" order] instead of the previously shown map format.
    • custom-dropdowns now includes required :id, :data-id, and :order keys, with items in the correct vector format.
    • Removed the incorrect get-menu-config reimplementation example; replaced with a note that the function handles merging automatically.
  • README.md — Section 4 Menu Categories table: removed nonexistent :catalog category.
  • README.md — Section 23 "Adding Items to the Menu": replaced invalid bare EDN map literals (using :url, :icon, :category keys) with a correct custom-nav-links / custom-dropdowns example.

[0.4.1] - 2026-04-12

Fixed

  • models-form.clj — single-toggle :checkbox fields (no :options) now render correctly. Previously the build-field function only handled checkboxes as multi-option groups, causing a single checkbox to produce an empty div with no <input> element.
    • Added a dedicated branch for option-less checkboxes that renders a hidden fallback <input value=""> (so the param key is always present when unchecked) followed by the real checkbox input.
    • :checked state is now correctly determined by comparing the current DB value against the configured checked value.
  • engine-render.clj — the :checkbox render path now passes :checked-value (the entity field's configured :value, e.g. "T") separately from :value (the current DB value), so the checked state reflects the actual stored data instead of always being true.

Changed

  • README.md:checkbox field documentation updated to clarify that unchecked submits "", and added a canonical before-save hook pattern for coercing the value at the database layer.
  • docs/TUTORIAL_POS_INVENTORY.md — added new Step 3 — Remove the Example Files instructing readers to delete the generated example migrations (003-contactos, 004-siblings, 005-cars), their entity EDN files, and the example hooks (contactos.clj, cars.clj, siblings.clj) before starting the tutorial. All subsequent steps renumbered (4–17).

[0.4.0] - 2026-04-12

Added

  • Section 23 in README.md — "Custom Dashboards and Reports": full guide to the 20% of functionality outside the entity system, including KPI card dashboards, date-range reports, CSV export, JSON chart APIs, and a decision table for when to use entity config vs a custom handler.
  • docs/TUTORIAL_POS_INVENTORY.md — new step-by-step tutorial for junior programmers building a Point of Sale inventory system from scratch. Covers all 16 steps: project creation, database migrations, all entity configs (productos, provedores, inventario, movimientos), hook implementations for image upload and automatic inventory adjustment on save/delete, and the full custom POS register screen (controller/model/view, CSS, JavaScript cart engine, CSRF-safe fetch API, receipt printing).

Changed

  • README.md — complete rewrite. All content from CHEATSHEET.md, FRAMEWORK_GUIDE.md, HOOKS_GUIDE.md, DATABASE_MIGRATION_GUIDE.md, QUICK_REFERENCE.md, QUICKSTART.md, and RUN_APP.md consolidated into a single 2,400+ line professional reference covering every entity option, all field types, hooks, validators, computed fields, subgrids, custom queries, access control, audit trail, migrations, scaffolding, custom routes, menu, i18n, auth, themes, deployment, and publishing.
  • resources/leiningen/new/webgen/README.md — rewritten as a practical getting-started guide for generated projects (quick start, project structure, adding entities, database commands, config reference, troubleshooting).
  • resources/i18n/en.edn — added legend at top; all section headers prefixed with [GENERIC] or [DEMO] to distinguish reusable framework keys from real estate demo content.
  • resources/i18n/es.edn — same [GENERIC]/[DEMO] markers applied (legend written in Spanish).

Removed

  • CHEATSHEET.md — content merged into root README.md.
  • TEMPLATE_README.md — superseded by the rewritten README.md.
  • CONTRIBUTING.md — removed (content not relevant to template end users).
  • CODE_OF_CONDUCT.md — removed.
  • docs/DEMO.md — removed; demo content covered in tutorial.
  • docs/TUTORIAL_REALSTATE_MEXICO.md — replaced by TUTORIAL_POS_INVENTORY.md.
  • resources/leiningen/new/webgen/FRAMEWORK_GUIDE.md — merged into root README.md.
  • resources/leiningen/new/webgen/HOOKS_GUIDE.md — merged into root README.md.
  • resources/leiningen/new/webgen/DATABASE_MIGRATION_GUIDE.md — merged into root README.md.
  • resources/leiningen/new/webgen/COLLABORATION_GUIDE.md — removed.
  • resources/leiningen/new/webgen/QUICKSTART.md — merged into root README.md.
  • resources/leiningen/new/webgen/RUN_APP.md — merged into root README.md.
  • resources/leiningen/new/webgen/QUICK_REFERENCE.md — merged into root README.md.

(0.3.2) - 2026-01-25

Upgraded

  • Enhanced fk fields. Added sorting and filtering

[0.1.5] - 2026-01-13

Fixed

  • CRITICAL: Fixed hardcoded "rs" folder in hooks paths - hooks now created in correct project-specific directories (e.g., src/my_project/hooks/ instead of src/rs/hooks/)
  • CRITICAL: Fixed MySQL scaffolding failures - scaffolding now works correctly with MySQL databases
    • Added catalog parameter to all JDBC metadata queries for MySQL compatibility
    • Fixed empty field vectors issue in generated EDN files
    • Added fallback logic for case-sensitive table names
  • CRITICAL: Fixed cross-database scaffolding - MySQL now only scaffolds tables from your specific database, not from system databases or other databases on the same server
  • Enhanced system table filtering for MySQL (mysql_, sys_, information_schema, performance_schema)

Changed

  • Updated engine-scaffold.clj: Added get-catalog-from-connection() and normalize-table-name() helper functions
  • Updated dev.clj: Added dynamic namespace detection for hooks directory monitoring
  • Updated models-routes.clj: Added dynamic namespace detection for routes file paths
  • Updated all hook template files to use {{sanitized}} instead of hardcoded "rs"
  • Updated all entity template files to use {{sanitized}} instead of hardcoded "rs"

Compatibility

  • Fully backward compatible with SQLite and PostgreSQL
  • MySQL projects now work correctly

[0.1.13] - 2025-08-26

Fixed

  • Fixed malformed template tag {{name} in models-routes.clj that was preventing project generation.

[0.1.12] - 2025-08-26

Changed

  • Added error checking to prevent overwriting existing grids, subgrids, dashboards, or reports during generation.

[0.1.11] - 2025-08-26

Changed

  • Updated builder.clj touch utility to trigger wrap-reload after generating grids and related files, improving development workflow.

[0.1.10] - 2025-08-25

Fixed

  • Fixed error in layout.clj.

Published

  • Published new version to Clojars as org.clojars.hector/lein-template.lst v0.1.10.

[Unreleased]

[0.1.6] - 2025-08-17

Published

  • Published Leiningen template to Clojars as org.clojars.hector/lein-template.lst (users run lein new org.clojars.hector/lst <name>)
  • Disable signing for CI deploys to Clojars (:sign-releases false)

[0.1.5] - 2025-08-17

Added

  • GitHub Actions workflow to publish to Clojars on tag or manual dispatch
  • Move template coordinates to verified group org.clojars.hector/lein-template.lst and bump version to 0.1.5

[0.1.4] - 2025-08-17

Fixed

  • Template project.clj now uses dotted namespaces (no stray spaces), allowing generated apps to parse and run tests
  • VS Code workspace settings to avoid format-on-save corruption of template files

[0.1.1] - 2019-11-08

Changed

  • Documentation on how to make the widgets.

Removed

  • make-widget-sync - we're all async, all the time.

Fixed

  • Fixed widget maker to keep working when daylight savings switches over.

0.1.0 - 2019-11-08

Added

Can you improve this documentation?Edit on GitHub

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
Move to previous article
Move to next article
Ctrl+/Jump to the search field
× close