A few weeks ago I started building MyPDFLabs, a free set of online PDF tools. It's live now, and I'd like to share what it does, how it's built, and what I learned about PDFs along the way. I'd also really like your feedback.
Why I built it
Every time I needed to rotate, merge or sign a PDF, the same things got in the way: a sign-up wall, a watermark on the result, or a small file size limit. I wanted a tool where you open the page, upload the file and get the result.
So I built one.
What it does
MyPDFLabs has around 26 tools in the browser:
- Edit and create PDFs: change text, add images, shapes and signatures
- Organize: merge, split and extract pages, rotate, delete and reorder pages, add page numbers
- Convert: PDF to Word, Excel and images, and Word, Excel, PowerPoint and images to PDF
- Protect and clean up: compress, watermark and stamp, redact, encrypt and unlock, flatten
- Sign and fill forms
- OCR for scanned documents
- Chat with PDF, to ask questions about a document
- An ATS-friendly resume builder with 50+ templates
The core tools need no registration and add no watermarks. Files up to 500MB are supported, and uploaded files are deleted automatically after processing.
The stack
- Frontend: Next.js (React)
- Backend: Python, for the heavy PDF processing
- Hosting: a VPS I manage myself
I split it this way because the browser is good for the interface and quick interactions, while Python has strong libraries for the real PDF work.
What makes PDF tools tricky
If you've never built with PDFs, here's what surprised me.
A PDF isn't a document like Word is. It describes where to draw each piece of text on a page. There are no paragraphs that reflow. That's why editing a sentence is much harder than it looks, because the file has no idea the sentence exists.
Fonts are a common problem. If the original font isn't embedded or available, text can shift when you edit it. Checking the result after saving matters.
Long documents need care. An editor that works for a 5-page file can struggle with a 200-page one. I test mine with large PDFs because pages and thumbnails have to load without freezing the browser.
Scanned PDFs are just pictures. To edit or search them, you first need OCR to turn the image into real text.
Privacy is a design decision, not a feature. People upload contracts, IDs and CVs. That's why uploaded files get deleted after processing, and why I don't ask for an account.
What I'd like feedback on
The site is still new, so I'd love honest opinions:
- Which tool would you use most?
- Is anything confusing, slow or broken?
- What PDF tool is missing?
- If you've built PDF tooling yourself, how did you handle text editing and fonts? I'd like to compare notes.
Try it
You can find everything at mypdflabs.com. If you only want to try one thing, open the PDF editor.
Thanks for reading, and I'll reply to every comment.
Top comments (2)
Since redaction is on the list, one test I'd add: after redacting, extract the text from the output file and assert the redacted words are gone. A black rectangle drawn over text leaves the text in the file, and anyone can copy it out, which is the classic way redacted PDFs leak. PyMuPDF, for example, has redaction annotations that remove the content underneath when you apply them.
A second small trust win: say exactly when uploads are deleted, for example "within an hour of processing", and make sure the code enforces that number, because people uploading IDs read that line closely. Which library does your redact tool use today?
Thanks so much for this feedback — this is spot on!
1. Redaction and PyMuPDF
We're using PyMuPDF (
fitz) on the backend, specificallypage.add_redact_annot()followed bypage.apply_redactions(), rather than simply drawing black rectangles over text.Your suggestion to test the output by extracting text and asserting that the redacted content is gone is excellent. I'll make sure we have regression tests covering this.
2. File deletion and retention
Great point about transparency. Our backend uses a
FILE_TTL = 3600setting, with a background worker that runs every five minutes to clean up temporary uploads and generated files older than 60 minutes.I'll make sure our public privacy statement accurately reflects the behavior enforced by the backend.
Really appreciate you taking the time to share these suggestions!