Describe the bug
Exporting a note to PDF in CodiMD 2.6.0 crashes PhantomJS whenever the note contains certain emoji characters, which restarts the whole container.
To Reproduce
- Create or edit a note.
- Insert any emoji (e.g. 😀).
- Click Export → PDF.
- The request hangs and the container restarts.
Expected behavior
- A PDF should be generated successfully.
- The service should remain online.
Actual behavior
- PDF generation fails.
- docker logs show PhantomJS crashing with SIGFPE.
- The CodiMD container restarts automatically.
Environment
| Item |
Value |
| CodiMD ver. |
2.6.0 |
| Deployment |
docker-compose |
| Node ver. |
16.20.2 (image default) |
| Base OS |
Debian Buster |
| PDF engine |
markdown-pdf + PhantomJS |
docker-compose excerpt (masked)
click to expand
services:
codimd:
image: <PRIVATE_REGISTRY>/hackmdio/hackmd:2.6.0
environment:
CMD_URL_PATH: codimd
CMD_DOMAIN: <YOUR_DOMAIN>
CMD_PROTOCOL_USESSL: "true"
QT_QPA_PLATFORM: ""
# Database
CMD_DB_URL: postgres://codimd:<MASKED_PW>@codimd_db/codimd
# Misc
CMD_EMAIL: "false"
CMD_PLANTUML_SERVER: https://<YOUR_DOMAIN>/plantuml
CMD_ALLOW_ANONYMOUS: "false"
CMD_ALLOW_ANONYMOUS_EDITS: "false"
CMD_CSP_ENABLE: "false"
Logs (full excerpt)
2025-07-09T06:13:04.445Z info: <MASKED_IP> - - [09/Jul/2025:06:13:04 +0000] "GET /me HTTP/1.1" 304 - "https://<YOUR_DOMAIN>/codimd/ixLMZtInSNiOnrbOkQ-Q_w" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Edg/138.0.0.0"
2025-07-09T06:13:06.517Z info: <MASKED_IP> - - [09/Jul/2025:06:13:06 +0000] "GET /uploads/upload_845dbee74d2337302b91fb126a4691db.png HTTP/1.1" 200 32405 "https://<YOUR_DOMAIN>/codimd/ixLMZtInSNiOnrbOkQ-Q_w" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Edg/138.0.0.0"
2025-07-09T06:13:20.968Z info: deserializeUser: c35f23dd-2732-46b7-9283-15b14eac234b
2025-07-09T06:13:21.478Z error: uncaughtException: Command failed: /home/hackmd/app/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs /home/hackmd/app/node_modules/markdown-pdf/phantom/render.js /tmp/tmp-<MASKED>.html /tmp/tmp-<MASKED>.pdf /home/hackmd/app /home/hackmd/app/node_modules/markdown-pdf/runnings.js /home/hackmd/app/node_modules/markdown-pdf/css/pdf.css /home/hackmd/app/node_modules/highlight.js/styles/github-gist.css A4 portrait 2cm 0 10000
PhantomJS has crashed. Please read the bug reporting guide at
<http://phantomjs.org/bug-reporting.html> and file a bug report.
Error: Command failed: /home/hackmd/app/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs /home/hackmd/app/node_modules/markdown-pdf/phantom/render.js /tmp/tmp-<MASKED>.html /tmp/tmp-<MASKED>.pdf /home/hackmd/app /home/hackmd/app/node_modules/markdown-pdf/runnings.js /home/hackmd/app/node_modules/markdown-pdf/css/pdf.css /home/hackmd/app/node_modules/highlight.js/styles/github-gist.css A4 portrait 2cm 0 10000
PhantomJS has crashed. Please read the bug reporting guide at
<http://phantomjs.org/bug-reporting.html> and file a bug report.
at ChildProcess.exithandler (node:child_process:402:12)
at ChildProcess.emit (node:events:513:28)
at maybeClose (node:internal/child_process:1100:16)
at Socket.<anonymous> (node:internal/child_process:458:11)
at Socket.emit (node:events:513:28)
at Pipe.<anonymous> (node:net:301:12)
2025-07-09T06:13:21.481Z error: Process will exit now.
Info: try to connect to tcp://codimd_db in port 5432
2025/07/09 06:13:22 portchecker.go:56: dial tcp codimd_db:5432: connect: connection success
Possible cause / context
- Matches Rendering Emojis hajareshyam/pdf-creator-node#45 — PhantomJS cannot render certain emoji/Unicode glyphs.
- Removing all emoji lets the export succeed → strong evidence of an encoding issue.
- PhantomJS is unmaintained; CodiMD relies on it via markdown-pdf.
Potential solutions
- Upgrade to CodiMD 3.x (if it has moved to a Chromium/Puppeteer backend).
- Replace PhantomJS with Puppeteer/Playwright in a custom build.
- Test latest phantomjs-prebuilt patch to confirm whether the crash persists.
Help wanted
- Can maintainers reproduce this crash with an emoji-containing note?
- Is there an official plan to migrate away from PhantomJS?
- Any patch or workaround would be greatly appreciated.
Reactions are currently unavailable
Describe the bug
Exporting a note to PDF in CodiMD 2.6.0 crashes PhantomJS whenever the note contains certain emoji characters, which restarts the whole container.
To Reproduce
Expected behavior
Actual behavior
Environment
docker-compose excerpt (masked)
click to expandLogs (full excerpt)
2025-07-09T06:13:04.445Z info: <MASKED_IP> - - [09/Jul/2025:06:13:04 +0000] "GET /me HTTP/1.1" 304 - "https://<YOUR_DOMAIN>/codimd/ixLMZtInSNiOnrbOkQ-Q_w" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Edg/138.0.0.0" 2025-07-09T06:13:06.517Z info: <MASKED_IP> - - [09/Jul/2025:06:13:06 +0000] "GET /uploads/upload_845dbee74d2337302b91fb126a4691db.png HTTP/1.1" 200 32405 "https://<YOUR_DOMAIN>/codimd/ixLMZtInSNiOnrbOkQ-Q_w" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Edg/138.0.0.0" 2025-07-09T06:13:20.968Z info: deserializeUser: c35f23dd-2732-46b7-9283-15b14eac234b 2025-07-09T06:13:21.478Z error: uncaughtException: Command failed: /home/hackmd/app/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs /home/hackmd/app/node_modules/markdown-pdf/phantom/render.js /tmp/tmp-<MASKED>.html /tmp/tmp-<MASKED>.pdf /home/hackmd/app /home/hackmd/app/node_modules/markdown-pdf/runnings.js /home/hackmd/app/node_modules/markdown-pdf/css/pdf.css /home/hackmd/app/node_modules/highlight.js/styles/github-gist.css A4 portrait 2cm 0 10000 PhantomJS has crashed. Please read the bug reporting guide at <http://phantomjs.org/bug-reporting.html> and file a bug report. Error: Command failed: /home/hackmd/app/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs /home/hackmd/app/node_modules/markdown-pdf/phantom/render.js /tmp/tmp-<MASKED>.html /tmp/tmp-<MASKED>.pdf /home/hackmd/app /home/hackmd/app/node_modules/markdown-pdf/runnings.js /home/hackmd/app/node_modules/markdown-pdf/css/pdf.css /home/hackmd/app/node_modules/highlight.js/styles/github-gist.css A4 portrait 2cm 0 10000 PhantomJS has crashed. Please read the bug reporting guide at <http://phantomjs.org/bug-reporting.html> and file a bug report. at ChildProcess.exithandler (node:child_process:402:12) at ChildProcess.emit (node:events:513:28) at maybeClose (node:internal/child_process:1100:16) at Socket.<anonymous> (node:internal/child_process:458:11) at Socket.emit (node:events:513:28) at Pipe.<anonymous> (node:net:301:12) 2025-07-09T06:13:21.481Z error: Process will exit now. Info: try to connect to tcp://codimd_db in port 5432 2025/07/09 06:13:22 portchecker.go:56: dial tcp codimd_db:5432: connect: connection successPossible cause / context
Potential solutions
Help wanted