jpeg
FILE_FORMATEvidence in r/webdev — Web Development
Trend support
- Current seven-day window
- Current 2026-10-09 → 2026-10-15
- Comparison seven-day window
- Comparison 2026-10-02 → 2026-10-08
- Distinct-document support
- Seen in 5 current vs 0 comparison posts/comments
- Mentions
- 7 current vs 0 mentions
“New” means absent from the comparison window — not new to the world or to Reddit.
Windows are complete UTC days compared with the preceding seven. How trends are measured.
Also Mentioned 28 times in the most-discussed range 2026-09-16 → 2026-10-16 — frequency, not a trend.
Attention over time
7-day rolling share of analyzed posts/comments mentioning this entity · 90 daily points ending 2026-10-15
Final complete day: 2026-10-15. Attention was 0.2% — this entity appeared in 5 of 2,852 analyzed posts/comments in the seven days ending that day (7 mentions).
Hover, touch, or focus the chart (Tab) and use the arrow keys — each point is one seven-day window.
View all 90 data points (semantic table)
| Week ending | Seven-day range | Status | Prevalence | Seen in | Mentions | Analyzed |
|---|---|---|---|---|---|---|
| 2026-07-18 | 2026-07-12 → 2026-07-18 | Comparable | 0.2% | 6 of 3,088 | 8 | 3,088 |
| 2026-07-19 | 2026-07-13 → 2026-07-19 | Comparable | 0.2% | 6 of 3,372 | 8 | 3,372 |
| 2026-07-20 | 2026-07-14 → 2026-07-20 | Comparable | 0.2% | 6 of 3,202 | 8 | 3,202 |
| 2026-07-21 | 2026-07-15 → 2026-07-21 | Comparable | 0.2% | 6 of 3,002 | 8 | 3,002 |
| 2026-07-22 | 2026-07-16 → 2026-07-22 | Comparable | 0.2% | 6 of 2,705 | 8 | 2,705 |
| 2026-07-23 | 2026-07-17 → 2026-07-23 | Comparable | 0.2% | 6 of 2,491 | 8 | 2,491 |
| 2026-07-24 | 2026-07-18 → 2026-07-24 | Comparable | 0.0% | 1 of 2,481 | 2 | 2,481 |
| 2026-07-25 | 2026-07-19 → 2026-07-25 | Comparable | 0.1% | 3 of 2,810 | 4 | 2,810 |
| 2026-07-26 | 2026-07-20 → 2026-07-26 | Comparable | 0.1% | 3 of 2,676 | 4 | 2,676 |
| 2026-07-27 | 2026-07-21 → 2026-07-27 | Comparable | 0.3% | 7 of 2,622 | 8 | 2,622 |
| 2026-07-28 | 2026-07-22 → 2026-07-28 | Comparable | 0.3% | 8 of 2,734 | 9 | 2,734 |
| 2026-07-29 | 2026-07-23 → 2026-07-29 | Comparable | 0.3% | 8 of 2,946 | 9 | 2,946 |
| 2026-07-30 | 2026-07-24 → 2026-07-30 | Comparable | 0.3% | 8 of 3,166 | 9 | 3,166 |
| 2026-07-31 | 2026-07-25 → 2026-07-31 | Comparable | 0.2% | 7 of 3,168 | 7 | 3,168 |
| 2026-08-01 | 2026-07-26 → 2026-08-01 | Comparable | 0.2% | 5 of 3,080 | 5 | 3,080 |
| 2026-08-02 | 2026-07-27 → 2026-08-02 | Comparable | 0.2% | 5 of 3,048 | 5 | 3,048 |
| 2026-08-03 | 2026-07-28 → 2026-08-03 | Comparable | 0.0% | 1 of 3,174 | 1 | 3,174 |
| 2026-08-04 | 2026-07-29 → 2026-08-04 | Comparable | 0.0% | 0 of 2,977 | 0 | 2,977 |
| 2026-08-05 | 2026-07-30 → 2026-08-05 | Comparable | 0.0% | 0 of 2,437 | 0 | 2,437 |
| 2026-08-06 | 2026-07-31 → 2026-08-06 | Comparable | 0.0% | 0 of 2,083 | 0 | 2,083 |
| 2026-08-07 | 2026-08-01 → 2026-08-07 | Comparable | 0.0% | 0 of 2,117 | 0 | 2,117 |
| 2026-08-08 | 2026-08-02 → 2026-08-08 | Comparable | 0.0% | 0 of 2,184 | 0 | 2,184 |
| 2026-08-09 | 2026-08-03 → 2026-08-09 | Comparable | 0.1% | 1 of 2,162 | 1 | 2,162 |
| 2026-08-10 | 2026-08-04 → 2026-08-10 | Comparable | 0.0% | 1 of 2,252 | 1 | 2,252 |
| 2026-08-11 | 2026-08-05 → 2026-08-11 | Comparable | 0.0% | 1 of 2,385 | 1 | 2,385 |
| 2026-08-12 | 2026-08-06 → 2026-08-12 | Comparable | 0.0% | 1 of 2,658 | 1 | 2,658 |
| 2026-08-13 | 2026-08-07 → 2026-08-13 | Comparable | 0.0% | 1 of 2,893 | 1 | 2,893 |
| 2026-08-14 | 2026-08-08 → 2026-08-14 | Comparable | 0.0% | 1 of 3,052 | 1 | 3,052 |
| 2026-08-15 | 2026-08-09 → 2026-08-15 | Comparable | 0.0% | 1 of 2,925 | 1 | 2,925 |
| 2026-08-16 | 2026-08-10 → 2026-08-16 | Comparable | 0.0% | 0 of 2,868 | 0 | 2,868 |
| 2026-08-17 | 2026-08-11 → 2026-08-17 | Comparable | 0.0% | 0 of 2,983 | 0 | 2,983 |
| 2026-08-18 | 2026-08-12 → 2026-08-18 | Comparable | 0.0% | 0 of 3,089 | 0 | 3,089 |
| 2026-08-19 | 2026-08-13 → 2026-08-19 | Comparable | 0.0% | 0 of 3,169 | 0 | 3,169 |
| 2026-08-20 | 2026-08-14 → 2026-08-20 | Comparable | 0.0% | 0 of 3,240 | 0 | 3,240 |
| 2026-08-21 | 2026-08-15 → 2026-08-21 | Comparable | 0.0% | 0 of 3,275 | 0 | 3,275 |
| 2026-08-22 | 2026-08-16 → 2026-08-22 | Comparable | 0.0% | 0 of 3,270 | 0 | 3,270 |
| 2026-08-23 | 2026-08-17 → 2026-08-23 | Comparable | 0.0% | 0 of 3,262 | 0 | 3,262 |
| 2026-08-24 | 2026-08-18 → 2026-08-24 | Comparable | 0.0% | 0 of 3,131 | 0 | 3,131 |
| 2026-08-25 | 2026-08-19 → 2026-08-25 | Comparable | 0.0% | 0 of 2,932 | 0 | 2,932 |
| 2026-08-26 | 2026-08-20 → 2026-08-26 | Comparable | 0.0% | 0 of 2,896 | 0 | 2,896 |
| 2026-08-27 | 2026-08-21 → 2026-08-27 | Comparable | 0.0% | 0 of 2,746 | 0 | 2,746 |
| 2026-08-28 | 2026-08-22 → 2026-08-28 | Comparable | 0.0% | 0 of 2,594 | 0 | 2,594 |
| 2026-08-29 | 2026-08-23 → 2026-08-29 | Comparable | 0.0% | 0 of 2,097 | 0 | 2,097 |
| 2026-08-30 | 2026-08-24 → 2026-08-30 | Comparable | 0.0% | 0 of 1,839 | 0 | 1,839 |
| 2026-08-31 | 2026-08-25 → 2026-08-31 | Comparable | 0.0% | 0 of 1,417 | 0 | 1,417 |
| 2026-09-01 | 2026-08-26 → 2026-09-01 | Comparable | 0.0% | 0 of 1,183 | 0 | 1,183 |
| 2026-09-02 | 2026-08-27 → 2026-09-02 | Comparable | 0.0% | 0 of 734 | 0 | 734 |
| 2026-09-03 | 2026-08-28 → 2026-09-03 | Comparable | 0.0% | 0 of 342 | 0 | 342 |
| 2026-09-04 | 2026-08-29 → 2026-09-04 | Low coverage | — | — | 0 | 5 |
| 2026-09-05 | 2026-08-30 → 2026-09-05 | Low coverage | — | — | 0 | 0 |
| 2026-09-06 | 2026-08-31 → 2026-09-06 | Low coverage | — | — | 0 | 0 |
| 2026-09-07 | 2026-09-01 → 2026-09-07 | Low coverage | — | — | 0 | 0 |
| 2026-09-08 | 2026-09-02 → 2026-09-08 | Low coverage | — | — | 0 | 0 |
| 2026-09-09 | 2026-09-03 → 2026-09-09 | Low coverage | — | — | 0 | 0 |
| 2026-09-10 | 2026-09-04 → 2026-09-10 | Low coverage | — | — | 0 | 0 |
| 2026-09-11 | 2026-09-05 → 2026-09-11 | Low coverage | — | — | 0 | 0 |
| 2026-09-12 | 2026-09-06 → 2026-09-12 | Low coverage | — | — | 0 | 0 |
| 2026-09-13 | 2026-09-07 → 2026-09-13 | Low coverage | — | — | 0 | 0 |
| 2026-09-14 | 2026-09-08 → 2026-09-14 | Low coverage | — | — | 0 | 0 |
| 2026-09-15 | 2026-09-09 → 2026-09-15 | Low coverage | — | — | 0 | 0 |
| 2026-09-16 | 2026-09-10 → 2026-09-16 | Comparable | 0.5% | 2 of 390 | 7 | 390 |
| 2026-09-17 | 2026-09-11 → 2026-09-17 | Comparable | 0.3% | 2 of 678 | 7 | 678 |
| 2026-09-18 | 2026-09-12 → 2026-09-18 | Comparable | 0.3% | 3 of 1,194 | 8 | 1,194 |
| 2026-09-19 | 2026-09-13 → 2026-09-19 | Comparable | 0.2% | 3 of 1,983 | 8 | 1,983 |
| 2026-09-20 | 2026-09-14 → 2026-09-20 | Comparable | 0.1% | 3 of 2,279 | 8 | 2,279 |
| 2026-09-21 | 2026-09-15 → 2026-09-21 | Comparable | 0.1% | 3 of 2,885 | 8 | 2,885 |
| 2026-09-22 | 2026-09-16 → 2026-09-22 | Comparable | 0.1% | 3 of 3,335 | 8 | 3,335 |
| 2026-09-23 | 2026-09-17 → 2026-09-23 | Comparable | 0.1% | 4 of 3,367 | 4 | 3,367 |
| 2026-09-24 | 2026-09-18 → 2026-09-24 | Comparable | 0.1% | 4 of 3,423 | 4 | 3,423 |
| 2026-09-25 | 2026-09-19 → 2026-09-25 | Comparable | 0.1% | 4 of 3,199 | 4 | 3,199 |
| 2026-09-26 | 2026-09-20 → 2026-09-26 | Comparable | 0.2% | 5 of 2,816 | 5 | 2,816 |
| 2026-09-27 | 2026-09-21 → 2026-09-27 | Comparable | 0.2% | 6 of 2,718 | 7 | 2,718 |
| 2026-09-28 | 2026-09-22 → 2026-09-28 | Comparable | 0.2% | 6 of 2,710 | 7 | 2,710 |
| 2026-09-29 | 2026-09-23 → 2026-09-29 | Comparable | 0.2% | 6 of 2,569 | 7 | 2,569 |
| 2026-09-30 | 2026-09-24 → 2026-09-30 | Comparable | 0.2% | 4 of 2,367 | 5 | 2,367 |
| 2026-10-01 | 2026-09-25 → 2026-10-01 | Comparable | 0.2% | 4 of 2,492 | 5 | 2,492 |
| 2026-10-02 | 2026-09-26 → 2026-10-02 | Comparable | 0.1% | 3 of 2,635 | 4 | 2,635 |
| 2026-10-03 | 2026-09-27 → 2026-10-03 | Comparable | 0.1% | 2 of 2,652 | 3 | 2,652 |
| 2026-10-04 | 2026-09-28 → 2026-10-04 | Comparable | 0.0% | 1 of 2,859 | 1 | 2,859 |
| 2026-10-05 | 2026-09-29 → 2026-10-05 | Comparable | 0.0% | 1 of 2,619 | 1 | 2,619 |
| 2026-10-06 | 2026-09-30 → 2026-10-06 | Comparable | 0.0% | 1 of 2,717 | 1 | 2,717 |
| 2026-10-07 | 2026-10-01 → 2026-10-07 | Comparable | 0.0% | 0 of 2,950 | 0 | 2,950 |
| 2026-10-08 | 2026-10-02 → 2026-10-08 | Comparable | 0.0% | 0 of 2,789 | 0 | 2,789 |
| 2026-10-09 | 2026-10-03 → 2026-10-09 | Comparable | 0.0% | 0 of 3,015 | 0 | 3,015 |
| 2026-10-10 | 2026-10-04 → 2026-10-10 | Comparable | 0.0% | 0 of 3,145 | 0 | 3,145 |
| 2026-10-11 | 2026-10-05 → 2026-10-11 | Comparable | 0.0% | 1 of 3,008 | 1 | 3,008 |
| 2026-10-12 | 2026-10-06 → 2026-10-12 | Comparable | 0.1% | 3 of 2,967 | 5 | 2,967 |
| 2026-10-13 | 2026-10-07 → 2026-10-13 | Comparable | 0.1% | 4 of 2,938 | 6 | 2,938 |
| 2026-10-14 | 2026-10-08 → 2026-10-14 | Comparable | 0.2% | 5 of 2,850 | 7 | 2,850 |
| 2026-10-15 | 2026-10-09 → 2026-10-15 | Comparable | 0.2% | 5 of 2,852 | 7 | 2,852 |
Each point is a seven-day rolling window of complete UTC days; a point is comparable only when at least 100 analyzed posts or comments fall inside it. A day with no analyzed records counts as zero; missing coverage is marked and never shown as zero. The series ends at the latest complete analyzed day — it never extends into the current incomplete day. How attention is measured.
Recent mentions
- Comment
Client-side compression is a solid choice here, and plenty of image-heavy apps do exactly this. A few things that made it work well for me: 1. Resize first, format second. Capping the long edge at \~2048px with quality around 0.8 does most of the work. A 12 MP phone photo usually ends up at 300–600 KB as JPEG, so WebP vs JPEG matters much less than people think. 2. Don't assume WebP encoding works everywhere. Call canvas.toBlob(cb, 'image/webp', 0.8) and check blob.type in the callback. If the browser silently gave you a PNG instead, fall back to 'image/jpeg'. That covers older Safari without any user-agent sniffing. 3. Upload straight to R2 with presigned URLs so the file never touches your Next.js server. Still enforce a max size on that side (e.g. reject anything over 2 MB). Never trust the client completely. 4. On Expo, expo-image-manipulator does the same resize + compress before upload. 5. Bonus for a P2P marketplace: re-encoding through canvas strips EXIF data, including GPS. Otherwise sellers can leak their home location in listing photos. If you later want fancier variants (thumbnails, crops), look at an on-the-fly image transformation service instead of doing it in your serverless functions. Check current pricing, but small volumes are often free or very cheap.
- Post
.co.uk/ and .co.uk/index.html appear different depending on route taken - So basically, im running my web server on AWS lightsail, i wrote my own https server code and URL ending in .co.uk/ and .co.uk/index.html both direct to /index.html but when i go to .co.uk/ it appears smaller than if i was to type .co.uk/index.html and i cant figure out why. I have done all the usual scanning whats listening to ports 443 and 80 and its just the webindex.js file im talking about, so there is nothing else getting in the way, i already disabled PM2 since i run a different server that monitors my apps servers and kicks them back up via ssh when they go down. Anyway, i checked the main things, i just cant understand why its serving the webpage smaller when routing via .co.uk/ and .co.uk/index.html is the correct size/scale. const https = require('https'); const fs = require('fs'); const path = require('path'); const WebSocket = require('ws'); const mysql = require('mysql'); const { v4: uuidv4 } = require('uuid'); const { format } = require('date-fns'); const http = require('http'); // Load SSL key and certificate const privateKey = fs.readFileSync( path.join(__dirname, 'newcerts/key.key'), 'utf8' ); const certificate = fs.readFileSync( path.join(__dirname, 'newcerts/certificate.crt'), 'utf8' ); const credentials = { key: privateKey, cert: certificate }; // Helper function to serve static files const serveFile = (res, filePath, contentType) => { fs.readFile(filePath, (err, data) => { if (err) { console.error(`Error loading file ${filePath}:`, err); res.writeHead(500, { 'Content-Type': 'text/plain' }); return res.end('Error loading file'); } res.writeHead(200, { 'Content-Type': contentType }); res.end(data); }); }; // Redirect HTTP traffic to HTTPS http.createServer((req, res) => { const host = req.headers.host || 'localhost'; const url = req.url || '/'; res.writeHead(301, { Location: ` }); res.end(); }).listen(80, () => { console.log('HTTP server running on port 80, redirecting to HTTPS.'); }); // HTTPS server const server = https.createServer(credentials, (req, res) => { let pathname; try { let requestUrl = req.url || '/'; // Remove multiple leading slashes requestUrl = requestUrl.replace(/^ \/ +/, '/'); // Parse the request URL safely pathname = new URL( requestUrl, ` || 'localhost'}` ).pathname; } catch (err) { console.warn('Rejected malformed request:', req.url); res.writeHead(400, { 'Content-Type': 'text/plain' }); res.end('Bad Request'); return; } // Redirect the root URL to the main homepage if (pathname === '/') { res.writeHead(301, { Location: '/index.html' }); res.end(); return; } // Serve the main homepage if (pathname === '/index.html') { const htmlPath = path.join(__dirname, 'index.html'); serveFile(res, htmlPath, 'text/html'); // Serve app-ads.txt } else if (pathname === '/app-ads.txt') { const adsTxtPath = path.join(__dirname, 'app-ads.txt'); serveFile(res, adsTxtPath, 'text/plain'); // Serve privacy policy } else if (pathname === '/privacypolicy.html') { const privacyPolicyPath = path.join( __dirname, 'privacypolicy.html' ); serveFile(res, privacyPolicyPath, 'text/html'); // Serve FAQ } else if (pathname === '/faq.html') { const faqPath = path.join(__dirname, 'faq.html'); serveFile(res, faqPath, 'text/html'); // Serve contact page } else if (pathname === '/contactus.html') { const contactPath = path.join(__dirname, 'contactus.html'); serveFile(res, contactPath, 'text/html'); // Serve how it works page } else if (pathname === '/howitworks.html') { const howItWorksPath = path.join(__dirname, 'howitworks.html'); serveFile(res, howItWorksPath, 'text/html'); // Serve advertise with us page } else if (pathname === '/advertisewithus.html') { const advertisePath = path.join( __dirname, 'advertisewithus.html' ); serveFile(res, advertisePath, 'text/html'); // Serve sitemap } else if (pathname === '/sitemap.xml') { const sitemapPath = path.join(__dirname, 'sitemap.xml'); serveFile(res, sitemapPath, 'application/xml'); // Serve robots.txt } else if (pathname === '/robots.txt') { const robotsPath = path.join(__dirname, 'robots.txt'); serveFile(res, robotsPath, 'text/plain'); // Serve JPG images } else if (pathname.toLowerCase().endsWith('.jpg')) { const imagePath = path.join( __dirname, pathname.replace(/^ \/ +/, '') ); serveFile(res, imagePath, 'image/jpeg'); // Handle unknown routes } else { res.writeHead(404, { 'Content-Type': 'text/plain' }); res.end('Not Found'); } }); // Start HTTPS server const port = process.env.PORT || 443; server.listen(port, () => { console.log(`Server running at });
- Comment
Worth noting the decoder is jxl-rs, a pure Rust implementation, which I suspect did a lot of the work in making the security case for a new codec in the renderer. Practically I'd treat it as one more `<picture>` source rather than an AVIF replacement: the Chrome post itself recommends testing both, with JXL most useful for high-fidelity, lossless, or progressive cases, and lossless JPEG recompression is the low-risk place to start for an existing photo library.
- Comment
I love the idea of JPEG XL and I'm already testing the savings vs an oxipng compression pass in a project that requires lossless images, but we have to admit that the name is so bad that it's hurting adoption and causing misunderstandings like this for anyone seeing it for the first time. Devs see "JPEG" and think of blocky compression artifacts. End users see "XL" and think about the bandwidth or storage requirements on their mobile device vs "normal JPEG". I really believe that the name has set adoption back years. If Apple was involved in the branding and called the format something like "Magic Pix Pro (.mpix)", it probably wouldn't have taken this much time to get where we are now.
- Comment
It's smaller than existing files... > It offers 30-50% better compression than JPEG, lossless compression, built-in HDR support, lossless JPEG transcoding, and more.
Excerpts above are public Reddit posts and comments. WIO never synthesizes Reddit URLs from stored ids, and entities are extracted automatically and may be wrong. See the extraction notes and the limitations and privacy section of the methodology.