ProjectForge 9
What’s new in ProjectForge 9: ProjectForge 9.0.0 ↓
ProjectForge 9.0.16 released
2026-10-26, tag 9.0.16-RELEASE Source only
-
Chat: rooms, direct messages, files, threads, mentions and confidential messages
-
Search ignores accents and umlaut spellings
-
Project selection finds projects by number and customer
-
Order and invoice caches no longer refresh each other endlessly
Overview
-
Chat (menu Common → Chat): rooms with chosen users and groups, and direct messages to any user, readable by their participants only, administrators neither. Messages with formatting, files of any type (stored in the data transfer), emoji reactions, threads that can be followed and marked unread, and @ mentions notified in the app and by mail. Confidential messages in direct messages are end-to-end encrypted and never stored by the server. Behind a reverse proxy, the chat needs an unbuffered connection, see the administration guide.
-
Search: search and selection boxes ignore accents and German umlaut spellings ("Mueller" finds "Müller", "Strasse" finds "Straße"), completely after the next nightly re-index; deactivated users are no longer found in the search of the main menu.
-
Administration: the backup script of the administration guide compresses the dump of the files to about half the size.
-
Fixed: the order and invoice caches refreshed each other endlessly when an invoice referred to a deleted order position; projects are found by their number and the name of their customer; outgoing invoices saved in the new interface are found by their customer at once; the time sheet filter for sub structure elements can be switched off; postal codes like "D-34286" are no longer linked as JIRA issues; the log of a running script is shown again.
All changes
-
Chat: confidential messages in direct messages (e.g. for a password), end-to-end encrypted in both browsers, relayed live and never stored by the server, shown to the recipient only once.
-
Chat
-
Chat rooms (menu Common → Chat): anybody creates a room and chooses its participants, users and groups; members who join a group later take part at once. The creator and the moderators edit and delete the room. Rooms are visible to their participants only, administrators included.
-
Direct messages: anybody can write privately to any user shown in the user selection, from the chat page, from a user found in the menu search (start chat / send file; for everybody, with the users of the user selection) or by clicking an author in any conversation; whoever got a message can answer. Only the two read the conversation, administrators neither.
-
Messages with formatting (text colours, lists, links, inline code and code blocks of several lines), files of any type (paste, drag & drop or file dialog; images as thumbnails), emoji reactions and replies as threads of their own, which can be followed. The files are stored in the data transfer: in an area per room, whose participants see it in the data transfer and where the files are kept as long as chosen in the room; files of direct messages go into the personal box of the recipient. Without the data transfer plugin, no files are exchanged. Own messages can be edited and deleted, moderators hide messages with a reason and see the history of a message.
-
Typing @ suggests the participants of the room; a mentioned person is notified at once, in the app and by mail. New messages are notified once per room until read, by mail only if not seen in the app within an hour; rooms can be muted.
-
New messages appear without reload (server-sent events, with polling as fallback). Behind a reverse proxy, the chat needs an unbuffered connection, see the administration guide.
-
-
Chat: a file of a message can also be opened in its data transfer area, besides downloading it.
-
Chat: a message can be marked unread, threads with unread replies are marked, and in a thread a line shows the first unread reply.
-
Search and selection boxes ignore accents and German umlaut spellings: "Andre" finds "André", "Mueller" and "Muller" find "Müller", "Strasse" finds "Straße", and vice versa. Applies to entries indexed after the update, i.e. completely after the next nightly re-index.
-
Admin guide: the backup script compresses the dump of the files (about half the size), because pg_dump writes their contents hex encoded.
-
Outgoing invoices: invoices saved in the new interface were not found by the name of their customer until the next search index rebuild.
-
JIRA links: an issue key needs at least two leading uppercase letters, so a postal code like "D-34286" in a text is no longer linked as an issue.
-
Project selection: projects are also found by their number (e.g. 7.002) and by the name of their customer.
-
Scripts: showing the log of a running script could fail with an error.
-
Time sheet list: the filter including all sub structure elements could not be switched off. It is replaced by the filter "without structure sub elements", off by default.
-
The order and invoice caches no longer refresh each other endlessly (e.g. during the daily order book snapshots) when an invoice refers to a deleted order position.
-
Search in the main menu: deactivated users are no longer found (they still are in the user list).
ProjectForge 9.0.15 released
2026-10-25, tag 9.0.15-RELEASE Source only
-
Ad hoc bookings: grant or propose time sheet bookings without group membership
-
Notifications: SMS delivery, creditor invoices due, variables with examples
-
Time sheet form: recently used entries with consumption, sortable and filterable
-
Customer wizard reuses existing structure elements
-
Structure tree: lost and incomplete elements after a background reload fixed
-
Password forgotten: reset mail limited against mail bombing
Overview
-
Ad hoc bookings: who may edit the time sheets of others on a structure element grants colleagues the booking of own time sheets for a period, optionally restricted to some cost units; the colleagues see only the granted structure elements. Employees without this right may propose such a booking, the project management accepts the time sheets afterwards (reminded by a new notification rule).
-
Notifications: delivery steps by SMS; new rule "Creditor invoices due"; the rule editor lists the variables for subject and text with example values and a copy button, the preview shows the texts with example values.
-
Creditor invoices: marked as overdue already 2 working days before the due date.
-
Time sheet form: the recently used entries show the consumption of their budget and can be sorted, filtered and arranged per column (remembered per user); the consumption bar tooltip shows budget, booked and remaining person days.
-
Customer wizard: existing structure elements of the customer and the project can be used instead of new ones, picked from the tree or found by the same title.
-
Order statistics: the bubble size of the contribution margin chart shows the contribution margin; titles can be switched on.
-
Fixed: structure elements created or moved during a background reload could vanish from the structure tree, the responsible person was missing after a change; an invalid search syntax shows a hint instead of an empty list; the info of a structure element is only answered to users who may see it; the password reset mail is limited per user, per client and in total, so it can no longer be requested over and over.
All changes
-
Ad hoc bookings
-
Who may edit the time sheets of others on a structure element (e.g. project management, finance) may grant colleagues the booking of own time sheets for a period, without group membership: several colleagues at once, on the structure element and any of its sub elements, each optionally restricted to some of its cost units. The grant is active right away, each colleague gets a mail with the links to book on.
-
The colleagues see only the granted structure elements and the titles of their ancestors in the structure tree: no other structure elements, consumption, time sheets of others or statistics. After the period or a revocation the own time sheets stay readable.
-
In the structure tree, a badge marks the structure elements with ad hoc bookings; its tooltip names the colleagues and their periods. Shown only to who may grant on the structure element.
-
Employees without this right may propose such a booking on the structure elements they book on themselves, for 31 days at most: the colleague books right away, the project management accepts the time sheets afterwards, unchanged or moved to another structure element or cost unit (time sheet form or mass update; list filter "Only to be accepted"). Until then they count like any other time sheet. The project management may confirm a proposal, so later bookings don’t have to be accepted anymore.
-
New notification rule "Time sheets to be accepted": reminds the project managers of the time sheets still to be accepted (in the app, and by mail if not acknowledged, as configured in the rule). The structure tree shows their number next to the badge.
-
-
Consumption bar (structure tree, task list, time sheet form): the tooltip shows the budget, the booked and the remaining person days as a calculation, an overbooked budget in red.
-
Time sheet form: the recently used entries show the consumption of their budget, and the search also matches it.
-
Creditor invoices
-
Marked as overdue (red) already 2 working days before the due date, so they are paid in time.
-
New notification rule "Creditor invoices due": reports unpaid creditor invoices due within a configurable number of working days (overdue ones of the last 90 days included) to the recipients of the rule.
-
-
Notifications
-
The rule editor lists the variables available for subject and text (general ones and those of the rule type), each with a button to copy it.
-
The variables come with an example value each, so it is visible how e.g. a list of invoices looks; the preview also shows the texts with example values.
-
-
Time sheet form: the table of recently used entries can be sorted and filtered per column, its columns can be reordered, resized, pinned and hidden; the layout is remembered per user.
-
Notifications: delivery steps by SMS to the mobile phone number of the recipients (if SMS is configured), with an own SMS text of the rule or otherwise the subject and the link.
-
Customer wizard: existing structure elements of the customer and the project can be used instead of new ones, picked from the tree (the title may differ, e.g. "ACME" for "ACME Inc.") or found automatically by the same title.
-
Order statistics, contribution margin bubble chart: the size of a bubble shows its contribution margin instead of its costs. The switch "Show titles" labels the own bubbles with their short title and contribution margin %; switched off, the names are in the tooltip only.
-
The info of a structure element (title, path, project, customer, consumption) was answered to every logged-in user; now only to users who may see the structure element.
-
Structure tree: a structure element created or moved while the tree was being reloaded in the background could vanish from the tree until the next reload, so no sub-element could be created below it ("Parent structure element is required but not found").
-
Structure tree: after a structure element was changed, its responsible person was missing in the tree until the next reload.
-
Password forgotten: the reset mail is limited per user, per client and in total, so it can no longer be requested over and over (mail bombing, invalidating a pending reset link).
-
Lists: a search term that isn’t a valid search syntax (e.g. "Project: Alpha") now shows a hint instead of an empty list without explanation.
ProjectForge 9.0.14 released
2026-10-23, tag 9.0.14-RELEASE Source onlyJar (SourceForge)
-
Contribution margin per order and structure element, bubble chart
-
Former React interface removed
-
Security: CSRF check for every session, changing requests as POST only
-
Fields with several entries: copy, paste and drag entries
-
Import of incoming invoices: currencies and header-only exports corrected
Overview
-
Contribution margin: the order statistics break it down by orders and structure elements (a tree with a monthly chart per row) and show a bubble chart of revenue, contribution margin % and costs per project, project group, customer or customer group, in the colors of the business units.
-
Former React interface removed: all its pages are part of the new interface, old links (
/react/...) lead there. -
Security: the CSRF token is checked for every changing request of a logged-in session; changing requests (filters, templates, search index, logout, cancelling a login) are accepted as POST only; history comments need update access; npm dependencies updated.
-
Fields with several entries: entries can be selected, copied, cut, pasted and dragged into another field of the same kind; Ctrl/Cmd+Z undoes a change.
-
Administration: structure tree and list show the groups with access rights on an element; the time sheet mass update remaps the cost unit by type, keeping the structure element.
-
Polls: templates have the state "Template" and no deadline.
-
Fixed: import of incoming invoices (currencies, periods, header-only exports); cancellation invoices listed with the positions they cancel; the order edit page no longer jumps; the mass update log shows the updated entries again.
All changes
-
Order statistics, contribution margin: bubble chart of revenue, contribution margin % and costs (size) per project, project group, customer or customer group. On request, the other projects of the selection (e.g. of the whole business unit) are shown for comparison, anonymously. The bubbles take the colors of the business units, set with the business units (customer groups page). A switch labels all bubbles with their short title instead (the group name, for a single project its short name).
-
Fields with several entries (users, groups, employees, …): entries can be selected by sweeping over them with the mouse or by clicking, then copied (Ctrl/Cmd+C) or cut (Ctrl/Cmd+X) and pasted into another field of the same kind with Ctrl/Cmd+V, or dragged there. Ctrl/Cmd+Z undoes a change of the field.
-
Structure tree and structure element list: column with the groups having access rights on an element (administrators only). Hovering shows the rights of each group, a click opens the access rights of this element.
-
Time sheet mass update: remap the cost unit by type while every time sheet keeps its structure element, e.g. after a project was linked to it.
-
Order statistics: the contribution margin broken down by orders and by structure elements, as a tree with a monthly chart per row. The values are calculated from the invoice positions and the time sheets × hourly rate; what can’t be assigned stays with the project as residual.
-
Polls
-
Templates have no deadline: none is required, and none is set when saving.
-
Templates have the state "Template" instead of "Running", are listed without a filter and marked with a badge; the state filter replaces the "Templates" filter.
-
-
Import of incoming invoices
-
Positions of one invoice in different currencies are converted to EUR by the rate of the invoice date instead of being taken as EUR; without a rate the invoice is marked as faulty.
-
Stored invoices between two periods of the export (e.g. March for an export of January and June) are no longer offered for deletion.
-
Header-only export: the rows of one invoice (one per booking line) are merged into one invoice with the total amount, instead of being offered as new invoices on every import.
-
Header-only export: the internal note (column "Interne Re.-Nr.") is no longer appended to the invoice number, which changed back and forth with every import of the two files.
-
-
Mass updates: the log window shows the updated entries again.
-
Cancellation invoices are listed with the order positions they cancel, right after the cancelled invoice (e.g. 17400 and 17400-S), also in the order and forecast exports. On the order page both are struck through; together they still count 0 as invoiced.
-
Order book: the edit page no longer jumps while a field is changed.
-
The former React interface is removed: all its pages are part of the new interface, and old links (
/react/...) lead there.
-
The CSRF token is checked for every changing request of a logged-in browser session, no longer only for requests identifying themselves as the new interface; cancelling a login or password reset is accepted as POST only.
-
Appending a comment to a history entry needs update access to the entry’s object, and is only possible for objects supporting comments (users, groups).
-
npm vulnerabilities in projectforge-next fixed: next 16.4.2, dompurify 3.4.17 and vitest 4.1.12.
-
Requests that change something (list and calendar filters, templates, search index, logout) are accepted as POST only; the GET variants of the former React interface are removed.
ProjectForge 9.0.13 released
2026-10-22, tag 9.0.13-RELEASE Source only
-
Banking migrated: bank accounts, transactions and their import
-
Visitor book, memos, Merlin templates and job monitor migrated
-
Project groups for project filters, forecast and exports
-
Import of incoming invoices: many corrections, faster
-
Old links are only forwarded where they were sent by mail or shared
Overview
-
New interface: bank accounts, transactions and their import (a page of its own with a preview of the differences), visitor book (offers visitors already recorded, filter of incomplete visits), memos, Merlin Word® templates and the job monitor migrated; the Sipgate actions are a menu of the System page.
-
Project groups: projects of a common parent project are combined into a group on the customer groups page; the project filters offer the group like a single project, forecast, contribution margin and the Excel exports show a project group column.
-
Import of incoming invoices: no longer overwrites other invoices of the same creditor, keeps invoices with surplus positions, takes paid date and amount paid from the position import, reads German tax rates of DATEV files correctly and shows what changed in a modified row; the comparison and the preview of large files are much faster, and the page stays open after committing.
-
Configuration: parameters with JSON values can be edited as text and compared with every former version.
-
Old links: links to pages of the former interfaces are only forwarded if they were sent by mail or shared (orders, to-dos, vacation, data transfer, polls, password change); other bookmarks should be renewed. The 2FA dialog of the old interface is removed.
-
Improved: list filters with a checklist offer "choose from all"; project wizard with tabs and a summary of what will be set up; mass updates link their log again; deactivated users struck through.
-
Fixed: calls from an external phone via sipgate; project and cost unit numbers of number ranges without configured segments; structure element fields show a renamed or moved element right away; amounts with two decimal places and currency.
All changes
-
Configuration parameters with JSON values
-
Switch between the form and the JSON text, which can be edited directly as well.
-
Compare versions: the stored, the edited and every former value from the history, line by line.
-
Customer groups and business units: compare versions as well (the stored format, with ids).
-
JSON values are stored compact; values of up to 100,000 characters no longer make the save fail at the history.
-
-
Project groups: projects belonging together under a common parent project can be combined into a group on the customer groups page. The project filters of the order book, invoices, projects, cost 2, timesheets and order statistics offer the group like a single project; forecast, contribution margin and the Excel exports of the forecast, order book and invoice list show a project group column as soon as one of their projects belongs to a group.
-
Visitor book: while a new visitor is entered, the name offers the visitors already recorded with it; picking one adds the visit to that visitor instead of creating a duplicate. The company names in use are completed, and the dialog of the first visit opens right after a new visitor is saved.
-
Visitor book: a pinned filter shows the visitors with incomplete times of visit, e.g. a departure not entered yet. After a visit is saved, the list is shown again.
-
List filters with a checklist (customer, project, business unit): they say that they only narrow the current result, are narrowed by the list’s search term as well, and offer "choose from all" to pick values the current result doesn’t contain. In the time sheet list they offer values without a period, too.
-
Sipgate: downloading the configuration, synchronizing and resetting the contacts are now a menu of the System page (shown if Sipgate is configured); the separate Sipgate page and its menu entry are gone. While an action of the System page runs, a progress bar shows; the contact sync no longer reloads all synchronized addresses.
-
Structure element fields: a click on the selected structure element opens the tree, like the pencil button. Order positions show the consumption bar of their structure element, which leads to its time sheets.
-
User list: deactivated users are shown struck through.
-
Mass updates of time sheets, invoices, incoming invoices, projects, addresses, access rights and liquidity entries link their log again: the log viewer shows what the run changed.
-
Banking
-
Bank accounts, their transactions and the import of transactions migrated to the new interface. The import is a page of its own: choose the account, drop the csv file, check the preview with the differences to the stored transactions.
-
Transactions: the filter of bank accounts takes all selected accounts, not only the first one.
-
Bank accounts: the selection of an account shows its name.
-
The import of transactions is refused for an account without write access, and the account of a stored transaction can no longer be changed.
-
Import of transactions: a transaction without date, value date or amount is marked as faulty in the preview instead of being dropped silently (without date) or making the import fail, and the error of a transaction of another account is shown once.
-
-
Import of incoming invoices
-
After committing, the import page stays open: the progress is shown there and the preview is reconciled again once the import is done.
-
-
Creditor invoices: the old upload page of the CSV import has been removed; the import runs in the new interface.
-
Job monitor migrated to the new interface: running and recently terminated background jobs with their progress, cancelling asks for confirmation first. After an import the page returns to the import once its job has finished, but only to a page of the same server. Old links are redirected.
-
Memos migrated to the new interface: list and form. A memo stays visible to its owner only.
-
Visitor book migrated to the new interface: list with the latest visit and the number of visits, form with the contact persons, visits entered in a dialog (preset with today and the current time). Deleting the last visit of a visitor no longer fails, and a visit can no longer be assigned to another visitor. Old links are redirected.
-
The classic version of the address campaign values (list, mass update and the address form opened from it) has been removed; the new interface covers everything.
-
Merlin Word® templates migrated to the new interface: list, admin form with the variables and the execution, single and serial.
-
Links of former versions
-
Old links to pages of the former interfaces are only forwarded to the new pages if they were sent by mail or shared: orders, to-dos, vacation entries, data transfer, poll answers, the password change and the error overview of the system dashboard. The former start pages (login, calendar) and the direct call stay forwarded too. Bookmarks of other old pages no longer lead to the new ones and should be renewed.
-
The links of the reminder mails of polls ending soon (versions 8.0 and 8.1) lead to the answer page again.
-
-
Import of incoming invoices
-
An imported invoice no longer overwrites another stored invoice of the same creditor (number, date and currency of an older invoice were replaced).
-
Credit-card payment offsets (credit note on a credit-card clearing account) are skipped; their date becomes the paid date of the invoice if it has none. Other credit notes are imported with a negative amount.
-
A header-only import no longer offers stored invoices for deletion; a position import only those within its periods.
-
Warnings for a paid date before the invoice date and for invoices with EUR and another currency (EUR is taken).
-
An import with fewer positions than the stored invoice removes only the surplus positions; it deleted the whole invoice before.
-
The position import takes the paid date (the latest one if the positions differ, with a warning) and sets the amount paid to the gross sum of the invoice, less discount; a missing paid date keeps the stored one, as does a stored amount paid. Before, only the header import set the paid date.
-
A position without cost units in the import keeps its stored cost assignment; it was shown as modified after every import.
-
The comparison with the stored invoices is much faster, and the preview of a large file shows without a long wait.
-
DATEV files: tax rates and payment amounts in German format (e.g. "5,50", "1.234,56") are read correctly; a tax rate of 5.5 % was taken as 5 %.
-
-
Number ranges: a range with customers and without configured segments shows its project and cost unit numbers by its digits (e.g. 7.0001.0 for one project digit) instead of 7.000.10.
-
Project wizard: tabs and a pinned action bar as on the edit pages; the action step lists what will be set up (new customer, new project, path of the new structure elements, access rights) and what is still missing; the finish button is always clickable, and a progress bar shows while the setup runs.
-
Phone call: calls from an external phone without an assigned number were refused by sipgate.
-
Structure element fields show the new name and path right after a task was renamed or moved, without a reload.
-
Amounts
-
The amounts of bank transactions and of liquidity entries and series are shown with two decimal places and the currency in the forms.
-
-
The import of incoming invoices shows what changed in a modified row: the old and new value in every compared column, the gross amount included, and the changed fields without a column of their own (e.g. the paid date of a position-based file) in the status cell.
-
Groups and team events no longer offer a link to the old interface: its pages no longer worked.
-
Job monitor: the cancel button of a job is only offered to users allowed to cancel it; others saw a button without effect.
-
The 2FA dialog of the old interface was removed: a second factor for protected actions is only asked for in the new interface. Pages of the old interface get an access denial instead, old links lead to the start page.
ProjectForge 9.0.12 released
2026-10-21, tag 9.0.12-RELEASE Source only
-
Security hardening: stricter access checks, Content Security Policy, second factor on more pages
-
config.xml replaced by configuration parameters
-
Polls reworked; contracts, currency pairs, skill matrix and 2FA setup migrated
-
Order access for project managers per customer, customer group or business unit
-
New user right Customers, to be granted by admins
-
Forecast: current month and deleted orders corrected
Overview
-
Security: changing, deleting and restoring an entry is decided by the stored entry, not only by the posted one; stricter Content Security Policy and new security headers; requests that change something are sent as POST; more pages require the second factor of their area; QR codes are no longer delivered as image links.
-
Customers: creating, changing and deleting customers needs the new user right "Customers" (finance); being a member of the finance group is no longer enough, so admins have to grant it. The customer wizard also works with only one of the rights for customers and projects.
-
Order access: finance and controlling grant project managers and project assistants read access to all orders of a customer, a customer group or a business unit, including invoices, forecast and contribution margins.
-
Configuration: config.xml is replaced by configuration parameters with their own editors (holidays, JIRA servers, contract types, accounting settings) and taken over automatically on the first start; projectforge.properties can be compared with its backups.
-
New interface: polls (reworked, with templates and a results tab), contracts, currency pairs, skill matrix, inbox and outbox, two-factor setup, customizing the menu, e-invoice checker and birthday butler migrated.
-
Removed: the d.velop interface.
-
Fixed: the forecast of the current month adds the invoiced figures and the remaining forecast, the plan is the order book of the planning date (deleted orders corrected); sorting customers by number; a damaged JCR repository no longer prevents the start when files are stored in the database.
All changes
-
Order access: finance and controlling grant project managers and project assistants read access to all orders of a customer, a customer group or a business unit, including their invoices, forecast and contribution margins (new tab in the customer groups editor).
-
System page: projectforge.properties can be compared with its backups, or two backups with each other. Optionally the order is ignored, so only changed values and comments are shown; values of secrets stay hidden, only whether they changed is shown.
-
Customize my menu: migrated to the new interface. Entries are dragged or clicked into the own menu, groups can be added, renamed and removed; empty groups are no longer stored as broken entries.
-
When arranging chart dashboards, the drag handle (top left of a tile) and the tile menu (top right) are shown in solid orange.
-
E-invoice checker: migrated to the new interface. Validity, invoice data, seller, buyer and amounts are shown side by side, amounts in the invoice’s currency; embedded attachments are downloaded with a click.
-
Notifications to be confirmed: several of them are shown underneath each other in one toast instead of stacked behind each other, and the toast steps aside while the bell’s list is open.
-
Birthday butler: migrated to the new interface. The current month is preselected, and without a configured organization the page says so instead of offering a download that can only fail.
-
Two-factor authentication setup migrated to the new interface: mobile phone, authenticator app and WebAuthn tokens on one page, a token is renamed or deleted in a dialog. Deleting a WebAuthn token now also requires a recent second factor. Old links are redirected.
-
config.xml replaced by configuration parameters
-
Holidays, JIRA servers, contract types and the accounting settings (account number ranges, business assessment) are maintained on the configuration page as parameters, each with an own editor (rows of the business assessment movable, formulas and scripts checked on saving, JIRA urls and project keys checked as well); changes of the holidays apply without restart.
-
An existing config.xml is taken over automatically on the first start (into the parameters still empty, its directories into projectforge.dir.* of projectforge.properties) and renamed to config.xml.migrated afterwards.
-
The export of config.xml in the system administration is removed.
-
-
Contracts migrated to the new interface: list with a period filter on the date, form with suggestions from other contracts, the configured contract types, JIRA links, attachments and cloning. A year filter stored by the former list is still shown and can be removed. Old links are redirected.
-
Customers: new user right "Customers" (finance), like the one for projects. Creating, changing and deleting customers needs it with read and write access; being a member of the finance group is no longer enough, so admins have to grant it. The customer wizard needs it for new customers.
-
Polls migrated to the new interface and reworked: list, form and answer page, questions reordered or taken from templates (built-in ones or own polls marked as template), polls cloned, a results tab beside the Excel export. Attendees and full access also by group (later members included). Multiple choice questions accept several answers again, answers stay with their question when questions change. Only users with full access see the results; finished polls can no longer be answered or changed, and their end is mailed once. Old links are redirected.
-
Inbox and outbox migrated to the new interface: list and form, with the autocompletion of the free texts. Old links are redirected.
-
Customer wizard: also usable with only one of the rights for customers and projects. With the right for customers only, a new customer is created (and optionally its structure element); with the right for projects only, a project is set up for an existing customer. With both, "No project" creates the customer only. The groups and their access rights are optional, and no group is preselected any more.
-
Skill matrix migrated to the new interface: list and form, ratings as stars, the Excel export of the statistics in the list, and a mass update of rating, interest and comment. Old links are redirected.
-
Currency pairs migrated to the new interface: list with the rate valid today, form with the conversion rates of the pair, edited in a dialog directly in the form. For a new rate, the rates of both directions are proposed from the online source for its date; the rate valid today is marked, rates still ahead are shown muted. Old links are redirected.
-
Customer list: sorting by the customer number works again.
-
Forecast of the order statistics and its Excel export: in the current month, the invoiced figures and the remaining forecast are added (as well as the invoices and the forecast of the plan), instead of taking the greater value. The cumulated forecast and plan now match the sums of the project overview. The note on this in the Excel sheet 'Grafiken 1' is removed.
-
Forecast plan: the plan is the order book of the planning date. The forecast charts of the order statistics now include the orders deleted since, as the Excel export does. Orders already deleted on the planning date are no longer part of it: daily (incremental) order book snapshots kept the orders deleted since the beginning of the month. This is corrected for existing snapshots as well.
-
Files: with projectforge.files.store=db, a JCR repository that can’t be opened (e.g. damaged) no longer prevents the start. ProjectForge starts without it and logs an error; files not yet migrated out of the JCR are missing then, and the migration, backup and sanity check of the JCR are skipped.
-
Lists migrated to the new interface ignore columns and a sort order stored by the old list for columns it no longer has; columns missing from a stored order appear in their usual place instead of at the end.
-
Properties editor: values of all parameters ending in "key" (e.g. projectforge.receiveSmsKey) are treated as secrets and no longer shown.
-
The d.velop interface (synchronization of customers and vendors as trading partners) was removed.
-
More pages require the second factor of their area: the imports of salaries, incoming invoices and bank account records, the upload of incoming invoices, the bank accounts, currency pairs and conversion rates, the customer groups and the project wizard (finance), as well as the structure wizard, the caches and the Sipgate page (administration). The system statistics no longer require the second factor of the administration.
-
The QR codes of the authenticator key (two-factor setup), of the REST client token (my account) and of the calendar subscriptions are sent within the response instead of as an image link, so the secret or token no longer shows up in access logs. QR code images are not cached anymore. The WebAuthn options no longer contain the session id, and changes of the two-factor setup check the CSRF token themselves.
-
Security hardening
-
Stricter Content Security Policy by default (no eval, no foreign frames, objects or form targets), new Referrer-Policy and Permissions-Policy headers, no conflicting X-Frame-Options any more. An own value of projectforge.security.csp-header-value stays as it is.
-
The session id is renewed after a successful second factor.
-
The preset of a new entry and the cloning of an entry require the right to add entries of this kind.
-
Html of the forecast analysis and of list notes is escaped or sanitized more thoroughly.
-
Polls: only participants answer, for themselves, and a user with full access on behalf of an attendee; the answers of others can no longer be overwritten, and parallel users no longer mix up their polls.
-
Requests that change something (sending 2FA codes, system actions, cancelling jobs, logout, saving list and calendar filters and favorites) are sent as POST.
-
Data transfer: who may change or delete an area is decided by its stored admins; a user can no longer make himself admin of an area by saving it.
-
Project wizard: existing access rights of a group on the parent elements are only added to, never reduced; the preview shows nothing about elements the user may not see.
-
Leave account corrections can be added by HR staff with write access only, also the preset of a new one.
-
Skill matrix: saving a skill no longer moves it to another user.
-
The unused QR code image endpoints are removed; QR codes are delivered as data urls only.
-
Order book: whether a project manager may change or delete an order is decided by the stored order as well; saving a foreign order with the own project no longer takes it over.
-
Ending a mass update (cancel) is sent as POST.
-
Deleting and restoring an entry are decided by the stored entry as well, not only by the posted one: a foreign entry (e.g. a memo, timesheet or calendar) can no longer be taken over by deleting or restoring it with the own user as owner.
-
Calendar events: changing or deleting an event also requires write access to its stored calendar; a foreign event can no longer be moved into the own calendar.
-
To-dos, Merlin templates and polls: whether an entry may be changed is decided by the stored entry as well (assignee, admins, owner), not only by the saved one.
-
System groups can no longer be deleted by sending them under another name.
-
Bank accounts: whether an account may be changed or deleted is decided by the stored account; saving a foreign account with the own user as owner no longer takes it over.
-
Addresses: adding an address to an address book requires full access to that book, also when it is saved along with an own one.
-
Invoices: deleting an invoice is decided by its stored type and cancelled invoice; deleting it as a posted cancellation no longer resets the status of another invoice.
-
ProjectForge 9.0.11 released
2026-10-20, tag 9.0.11-RELEASE Source only
-
Customer wizard: customer, project, structure element and groups in one go
-
Project contacts replace project manager, head of business and sales manager
-
Data transfer: external access in the new interface, areas administered internally
-
Properties editor, functions can be switched off
-
Saving no longer empties the creation date
Overview
-
Customer wizard: sets up customer, project with cost 2 types, structure element and groups with access rights in one step, with a preview; group names follow a configurable naming convention.
-
Projects: a contact person and any number of further ones, as in orders, replace the project manager, the head of business manager and the sales manager (migrated).
-
Data transfer: the external access of an area has moved to the new interface; areas with external access are administered on the internal instance and synced to the gateway.
-
Administration: editor for projectforge.properties with descriptions, defaults and a backup before every save; functions can be switched off by configuration (menu entries gone, pages and REST services 404).
-
Vacation: leave account entries migrated to the new interface; vacation and absence entries can be edited as the other kind.
-
DATEV import: one upload fills both accounting records and chart of accounts.
-
Fixed: saving a changed entry in the new interface no longer empties its creation date (lost dates restored from the history); menu visibility with a list of several groups works.
All changes
-
Switching off functions
-
Functions can be switched off in the configuration (projectforge.features.enabled and .disabled, one per menu entry): their menu entries are gone, their pages and REST services answer with 404.
-
The REST services of plugins that aren’t activated are no longer reachable.
-
The gateway offers only the data transfer: the entries of the user menu that led nowhere there (feedback, my account, menu, 2FA, personal box) are gone.
-
The menu visibility of the entry for customizing the menu is configured by projectforge.menu.visibility.myMenu (it followed myAccount).
-
-
Groups: a configurable naming convention (configuration parameter "Group nomenclature": description, pattern of customer and project fields, suffixes per role, letter case). The project and structure wizards suggest the names of new groups following it, and its description is shown at the name of a group and in the wizards.
-
Customer wizard: sets up a project in one go – the customer (an existing one or a new one), the project with its cost 2 types, its structure element below a chosen one, and the groups of team, managers and externals (existing ones or new ones with their members) with their access rights, shown in a preview before anything is saved. Available to users who may create customers, projects and structure elements, who may create groups and access rights through the wizard as an exception. Offered on the customer list, the project list, the structure tree and the task list.
-
Vacation and availability: an entry can be edited as the other kind ("Edit as absence" / "Edit as vacation"), like time sheets and calendar events (now "Edit as event" / "Edit as time sheet", formerly "Switch to …"). Person, period, comment and substitutes are taken over into a new entry, created only when it is saved; an entry already saved stays as it is. The button’s tooltip says so.
-
Administration → System: editor for projectforge.properties. All parameters grouped by topic with descriptions and defaults, search, secrets masked. Before every save a copy of the file with a timestamp is written; changes take effect after a restart.
-
Availability entries: the location of a new entry is no longer preset to remote, and an empty type or location is shown as "Not specified". New type "Mobile Tätigkeit" (mobile activity) for working remotely without a workation; installations with their own list of types (projectforge.availability.types) add it there.
-
DATEV import: one upload of the tax office’s file fills both tabs, accounting records and chart of accounts, so each can be reconciled without uploading the file again.
-
Data transfer with a gateway
-
Areas with external download or upload are administered on the internal instance again. Each sync transfers them to the gateway, where the external link points and where external users and the internal users with access find the files. No area is administered on the gateway any longer (created, changed or deleted; no personal boxes either), a note there points to the main instance, and the observers get the notification mails from there. Switching off the external access or deleting the area removes it from the gateway.
-
The external link of a deleted area no longer works.
-
-
Data transfer: the external access of an area (login with the area’s password, then its files) has moved to the new interface. The area’s link now points there; links sent before lead there as well. As in the area itself, a click on a file opens its details (read-only for files of others), the files are sorted newest first, and the column layout is kept (in the browser). Own uploads can now also be encrypted. External users no longer see who uploaded the other files unless they are logged in to ProjectForge as well and have access to the area there (who also see its activities), and can no longer rename files of others. Logging in to or out of the external access no longer ends a login to ProjectForge in the same browser.
-
Projects: a contact person plus any number of further contact persons, as orders have them, replace the project manager, the head of business manager and the sales manager (migrated: the project manager becomes the contact person, the others further contacts). All contacts have the same access to the project and its orders and invoices; the project list shows them in one column, the mass update sets the contact person, and picking a project in an order prefills its contacts.
-
Leave account entries (corrections of the leave account) migrated to the new interface: list and form. HR staff can add a correction for the employee shown directly in the vacation account; a correction opened there returns to it. Old links are redirected.
-
Menu visibility (projectforge.menu.visibility.*): a list of several groups works, separated by comma or semicolon (only a single group was recognized, a list not at all).
-
Saving a changed entry in the new interface no longer empties its creation date. The date of the last change is always set by the server. Creation dates lost this way are restored from the history.
ProjectForge 9.0.10 released
2026-10-19, tag 9.0.10-RELEASE Source only
-
Employees and cost search migrated
-
German website
-
Separate "Create" and "Save" in edit forms
-
Availability: "Reachable if needed" only, public comment for the team
Overview
-
Employees: list and form in the new interface; status, weekly hours and leave days edited in dialogs.
-
Cost search: in the new interface, also as a movable panel on every page (Alt+K) or a small window of its own.
-
Edit forms: "Create" for a new entry, "Save" for an existing one; saving never creates a copy.
-
Availability: "Reachable if urgent" merged into "Reachable if needed"; the public comment, shown in red in the form, is visible to the team, also in the tooltips of the absence charts.
-
Website: German version of the pages, FAQ, changelog and guides at projectforge.org/de.
-
Invoices: an invoice with deleted positions only can be deleted and restored again.
All changes
-
Website: German version of the pages, the FAQ, the changelog and the user, administration and quick start guides at projectforge.org/de, with a language switch; the help link of the search field opens the German user guide for German users.
-
Availability: "Reachable if urgent" is merged into "Reachable if needed". The comment of an entry is called "Public comment" and is shown in red in the form; every team member who sees the entry sees it, also in the tooltips of the absence charts (e.g. the chart of a vacation’s substitutes).
-
Cost search: migrated to the new interface. Its menu entry shows it as a movable panel over the current page, which stays open on every page (also via the button in the top bar or Alt+K; the position is remembered). It can also be opened in a small separate window.
-
Edit forms: a new entry is saved with "Create", an existing one with "Save". Both are separate writes: saving an existing entry can no longer create a copy of it, and creating one never overwrites an existing entry.
-
Employees: the list and the form of the employees are migrated to the new interface. Status, weekly working hours and annual leave days are edited in dialogs directly in the form; the entry valid today is marked, entries still ahead are shown muted.
-
Invoices and incoming invoices: an invoice stored earlier with deleted positions only can be deleted and restored again; only saving it is refused.
ProjectForge 9.0.9 released
2026-10-19, tag 9.0.9-RELEASE Source only
-
Hotfix release
-
Fix: saving an address campaign or an account no longer creates a copy
-
Fix: orders and invoices whose positions are all deleted are refused
Overview
-
Address campaigns and accounts: saving an existing entry in the new interface no longer adds a copy of it (e.g. setting a campaign inactive); campaign titles are unique.
-
Orders and invoices: an entry whose positions were all deleted is refused on saving instead of being stored without positions.
-
Further fixes: search term of multiple choice selection boxes, column headings of the availability entries in the leave account, build date in the footer.
All changes
-
Address campaigns and accounts: saving an existing entry no longer creates a copy of it (e.g. when setting a campaign inactive). A campaign’s title must not be taken by another campaign.
-
Footer: the build date is shown without a zone suffix (2026-10-19 instead of 2026-10-19Z).
-
Orders, invoices and creditor invoices: an entry whose positions were all deleted is refused on saving instead of being stored without positions.
-
Selection boxes with multiple choice: after a pick the search term stays selected, so typing the next name replaces it instead of being appended to it.
-
Leave account: the columns type, availability, location and comment of the availability entries show their headings instead of text keys.
ProjectForge 9.0.8 released
2026-10-19, tag 9.0.8-RELEASE Source only
-
Addresses and address campaign values in the new interface
-
New availability entries with substitutes and a quick view
-
Customers and projects independent of cost units, with number ranges
-
Selection boxes without inactive entries, name matches first
-
Fix: managers can approve vacations again
-
Fix: team calendars on the gateway show only the user’s own visible absences
Overview
-
Addresses: list, view and form migrated to the new interface, with vCard import, takeover from pasted text, exports, mass update and the favorite star in the list; the address books are migrated as well.
-
Address campaign values: migrated to the new interface, with a comparison campaign (e.g. last year’s) whose values can be adopted in the mass update or the form; campaigns can be set inactive.
-
Availability: new entries for periods of reduced availability (e.g. parental leave, workation) with substitutes and conflicts, shown in the calendar, team calendars, the team vacation calendar and a quick view of the next weeks.
-
Vacations of others: visible to the members of the person’s groups from 1 January of the current year; the team vacation calendar picks users, freelancers included.
-
Customers and projects: system-wide unique project numbers, usable without cost units, configurable number ranges with the next free number offered.
-
Selection boxes and lists: inactive entries only on request, name matches first and found by parts of the name, long lists ask for a search term; inactive entries struck through thin and grey in lists.
-
Further: notification rules end their pending notifications when deactivated and choose the target of "Open", script editor compares versions, exchange rate API tested on the system dashboard, new test data for the setup.
-
Fixes: approval of vacations by managers, absences in team calendars on the gateway, banners of manual notification rules, consumption bar of the time sheet form, events converted into time sheets, outdated list requests.
All changes
-
Availability
-
New entries for periods of reduced availability (e.g. parental leave, workation) of any user, freelancers included, with type, reachability, location, a comment for the team and an internal comment only visible to the person concerned and HR staff. Overlapping entries of the same person are rejected. Visible to the members of the person’s groups from today on only (a running entry without its begin, which might tell the duration of e.g. a sickness), in full to HR staff and the substitutes; the type only to the person concerned and HR staff. Linked with the vacation list; the leave account lists the person’s entries of its three years apart from the vacations, with a button to add one.
-
Substitutes of a vacation: a substitute who isn’t available counts as absent, as on vacation, and makes a conflict; other entries (e.g. remotely reachable) are shown on the vacation form but make no conflict.
-
Optional substitutes of an availability entry (any user, freelancers included): if all of them are away on a day of it (on vacation or not available), the entry is a conflict – shown in its form with the substitutes' absences, red in the list with a conflicts filter, and counted at the menu entry.
-
Calendar: one shared view of absences – the chosen groups and persons show their vacations and availability entries, with a choice of what to show (vacations, not available, remotely reachable etc.), only of persons sharing at least one group with the viewer (HR staff: of everybody). The type of an entry is shown only to the person concerned and HR staff, the status to everybody else.
-
Team calendars including leave days and their subscriptions (ICS) also show the availability entries, in the subscription always by their status only. Each team calendar chooses which absences it includes (vacations, not available, remotely reachable etc.; all by default), in the calendar view and in its subscription alike.
-
Team vacation calendar: with the same choice of absences (vacations and the availability entries by their status) for the chosen employees, on screen and in the Excel export; not available ones as absences, their comments only for those who may see the entries themselves.
-
-
System dashboard: the exchange rate API is tested daily and shown as an interface tile, so that a change of the API is noticed early. The test can be started at once in the scheduler tab.
-
Address campaign values: a comparison campaign (e.g. last year’s) shows its values and comments beside the selected campaign’s, with filters on its values and on the differences. Its values can be adopted for a selection in the mass update or one by one in the form. Address campaigns can be set inactive: their values can’t be changed any more.
-
Availability at a glance
-
A quick view in the calendar, the vacation account and the vacation and availability lists shows whether colleagues are available: pick one or more persons and see their vacations and availability entries of the next 4, 8 or 12 weeks as bars, one row each, weekends and holidays shaded. Only colleagues of the own groups can be picked, everybody for HR and finance staff. A link leads on to the team vacation calendar for groups and longer periods.
-
-
Script editing: a "Show changes" button in the code editor’s toolbar compares two versions of the code side by side (inline on small screens): the code being edited, the stored version or any of the script’s backups.
-
Selection boxes (groups, users, employees, addresses, address books, accounts, bank accounts): entries whose name matches the search term are listed first, before entries found only by other fields such as organization or email. Groups, user names, projects, customer identifiers, address books, calendars and bank accounts are also found by parts of their name, e.g. PF_Controlling by "controlling".
-
Selection boxes of users and groups: deactivated or deleted users and groups are shown struck through, in the picked values as in the search results.
-
Lists: ended projects and no longer active customers are struck through, as in the selection boxes. Entries that are no longer active but not deleted (ended projects, inactive customers, cancelled invoices, rejected or replaced orders, inactive notification rules, deactivated references) are now struck through thin and grey, distinct from deleted entries, each with its own legend entry.
-
Monthly report: when the configuration parameter "Report time sheets without Kost2?" is enabled, entries booked without Kost2 are marked, in the view as in the PDF export.
-
Selection boxes
-
A selection box with many entries (30 or more, e.g. users or cost 2 units) no longer lists its first entries in alphabetical order before anything is typed, but asks to type a search term. Short lists are still shown completely when opened.
-
-
Team vacation calendar: people are picked as users, and the members of a chosen group are shown also without an employee record (e.g. freelancers), with their availability entries, in the chart and the Excel export. Choices and favorites stored before are taken over.
-
Addresses
-
List, view and form of the addresses are migrated to the new interface, including the import of vCards, the takeover of data from a pasted text or a vCard, the image, the exports (Excel, vCards, CardDAV access) and the mass update.
-
The favorite star of an address can be switched directly in the list and in the view.
-
Calling a phone number of an address and sending it a text message open in a dialog over the list or the view.
-
An uploaded image is no longer lost if the form is saved more than a minute after the upload.
-
-
Addressbooks: the list and the form of the address books are migrated to the new interface. The list shows the users and groups with full and read-only access in columns of their own.
-
Lists: for entities with fewer than 100,000 entries, the gear menu offers only the full re-index of the search index, for every user — it takes just seconds there. Larger entities keep the re-index of the newest entries, and the full one for administrators.
-
Notification rules
-
Inactive rules are struck through in the list.
-
Deactivating a rule ends its pending notifications: their delayed steps (e.g. the e-mail) are no longer sent.
-
"Trigger now" is only available for active rules.
-
Delivery steps: removing a step no longer changes the delay of the following one (it could become 0, i.e. sent at once).
-
"Send test to me" states that the test goes out at once through all channels, e-mail too.
-
Each rule chooses where the "Open" button of its notifications leads: the page of the trigger, any menu entry, or no button at all.
-
"Open" is a button beside "Confirm" instead of a link below the text.
-
-
Setup with test data: new, larger sample data (customers, projects, orders, invoices, half a year of time sheets, vacations, calendar, liquidity planning) with dates relative to the day of the setup. The sample users get the admin password. The setup page shows the progress. The default plugins are active right after the setup, without a restart.
-
Vacations of others: the members of the person’s groups see them from 1 January of the current year on (before: up to 31 days after their end), in the calendar, team calendars and their subscriptions alike. Manager and substitutes of a vacation, HR and finance staff see all of it, now also in the vacation list (HR staff with read-only access, finance and controlling included). The team vacation calendar shows the availability entries of others to finance staff as to anybody else: of the members of their groups, from today on.
-
Customers and projects independent of cost units
-
Each project has a system-wide unique project number. Customers and projects can be used without cost units (Kost2), with free numbers.
-
Number ranges for customers and projects and their mapping to Kost2 are configured in application.properties (projectforge.fibu.number-ranges.*), including the number of project digits per customer and the segments of the Kost2 numbers, e.g. 1.#...
-
Without configured number ranges, installations that used the former ranges 4... (internal) and 5... (customers 0-999) for cost units of projects keep them; otherwise customer and project numbers are free, with or without cost units.
-
New customers and projects are offered the next free number of their number range.
-
Invoicing quota: optionally, the time booked on invoiced Kost2 types of customer projects counts as billed, independent of the Kost2 number (projectforge.invoicing-quota.billed-by-invoiced-kost2-types).
-
Contribution margin: Kost2 assignments accept the numbers as their number range segments them (e.g. 1.0007.3).
-
-
Selection boxes for users, employees, projects, customers and cost units no longer offer inactive entries (deactivated users, employees who have left, ended projects and customers). A "Show inactive" checkbox in the selection box brings them back; for users and employees it is available to HR, finance, organisation and administrators only. An inactive entry already set stays selectable.
-
Address campaign values: list, form and mass update migrated to the new interface. The address opens in a dialog from the organization and address columns; the previous page stays available as the classic version.
-
Time sheet form: the consumption bar of the task is up to date after booking and no longer counts deleted time sheets.
-
Notification rules
-
A manual rule shown as "Banner until done" always lets its recipients mark the banner as done: nothing else finished it, so it stayed forever.
-
Deactivating or deleting a rule ends its pending notifications at once, not only with the next hourly run.
-
Editors of a rule can end pending notifications in the log of sent notifications, one by one or all of a rule.
-
-
Order statistics: on a low screen (e.g. a phone in landscape) the page scrolls, so the charts can be reached.
-
Vacations: managers can approve and reject vacations again; entries stored without half day information were refused with a missing HR right.
-
Calendars pushed to the gateway: a team calendar including absences is generated for each user and shows exactly the absences this user may see; before, it could show those of another user with the same access to the calendar.
-
Converting a calendar event into a time sheet: an event ending on another day no longer produces a time sheet spanning several days ("Maximum duration exceeded"); the end time is taken on the start day.
-
Lists: after quickly paging back and forth (e.g. a year back and forth again), a list could come back from an entry with the filter paged past, when its outdated request was answered last.
ProjectForge 9.0.7 released
2026-10-14, tag 9.0.7-RELEASE Source only
-
Users and team calendars in the new interface
-
Team vacation calendar on the page, printable
-
Hint and notification for time sheets without Kost2
-
Fix: rights changed together with groups are stored correctly
-
Fix: stricter access checks of vacations
Overview
-
Users: list and form migrated to the new interface, with rights adapting to the assigned groups at once, tokens renewed and devices logged out from the form and passwords changed in a dialog; alternative e-mail addresses of other users are rejected.
-
Team calendars: list and form migrated to the new interface, with the subscription link in the form and the subscriptions of time sheets, weeks of year and holidays in the export menu.
-
Team vacation calendar: the vacations of the chosen employees and groups shown per quarter or year with adjustable day width, printable in page width, choices saved as favorites; users without HR or finance rights choose from their own groups only.
-
Vacations: days bar in the vacation account, long vacations squeezed into the bar; the vacation list of users without HR or finance rights shows only the vacations relevant to them.
-
Time sheets without Kost2: optional hint on saving and a daily notification rule, switched on by a new configuration parameter; the configuration list can be filtered by category.
-
System dashboard: muted, ignored and resolved problems can be listed from the counts of key figures and subsystem tiles.
-
Fixes: rights changed together with groups, stricter access checks, carry-over and mails of vacations, Excel export and automatic booking of vacations, contribution margin for contacts of orders, width of the calendar edit dialog.
All changes
-
Time sheets without Kost2
-
A time sheet saved without Kost2 (none assigned to the structure element yet) shows a hint: it is missing in the salary export, the project management or accounting has to assign a Kost2.
-
Notifications: new rule type for time sheets without Kost2 in the last months. Run daily, a notification marked as done comes back the next day and disappears by itself, once all of these time sheets have a Kost2.
-
New configuration parameter "Report time sheets without Kost2?" (default off, only shown with cost-unit accounting enabled): the hint on saving and the notification rule apply only if it is enabled. Booking without Kost2 stays possible.
-
Configuration: the list can be filtered by category (pills such as Finance or Time sheets).
-
-
Calendar: the edit dialog of time sheets and events is no longer stretched over the whole width of large screens.
-
System dashboard: muted problems can be listed with their own status filter, a click on the muted, ignored or resolved count of a key figure or subsystem tile lists exactly these problems, and a problem leaving the list after a status change can be shown again from a notice.
-
Users, alternative and former e-mail addresses: an address already used by another user is rejected, the primary address isn’t stored twice.
-
Vacation account: days bar
-
The vacations of the vacation account show their period as a bar beside the days, as the vacation list does: working days, weekends and holidays, and the days without any replacement on duty.
-
A vacation longer than four weeks is drawn with narrower days in the same width (up to 13 weeks) instead of being cut off after four weeks, in the vacation list as well.
-
-
Team vacation calendar: the vacations of the chosen employees and groups are now also shown on the page, per quarter or calendar year, with an adjustable width of the days (up to fitting the whole period into the window); the Excel export starts with the period shown, and the calendar can be printed (or saved as PDF) in the width of the page. Choices of employees and groups can be saved as favorites. Users without HR or finance rights choose from their own groups only and no longer see previous years. Vacations beginning before a sheet of the Excel export are now shown on it, too.
-
Calendars: the list and the form of the team calendars are migrated to the new interface. A stored calendar shows its subscription link with a switch for the reminders, the list offers the subscription of time sheets, weeks of year and holidays in its export menu.
-
Users: the list and the form of the user administration are migrated to the new interface. The rights offered adapt to the assigned groups at once, and tokens can be renewed and devices logged out directly from the form; passwords are changed in a dialog, here as on the own account page.
-
Vacation list: users without HR or finance rights see their own vacations, the ones they approve or substitute for, and the vacations of their substitutes overlapping their own ones, no longer all current vacations of their group colleagues.
-
Contribution margin: contact persons and additional contacts of an order see the contribution margin of its project, as in the order book. The access check of orders no longer loads their positions and payment schedules one by one, e.g. for the forecast chart and the contribution margin.
-
Users: rights changed in the same save as the groups are now stored correctly. A right set together with joining a group was lost, and a right of a group the user left stayed set.
-
Vacations: stricter access checks (a manager can no longer be swapped in on running or past entries, deleting and restoring use the stored entry and restoring is validated again, the vacations of replacements always count as conflicts, shown with dates and status only where the user may not read them otherwise, leave account corrections need write access); the remaining leave of the previous year is credited correctly for vacations crossing the end of the carry-over period and recalculated after later changes; special leave counts in the collision check; rejected vacations no longer appear in calendars and subscriptions; the comment is no longer mailed to replacements, and removed managers and replacements are notified. Excel export: weekends and holidays inside a vacation, half days and half working days are shown correctly, approved vacations win over those in progress. Automatic vacation booking of time sheets: days no longer covered by a vacation are removed, an unbookable vacation task fails the run instead of skipping days, the next successful run books all days missed since, and days are booked by the user’s time zone. The vacation account loads faster. Team vacation calendar: readable by screen readers, the stored choice is no longer overwritten by an outdated page state.
ProjectForge 9.0.6 released
2026-10-14, tag 9.0.6-RELEASE Source only
-
Leave applications and leave account in the new interface
-
Lanes & Planes interface for employees and cost centers
-
Data transfer files encrypted at rest
-
Password change: brute force protection, other sessions ended
-
Fix: contribution margin counts by booking period
Overview
-
Leave applications: list and form migrated to the new interface, with bars over the calendar days showing the days without any substitute, a year filter paging back and forth and the days left updated while editing.
-
Leave account: migrated to the new interface, with the next year in the statistics and leave applications without any substitute marked red.
-
Lanes & Planes: the active employees are pushed with their cost centers, cost units and creditor account, safeguarded against suspiciously small user lists and email changes; employees have a new field creditor account.
-
Users: new fields alternative and former e-mail addresses, searchable and in the Excel export.
-
Data transfer: files in the file system are compressed and can be encrypted at rest (AES-256).
-
Passwords: change password and change WLAN password in the new interface; a wrong old password counts as failed login attempt, and a password change ends the user’s other sessions.
-
System administration: system statistics load at once, copy & paste samples for the alert message; the Docker image is based on Java 21.
-
Fixes: contribution margin by booking period, year filter of leave applications and contracts, lists returning with an outdated filter, sorting of the vacation list, rejected leave applications in the vacation export, cost unit cache refresh in the time sheet form, phone lookup key and CSRF check of force delete.
All changes
-
Employees: new field creditor account (the DATEV account of the employee, e.g. for travel expenses), also shown as a column in the list and in the Excel export.
-
Lanes & Planes interface
-
The active employees are pushed with the general Kost1 as cost centers, the general Kost2 and the Kost2 they may book on (restricted by patterns like 5..02) as cost units, their Kost1 as reference cost center, their creditor account and their nickname as abbreviation. Numbers are sent without dots (as the DATEV export of Lanes & Planes requires). Finance maintains these settings in the configuration parameter "Lanes & Planes"; activation and API key are set in projectforge.lanesandplanes..
-
Additional users who aren’t employees (e.g. an external accountant) can be entered in the configuration parameter. They are sent with name and email only, so they aren’t deactivated and their role and managers are kept. The service admin and guest profiles of Lanes & Planes can’t be entered: the import doesn’t touch them.
-
Cost centers and cost units already existing in Lanes & Planes can be entered with their names in the configuration parameter (pasted from the user export). They are sent under that name, so Lanes & Planes reuses them instead of rejecting them as duplicates.
-
A changed email of an employee is held back (the old one is still sent, with a hint on the problem dashboard) until it was changed in Lanes & Planes and confirmed in the configuration parameter. Otherwise Lanes & Planes would deactivate the user and create a new one.
-
A suspiciously small user list isn’t pushed (Lanes & Planes deactivates every user not sent): it’s checked against a minimum number of users and against the last push, also after a restart of ProjectForge. A missing push state is reported on the problem dashboard.
-
-
Data transfer: files stored in the file system are compressed and can be encrypted at rest (AES-256, key in projectforge.files.fileSystemEncryptionKey), so backups of the file system don’t contain them in plain text.
-
Users: new fields alternative and former e-mail addresses (comma separated, e.g. after a change of name), also searchable and in the Excel export.
-
System administration: two copy & paste samples for the alert message (maintenance, new release), with the next full hour and the next release filled in.
-
Change password and change WLAN password are pages of the new user interface and show when the password was last changed.
-
System statistics
-
The database tile appears at once: the number of history entries and attributes is the estimate of the database (~) instead of a count taking minutes.
-
Tiles still loading show their title and a spinner.
-
CPU load and system load average as bars.
-
-
Leave account
-
Moved to the new interface; the statistics now include the next year as well.
-
Leave applications with a day without any substitute are marked red.
-
A leave application or leave account entry opened from the leave account returns to it.
-
-
Leave applications
-
List and form moved to the new interface; working days, days left and the vacations of the substitutes follow the form as it is edited.
-
The form charts the vacation and the overlapping vacations of the substitutes over the calendar days, with weekends, holidays and the days without any substitute.
-
The list shows each leave application as a bar over its days, with the days without any substitute in red.
-
Only the statuses that may be set are offered.
-
A leave application opened from the calendar returns to it on save.
-
-
Leave applications
-
The period and the employee are always on the filter row of the list; the period finds every leave application overlapping it.
-
The period is a calendar year by default, the list starts with the current one: any date entered gives its year, and the arrows page a year back or forth. A month or a free range can be chosen instead.
-
The form shows the vacation days left once the application being edited is counted, too, in red where they are not enough.
-
-
Docker image: based on Java 21 (Eclipse Temurin 21 JRE) instead of Java 17. ProjectForge still runs on Java 17 or newer.
-
Contribution margin (order book and scripts)
-
Accounting records count in the month of their record number (booking period), not in the month of their date: an invoice of September booked into August now counts as booked in August.
-
Scripts include the current month up to today as preliminary values (time sheets and unbooked invoices).
-
-
Time sheet form: choosing a task could fail now and then with "Session/EntityManager is closed" while the cost unit cache was being refreshed.
-
Lists
-
A list came back from an entry with an outdated filter when it had been paged back to a filter used shortly before (e.g. a year back and forth).
-
-
Security
-
Phone lookup (/rsPublic/phoneLookup) is disabled until an own key is configured in projectforge.phoneLookupKey; the former default placeholder is no longer accepted.
-
Force delete checks the CSRF token like all other write actions.
-
-
Vacation export
-
Rejected leave applications are no longer exported.
-
-
Vacation list: sorting by the status or the days column had no effect.
-
Year filter
-
The year filter of the leave applications and the contracts is applied again; it was ignored in the new interface.
-
-
Changing the own password or WLAN password: a wrong old password counts as failed login attempt and locks further attempts for a while, like the login does.
-
A password change (own, by an admin or by a password reset) now also ends the user’s other open sessions, not only the stay-logged-in devices. The session the own password was changed in stays logged in.
ProjectForge 9.0.5 released
2026-10-13, tag 9.0.5-RELEASE Source codeJar (SourceForge)
SHA-256 of projectforge-application-9.0.5.jar: 044f60907c25c056a44baf6d457c6b951190ef7fd36f795359bbf044026086a0
-
Vacation booked as time sheets automatically
-
Admin log viewer with log file search, now in the system dashboard
-
My account in the new interface
-
Hanging cache refreshes and scheduler runs can be terminated
-
Fix: current exchange rates suggested again
Overview
-
Vacation: a nightly job books past approved vacation days without time sheets, enabled on the configuration page; unbooked vacation days count again as days without time sheets in the monthly report and the notifications, listed separately and bookable with a click.
-
Configuration: parameters grouped by category, showing who may see and change each one; the former vacation settings of projectforge.properties are taken over once.
-
Admin log viewer: a tab of the system dashboard; search in the log files of the last days, the context of each entry inline, customizable tables.
-
System dashboard: hanging cache refreshes and scheduler runs can be terminated, blocked database statements time out, a failed cache refresh is retried after a minute at the earliest; the last successful run of a job is shown.
-
My account: migrated to the new interface, with the devices staying logged in, the usage of access tokens and longer GPG and SSH keys.
-
Notifications: new rule for passwords not changed for a given number of days.
-
Changelog: the releases of a major version newest first.
-
Fixes: exchange rate suggestions, JCR migration in the packaged application, sorting of the Merlin template list.
All changes
-
Admin log viewer
-
Live view: each entry opens its context, the events before and after it in memory, all of them or only those of the same user or logger; with a logger column.
-
Search in the log files of the last days by text, period, level and logger category (to show or to hide), also for the days before the server’s start.
-
Each hit opens its context inline: the entries before and after it, all of them or only those of the same user or logger, with paging to older and newer ones. Also for the occurrences of a problem of the system dashboard.
-
The tables of the live view and of the log file search can be customized (column width, pinning, showing and hiding), stored per user as in all other lists.
-
-
System dashboard
-
A hanging cache refresh or scheduler run can be terminated, so it can run again at once without a restart.
-
Cache refreshes and scheduler runs no longer wait endlessly for a database lock: a blocked statement fails after a timeout (60 seconds by default).
-
After a failed cache refresh, the cache serves its current data and retries after a minute at the earliest, instead of retrying on every access.
-
-
Approved vacation can be booked as time sheets automatically: a nightly job books the past vacation days without any time sheet on the configured vacation task and cost unit, never in advance and never further back than its last successful run, so a deleted vacation time sheet isn’t booked again. Finance and controlling enable it on the configuration page (maximum days back, vacation task and cost unit); the former settings in projectforge.properties are taken over into the configuration once (a property still set afterwards is ignored and reported as a problem on the system dashboard on every start, so it can be removed), and invalid values are refused on saving. The configuration list now groups the parameters by category and shows who may see and who may change each parameter. The statistics of the scheduled jobs also keep the last successful run; after a failed run, the system dashboard shows when the job succeeded last.
-
Notifications: a new rule notifies users whose password hasn’t been changed for more than a given number of days, with a link to change it. The notification is resolved once the password is changed.
-
Changelog: the releases of a major version are listed newest first, the release opening it last, linked from the top of the major; the release notes of an update link to it as well.
-
The admin log viewer is now a tab of the system dashboard; its own menu entry is gone, and old links lead to the tab.
-
Approved vacation days without time sheets count again as days without time sheets in the monthly report and the notifications about missing time sheets. The monthly report lists working days and vacation days without time sheets separately, a click on the vacation days opens the dialog for booking several days; notification texts can list all days, only the vacation days or only the other working days without time sheets.
-
My account
-
Migrated to the new interface; old links lead to the new page. Saving stays on the page, and a changed language, time zone or date format takes effect at once.
-
Devices staying logged in are listed with browser, IP address and last access, the current device is marked; each one can be logged out on its own.
-
The usage of an access token is shown as a table of the clients (browser, IP address, last access, number of accesses).
-
The language can be set back to the browser’s default.
-
An empty date format or time notation names the default that applies; the mobile phone links to the setup of the second factor, where it is changed.
-
-
Migration of files out of the JCR failed in the packaged application with "No LoginModule found".
-
Currency conversion: current exchange rates are suggested again when a new conversion rate is created or its valid-from date is changed (the exchange rate API had moved).
-
Merlin templates: sorting the list by the admins, users or groups column works (the list was left unsorted).
-
My account: GPG and SSH public keys may now have up to 20,000 characters (were 4,096, a longer GPG key couldn’t be saved); a key that is still too long is shown as an error at the field.
You can download the latest binaries from GitHub, Sourceforge, or Docker Hub.
ProjectForge 9.0.4 released
2026-10-11, tag 9.0.4-RELEASE Source codeJar (SourceForge)
SHA-256 of projectforge-application-9.0.4.jar: 47595cb45f18b15f3830463a2177ddfc7d2ccfc3b74f4339c289e50e16cd6d78
-
Notifications (experimental) in the app and by mail
-
System dashboard with statistics, scheduler and caches
-
Scripts in the new interface, also as buttons on selected pages
-
Time sheets: no more overlaps on the same cost 2
-
Fix: user-entered texts in mails no longer taken over as HTML
Overview
-
Notifications (experimental): rules notify users in the app (toast, banner, menu counter) and by mail, also as a cascade; first rules for missing time sheets and expiring vacation days, plus manual messages.
-
System dashboard: the problem dashboard becomes the system dashboard, with the system statistics and the new tabs scheduler and caches; problems (in German now "Störungen") can be changed many at once, the tiles count only open ones.
-
Scripts: list, form and execution pages in the new interface with a code editor and toolbar; the output gets a tab of its own; a script can appear as a button on selected pages and gets their filter.
-
Time sheets: bookings on the same cost 2 may no longer overlap; new configuration parameter for overlap groups.
-
Rich text: markdown is shown formatted and taken over by the editor, which now offers headings and tables; also used for the message of the day and the AI-savings note.
-
Forecast: snapshot date for the order book as of a given day, hint for the planning date.
-
Lists and data transfer: exports in an Export menu; data transfer with capacity bar, configurable file columns and the activity log as a tab.
-
Fixes: HTML in user-entered mail texts, poll mails, cancelled invoices count as paid, attachment rename, liquidity entries cloneable, task tree under concurrent changes, project list sorted by number.
All changes
-
Statistics, forecast
-
New field snapshot date: the forecast is calculated from the order book as it was on that day.
-
The tooltip of the planning date shows a hint maintained by finance in the new configuration parameter "Forecast" (formatted text with a small editor).
-
-
Notifications (experimental): admins and finance can set up rules that notify users in the app (toast, toast to be confirmed or banner, with the levels info, important and urgent, optionally as a menu counter) and by mail, also as a cascade (e.g. a mail if not confirmed in the app within two days). First rules: missing time sheets and vacation days about to expire; a manual rule sends a message on demand. Recipients are groups, users and employees by status, by default only those concerned. Texts are formatted and contain variables such as the list of days without time sheets. Who confirmed a notification and when is recorded. The problem dashboard shows the state of the notification jobs. Approved vacation days no longer count as days without time sheets, also in the monthly report.
-
Scripts: a script can be shown as a button with a tooltip in the top right corner of selected pages, e.g. the order book or other lists, and the forecast or contribution margin tab of the order statistics. The button opens the script’s execution page, and the script gets the current filter of that page as variable pageContext (e.g. pageContext.list() for the shown entries).
-
System dashboard: new tab "Scheduler"
-
Lists every scheduled job with area, description, schedule, last and next run, duration and status; sortable, with the columns stored per user like every list; overdue and failed jobs stand out, also as a tile in the overview.
-
The runs are stored per day (failed and slow runs one by one) and merged into months after 90 days.
-
A job can be started at once; a run is skipped while the previous one is still running.
-
-
System dashboard: new tab "Caches"
-
Lists every cache with its state, last refresh, duration, expiry time and failed refreshes; a single cache or all caches can be refreshed by hand.
-
Hanging cache refreshes are detected every minute, reported as problem and interrupted; stuck and failed caches also show up as a tile in the overview.
-
The button "Refresh all caches" of the system page is replaced by the caches tab, which refreshes every cache, not only a fixed selection.
-
-
Data transfer: the used capacity of an area is shown as a colored fill-level bar, in the list and in the file view.
-
Mass update: the file name of the Excel protocol now contains the entity name (e.g. invoices).
-
Configuration: the note on AI savings in time sheets and the message of the day on the login page are edited with the rich text editor (bold, italic, lists, links, colours).
-
Problem dashboard: the key figures and the subsystem tiles now count only the problems that still need a look. Resolved, ignored and muted problems are shown separately below each figure, so handling a problem changes the tiles at once.
-
Rich text: texts written in markdown (e.g. older tooltips and notes) are shown formatted instead of with their raw markup, and the editor takes them over directly; they are stored in the rich text format on the next save. Markdown pasted as plain text is converted as well. The editor now also offers headings (levels 1 to 4) and tables.
-
System dashboard: the problem dashboard is now called system dashboard and also shows the system statistics in a tab of their own, which replaces their menu entry; old links are redirected. The statistics are part of the new interface and show each section as soon as its figures are collected instead of waiting for all of them. Memory, disks, the database connection pool and the database server connections are shown as fill-level bars, and new figures were added: pool configuration and maximum size, database version and size, CPU load, processors, physical memory, operating system, non-heap memory, garbage collection and thread counts.
-
Code editor (scripts): a toolbar with undo, redo, search and replace and comment out, each naming its keyboard shortcut in the tooltip, and an info button listing all shortcuts. The search panel is shown at the top and in the user’s language.
-
Dark mode: the text is rendered in a lighter weight and smoothed, so it no longer looks overly bold on the dark background.
-
Data transfer: the columns of an area’s file table can be shown, hidden, reordered, pinned and resized like in every list; the layout and the sort order are kept per user for all areas.
-
Lists: the exports (Excel, PDF, forecast, cost assignments, ics) are now in an "Export" menu right beside the gear menu, each entry with its explanation shown directly in the menu.
-
System dashboard: with the multi selection, many problems can be picked at once and acknowledged, resolved, ignored, reopened, muted or unmuted together. In German the problems are now called "Störungen".
-
Data transfer: the activity log of an area is a tab of its own (after Info) instead of a dialog.
-
Scripts: the script list, the script form, "My scripts" and the execution pages are part of the new interface, with a code editor with syntax highlighting. The descriptions of a script and of its parameters are rich text (existing Markdown is converted on the next save). A stored script now always runs as stored; only the parameter values are taken from the form. Code executed directly (without a stored script) now runs as Kotlin instead of Groovy.
-
Scripts: the output of an execution (result, log) is shown in its own tab, which opens after the run. A file to download is shown prominently at the top of both the output and the execution tab.
-
Groovy scripts: only the Groovy core and its date, JSON, XML and template modules are bundled; the other modules (e.g. Ant, SQL, Swing, console) were removed.
-
Attachments: a changed file name or description was not saved.
-
Project list: sorting by the number column had no effect.
-
Personal box and employee fields: the "select me" button for picking oneself was missing.
-
Time sheet list: the hint that the filter needs a date or structure element is now shown highlighted above the list instead of easily overlooked below it.
-
Outgoing invoices: cancelled invoices and their cancellations now count as paid. They no longer appear under the filter 'unpaid' and are no longer included in the sums above the list (gross, net, open).
-
Problem dashboard: a mail that couldn’t be sent is now reported once as a mail problem, no longer a second time as an unexpected error of the function that sent it.
-
Task list and task tree: no more sporadic internal errors while another user creates or moves a task at the same time.
-
Attachments: long file names without spaces are wrapped in the attachment table instead of widening it.
-
Liquidity planning: entries can be cloned again; a clone of a recurring entry is a standalone entry.
-
Mails: names, titles, file names and texts entered by users are no longer taken over as HTML (e.g. in the mails of polls, data transfer areas, vacations and to-dos); only simple formatting and links remain in the mail text of a poll.
-
Polls
-
The links in the mails point to this installation instead of a fixed server; the link of the invitation works again.
-
The reminder before the deadline goes only to the participants who haven’t responded yet.
-
The subject of the invitation no longer shows HTML tags; subject and text of the mail after the deadline are no longer swapped.
-
-
Time sheets: no more overlapping bookings on the same cost unit
-
Two time sheets of a user on the same cost 2 (or, without cost 2, on the same structure element) may no longer overlap in time, even if a shared cost element is involved. Before, e.g. a vacation could be booked twice for the same time if the cost 2 had no project.
-
New configuration parameter "Time sheet overlap groups": groups of cost 2 number prefixes (e.g. "6" for all cost 2 units 6.*) whose time sheets never overlap; for shared costs, a group counts like one project. Visible to finance and controlling, changed only by members of both groups.
-
Existing overlapping bookings are shown by the filter "Only collisions" of the time sheet list.
-
-
npm vulnerabilities in projectforge-next and projectforge-webapp fixed: @modelcontextprotocol/sdk, proxy-addr, sharp and source-map-js updated.
You can download the latest binaries from GitHub, Sourceforge, or Docker Hub.
ProjectForge 9.0.3 released
2026-10-08, tag 9.0.3-RELEASE Source code
SHA-256 of projectforge-application-9.0.3.jar: fbe9999a9a8b919e8c421c6d275da44a408a26c2ed609e5564ea099efc18a2a0
-
New file store in the database replacing the JCR
-
Calendar: book several days also on already booked days
-
Fixes from the problem dashboard
-
Fix: user settings saved again on logout
Overview
-
File store: with
projectforge.files.store=dball files are stored in the database, data transfer files in the file system; existing installations stay on the JCR until switched. -
JCR migration: after switching, files are copied in the background and verified by size and checksum, with a report; switching back or a rollback stays possible. The system page shows the active store and starts backup ZIP and migration.
-
Backups: the admin guide describes a main dump and a separate dump of the files; the backup purge handles several prefixes.
-
Calendar: booking several days also books days that already have time sheets, as long as nothing collides; the preview shows each overlap.
-
Data transfer: areas sorted by last modification, latest first.
-
Problem dashboard fixes: structure tree and list filters without a session, field error for a time sheet without a task, invoices found by order number, fewer needless error log entries.
-
Projects: changing cost 2 types of an ended project in the mass update is reported as an error, with the reason in the Excel export.
-
Fixes: user settings saved again on logout, Safari browser back, tall company logos on legacy pages, wider mail layout, e-invoice checker error message, rare internal error when opening an order.
All changes
-
File store
-
New file store replacing the JCR (Apache Oak): with
projectforge.files.store=dball files are stored in the database (schemapf_files), data transfer files in the file system (directorydatatransferof the home directory). Existing installations stay on the JCR until switched todb(see the admin guide). -
After switching to
db, all files of the JCR are copied in the background and verified by size and checksum, with a report injcr-migration-report.txtin the home directory; the JCR keeps them, so switching back or a rollback to the former release is possible. The migration continues on the next start if it was interrupted. -
System page: the card "Document repository (JCR)" shows the active store and starts the JCR backup ZIP and the migration.
-
Backups: the admin guide describes two dumps, the main dump without the schema
pf_filesand a separate dump of the files; the backup purge accepts several comma-separated prefixes and purges each backup series on its own.
-
-
Calendar, book several days: a day already booked is booked as well if the new time sheet doesn’t collide with an existing one (an overlap allowed by a shared cost element is fine); the preview shows each overlap and whether it is allowed.
-
Data transfer: the list of areas is sorted by the last modification, latest first, by default.
-
Problems from the problem dashboard
-
Structure tree and list filters no longer fail without a session.
-
A time sheet without a task shows a field error instead of a server error.
-
The vacation list is sortable by the mode column.
-
Invoices are found by the number of their order.
-
No more needless error log entries for unsaved orders, invalid search syntax (now a warning) and a systemic failure of calendar subscriptions (logged at most once a day).
-
-
Legacy pages: a tall company logo is limited in height and no longer covers parts of the application.
-
Mails: wider layout; field names in the change history no longer wrap letter by letter.
-
Projects: changing the cost 2 types of an already ended project in the mass update is an error instead of being silently skipped; the Excel export of the mass update shows the changed cost 2 types and lists failed entries with their reason. The edit form of an ended project shows its existing cost 2 units checked and ended.
-
Safari: browser back from an entry returns to the list again instead of skipping it and landing on an earlier page.
-
Changed user settings (e.g. list filters and column layouts) are saved again on logout instead of being lost.
-
E-invoice checker: an e-invoice whose amount due doesn’t match its lines is shown with this error instead of "no e-invoice data found".
-
Orders: opening an order could rarely fail with an internal error.
You can download the latest binaries from GitHub, Sourceforge, or Docker Hub.
ProjectForge 9.0.2 released
2026-10-06, tag 9.0.2-RELEASE Source code
-
Calendar: book several days at once
-
Orders: further contact persons instead of fixed roles
-
Chart pages with rearrangeable tiles
-
Faster forecast and contribution margin
-
Project list: last activity columns
Overview
-
Calendar: book several days at once, e.g. a vacation or an absence for a colleague; weekends, holidays and booked days are skipped, half working days booked pro rata.
-
Orders: one contact person plus any number of further contact persons instead of project manager, head of business and key account manager; they get the same access and the change mail.
-
Charts: chart pages show charts as tiles that can be reordered, resized and hidden, stored per user.
-
Statistics: forecast and contribution margin calculated much faster; forecast analysis of an order opens in a dialog from the forecast tables.
-
Project list: sortable columns for the last time sheet, last order date and last activity to spot ended projects.
-
Problem dashboard: a click on a key figure shows the problems it counts; the mail tile shows the outcome of the last mail; failing calendar subscriptions are reported in the error digest.
-
Lists: the search box gets the focus on page load; statistics and problem dashboard moved to new URLs with redirects.
-
Fixes: a cloned time sheet keeps its user, search terms highlighted in cells with JIRA links, no stale frontend files in the release jar.
All changes
-
Project list: columns for the last time sheet, the last order date and the last activity (the later of both), sortable, to spot projects that have probably ended.
-
Problem dashboard: a click on a key figure (new problems, regressions, external systems etc.) shows exactly the problems it counts.
-
Chart pages (statistics, liquidity forecast, invoices, my statistics): charts as tiles that can be reordered by drag and drop, resized in steps and hidden; the arrangement is stored per user.
-
Calendar: book several days at once, e.g. a vacation or an absence booked on behalf of a colleague; weekends, holidays and already booked days are skipped, half working days are booked pro rata, templates, recent time sheets and the booked user’s vacations can be taken over (vacation task and cost unit configurable via projectforge.timesheet.vacation.taskId/kost2).
-
Statistics: a pill behind the order number in the forecast tables opens the forecast analysis of the order in a dialog, without leaving the table.
-
Lists: the search box gets the focus on page load (not on touch devices).
-
Orders: one contact person plus any number of further contact persons instead of project manager, head of business and key account manager (existing entries are migrated, the old fields remain in the database). Further contact persons have the same access to the order and its invoices as the contact person, and the change mail now also goes to them and to everyone who has edited the order before.
-
Statistics: forecast and contribution margin are calculated much faster; the contribution margin is cached per project.
-
Contribution margin configuration: a cost unit assigned twice is marked as an error.
-
Cost units: the cost type is shown only for customer cost units (4.x and 5.x) in the list and export, as in the monthly report.
-
Problem dashboard: the mail tile shows the outcome of the last mail sent (unknown, OK, send failed or mail server unreachable).
-
Failing calendar subscriptions no longer send a separate mail to the administrator and the feedback address; the error digest reports them.
-
The statistics page moves to /next/finance/statistics and the problem dashboard to /next/problemDashboard; old links are redirected.
-
A cloned time sheet (e.g. dragged in the calendar) keeps its user if the logged-in user may book for them.
-
Search terms are highlighted in list cells with JIRA links, too (order title and reference, task, time sheet, HR planning).
-
The release jar no longer carries stale frontend files of earlier builds.
You can download the latest binaries from GitHub, Sourceforge, or Docker Hub.
ProjectForge 9.0.1 released
2026-10-06, tag 9.0.1-RELEASE Source only
-
Problem dashboard: problems as lead key figure
-
Project status in the mass update
-
Fix: gateway ICS push delivers all calendars
-
Fix: nightly search re-index with inactive plugins
Overview
-
Problem dashboard and error digest: problems instead of occurrences as lead key figure, numbers with thousands separators; subsystem tiles count only open problems.
-
Projects: the status can be changed in the mass update.
-
Gateway: the ICS push delivers all calendars of a user again and generates each team calendar only once per run.
-
Fixes: nightly search re-index no longer fails on tables of inactive plugins, long values no longer break mail tables, no needless error log entries when saving orders.
All changes
-
Problem dashboard and error digest mail: problems instead of occurrences as the lead key figure, so one frequent problem no longer hides all others; numbers with thousands separators.
-
The status of projects can be changed in the mass update.
-
The gateway’s ICS push generates each team calendar only once per run.
-
The gateway’s ICS push delivered only the first calendar of each user.
-
A subsystem tile of the problem dashboard counts only open problems, like the list behind it.
-
Long file names and values no longer push tables beyond the mail card.
-
The nightly re-index of the search no longer fails on tables of non-active plugins.
-
No more needless error log entries when saving orders.
ProjectForge 9.0: a new frontend, Wicket retired, all libraries up to date
2026-10-06, tag 9.0.0-RELEASE Source codeJar (GitHub)Jar (SourceForge)Docker
SHA-256 of projectforge-application-9.0.0.jar: 1289b10a87ef77d5f25ea6e363d809fe894d661a60b8ccca7733450362dce5cb
-
New frontend projectforge-next: all pages migrated, Wicket removed
-
Problem dashboard and error digest mails for operations
-
Charts and key figures: order statistics, contribution margins, forecast
-
E-invoicing (XRechnung, ZUGFeRD) and identity provider integration
-
Robust interfaces to external systems
-
Up-to-date stack: Spring Boot 4.1, Hibernate 7.4, Next.js 16
Overview
-
New frontend projectforge-next: all pages migrated, including calendar, time sheets, order book, invoices, structure tree, access rights, monthly report, liquidity planning and administration. The classic Wicket module has been removed.
-
Problem dashboard: log events are classified and aggregated into problems with a persistent status, with links into the log viewer, a JSON export for an AI-assisted analysis and prioritized error digest mails instead of one mail per error.
-
Charts and key figures: order statistics with budget scenario, contribution margins, forecast, invoicing and net sum charts with a year-earlier comparison, invoicing quota and error figures in the system statistics.
-
Robust interfaces: timeouts, connection pools, bounded sync threads and sync statistics for LDAP, identity provider, iCal, SMS, Sipgate and the gateway; an unreachable system fails fast instead of blocking, failing calendar subscriptions are retried with a growing interval.
-
E-invoicing: XRechnung and ZUGFeRD export of outgoing invoices, PEPPOL validation, cancellation invoices and an e-invoice checker.
-
Identity provider: synchronization of users, groups and passwords with Authentik or Keycloak (module projectforge-idp).
-
Finance: recurring liquidity entries, DATEV import of incoming invoices, salary import, currency conversion with online exchange rates.
-
Technology: Spring Boot 4.1, Spring 7, Hibernate 7.4, Hibernate Search 8.4, Tomcat 11, Kotlin 2.3, Next.js 16, React 19, TanStack Table.
All changes
ProjectForge 9.0 is a major update. The classic Wicket user interface was replaced by projectforge-next, a new frontend built with Next.js and React, and all libraries were brought up to date. It also brings a problem dashboard for operations, many new charts with key figures, robust interfaces to external systems, e-invoicing and an identity provider integration. The development builds leading up to it are listed in the changelog as 8.2 snapshots.
Major update - The classic Wicket user interface is gone: all pages run in projectforge-next, the only login is /next/login. This release sums up all 8.2 snapshot builds.
Before updating - Back up the database; its schema is migrated automatically at the first start.
-
projectforge-next
-
New frontend built with Next.js and React, with light and dark theme, compact top navigation and a quick access search for the menu.
-
Tables with column filters, pinning, reordering, saved layouts and filter favorites; multi selection and mass update for many entities.
-
Login with two-factor authentication and password reset under
/next/login; stay logged in with one token per device.
-
-
E-invoicing
-
XRechnung export and ZUGFeRD PDF with embedded XML, PEPPOL validation, invoice attachments embedded in the export.
-
Cancellation invoices and an e-invoice checker for ZUGFeRD/XRechnung files.
-
-
Identity provider integration (module projectforge-idp): users, groups and passwords synchronized with Authentik or Keycloak, including WLAN password hashes.
-
Problem dashboard
-
Log events are classified at the call site and aggregated in the database into problems with a persistent status.
-
Dashboard with tiles per subsystem, links into the log viewer, search of a problem’s occurrences in the log files and an export as JSON for an AI-assisted analysis.
-
Prioritized error digest mails per audience instead of one mail per error; early digest for new security and data problems.
-
-
Charts and key figures
-
Order statistics with its own filter, charts, data tables, budget scenario and warnings about lost budgets.
-
Contribution margins in the order book, forecast charts, net sum charts of outgoing invoices and invoice statistics with a year-earlier comparison.
-
Invoicing quota as a chart and in My statistics; error figures in the system statistics.
-
-
Recurring series in the liquidity planning.
-
Address import and export as vCard and from free text, with a diff view and a warning about duplicates.
-
Incoming invoices imported from DATEV, with currency and exchange rates looked up online.
-
Gateway for external data transfer with delta sync, CardDAV favorites and a public heartbeat.
-
ICS import of team events with a diff preview.
-
Changelog with news, search and highlighting under
/next/changelog, also in German.
-
All pages migrated to projectforge-next, among them calendar, time sheets, order book, outgoing and incoming invoices, structure tree, access rights, monthly report, liquidity planning, DATEV and salary import, HR planning, Gantt charts and administration; links and bookmarks of the classic pages lead to the new ones.
-
Configurable customer groups and business units as filters for time sheets, invoices, projects and orders.
-
Structure element picker with recently used entries and favorites; JIRA issue links in lists and forms.
-
Server-side paging of order and invoice lists; deleted entries can be restored.
-
Robust interfaces
-
Timeouts and shared connection pools for LDAP, identity provider, iCal, SMS, Sipgate and the gateway, configurable per interface.
-
An unreachable or too slow system fails fast with one warning instead of blocking; sync runs use bounded threads instead of a new thread per trigger.
-
Failing calendar subscriptions are retried with a growing interval and deactivated after 90 days.
-
Sync statistics with timing and counts per run, shown in the system statistics.
-
-
Order book and invoices no longer freeze when two caches refresh at once.
-
Many N+1 query floods removed; large ID lists stay under the database’s bind parameter limit.
-
Subscribed calendars, the MS Project export of Gantt charts, the Word-to-PDF conversion and the LDAP sync repaired.
-
CSRF protection and complete field validation for the REST calls; access checks for all REST endpoints, enforced by an architecture test.
-
Security review of the filter chain: trusted proxies, client IP detection, throttling, safe redirect URLs.
-
2FA required for sensitive pages; deleted groups never grant access rights.
-
Module projectforge-wicket with all classic pages, Wicket-only i18n keys and libraries no longer used.
-
AG Grid (replaced by TanStack Table), react-scripts (replaced by Vite) and JAXB.
-
Legacy XML user preferences are migrated to the JSON store.
-
Spring Boot 4.1, Spring 7, Hibernate 7.4, Hibernate Search 8.4, Tomcat 11.
-
Kotlin 2.3, JUnit 6, Gradle 9.8, Next.js 16, React 19, TanStack Table, Vite and Vitest.
-
Versions are numbered X.Y.Z and built by a release script, the version is set in one place.
You can download the latest binaries from GitHub, Sourceforge, or Docker Hub.
Development snapshots (17)
ProjectForge 8.2 snapshot (2026-10-05)
2026-10-05, snapshot build develop@203115800, changes since e944881b0 Snapshot
-
Wicket removed: last pages migrated to projectforge-next
-
Problem dashboard with prioritized error digest mails
-
Order statistics page with budget scenario
-
Robust interfaces: timeouts, connection pools, sync statistics
-
Spring Boot 4.1, Hibernate 7.4, Kotlin 2.3
Overview
-
Wicket removed: DATEV import, log viewer, HR planning, Gantt charts, calendars, to-dos and more migrated to projectforge-next; the module projectforge-wicket was deleted.
-
Problem dashboard: log events classified and aggregated into problems with a persistent status, JSON export for an AI-assisted analysis, prioritized error digest mails instead of one mail per error.
-
Statistics: order statistics page with filter, charts, budget scenario and lost-budget warnings; invoicing quota in My statistics; contribution margin tab in the order book.
-
Filters: configurable customer groups and business units as filters for time sheets, invoices, projects and orders.
-
Gateway: delta sync with nightly full sync, CardDAV favorites and a public heartbeat.
-
Calendar: ICS import of team events with a diff preview; failing subscriptions are retried less often and deactivated after 90 days.
-
Interfaces: timeouts, connection pools and sync statistics for LDAP, identity provider, iCal, SMS and Sipgate.
-
Fixes: subscribed calendar parsing, MS Project export of Gantt charts, Kotlin scripts in the fat jar, password reset button and mail details.
-
Security and technology: access checks for all new REST endpoints enforced by an architecture test; Spring Boot 4.1, Spring 7, Hibernate 7.4, Tomcat 11, Kotlin 2.3, Gradle 9.8.
All changes
The classic Wicket user interface is gone: the last pages were migrated to projectforge-next and the module projectforge-wicket was deleted.
-
Problem dashboard
-
Log events are classified at the call site and aggregated in the database with a persistent problem status.
-
Dashboard of all problems, with links into the log viewer and an export as JSON for an AI-assisted analysis.
-
Prioritized error digest mails per audience (HTML, new design) instead of one mail per error; early digest for new security and data problems.
-
Error figures in the system statistics.
-
-
Order statistics page with its own filter, favorites, charts, data tables, budget scenario and warnings about lost budgets.
-
Invoicing quota as a tab in My statistics.
-
Gateway: delta sync with a nightly full sync including deletions and CardDAV favorites, public heartbeat, data transfer UI after OAuth2 login.
-
Kost2: shared cost flag, overriding the structure element (also in the mass update).
-
ICS import of team events with a diff preview; download of a team event as ics file; shared subscription dialog for time sheets, holidays and weeks of year.
-
Run several development instances side by side (
bin/pfDev.shslots).
-
Migrated to projectforge-next
-
DATEV import with view log button, readable import log and account/cost unit tooltips.
-
Log viewer, HR planning, HR view, Gantt charts, report objectives, to-dos, IHK plugin and the internal data transfer UI (area page as tabs, files as a sortable table).
-
Calendar and team calendar pages, cost 1/2 Excel export; the remaining gaps against the Wicket pages were closed before their removal.
-
-
Configurable customer groups and business units; time sheets, invoices, projects and orders can be filtered by business unit, customer and project (checklist filters).
-
Order book: contribution margin tab including the year before last.
-
Mass update for to-dos and for the payment type of salaries.
-
Calendar subscriptions that keep failing are retried less often and deactivated after 90 days.
-
Timeouts, connection pools and sync statistics for LDAP, identity provider, iCal, SMS and Sipgate clients.
-
The browser window is named after the page; the open tab of list and report pages is kept in the URL.
-
Shift+click selects a range in attachment lists.
-
Subscribed calendars: DTSTAMP no longer breaks parsing; events without DTEND derive their end from DURATION; one event per holiday and week in the feeds.
-
MS Project export of Gantt charts repaired (mpxj upgraded).
-
Kotlin script classes are resolved in the fat jar again.
-
Password reset button, birthday mail locale and inline logo in mails.
-
The JCR sanity check runs only once per night.
-
Expected client and authentication failures are logged below error level.
-
Access checks for all new REST endpoints, enforced by an architecture test.
-
npm security advisories in next and webapp patched.
-
Module projectforge-wicket including all Wicket pages, about 90 Wicket-only i18n keys and libraries no longer used.
-
Spring Boot 4.1, Spring 7, Hibernate 7.4, Hibernate Search 8.4, Tomcat 11 (via Spring Boot 3.5 as intermediate step).
-
Kotlin 2.3, JUnit 6, Gradle 9.8, kotlin-logging 7.
ProjectForge 8.2 snapshot (2026-10-02)
2026-10-02, snapshot build develop@e944881b0, changes since 1cc142d51 Snapshot
-
Accounts, address campaigns, licenses and customers migrated
-
Invoices: cancellation, Word template choice, LibreOffice PDF
-
Fix: no bookings on ended or deleted projects
-
Fix: Word-to-PDF conversion works again
Overview
-
Migrated to projectforge-next: accounts, address campaigns, license management and customers (Wicket pages removed); customer and free-text customer merged into one field.
-
Invoices: a cancellation sets the original invoice to cancelled; Word template choice for the ZUGFeRD export, PDF rendered with LibreOffice; empty e-invoice fields filled from the account.
-
Order and invoice forms: customer column, highlighted head, tinted position headers, sibling cost units in the cost assignment pickers.
-
Usability: labels and values can be copied; change history shows user and group lists as a diff by name; liquidity planning highlights negative balances.
-
Fixes: no time sheets on ended or deleted projects, cost assignment index of invoices kept, positions sorted by number, forecast charts match the list, Word-to-PDF works again.
-
Security: 2FA required for migrated system and plugin pages and the liquidity series split.
All changes
-
Migrated to projectforge-next
-
Accounts, address campaigns and license management (Wicket pages removed).
-
Customers: Wicket pages removed; customer and free-text customer merged into one field.
-
-
Invoices
-
Cancellation sets the original invoice to cancelled; explained on the button and in the form, with a warning not to change the amounts.
-
Choice of the Word template for the ZUGFeRD export; the invoice PDF is rendered with LibreOffice and the installed fonts.
-
Empty e-invoice fields are filled from the account; cancellation invoices are supported by the Word template.
-
Charts show which list filter they applied; state filters are left out of the year comparison.
-
-
Order and invoice forms: customer column, highlighted head, tinted position headers, sibling cost units in the cost assignment pickers.
-
Labels, select values, pickers and section titles can be copied.
-
Monthly report: the cost type is only shown for customer cost units.
-
Change history shows user and group lists by name as removed/added diff.
-
Liquidity planning: negative balances highlighted, credit/debit bars in green/red.
-
Time sheets can no longer be booked on structure elements of an ended or deleted project.
-
Saving an invoice no longer shifts the index of its cost assignments.
-
Positions of orders, invoices and incoming invoices are sorted by number.
-
Order forecast charts and Excel select exactly the orders of the list.
-
Word-to-PDF conversion works again (OpenPDF dropped).
-
2FA required for the migrated system and plugin pages and the liquidity series split.
ProjectForge 8.2 snapshot (2026-09-30)
2026-09-30, snapshot build develop@1cc142d51, changes since 81c69f854 Snapshot
-
Many more pages migrated to projectforge-next
-
Liquidity planning: recurring series
-
Order book: net sum calculator, forecast charts, over-invoicing flags
-
Fix: N+1 query floods and cache self-deadlocks
Overview
-
Migrated to projectforge-next: monthly employee report, customers, projects, cost 2 units and types, accounting records, salaries, access rights with matrix view, system and plugin administration, liquidity planning.
-
Liquidity planning: recurring series with a scope choice when editing, tri-state paid status and mass update.
-
Order book and invoices: net sum calculator per position, forecast and net sum charts, invoicing quota, to be invoiced limited to this month, over-invoiced orders flagged, cancellation of e-invoices, clone an order as a draft.
-
Usability: structure element picker with recent entries and favorites, compact top navigation with counter badges, deleted references struck through, mass update for cost 1 and cost 2.
-
Fixes: N+1 query floods, cache self-deadlocks in write transactions, issued invoices shown in the order immediately, planned and cancelled invoices no longer count as invoiced.
-
Security: deleted groups never grant access rights; 2FA for the migrated access rights and cost 2 forms.
-
Removed: classic Wicket pages for search, order book, outgoing invoices, monthly report and plugin administration.
All changes
-
Migrated to projectforge-next
-
Monthly employee report with month pager, week drill-downs and compact statistics; normal users can view their own report.
-
Customers, projects, cost 2 units, cost 2 types, accounting records, employee salaries and the salary import.
-
Group/structure element access rights with matrix view, analysis filter for likely erroneous entries, mass update and bulk delete/restore.
-
System administration, plugin administration, system configuration, first-run setup, send SMS, direct call, personal statistics and feedback.
-
The liquidity planning plugin.
-
-
Liquidity planning
-
Recurring series with virtual and materialized occurrences and a deliberate scope choice when editing a series.
-
Tri-state paid status, automatic paid flag and mass update including delete/restore.
-
-
Order book and invoices
-
Fold-out net sum calculator per order position, persisted with its breakdown.
-
Forecast charts tab in the order book, net sum charts for outgoing invoices, invoicing quota chart.
-
To be invoiced only counts what is due this month; filter split into this month and following months.
-
Over-invoiced orders are flagged red; shortfalls of orders marked as fully invoiced are shown.
-
Cancellation of outgoing e-invoices; cancelled invoices are struck through in the list.
-
Clone an order into a fresh editable draft.
-
-
Structure element picker with recently selected structure elements and structure element favorites.
-
Creditor invoices: bank details are filled in from the creditor.
-
Mass update for cost 1 and cost 2.
-
Compact top navigation with counter badges; search moved into the main menu.
-
Deleted or deactivated referenced objects are struck through in list cells.
-
Temporary page size of 10,000 rows for all lists.
-
The link to the classic version is labelled Old version and warns on pages that will be removed.
-
Several N+1 query floods (structure element favorites, access list, customer list, skill matrix, forecast, salary export, order filters).
-
Self-deadlocks of the project/customer caches inside write transactions.
-
An issued invoice is shown in its order immediately, not only after the next cache refresh.
-
Planned and cancelled invoices no longer count as invoiced for order positions.
-
Change history shows time-of-day values in the user’s time zone.
-
Cost assignments of incoming invoices are exported again.
-
Expand/collapse of the classic structure tree restored.
-
Deleted groups never grant access rights.
-
2FA required for the migrated access rights, cost 2 and cost 2 type forms.
-
Classic Wicket pages for search, order book, outgoing invoices, monthly report and plugin administration.
-
Legacy XML user preferences are migrated to the JSON store.
ProjectForge 8.2 snapshot (2026-09-13)
2026-09-13, snapshot build develop@81c69f854, changes since 0633fde56 Snapshot
-
Global search migrated to projectforge-next
-
Mass update for incoming invoices and time sheets
-
Time sheet and structure tree filters by Kost2
-
Fix: time sheet favorites slot collision
Overview
-
Search: global full-text search migrated to projectforge-next, results as collapsible tiles.
-
Mass update: for incoming invoices and time sheets, with live selection statistics and a server-side list of changes before writing.
-
Time sheets and structure tree: Kost2 and Kost2 type filters, PDF export options, structure tree filter by Kost2 number with wildcards.
-
Structure elements: max hours has priority switch; an explicit child status overrides an inherited one.
-
Further improvements: SEPA transfer download for creditor invoices, weekly hours in the employee list, gross working time in the calendar, tooltips on touch devices, start page redirects to the new calendar.
-
Fixes: time sheet favorites slot collision, exact Kost2 in the monthly report drill-down, deleted invoice positions excluded from sums, correct column sorting.
-
Technology: faster history value search with pg_trgm indexes, batch fetching for mass reindexing.
All changes
-
Global full-text search migrated to projectforge-next, results as collapsible tiles.
-
Mass update in projectforge-next
-
For incoming invoices and time sheets (structure element, Kost2, tag), with live selection statistics.
-
Changes are listed server-side before they are written; text actions picked from a dropdown.
-
-
Time sheet list: Kost2 filter with autocomplete, Kost2 type filter, PDF export options dialog with per-entry duration.
-
Structure tree can be filtered by Kost2 number (wildcards supported).
-
Structure elements: max hours has priority switch overriding ordered person days; explicit status of a child structure element overrides an inherited one.
-
Creditor invoices: SEPA bank transfer download.
-
Employee list: weekly hours column and filtered Excel export.
-
Calendar day/week statistics show the gross working time.
-
Tooltips reachable on iOS and other touch devices; list tables adapt to narrow viewports.
-
Start page redirects to the new calendar, including bookmarked links.
-
Time sheet favorites: collision of filter and template slots resolved.
-
Monthly report Kost2 drill-down uses the exact Kost2.
-
Deleted invoice positions are excluded from cached list sums.
-
Kost1/Kost2 and user columns sort correctly everywhere.
-
History value search accelerated with pg_trgm indexes; unused Lucene index of history attributes removed.
-
Batch fetching of lazy associations during mass reindexing.
-
npm audit vulnerabilities resolved in next and webapp.
ProjectForge 8.2 snapshot (2026-09-01)
2026-09-01, snapshot build develop@0633fde56, changes since e8819bffc Snapshot
-
Invoices, structure tree, calendar and time sheets migrated
-
Multi selection, mass update and period filters in lists
-
Light/dark theme and JIRA issue links
-
Fix: order book and invoices no longer freeze
Overview
-
Migrated to projectforge-next: outgoing and creditor invoices, structure tree and wizard, groups, calendar with team events, time sheet list and form.
-
Lists and forms: multi selection with mass update for invoices, period filters with paging arrows, server-side paging of order and invoice lists, restore of deleted entries.
-
Usability: light/dark theme toggle, JIRA issue links in lists and forms, recently used menu entries and quick access search for the menu.
-
Time sheets: overlapping time sheets allowed for shared cost elements.
-
Invoices: invoice statistics with a year-earlier comparison.
-
Fixes: order book and invoices no longer freeze on concurrent cache refreshes, many N+1 query floods removed, large ID lists batched, project managers can save orders again, invoiced amounts survive a restart.
-
Security and Docker: safe redirect URLs, 2FA again when saving orders and cost centres; Docker container buildable and startable again.
All changes
-
Migrated to projectforge-next
-
Outgoing invoices with clone, Word and e-invoice export, cost assignments and attachments; creditor invoices with CSV import.
-
Structure tree (tree and list perspective, keyboard navigation), structure element edit page and structure wizard.
-
Groups, including member mail addresses and LDAP information.
-
Calendar with toolbar, favorites, settings, drag and drop, jump to date; team events with reminders, recurrence and series modification.
-
Time sheet list and edit form with recent entries, templates, location suggestions, consumption bar and PDF/Excel export.
-
-
Lists and forms
-
Multi selection with an explicit selection mode, mass update for invoices.
-
Period filters (month, term, year to date) with paging arrows; date pickers reaching beyond the current year.
-
Server-side paging of order and invoice lists; generic sorting by computed columns.
-
Deleted entries can be restored; links of moved pages lead to the new pages.
-
-
JIRA issue links in structure element, structure tree, order and time sheet lists and forms.
-
Light/dark theme toggle, logos adapted to dark mode.
-
Overlapping time sheets allowed for shared cost elements.
-
Recently used menu entries, shared by all frontends; quick access search for the menu.
-
Invoice statistics with a year-earlier comparison.
-
Order book and invoices no longer freeze when two caches refresh at once (cross-lock deadlock); invoice cache no longer refreshes inside a write transaction.
-
Many N+1 query floods (order list, invoice lists, data transfer audit job, vacation events, employees, books, groups).
-
Large ID lists are batched to stay under the database’s bind parameter limit.
-
Project managers can save orders in the new frontend again.
-
Customer name search finds words inside the name.
-
Invoiced amounts survive a restart.
-
Redirect URLs can no longer smuggle in a foreign host.
-
Saving orders and cost centres asks for a second factor again.
-
Docker container is buildable and startable again; step by step guide for a test instance.
ProjectForge 8.2 snapshot (2026-08-16)
2026-08-16, snapshot build develop@e8819bffc, changes since 0095d878f Snapshot
-
First snapshot with projectforge-next under
/next -
New login with 2FA under
/next/login -
Order book, books and Kost1 in the new frontend
-
Security: CSRF protection, stay-logged-in tokens per device
Overview
-
projectforge-next: the new frontend runs side by side with the existing one under
/next; every migrated page links back to its classic counterpart. -
Login: login, two-factor authentication and password reset;
/next/loginis the only login of the application. -
Tables: column reordering and pinning, persisted layouts, filter panel, filter pills and saved filter favorites.
-
Migrated pages: books, Kost1 and the order book with positions, payment schedule, statistics and exports; attachments and change history as a tab.
-
Forecast and orders: configurable distribution of unused budget, run-rate extrapolation, probability of occurrence shown.
-
Further additions: reindexing as a cancellable job, clone button for Merlin templates, response compression.
-
Fixes: regressions after the TanStack migration, invoiced order sums no longer 0, identity provider ID kept on user edit, history value search, order notification mails.
-
Security: stay logged in with one token per device, filter chain review, CSRF protection and full field validation for REST writes.
All changes
First snapshot with projectforge-next, the new frontend that runs side by side with the existing one under /next.
-
projectforge-next
-
Login, two-factor authentication and password reset;
/next/loginis the only login of the application. -
Tables with column reordering, pinning, persisted layouts, filter panel, removable filter pills and saved filter favorites.
-
Pages declared from the backend’s entity metadata; field rules generated from the entities instead of being repeated.
-
Books, Kost1 and the order book (list, edit page with positions and payment schedule, statistics, Excel and forecast exports).
-
Attachments with upload progress, multi selection, ZIP download; change history as its own tab.
-
Every migrated page keeps a link back to its classic counterpart.
-
-
Reindexing as a cancellable job with progress indicator.
-
Clone button for Merlin templates.
-
Forecast: configurable distribution of unused budget, run-rate extrapolation for call-off and fixed-rate orders.
-
Order: probability of occurrence shown; positions marked red only when really due for invoicing.
-
Numeric columns right-aligned, time sheet periods sorted chronologically.
-
Response compression enabled.
-
File transfer, row selection and structure tree regressions after the TanStack migration.
-
Identity provider ID no longer cleared on user edit.
-
LDAP move/rename of legacy cn-based entries.
-
Invoiced sums of orders no longer 0 after concurrent cache refreshes.
-
Login redirect no longer overwrites the return URL.
-
Search for a value in the change history works again.
-
Order notification mails no longer break saving the order.
-
Stay logged in: one token per device, throttling, cookie only after 2FA, purge job.
-
Security review of the filter chain: trusted proxies, client IP detection, throttling of public key endpoints, unbiased tokens.
-
CSRF protection for the REST calls of the new frontend; REST writes validate all fields including string lengths.
-
The Spring profile is no longer lost via the generated environment.sh.
ProjectForge 8.2 snapshot (2026-08-02)
2026-08-02, snapshot build develop@0095d878f, changes since f8aab28cd Snapshot
-
Tables moved from AG Grid to TanStack
-
Forecast export compares with the year before last
-
Fix: corrupt downloads of large files
-
Fix: LDAP sync no longer blocks
Overview
-
Tables: moved to TanStack React Table, with typed column filters, date range filters, keyboard multi selection, column reordering and pinning.
-
Forecast and structure elements: forecast export compares with the year before last; structure element titles up to 100 characters.
-
Fixes: attachments of outgoing invoices, corrupt downloads of large files, forecast month count, LDAP sync with externally moved entries, Merlin PDF fonts, CardDAV PUT requests on newer macOS.
-
Admin and security: action to reset the identity provider password sync of all users; high-severity npm vulnerabilities fixed.
All changes
The table framework moved from AG Grid to TanStack React Table.
-
Tables (TanStack): typed column filters with active-filter badge, date range filters, keyboard multi selection, column reordering, left pinning and row click actions.
-
Forecast export: comparison with the year before last.
-
Structure elements: title length increased from 40 to 100 characters.
-
Outgoing invoices: attachments on the edit page and attachment column in the list; attachment counter updated after PDF upload/deletion.
-
Corrupt downloads of large files.
-
Forecast: number of months for invoicing in the following month.
-
LDAP sync no longer blocks on entries moved externally.
-
Merlin PDF conversion handles Identity-H encoding for unregistered fonts.
-
CardDAV: PUT requests bypassed the filter on newer macOS versions.
-
Action for resetting the identity provider password synchronization of all users.
-
High-severity npm vulnerabilities in projectforge-webapp fixed.
ProjectForge 8.2 snapshot (2026-06-30)
2026-06-30, snapshot build develop@f8aab28cd, changes since 8f568604c Snapshot
-
Personal menu customization reworked
-
Fixes: plugin menu entries, multi-file uploads, invoice export
-
npm security updates
Overview
-
Menu: customizing the personal menu reworked.
-
Fixes: WLAN password hash migration covers all users, plugin menu entries survive a configuration reload, uploads with many files, company name in the invoice export taken from the account.
-
Security: npm vulnerabilities in projectforge-webapp fixed.
All changes
-
Customizing the personal menu reworked.
-
WLAN password hash migration includes users without a recorded password change.
-
Plugin menu entries no longer vanish after reloading the configuration.
-
Multipart uploads with many files (Tomcat maxPartCount configured).
-
Invoice export takes the company name from the invoice’s account.
-
npm vulnerabilities in projectforge-webapp fixed; esbuild, Vite, vitest and others updated.
ProjectForge 8.2 snapshot (2026-05-31)
2026-05-31, snapshot build develop@8f568604c, changes since c7b37dd27 Snapshot
-
E-invoicing: XRechnung and ZUGFeRD export
-
E-invoice checker for ZUGFeRD/XRechnung files
-
Frontend build moved to Vite
Overview
-
E-invoicing: XRechnung export and ZUGFeRD PDF with embedded XML, e-invoice fields in a validated dialog, attachments embedded, e-invoice fields moved to the account.
-
E-invoice checker: displays and validates ZUGFeRD and XRechnung files.
-
Invoices, orders and forecast: autocompletion of the customer text; forecast template with status column and remaining budget spread over the remaining months.
-
Fixes: NPE when cloning outgoing invoices, SEPA XML namespaces.
-
Technology: frontend build moved from react-scripts to Vite, tests from Jest to Vitest.
All changes
-
E-invoicing (XRechnung / ZUGFeRD)
-
XRechnung export of outgoing invoices and ZUGFeRD PDF export with embedded XML.
-
E-invoice fields in a dialog with validation; PEPPOL validation warnings resolved.
-
Invoice attachments embedded in the e-invoice export; uploaded invoice PDF as alternative to the DOCX conversion.
-
E-invoice checker for displaying and validating ZUGFeRD/XRechnung files.
-
E-invoice fields moved from the customer to the account, plus contact person and bank account name.
-
-
Autocompletion of the customer text in invoices and orders.
-
Forecast template: status column; remaining budget distributed over the remaining months.
-
NPE when cloning outgoing invoices.
-
SEPA XML namespace handling with Spring Boot 3.4.
-
Frontend build migrated from react-scripts to Vite, tests from Jest to Vitest.
ProjectForge 8.2 snapshot (2026-04-30)
2026-04-30, snapshot build develop@c7b37dd27, changes since aa37d14c1 Snapshot
-
Authentik support (module projectforge-idp)
-
React 19 and Spring Boot 3.4.13
-
Fix: LDAP uid rename crash
Overview
-
Identity provider: module projectforge-keycloak refactored to projectforge-idp with Authentik support; WLAN password hashes migrated from LDAP to Authentik.
-
Fixes: LDAP uid rename crash, autocompletion dropdowns and recurrence editor after the React 19 migration.
-
Technology: React 19 with all frontend dependencies, Spring Boot 3.4.13.
All changes
-
Authentik support: module projectforge-keycloak refactored to projectforge-idp; WLAN password hashes migrated from LDAP to Authentik.
-
LDAP uid rename crash.
-
Autocompletion dropdowns and the recurrence editor after the React 19 migration.
-
React 18 → 19 with all frontend dependencies.
-
Spring Boot 3.4.13 (Spring Framework 6.2.15); Jackson/npm dependency conflicts resolved.
ProjectForge 8.2 snapshot (2026-03-31)
2026-03-31, snapshot build develop@aa37d14c1, changes since 13abcce44 Snapshot
-
Keycloak integration (module projectforge-keycloak)
-
Script access to order book snapshots and employee data
-
Fixes: Keycloak sync, forecast export, calendar
Overview
-
Keycloak: new module with a login handler for a stepwise introduction, bidirectional attribute and group mappings, WLAN password sync on password change.
-
Scripting: access to order book snapshots and to employee data including monthly reports.
-
Fixes: Keycloak sync issues, forecast export, calendar navigation, Wicket session user mismatch forces a new login, structure tree concurrency.
-
Security: system statistics show reduced information for non-admins.
All changes
-
Keycloak integration
-
New module projectforge-keycloak, with a login handler for a stepwise introduction.
-
Bidirectional, configurable attribute mappings; group attributes synchronized in both directions.
-
WLAN password (NT hash) synchronized on password change; locale in BCP 47 format.
-
-
Scripting
-
Script access to order book snapshots (also as uncompressed JSON).
-
Script access to employee data including monthly reports.
-
-
Keycloak sync: false positive updates, membership sync, invalid characters in names, missing mail addresses.
-
Forecast export: NPE and snapshot data.
-
Calendar navigation and layout.
-
Wicket session: a user mismatch is detected, logged and forces a new login; breadcrumbs create fresh page instances.
-
Concurrency and defensive checks in the structure tree hierarchy.
-
System statistics show reduced information for non-admins.
ProjectForge 8.2 snapshot (2026-01-31)
2026-01-31, snapshot build develop@13abcce44, changes since 0d84c2c74 Snapshot
-
Encrypted and flat export ZIP archives
-
New example scripts
-
Kost2 inherits its status from the project
Overview
-
Exports: ZIP archives with a flat structure and ZIP encryption, also for scripts.
-
Scripts: new examples for a yearly time sheet export and an SQL dump export.
-
Kost2: accounting records support Kost2 as string; Kost2 inherits its status virtually from the project.
-
Technology: AG Grid 34, Wicket 10.8, Podman instead of Docker for the test database.
All changes
-
Export zip archives support a flat structure and zip encryption (also for scripts).
-
New example scripts: yearly time sheet export, SQL dump export.
-
Accounting records support Kost2 as string.
-
Kost2 inherits its status virtually from the project.
-
AG Grid 34, Wicket 10.8.
-
Podman instead of Docker for the test database.
ProjectForge 8.2 snapshot (2025-11-30)
2025-11-30, snapshot build develop@0d84c2c74, changes since fec48a9e1 Snapshot
-
Address import: delete, restore and forced delete
-
Fix: endless LDAP synchronization
Overview
-
Addresses: the address import handles deletion, restoring and forced deletion; the Excel export of address campaigns only for authorized users.
-
Fix: endless LDAP synchronization caused by empty strings.
All changes
-
Address import handles deletion, restoring and forced deletion.
-
Address campaigns: Excel export button only for authorized users.
-
Endless LDAP synchronization (empty strings normalized to null).
ProjectForge 8.2 snapshot (2025-11-02)
2025-11-02, snapshot build develop@fec48a9e1, changes since 5094a1586 Snapshot
-
vCard import/export and free-text address import
-
Column settings saved automatically
-
Fixes: spinner after 2FA, LDAP and Sipgate sync
Overview
-
Addresses: vCard 3.0/4.0 import and export with contact images, free-text import, import reconciler with diff view, duplicate warning.
-
Tables: column settings saved automatically with a reset to server defaults; auto scrolling.
-
Fixes: endless spinner after two-factor authentication, LDAP sync detected all users as modified, Sipgate sync.
All changes
-
Address import/export
-
vCard import and export (vCard 3.0 and 4.0) including contact images, iOS compatible.
-
Free-text import: addresses pasted as unstructured text are parsed (names, titles, salutations, addresses, phone numbers).
-
Import reconciler for several vCards in one file, with a diff view of business, private and postal addresses.
-
Warning about duplicates when creating new addresses; export of a single address as vCard.
-
-
Column settings (filter, sorting, order, widths) are saved automatically, with a reset to the server defaults.
-
Tables: auto scrolling.
-
Endless spinner after a successful two-factor authentication.
-
LDAP sync detected all users as modified.
-
Sipgate sync.
ProjectForge 8.2 snapshot (2025-10-21)
2025-10-21, snapshot build develop@5094a1586, changes since 348568c54 Snapshot
-
Address list on the new table
-
Table improvements: pinned columns, resizing, multi-line cells
-
Address campaigns redesigned
Overview
-
Addresses: address list on the new table with multi selection.
-
Tables: pinned columns, configurable resizing, reset of column settings, multi-line cells, pagination info on top.
-
Address campaigns: edit addresses in a dialog from the campaign list, invalid addresses highlighted, filter for own entries.
-
Fixes and technology: wildcard parameter of the like filter, various table fixes; JAXB removed.
All changes
-
Address list migrated to the new table with multi selection.
-
Tables: pinned columns, configurable resizing, reset of the user’s column settings, multi-line cells, pagination info on top.
-
Address campaigns redesigned: edit addresses from the campaign list in a dialog, invalid addresses highlighted, filter for own entries.
-
QueryFilter.like ignored the auto wildcard parameter.
-
Various table fixes.
-
JAXB removed (SEPA XML generator migrated); MarkdownBuilder escapes its input.
ProjectForge 8.2 snapshot (2025-10-05)
2025-10-05, snapshot build develop@348568c54, changes since f8e0e8f67 Snapshot
-
DATEV import of incoming invoices
-
Currencies with online exchange rates
-
Survey plugin improved
Overview
-
Incoming invoices: import from DATEV, with a currency.
-
Currency conversion: exchange rates with valid-from date; the matching rate is looked up online and proposed.
-
Survey plugin: better reminder mails, missing answers fixed.
All changes
-
Incoming invoices can be imported from DATEV and carry a currency.
-
Currency conversion: exchange rates with valid-from date; the matching rate is looked up online and proposed.
-
Survey plugin: reminder mails improved, missing answers fixed.
ProjectForge 8.2 snapshot (2025-09-09)
2025-09-09, snapshot build develop@f8e0e8f67, changes since d3d8850e1 Snapshot
-
Search for ticket keys works again
-
Fix: missing search fields in classic lists
Overview
-
Search: ticket keys (e.g.
ABC-1234) found in time sheets and structure elements again; cost search improved. -
Fix: classic list views show all search fields again, e.g. the Kost2 number in time sheets.
All changes
-
Search for ticket keys (e.g.
ABC-1234) in time sheets and structure elements works again. -
Cost search improved.
-
Classic list views showed not all search fields (e.g. Kost2 number in time sheets).