[general]
name=PlanX
email=yusuf.eminoglu@deu.edu.tr
author=Yusuf Eminoglu
qgisMinimumVersion=3.22
description=Embedded urban analytics engine: space syntax (segment angular analysis), network centrality, urban morphology, OD matrices, service areas, 15-minute-city accessibility, green infrastructure (park hierarchy access, patch connectivity), cycling (Level of Traffic Stress classification and low-stress connectivity islands), GTFS public transport (feed import and validation, stop frequency maps, door-to-door walk+transit travel times with transfers), accessibility equity (Gini, Theil between/within groups, Atkinson index, Lorenz/concentration curves, demographic cross-tabs), microclimate (shadow casting, sun hours, clear-sky solar irradiation, annual solar potential, sky view factor, frontal area, heat island risk, road noise screening, road emissions and air quality dispersion screening), visibility (DSM viewsheds, isovist fields, landmark visual exposure), plan standards QA (per-capita land-use balance, facility adequacy, density grids), population and housing (cohort-component projection, housing needs, residential zoning capacity), walkability (street-segment walk scores from intersection density, land-use mix, destinations, block length and slope, plus quality-weighted pedestrian routing), location-allocation optimization (maximal coverage, p-median, capacity-respecting allocation, capacitated facility siting, multi-objective land-use allocation with compactness, adjacency, and contiguity, land-use Pareto front of suitability versus compactness), urban growth (land-cover change matrices, deterministic cellular-automaton growth simulation, SDG 11.3.1 sprawl metrics), hazard screening (priority-flood DEM filling, D8 flow accumulation, height-above-nearest-drainage inundation mapping, flood exposure of buildings and population), travel demand modeling (trip generation rates, doubly constrained gravity distribution with exponential or power deterrence over street network, and multinomial logit mode split), land-use/transport interaction pipeline (CA growth simulation, largest-remainder population growth allocation to newly developed cells, access/walkability re-evaluation and scenario snapshotting) and a plan performance dashboard with batchable scenario snapshots, scenario A/B comparison, a one-click HTML report and a Batch Plan Auditor that runs the whole battery in one call - all computed natively inside QGIS, no external plugins or services.
about=PlanX is the flagship of the PlanX ecosystem: a self-contained urban analytics studio for city planners and researchers. It embeds real implementations of the methods urban analysts usually need separate tools for - space syntax segment angular analysis (integration, choice, NACH/NAIN), the full centrality family (degree, closeness, straightness, eigenvector, betweenness), urban morphology (building form metrics, morphological tessellation, Spacematrix GSI/FSI/OSR, street orientation entropy), network accessibility (OD cost matrix, service-area isochrones, nearest-facility allocation, multi-amenity 15-minute-city scores with population-weighted summaries), public transport straight from a GTFS zip (feed import with clear validation errors and per-day stop/route service stats, stop frequency and headway maps for any time window, and door-to-door transit travel times that walk to a stop on the street network, ride a RAPTOR-style timetable with transfers and walk to each destination, always compared against walking all the way), accessibility-equity analysis (population-weighted Gini, a Theil index split into between- and within-group inequality, P90/P10 ratio and access-poverty share, plus a Lorenz/concentration curve export and the Atkinson index at a chosen inequality-aversion, and demographic equity cross-tabs that cut any per-unit value into population-weighted classes and report each subgroup's representation ratio among the worst- and best-served together with Duncan dissimilarity - the spatial-justice view), microclimate screening (date-and-time shadow casting with an embedded NOAA solar-position model, whole-day sun-hours maps, clear-sky daily solar irradiation combining shadow-aware beam with SVF-weighted diffuse light, annual solar potential summing twelve representative average-day sweeps into a yearly kWh/m2 map with an optional 12-band monthly raster, sky view factor, frontal area index, and a vector heat-island risk grid built from buildings, green and water layers, plus a screening-quality road noise grid: RLS-90-style emission from traffic volumes and heavy shares, line-calibrated point sampling with geometric spreading and a fixed insertion loss behind buildings, with per-receiver levels and population exposure bands), green infrastructure (park-hierarchy access that tests minimum-size-within-maximum-distance standards on real network distances with per-class population coverage, and patch connectivity with the Probability-of-Connectivity index and each patch's dPC importance - the stepping-stone argument, quantified), cycling analysis (Level of Traffic Stress 1-4 from speed, lanes, AADT and infrastructure fields with editable thresholds, plus low-stress island connectivity and destination-reach population summaries), visibility analysis (DSM viewsheds from observer points with observer and target heights, an isovist field that samples Benedikt's 2-D visibility measures - area, radials, circularity, occlusivity - on a point grid between buildings, and landmark visual exposure that counts from where a landmark's outline can be seen, the skyline/heritage screening view), plan standards QA (land-use balance against configurable per-capita standards, facility adequacy combining capacity with network distance, dasymetric density grids), the demographic backbone of plan-making (a cohort-component population projection as a Leslie matrix - per-age-group survival, fertility and net migration, rates as table fields, no locale assumptions; a housing needs assessment turning the horizon population into dwellings to deliver with vacancy allowance, replacement losses and backlog; and residential capacity that converts each parcel's FAR minus existing floorspace into whole dwelling units with a district roll-up - projection feeds needs, capacity tests whether the zoning can deliver them), a walkability studio (a Walkability Audit that scores every street segment 0-100 from the classic walkability-index ingredients - intersection density, land-use mix entropy, destination counts, block length and slope, each normalised with editable breakpoints and weights - and Pedestrian Route Quality, which routes over quality-weighted streets and reports the detour ratio, the mean walk score along the route and the share spent on low-scoring segments), location-allocation optimization (greedy maximal coverage and Teitz-Bart p-median on network distances, with candidate-site screening and support for existing facilities, plus a capacity-respecting allocation that sends demand to the nearest facility with free capacity and spills to the next when it is full, capacitated facility siting with capacity-aware Teitz-Bart swap improvement, and a multi-objective land-use allocation optimizer that assigns parcels to land uses to maximise total suitability while meeting a target area for each use, with optional compactness, adjacency, and hard contiguity objectives that shape contiguous, compatible zones, and a land-use Pareto front that runs the allocation across a sweep of compactness weights and reports the non-dominated suitability-versus-compactness trade-off with its knee, instead of committing to one weighted run), urban growth analytics (a land-cover transition matrix with per-class gains, losses and persistence in hectares; a deterministic constrained cellular-automaton growth simulation in the SLEUTH tradition - suitability times a neighbourhood term, top scorers convert until the land demand is met, same seed same map in any process - writing a year-of-conversion raster; and urban sprawl metrics around the SDG 11.3.1 land-consumption-to-population-growth ratio with patch counts, largest-patch share and edge density), and a Plan Dashboard with live score cards, a Plan Performance Index history sparkline, one-click access to the Batch Plan Auditor (give the plan's core layers once and it chains the access, walkability, balance, adequacy, green-access and equity tools into one scenario snapshot and report), batchable scenario snapshots (auto-detected PlanX output layers captured to JSON, model-designer friendly) compared metric by metric A/B (each metric knows which direction is better, in the dock or headless), plus a one-click single-file HTML Plan Performance Report (inline SVG charts, balance bars and score maps - shareable with stakeholders). Everything is computed inside the plugin with NumPy (SciPy used automatically when available, identical pure-Python fallback otherwise): no QNEAT3, no GRASS dependency, no UMEP, no servers, no pip installs. All tools are Processing algorithms - model-designer and batch friendly - and every tool carries its own icon in the toolbox and the PlanX Studio dock. Developed with feedback from educational workflows at Dokuz Eylul University, Department of City and Regional Planning.
version=4.5.0
tracker=https://github.com/YusufEminoglu/PlanX/issues
repository=https://github.com/YusufEminoglu/PlanX

category=Vector
tags=planx,space syntax,centrality,betweenness,urban morphology,spacematrix,tessellation,accessibility,15 minute city,isochrone,service area,od matrix,network analysis,cycling,lts,bicycle,low stress connectivity,equity,gini,theil,environmental justice,shadow,sun hours,solar,sky view factor,heat island,microclimate,air quality,emissions,flood,hand,hazard,hydrology,travel demand,trip generation,gravity model,mode split,luti,scenario pipeline,population allocation,dashboard,report,location allocation,p-median,capacity,land use allocation,suitability,zoning,compactness,adjacency,multi-objective,urban planning,processing
homepage=https://github.com/YusufEminoglu/PlanX
icon=icons/icon.png
experimental=False
deprecated=False
qgisMaximumVersion=4.99
hasProcessingProvider=yes
plugin_dependencies=
license=GPL-3
changelog=
    PlanX 4.5.0 - LUTI-lite Scenario Pipeline: chained cellular-automaton growth, largest-remainder population growth allocation, and access/walkability evaluation, 63 algorithms total, 18 groups.
        - Population Allocation: distributes a population growth increment over parcels using deterministic largest-remainder apportionment.
        - Scenario Pipeline (new Reporting tool): chains cellular-automaton growth, allocates population growth to new development, and evaluates accessibility and walkability.
    PlanX 4.4.0 - Travel Demand: trip generation, gravity distribution, and mode split modeling, 61 algorithms total, 18 groups.
        - Trip Generation (new Travel Demand group): calculates zone production and attraction totals from population and jobs.
        - Gravity Distribution: runs a doubly constrained Furness/IPF gravity model over zone totals and network travel costs with exponential or power deterrence.
        - Mode Split: splits OD flows into multiple mode shares and flows using a multinomial logit model.
    PlanX 4.3.0 - Hazard Screening: flow accumulation, HAND, and flood exposure mapping, 58 algorithms total, 17 groups.
        - Road Emissions: calculates road segment emissions (g/km/day) from a traffic volume field and a generic NOx-proxy emission factor.
        - Air Quality Screening: generates a dispersion index grid and calculates receiver levels and exposure bands, accounting for wind speed, decay exponent alpha, and street canyon effects.
    PlanX 4.1.0 - Cycling and LTS: cycling stress classification and low-stress connectivity, 53 algorithms total, 16 groups.
        - Cycling Stress (new Cycling group): classifies street segments into LTS 1-4 from speed, lanes, AADT and infrastructure fields, with editable threshold rules and a length-share table.
        - Low-Stress Connectivity: filters the network by an LTS threshold, labels connected cycling islands, reports low-stress network length share and optional destination-reach population.
    PlanX 4.0.0 - Demo City & Speed: synthetic city generator and hot-loop vectorisation, 51 algorithms total, 15 groups.
        - Generate Demo City (Reporting and Dashboard group): generates a deterministic synthetic town with streets, buildings, land use, POIs, facilities, demand points, green polygons and a DSM raster, allowing all tools to be tried in one click.
        - Speed optimization: visibility isovist_field precomputes direction offsets to speed up the loop, and noise screening grid uses row-broadcasting for distance checks.
    PlanX 3.6.0 - the Batch Plan Auditor closes the loop: 50 algorithms total, 15 groups.
        - Batch Plan Auditor (Reporting group): the whole standard battery in one run - give the plan's core layers once (network, demand, amenities, land use, facilities, greens) and it chains the 15-minute access score, the walkability audit, land-use balance, facility adequacy, green-space access and access equity, gathers every score into one scenario snapshot JSON (ready for Scenario Compare A/B) and optionally writes the one-file Plan Performance Report. Each part is optional - supply its inputs and it joins the battery. Model-designer friendly and fully headless.
        - Plan Dashboard: a Plan Performance Index HISTORY sparkline grows with every saved snapshot, and an Audit button opens the Batch Plan Auditor directly.
        - Scenario metric registry gains the auditor's keys (walkability mean, low-walk share, weakest green coverage, access Gini), all direction-aware in A/B comparisons.
        - New docs/METHODS.md: the method, formula and primary source of every tool group, one page.
    PlanX 3.5.0 - Urban Growth: change accounting, growth simulation and the sprawl scorecard, 49 algorithms total.
        - Land-Cover Change Analysis (new Urban Growth group): the transition matrix of two class rasters - one row per from/to pair with cells and hectares, a per-class summary of gains, losses, persistence and net change, optional class labels, and the largest conversion named in the log.
        - Urban Growth Simulation (CA): a constrained cellular automaton in the SLEUTH tradition - per step, non-urban cells score suitability x (base + weight x urban neighbourhood share) and the top scorers convert until the step's land demand is met; constraints raster for never-build land; fully deterministic for a given random seed across processes. Outputs the year-of-conversion raster (the growth-ring map).
        - Urban Sprawl Metrics: SDG 11.3.1 - the land-consumption-rate to population-growth-rate ratio (above 1 = the footprint outpaces the people) plus patch count, largest-patch share and edge density of the horizon fabric.
        - Engine: new pure-NumPy engine/growth.py (change_matrix, ca_simulate with default_rng tie-breaking, patch labelling, edge length, sprawl_metrics); cross-process determinism of the CA is a unit test; three new group-coloured tool icons.
    PlanX 3.4.0 - Environment Screening: road noise and green infrastructure, 46 algorithms total.
        - Road Noise Screening (Microclimate group): a screening-quality dB(A) grid - RLS-90-style emission (37.3 + 10 lg(M(1+0.082p))) from a traffic volume field (hourly factor for AADT) and heavy shares, roads sampled as line-calibrated point sources, energetic sum with 20 lg r spreading and a fixed insertion loss where buildings block the line of sight. Optional receiver points report their level and a population exposure table by 5 dB bands. Clearly documented as screening, not compliance mapping.
        - Green Space Access (new Green Infrastructure group): the park hierarchy standard (min_ha=max_dist ladder, e.g. 0.5=300, 2=800, 10=2000) tested on real street-network distances - per-demand distance and pass/fail per class, classes met, per-class covered-population summary and citywide m2 per capita.
        - Urban Green Connectivity: patches linked when the gap is crossable, components, the binary Probability-of-Connectivity index and per-patch dPC importance - which stepping stone holds the network together.
        - Engine: new pure-NumPy engine/noise.py (emission, line-calibrated sample power, energetic receiver sum, exposure bands - the infinite-line self-check is a unit test) and engine/green.py (hierarchy parser, components, PC index, dPC); three new group-coloured tool icons.
    PlanX 3.3.0 - Population & Housing: the demographic backbone of plan-making, 43 algorithms total.
        - Population Projection (Cohort-Component) (new Population and Housing group): a Leslie-matrix projection from a plain age-group table - per-step survival, fertility and optional net migration as fields, any number of steps; outputs step x age-group rows and per-step totals with growth. Single-sex screening form, rates constant over the horizon.
        - Housing Needs Assessment: the standard needs identity as a batchable tool - future households from the horizon population, a vacancy allowance, replacement losses and backlog; every intermediate lands in a metric/value table. Negative need = surplus.
        - Residential Capacity: per-parcel buildable floorspace from FAR minus existing floorspace, converted to whole dwelling units at your unit size and net-to-gross efficiency, with a district roll-up - the reality check against the housing need, and a target source for the Land-Use Allocation Optimizer.
        - Engine: new pure-NumPy engine/population.py (leslie_matrix, cohort_projection, housing_needs, residential_capacity) and report.svg_pyramid (age-structure comparison chart); three new group-coloured tool icons.
    PlanX 3.2.0 - Visibility: viewsheds, isovists and landmark exposure, 40 algorithms total.
        - Viewshed (DSM) (new Visibility group): line-of-sight sweep from observer points over a surface model - observer and target heights, view radius, direction count; outputs the visibility count raster (how many observers see each cell). Same radial-sweep idiom as the shadow tools, rays capped at the raster diagonal.
        - Isovist Field: samples a point grid between buildings and measures the 2-D isovist at every point (Benedikt): visible area and perimeter, min/max/mean sight line, circularity and occlusivity - the visibility-graph companion to the space syntax tools; style iso_area for the openness map.
        - Visual Exposure of Landmarks: the inverse viewshed - samples the landmark outline, sweeps a viewshed from each sample (plus an optional extra height for spires the DSM misses) and counts per cell how many outline points a person there would see; run before/after inserting a proposal into the DSM and difference the rasters.
        - Engine: new pure-NumPy engine/visibility.py (viewshed with running-horizon rays, isovist / isovist_field with shoelace areas and occlusivity); three new group-coloured tool icons.
    PlanX 3.1.0 - Transit: GTFS feeds become first-class citizens, 37 algorithms total.
        - GTFS Import and Service Stats (new Transit group): loads a GTFS zip into QGIS - stops as points with daily departures and route counts, plus a route summary table (mode, trips, service span). Validates the feed on the way in with clear errors; the service day defaults to the feed's first active day.
        - Transit Frequency Map: departures per stop within a time window of a service day - departures/hour, mean headway minutes and distinct routes per stop (style by per_hour for the frequent-network map), plus per-route trips in the window.
        - Transit Travel-Time Access: door-to-door times with public transport - walk to a stop on the street network, ride the timetable with up to N transfers (RAPTOR-style earliest arrival), walk to each destination; every destination reports walk-only vs transit minutes, the winning mode and the minutes saved.
        - Engine: new pure-stdlib+NumPy engine/transit.py (GTFS zip reader with named validation errors, past-midnight times as plain seconds, calendar/calendar_dates service resolution, stop frequencies, RAPTOR pattern compiler and earliest-arrival) and paths.multi_source_offset (egress Dijkstra whose sources start at their own arrival times); three new group-coloured tool icons.
    PlanX 3.0.0 - Scenarios & Walkability: the plan-evaluation loop closes and a tenth tool group opens, 34 algorithms total.
        - Scenario Snapshot (Reporting group): captures the plan score metrics of the current project into a snapshot JSON, auto-detecting the PlanX output layers by their field signatures (or pin layers explicitly). Model-designer friendly: run tools for alternative A, snapshot, rerun for B, snapshot, feed both to Scenario Compare.
        - NEW GROUP Walkability. Walkability Audit: scores every street segment 0-100 from intersection density, land-use mix entropy, destination counts, block length and slope - editable weights and breakpoints, sub-scores and raw ingredients on every segment.
        - Pedestrian Route Quality: routes over quality-weighted streets (length x quality penalty), reporting the detour ratio vs the plain shortest path, the length-weighted mean walk score along the route and the share on low-scoring segments. Nearest-destination or all-pairs.
        - Engine: new pure-NumPy engine/walkability.py (normalisation + weighted composite) and paths.shortest_path_tree / reconstruct_path (predecessor Dijkstra able to name the parallel edge taken); shared layer-collector planx/collect.py now feeds both the dashboard and the snapshot algorithm; three new group-coloured tool icons.
    PlanX 2.13.0 - Equity Cross-Tabs & Scenario Compare: who holds the low values, and which plan alternative wins, 31 algorithms total.
        - Demographic Equity Cross-Tabs (Equity group): cross-tabulates any per-unit value by population subgroup. Population-weighted quantile classes (or fixed breaks), a representation ratio per group x class cell (1 = proportional; over-representation in the lowest class flags a disadvantaged group), per-group mean/P10/median/P90/Gini/value share, and the Duncan dissimilarity index of each group against the rest. Optional second group field crosses two demographics; the input comes back annotated with its value class for mapping.
        - Scenario Compare A/B (Reporting group): the Plan Dashboard gains Save A / Save B scenario snapshots (score metrics to JSON next to the project) and an in-dock metric-by-metric comparison with direction-aware winners (higher access is good, more deficits are bad). Also headless: the planx:scenariocompare algorithm diffs two snapshot files into a comparison table and an optional one-file HTML report.
        - Engine: new pure-NumPy equity.crosstab and value_classes, new pure-stdlib engine/scenario.py (snapshot/compare/verdict) and report.compare_section/build_compare_html; two new group-coloured tool icons.
    PlanX 2.12.0 - Siting & Contiguity: Capacitated Facility Siting and Contiguous Land-Use Allocation, 29 algorithms total.
        - Capacitated Facility Siting (Optimization group): chooses where to build p facilities while respecting per-site capacities. Greedy construction followed by capacity-aware Teitz-Bart swap improvement. Returns selected sites, assignment, cost, loads, utilization, and marginal gains.
        - Contiguous Land-Use Allocation (Optimization group): optional Hard Contiguity mode on the Land-Use Allocation algorithm. Seed-based concurrent region-growing followed by boundary-swap local search preserving subgraph connectivity of affected uses.
        - Engine: new optimize.capacitated_siting, allocate.allocate_contiguous, and check_connectivity; new group-coloured tool icon.
        - Test suite grown to 225 unit checks and 174 end-to-end assertions on QGIS 3.44 LTR and QGIS 4.0.2.
    PlanX 2.11.0 - Inequality Curves: Lorenz / concentration curves and the Atkinson index, 28 algorithms total.
        - Inequality Curves (Lorenz & Atkinson) (Equity group): the distributional view of any per-unit good (access score, green space per capita, income...), with an exportable curve to chart and an inequality measure that lets you set how much you weight the worst-off.
        - Outputs the Lorenz curve as a table - cumulative population share vs cumulative value share, bowing below the 45-degree line of equality - plus the Gini coefficient (twice the area between them).
        - Reports the Atkinson index at low/medium/high inequality aversion (epsilon 0.5, 1, 2) and at your own epsilon: higher epsilon weights the lower tail more, so the index reads as the share of total value society would trade to equalise the distribution.
        - Give a rank field (deprivation, income...) for a concentration curve and index instead, revealing whether the value concentrates on the advantaged or disadvantaged end.
        - Engine: new pure-NumPy equity.atkinson_index, lorenz_points, gini_from_lorenz and concentration_index; new group-coloured tool icon.
        - Test suite grown to 216 unit checks and 166 end-to-end assertions on QGIS 3.44 LTR and QGIS 4.0.2.
    PlanX 2.10.0 - Land-Use Pareto Front: the suitability vs compactness trade-off, 27 algorithms total.
        - Land-Use Pareto Front (Optimization group): instead of one weighted run, maps the TRADE-OFF between per-parcel suitability and compact zoning. There is rarely a single best plan - clustering a use into compact zones usually costs some suitability, and vice versa.
        - Solves the Land-Use Allocation Optimizer across a sweep of compactness weights (auto-scaled to the data, or set an upper weight) and records two higher-is-better scores per result: area-weighted suitability and the shared boundary between adjacent same-use parcels (compactness).
        - Reports the non-dominated set (the Pareto front) and its knee - the best-balanced compromise. Outputs a front table (one row per weight: both scores raw and 0-1 normalised, on-front and knee flags) to plot, plus the parcel map of one chosen solution (the knee by default, or the maximum-suitability / maximum-compactness end).
        - Engine: new pure-NumPy allocate.pareto_front / pareto_mask / knee detection, reusing the existing multi-objective allocation core; new group-coloured tool icon.
        - Test suite grown to 202 unit checks and 158 end-to-end assertions on QGIS 3.44 LTR and QGIS 4.0.2.
    PlanX 2.9.0 - Annual Solar Potential: year-long clear-sky irradiation, 26 algorithms total.
        - Annual Solar Potential (DSM) (Microclimate group): clear-sky global solar irradiation summed over a whole year (kWh/m2/yr) - rooftop PV screening, annual solar access and year-round heat exposure, with no external solver or atmospheric dataset.
        - Rather than sweeping all 365 days, one representative average day per month (Klein 1977; Duffie & Beckman) is computed with the same shadow-aware beam + sky-view-weighted diffuse model as the single-day Solar Irradiation tool, scaled by the number of days in that month and summed - twelve day-sweeps stand in for the year, accurate for screening and far faster than a full daily run.
        - Outputs the annual irradiation raster; optionally a 12-band monthly raster (one named band per month) for seasonal analysis. The log reports the unobstructed flat-ground annual reference, scene statistics and the peak month.
        - Engine: new pure-NumPy solar.annual_irradiation (reuses the daily kernel) and a multi-band GeoTIFF writer; new group-coloured tool icon.
        - Test suite grown to 191 unit checks and 150 end-to-end assertions on QGIS 3.44 LTR and QGIS 4.0.2.
    PlanX 2.8.0 - Multi-objective land-use allocation: compactness and adjacency.
        - The Land-Use Allocation Optimizer is now MULTI-OBJECTIVE: beyond per-parcel suitability it can shape the spatial pattern of the plan.
        - Compactness weight (new): rewards same-use parcels that share a boundary, so each land use forms compact zones instead of scattering (reward per map unit of shared boundary; 0 = off, identical to the previous behaviour).
        - Adjacency rules (new): free text 'residential|industry=-2, residential|green=1' rewards (+) or penalises (-) specific use pairs being neighbours, per unit of shared boundary - keep incompatible uses apart and compatible ones together.
        - Suitability weight (advanced) balances suitability against the spatial terms. Parcel adjacency and shared-boundary lengths are computed with a spatial index; the run reports the spatial score and the share of shared boundary that is between same-use parcels (a compactness indicator). Pure-suitability runs are unchanged.
        - Engine: new engine/allocate.allocate_multi (suitability + a symmetric use-compatibility spatial term over the parcel adjacency graph; greedy + reassignment + capacity-respecting swaps on the full objective).
        - Test suite grown to 175 unit checks and 141 end-to-end assertions on QGIS 3.44 LTR and QGIS 4.0.2.
    PlanX 2.7.0 - Land-Use Allocation Optimizer: 25 algorithms total.
        - Land-Use Allocation Optimizer (Optimization group): assigns a land use to each parcel to MAXIMISE total suitability while meeting a target area for each use - the spatial allocation problem at the heart of plan-making, solved natively with no external solver. You give one suitability field per land use (0-1 or 0-100, e.g. straight from Suitability Lab) and a target area per use; each parcel is assigned in full to at most one use so the area given to a use stays within its target and the area-weighted suitability is as high as possible. Parcels not needed are left unassigned; a use that cannot be filled reports a shortfall. An optional lock field fixes already-zoned parcels. Method: greedy construction plus a local search of reassignments and capacity-respecting swaps (a fast heuristic, not a guaranteed global optimum). Outputs the parcels with their assigned use (style by 'alloc_use' for a land-use map) and a per-use summary of target vs allocated area, shortfall, parcel count and mean suitability.
        - New pure-NumPy engine/allocate.py; new group-coloured tool icon.
        - Test suite grown to 168 unit checks and 137 end-to-end assertions on QGIS 3.44 LTR and QGIS 4.0.2.
    PlanX 2.6.0 - Equity and Allocation: two new tools, 24 algorithms total.
        - Accessibility Equity (Gini / Theil) (new "Equity" group): measures how FAIRLY a value (an Access Score, a travel time, a distance to the nearest facility) is shared across the population - population-weighted Gini, Theil's T split into between-group and within-group inequality (the environmental-justice number when you supply a group field), P90/P10 ratio, coefficient of variation and an access-poverty share. Outputs the units with their percentile rank, deviation from the mean and a poverty flag, plus a summary table for the whole study area and per group.
        - Capacitated Allocation (Nearest with Capacity) (Optimization group): allocates demand to fixed facilities while RESPECTING capacity - each demand point goes in full to the nearest facility with room and spills to the next-nearest when its nearest is full; points that fit nowhere in reach are left uncovered. Outputs the demand (assigned facility, network cost, status Assigned/Spilled/Uncovered) and the facilities (load, remaining capacity, utilization, Full/Has space/Unused) - the realistic companion to Facility Adequacy.
        - New pure-NumPy engine/equity.py and engine/optimize.capacitated_assign; two new group-coloured tool icons.
        - Test suite grown to 156 unit checks and 126 end-to-end assertions on QGIS 3.44 LTR and QGIS 4.0.2.
    PlanX 2.5.0 - Microclimate II and per-tool icons: three new tools, 22 algorithms total.
        - Sun Hours (DSM): hours of direct sunlight per cell over one full day in a single run (replaces the old Batch workaround) - right-to-light checks, courtyard and playground sun audits.
        - Solar Irradiation (DSM): clear-sky daily global irradiation in kWh/m2 - ASHRAE-style beam blocked by cast shadows plus isotropic diffuse weighted by the sky view factor; quick roof-solar and heat-exposure screening.
        - Heat Island Risk Grid: vector UHI screening from the layers every plan already has (buildings, green, water) - fixed-scale 0-100 risk score and class per cell, comparable across scenarios and study areas.
        - Network Centrality now also computes eigenvector centrality (Bonacich power iteration).
        - Multi-Amenity Access Score: optional population field gives population-weighted audit numbers (weighted mean score, residents with full access, residents with none).
        - Every tool has its own meaningful icon - in the Processing toolbox and the PlanX Studio dock (22 distinct icons, colour-coded by group).
        - Engine fix: shadow casting no longer over-scans at very low sun altitudes; the sweep is capped at the raster diagonal.
        - Test suite grown to 131 unit checks and 109 end-to-end assertions on QGIS 3.44 LTR and QGIS 4.0.2.
    PlanX 2.4.0 - Optimization: facility location on the network, 19 algorithms total.
        - Facility Location Optimizer (new Optimization group): site new facilities among candidate locations - greedy maximal coverage (Church and ReVelle) or p-median with Teitz-Bart vertex substitution, on real network distances, no external solver.
        - Existing facilities are kept in the solution; every candidate gets a standalone screening score (demand within reach); outputs selected sites (rank, marginal gain) and demand allocation (facility, cost, covered).
        - New pure-NumPy engine/optimize.py; test suite grown to 111 unit checks and 90 end-to-end assertions on QGIS 3.44 LTR and QGIS 4.0.2.
    PlanX 2.3.0 - Performance Dashboard: live score cards and a one-click HTML report, 18 algorithms total.
        - Plan Dashboard dock: live score cards (Plan Performance Index, accessibility, standards compliance, covered population, density) over the PlanX output layers, auto-detected in the project by their field signatures.
        - Plan Performance Report (HTML): single-file stakeholder report with inline SVG charts - score histogram and red-to-green score map, provided-vs-required balance bars, facility utilization table, density summary. Also a Processing algorithm (new Reporting and Dashboard group) for headless and model-designer use.
        - New pure-stdlib engine/report.py; test suite grown to 98 unit checks and 80 end-to-end assertions on QGIS 3.44 LTR and QGIS 4.0.2.
    PlanX 2.2.0 - Plan Standards and QA: three new tools, 17 algorithms total.
        - Land-Use Balance: per-capita areas vs configurable standards (e.g. green=10, education=4), surplus/deficit and status per category.
        - Facility Adequacy: capacity and network distance checked together - facility utilization (Adequate/Overloaded/Unused) plus covered/uncovered demand and covered-population share.
        - Density Grid: distributes population/dwellings/GFA from polygons or points onto a grid by area share; density per hectare.
        - Test suite grown to 77 unit checks and 70 end-to-end assertions on QGIS 3.44 LTR and QGIS 4.0.2.
    PlanX 2.1.0 - Microclimate (UMEP-lite): three new tools on the embedded engine, 14 algorithms total.
        - Shadow Casting (DSM): shadows for any date and local time; embedded NOAA solar-position model, UMEP-style DSM sweep; batch-friendly for shadow-duration maps.
        - Sky View Factor (DSM): visible-sky fraction per cell from multi-direction horizon scans; configurable directions and search radius.
        - Frontal Area Index: lambda-f and lambda-p wind-roughness grid (Grimmond and Oke), frontal areas distributed by footprint overlap.
        - Engine test suite grown to 69 unit checks and 56 end-to-end assertions, verified on QGIS 3.44 LTR and QGIS 4.0.2.
    PlanX 2.0.0 - Complete rewrite as the Urban Analytics Studio.
        - New embedded analytics engine (NumPy core, SciPy fast path with identical pure-Python fallback); zero external plugin/server/pip dependencies.
        - Space Syntax: segment angular analysis with metric radii - angular integration, choice, NACH and NAIN per radius.
        - Network Centrality: degree, closeness, straightness and Brandes betweenness (node and edge), radius-limited and sampled variants.
        - Network Analysis: Prepare Network, OD Cost Matrix with detour ratios and desire lines, Service Areas (isochrone bands as edges and polygons), Nearest Facility Allocation with facility load summary.
        - Urban Morphology: Building Form Metrics, Morphological Tessellation, Spacematrix Density (GSI/FSI/OSR/L plus class), Street Network Morphology (orientation entropy and order, meshedness, node typology).
        - Accessibility: Multi-Amenity Access Score (15-minute city) across any number of amenity layers.
        - PlanX Studio dock for browsing and launching the toolset; all tools also live in the Processing toolbox.
        - Removed the legacy mixed script collection (QNEAT/GRASS dependent tools and duplicates of other PlanX plugins).
    PlanX 1.0.9 - Legacy script suite (superseded).
