Discover powerful Dolibarr extensions designed to automate your business processes

Adnix is a Premium theme-module for Dolibarr ERP/CRM. It replaces the standard Dolibarr interface with a modern SaaS-style environment — a dark vertical rail, a light top bar and a near-white content canvas — while leaving every business feature of the ERP untouched.
The theme ships five complete, interchangeable dashboards. Switching between them repaints the palette, the KPI style, the chart family and the dashboard layout in a single request, with no re-installation, no file editing and no data loss.
Every figure the dashboards display is read from the customer's own Dolibarr data. Where a module is not enabled, the corresponding widget states so explicitly instead of rendering a zero that could be mistaken for a business result. Nothing is simulated.
· Installable — a single ZIP through the Dolibarr module manager
· Non-invasive — no file under /htdocs/core/ is modified, added or replaced
· Configurable — 45 settings across six groups, plus JSON export/import
· Multilingual — seven language files, five of them fully translated
· Responsive — verified with no horizontal overflow down to a 390 px viewport
· Dark mode — a complete second surface set, not a filter
|
Property |
Value |
|
Commercial name |
Adnix |
|
Technical name |
theme_adnix |
|
Folder |
adnix |
|
Module class |
modAdnix |
|
Module number |
10000840 |
|
Version |
1.0.0 |
|
Package |
module_adnix-1.0.zip |
|
Licence |
GPL-3.0-or-later |
|
Editor / Publisher |
DoliResources |
The package contains 11 PHP files, one dynamic stylesheet, one dynamic script, seven language files and the brand artwork — 11,691 lines in total. There are no third-party libraries, no build step and no compiled assets: every chart is server-rendered SVG.
Adnix targets organisations that use Dolibarr as their operational system of record and want an interface that reads like a modern analytics product. The five demos let one package serve several audiences from the same installation:
|
Demo |
Audience |
Answers |
|
Sales Analysis |
Sales management |
What did we bill, who sells, where is capacity? |
|
Account & Revenue |
Administration, finance |
Who am I, is the account secure, what are the tax details? |
|
Hospital |
Care and service organisations |
What is in progress, who is available, what closed? |
|
CRM Analytics |
Marketing and CRM |
How does the base convert, how is it segmented? |
|
Executive Analytics |
Management |
Income against expense, collection, yearly synthesis |
· Faithfulness — reproduce the structure, proportions, colour families and component vocabulary of the five visual references
· Truthfulness — never print a figure the data does not support; a missing module produces a sentence, not a zero
· Originality — all artwork, code and branding are new; no commercial theme code, logo or protected illustration is reused
· Continuity — native Dolibarr pages, forms, permissions and hooks continue to behave exactly as before
· Reversibility — disabling the module restores the standard interface immediately
Three rules govern the interface:
· One shell, five identities — the five references share a single application shell. That shell is declared once in the preset engine, so a demo cannot drift on a surface the references have in common; only the accent family and the dashboard composition differ.
· Colour never carries meaning alone — every status badge pairs its colour with a text label, and status colours follow Dolibarr's own semantics rather than a decorative palette.
· A number must be readable and true — ratios use the same population on both sides, every variation belongs to the tile that prints it, and chart axes are always labelled so magnitude never depends on a tooltip.
The Adnix mark is original artwork: a hexagonal shell enclosing a stylised A, with a turquoise accent node. It is inlined as SVG in the sidebar and as a data URI on the login card, so it costs no request and cannot break if the folder is renamed.
|
Token |
Value |
Role |
|
Adnix Navy |
#1F2A44 |
Titles, primary ink |
|
Adnix Purple |
#8B5CF6 |
Primary of CRM and Executive |
|
Adnix Blue |
#6C8AF5 |
Primary of Sales and Account |
|
Adnix Cyan |
#2BC9B4 |
Accent, positive states |
|
Adnix Red |
#F9506B |
Danger, overdue |
|
Adnix Orange |
#FFA800 |
Warning, outstanding |
|
Adnix Green |
#2BC9B4 |
Success |
|
Adnix Gray |
#6B7280 |
Secondary text |
|
Adnix White |
#FFFFFF |
Card surface |
The rail is #262C3F, the top bar #FFFFFF and the canvas #F5F6F8 across all five demos. The primary colour can be replaced by any of nine palettes or by a fully custom pair.
Commercial dashboard built around invoiced turnover.
· Turnover card — yearly invoiced amount on the configured base (HT or TTC), with its own year-on-year variation and a link to the filtered invoice list
· Clients card — total customer count, the number billed this year, and the new-customer variation
· Top agent — ranked on value actually invoiced by the authoring user over the running year, with invoice, order and won-proposal counts and a link to the user card
· Profit — step-line chart with Month / Week / Day granularity, labelled Y ticks and a dot on every plateau
· Time available — circular gauge fed by real logged time from the Projects module; capacity uses the same population as consumption (active internal users over elapsed business days)
· Trends — best-selling products read from invoice lines
· Project progress — the active project closest to its deadline, its task completion and its team
· Sales stats — ordered value and order count with a sparkline
· User activity — the latest real objects created across invoices, orders, proposals and third parties
Account area reporting on records Dolibarr already keeps.
· Account info — name, e-mail, role, entity, language and last login, with a link to the user card
· Security setting — a REPORT on the native mechanisms — two-factor state, account update date, active users and administrators. The theme implements no security of its own.
· Tax details — VAT number, professional identifier, country and VAT liability, read from the company record
· Report — volume of invoices, orders, documents and third parties available for reporting
· Inquiry — donut of inbound activity by agenda event type
· Overview — grouped histogram comparing proposals and orders over nine months
· Revenue — current year against previous year with both totals
· Sales and Earnings — monthly and yearly sales; gross margin computed only on lines that carry a cost price, with the covered share printed
Care dashboard that runs on a plain Dolibarr through a documented fallback mapping.
· Status strips — four configurable labels over consultations, records, admissions and closed follow-ups
· Activity — twelve-month area chart of agenda events
· Record summary — identity fields of the most recently updated record
· Care notice — a configurable red band; by default it states that clinical measurements require a compatible medical module
· Follow-up — range bars comparing ongoing and closed items per month
· Practitioners — the user list with role and availability
· Record statistics — totals for records, consultations, admissions and documents
Segmented performance view of the customer base.
· Conversion rate — won proposals over CLOSED proposals — still-open proposals are excluded so the rate measures performance, not pipeline age
· New added — records created this year with their own variation
· Activity flow — events this year with the events variation
· Share by segment — third parties per type, including an explicit unspecified bucket so the denominator is the whole population
· Population breakdown — donut of customers, prospects and suppliers
· Activity by day — weekday radar over the last 180 days
· Total sales — yearly value with its variation and an area curve
· Campaigns and cohorts — Emailing campaigns when the module is on; record cohorts by creation year
Management synthesis of income against expense.
· Collection rate — paid share of everything invoiced this year — both sides of the ratio are the same population
· Income — yearly invoiced value
· Average invoice — value divided by the number of invoices
· Income and expenses — diverging bar chart, customer invoices above the rule and supplier invoices below, on one symmetric scale; when the period holds no expense the zero rule drops to the baseline instead of wasting half the plot
· Profile card — the signed-in user with role, groups and job as tags
· Revenue overview — monthly average, revenue, taxes and outstanding
· Promotional banner — title, text and link all configurable, and the banner can be switched off
The active demo is resolved in this order:
|
Priority |
Source |
Scope |
|
1 |
Per-request preview (?adnixdemo=) |
Current session |
|
2 |
User preference |
One user |
|
3 |
Group preference (ADNIX_DEMO_GROUP_<id>) |
One group |
|
4 |
ADNIX_DEMO constant |
Entity |
|
5 |
Shipped default (sales) |
Global |
The resolved value is published into the session by the page hook. This matters: the dynamic stylesheet runs under NOLOGIN and therefore has no $user at all, so resolving the preference there would silently fall back to the entity value and serve a stylesheet for a different demo than the markup — the same layout under the wrong palette. Publishing it to the session keeps both in step, and the asset revision is bumped whenever the resolved demo changes so no browser cache can serve a stale sheet.
Each demo is a branch of a single dashboard page. Its queries live inside its own branch, so opening one demo never runs the queries of the other four. Layout is CSS Grid with named areas addressed through explicit classes — never :nth-child — so hiding a widget because a module is disabled cannot shift the remaining widgets onto the wrong cells.
Adnix combines two widget layers.
· Demo widgets — the panels composing each dashboard. They declare their data source, the modules they require and the permissions they need; when a requirement is missing the panel renders an explicit sentence and the grid reflows.
· Native Dolibarr boxes — the standard "boxes" zone is embedded under the dashboard, so users keep the core add / hide / drag-and-drop widget system with per-user persistence. It can be switched off with a single setting.
Data for a hidden or disabled widget is never fetched.
Five card families ship with the theme, one per demo, and any of them can be forced independently of the active demo: solid (tall colour cards), action (large icon cards), strip (left-accented status bands), segment (a segmented strip over sparklines) and icon (white cards with a tinted round icon). A card can carry a title, value, unit, period, variation, icon, status, link and a mini chart. A variation is only ever printed when it belongs to the metric shown on that card.
The rail is 264 px wide and built from the NATIVE Dolibarr menu tree, so every module's entries and every permission restriction are honoured automatically — visual logic never replaces a permission check.
· Accordion groups with multi-level submenus
· Live badges from real counters
· Active-state highlighting synchronised with Dolibarr's own mainmenu / leftmenu
· Internal scrolling with a fixed brand and profile block
· Menu search
· Mini rail at 78 px, remembered per browser
· Off-canvas drawer on phones
· Favourites and recent items
The top bar is injected into Dolibarr's native header, which keeps the core login block, the entity selector and every module hook working. It carries the sidebar toggle, global search, a dark-mode switch, message, agenda and settings shortcuts with live counters, the version, and the user menu. Its ink is derived from the active variant, so the controls stay legible on a light, dark, coloured or gradient bar.
The search page queries third parties, contacts, users, products, proposals, orders, invoices, projects, tasks, events and documents, grouped by type with an icon, reference, label, status and a direct link. Results are limited by the signed-in user's permissions and by entity.
Turnover on a configurable base, best-selling products from invoice lines, top performer by invoiced value, order volume and value, and a step-line profit chart with three granularities.
Conversion measured on closed proposals only, base segmentation with an explicit unspecified bucket, weekday activity radar, population donut, cohorts by creation year and Emailing campaigns.
Invoiced revenue, outstanding balance, VAT, collection rate, average invoice, gross margin restricted to lines carrying a cost price, and a diverging income-versus-expense chart.
Profile identity, a report on the native security mechanisms, company tax identifiers and reporting volumes, each linking to the native page that owns it.
Configurable care vocabulary, activity curve, record summary, follow-up histogram and practitioner list, all built on the documented fallback mapping. No medical data is ever stored by the theme.
Fourteen server-rendered chart types, period filters, labelled axes, native tooltips, legends and dark-mode aware palettes.
Active project with deadline, task completion, team avatars, and logged time feeding the availability gauge.
All charts are generated server-side as SVG. There is no charting library, therefore no licence question and no client-side dependency.
|
Family |
Used by |
|
Step line |
Sales — Profit |
|
Smoothed line and area |
Account, Hospital, CRM, Executive |
|
Grouped bars |
Account — Overview |
|
Range bars |
Hospital — Follow-up |
|
Diverging bars |
Executive — Income and expenses |
|
Donut with in-slice labels |
Account — Inquiry, CRM — Population |
|
Radar |
CRM — Activity by day |
|
Circular gauge |
Sales — Time available |
|
Sparkline bars |
KPI strips |
|
Progress meters |
Project progress, segment shares |
Two scale decisions are deliberate. Bar families use a square-root scale, because with real ERP data one month is routinely a hundred times another and a linear scale flattens every other bar to a hairline. Diverging bars use one symmetric scale for both halves, so a small loss cannot look as deep as a large gain.
Native Dolibarr lists keep their sorting, filters, pagination, multi-selection, column selector, import and export, and are restyled with readable headers, rounded status badges, avatars and hover states. Status badge colours follow Dolibarr's own status semantics, so a validated but unpaid invoice reads amber rather than green. Wide tables scroll inside their own container so the page itself never scrolls horizontally.
Every native form keeps its field names, business logic, permissions, CSRF token, PHP validation and hooks. Only presentation changes: input height, radius, focus ring, help text, error and confirmation styling. No form is rebuilt, so external modules that inject fields keep working.
Each demo carries its own login treatment — split, card, panel, minimal and hero — sharing the demo palette. The Adnix wordmark replaces the Dolibarr image on the card; the native <img> element itself stays in the DOM so Dolibarr's markup and its alt text are untouched. Authentication is entirely native: the theme adds no authentication path of any kind, and two-factor and SSO continue to work if configured.
Dark mode is a second, complete surface set — not a filter. It covers the rail, top bar, canvas, cards, charts, tables, forms, lists, modals, menus, notifications, the login pages, native Dolibarr pages and all five demos. It can be toggled from the top bar, set as the default in the configuration, or follow the operating system. The preference is stored in the browser, so it is per browser rather than per user.
|
Breakpoint |
Behaviour |
|
> 1280 px |
Full grid, rail expanded |
|
1280 – 861 px |
Two-column grids, cards stack in pairs |
|
860 – 481 px |
Single column, rail becomes an off-canvas drawer |
|
< 480 px |
Single-column KPI cards, compact profile block |
Absence of horizontal overflow was verified by measuring the widest element on every demo at a 390 px viewport, not by eye: document scrollWidth equals the viewport width on all five.
The configuration page groups 45 settings:
|
Group |
Settings |
Covers |
|
Demo |
5 |
Active demo, palette, KPI style, dark default, sidebar branding |
|
Appearance |
9 |
Colours, font family and size, web fonts, radius |
|
Layout |
9 |
Fluid/boxed/compact, gaps, shadows, borders, animations, RTL |
|
Menu |
8 |
Sidebar and header variants, width, badges, favourites, recents |
|
Dashboard |
5 |
Turnover base, abandoned invoices, target, native boxes |
|
Content |
9 |
Banner title/text/link and visibility, care labels, care notice |
A JSON profile can be exported and re-imported. The import is validated against a strict whitelist: an unknown key or a value outside the allowed list is rejected rather than stored.
A user may hold a personal demo preference, and groups may hold their own. Dark mode, the collapsed rail state and the native box layout are per user or per browser. Nothing a user sets can widen what they are allowed to see.
Settings are written per entity, so each entity may run a different demo, palette and layout from the same installation. All dashboard queries filter on getEntity() for the object family they read, so figures never leak across entities.
The theme adds no permission of its own and grants nothing. The menu is built from the native tree, already filtered by the user's rights; search results are limited the same way; and administrator-only links render as inert labels for non-administrators, with the write itself still blocked server-side.
· Status is always conveyed by text as well as colour
· Visible focus rings on interactive controls
· ARIA labels on charts and on the period switchers
· Touch targets of at least 40 px
· prefers-reduced-motion disables card lift and transitions
· Contrast of the top-bar controls is derived from the active variant and was measured in both themes
Full WCAG 2.1 AA certification has not been performed; see Limitations.
· Only the active demo's queries run
· No charting library, no external font by default
· Charts are SVG generated in the same request
· Stylesheet and script are cached and versioned by an asset revision
· Menu counters are cached per request
· Data for hidden widgets is never fetched
· All output escaped with dol_escape_htmltag()
· All query parameters cast or whitelisted before reaching SQL
· Native CSRF tokens preserved; no token helper is reinvented
· The banner URL accepts only a relative path or an http(s) address
· Imported JSON profiles are whitelisted key by key and value by value
· No credential, secret or medical datum is stored by the theme
Adnix integrates through supported extension points only: module_parts for CSS and JS, a menu handler, and the main, toprightmenu and searchform hooks. No core file is modified, added or replaced.
The descriptor declares a minimum of Dolibarr 16 and PHP 7.0. The build was developed and verified end to end on Dolibarr 17.0.3 with PHP 8. Compatibility with Dolibarr 20 and 21 is expected because only supported extension points are used, but it has not been executed on those versions; this is stated plainly in the Technical Validation Report.
Before querying any optional table the theme checks the module is enabled. When it is not, the widget prints an explicit sentence naming the missing module, the grid reflows, and no query is issued. This was exercised for real: the verification environment runs without the Documents, Emailing and Ticket modules, and those widgets rendered their notice rather than a zero.
Rendering, dark mode, responsive behaviour and the absence of console errors were verified on Chrome. Firefox, Edge and Safari were not executed; the CSS and JavaScript use no feature outside the common baseline of current versions of those browsers, but the claim remains untested and is recorded as such.
|
File |
Role |
|
core/adnix_presets.php |
Single source of truth: the five presets, palettes, fonts and the demo resolver |
|
css/adnix.css.php |
Dynamic stylesheet driven entirely by the active preset |
|
js/adnix.js.php |
Rail collapse, drawer, dark-mode toggle, top-bar injection |
|
index.php |
The five dashboards and 30 chart helpers |
|
core/menus/standard/adnix_menu.php |
Menu handler |
|
core/menus/standard/adnix.lib.php |
Rail and top-bar rendering from the native tree |
|
class/actions_adnix.class.php |
Hooks; resolves and publishes the effective demo |
|
admin/setup.php |
Configuration, JSON export and validated import |
|
search.php |
Global search |
adnix/ — admin/, class/, core/ (modules, menus, presets), css/, js/, img/, langs/ (7 locales), index.php, search.php, README.md, CHANGELOG.md. The ZIP expands directly to adnix/, which is what the Dolibarr module manager expects.
Home > Setup > Modules > Deploy an external module, upload module_adnix-1.0.zip, then enable Adnix in the module list. The full procedure, including manual deployment and troubleshooting, is in the Installation Guide.
Enabling the module registers the menu handler and injects the stylesheet and script. The rail and top bar appear immediately; no page needs to be reloaded twice and no cache needs clearing, because the asset revision is bumped on activation.
Deploy the newer ZIP over the previous one and reload the configuration page. Settings are preserved: they are ordinary Dolibarr constants and are never dropped on upgrade. Exporting a JSON profile beforehand is still recommended.
Colours, radius, shadows, borders, density, typography, rail and header variants, layout width and the content of the banner and care labels are all reachable from the configuration page. Deeper changes are made by editing the preset array, which is the single place the whole theme reads its design tokens from.
Every user-visible string goes through Dolibarr's translation system; no business wording is hard-coded in PHP or JavaScript. English, French, Spanish, Italian and German are complete; Dutch and Brazilian Portuguese ship an earlier key set and fall back to English for the newer keys. Adding a locale means adding one file. Every key is namespaced with the Adnix prefix, because Dolibarr merges all active modules' language files into one table and an unprefixed key would resolve to whichever module loaded last.
The Screenshots folder contains 44 images captured on a live Dolibarr instance holding real demonstration data (4,228 third parties, 1,989 invoices, 1,276 proposals, 241 orders). Each demo folder holds its desktop dashboard, a full-page capture and its login page; the shared folders hold the tablet, mobile and dark-mode variants, the configuration page, the global search, the collapsed rail, four native lists, the agenda and six native record cards. No personal data appears in any capture.
Stated plainly, because a specification that claims more than was verified is worth less than one that does not:
· Dolibarr 20 / 21 — not executed; verification ran on 17.0.3
· Firefox, Edge, Safari — not executed; Chrome only
· Mobile operating systems — emulated viewports only, no physical device
· WCAG 2.1 AA — individual criteria applied and contrast measured, but no full audit
· RTL — a setting exists and flips direction; no RTL locale was exercised end to end
· Multi-entity — queries filter on getEntity() by construction, but a second entity was not created
· Drag-and-drop widget layout — provided by the native Dolibarr box system; the demo panels themselves are not draggable
· Margin figures — depend on cost prices being present; where absent, the theme says so instead of reporting a false margin
· Draggable and resizable demo panels with a saved personal layout
· AJAX refresh of individual widgets without a page reload
· Additional locales beyond the current seven
· Optional connectors for third-party medical modules to populate the clinical panel
· A per-role demo assignment interface in the configuration page
Adnix is published and maintained by DoliResources. Support requests, upgrade questions and customisation enquiries: https://www.doliresources.com. When reporting an issue, please include the Dolibarr version, the PHP version, the active demo, and an exported JSON profile.
Editor: DoliResources · Website: https://www.doliresources.com · Copyright: DoliResources