{"id":906,"date":"2026-10-15T15:56:16","date_gmt":"2026-10-15T13:56:16","guid":{"rendered":"https:\/\/chauquest.com\/?p=906"},"modified":"2026-10-18T23:53:10","modified_gmt":"2026-10-18T21:53:10","slug":"french-dpe-database-in-the-browser-duckdb-wasm","status":"publish","type":"post","link":"https:\/\/chauquest.com\/index.php\/article\/french-dpe-database-in-the-browser-duckdb-wasm\/","title":{"rendered":"The whole French DPE database in a browser tab : Parquet + DuckDB-WASM, no server"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Did you know that the energy certificate of nearly every home sold or rented in France is open data ?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In France, before you sell or rent a home you need a DPE (<em>diagnostic de performance \u00e9nerg\u00e9tique<\/em>), an energy certificate that gives the home a class from A (great) to G (a fridge in winter, an oven in summer). It&#8217;s not a detail : the worst homes are being pushed out of the rental market, starting with G in 2025. Every certificate is sent to ADEME, the French environment agency, and ADEME publishes all of them as <a href=\"https:\/\/data.ademe.fr\/datasets\/dpe03existant\">open data<\/a> : 15.5 million certificates for existing homes since July 2021, with 226 columns each.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A listing on Leboncoin or SeLoger only shows the class, the surface and the city. The certificate behind it has much more : the address, the real consumption, the insulation, the heating&#8230; With the class, the surface and the postcode, you can usually find it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Why this project ? My parents are looking for a house, and my mother was using a similar tool. Then the tool closed. So I made my own : <a href=\"https:\/\/recherche-maison.com\">recherche-maison.com<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this article I will explain how I serve the whole database without any database server : static Parquet files, and DuckDB running directly in your browser. You will get the architecture, the real numbers, and the one thing that surprised me about range requests. You can skip the theory part if you only want the DuckDB trick.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quick numbers :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>First commit on 4 September 2026<\/li>\n\n<li>20.8 million rows across four ADEME datasets (existing homes, new homes, tertiary buildings, energy audits)<\/li>\n\n<li>308 MB of search files for the whole of France, 3.0 GB with every column<\/li>\n\n<li>Weekly update in 48 minutes<\/li>\n\n<li>Hosting cost : close to $0 for now, inside Cloudflare&#8217;s free tiers<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Features I wanted<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Search a whole d\u00e9partement by postcode or commune, class, surface (\u00b1 a few m\u00b2), date and consumption<\/li>\n\n<li>Every ADEME column kept, and checked<\/li>\n\n<li>Refreshed every week<\/li>\n\n<li>Cost close to zero, because it&#8217;s a side project<\/li>\n\n<li>Still working with many users at the same time<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Why no database server ?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><em>You can skip this part if you&#8217;re not interested in the theory.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I looked at four options.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. Query ADEME&#8217;s API live<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Pros :<\/strong> nothing to store<\/li>\n\n<li><strong>Cons :<\/strong> my site would only work when ADEME&#8217;s API works. And their API sometimes answers HTTP 500 when you paginate deep.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. A Postgres\/PostGIS server<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Pros :<\/strong> the classic, it works<\/li>\n\n<li><strong>Cons :<\/strong> about $50 a month, for a side project with zero revenue at the start<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3. Cloudflare D1 (SQLite next to my Worker)<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Pros :<\/strong> cheap, already in my stack for the user accounts<\/li>\n\n<li><strong>Cons :<\/strong> D1&#8217;s problem is not the money. It runs one query at a time, and a national query took 10 to 20 seconds in my test. So ten users searching at the same moment would wait two or three minutes.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>4. Parquet files + DuckDB in the browser<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Pros :<\/strong> the compute moves to the user&#8217;s computer, so it scales with users instead of against them<\/li>\n\n<li><strong>Cons :<\/strong> the user downloads a 36 MB engine (uncompressed) and some data, so the first search is not instant<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">I chose the fourth one. To understand why Parquet fits so well, a toy example. A classic database stores each certificate as one row, with its 226 values side by side. If you ask &#8220;how many D-class homes per d\u00e9partement ?&#8221;, it must go through every row, all 226 values, to keep only 2 of them. Parquet stores the data by column : all the classes together, all the d\u00e9partements together. So the same question reads 2 columns and skips the 224 others.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"365\" src=\"https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/parquet-rows-vs-columns-1024x365.png\" alt=\"Diagram : a row store reads every value of every row, Parquet reads only the class and d\u00e9partement columns\" class=\"wp-image-923\" srcset=\"https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/parquet-rows-vs-columns-1024x365.png 1024w, https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/parquet-rows-vs-columns-300x107.png 300w, https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/parquet-rows-vs-columns-768x274.png 768w, https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/parquet-rows-vs-columns-1536x547.png 1536w, https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/parquet-rows-vs-columns.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">The toy example : to count D-class homes per d\u00e9partement, a row store goes through every value, Parquet only reads the two columns it needs.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Measured on the real data, this national count reads 17 MB, only 0.38% of the Parquet file. A row-oriented database like D1 has to go through all 15,512,658 rows.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The second ingredient is the HTTP range request. A Parquet file ends with a small footer that says where each piece of data is. So the browser can read the footer, then download only the bytes it needs, with a <code>Range: bytes=...<\/code> header. In theory. Keep this in mind, it comes back later.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The pipeline<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"358\" src=\"https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/recherche-maison-pipeline-1024x358.png\" alt=\"Diagram : the ADEME API feeds Parquet files in a weekly GitHub Action, uploaded to an R2 bucket, served by a Worker and queried by DuckDB-WASM in the browser\" class=\"wp-image-924\" srcset=\"https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/recherche-maison-pipeline-1024x358.png 1024w, https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/recherche-maison-pipeline-300x105.png 300w, https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/recherche-maison-pipeline-768x269.png 768w, https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/recherche-maison-pipeline-1536x538.png 1536w, https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/recherche-maison-pipeline.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">The whole pipeline : a weekly job writes Parquet files to R2, and the only thing that runs SQL is your browser.<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">1. Fetching from ADEME<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">ADEME&#8217;s API has a speed limit : 500 kB\/s without key, 1 MB\/s with one. So I fetch with a single stream, never in parallel. A full rebuild takes 17.4 hours without key (about 247 rows per second) and around 9 hours with one. GitHub Actions stops a job after 6 hours, so the full rebuild runs on my own computer, by hand.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then every Monday at 04:10 UTC a GitHub Action fetches only what changed. ADEME has a field for this, <code>date_derniere_modification_dpe<\/code>, and its own description literally says \u00ab \u00c0 utiliser pour mettre en place une alimentation incr\u00e9mentale \u00bb (use it for incremental updates). That&#8217;s about 150,000 rows a week, and the last full run took 48 minutes, 44 of them waiting for ADEME.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Deleted certificates don&#8217;t show up in this change feed. So at every run, I also compare my number of rows per d\u00e9partement with ADEME&#8217;s count.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One funny moment : my first full ingest died after 15 hours and 3,062,035 rows, on a single value, <code>5.55e+181<\/code>. I still don&#8217;t know what this home consumes, but it must be a lot. Lesson learned : with 15 million certificates typed by humans, plan for impossible values in every column.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Two Parquet files per d\u00e9partement<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The data is split into 103 partitions : the 96 d\u00e9partements of metropolitan France, four overseas ones, New Caledonia, one that groups the smallest overseas territories (Mayotte included), and a special one I will explain later. Each has two files :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>search\/<\/code> : only 17 columns, sorted by postcode, class and surface. For the whole of France it&#8217;s 308 MB, with a median of 2.3 MB per d\u00e9partement and 15.2 MB for Paris.<\/li>\n\n<li><code>dpe\/<\/code> : all 226 columns plus latitude and longitude. 3.0 GB in total, 149.6 MB for Paris.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The sorting is important. Parquet cuts a file into chunks called row groups, and each chunk remembers the minimum and maximum of its columns. Since the search file is sorted by postcode, DuckDB can skip every chunk that can&#8217;t contain yours.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Everything is compressed with zstd (level 9). To compare, the same data is 10.9 GB in my local SQLite, and around 31 GB as raw CSV (estimated from the average row size).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Files are never edited in place. A new version is written next to the old one, and the manifest that points to the files is swapped last. So a user never reads a half-updated base.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Checking it&#8217;s really lossless<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A test takes 40 certificates, rebuilds each one from the Parquet files, all 226 columns, and compares it field by field with the live record on ADEME. In my point of view &#8220;lossless&#8221; means nothing if it&#8217;s not tested, so this test is my definition of lossless. To be honest, it needs the real API, so for now I run it by hand on my computer. The weekly job doesn&#8217;t run it yet.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. In the browser<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">DuckDB-WASM is loaded at the first search, not when the page opens, because the engine is heavy : 36 MB uncompressed. Funny detail, it&#8217;s too big for Cloudflare&#8217;s static assets (limit of 25 MB per file), so the engine itself is served from R2, like the data.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The Parquet files go through my Worker on <code>\/data\/*<\/code>, which checks that you are signed in and then reads R2. The bucket has no public URL.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A search looks like this (simplified) :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-- the listing says : class D, 62 m\u00b2, Foix (09000)\nSELECT *, count(*) OVER () AS total               -- total = every match, even above 50\nFROM read_parquet('\/data\/search\/dept=09\/part-0000.parquet')\nWHERE code_postal_ban = '09000'\n  AND etiquette_dpe = 'D'\n  AND surface_habitable_logement BETWEEN 60 AND 64  -- \u00b1 2 m\u00b2 tolerance\nORDER BY abs(surface_habitable_logement - 62)      -- closest surface first\nLIMIT 50;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5. Checking that DuckDB really reads ranges<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Remember the range requests from the theory part ? When the whole of France went online, opening one Paris certificate downloaded 152 MB. DuckDB-WASM only reads by ranges if the server answers its first <code>HEAD<\/code> with a 206, and my Worker answered 200, which HTTP allows. So DuckDB quietly downloaded every file whole, and with only one small d\u00e9partement online before, it looked exactly like success on screen. The fix is a 206 on the Worker side, and these three flags (with only the first two, every file failed to open) :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ duck.ts\nfilesystem: { reliableHeadRequests: true, allowFullHTTPReads: false, forceFullHTTPReads: false },<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">(Firefox also answered that <code>HEAD<\/code> from its cache, so the Worker now sends it with <code>no-store<\/code>.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And the surprise : ranges are not always faster. DuckDB-WASM sends its range requests one after the other, each one a round trip of about 150 ms, and it needs roughly one per column for each row group it touches. The Paris search touches 2 row groups of 17 columns, so it became 35 reads : 2 MB instead of 15 MB, but 6.4 s instead of about 4 s on fibre. That&#8217;s why a search file of 4 MB or less is downloaded whole, and only bigger files are read by ranges.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">6. Linking to buildings and maps<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><em>For curious people only.<\/em> About half of the certificates name their building in the <a href=\"https:\/\/rnb.beta.gouv.fr\/\">RNB<\/a>, the French national building register, and most certificates can be linked to their parcel in the cadastre, through the building or through the address. The coordinates come in Lambert-93, the French map projection, so I convert them to latitude and longitude myself, and my result matches ADEME&#8217;s own conversion almost perfectly. Except overseas, where ADEME&#8217;s point puts R\u00e9union island in Scotland ^^. And 531,646 certificates (3.4%) were never geocoded at all, so they live in a pseudo-d\u00e9partement called <code>NG<\/code>. That&#8217;s the special partition.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Real numbers<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Measured in the browser, on the national data and my fibre connection. The times are for a new account in a fresh browser, so they include the first load of the engine. The downloaded column only counts the data :<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Scenario<\/th><th>Requests<\/th><th>Downloaded<\/th><th>Time<\/th><\/tr><\/thead><tbody><tr><td>Search in Foix (09000), small file read whole<\/td><td>2<\/td><td>0.76 MB<\/td><td>3.4 s<\/td><\/tr><tr><td>Search in Paris 11e (75011), read by ranges<\/td><td>35<\/td><td>2.06 MB<\/td><td>6.4 s<\/td><\/tr><tr><td>One Paris certificate, all 226 columns<\/td><td>16<\/td><td>8.1 MB<\/td><td>4.5 s<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">It&#8217;s not Google-fast, I know. But it&#8217;s the whole of France, with no database server at all.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cost<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Storage :<\/strong> the whole tree, buildings and cadastre included, is about 10 GB, right at the limit of R2&#8217;s free 10 GB. Above it, R2 charges $0.015 per GB and per month, and nothing for downloads. So $0 today, and a few cents a month at worst.<\/li>\n\n<li><strong>Compute :<\/strong> the free Workers plan gives 100,000 requests a day. A first search in a small d\u00e9partement costs about 5 of them, but in Paris about 38, because every range read goes through the Worker. So it&#8217;s somewhere between 2,600 and 20,000 searches a day. If it grows, the paid plan is $5 a month for 10 million requests.<\/li>\n\n<li><strong>To compare :<\/strong> the Postgres option was about $50 a month.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Result<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/recherche-maison.com\">recherche-maison.com<\/a> works : up to 50 results sorted by closest surface, a list and a map, and the full certificate behind each one. The whole history is free. The last two months, which are the homes on sale right now, cost \u20ac5 a month. You need a Google account to search.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"582\" src=\"https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/recherche-maison-search-results-1024x582.jpg\" alt=\"recherche-maison search results for Foix 09000, class E : a list of 17 certificates with their address and a map of the same homes\" class=\"wp-image-926\" srcset=\"https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/recherche-maison-search-results-1024x582.jpg 1024w, https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/recherche-maison-search-results-300x170.jpg 300w, https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/recherche-maison-search-results-768x436.jpg 768w, https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/recherche-maison-search-results-1536x873.jpg 1536w, https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/recherche-maison-search-results.jpg 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">A search in Foix (09000) for class E : 17 certificates with their address, in a list and on the map.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"629\" src=\"https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/recherche-maison-certificate-detail-1024x629.jpg\" alt=\"recherche-maison certificate page : address, surface and date, then the certificate values like the heating need and the consumption\" class=\"wp-image-927\" srcset=\"https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/recherche-maison-certificate-detail-1024x629.jpg 1024w, https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/recherche-maison-certificate-detail-300x184.jpg 300w, https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/recherche-maison-certificate-detail-768x472.jpg 768w, https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/recherche-maison-certificate-detail-1536x944.jpg 1536w, https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/recherche-maison-certificate-detail.jpg 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">The certificate behind a result : address, surface and date, then every value ADEME publishes, like the heating need or the real consumption.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Honest numbers : on 15 October 2026 the site has 63 accounts and 2 paying users, and in early October Search Console gave it an average position of 30, so page 3 of Google. It&#8217;s not a success story yet, it&#8217;s a working tool looking for its users ^^<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The limits, said plainly :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A home only appears if its certificate was filed with ADEME<\/li>\n\n<li>The address is the one geocoded by ADEME, so it can be approximate<\/li>\n\n<li>Several certificates can match one listing, and they are all shown<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The project is also published as an <a href=\"https:\/\/www.data.gouv.fr\/reuses\/retrouver-le-dpe-dun-logement-a-partir-dune-annonce-immobiliere\">official reuse of the ADEME data on data.gouv.fr<\/a>, the French government&#8217;s open data portal.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">That&#8217;s it ! In my point of view the main lesson is that a &#8220;big&#8221; open dataset doesn&#8217;t need a big server anymore. 15 million rows fit in 308 MB of Parquet, and your user&#8217;s laptop is a very good database engine. Just open the network tab once to check that your ranges really are ranges !<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you are looking for a home in France, like my parents, give <a href=\"https:\/\/recherche-maison.com\">recherche-maison.com<\/a> a try before your next visit. And if your company needs this kind of data pipeline, I do it as a freelancer : <a href=\"https:\/\/eymeric.me\">eymeric.me<\/a>. The <a href=\"https:\/\/eymeric.me\/en\/engineering\/recherche-maison\/\">recherche-maison project page<\/a> is there too, and I explained how I built that site in <a href=\"https:\/\/chauquest.com\/index.php\/engineering\/it-development\/astro-keystatic-cloudflare-freelance-website\/\">my previous article<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Next step : the weekly comparison with ADEME finds some anomalies in the official data, and I want to report them to the ADEME team. It will probably be the subject of another article, stay tuned !<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Resources<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The data : <a href=\"https:\/\/data.ademe.fr\/datasets\/dpe03existant\">DPE Logements existants<\/a> on data.ademe.fr, plus the new homes, tertiary and energy audit datasets<\/li>\n\n<li>The engine : <a href=\"https:\/\/duckdb.org\/docs\/current\/clients\/wasm\/overview\">DuckDB-WASM<\/a> and its <a href=\"https:\/\/duckdb.org\/docs\/current\/clients\/wasm\/troubleshoot\">troubleshooting page<\/a><\/li>\n\n<li>The building register : <a href=\"https:\/\/rnb.beta.gouv.fr\/\">RNB<\/a><\/li>\n\n<li>The project : <a href=\"https:\/\/www.data.gouv.fr\/reuses\/retrouver-le-dpe-dun-logement-a-partir-dune-annonce-immobiliere\">recherche-maison on data.gouv.fr<\/a><\/li>\n<\/ul>\n\n","protected":false},"excerpt":{"rendered":"<p>How I serve 15.5 million French energy certificates as static Parquet files, queried in the browser by DuckDB-WASM with HTTP range requests, for almost $0.<\/p>\n","protected":false},"author":1,"featured_media":922,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"footnotes":""},"categories":[1,49],"tags":[61,62,65,63,64],"class_list":["post-906","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-article","category-it-development","tag-cloudflare","tag-duckdb","tag-open-data","tag-parquet","tag-webassembly"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"How I serve 15.5 million French energy certificates as static Parquet files, queried in the browser by DuckDB-WASM with HTTP range requests, for almost $0.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Chauchat Eymeric\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/chauquest.com\/index.php\/article\/french-dpe-database-in-the-browser-duckdb-wasm\/\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Eymeric Chauchat - my Engineering blog\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"DuckDB-WASM + Parquet : 15M rows in the browser, no server\" \/>\n\t\t<meta property=\"og:description\" content=\"How I serve 15.5 million French energy certificates as static Parquet files, queried in the browser by DuckDB-WASM with HTTP range requests, for almost $0.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/chauquest.com\/index.php\/article\/french-dpe-database-in-the-browser-duckdb-wasm\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/duckdb-wasm-french-dpe-database-cover.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/duckdb-wasm-french-dpe-database-cover.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"1600\" \/>\n\t\t<meta property=\"og:image:height\" content=\"900\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-10-15T13:56:16+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-10-18T21:53:10+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"DuckDB-WASM + Parquet : 15M rows in the browser, no server\" \/>\n\t\t<meta name=\"twitter:description\" content=\"How I serve 15.5 million French energy certificates as static Parquet files, queried in the browser by DuckDB-WASM with HTTP range requests, for almost $0.\" \/>\n\t\t<meta name=\"twitter:image\" content=\"http:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/duckdb-wasm-french-dpe-database-cover.jpg\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/article\\\/french-dpe-database-in-the-browser-duckdb-wasm\\\/#blogposting\",\"name\":\"DuckDB-WASM + Parquet : 15M rows in the browser, no server\",\"headline\":\"The whole French DPE database in a browser tab : Parquet + DuckDB-WASM, no server\",\"author\":{\"@id\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/author\\\/chauquest-com\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/chauquest.com\\\/#person\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/chauquest.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/duckdb-wasm-french-dpe-database-cover.jpg\",\"width\":1600,\"height\":900,\"caption\":\"recherche-maison.com : a search in Foix (09000) and the certificate behind one result.\"},\"datePublished\":\"2026-10-15T15:56:16+02:00\",\"dateModified\":\"2026-10-18T23:53:10+02:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/article\\\/french-dpe-database-in-the-browser-duckdb-wasm\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/article\\\/french-dpe-database-in-the-browser-duckdb-wasm\\\/#webpage\"},\"articleSection\":\"Article, IT &amp; Development, Cloudflare, DuckDB, Open data, Parquet, WebAssembly\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/article\\\/french-dpe-database-in-the-browser-duckdb-wasm\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/chauquest.com\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/chauquest.com\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/category\\\/engineering\\\/#listItem\",\"name\":\"Engineering\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/category\\\/engineering\\\/#listItem\",\"position\":2,\"name\":\"Engineering\",\"item\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/category\\\/engineering\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/category\\\/engineering\\\/it-development\\\/#listItem\",\"name\":\"IT &amp; Development\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/chauquest.com\\\/#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/category\\\/engineering\\\/it-development\\\/#listItem\",\"position\":3,\"name\":\"IT &amp; Development\",\"item\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/category\\\/engineering\\\/it-development\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/article\\\/french-dpe-database-in-the-browser-duckdb-wasm\\\/#listItem\",\"name\":\"The whole French DPE database in a browser tab : Parquet + DuckDB-WASM, no server\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/category\\\/engineering\\\/#listItem\",\"name\":\"Engineering\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/article\\\/french-dpe-database-in-the-browser-duckdb-wasm\\\/#listItem\",\"position\":4,\"name\":\"The whole French DPE database in a browser tab : Parquet + DuckDB-WASM, no server\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/category\\\/engineering\\\/it-development\\\/#listItem\",\"name\":\"IT &amp; Development\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/chauquest.com\\\/#person\",\"name\":\"Chauchat Eymeric\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/article\\\/french-dpe-database-in-the-browser-duckdb-wasm\\\/#personImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/733daea7054c24e570a41a59b2a06d4b4c62fa3d15233b6543f4f65698b9c0f2?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Chauchat Eymeric\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/author\\\/chauquest-com\\\/#author\",\"url\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/author\\\/chauquest-com\\\/\",\"name\":\"Chauchat Eymeric\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/article\\\/french-dpe-database-in-the-browser-duckdb-wasm\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/733daea7054c24e570a41a59b2a06d4b4c62fa3d15233b6543f4f65698b9c0f2?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Chauchat Eymeric\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/article\\\/french-dpe-database-in-the-browser-duckdb-wasm\\\/#webpage\",\"url\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/article\\\/french-dpe-database-in-the-browser-duckdb-wasm\\\/\",\"name\":\"DuckDB-WASM + Parquet : 15M rows in the browser, no server\",\"description\":\"How I serve 15.5 million French energy certificates as static Parquet files, queried in the browser by DuckDB-WASM with HTTP range requests, for almost $0.\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/chauquest.com\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/article\\\/french-dpe-database-in-the-browser-duckdb-wasm\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/author\\\/chauquest-com\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/author\\\/chauquest-com\\\/#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/chauquest.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/duckdb-wasm-french-dpe-database-cover.jpg\",\"@id\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/article\\\/french-dpe-database-in-the-browser-duckdb-wasm\\\/#mainImage\",\"width\":1600,\"height\":900,\"caption\":\"recherche-maison.com : a search in Foix (09000) and the certificate behind one result.\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/chauquest.com\\\/index.php\\\/article\\\/french-dpe-database-in-the-browser-duckdb-wasm\\\/#mainImage\"},\"datePublished\":\"2026-10-15T15:56:16+02:00\",\"dateModified\":\"2026-10-18T23:53:10+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/chauquest.com\\\/#website\",\"url\":\"https:\\\/\\\/chauquest.com\\\/\",\"name\":\"chauquest.com\",\"description\":\"my Engineering blog\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/chauquest.com\\\/#person\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"DuckDB-WASM + Parquet : 15M rows in the browser, no server","description":"How I serve 15.5 million French energy certificates as static Parquet files, queried in the browser by DuckDB-WASM with HTTP range requests, for almost $0.","canonical_url":"https:\/\/chauquest.com\/index.php\/article\/french-dpe-database-in-the-browser-duckdb-wasm\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/chauquest.com\/index.php\/article\/french-dpe-database-in-the-browser-duckdb-wasm\/#blogposting","name":"DuckDB-WASM + Parquet : 15M rows in the browser, no server","headline":"The whole French DPE database in a browser tab : Parquet + DuckDB-WASM, no server","author":{"@id":"https:\/\/chauquest.com\/index.php\/author\/chauquest-com\/#author"},"publisher":{"@id":"https:\/\/chauquest.com\/#person"},"image":{"@type":"ImageObject","url":"https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/duckdb-wasm-french-dpe-database-cover.jpg","width":1600,"height":900,"caption":"recherche-maison.com : a search in Foix (09000) and the certificate behind one result."},"datePublished":"2026-10-15T15:56:16+02:00","dateModified":"2026-10-18T23:53:10+02:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/chauquest.com\/index.php\/article\/french-dpe-database-in-the-browser-duckdb-wasm\/#webpage"},"isPartOf":{"@id":"https:\/\/chauquest.com\/index.php\/article\/french-dpe-database-in-the-browser-duckdb-wasm\/#webpage"},"articleSection":"Article, IT &amp; Development, Cloudflare, DuckDB, Open data, Parquet, WebAssembly"},{"@type":"BreadcrumbList","@id":"https:\/\/chauquest.com\/index.php\/article\/french-dpe-database-in-the-browser-duckdb-wasm\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/chauquest.com\/#listItem","position":1,"name":"Home","item":"https:\/\/chauquest.com\/","nextItem":{"@type":"ListItem","@id":"https:\/\/chauquest.com\/index.php\/category\/engineering\/#listItem","name":"Engineering"}},{"@type":"ListItem","@id":"https:\/\/chauquest.com\/index.php\/category\/engineering\/#listItem","position":2,"name":"Engineering","item":"https:\/\/chauquest.com\/index.php\/category\/engineering\/","nextItem":{"@type":"ListItem","@id":"https:\/\/chauquest.com\/index.php\/category\/engineering\/it-development\/#listItem","name":"IT &amp; Development"},"previousItem":{"@type":"ListItem","@id":"https:\/\/chauquest.com\/#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/chauquest.com\/index.php\/category\/engineering\/it-development\/#listItem","position":3,"name":"IT &amp; Development","item":"https:\/\/chauquest.com\/index.php\/category\/engineering\/it-development\/","nextItem":{"@type":"ListItem","@id":"https:\/\/chauquest.com\/index.php\/article\/french-dpe-database-in-the-browser-duckdb-wasm\/#listItem","name":"The whole French DPE database in a browser tab : Parquet + DuckDB-WASM, no server"},"previousItem":{"@type":"ListItem","@id":"https:\/\/chauquest.com\/index.php\/category\/engineering\/#listItem","name":"Engineering"}},{"@type":"ListItem","@id":"https:\/\/chauquest.com\/index.php\/article\/french-dpe-database-in-the-browser-duckdb-wasm\/#listItem","position":4,"name":"The whole French DPE database in a browser tab : Parquet + DuckDB-WASM, no server","previousItem":{"@type":"ListItem","@id":"https:\/\/chauquest.com\/index.php\/category\/engineering\/it-development\/#listItem","name":"IT &amp; Development"}}]},{"@type":"Person","@id":"https:\/\/chauquest.com\/#person","name":"Chauchat Eymeric","image":{"@type":"ImageObject","@id":"https:\/\/chauquest.com\/index.php\/article\/french-dpe-database-in-the-browser-duckdb-wasm\/#personImage","url":"https:\/\/secure.gravatar.com\/avatar\/733daea7054c24e570a41a59b2a06d4b4c62fa3d15233b6543f4f65698b9c0f2?s=96&d=mm&r=g","width":96,"height":96,"caption":"Chauchat Eymeric"}},{"@type":"Person","@id":"https:\/\/chauquest.com\/index.php\/author\/chauquest-com\/#author","url":"https:\/\/chauquest.com\/index.php\/author\/chauquest-com\/","name":"Chauchat Eymeric","image":{"@type":"ImageObject","@id":"https:\/\/chauquest.com\/index.php\/article\/french-dpe-database-in-the-browser-duckdb-wasm\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/733daea7054c24e570a41a59b2a06d4b4c62fa3d15233b6543f4f65698b9c0f2?s=96&d=mm&r=g","width":96,"height":96,"caption":"Chauchat Eymeric"}},{"@type":"WebPage","@id":"https:\/\/chauquest.com\/index.php\/article\/french-dpe-database-in-the-browser-duckdb-wasm\/#webpage","url":"https:\/\/chauquest.com\/index.php\/article\/french-dpe-database-in-the-browser-duckdb-wasm\/","name":"DuckDB-WASM + Parquet : 15M rows in the browser, no server","description":"How I serve 15.5 million French energy certificates as static Parquet files, queried in the browser by DuckDB-WASM with HTTP range requests, for almost $0.","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/chauquest.com\/#website"},"breadcrumb":{"@id":"https:\/\/chauquest.com\/index.php\/article\/french-dpe-database-in-the-browser-duckdb-wasm\/#breadcrumblist"},"author":{"@id":"https:\/\/chauquest.com\/index.php\/author\/chauquest-com\/#author"},"creator":{"@id":"https:\/\/chauquest.com\/index.php\/author\/chauquest-com\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/duckdb-wasm-french-dpe-database-cover.jpg","@id":"https:\/\/chauquest.com\/index.php\/article\/french-dpe-database-in-the-browser-duckdb-wasm\/#mainImage","width":1600,"height":900,"caption":"recherche-maison.com : a search in Foix (09000) and the certificate behind one result."},"primaryImageOfPage":{"@id":"https:\/\/chauquest.com\/index.php\/article\/french-dpe-database-in-the-browser-duckdb-wasm\/#mainImage"},"datePublished":"2026-10-15T15:56:16+02:00","dateModified":"2026-10-18T23:53:10+02:00"},{"@type":"WebSite","@id":"https:\/\/chauquest.com\/#website","url":"https:\/\/chauquest.com\/","name":"chauquest.com","description":"my Engineering blog","inLanguage":"en-US","publisher":{"@id":"https:\/\/chauquest.com\/#person"}}]},"og:locale":"en_US","og:site_name":"Eymeric Chauchat - my Engineering blog","og:type":"article","og:title":"DuckDB-WASM + Parquet : 15M rows in the browser, no server","og:description":"How I serve 15.5 million French energy certificates as static Parquet files, queried in the browser by DuckDB-WASM with HTTP range requests, for almost $0.","og:url":"https:\/\/chauquest.com\/index.php\/article\/french-dpe-database-in-the-browser-duckdb-wasm\/","og:image":"https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/duckdb-wasm-french-dpe-database-cover.jpg","og:image:secure_url":"https:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/duckdb-wasm-french-dpe-database-cover.jpg","og:image:width":"1600","og:image:height":"900","article:published_time":"2026-10-15T13:56:16+00:00","article:modified_time":"2026-10-18T21:53:10+00:00","twitter:card":"summary_large_image","twitter:title":"DuckDB-WASM + Parquet : 15M rows in the browser, no server","twitter:description":"How I serve 15.5 million French energy certificates as static Parquet files, queried in the browser by DuckDB-WASM with HTTP range requests, for almost $0.","twitter:image":"http:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/duckdb-wasm-french-dpe-database-cover.jpg"},"aioseo_meta_data":{"post_id":"906","title":"DuckDB-WASM + Parquet : 15M rows in the browser, no server","description":"How I serve 15.5 million French energy certificates as static Parquet files, queried in the browser by DuckDB-WASM with HTTP range requests, for almost $0.","keywords":null,"keyphrases":{"focus":{"keyphrase":"duckdb-wasm parquet","score":0,"analysis":[]},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"featured","og_image_url":"http:\/\/chauquest.com\/wp-content\/uploads\/2026\/10\/duckdb-wasm-french-dpe-database-cover.jpg","og_image_width":"1600","og_image_height":"900","og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":true,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"BlogPosting","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":0,"frequency":"default","local_seo":null,"limit_modified_date":false,"created":"2026-10-15 12:06:46","updated":"2026-10-18 22:55:02","focus_keyword":"duckdb-wasm parquet","additional_keywords":null,"truseo_locale":null,"ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/chauquest.com\/\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/chauquest.com\/index.php\/category\/engineering\/\" title=\"Engineering\">Engineering<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/chauquest.com\/index.php\/category\/engineering\/it-development\/\" title=\"IT &amp; Development\">IT &amp; Development<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tThe whole French DPE database in a browser tab : Parquet + DuckDB-WASM, no server\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/chauquest.com\/"},{"label":"Engineering","link":"https:\/\/chauquest.com\/index.php\/category\/engineering\/"},{"label":"IT &amp; Development","link":"https:\/\/chauquest.com\/index.php\/category\/engineering\/it-development\/"},{"label":"The whole French DPE database in a browser tab : Parquet + DuckDB-WASM, no server","link":"https:\/\/chauquest.com\/index.php\/article\/french-dpe-database-in-the-browser-duckdb-wasm\/"}],"_links":{"self":[{"href":"https:\/\/chauquest.com\/index.php\/wp-json\/wp\/v2\/posts\/906","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/chauquest.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/chauquest.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/chauquest.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/chauquest.com\/index.php\/wp-json\/wp\/v2\/comments?post=906"}],"version-history":[{"count":5,"href":"https:\/\/chauquest.com\/index.php\/wp-json\/wp\/v2\/posts\/906\/revisions"}],"predecessor-version":[{"id":931,"href":"https:\/\/chauquest.com\/index.php\/wp-json\/wp\/v2\/posts\/906\/revisions\/931"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/chauquest.com\/index.php\/wp-json\/wp\/v2\/media\/922"}],"wp:attachment":[{"href":"https:\/\/chauquest.com\/index.php\/wp-json\/wp\/v2\/media?parent=906"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/chauquest.com\/index.php\/wp-json\/wp\/v2\/categories?post=906"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/chauquest.com\/index.php\/wp-json\/wp\/v2\/tags?post=906"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}