- PHP 91.4%
- JavaScript 7.4%
- CSS 0.8%
- Shell 0.3%
Runs every minute from its own crontab line. Detects new tickets, client replies and assignment changes; batches them to the content-blind relay; prunes dead registrations from the relay's 410 feedback. Lives in custom/ rather than cron/custom/ because upstream's .gitignore excludes cron/custom/*, and this fork doesn't edit core files — including that one. Detection is by polling persisted prior state, not hooks: customAction is process-level and isn't emitted by every mutation path, so only a state comparison covers all of them without touching core. That covers every write PATH, though transitions are sampled at minute boundaries — A→B→A inside one interval is invisible, which is fine for a hint. The subtleties worth knowing, most of them found in review: - assign_seen is an explicit flag, not "a state row exists". The reply stream writes to the same table, so keying off row existence fired a bogus "assigned to you" for any ticket whose client replied before its first assignment sweep. - The assignment sweep is resumable: keyset position AND the frozen time window are persisted. Restarting the keyset each run starved the tail — on first deployment the window is open, so processed tickets still qualify and a large instance would rescan the same prefix forever. Completion claims the time the SWEEP began, not the run's. - push_send reports a mid-send bailout and every caller then refuses to advance its cursor, so a partially sent event is retried. Duplicates are within the documented tolerance; dropping a row silently is not. - A 410 with no usable timestamp is ignored rather than treated as "now", which would delete a registration refreshed since APNs invalidated it. - Replies page over every id in the window (not just qualifying ones) or a run of agent replies stalls the cursor forever. Delivery stays best-effort by design: cursors advance past failed relay calls, because a push is a hint and the app's own polling is the truth. --dry-run does everything except call the relay, so the whole pipeline is exercisable before an APNs key exists. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
||
|---|---|---|
| .github | ||
| admin | ||
| agent | ||
| api | ||
| client | ||
| cron | ||
| css | ||
| custom | ||
| docs | ||
| guest | ||
| includes | ||
| js | ||
| libs | ||
| modals | ||
| post | ||
| scripts | ||
| setup | ||
| uploads | ||
| .gitignore | ||
| .htaccess | ||
| CHANGELOG-FORK.md | ||
| CHANGELOG.md | ||
| CODE_OF_CONDUCT.md | ||
| CONTRIBUTING.md | ||
| db.sql | ||
| favicon.ico | ||
| FORK-WORKFLOW.md | ||
| functions.php | ||
| index.php | ||
| keepalive.php | ||
| LICENSE | ||
| login.php | ||
| README.md | ||
| robots.txt | ||
| SECURITY.md | ||
ITFlow
IT documentation, ticketing and accounting system for small MSPs.
View demo
Username: demo@demo.com | Password: demo
About
·
Docs
·
Forum
·
Report Bug
·
Request Feature
·
Security
About
A comprehensive, free & open-source documentation, ticket management, and accounting platform.
The Problem
- You're a small but busy managed service provider with 101 things to do. Information about your clients is unorganised, unstructured and outdated.
- For some work, you seem to spend longer looking for the relevant documentation than actually working on the issue/project.
- On top of the technical day to day, you also have to take care of the financial side of the business - consistent pricing, quotes/invoicing, and accounting.
The Solution: ITFlow
- ITFlow consolidates common MSP needs (documentation, ticketing and billing) into one unified system.
Getting Started
Self Hosting
- The best installation method is to use the install script on Ubuntu/Debian. A video walk through is available here.
wget -O itflow_install.sh https://github.com/itflow-org/itflow-install-script/raw/main/itflow_install.sh
bash itflow_install.sh
- Other manual installation methods are available in the docs.
Managed Hosting
- If you'd prefer, we can host ITFlow for you.
Key Features
- Client documentation - assets, contacts, domains, docs, files, passwords, and more
- Accounting / Billing - finance dashboard, quotes, invoices, accounting, expenses, etc
- Client Portal - self service quote/invoice/ticket management for clients
- Alerting - account balance, invoices, domain/SSL renewals
- Completely free & open-source alternative to ITGlue and Hudu
Roadmap / Future to-do
We track the implementation of confirmed features and bugs via TaskFlow. Use the forum to request features or raise bug reports.
Support & Contributions
Forum
For help using ITFlow, bugs, feature requests, and general ideas / discussions please use the community forum.
Contributing
We have temporarily paused PRs from the community.
Contributors
Supporters
We’re incredibly grateful to the organizations and individuals who support the project - a big thank you to:
- CompuMatter
- F1 for HELP
- digiBandit
- JetBrains (PhpStorm)
License
ITFlow is distributed "as is" under the GPL License, WITHOUT WARRANTY OF ANY KIND. See LICENSE for details.
Security
- As of 2025, we now have a stable release of the project.
- Whilst we are confident in the safety of the code, no system is risk-free. Nearly all software has bugs. Use your best judgement before storing highly confidential information in ITFlow.
- If you have a security concern, privately report it here.
