[general]
name=Mapdex for QGIS
description=Nivo AI assistant for QGIS: ask questions about your layers and PostGIS in plain language, get measured spatial analysis on the map, run Processing, and georeference or digitize scanned maps with Mapdex.
version=0.13.6
qgisMinimumVersion=3.34
qgisMaximumVersion=4.99
supportsQt6=True
author=Mapdex
email=support@mapdex.ai
about=Mapdex for QGIS adds Nivo, an AI GIS assistant that works from your map. Connect Mapdex once, then ask in plain language and let Nivo measure the answer instead of guessing it. You may use Mapdex models, your own provider key, or a local model after connecting. Model inference with your own provider goes directly from QGIS to that provider, while the Mapdex connection owns identity, project context, capability negotiation and the action lifecycle. Every action comes from a closed capability registry: no arbitrary Python, no arbitrary SQL, and consequential steps always ask first. Nivo profiles and styles layers, runs QGIS Processing after confirmation, and sends Mapdex georeference, digitization and validation tasks, adding completed results back as QGIS layers. Provider keys are stored only in the encrypted QGIS Authentication Manager. Needs network access to your Mapdex endpoint (mapdex.ai by default, configurable for self-hosted installs). No external Python packages are required beyond the QGIS standard runtime; works on Windows, Linux and macOS, with Qt5 (QGIS 3.34+) and Qt6 (QGIS 4).
icon=icon.png
tags=ai,ai assistant,nivo,copilot,llm,chatgpt,natural language,spatial analysis,analysis,statistics,postgis,sql,database,attribute table,symbology,styling,selection,processing,georeferencing,digitizing,cadastre,raster,vector,web service
category=Web
experimental=False
deprecated=False
homepage=https://mapdex.ai/qgis
tracker=https://github.com/MapdexAI/mapdex-qgis/issues
repository=https://github.com/MapdexAI/mapdex-qgis
changelog=0.13.6
    - Buffers and every other Processing operation run on layers that carry a
      list in an attribute, such as the image_corners field on Mapdex
      extraction previews. QGIS stopped at the first feature ("Could not store
      attribute image_corners"); the list now travels as text and the answer
      says which field it was.
    0.13.5
    - A buffer in metres is a buffer in metres. On a layer whose coordinates
      are in degrees (most GeoJSON and KML), "buffer by 25 m" grew every shape
      by 25 degrees, about 2,800 km. The work now runs in the layer's local UTM
      zone and the result comes back in the layer's own coordinate system. The
      same applies to a simplification tolerance, and a layer in feet gets its
      distance in feet.
    - Elevation operations (slope, aspect, hillshade, contours, watershed and
      the rest) refuse a vector layer, or a grid measured in degrees, and say
      why. On the route your requests actually take they were started anyway
      and failed out of sight.
    - A Processing run that fails now says so in the conversation, with QGIS's
      own reason, instead of only on the status line.
    - The geometry check works. It never received its input layer, and a clean
      result is reported as "no invalid geometries" rather than as an empty
      layer.
    - Answers state their result. They read "Nivo prepared a QGIS action.: 24
      values ..." - the sentence written before the action ran, in front of the
      proof that it had.
    0.13.4
    - A released build never connects to a server on your own computer. An
      address such as 127.0.0.1 or localhost left in your QGIS profile by an
      earlier local setup used to be followed, so a production install could
      send its requests there while calling itself production. Such an address
      is now ignored, the session that came with it is dropped, and you are
      asked to connect to Mapdex again.
    - Settings no longer offers a local development address in a released
      build, and typing one in is refused with the reason. Pointing a released
      build at your own Mapdex server still works as before.
    0.13.3
    - Back azimuth and forward azimuth were reported the wrong way round.
      Walking due north, Nivo called the direction of travel at the far end 180
      and the sight back 0, which are each other's answer. A backsight set from
      that figure was 180 degrees out. Both are now what their names say.
    - The field profile said every text column was empty. A column of parcel
      numbers came back as entirely blank while the same column counted
      correctly elsewhere in the plugin, because the count was of values that
      would not read as a NUMBER rather than of values that were missing.
    - Answers that were computed and never shown now appear. Asked for a total
      area Nivo measured it and printed "geometry measurement"; bearings,
      traverses, misclosures, scale factors and MGRS references all printed
      "Done." Thirteen capabilities state their result, with the frame it was
      measured in where that decides the number.
    - A vector layer is no longer accepted where a raster is needed. Applying a
      raster style to a parcel layer reported success and changed nothing, and
      a slope or contour on a vector layer started an algorithm that could only
      fail later. Both refuse now and say which layer and why.
    - Smaller things you see every time: the workflow card reads
      "Validate & deliver" rather than "Validate _deliver", the Jobs list names
      the workflow instead of printing its internal key, and a single-symbol
      style no longer claims to have "None classes".
    0.13.2
    - The Task page is one list of sheets rather than a picker that holds one
      answer. Files you choose or drop and QGIS layers you tick in a picker go
      into the same list, and more than one of them is a batch: nothing has to
      be switched on. Every sheet is named and removable, and the count is on
      the Start button.
    - Sending several open layers at once is new. Nothing is sent that you did
      not tick: the picker opens with nothing selected and no control submits
      your project. A layer this workflow cannot read is shown with the reason
      rather than hidden.
    - Options that Mapdex has always accepted are now yours to set: one sheet
      per PDF page, skip sheets already finished in this project, and how many
      sheets run at once. Each is offered only where it can do something, so
      "every PDF page" is unavailable, with the reason, over a list holding no
      PDF.
    - What a task will cost is stated before you start it, and the total is on
      the Start button itself. The figure comes from Mapdex and is a ceiling: a
      sheet is charged only when its result is produced, so a sheet that fails
      or abstains costs nothing.
    - A batch your balance cannot cover no longer starts and then stops halfway
      through. Start is unavailable, the amount you are short is stated, and
      there is a direct route to billing. Where a price or a balance cannot be
      read, nothing is claimed and nothing is blocked.
    0.13.1
    - Nivo requires a Mapdex connection. Every runtime, including your own
      provider key, is offered after connecting rather than before.
    - The AI vectorizer and the assisted raster tracing tool were removed.
    0.13.0
    - QGIS now connects through the browser-approved Mapdex connector flow and
      returns to the plugin without exposing or retyping credentials.
    - Device approval opens on app.mapdex.ai, keeps the linked code immutable,
      and makes the account and consent steps explicit before access is granted.
    - Nivo onboarding now presents one clear provider choice at a time, keeps
      the chat at full available height, and separates starter prompts from the
      conversation instead of mixing them into assistant replies.
    - New chat, history, stop, Settings and Open project controls use consistent
      icon-led actions and preserve their behavior across narrow and wide docks.
    - Development packages expose localhost API and web endpoints for testing.
      Production packages hide endpoint controls and stay pinned to hosted
      Mapdex services.
    0.12.4
    - Fixes for what the plugin repository's own scan found on 0.12.3, none of
      which changes what the plugin does.
    - Flat Qt5 enum names in three files would each have raised an error on
      QGIS 4, in branches no test opens: choosing a raster or vector layer,
      deciding whether the layer you are digitizing into holds lines or areas,
      drawing the trace bands, suppressing the attribute form, and writing a
      plan sheet. They now resolve on both Qt5 and Qt6.
    - The catalogue query behind the PostGIS diagnostic is written out as a
      constant instead of assembled from pieces. Nothing user-supplied ever
      reached it, but a query built by string formatting reads as an injection
      site whether or not it is one.
    - Removed an unused import and tidied three lines the style check flagged.
    0.12.3
    - Nivo could not finish a question that took more than one step. Every
      measurement it made was written into the conversation as though Nivo had
      said it, so the moment one step ran the turn ended on Nivo's own voice and
      the model was asked to carry that sentence on rather than answer. What
      came back was more of the sentence, which is not a decision, and the turn
      spent its steps arriving nowhere. The first question of a conversation
      always worked, because nothing had been measured yet, so this looked like
      Nivo losing the thread on the follow-up.
    - Work chosen on the last available step used to run anyway, so a project
      gained a layer that no answer accounted for. The last step now asks for a
      conclusion, and work arriving there is not started.
    - A turn that measured nothing no longer offers "here is what I measured so
      far", and an answer written as a sentence rather than in the expected form
      is shown to you instead of being discarded.
    - The panel no longer names your model vendor. It read "Asking openai..."
      for the length of a request, and a failed turn repeated the vendor's own
      error word for word. Which provider answers is a routing detail; a failure
      now says "your provider", and the settings panel remains the one place
      that states where a turn goes.
    0.12.2
    - What you trace now looks like QGIS digitizing: the rubber band takes its
      colour and width from Settings > Digitizing instead of a hardcoded blue
      that matched neither your settings nor your map, an area being traced is
      drawn as an area with a fill, and the vertices are marked.
    0.12.0
    - Improved spatial reasoning and digitizing workflows.
    - Your QGIS snapping now applies.
    - Areas close themselves cleanly when drawing polygons.
    0.11.0
    - Mapdex has its own toolbar with panel actions. Show or hide it under View > Toolbars.
    0.10.3
    - The upload scan blocked the plugin over a false positive: the vendored nivo-gis commit sha (a 40-char hex string) read as a "high entropy secret". Split into four short fields that reassemble to the same sha; no provenance data changed.
    0.10.2
    - QGIS 4 Ready: scoped every PyQt6 enum the repository check flagged (QgsFeatureRequest.Flag.NoGeometry, QgsWkbTypes.GeometryType.*) and removed a raw PyQt5/PyQt6 import that must come only from qgis.PyQt.
    0.10.1
    - Your own model key is now used. With a provider configured the assistant talks to it directly from QGIS: the turn does not pass through Mapdex servers, and it needs no Mapdex account. A local Ollama keeps the whole conversation on your machine.
    - In that mode Nivo does everything QGIS and your saved PostGIS connections do locally. Mapdex georeferencing, digitization, validation, batch and review run on Mapdex, so they are not offered inside a conversation that never contacts Mapdex; they still work from the task panel with your account.
    - A provider failure never becomes a Mapdex request on its own. You are told what failed and asked whether to send the question to Mapdex instead; nothing is sent unless you say yes.
    - The Model field now shows the default it would use for the chosen provider, instead of the word "default".
    0.10.0
    - Nivo can now analyse your data, not just drive the map: layer profiles, descriptive statistics, histograms, category breakdowns, ranking, outlier detection with a stated rule, group-by aggregation and selection-vs-dataset comparison.
    - Analysis lands on the map: results become a real feature selection or a categorized/graduated renderer with a legend that states how its classes were derived.
    - Read-only PostGIS analytics in natural language. Your question becomes a typed request that trusted code turns into a parameterised SELECT; no SQL is generated by a model, and writes are refused.
    - Multi-step objectives: Nivo inspects before it decides, chains the steps an answer needs, and reports what it measured. A step it could not complete is stated, not dropped.
    - Store your own model key: OpenAI, Anthropic, Gemini, any OpenAI-compatible endpoint or a local Ollama. Keys live only in the QGIS Authentication Manager and are never echoed back. The assistant still runs through Mapdex on your plan; a stored key is not yet used to reach that provider directly.
    - Undo for reversible map changes: selection, visibility, opacity, filters, labels and symbology restore their previous state.
    - Distances respect the layer CRS. A metric distance on a geographic layer is never silently applied in degrees.
    - Fix: a greeting before a request ("selam, aktif katmana git") no longer drops the turn into a generic workflow failure.
    0.9.13
    - Add Nivo, the QGIS companion chat for active-layer context, reversible map actions and confirmed Processing operations.
    - Add optimized Nivo avatar and loading animation assets to the dock.
    0.9.12
    - Clean the plugin repository scan: lint policy, narrowed exception handling, no silent notice drops.
    0.9.11
    - Released builds are pinned to mapdex.ai; endpoint fields are development only.
    0.9.10
    - Zoom to an imported result in the canvas CRS instead of jumping across the world.
    0.9.9
    - Fix a QGIS crash caused by background tasks reporting back after unload.
    0.9.8
    - Stop leaking a QGIS layer-change callback on every plugin reload.
    0.9.7
    - Fix a QGIS 4 start-up crash in the responsive panel layout.
    0.9.6
    - Get result from Mapdex: import the approved layer, or the draft split into review layers.
    - QGIS 4 (Qt6) fix for the review confirmation dialog.
    0.9.5
    - Panel opens wide enough to use and adapts to a narrow dock.
    - Plugin icon and Qt6 support declared for QGIS 4.
    0.9.4
    - Batch tasks resume after QGIS is restarted.
