Discover powerful Dolibarr extensions designed to automate your business processes

Dreams ERP is a theme-module, not a CSS theme.
A conventional Dolibarr theme can only recolour the HTML that Dolibarr already produces. It cannot create a navigation sidebar with favourites and recently opened records, it cannot add a global search bar to the top bar, and it cannot replace the home page with an analytics dashboard — because none of that markup exists in the core output.
Dreams ERP is therefore packaged as a module that installs into custom/dreamserp/. Once enabled it takes over the whole back-office presentation layer while leaving every business feature, permission check and third-party module untouched. No Dolibarr core file is modified.
The theme is built on six mechanisms:
|
# |
Mechanism |
What it delivers |
|
1 |
Forced menu manager |
The custom sidebar renders on every page — standard, public and smartphone interfaces |
|
2 |
Injected CSS and JS |
Styling and behaviour reach every page, including third-party modules |
|
3 |
Hooks |
Home redirect, pre-paint theme state, print mode |
|
4 |
Native menu tree reuse |
The sidebar is generated from Dolibarr's own menu, so every module's entries appear automatically |
|
5 |
Custom dashboard |
A real analytics home page fed by live SQL |
|
6 |
Native widget area |
Dolibarr's own boxes remain available, restyled |
Because the sidebar is generated from the native menu tree, a module installed next month appears in the navigation with no change to the theme.
The left sidebar replaces Dolibarr's stock vertical menu and is composed of five zones.
Displays the company's configured square logo with the company name beside it, falling back to Dolibarr's own logo when none is uploaded. The row links to the dashboard. No product branding is imposed on the customer's interface.
A search field filters the navigation live as you type. It matches both top-level module names and their sub-entries, so a query surfaces a module whose child matches even when the parent name does not. Entirely client-side, with no page reload.
Renders the real Dolibarr bookmarks of the signed-in user, personal and shared, so the section stays in sync with the native Bookmark module instead of maintaining a parallel list.
· Section title — links to the full bookmark list.
· Add button — bookmarks the page you are currently on, in one click.
· Relative URLs — bookmarks are stored relative to the application root, following Dolibarr's own convention, so links are never produced with a duplicated root on sub-directory installations.
· Empty state — a short hint replaces the list until the user creates a first bookmark.
· Optional — the section can be switched off, and hides itself automatically when the Bookmark module is disabled.
Every active module appears as a top-level entry carrying its native icon.
· Top-level entries are real links, not just expand toggles. Clicking a module opens its dashboard and sets the active module context; a separate chevron expands or collapses the sub-menu in place, without navigating. Modules without children have no chevron.
· Sub-entries are grouped under their section headers, each group being its own foldable accordion with a distinct caret icon so the two nesting levels remain visually separable.
· A group auto-opens only when it genuinely contains the current page — the theme never springs open an arbitrary first section on a landing page.
· Indentation steps through five levels, and labels are kept to a single line with ellipsis so long entries never wrap.
Active-item detection uses a level-encoded identifier carried on every link rather than the URL. This matters because several Dolibarr entries legitimately share a destination — Products and Warehouses both point at the same page — so URL matching would highlight both at once. Encoding the level additionally guarantees that a top-level click can never light up a child entry. The selection is remembered in the session so that a filter or a form submission which drops the parameter does not lose the highlight, and the fallback is scoped to the current module so a page opened in a second browser tab cannot hijack the highlight in the first.
Menu entries the signed-in user may not reach are hidden, not shown and then denied.
The filter is branch-aware. Dolibarr frequently leaves the leaf items of an administration section enabled — they are gated at the page itself — while marking the section header as not permitted. Hiding only the header would leave a list of orphaned links leading to access-denied pages. Dreams ERP detects a non-permitted section header and skips the header and every descendant until the next section.
Verified with a real non-administrator account: an administrator sees 39 sub-entries including Setup, Admin tools and Users & Groups, while a standard user sees 2, and none of the administration sections appear anywhere in the navigation.
The records the user opened during the session — invoice, third party, proposal, order, product, project, ticket and so on.
· No additional query — on a record page Dolibarr has already loaded the object by the time the sidebar renders, so the theme simply reads it.
· Colour-coded type tag — a two-letter marker on the left (IN, TP, PR, SO…), each object type mapped to its own theme colour, followed by the record label and a muted recency index.
· Live count — shown in the section header, for example “Recently opened (4)”.
· Capped and de-duplicated — newest first, limited by a configurable maximum that applies immediately on both capture and render.
· Session-held — deliberately not written to the database, since a write on every record view is not worth the cost for transient data.
For administrators, a compact card shows how many modules are active out of the total available with a percentage bar, linking to module management. The expensive part of that count — scanning module descriptor files on disk — is computed once and cached in the session.
· Desktop — the sidebar folds to a 78-pixel icon rail; labels, section titles and the module filter are hidden while icons stay centred, and the state is remembered.
· Mobile (≤760px) — the sidebar becomes an off-canvas drawer over a dimmed backdrop, opened by the top-bar burger and closed by tapping the backdrop. The drawer always shows full labels: the icon rail is a desktop-only state and is never applied on a phone, including when returning from a desktop session where the folded preference is stored.
· Viewport-aware burger — it opens the drawer on a phone and folds the rail on desktop.
The native Dolibarr header is restyled and extended in place, so all core functionality is kept: multi-company selector, print view, help, notifications and the user menu continue to work.
· Burger — toggles the rail on desktop or the drawer on mobile.
· Global search — searches across the ERP and opens the theme's results page; Ctrl/Cmd + K focuses it from anywhere.
· Light/dark toggle — instant, with no page reload.
· Icon legibility — native top-bar icons ship white because Dolibarr's stock header is dark, which would make them invisible on a light bar. Every icon and link in the login block is recoloured to a readable token with a primary-coloured hover.
· Layering — the header sits above the sidebar so the burger stays clickable in every state.
The dashboard replaces Dolibarr's home page. Users are taken there on login and on any later visit to the home page. All figures come from live SQL against the user's own data.
Week, month or year. Every KPI, delta and destination link follows the selection.
Four tiles — Turnover, Unpaid invoices, New clients and Orders — each showing the value, a contextual sub-label, a period-over-period delta and an embedded sparkline.
Each tile is entirely clickable and lands on the corresponding Dolibarr list filtered to exactly the same scope as the tile: same date range, same statuses. The total on the destination list therefore matches the number shown on the tile. The theme builds those destination URLs using each core list's own search parameters, which differ per object type — invoices, third parties and orders each use a different date-parameter naming scheme.
A twelve-month area chart with the previous year overlaid as a dashed comparison line, an animated draw-in, and an interactive hover showing a crosshair, a point marker and a tooltip with the month and its amount.
A donut of commercial proposals broken down by status — Drafts, Open, Signed, Billed and Not signed — with the total in the centre and a legend showing each status's amount. Every legend row links through to the proposals list filtered on that status.
The latest business events — validations, payments, record creation — with a coloured type icon, the acting user, a link to the record itself and the amount where relevant.
The day's events with start time, duration, type tag and participants, colour-coded down the left edge, with a live event count in the header.
A compact table showing reference, client with a colour initial avatar, date, amount, status pill and a quick-open action. References and client names are rendered through Dolibarr's own link helper, so the native hover preview cards still work.
Below the custom panels, Dolibarr's own box system is embedded and restyled: database statistics, invoices per month, orders per month, proposals per month, account balances, low-stock alerts, and any box provided by any installed module.
Users keep the full native behaviour — add a widget from the selector, hide it with its close icon, and drag to reorder — with the layout saved per user by Dolibarr itself. On a user's first visit the theme seeds a sensible default set so the area is immediately useful rather than empty, because Dolibarr only shows the widget selector to users who already have a personal zone.
The database-statistics widget is re-laid-out as a responsive KPI grid with icon chips and a hover state, and every widget is constrained so that wide graphs and tables scroll inside their own card instead of widening the page.
Any panel whose data set is genuinely empty renders an empty state — icon, title, a one-line explanation and, where useful, a call to action such as “New event” on an empty agenda — rather than a blank card.
Results from the top-bar search are grouped by object type — third parties, invoices, orders, proposals, products, projects and users — each group presented as a card with a coloured icon, a result count, per-result subtitles and a “see all” link into the corresponding filtered list. A dedicated empty state is shown when a query returns nothing.
Dark mode is a first-class, fully designed palette, not an inverted filter.
· Toggled from the top bar, with the choice stored per browser.
· No flash on load — the stored preference is applied by an inline script in the document head, before the page paints, so a reload lands directly in the correct theme. The same mechanism restores the folded sidebar state.
· Administrator default — a default mode can be set for users who have not yet chosen; an explicit user choice always wins.
The theme redefines Dolibarr's own CSS custom properties, mapping each core variable onto a Dreams ERP design token. Because those tokens are themselves redefined in dark mode, every native page — including pages belonging to third-party modules the theme has never heard of — follows both light and dark automatically, from a single definition.
Where Dolibarr hardcodes colours instead of using its variables, those specific rules are re-tinted so they do not break dark mode: table row separators, last-row borders, the information notice box, info boxes, and the agenda month calendar including cell backgrounds, grid borders, per-user separators and event shadows.
Every standard Dolibarr screen is restyled without altering its markup or behaviour.
· Lists — the responsive wrapper is the card, with the table transparent inside it so rounded corners show no white notches. Uppercase muted column headers, subtle row separators and a themed hover state.
· Filter bars — the div-based filter row gets its own clean card, separated from the table below it.
· Record cards — the tab container is the card, and the active tab is marked with a clean primary underline replacing the core's white bottom border. Half-width column blocks inside a card are neutralised so a card never appears inside another card, and are sized border-box so the right column cannot overflow and drop below the left.
· Buttons — action buttons take the primary colour with the label forced to a readable colour, because Dolibarr's global link rule would otherwise repaint it blue on blue. Delete actions are red and secondary actions muted.
· Forms — inputs, selects and textareas receive theme borders, radius and a soft focus ring.
· Dropdowns — the highlighted option in select2 is forced to a readable primary-on-white, fixing the core theme's invisible white-on-white hover, and the dropdown surface is made solid.
· Status badges — pill-shaped and colour-mapped by status.
· Print — the sidebar and top bar are dropped and the content takes the full page, matching native print behaviour.
Settings are reached through Home → Setup → Modules → Dreams ERP and are grouped into three cards — Appearance, Menu and Dashboard — each with an icon, title and subtitle, with the label and hint on the left and the control on the right.
|
Setting |
Type |
Default |
Effect |
|
DREAMSERP_COLOR_PRIMARY |
colour |
#0FA37F |
Primary accent: links, active states, charts, primary buttons |
|
DREAMSERP_COLOR_NAV |
colour |
#16233C |
Ink colour: fill of the active menu entry and the highlighted tile |
|
DREAMSERP_COLOR_ACCENT |
colour |
#7B61FF |
Secondary accent used in charts and tags |
|
DREAMSERP_COLOR_SUCCESS |
colour |
#12A150 |
Positive deltas, paid status, success badges |
|
DREAMSERP_COLOR_DANGER |
colour |
#E5484D |
Negative deltas, overdue items, required fields |
|
DREAMSERP_COLOR_WARNING |
colour |
#F5A623 |
Pending status, stock alerts |
|
DREAMSERP_RADIUS |
integer |
10 |
Corner radius in pixels across the whole interface |
|
DREAMSERP_FONTSIZE |
integer |
14 |
Base font size in pixels |
|
DREAMSERP_WEBFONT |
boolean |
1 |
Load the Inter web font; disable for system fonts only (offline installs) |
|
DREAMSERP_DARK_DEFAULT |
boolean |
0 |
Dark mode for users who have not chosen yet |
|
DREAMSERP_MENU_WIDTH |
integer |
258 |
Sidebar width in pixels |
|
DREAMSERP_HIDE_FAVORITES |
boolean |
0 |
Hide the Favourites section |
|
DREAMSERP_HIDE_RECENTS |
boolean |
0 |
Hide the Recently opened section |
|
DREAMSERP_RECENTS_MAX |
integer |
5 |
How many recent records to keep |
|
DREAMSERP_DISABLE_DASHBOARD |
boolean |
0 |
Keep Dolibarr's native home page instead of the dashboard |
|
DREAMSERP_HIDE_CORE_BOXES |
boolean |
0 |
Hide the native widget area on the dashboard |
|
DREAMSERP_CA_BASE |
select |
ttc |
Whether turnover is computed including or excluding tax |
|
DREAMSERP_CA_INCLUDE_ABANDONED |
boolean |
0 |
Whether abandoned invoices count towards turnover |
Two further constants exist but are intentionally not exposed in the interface: a safety hatch that reverts to Dolibarr's stock left menu while keeping the styling, and an informational blue used by the stylesheet.
Ambiguous business rules are configuration, not hardcoded assumptions. Whether turnover is counted including or excluding tax, and whether abandoned invoices count towards it, are genuine accounting choices that differ between companies. The chosen setting is applied consistently to the KPI, the chart and the status filter of the tile's destination link, so a tile and the list it opens can never disagree.
A reset to defaults is available and asks for confirmation before running.
On a public demo or sales instance you usually want prospects to see the configuration screen — it demonstrates the product — without being able to change anything. When the demo-platform flag is set, non-administrators may view the configuration page with all controls visible and interactive, so they can experiment with the colour pickers, but Save is disabled, Reset is inert, and every write action is refused server-side independently of the interface. On a normal customer installation this behaviour never appears: non-administrators simply receive the standard access-denied page.
The theme ships with seven languages, all at strict key parity — identical key sets, 131 keys in each file: French, English, Spanish, German, Italian, Portuguese (Brazil) and Dutch.
No user-visible string is hardcoded, including every label, hint, section title and confirmation message on the configuration page, and the strings injected into the top bar by JavaScript. Module keys are prefixed so they cannot be silently shadowed by Dolibarr's core translation files, which resolve first and win on a name collision.
· Dolibarr 16.0 to latest — every core function the theme depends on was verified to exist with an unchanged signature on both the 16.0 and development branches.
· PHP 7.0 floor — respected throughout, with no syntax from later versions.
· No core modification — everything is delivered through documented module extension points.
· Cache-busting — asset URLs carry a revision that is bumped automatically when the module version changes, so users pick up new stylesheets and scripts on an ordinary reload after an update, with no manual hard refresh.
· Clean uninstall — disabling the module removes every constant it created, including the forced menu managers and the landing page, returning Dolibarr to its stock appearance.
· Graceful degradation — if sidebar rendering is disabled or its library is missing, the theme falls back to Dolibarr's native left menu rather than breaking the page.
· Responsive — verified with no horizontal overflow at 390 px and at desktop widths, in both light and dark mode, on the dashboard, lists, record cards, search and configuration pages.
· Efficient — expensive computations are cached in the session, and one-time setup steps are guarded so they run once rather than on every request.
1. Copy the dreamserp folder into your Dolibarr custom/ directory, or upload module_dreamserp-1.0.zip through Home → Setup → Modules → Deploy module.
2. Enable Dreams ERP in Home → Setup → Modules.
3. Optionally adjust colours, radius, font size and dashboard behaviour in the module's configuration page.
Enabling the module sets the forced menu managers and the post-login landing page. If the sidebar does not appear immediately, disable and re-enable the module once so the initialisation runs again.
All screenshots were captured on a clean Dolibarr 23.0.3 installation with the module's own demo data seeded, at a fixed 1600×990 viewport rendered at twice the pixel density (3200×1980 px); mobile captures use 390×844 at the same density. They are supplied in the screenshots folder beside this document.
|
File |
Shows |
|
01_dashboard_light_top.png |
Dashboard: sidebar, top bar, KPI tiles, turnover chart, pipeline donut |
|
02_dashboard_light_charts.png |
Turnover evolution and sales pipeline in full |
|
03_dashboard_light_activity_agenda.png |
Recent activity and today's agenda panels |
|
04_dashboard_light_invoices_table.png |
Latest invoices table with status pills |
|
05_dashboard_light_native_widgets.png |
Native widget area with the add-widget selector |
|
06_sidebar_favorites_recents.png |
Sidebar detail: favourites, accordions, recently opened |
|
07_sidebar_collapsed_rail.png |
Collapsed 78-pixel icon rail (desktop) |
|
08_global_search_results.png |
Global search results grouped by object type |
|
09_configuration_page.png |
Configuration page grouped into sections |
|
11_invoice_list_native.png |
Native invoice list inheriting the theme |
|
12_invoice_card_native.png |
Native invoice record with restyled tabs |
|
13_thirdparty_list_native.png |
Native third-party list |
|
14_proposal_card_native.png |
Native proposal record |
|
15_dashboard_dark_top.png |
Dashboard in dark mode |
|
16_dashboard_dark_charts.png |
Charts in dark mode |
|
17_dashboard_dark_activity_agenda.png |
Activity and agenda in dark mode |
|
18_configuration_page_dark.png |
Configuration page in dark mode |
|
19_invoice_list_dark.png |
Native list in dark mode |
|
20_invoice_card_dark.png |
Native record card in dark mode |
|
21_mobile_dashboard_light.png |
Dashboard at 390 px |
|
22_mobile_drawer_open.png |
Off-canvas navigation drawer on mobile |
|
23_mobile_dashboard_dark.png |
Mobile dashboard in dark mode |
|
24_mobile_invoice_list_dark.png |
Native list on mobile in dark mode |